|  | // 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); | 
|  | } |