[llvm-branch-commits] [cfe-branch] r216049 - It fixes a regression with multiple address spaces in
Bill Wendling
isanbard at gmail.com
Wed Aug 20 00:39:20 PDT 2014
Author: void
Date: Wed Aug 20 02:39:19 2014
New Revision: 216049
URL: http://llvm.org/viewvc/llvm-project?rev=216049&view=rev
Log:
It fixes a regression with multiple address spaces in
OpenCL and blocks.
Patch by Pekka.
Added:
cfe/branches/release_35/test/CodeGen/blocks-opencl.cl
Modified:
cfe/branches/release_35/lib/CodeGen/CGBlocks.cpp
Modified: cfe/branches/release_35/lib/CodeGen/CGBlocks.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/branches/release_35/lib/CodeGen/CGBlocks.cpp?rev=216049&r1=216048&r2=216049&view=diff
==============================================================================
--- cfe/branches/release_35/lib/CodeGen/CGBlocks.cpp (original)
+++ cfe/branches/release_35/lib/CodeGen/CGBlocks.cpp Wed Aug 20 02:39:19 2014
@@ -78,7 +78,13 @@ static llvm::Constant *buildBlockDescrip
ASTContext &C = CGM.getContext();
llvm::Type *ulong = CGM.getTypes().ConvertType(C.UnsignedLongTy);
- llvm::Type *i8p = CGM.getTypes().ConvertType(C.VoidPtrTy);
+ llvm::Type *i8p = NULL;
+ if (CGM.getLangOpts().OpenCL)
+ i8p =
+ llvm::Type::getInt8PtrTy(
+ CGM.getLLVMContext(), C.getTargetAddressSpace(LangAS::opencl_constant));
+ else
+ i8p = CGM.getTypes().ConvertType(C.VoidPtrTy);
SmallVector<llvm::Constant*, 6> elements;
Added: cfe/branches/release_35/test/CodeGen/blocks-opencl.cl
URL: http://llvm.org/viewvc/llvm-project/cfe/branches/release_35/test/CodeGen/blocks-opencl.cl?rev=216049&view=auto
==============================================================================
--- cfe/branches/release_35/test/CodeGen/blocks-opencl.cl (added)
+++ cfe/branches/release_35/test/CodeGen/blocks-opencl.cl Wed Aug 20 02:39:19 2014
@@ -0,0 +1,16 @@
+// RUN: %clang_cc1 -O0 %s -ffake-address-space-map -emit-llvm -o - -fblocks -triple x86_64-unknown-unknown | FileCheck %s
+// This used to crash due to trying to generate a bitcase from a cstring
+// in the constant address space to i8* in AS0.
+
+void dummy(float (^op)(float))
+{
+}
+
+// CHECK: i8 addrspace(3)* getelementptr inbounds ([9 x i8] addrspace(3)* @.str, i32 0, i32 0)
+
+kernel void test_block()
+{
+ float (^X)(float) = ^(float x) { return x + 42.0f; };
+ dummy(X);
+}
+
More information about the llvm-branch-commits
mailing list