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

Richard Biener <rguenth at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
     Ever confirmed|0                           |1
             Blocks|                            |24639
   Last reconfirmed|                            |2022-11-30
             Status|UNCONFIRMED                 |NEW

--- Comment #2 from Richard Biener <rguenth at gcc dot gnu.org> ---
Confirmed on trunk.  Hmm,

After normalization [USE]:
        MEM[(struct _Tuple_impl *)this_5(D)] = __tmp_653;
  is conditional on:
        ((_109 == 0))

After normalization [DEF]:
        __tmp_653 = PHI <__tmp_652(44), __tmp_652(98), __tmp_365(91)>
  is conditional on: 
        ((_145 != 0B) AND (_531 == 2) AND (_109 == 0))
        OR ((NOT (_145 != 0B)) AND (_531 == 2) AND (_109 == 0))
        OR ((NOT (_531 == 2)) AND (_109 == 0))

the former conservatively describes the domain the use happens on while
the latter conservatively describes the domain the definition is
initialized.

We try to compute whether the initialized domain is a superset of the
use domain and compute that to be false.

I think that's misleading in the way that we fail to take into account
a conservative predicate that the definition is reached at all here,
that is, we prune the predicate that the domain of the use at the
definition.

There's the missing simplification

 A && B || !A && B

to B in the DEF domain predicate and reducing it to a single
(_531 == 2) && (_109 == 0).  That wouldn't help on its own, we still
have the domain constraint _531 == 2 that's not on the USE domain predicate.


Referenced Bugs:

https://gcc.gnu.org/bugzilla/show_bug.cgi?id=24639
[Bug 24639] [meta-bug] bug to track all Wuninitialized issues

Reply via email to