+2005-09-29 Daniel Berlin <dberlin@dberlin.org>
+
+ Fix PR tree-optimization/24117
+ * tree-ssa-structalias.c (find_func_aliases): Strip nops
+ before considering whether to use anyoffset.
+
2005-09-29 Paolo Bonzini <bonzini@gnu.org>
Revert this patch:
--- /dev/null
+/* { dg-do compile } */
+/* { dg-options "-O2 -fdump-tree-optimized" } */
+
+typedef struct {
+ int x;
+ int z;
+} Foo_t;
+
+char *xm;
+void bar(void);
+
+void foo(void)
+{
+ Foo_t x;
+ x.x = 1;
+ x.z = 2;
+ xm = (char *)&x;
+ bar();
+ /* We can't propagate x.z past bar, so this link_error should still be there. */
+ if (x.z != 2)
+ link_error ();
+}
+/* { dg-final { scan-tree-dump-times "link_error" 1 "optimized"} } */
+/* { dg-final { cleanup-tree-dump "optimized" } } */
case tcc_expression:
case tcc_unary:
{
+ tree anyoffsetrhs = rhsop;
bool need_anyoffset = false;
rhs = get_constraint_for (rhsop, &need_anyoffset);
process_constraint (new_constraint (lhs, rhs));
-
+
+ STRIP_NOPS (anyoffsetrhs);
/* When taking the address of an aggregate
type, from the LHS we can access any field
of the RHS. */
if (need_anyoffset || (rhs.type == ADDRESSOF
&& !(get_varinfo (rhs.var)->is_special_var)
- && AGGREGATE_TYPE_P (TREE_TYPE (TREE_TYPE (rhsop)))))
+ && AGGREGATE_TYPE_P (TREE_TYPE (TREE_TYPE (anyoffsetrhs)))))
{
rhs.var = anyoffset_id;
rhs.type = ADDRESSOF;