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 Livoid __attribute__((__overloadable__)) f0(int a) {} 9*67e74705SXin Li // CHECK: @_Z2f0l f0(long b)10*67e74705SXin Livoid __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 Liint 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 Livoid 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 Livoid test3() { 42*67e74705SXin Li foo5 = 1; 43*67e74705SXin Li } 44*67e74705SXin Li 45*67e74705SXin Li void foo6() __asm__("var2"); foo6()46*67e74705SXin Livoid 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 Liint 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 Livoid __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 Liint 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