1a5728872c7702ddd09537c95bc3cbd20e1f2fb09Daniel Dunbar// RUN: %clang_cc1 -triple i386-pc-linux-gnu -emit-llvm -o - %s | FileCheck %s 2524ed953823ee605793c93452a2f86e4a7c4a2feDaniel Dunbar 34e274e955451632e6ba287bb03fb7a7840c3505eRafael Espindola// CHECK: @foo 4524ed953823ee605793c93452a2f86e4a7c4a2feDaniel Dunbar 5457e2815d43fa68f7ff7cd2f7e9d1bf7b6fdc653Douglas Gregor// Make sure we mangle overloadable, even in C system headers. 6524ed953823ee605793c93452a2f86e4a7c4a2feDaniel Dunbar# 1 "somesystemheader.h" 1 3 4 7457e2815d43fa68f7ff7cd2f7e9d1bf7b6fdc653Douglas Gregor// CHECK: @_Z2f0i 8524ed953823ee605793c93452a2f86e4a7c4a2feDaniel Dunbarvoid __attribute__((__overloadable__)) f0(int a) {} 9457e2815d43fa68f7ff7cd2f7e9d1bf7b6fdc653Douglas Gregor// CHECK: @_Z2f0l 10524ed953823ee605793c93452a2f86e4a7c4a2feDaniel Dunbarvoid __attribute__((__overloadable__)) f0(long b) {} 11ca3f25c1fb9bbf0d807985baee460670b7f195b4Chris Lattner 124e274e955451632e6ba287bb03fb7a7840c3505eRafael Espindola// CHECK: @bar 13ca3f25c1fb9bbf0d807985baee460670b7f195b4Chris Lattner 14ca3f25c1fb9bbf0d807985baee460670b7f195b4Chris Lattner// These should get merged. 15ca3f25c1fb9bbf0d807985baee460670b7f195b4Chris Lattnervoid foo() __asm__("bar"); 16ca3f25c1fb9bbf0d807985baee460670b7f195b4Chris Lattnervoid foo2() __asm__("bar"); 17ca3f25c1fb9bbf0d807985baee460670b7f195b4Chris Lattner 18ca3f25c1fb9bbf0d807985baee460670b7f195b4Chris Lattnerint nux __asm__("foo"); 19ca3f25c1fb9bbf0d807985baee460670b7f195b4Chris Lattnerextern float nux2 __asm__("foo"); 20ca3f25c1fb9bbf0d807985baee460670b7f195b4Chris Lattner 21ca3f25c1fb9bbf0d807985baee460670b7f195b4Chris Lattnerint test() { 22ca3f25c1fb9bbf0d807985baee460670b7f195b4Chris Lattner foo(); 23ca3f25c1fb9bbf0d807985baee460670b7f195b4Chris Lattner foo2(); 24ca3f25c1fb9bbf0d807985baee460670b7f195b4Chris Lattner 25ca3f25c1fb9bbf0d807985baee460670b7f195b4Chris Lattner return nux + nux2; 26ca3f25c1fb9bbf0d807985baee460670b7f195b4Chris Lattner} 27570585c91dee98d7ba8ccf1198c03208ba17966bChris Lattner 28570585c91dee98d7ba8ccf1198c03208ba17966bChris Lattner 29570585c91dee98d7ba8ccf1198c03208ba17966bChris Lattner// Function becomes a variable. 30570585c91dee98d7ba8ccf1198c03208ba17966bChris Lattnervoid foo3() __asm__("var"); 31570585c91dee98d7ba8ccf1198c03208ba17966bChris Lattner 32570585c91dee98d7ba8ccf1198c03208ba17966bChris Lattnervoid test2() { 33570585c91dee98d7ba8ccf1198c03208ba17966bChris Lattner foo3(); 34570585c91dee98d7ba8ccf1198c03208ba17966bChris Lattner} 35570585c91dee98d7ba8ccf1198c03208ba17966bChris Lattnerint foo4 __asm__("var") = 4; 36570585c91dee98d7ba8ccf1198c03208ba17966bChris Lattner 370558e79840bfdbbd38c6e2b4f6765bf0158e85f4Chris Lattner 380558e79840bfdbbd38c6e2b4f6765bf0158e85f4Chris Lattner// Variable becomes a function 390558e79840bfdbbd38c6e2b4f6765bf0158e85f4Chris Lattnerextern int foo5 __asm__("var2"); 400558e79840bfdbbd38c6e2b4f6765bf0158e85f4Chris Lattner 410558e79840bfdbbd38c6e2b4f6765bf0158e85f4Chris Lattnervoid test3() { 420558e79840bfdbbd38c6e2b4f6765bf0158e85f4Chris Lattner foo5 = 1; 430558e79840bfdbbd38c6e2b4f6765bf0158e85f4Chris Lattner} 440558e79840bfdbbd38c6e2b4f6765bf0158e85f4Chris Lattner 450558e79840bfdbbd38c6e2b4f6765bf0158e85f4Chris Lattnervoid foo6() __asm__("var2"); 460558e79840bfdbbd38c6e2b4f6765bf0158e85f4Chris Lattnervoid foo6() { 470558e79840bfdbbd38c6e2b4f6765bf0158e85f4Chris Lattner} 4835f38a2c22d68c22e2dbe8e9ee84c120c8f327bbChris Lattner 4935f38a2c22d68c22e2dbe8e9ee84c120c8f327bbChris Lattner 5035f38a2c22d68c22e2dbe8e9ee84c120c8f327bbChris Lattner 5135f38a2c22d68c22e2dbe8e9ee84c120c8f327bbChris Lattnerint foo7 __asm__("foo7") __attribute__((used)); 5235f38a2c22d68c22e2dbe8e9ee84c120c8f327bbChris Lattnerfloat foo8 __asm__("foo7") = 42; 53457e2815d43fa68f7ff7cd2f7e9d1bf7b6fdc653Douglas Gregor 54457e2815d43fa68f7ff7cd2f7e9d1bf7b6fdc653Douglas Gregor// PR4412 55457e2815d43fa68f7ff7cd2f7e9d1bf7b6fdc653Douglas Gregorint func(void); 56457e2815d43fa68f7ff7cd2f7e9d1bf7b6fdc653Douglas Gregorextern int func (void) __asm__ ("FUNC"); 57457e2815d43fa68f7ff7cd2f7e9d1bf7b6fdc653Douglas Gregor 584e274e955451632e6ba287bb03fb7a7840c3505eRafael Espindola// CHECK: @FUNC 59457e2815d43fa68f7ff7cd2f7e9d1bf7b6fdc653Douglas Gregorint func(void) { 60457e2815d43fa68f7ff7cd2f7e9d1bf7b6fdc653Douglas Gregor return 42; 61457e2815d43fa68f7ff7cd2f7e9d1bf7b6fdc653Douglas Gregor} 620e5f067da58e43aa9bdfd1317283b52d4beeb19aNick Lewycky 630e5f067da58e43aa9bdfd1317283b52d4beeb19aNick Lewycky// CHECK: @_Z4foo9Dv4_f 640e5f067da58e43aa9bdfd1317283b52d4beeb19aNick Lewyckytypedef __attribute__(( vector_size(16) )) float float4; 650e5f067da58e43aa9bdfd1317283b52d4beeb19aNick Lewyckyvoid __attribute__((__overloadable__)) foo9(float4 f) {} 666931743e29845d66d919a83db5a7b734f57ffdf2Peter Collingbourne 676931743e29845d66d919a83db5a7b734f57ffdf2Peter Collingbourne// Intrinsic calls. 686931743e29845d66d919a83db5a7b734f57ffdf2Peter Collingbourneextern int llvm_cas(volatile int*, int, int) 696931743e29845d66d919a83db5a7b734f57ffdf2Peter Collingbourne __asm__("llvm.atomic.cmp.swap.i32.p0i32"); 706931743e29845d66d919a83db5a7b734f57ffdf2Peter Collingbourne 716931743e29845d66d919a83db5a7b734f57ffdf2Peter Collingbourneint foo10(volatile int* add, int from, int to) { 726931743e29845d66d919a83db5a7b734f57ffdf2Peter Collingbourne // CHECK: call i32 @llvm.atomic.cmp.swap.i32.p0i32 736931743e29845d66d919a83db5a7b734f57ffdf2Peter Collingbourne return llvm_cas(add, from, to); 746931743e29845d66d919a83db5a7b734f57ffdf2Peter Collingbourne} 75