This patch allows us to perform incompatible pointer conversions when
resolving overloads in C. So, the following code will no longer fail to
compile (though it will still emit warnings, assuming the user hasn't
opted out of them):
```
void foo(char *) __attribute__((overloadable));
void foo(int) __attribute__((overloadable));
void callFoo() {
unsigned char bar[128];
foo(bar); // selects the char* overload.
}
```
These conversions are ranked below all others, so:
A. Any other viable conversion will win out
B. If we had another incompatible pointer conversion in the example
above (e.g. `void foo(int *)`), we would complain about
an ambiguity.
Differential Revision: https://reviews.llvm.org/D24113
llvm-svn: 280553
12 lines
464 B
Common Lisp
12 lines
464 B
Common Lisp
// RUN: %clang_cc1 %s -verify -pedantic -fsyntax-only
|
|
|
|
void __attribute__((overloadable)) foo(event_t, __local char *); // expected-note {{candidate function}}
|
|
void __attribute__((overloadable)) foo(event_t, __local float *); // expected-note {{candidate function}}
|
|
|
|
void kernel ker(__local char *src1, __local float *src2, __global int *src3) {
|
|
event_t evt;
|
|
foo(evt, src1);
|
|
foo(0, src2);
|
|
foo(evt, src3); // expected-error {{call to 'foo' is ambiguous}}
|
|
}
|