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:
Alexey Bataev 2015-10-07 10:22:08 +00:00
parent 4d31a482bb
commit f2440332ca
2 changed files with 10 additions and 1 deletions

View File

@ -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());
}

View File

@ -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;
}