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.