https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77966
Martin Liška <marxin at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- Status|UNCONFIRMED |RESOLVED Resolution|--- |INVALID --- Comment #3 from Martin Liška <marxin at gcc dot gnu.org> --- Hello. You are right, GCC assumes that the loop can iterate at most 1 times: $ head pr77966.c.*ivcanon* ;; Function snic_log_q_error (snic_log_q_error, funcdef_no=0, decl_uid=2082, cgraph_uid=0, symbol_order=0) Induction variable (unsigned int) 0 + 1 * iteration does not wrap in statement _6 = snic_4(D)->wq[i_13]; in loop 1. Statement _6 = snic_4(D)->wq[i_13]; is executed at most 0 (bounded by 0) + 1 times in loop 1. Loop 1 iterates at most 1 times. snic_log_q_error (struct snic * snic) That's because struct vnic_wq_ctrl *wq[1]; is not a trailing array in a struct. Thus last BB contains: <bb 5>: __builtin___sanitizer_cov_trace_pc (); __builtin_unreachable (); That's reason why no return insn is emitted (occurrence of __builtin_unreachable). Thus I think the PR is invalid. Please re-open if having a different opinion.