xref: /aosp_15_r20/external/clang/test/CodeGen/mangle.c (revision 67e74705e28f6214e480b399dd47ea732279e315)
1*67e74705SXin Li // RUN: %clang_cc1 -triple i386-pc-linux-gnu -emit-llvm -o - %s | FileCheck %s
2*67e74705SXin Li 
3*67e74705SXin Li // CHECK: @foo
4*67e74705SXin Li 
5*67e74705SXin Li // Make sure we mangle overloadable, even in C system headers.
6*67e74705SXin Li # 1 "somesystemheader.h" 1 3 4
7*67e74705SXin Li // CHECK: @_Z2f0i
f0(int a)8*67e74705SXin Li void __attribute__((__overloadable__)) f0(int a) {}
9*67e74705SXin Li // CHECK: @_Z2f0l
f0(long b)10*67e74705SXin Li void __attribute__((__overloadable__)) f0(long b) {}
11*67e74705SXin Li 
12*67e74705SXin Li // CHECK: @bar
13*67e74705SXin Li 
14*67e74705SXin Li // These should get merged.
15*67e74705SXin Li void foo() __asm__("bar");
16*67e74705SXin Li void foo2() __asm__("bar");
17*67e74705SXin Li 
18*67e74705SXin Li int nux __asm__("foo");
19*67e74705SXin Li extern float nux2 __asm__("foo");
20*67e74705SXin Li 
test()21*67e74705SXin Li int test() {
22*67e74705SXin Li   foo();
23*67e74705SXin Li   foo2();
24*67e74705SXin Li 
25*67e74705SXin Li   return nux + nux2;
26*67e74705SXin Li }
27*67e74705SXin Li 
28*67e74705SXin Li 
29*67e74705SXin Li // Function becomes a variable.
30*67e74705SXin Li void foo3() __asm__("var");
31*67e74705SXin Li 
test2()32*67e74705SXin Li void test2() {
33*67e74705SXin Li   foo3();
34*67e74705SXin Li }
35*67e74705SXin Li int foo4 __asm__("var") = 4;
36*67e74705SXin Li 
37*67e74705SXin Li 
38*67e74705SXin Li // Variable becomes a function
39*67e74705SXin Li extern int foo5 __asm__("var2");
40*67e74705SXin Li 
test3()41*67e74705SXin Li void test3() {
42*67e74705SXin Li   foo5 = 1;
43*67e74705SXin Li }
44*67e74705SXin Li 
45*67e74705SXin Li void foo6() __asm__("var2");
foo6()46*67e74705SXin Li void foo6() {
47*67e74705SXin Li }
48*67e74705SXin Li 
49*67e74705SXin Li 
50*67e74705SXin Li 
51*67e74705SXin Li int foo7 __asm__("foo7") __attribute__((used));
52*67e74705SXin Li float foo8 __asm__("foo7") = 42;
53*67e74705SXin Li 
54*67e74705SXin Li // PR4412
55*67e74705SXin Li int func(void);
56*67e74705SXin Li extern int func (void) __asm__ ("FUNC");
57*67e74705SXin Li 
58*67e74705SXin Li // CHECK: @FUNC
func(void)59*67e74705SXin Li int func(void) {
60*67e74705SXin Li   return 42;
61*67e74705SXin Li }
62*67e74705SXin Li 
63*67e74705SXin Li // CHECK: @_Z4foo9Dv4_f
64*67e74705SXin Li typedef __attribute__(( vector_size(16) )) float float4;
foo9(float4 f)65*67e74705SXin Li void __attribute__((__overloadable__)) foo9(float4 f) {}
66*67e74705SXin Li 
67*67e74705SXin Li // Intrinsic calls.
68*67e74705SXin Li extern int llvm_cas(volatile int*, int, int)
69*67e74705SXin Li   __asm__("llvm.atomic.cmp.swap.i32.p0i32");
70*67e74705SXin Li 
foo10(volatile int * add,int from,int to)71*67e74705SXin Li int foo10(volatile int* add, int from, int to) {
72*67e74705SXin Li   // CHECK: call i32 @llvm.atomic.cmp.swap.i32.p0i32
73*67e74705SXin Li   return llvm_cas(add, from, to);
74*67e74705SXin Li }
75