diff options
author | Zack Weinberg <zack@rabi.columbia.edu> | 1999-04-27 05:34:43 +0000 |
---|---|---|
committer | Zack Weinberg <zack@gcc.gnu.org> | 1999-04-27 05:34:43 +0000 |
commit | 76bbe0281d2291f72fac65dc87513ee91a54382c (patch) | |
tree | 9c4448a681a75a900c93ce0ca59fa19311001d7c /gcc/expr.c | |
parent | d2e0d40a134bf6080552ab8dc6fce9d33bbb70f1 (diff) | |
download | gcc-76bbe0281d2291f72fac65dc87513ee91a54382c.zip gcc-76bbe0281d2291f72fac65dc87513ee91a54382c.tar.gz gcc-76bbe0281d2291f72fac65dc87513ee91a54382c.tar.bz2 |
expr.c (emit_move_insn_1): Abort if MODE argument is invalid.
1999-04-27 08:32 -0400 Zack Weinberg <zack@rabi.columbia.edu>
* expr.c (emit_move_insn_1): Abort if MODE argument is invalid.
(compare): Punt if TREE_OPERAND (exp, 0) is an ERROR_MARK.
From-SVN: r26673
Diffstat (limited to 'gcc/expr.c')
-rw-r--r-- | gcc/expr.c | 27 |
1 files changed, 19 insertions, 8 deletions
@@ -2565,6 +2565,9 @@ emit_move_insn_1 (x, y) enum mode_class class = GET_MODE_CLASS (mode); int i; + if (mode >= MAX_MACHINE_MODE) + abort (); + if (mov_optab->handlers[(int) mode].insn_code != CODE_FOR_nothing) return emit_insn (GEN_FCN (mov_optab->handlers[(int) mode].insn_code) (x, y)); @@ -11205,14 +11208,22 @@ compare (exp, signed_code, unsigned_code) register tree exp; enum rtx_code signed_code, unsigned_code; { - register rtx op0 - = expand_expr (TREE_OPERAND (exp, 0), NULL_RTX, VOIDmode, 0); - register rtx op1 - = expand_expr (TREE_OPERAND (exp, 1), NULL_RTX, VOIDmode, 0); - register tree type = TREE_TYPE (TREE_OPERAND (exp, 0)); - register enum machine_mode mode = TYPE_MODE (type); - int unsignedp = TREE_UNSIGNED (type); - enum rtx_code code = unsignedp ? unsigned_code : signed_code; + register rtx op0, op1; + register tree type; + register enum machine_mode mode; + int unsignedp; + enum rtx_code code; + + /* Don't crash if the comparison was erroneous. */ + op0 = expand_expr (TREE_OPERAND (exp, 0), NULL_RTX, VOIDmode, 0); + if (TREE_CODE (TREE_OPERAND (exp, 0)) == ERROR_MARK) + return op0; + + op1 = expand_expr (TREE_OPERAND (exp, 1), NULL_RTX, VOIDmode, 0); + type = TREE_TYPE (TREE_OPERAND (exp, 0)); + mode = TYPE_MODE (type); + unsignedp = TREE_UNSIGNED (type); + code = unsignedp ? unsigned_code : signed_code; #ifdef HAVE_canonicalize_funcptr_for_compare /* If function pointers need to be "canonicalized" before they can |