https://gcc.gnu.org/bugzilla/show_bug.cgi?id=67809
--- Comment #9 from Richard Biener <rguenth at gcc dot gnu.org> --- clang doesn't optimize the corresponding C testcase struct Foo { struct Foo *next; }; void release(struct Foo *next) { struct Foo *tmp = 0; for (struct Foo *it = next; it; it = tmp) { tmp = it->next; } } which means it needs to have a way in the IL to annotate loops as terminating. Does the C++ rule apply to all cycles or just to "loops"? (thinking of goto, recursion, etc.)