[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