diff options
| author | Dimitry Andric <dim@FreeBSD.org> | 2016-07-23 20:44:14 +0000 |
|---|---|---|
| committer | Dimitry Andric <dim@FreeBSD.org> | 2016-07-23 20:44:14 +0000 |
| commit | 2b6b257f4e5503a7a2675bdb8735693db769f75c (patch) | |
| tree | e85e046ae7003fe3bcc8b5454cd0fa3f7407b470 /test/CodeGen/overloadable.c | |
| parent | b4348ed0b7e90c0831b925fbee00b5f179a99796 (diff) | |
Notes
Diffstat (limited to 'test/CodeGen/overloadable.c')
| -rw-r--r-- | test/CodeGen/overloadable.c | 30 |
1 files changed, 30 insertions, 0 deletions
diff --git a/test/CodeGen/overloadable.c b/test/CodeGen/overloadable.c index 4946c6d92866..634820cfe743 100644 --- a/test/CodeGen/overloadable.c +++ b/test/CodeGen/overloadable.c @@ -29,3 +29,33 @@ int main() { cdv = f(cdv); vv = f(vv); } + +// Ensuring that we pick the correct function for taking the address of an +// overload when conversions are involved. + +void addrof_many(int *a) __attribute__((overloadable, enable_if(0, ""))); +void addrof_many(void *a) __attribute__((overloadable)); +void addrof_many(char *a) __attribute__((overloadable)); + +void addrof_single(int *a) __attribute__((overloadable, enable_if(0, ""))); +void addrof_single(char *a) __attribute__((overloadable, enable_if(0, ""))); +void addrof_single(char *a) __attribute__((overloadable)); + +// CHECK-LABEL: define void @foo +void foo() { + // CHECK: store void (i8*)* @_Z11addrof_manyPc + void (*p1)(char *) = &addrof_many; + // CHECK: store void (i8*)* @_Z11addrof_manyPv + void (*p2)(void *) = &addrof_many; + // CHECK: void (i8*)* @_Z11addrof_manyPc + void *vp1 = (void (*)(char *)) & addrof_many; + // CHECK: void (i8*)* @_Z11addrof_manyPv + void *vp2 = (void (*)(void *)) & addrof_many; + + // CHECK: store void (i8*)* @_Z13addrof_singlePc + void (*p3)(char *) = &addrof_single; + // CHECK: @_Z13addrof_singlePc + void (*p4)(int *) = &addrof_single; + // CHECK: @_Z13addrof_singlePc + void *vp3 = &addrof_single; +} |
