1 // RUN: %clang_cc1 -triple %itanium_abi_triple -emit-llvm %s -o - | FileCheck %s 2 // CHECK: _Z1fPA10_1X 3 // CHECK: _Z1fPFvE 4 5 int __attribute__((overloadable)) f(int x) { return x; } 6 float __attribute__((overloadable)) f(float x) { return x; } 7 double __attribute__((overloadable)) f(double x) { return x; } 8 double _Complex __attribute__((overloadable)) f(double _Complex x) { return x; } 9 typedef short v4hi __attribute__ ((__vector_size__ (8))); 10 v4hi __attribute__((overloadable)) f(v4hi x) { return x; } 11 12 struct X { }; 13 void __attribute__((overloadable)) f(struct X (*ptr)[10]) { } 14 15 void __attribute__((overloadable)) f(int x, int y, ...) { } 16 17 void __attribute__((overloadable)) f(void (*x)()) {} 18 19 int main() { 20 int iv = 17; 21 float fv = 3.0f; 22 double dv = 4.0; 23 double _Complex cdv; 24 v4hi vv; 25 26 iv = f(iv); 27 fv = f(fv); 28 dv = f(dv); 29 cdv = f(cdv); 30 vv = f(vv); 31 } 32 33 // Ensuring that we pick the correct function for taking the address of an 34 // overload when conversions are involved. 35 36 void addrof_many(int *a) __attribute__((overloadable, enable_if(0, ""))); 37 void addrof_many(void *a) __attribute__((overloadable)); 38 void addrof_many(char *a) __attribute__((overloadable)); 39 40 void addrof_single(int *a) __attribute__((overloadable, enable_if(0, ""))); 41 void addrof_single(char *a) __attribute__((overloadable, enable_if(0, ""))); 42 void addrof_single(char *a) __attribute__((overloadable)); 43 44 // CHECK-LABEL: define void @foo 45 void foo() { 46 // CHECK: store void (i8*)* @_Z11addrof_manyPc 47 void (*p1)(char *) = &addrof_many; 48 // CHECK: store void (i8*)* @_Z11addrof_manyPv 49 void (*p2)(void *) = &addrof_many; 50 // CHECK: void (i8*)* @_Z11addrof_manyPc 51 void *vp1 = (void (*)(char *)) & addrof_many; 52 // CHECK: void (i8*)* @_Z11addrof_manyPv 53 void *vp2 = (void (*)(void *)) & addrof_many; 54 55 // CHECK: store void (i8*)* @_Z13addrof_singlePc 56 void (*p3)(char *) = &addrof_single; 57 // CHECK: @_Z13addrof_singlePc 58 void (*p4)(int *) = &addrof_single; 59 // CHECK: @_Z13addrof_singlePc 60 void *vp3 = &addrof_single; 61 } 62