forked from OSchip/llvm-project
[OpenCL] Fix overloading ranking rules for addrspace conversions.
Extend ranking to work with address spaces correctly when resolving overloads. Differential Revision: https://reviews.llvm.org/D56735 llvm-svn: 351546
This commit is contained in:
parent
c196488531
commit
ef19af1942
|
@ -4019,9 +4019,12 @@ CompareQualificationConversions(Sema &S,
|
|||
// to unwrap. This essentially mimics what
|
||||
// IsQualificationConversion does, but here we're checking for a
|
||||
// strict subset of qualifiers.
|
||||
if (T1.getCVRQualifiers() == T2.getCVRQualifiers())
|
||||
if (T1.getQualifiers().withoutObjCLifetime() ==
|
||||
T2.getQualifiers().withoutObjCLifetime())
|
||||
// The qualifiers are the same, so this doesn't tell us anything
|
||||
// about how the sequences rank.
|
||||
// ObjC ownership quals are omitted above as they interfere with
|
||||
// the ARC overload rule.
|
||||
;
|
||||
else if (T2.isMoreQualifiedThan(T1)) {
|
||||
// T1 has fewer qualifiers, so it could be the better sequence.
|
||||
|
|
|
@ -0,0 +1,23 @@
|
|||
// RUN: %clang_cc1 %s -verify -pedantic -fsyntax-only -cl-std=c++
|
||||
|
||||
// expected-no-diagnostics
|
||||
|
||||
struct RetGlob {
|
||||
int dummy;
|
||||
};
|
||||
|
||||
struct RetGen {
|
||||
char dummy;
|
||||
};
|
||||
|
||||
RetGlob foo(const __global int *);
|
||||
RetGen foo(const __generic int *);
|
||||
|
||||
void kernel k() {
|
||||
__global int *ArgGlob;
|
||||
__generic int *ArgGen;
|
||||
__local int *ArgLoc;
|
||||
RetGlob TestGlob = foo(ArgGlob);
|
||||
RetGen TestGen = foo(ArgGen);
|
||||
TestGen = foo(ArgLoc);
|
||||
}
|
Loading…
Reference in New Issue