// RUN: %clang_cc1 -triple i386-pc-linux-gnu -emit-llvm -o - %s | FileCheck %s // CHECK: @foo // Make sure we mangle overloadable, even in C system headers. # 1 "somesystemheader.h" 1 3 4 // CHECK: @_Z2f0i void __attribute__((__overloadable__)) f0(int a) {} // CHECK: @_Z2f0l void __attribute__((__overloadable__)) f0(long b) {} // Unless it's unmarked. // CHECK: @f0 void f0(float b) {} // CHECK: @bar // These should get merged. void foo() __asm__("bar"); void foo2() __asm__("bar"); int nux __asm__("foo"); extern float nux2 __asm__("foo"); int test() { foo(); foo2(); return nux + nux2; } // Function becomes a variable. void foo3() __asm__("var"); void test2() { foo3(); } int foo4 __asm__("var") = 4; // Variable becomes a function extern int foo5 __asm__("var2"); void test3() { foo5 = 1; } void foo6() __asm__("var2"); void foo6() { } int foo7 __asm__("foo7") __attribute__((used)); float foo8 __asm__("foo7") = 42; // PR4412 int func(void); extern int func (void) __asm__ ("FUNC"); // CHECK: @FUNC int func(void) { return 42; } // CHECK: @_Z4foo9Dv4_f typedef __attribute__(( vector_size(16) )) float float4; void __attribute__((__overloadable__)) foo9(float4 f) {} // Intrinsic calls. extern int llvm_cas(volatile int*, int, int) __asm__("llvm.atomic.cmp.swap.i32.p0i32"); int foo10(volatile int* add, int from, int to) { // CHECK: call i32 @llvm.atomic.cmp.swap.i32.p0i32 return llvm_cas(add, from, to); }