diff options
| -rw-r--r-- | clang/lib/CodeGen/CGExprScalar.cpp | 3 | ||||
| -rw-r--r-- | clang/test/CodeGenOpenCL/const-str-array-decay.cl | 11 |
2 files changed, 13 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/CGExprScalar.cpp b/clang/lib/CodeGen/CGExprScalar.cpp index a4430dffb05..0fef4462eb9 100644 --- a/clang/lib/CodeGen/CGExprScalar.cpp +++ b/clang/lib/CodeGen/CGExprScalar.cpp @@ -1412,7 +1412,8 @@ Value *ScalarExprEmitter::VisitCastExpr(CastExpr *CE) { if (!E->getType()->isVariableArrayType()) { assert(isa<llvm::PointerType>(V->getType()) && "Expected pointer"); V = CGF.Builder.CreatePointerCast( - V, ConvertType(E->getType())->getPointerTo()); + V, ConvertType(E->getType())->getPointerTo( + V->getType()->getPointerAddressSpace())); assert(isa<llvm::ArrayType>(V->getType()->getPointerElementType()) && "Expected pointer to array"); diff --git a/clang/test/CodeGenOpenCL/const-str-array-decay.cl b/clang/test/CodeGenOpenCL/const-str-array-decay.cl new file mode 100644 index 00000000000..dbbe08989cb --- /dev/null +++ b/clang/test/CodeGenOpenCL/const-str-array-decay.cl @@ -0,0 +1,11 @@ +// RUN: %clang_cc1 %s -emit-llvm -o - -ffake-address-space-map | FileCheck %s + +int test_func(constant char* foo); + +kernel void str_array_decy() { + test_func("Test string literal"); +} + +// CHECK: i8 addrspace(3)* getelementptr inbounds ([20 x i8] addrspace(3)* +// CHECK-NOT: addrspacecast + |

