forked from OSchip/llvm-project
Fix crash in codegen on casting to `bool &`.
Currently codegen crashes trying to emit casting to bool &. It happens because bool type is converted to i1 and later then lvalue for reference is converted to i1*. But when codegen tries to load this lvalue it crashes trying to load value from this i1*. Differential Revision: http://reviews.llvm.org/D13325 llvm-svn: 249534
This commit is contained in:
parent
4d31a482bb
commit
f2440332ca
|
@ -1383,7 +1383,7 @@ Value *ScalarExprEmitter::VisitCastExpr(CastExpr *CE) {
|
|||
case CK_LValueBitCast:
|
||||
case CK_ObjCObjectLValueCast: {
|
||||
Address Addr = EmitLValue(E).getAddress();
|
||||
Addr = Builder.CreateElementBitCast(Addr, ConvertType(DestTy));
|
||||
Addr = Builder.CreateElementBitCast(Addr, CGF.ConvertTypeForMem(DestTy));
|
||||
LValue LV = CGF.MakeAddrLValue(Addr, DestTy);
|
||||
return EmitLoadOfLValue(LV, CE->getExprLoc());
|
||||
}
|
||||
|
|
|
@ -0,0 +1,9 @@
|
|||
// RUN: %clang_cc1 -triple x86_64-apple-darwin -emit-llvm -o - %s | FileCheck %s
|
||||
|
||||
// CHECK-LABEL: main
|
||||
int main(int argc, char **argv) {
|
||||
// CHECK: load i8, i8* %
|
||||
// CHECK-NEXT: trunc i8 %{{.+}} to i1
|
||||
bool b = (bool &)argv[argc][1];
|
||||
return b;
|
||||
}
|
Loading…
Reference in New Issue