https://gcc.gnu.org/bugzilla/show_bug.cgi?id=119537
--- Comment #6 from Jakub Jelinek <jakub at gcc dot gnu.org> --- volatile int v; void *foo (void *); int main () { [[gnu::assume (({ x: ++v; true; }))]]; void *p = foo (&&x); goto *p; } compiles at -O2 but fails to assemble. #c0 compiles at -O2 but not at -O0, perhaps fix for the ICE could be just not to throw the assumption away even at -O0 if it contains any user labels.