Commit 95959916 authored by Bill Wendling's avatar Bill Wendling
Browse files

It fixes a regression with multiple address spaces in

OpenCL and blocks.

Patch by Pekka.

llvm-svn: 216049
parent 7370495d
Loading
Loading
Loading
Loading
+7 −1
Original line number Diff line number Diff line
@@ -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;

+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);
}