https://gcc.gnu.org/bugzilla/show_bug.cgi?id=36550
--- Comment #14 from Manuel López-Ibáñez <manu at gcc dot gnu.org> --- Predicate analysis is not able to figure out this case because it cannot see that the default def is also conditional on cond1_8(D) != 0, thus warn_15 is never warn_5(D)(13). (The callgraph is also a bit of a mess). This case seems easier to fix, but still would need someone to figure out how to evaluate and combine the predicates for default defs. [WORKLIST]: add to initial list: warn_15 = PHI <warn_5(D)(13), warn_7(9)> [CHECK]: examining phi: warn_15 = PHI <warn_5(D)(13), warn_7(9)> [CHECK] Found def edge 1 in warn_15 = PHI <warn_5(D)(13), warn_7(9)> [BEFORE SIMPLICATION -- [USE]: warn_16 = PHI <warn_15(11), warn_7(10)> is guarded by : cond2_4(D) != 0 [BEFORE NORMALIZATION --[USE]: warn_16 = PHI <warn_15(11), warn_7(10)> is guarded by : cond2_4(D) != 0 [AFTER NORMALIZATION -- [USE]: warn_16 = PHI <warn_15(11), warn_7(10)> is guarded by : cond2_4(D) != 0 [BEFORE SIMPLICATION -- [DEF]: warn_15 = PHI <warn_5(D)(13), warn_7(9)> is guarded by : cond2_4(D) != 0 (.AND.) cond1_8(D) != 0 [BEFORE NORMALIZATION --[DEF]: warn_15 = PHI <warn_5(D)(13), warn_7(9)> is guarded by : cond2_4(D) != 0 (.AND.) cond1_8(D) != 0 [AFTER NORMALIZATION -- [DEF]: warn_15 = PHI <warn_5(D)(13), warn_7(9)> is guarded by : cond1_8(D) != 0 (.AND.) cond2_4(D) != 0 [CHECK]: Found unguarded use: warn_16 = PHI <warn_15(11), warn_7(10)> [WORKLIST]: Update worklist with phi: warn_16 = PHI <warn_15(11), warn_7(10)> [CHECK]: examining phi: warn_16 = PHI <warn_15(11), warn_7(10)> [CHECK]: Found unguarded use: a = warn_16;