diff --git a/src/nfa/mcclellancompile_util.cpp b/src/nfa/mcclellancompile_util.cpp index 17e022fe..8bb258d3 100644 --- a/src/nfa/mcclellancompile_util.cpp +++ b/src/nfa/mcclellancompile_util.cpp @@ -187,7 +187,22 @@ bool clear_deeper_reports(raw_dfa &raw, u32 max_offset) { } } - return changed; + if (!changed) { + return false; + } + + // We may have cleared all reports from the DFA, in which case it should + // become empty. + if (all_of_in(raw.states, [](const dstate &ds) { + return ds.reports.empty() && ds.reports_eod.empty(); + })) { + DEBUG_PRINTF("no reports left at all, dfa is dead\n"); + raw.states.clear(); + raw.start_anchored = DEAD_STATE; + raw.start_floating = DEAD_STATE; + } + + return true; } set all_reports(const raw_dfa &rdfa) {