diff options
author | Sven van Haastregt <sven.vanhaastregt@arm.com> | 2019-11-21 10:39:33 +0000 |
---|---|---|
committer | Sven van Haastregt <sven.vanhaastregt@arm.com> | 2019-11-21 10:39:33 +0000 |
commit | 35388dcbbc4ce6ce7125f718b3050be33c339464 (patch) | |
tree | bd0fcf5e68094ed75c5c37c8973d552beaca8544 /clang/lib/Sema/SemaExpr.cpp | |
parent | 5cf58768cb3ba31ee37facaf23f7a74f78781590 (diff) | |
download | bcm5719-llvm-35388dcbbc4ce6ce7125f718b3050be33c339464.tar.gz bcm5719-llvm-35388dcbbc4ce6ce7125f718b3050be33c339464.zip |
[OpenCL] Fix address space for base method call (PR43145)
Clang was creating an UncheckedDerivedToBase ImplicitCastExpr that was
also casting between address spaces. Insert an ImplicitCastExpr node
for doing the address space conversion.
Differential Revision: https://reviews.llvm.org/D69810
Diffstat (limited to 'clang/lib/Sema/SemaExpr.cpp')
-rw-r--r-- | clang/lib/Sema/SemaExpr.cpp | 14 |
1 files changed, 14 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaExpr.cpp b/clang/lib/Sema/SemaExpr.cpp index ea4321cdd72..3be8af1dd9e 100644 --- a/clang/lib/Sema/SemaExpr.cpp +++ b/clang/lib/Sema/SemaExpr.cpp @@ -2711,6 +2711,20 @@ Sema::PerformObjectMemberConversion(Expr *From, FromRecordType = FromType; DestType = DestRecordType; } + + LangAS FromAS = FromRecordType.getAddressSpace(); + LangAS DestAS = DestRecordType.getAddressSpace(); + if (FromAS != DestAS) { + QualType FromRecordTypeWithoutAS = + Context.removeAddrSpaceQualType(FromRecordType); + QualType FromTypeWithDestAS = + Context.getAddrSpaceQualType(FromRecordTypeWithoutAS, DestAS); + if (PointerConversions) + FromTypeWithDestAS = Context.getPointerType(FromTypeWithDestAS); + From = ImpCastExprToType(From, FromTypeWithDestAS, + CK_AddressSpaceConversion, From->getValueKind()) + .get(); + } } else { // No conversion necessary. return From; |