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