diff options
author | Yaxun Liu <Yaxun.Liu@amd.com> | 2017-05-18 18:51:09 +0000 |
---|---|---|
committer | Yaxun Liu <Yaxun.Liu@amd.com> | 2017-05-18 18:51:09 +0000 |
commit | 6d96f163476be00b36a9acf0d5abe1ac0136e12f (patch) | |
tree | e2c369d3a0e3bbefc85bc981d62707f91b9abb26 /clang/lib/CodeGen/CGExprScalar.cpp | |
parent | b00ffd8cb7a0f5fd51c9968e4f59b4b3eca52e47 (diff) | |
download | bcm5719-llvm-6d96f163476be00b36a9acf0d5abe1ac0136e12f.tar.gz bcm5719-llvm-6d96f163476be00b36a9acf0d5abe1ac0136e12f.zip |
CodeGen: Cast alloca to expected address space
Alloca always returns a pointer in alloca address space, which may
be different from the type defined by the language. For example,
in C++ the auto variables are in the default address space. Therefore
cast alloca to the expected address space when necessary.
Differential Revision: https://reviews.llvm.org/D32248
llvm-svn: 303370
Diffstat (limited to 'clang/lib/CodeGen/CGExprScalar.cpp')
-rw-r--r-- | clang/lib/CodeGen/CGExprScalar.cpp | 7 |
1 files changed, 3 insertions, 4 deletions
diff --git a/clang/lib/CodeGen/CGExprScalar.cpp b/clang/lib/CodeGen/CGExprScalar.cpp index b8d830ee9f3..048b50d8261 100644 --- a/clang/lib/CodeGen/CGExprScalar.cpp +++ b/clang/lib/CodeGen/CGExprScalar.cpp @@ -1579,10 +1579,9 @@ Value *ScalarExprEmitter::VisitCastExpr(CastExpr *CE) { } // Since target may map different address spaces in AST to the same address // space, an address space conversion may end up as a bitcast. - auto *Src = Visit(E); - return CGF.CGM.getTargetCodeGenInfo().performAddrSpaceCast(CGF, Src, - E->getType(), - DestTy); + return CGF.CGM.getTargetCodeGenInfo().performAddrSpaceCast( + CGF, Visit(E), E->getType()->getPointeeType().getAddressSpace(), + DestTy->getPointeeType().getAddressSpace(), ConvertType(DestTy)); } case CK_AtomicToNonAtomic: case CK_NonAtomicToAtomic: |