From 68557e1473db9def1ca1f0d9026202213bf587e9 Mon Sep 17 00:00:00 2001 From: =?utf8?q?Martin=20v=2E=20L=C3=B6wis?= Date: Fri, 19 Mar 1999 14:26:50 +0000 Subject: [PATCH] * expr.c (expand_expr): Handle ERROR_MARK much earlier. From-SVN: r25864 --- gcc/ChangeLog | 4 ++++ gcc/expr.c | 37 ++++++++++++++++++++++--------------- 2 files changed, 26 insertions(+), 15 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 9a17c3c956a..2771d790b2a 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,3 +1,7 @@ +Fre Mar 19 23:26:29 1999 Martin von Löwis + + * expr.c (expand_expr): Handle ERROR_MARK much earlier. + Fri Mar 19 15:28:38 1999 Kaveh R. Ghazi * cccp.c (create_definition): Cast to U_CHAR* when assigning to one. diff --git a/gcc/expr.c b/gcc/expr.c index 0eb75b37440..a09f269f061 100644 --- a/gcc/expr.c +++ b/gcc/expr.c @@ -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); } -- 2.30.2