https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118896
--- Comment #4 from Mikael Morin <mikael at gcc dot gnu.org> ---
Picking the smallest failing testcase:
(In reply to Mikael Morin from comment #3)
> PASS->FAIL:gfortran.dg/typebound_generic_6.f03
dse2 is changing this...
<bb 4> [local count: 1073312328]:
afab._vptr = &__vtab_foo2_mod_Foo2;
_17 = MEM[(struct __class_foo2_mod_Foo2_t &)&a.3]._data;
*_17.foo.i = 2;
*_17.j = 3;
a.3 ={v} {CLOBBER(eos)};
_13 = MEM[(struct foo *)_7].i;
if (_13 != 2)
goto <bb 5>; [0.04%]
else
goto <bb 6>; [99.96%]
<bb 5> [local count: 429324]:
_gfortran_stop_numeric (3, 0);
into this:
<bb 4> [local count: 1073312328]:
afab._vptr = &__vtab_foo2_mod_Foo2;
a.3 ={v} {CLOBBER(eos)};
_13 = MEM[(struct foo *)_7].i;
if (_13 != 2)
goto <bb 5>; [0.04%]
else
goto <bb 6>; [99.96%]
<bb 5> [local count: 429324]:
_gfortran_stop_numeric (3, 0);
So it's removing a store that should remain there.
I don't know why he thinks that struct __class_foo2_mod_Foo2_t & cannot contain
any struct foo *.
I'm stopping the investigations here.