OSDN Git Service

PR middle-end/8408
authorrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 3 Nov 2002 23:42:51 +0000 (23:42 +0000)
committerrth <rth@138bc75d-0d04-0410-961f-82ee72b054a4>
Sun, 3 Nov 2002 23:42:51 +0000 (23:42 +0000)
        * genrecog.c (preds): Handle ADDRESSOF.
        (validate_pattern): Mark it as an lvalue.
* gcc.c-torture/compile/20021103-1.c: New.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@58774 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/ChangeLog
gcc/genrecog.c
gcc/testsuite/gcc.c-torture/compile/20021103-1.c [new file with mode: 0644]

index 3cef1df..148d506 100644 (file)
@@ -1,3 +1,9 @@
+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>
 
        * config/rs6000/rs6000.c (rs6000_override_options): Use string
index 9900b99..56b2680 100644 (file)
@@ -187,22 +187,23 @@ static const struct pred_table
   const RTX_CODE codes[NUM_RTX_CODE];
 } preds[] = {
   {"general_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF,
-                      LABEL_REF, SUBREG, REG, MEM}},
+                      LABEL_REF, SUBREG, REG, MEM, ADDRESSOF}},
 #ifdef PREDICATE_CODES
   PREDICATE_CODES
 #endif
   {"address_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF,
-                      LABEL_REF, SUBREG, REG, MEM, PLUS, MINUS, MULT}},
-  {"register_operand", {SUBREG, REG}},
-  {"pmode_register_operand", {SUBREG, REG}},
+                      LABEL_REF, SUBREG, REG, MEM, ADDRESSOF,
+                      PLUS, MINUS, MULT}},
+  {"register_operand", {SUBREG, REG, ADDRESSOF}},
+  {"pmode_register_operand", {SUBREG, REG, ADDRESSOF}},
   {"scratch_operand", {SCRATCH, REG}},
   {"immediate_operand", {CONST_INT, CONST_DOUBLE, CONST, SYMBOL_REF,
                         LABEL_REF}},
   {"const_int_operand", {CONST_INT}},
   {"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,
-                        LABEL_REF, SUBREG, REG}},
+                        LABEL_REF, SUBREG, REG, ADDRESSOF}},
   {"push_operand", {MEM}},
   {"pop_operand", {MEM}},
   {"memory_operand", {SUBREG, MEM}},
@@ -211,7 +212,7 @@ static const struct pred_table
                           UNORDERED, ORDERED, UNEQ, UNGE, UNGT, UNLE,
                           UNLT, LTGT}},
   {"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)
@@ -520,6 +521,7 @@ validate_pattern (pattern, insn, set, set_code)
                    if (c != REG
                        && c != SUBREG
                        && c != MEM
+                       && c != ADDRESSOF
                        && c != CONCAT
                        && c != PARALLEL
                        && c != STRICT_LOW_PART)
diff --git a/gcc/testsuite/gcc.c-torture/compile/20021103-1.c b/gcc/testsuite/gcc.c-torture/compile/20021103-1.c
new file mode 100644 (file)
index 0000000..8280200
--- /dev/null
@@ -0,0 +1,10 @@
+/* PR middle-end/8408 */
+/* Verify that the recognizer explicitly
+   handles ADDRESSOF operands. */
+
+void foo(void)
+{
+  double d1 = 3.14159, d2;
+  if (&d2 == &d1)
+     ;
+}