https://gcc.gnu.org/bugzilla/show_bug.cgi?id=72855
--- Comment #5 from Bill Schmidt <wschmidt at gcc dot gnu.org> --- (In reply to Richard Biener from comment #2) > If we have release checking enabled then we shuould hit > > static void > df_analyze_1 (void) > { > ... > #ifndef ENABLE_DF_CHECKING > if (df->changeable_flags & DF_VERIFY_SCHEDULED) > #endif > df_verify (); > > so I wonder why df->changeable_flags & DF_VERIFY_SCHEDULED is ever true > for release checking. Can you track that down? df_finish_pass has the following unguarded code at the end of the function: if (flag_checking && verify) df->changeable_flags |= DF_VERIFY_SCHEDULED; This is the only way that DF_VERIFY_SCHEDULED gets turned on by itself. > But yes, performing df_verify for each loop in a function is excessive, > we seem to lack ever clearing said flag. Does > > Index: gcc/df-core.c > =================================================================== > --- gcc/df-core.c (revision 239276) > +++ gcc/df-core.c (working copy) > @@ -1833,6 +1833,7 @@ df_verify (void) > if (df_live) > df_live_verify_transfer_functions (); > #endif > + df->changeable_flags &= ~DF_VERIFY_SCHEDULED; > } > > #ifdef DF_DEBUG_CFG > > help in the non-DF-checking case? It should, since df_finish_pass isn't called (indirectly from iv_analysis_done) by the doloop code until after all of the loops have been processed.