Loading clang/lib/CodeGen/CGBlocks.cpp +7 −1 Original line number Diff line number Diff line Loading @@ -78,7 +78,13 @@ static llvm::Constant *buildBlockDescriptor(CodeGenModule &CGM, 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; Loading clang/test/CodeGen/blocks-opencl.cl 0 → 100644 +16 −0 Original line number Diff line number Diff line // 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); } Loading
clang/lib/CodeGen/CGBlocks.cpp +7 −1 Original line number Diff line number Diff line Loading @@ -78,7 +78,13 @@ static llvm::Constant *buildBlockDescriptor(CodeGenModule &CGM, 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; Loading
clang/test/CodeGen/blocks-opencl.cl 0 → 100644 +16 −0 Original line number Diff line number Diff line // 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); }