diff options
| author | Pekka Jaaskelainen <pekka.jaaskelainen@tut.fi> | 2014-12-19 18:04:27 +0000 |
|---|---|---|
| committer | Pekka Jaaskelainen <pekka.jaaskelainen@tut.fi> | 2014-12-19 18:04:27 +0000 |
| commit | e94b0e187005ddbc3e5e8018829fada07379a542 (patch) | |
| tree | c17430d467b933e3eb80184ea07aca1300d2736f /clang | |
| parent | cd8500e500d9359575a1b762d8dfc7d608e20d47 (diff) | |
| download | bcm5719-llvm-e94b0e187005ddbc3e5e8018829fada07379a542.tar.gz bcm5719-llvm-e94b0e187005ddbc3e5e8018829fada07379a542.zip | |
Fix an address space id reset with array decay's
implicit conversion.
The issue was produced with OpenCL C code that
called a function with a constant string literal
argument.
llvm-svn: 224592
Diffstat (limited to 'clang')
| -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 + |

