https://gcc.gnu.org/bugzilla/show_bug.cgi?id=103267
--- Comment #5 from hubicka at kam dot mff.cuni.cz --- Works for me even with the 3 warnings. hubicka@lomikamen:/aux/hubicka/trunk/build-lto2/gcc$ cat >tt.c __attribute__ ((noinline,const)) infinite (int p) { if (p) while (1); return p; } __attribute__ ((noinline)) static void test(int p, int *a) { int v = infinite (p); if (*a && v) __builtin_abort (); } test2(int *a) { test(0,a); } main() { test (1,0); } hubicka@lomikamen:/aux/hubicka/trunk/build-lto2/gcc$ ./xgcc --version xgcc (GCC) 12.0.0 20211114 (experimental) Copyright (C) 2021 Free Software Foundation, Inc. This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. hubicka@lomikamen:/aux/hubicka/trunk/build-lto2/gcc$ ./xgcc -B ./ -O2 tt.c tt.c:2:1: warning: return type defaults to ‘int’ [-Wimplicit-int] 2 | infinite (int p) | ^~~~~~~~ tt.c:16:1: warning: return type defaults to ‘int’ [-Wimplicit-int] 16 | test2(int *a) | ^~~~~ tt.c:20:1: warning: return type defaults to ‘int’ [-Wimplicit-int] 20 | main() | ^~~~ hubicka@lomikamen:/aux/hubicka/trunk/build-lto2/gcc$ ./a.out Segmentation fault