]> granicus.if.org Git - clang/commitdiff
Fix creating bitcasts with wrong address space
authorMatt Arsenault <Matthew.Arsenault@amd.com>
Tue, 1 Aug 2017 20:36:57 +0000 (20:36 +0000)
committerMatt Arsenault <Matthew.Arsenault@amd.com>
Tue, 1 Aug 2017 20:36:57 +0000 (20:36 +0000)
In a future commit AMDGPU will start passing
aggregates directly to more functions, triggering
asserts in test/CodeGenOpenCL/addr-space-struct-arg.cl

git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@309741 91177308-0d34-0410-b5e6-96231b3b80d8

lib/CodeGen/CGCall.cpp

index 316bf44cb1c3dce381eff99152fc9d48d83f5b27..a0acb64be5363d837cfe05c601b5e771311cfaa5 100644 (file)
@@ -1223,7 +1223,8 @@ static llvm::Value *CreateCoercedLoad(Address Src, llvm::Type *Ty,
     //
     // FIXME: Assert that we aren't truncating non-padding bits when have access
     // to that information.
-    Src = CGF.Builder.CreateBitCast(Src, llvm::PointerType::getUnqual(Ty));
+    Src = CGF.Builder.CreateBitCast(Src,
+                                    Ty->getPointerTo(Src.getAddressSpace()));
     return CGF.Builder.CreateLoad(Src);
   }
 
@@ -3946,7 +3947,8 @@ RValue CodeGenFunction::EmitCall(const CGFunctionInfo &CallInfo,
           Builder.CreateMemCpy(TempAlloca, Src, SrcSize);
           Src = TempAlloca;
         } else {
-          Src = Builder.CreateBitCast(Src, llvm::PointerType::getUnqual(STy));
+          Src = Builder.CreateBitCast(Src,
+                                      STy->getPointerTo(Src.getAddressSpace()));
         }
 
         auto SrcLayout = CGM.getDataLayout().getStructLayout(STy);