https://gcc.gnu.org/bugzilla/show_bug.cgi?id=92152

--- Comment #13 from Richard Biener <rguenth at gcc dot gnu.org> ---
(In reply to Jan Hubicka from comment #12)
> Created attachment 47898 [details]
> possible fix
> 
> After some discussion with Richard it is my understanding now that FRE is
> considering two stores equal if they store same value, have same address and
> the base+ref types matches.  Because ref type is based on output on
> component_uses_parent_alias_set_from which stops at unions (among others) it
> will happily consider two stores equal even if their access paths are
> completely different after first COMPONENT_REF to union possibly introducing
> aliasing violations (at least in sense of C). 
> 
> This makes the access paths invalid for access path oracle as shown by
> testcase in comment #5.
> 
> The attached patch makes access path oracle to use same logic on terminating
> the useful sequence of path.  This causes three regressions:
> 
> +FAIL: gcc.dg/tree-ssa/20030807-7.c scan-tree-dump-times vrp1 "if " 1
> +FAIL: gcc.dg/tree-ssa/alias-access-path-4.c scan-tree-dump-not optimized
> "return 124"
> +FAIL: gcc.dg/tree-ssa/alias-access-path-5.c scan-tree-dump-not optimized
> "return 124"

But that means we now miscompile the later two tests.

> which all do accesses through unions which are disambiguable.
> I will collect some data on this - it may be something for gcc 10 while we
> may want to do something more sensible for next release. 
> 
> As discussed on IRC, adding to IRC check for access path equality is not
> trivial because there may not be only one store to check.

Reply via email to