ielr: fix crash on memory management

Reported by Dwight Guth.
https://lists.gnu.org/r/bug-bison/2020-06/msg00037.html

* src/AnnotationList.c (AnnotationList__computePredecessorAnnotations):
Beware that SBITSET__FOR_EACH nests _two_ for-loops, so "break" does
not actually break out of it.
That was the only occurrence in the code.
* src/Sbitset.h (SBITSET__FOR_EACH): Warn passersby.
This commit is contained in:
Akim Demaille
2020-06-26 07:33:51 +02:00
parent 8f44164443
commit cf6d8d0631
4 changed files with 10 additions and 1 deletions

View File

@@ -81,6 +81,8 @@ void Sbitset__fprint (Sbitset self, Sbitset__Index nbits, FILE *file);
*ptr_self = *ptr_other1 | *ptr_other2; \
} while (0)
/* ATTENTION: there are *two* loops here, "break" and "continue" will
not apply to the whole loop, just the inner one. */
# define SBITSET__FOR_EACH(SELF, NBITS, ITER, INDEX) \
for ((ITER) = (SELF); (ITER) < (SELF) + Sbitset__nbytes (NBITS); ++(ITER)) \
if (*(ITER) != 0) \