Index: generic/nsf.c =================================================================== diff -u -r8c78ef860bdcfaa2b0abf7a1ce660ffd68df00f4 -r942f96c0b39c754cbb418ded75c5e2efba79b4d2 --- generic/nsf.c (.../nsf.c) (revision 8c78ef860bdcfaa2b0abf7a1ce660ffd68df00f4) +++ generic/nsf.c (.../nsf.c) (revision 942f96c0b39c754cbb418ded75c5e2efba79b4d2) @@ -1955,7 +1955,7 @@ * If we have multiple inheritance we merge the precomputed inheritance * paths of the involved classes in the provided order. */ - if (likely(savedSuper) && unlikely(savedSuper->nextPtr != NULL)) { + if (likely(savedSuper != NULL) && unlikely(savedSuper->nextPtr != NULL)) { NsfClasses *baseList = NULL, *baseListCurrent, **plNext, *miList, *deletionList = NULL; @@ -2003,6 +2003,24 @@ while (mergeList != NULL) { NsfClass *addClass; +#if !defined(NDEBUG) + { + NsfClasses *sl, *tail; + for (sl = baseList, tail = NULL; sl; sl = sl->nextPtr) {tail = sl;} + if (tail) { + // fprintf(stderr, "check tail baseList %s %p\n", ClassName(tail->cl), tail->nextPtr); + assert(IsBaseClass(&tail->cl->object)); + assert(tail->nextPtr == NULL); + } + for (sl = mergeList, tail = NULL; sl; sl = sl->nextPtr) {tail = sl;} + if (tail) { + // fprintf(stderr, "check tail mergeList %s %p\n", ClassName(tail->cl), tail->nextPtr); + assert(IsBaseClass(&tail->cl->object)); + assert(tail->nextPtr == NULL); + } + } +#endif + //NsfClassListPrint("baseListCurrent", baseListCurrent); if (mergeList->cl == baseListCurrent->cl) { // elements are identical, advance both pointers @@ -2133,7 +2151,7 @@ * required precedence orders are precomputed. */ - if (likely(cl->super) && unlikely(cl->super->nextPtr)) { + if (likely(cl->super != NULL) && unlikely(cl->super->nextPtr != NULL)) { for (sl = cl->super; sl; sl = sl->nextPtr) { if (unlikely(sl->cl->order == NULL)) {