https://gcc.gnu.org/bugzilla/show_bug.cgi?id=79227
--- Comment #1 from David Malcolm <dmalcolm at gcc dot gnu.org> --- Some notes: There are 7 cases in the reproducer, but it only warns for the 3rd case (lines 34-35). In each of the 7 cases in the reproducer, NEXT_STMT_LOC and BODY_LOC are on the same line: /* If NEXT_STMT_LOC and BODY_LOC are on the same line, consider the location of the guard. Case 3 matches the following conditional, and thus warns: if (guard_exploc.line < body_exploc.line) /* The guard is on a line before a line that contains both the body and the next stmt. */ return true; whereas the other cases match this conditional: else if (guard_exploc.line == body_exploc.line) { /* They're all on the same line. */ and try this heuristic: /* Heuristic: only warn if the guard is the first thing on its line. */ if (guard_vis_column == guard_line_first_nws) return true; ...which doesn't match, hence we don't warn for them.