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); +} + _______________________________________________ llvm-branch-commits mailing list llvm-branch-commits@cs.uiuc.edu http://lists.cs.uiuc.edu/mailman/listinfo/llvm-branch-commits