http://gcc.gnu.org/bugzilla/show_bug.cgi?id=54781
Richard Biener <rguenth at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|WAITING |ASSIGNED AssignedTo|unassigned at gcc dot |rguenth at gcc dot gnu.org |gnu.org | --- Comment #7 from Richard Biener <rguenth at gcc dot gnu.org> 2012-12-17 12:39:10 UTC --- Ah, I'm testing the following, which seems to fix the testcase with a cross. Index: alias.c =================================================================== --- alias.c (revision 194552) +++ alias.c (working copy) @@ -283,20 +283,14 @@ ao_ref_from_mem (ao_ref *ref, const_rtx if (base == NULL_TREE) return false; - /* The tree oracle doesn't like to have these. */ - if (TREE_CODE (base) == FUNCTION_DECL - || TREE_CODE (base) == LABEL_DECL) - return false; - - /* If this is a pointer dereference of a non-SSA_NAME punt. - ??? We could replace it with a pointer to anything. */ - if ((INDIRECT_REF_P (base) - || TREE_CODE (base) == MEM_REF) - && TREE_CODE (TREE_OPERAND (base, 0)) != SSA_NAME) - return false; - if (TREE_CODE (base) == TARGET_MEM_REF - && TMR_BASE (base) - && TREE_CODE (TMR_BASE (base)) != SSA_NAME) + /* The tree oracle doesn't like bases that are neither decls + nor indirect references of SSA names. */ + if (!DECL_P (base) + && (TREE_CODE (base) != MEM_REF + || TREE_CODE (TREE_OPERAND (base, 0)) != SSA_NAME) + && (TREE_CODE (base) != TARGET_MEM_REF + || (TMR_BASE (base) + && TREE_CODE (TMR_BASE (base)) != SSA_NAME))) return false; /* If this is a reference based on a partitioned decl replace the