* tree-ssa-operands.c (get_expr_operands): Revert changes
to ADDR_EXPR processing introduced by:
2004-06-21 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
* tree-ssa-operands.c (get_expr_operands): Minor rearrangements.
testsuite/ChangeLog
* gcc.dg/tree-ssa/
20040729-1.c: New test.
From-SVN: r85306
+2004-07-29 Diego Novillo <dnovillo@redhat.com>
+
+ * tree-ssa-operands.c (get_expr_operands): Revert changes
+ to ADDR_EXPR processing introduced by:
+ 2004-06-21 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+ * tree-ssa-operands.c (get_expr_operands): Minor rearrangements.
+
2004-07-29 Joseph S. Myers <jsm@polyomino.org.uk>
* doc/implement-c.texi: Add C90 subclause references. Point to
+2004-07-29 Diego Novillo <dnovillo@redhat.com>
+
+ * gcc.dg/tree-ssa/20040729-1.c: New test.
+
2004-07-27 Matt Austern <austern@apple.com>
* gcc.dg/darwin-bool-1.c: New test.
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O1 -fdump-tree-dce3" } */
+
+foo ()
+{
+ volatile int *p;
+ volatile int x;
+
+ p = &x;
+ *p = 3;
+ return *p + 1;
+}
+
+/* The assignment to 'p' is dead and should be removed. But the
+ compiler was mistakenly thinking that the statement had volatile
+ operands. But 'p' itself is not volatile and taking the address of
+ a volatile does not constitute a volatile operand. */
+/* { dg-final { scan-tree-dump-times "&x" 0 "dce3"} } */
of interest to some passes (e.g. alias resolution). */
add_stmt_operand (expr_p, stmt, 0, NULL);
- /* If the address is constant (invariant is not sufficient), there will
- be no interesting variable references inside. */
- if (TREE_CONSTANT (expr))
+ /* If the address is invariant, there may be no interesting variable
+ references inside. */
+ if (is_gimple_min_invariant (expr))
return;
/* There should be no VUSEs created, since the referenced objects are