OSDN Git Service

* expr.c (expand_expr): Handle ERROR_MARK much earlier.
authorloewis <loewis@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 19 Mar 1999 14:26:50 +0000 (14:26 +0000)
committerloewis <loewis@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 19 Mar 1999 14:26:50 +0000 (14:26 +0000)
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@25864 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/expr.c

index 9a17c3c..2771d79 100644 (file)
@@ -1,3 +1,7 @@
+Fre Mar 19 23:26:29 1999  Martin von Löwis  <loewis@informatik.hu-berlin.de>
+
+       * expr.c (expand_expr): Handle ERROR_MARK much earlier.
+
 Fri Mar 19 15:28:38 1999  Kaveh R. Ghazi  <ghazi@caip.rutgers.edu>
 
        * cccp.c (create_definition): Cast to U_CHAR* when assigning to one.
index 0eb75b3..a09f269 100644 (file)
@@ -5471,21 +5471,34 @@ expand_expr (exp, target, tmode, modifier)
   register rtx op0, op1, temp;
   tree type = TREE_TYPE (exp);
   int unsignedp = TREE_UNSIGNED (type);
-  register enum machine_mode mode = TYPE_MODE (type);
+  register enum machine_mode mode;
   register enum tree_code code = TREE_CODE (exp);
   optab this_optab;
-  /* Use subtarget as the target for operand 0 of a binary operation.  */
-  rtx subtarget = (target != 0 && GET_CODE (target) == REG ? target : 0);
-  rtx original_target = target;
-  int ignore = (target == const0_rtx
-               || ((code == NON_LVALUE_EXPR || code == NOP_EXPR
-                    || code == CONVERT_EXPR || code == REFERENCE_EXPR
-                    || code == COND_EXPR)
-                   && TREE_CODE (type) == VOID_TYPE));
+  rtx subtarget, original_target;
+  int ignore;
   tree context;
   /* Used by check-memory-usage to make modifier read only.  */
   enum expand_modifier ro_modifier;
 
+  /* Handle ERROR_MARK before anybody tries to access its type. */
+  if (TREE_CODE (exp) == ERROR_MARK)
+    {
+      op0 = CONST0_RTX (tmode);
+      if (op0 != 0)
+       return op0;
+      return const0_rtx;
+    }
+
+  mode = TYPE_MODE (type);
+  /* Use subtarget as the target for operand 0 of a binary operation.  */
+  subtarget = (target != 0 && GET_CODE (target) == REG ? target : 0);
+  original_target = target;
+  ignore = (target == const0_rtx
+           || ((code == NON_LVALUE_EXPR || code == NOP_EXPR
+                || code == CONVERT_EXPR || code == REFERENCE_EXPR
+                || code == COND_EXPR)
+               && TREE_CODE (type) == VOID_TYPE));
+
   /* Make a read-only version of the modifier.  */
   if (modifier == EXPAND_NORMAL || modifier == EXPAND_SUM
       || modifier == EXPAND_CONST_ADDRESS || modifier == EXPAND_INITIALIZER)
@@ -8144,12 +8157,6 @@ expand_expr (exp, target, tmode, modifier)
        return const0_rtx;
       }
 
-    case ERROR_MARK:
-      op0 = CONST0_RTX (tmode);
-      if (op0 != 0)
-       return op0;
-      return const0_rtx;
-
     default:
       return (*lang_expand_expr) (exp, original_target, tmode, modifier);
     }