[llvm-commits] [125989] Fix a front-end crash on CFrontend/2007-04-11-InlineAsmUnion.c, in which

clattner at apple.com clattner at apple.com
Wed Apr 11 15:35:32 PDT 2007


Revision: 125989
Author:   clattner
Date:     2007-04-11 15:35:32 -0700 (Wed, 11 Apr 2007)

Log Message:
-----------
Fix a front-end crash on CFrontend/2007-04-11-InlineAsmUnion.c, in which
an inline asm is emitting a store into a union (!?).  There is still a
backend crash as well.

Modified Paths:
--------------
    apple-local/branches/llvm/gcc/llvm-convert.cpp

Modified: apple-local/branches/llvm/gcc/llvm-convert.cpp
===================================================================
--- apple-local/branches/llvm/gcc/llvm-convert.cpp	2007-04-11 21:34:37 UTC (rev 125988)
+++ apple-local/branches/llvm/gcc/llvm-convert.cpp	2007-04-11 22:35:32 UTC (rev 125989)
@@ -3601,13 +3601,16 @@
     std::string SimplifiedConstraint = '='+CanonicalizeConstraint(Constraint+1);
     
     LValue Dest = EmitLV(Operand);
+    const Type *DestValTy =
+      cast<PointerType>(Dest.Ptr->getType())->getElementType();
     assert(!Dest.isBitfield() && "Cannot assign into a bitfield!");
-    if (ConstraintStr.empty() && !AllowsMem) {  // Reg dest and no output yet?
+    if (ConstraintStr.empty() && !AllowsMem &&
+        DestValTy->isFirstClassType()) {  // Reg dest and no output yet?
       assert(StoreCallResultAddr == 0 && "Already have a result val?");
       StoreCallResultAddr = Dest.Ptr;
       ConstraintStr += ",";
       ConstraintStr += SimplifiedConstraint;
-      CallResultType = cast<PointerType>(Dest.Ptr->getType())->getElementType();
+      CallResultType = DestValTy;
     } else {
       ConstraintStr += ",=";
       ConstraintStr += SimplifiedConstraint;





More information about the llvm-commits mailing list