[cfe-commits] r46552 - in /cfe/trunk: CodeGen/CGExpr.cpp test/CodeGen/exprs.c
Chris Lattner
sabre at nondot.org
Tue Jan 29 23:01:18 PST 2008
Author: lattner
Date: Wed Jan 30 01:01:17 2008
New Revision: 46552
URL: http://llvm.org/viewvc/llvm-project?rev=46552&view=rev
Log:
fix a problem reported by Eli, caused by not keeping bool as i1
when in a register.
Modified:
cfe/trunk/CodeGen/CGExpr.cpp
cfe/trunk/test/CodeGen/exprs.c
Modified: cfe/trunk/CodeGen/CGExpr.cpp
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/CodeGen/CGExpr.cpp?rev=46552&r1=46551&r2=46552&view=diff
==============================================================================
--- cfe/trunk/CodeGen/CGExpr.cpp (original)
+++ cfe/trunk/CodeGen/CGExpr.cpp Wed Jan 30 01:01:17 2008
@@ -115,8 +115,17 @@
cast<llvm::PointerType>(Ptr->getType())->getElementType();
// Simple scalar l-value.
- if (EltTy->isFirstClassType())
- return RValue::get(Builder.CreateLoad(Ptr, "tmp"));
+ if (EltTy->isFirstClassType()) {
+ llvm::Value *V = Builder.CreateLoad(Ptr, "tmp");
+
+ // Bool can have different representation in memory than in registers.
+ if (ExprType->isBooleanType()) {
+ if (V->getType() != llvm::Type::Int1Ty)
+ V = Builder.CreateTrunc(V, llvm::Type::Int1Ty, "tobool");
+ }
+
+ return RValue::get(V);
+ }
assert(ExprType->isFunctionType() && "Unknown scalar value");
return RValue::get(Ptr);
Modified: cfe/trunk/test/CodeGen/exprs.c
URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGen/exprs.c?rev=46552&r1=46551&r2=46552&view=diff
==============================================================================
--- cfe/trunk/test/CodeGen/exprs.c (original)
+++ cfe/trunk/test/CodeGen/exprs.c Wed Jan 30 01:01:17 2008
@@ -14,3 +14,6 @@
a + i;
}
+_Bool test2b;
+int test2() {if (test2b);}
+
More information about the cfe-commits
mailing list