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