https://gcc.gnu.org/bugzilla/show_bug.cgi?id=98426
--- Comment #8 from Jerry DeLisle <jvdelisle at gcc dot gnu.org> --- Martin or Matt, Can you test the following variation to see if you get better results. return st; } retval = NULL; if (c <= 0) retval = find_symbol (st->left, name, module, generic); if (c > 0 && retval == NULL) retval = find_symbol (st->right, name, module, generic); if (c > 0 && retval == NULL) retval = find_symbol (st->left, name, module, generic); if (c <= 0 && retval == NULL) retval = find_symbol (st->right, name, module, generic); return retval; This does pass regression testing but I do not think it guarantees better results. Apparently the value of c does not guarantee a find going left or right.