diff options
author | Neil Hickey <neil.hickey@arm.com> | 2019-07-16 14:57:32 +0000 |
---|---|---|
committer | Neil Hickey <neil.hickey@arm.com> | 2019-07-16 14:57:32 +0000 |
commit | 8ece3b6719948a08d1f654d97f53dbd08891199d (patch) | |
tree | 1412390fe24e2b78182f07c0995fcb0430aaca4a /clang/lib | |
parent | 655cb4a2d702b70899f3ad384d047537e02698d8 (diff) | |
download | bcm5719-llvm-8ece3b6719948a08d1f654d97f53dbd08891199d.tar.gz bcm5719-llvm-8ece3b6719948a08d1f654d97f53dbd08891199d.zip |
[OpenCL] Fixing sampler initialisations for C++ mode.
Allow conversions between integer and sampler type.
Differential Revision: https://reviews.llvm.org/D64791
llvm-svn: 366212
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Sema/SemaInit.cpp | 6 | ||||
-rw-r--r-- | clang/lib/Sema/SemaOverload.cpp | 4 |
2 files changed, 7 insertions, 3 deletions
diff --git a/clang/lib/Sema/SemaInit.cpp b/clang/lib/Sema/SemaInit.cpp index b3b34699eb6..bc106960933 100644 --- a/clang/lib/Sema/SemaInit.cpp +++ b/clang/lib/Sema/SemaInit.cpp @@ -5640,6 +5640,9 @@ void InitializationSequence::InitializeFrom(Sema &S, bool allowObjCWritebackConversion = S.getLangOpts().ObjCAutoRefCount && Entity.isParameterKind(); + if (TryOCLSamplerInitialization(S, *this, DestType, Initializer)) + return; + // We're at the end of the line for C: it's either a write-back conversion // or it's a C assignment. There's no need to check anything else. if (!S.getLangOpts().CPlusPlus) { @@ -5649,9 +5652,6 @@ void InitializationSequence::InitializeFrom(Sema &S, return; } - if (TryOCLSamplerInitialization(S, *this, DestType, Initializer)) - return; - if (TryOCLZeroOpaqueTypeInitialization(S, *this, DestType, Initializer)) return; diff --git a/clang/lib/Sema/SemaOverload.cpp b/clang/lib/Sema/SemaOverload.cpp index 77e6767c2b8..d8c4ea48ebc 100644 --- a/clang/lib/Sema/SemaOverload.cpp +++ b/clang/lib/Sema/SemaOverload.cpp @@ -1851,6 +1851,10 @@ static bool IsStandardConversion(Sema &S, Expr* From, QualType ToType, (From->EvaluateKnownConstInt(S.getASTContext()) == 0)) { SCS.Second = ICK_Zero_Queue_Conversion; FromType = ToType; + } else if (ToType->isSamplerT() && + From->isIntegerConstantExpr(S.getASTContext())) { + SCS.Second = ICK_Compatible_Conversion; + FromType = ToType; } else { // No second conversion required. SCS.Second = ICK_Identity; |