https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70856
--- Comment #4 from rguenther at suse dot de <rguenther at suse dot de> --- On Thu, 12 May 2016, tschwinge at gcc dot gnu.org wrote: > https://gcc.gnu.org/bugzilla/show_bug.cgi?id=70856 > > Thomas Schwinge <tschwinge at gcc dot gnu.org> changed: > > What |Removed |Added > ---------------------------------------------------------------------------- > CC| |rguenth at gcc dot gnu.org, > | |tschwinge at gcc dot gnu.org, > | |vries at gcc dot gnu.org > > --- Comment #3 from Thomas Schwinge <tschwinge at gcc dot gnu.org> --- > I had a cursory look at that one. Differently from PR70857, the ICE triggers > here the second time that pass_ipa_pta is run (all_late_ipa_passes), and not > the first one (which is only active if "-fopenacc" is in effect; Tom CCed for > your information anyway). This is "fixed" ;-) by reverting the r233734 > changes > for PR69951 "[Bug tree-optimization/69951] wrong code at -O1 and above on > x86_64-linux-gnu": I figured out that much already. Now the question is why/how oacc ends up making sth different the alias target for the decl. It may generate a new alias that has the old decl as target but not the other way around (which is what the assert detects). Richard. > 2016-02-26 Richard Biener <rguent...@suse.de> > > PR tree-optimization/69551 > * tree-ssa-structalias.c (get_constraint_for_ssa_var): When > looking through aliases adjust DECL_PT_UID to refer to the > ultimate alias target. > > --- gcc/tree-ssa-structalias.c > +++ gcc/tree-ssa-structalias.c > @@ -2943,6 +2943,14 @@ get_constraint_for_ssa_var (tree t, vec<ce_s> > *results, bool address_p) > if (node && node->alias && node->analyzed) > { > node = node->ultimate_alias_target (); > + /* Canonicalize the PT uid of all aliases to the ultimate > target. > + ??? Hopefully the set of aliases can't change in a way that > + changes the ultimate alias target. */ > + gcc_assert ((! DECL_PT_UID_SET_P (node->decl) > + || DECL_PT_UID (node->decl) == DECL_UID > (node->decl)) > + && (! DECL_PT_UID_SET_P (t) > + || DECL_PT_UID (t) == DECL_UID (node->decl))); > + DECL_PT_UID (t) = DECL_UID (node->decl); > t = node->decl; > } > } > > (gdb) call node->debug() > A.4.3435/10 (A.4) @0x7ffff6a7f800 > Type: variable definition analyzed > Visibility: prevailing_def_ironly artificial > References: > Referring: A.1.3429/6 (alias)MAIN__/0 (read) > Availability: available > Varpool flags: initialized used-by-single-function read-only > const-value-known > (gdb) call debug_tree(node->decl) > <var_decl 0x7ffff7ff5c60 A.4 > type <array_type 0x7ffff6a91b28 > type <real_type 0x7ffff68e6540 real(kind=4) SF > size <integer_cst 0x7ffff68cde10 constant 32> > unit size <integer_cst 0x7ffff68cde28 constant 4> > align 32 symtab 0 alias set 9 canonical type 0x7ffff68e6540 > precision 32 > pointer_to_this <pointer_type 0x7ffff68e6738>> > type_2 DI > size <integer_cst 0x7ffff68cdbd0 constant 64> > unit size <integer_cst 0x7ffff68cdbe8 constant 8> > align 32 symtab 0 alias set 9 canonical type 0x7ffff6a91b28 > domain <integer_type 0x7ffff6a91540 type <integer_type > 0x7ffff68d1930 integer(kind=8)> > DI size <integer_cst 0x7ffff68cdbd0 64> unit size <integer_cst > 0x7ffff68cdbe8 8> > align 64 symtab 0 alias set -1 canonical type 0x7ffff6a91540 > precision 64 min <integer_cst 0x7ffff68e8258 0> max <integer_cst > 0x7ffff6a886d8 > 1>> > pointer_to_this <pointer_type 0x7ffff6a91f18>> > readonly constant static ignored DI file ../pr70856-z1.f90 line 3 col > 0 > size <integer_cst 0x7ffff68cdbd0 64> unit size <integer_cst 0x7ffff68cdbe8 8> > align 64 context <function_decl 0x7ffff6a8ec40 p> initial <constructor > 0x7ffff6a88c00>> > (gdb) call debug_tree(t) > <var_decl 0x7ffff7ff5a20 A.1 > type <array_type 0x7ffff6a911f8 > type <real_type 0x7ffff68e6540 real(kind=4) SF > size <integer_cst 0x7ffff68cde10 constant 32> > unit size <integer_cst 0x7ffff68cde28 constant 4> > align 32 symtab 0 alias set 9 canonical type 0x7ffff68e6540 > precision 32 > pointer_to_this <pointer_type 0x7ffff68e6738>> > type_2 DI > size <integer_cst 0x7ffff68cdbd0 constant 64> > unit size <integer_cst 0x7ffff68cdbe8 constant 8> > align 32 symtab 0 alias set 9 canonical type 0x7ffff6a911f8 > domain <integer_type 0x7ffff6a91540 type <integer_type > 0x7ffff68d1930 integer(kind=8)> > DI size <integer_cst 0x7ffff68cdbd0 64> unit size <integer_cst > 0x7ffff68cdbe8 8> > align 64 symtab 0 alias set -1 canonical type 0x7ffff6a91540 > precision 64 min <integer_cst 0x7ffff68e8258 0> max <integer_cst > 0x7ffff6a886d8 > 1>> > pointer_to_this <pointer_type 0x7ffff6a91738>> > readonly constant static ignored DI file ../pr70856-z1.f90 line 2 col > 0 > size <integer_cst 0x7ffff68cdbd0 64> unit size <integer_cst 0x7ffff68cdbe8 8> > align 64 context <function_decl 0x7ffff6a8ec40 p>> > >