Commit 0b40e88e by Eric Botcazou Committed by Richard Henderson

re PR middle-end/8408 (simple legal c program ice in fixup_var_refs_1, at function.c:1938)

        PR middle-end/8408
        * genrecog.c (preds): Handle ADDRESSOF.
        (validate_pattern): Mark it as an lvalue.
	* gcc.c-torture/compile/20021103-1.c: New.

From-SVN: r58774
parent 7189ea29
2002-11-03 Eric Botcazou <ebotcazou@libertysurf.fr>
PR middle-end/8408
* genrecog.c (preds): Handle ADDRESSOF.
(validate_pattern): Mark it as an lvalue.
2002-11-02 David Edelsohn <edelsohn@gnu.org> 2002-11-02 David Edelsohn <edelsohn@gnu.org>
* config/rs6000/rs6000.c (rs6000_override_options): Use string * config/rs6000/rs6000.c (rs6000_override_options): Use string
......
...@@ -187,22 +187,23 @@ static const struct pred_table ...@@ -187,22 +187,23 @@ static const struct pred_table
const RTX_CODE codes[NUM_RTX_CODE]; const RTX_CODE codes[NUM_RTX_CODE];
} preds[] = { } preds[] = {
{"general_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF, {"general_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF,
LABEL_REF, SUBREG, REG, MEM}}, LABEL_REF, SUBREG, REG, MEM, ADDRESSOF}},
#ifdef PREDICATE_CODES #ifdef PREDICATE_CODES
PREDICATE_CODES PREDICATE_CODES
#endif #endif
{"address_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF, {"address_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF,
LABEL_REF, SUBREG, REG, MEM, PLUS, MINUS, MULT}}, LABEL_REF, SUBREG, REG, MEM, ADDRESSOF,
{"register_operand", {SUBREG, REG}}, PLUS, MINUS, MULT}},
{"pmode_register_operand", {SUBREG, REG}}, {"register_operand", {SUBREG, REG, ADDRESSOF}},
{"pmode_register_operand", {SUBREG, REG, ADDRESSOF}},
{"scratch_operand", {SCRATCH, REG}}, {"scratch_operand", {SCRATCH, REG}},
{"immediate_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF, {"immediate_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF,
LABEL_REF}}, LABEL_REF}},
{"const_int_operand", {CONST_INT}}, {"const_int_operand", {CONST_INT}},
{"const_double_operand", {CONST_INT, CONST_DOUBLE}}, {"const_double_operand", {CONST_INT, CONST_DOUBLE}},
{"nonimmediate_operand", {SUBREG, REG, MEM}}, {"nonimmediate_operand", {SUBREG, REG, MEM, ADDRESSOF}},
{"nonmemory_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF, {"nonmemory_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF,
LABEL_REF, SUBREG, REG}}, LABEL_REF, SUBREG, REG, ADDRESSOF}},
{"push_operand", {MEM}}, {"push_operand", {MEM}},
{"pop_operand", {MEM}}, {"pop_operand", {MEM}},
{"memory_operand", {SUBREG, MEM}}, {"memory_operand", {SUBREG, MEM}},
...@@ -211,7 +212,7 @@ static const struct pred_table ...@@ -211,7 +212,7 @@ static const struct pred_table
UNORDERED, ORDERED, UNEQ, UNGE, UNGT, UNLE, UNORDERED, ORDERED, UNEQ, UNGE, UNGT, UNLE,
UNLT, LTGT}}, UNLT, LTGT}},
{"mode_independent_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF, {"mode_independent_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF,
LABEL_REF, SUBREG, REG, MEM}} LABEL_REF, SUBREG, REG, MEM, ADDRESSOF}}
}; };
#define NUM_KNOWN_PREDS ARRAY_SIZE (preds) #define NUM_KNOWN_PREDS ARRAY_SIZE (preds)
...@@ -520,6 +521,7 @@ validate_pattern (pattern, insn, set, set_code) ...@@ -520,6 +521,7 @@ validate_pattern (pattern, insn, set, set_code)
if (c != REG if (c != REG
&& c != SUBREG && c != SUBREG
&& c != MEM && c != MEM
&& c != ADDRESSOF
&& c != CONCAT && c != CONCAT
&& c != PARALLEL && c != PARALLEL
&& c != STRICT_LOW_PART) && c != STRICT_LOW_PART)
......
/* PR middle-end/8408 */
/* Verify that the recognizer explicitly
handles ADDRESSOF operands. */
void foo(void)
{
double d1 = 3.14159, d2;
if (&d2 == &d1)
;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment