diff options
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/CodeGen/CGExpr.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/clang/lib/CodeGen/CGExpr.cpp b/clang/lib/CodeGen/CGExpr.cpp index 35275e58e93..92098752cb9 100644 --- a/clang/lib/CodeGen/CGExpr.cpp +++ b/clang/lib/CodeGen/CGExpr.cpp @@ -316,13 +316,16 @@ createReferenceTemporary(CodeGenFunction &CGF, GV->setAlignment( CGF.getContext().getTypeAlignInChars(M->getType()).getQuantity()); // FIXME: Should we put the new global into a COMDAT? - return GV; + return llvm::ConstantExpr::getBitCast( + GV, CGF.ConvertTypeForMem(Inner->getType())->getPointerTo()); } return CGF.CreateMemTemp(Inner->getType(), "ref.tmp"); case SD_Thread: case SD_Static: - return CGF.CGM.GetAddrOfGlobalTemporary(M, Inner); + return llvm::ConstantExpr::getBitCast( + CGF.CGM.GetAddrOfGlobalTemporary(M, Inner), + CGF.ConvertTypeForMem(Inner->getType())->getPointerTo()); case SD_Dynamic: llvm_unreachable("temporary can't have dynamic storage duration"); |

