If there are a espilon in a branch and the closure is iterated, maybe fails
in removal of the node. The bug is introduced in
commit
da0e8454a8e68035ef4b87dbb9097f85df6ece27.
* lib/dfa.c (dfaanalyze): Calculate backward transition for not only
concatenation but closure.
case STAR:
case PLUS:
+ /* Every element in the lastpos of the argument is in the backward
+ set of every element in the firstpos. */
+ if (d->epsilon)
+ {
+ tmp.elems = lastpos - stk[-1].nlastpos;
+ tmp.nelem = stk[-1].nlastpos;
+ for (position *p = firstpos - stk[-1].nfirstpos;
+ p < firstpos; p++)
+ merge2 (&backward[p->index], &tmp, &merged);
+ }
+
/* Every element in the firstpos of the argument is in the follow
of every element in the lastpos. */
{