https://gcc.gnu.org/bugzilla/show_bug.cgi?id=118934
--- Comment #2 from Anton Blanchard <anton at ozlabs dot org> --- This reproduces the issue. Build without optimisation to avoid all the code disappearing: #define INSNS_1 x = x + 1; #define INSNS_2 INSNS_1 INSNS_1 #define INSNS_4 INSNS_2 INSNS_2 #define INSNS_8 INSNS_4 INSNS_4 #define INSNS_16 INSNS_8 INSNS_8 #define INSNS_32 INSNS_16 INSNS_16 #define INSNS_64 INSNS_32 INSNS_32 #define INSNS_128 INSNS_64 INSNS_64 #define INSNS_256 INSNS_128 INSNS_128 #define INSNS_512 INSNS_256 INSNS_256 #define INSNS_1024 INSNS_512 INSNS_512 #define INSNS_2048 INSNS_1024 INSNS_1024 #define INSNS_4096 INSNS_2048 INSNS_2048 #define INSNS_8192 INSNS_4096 INSNS_4096 #define INSNS_16384 INSNS_8192 INSNS_8192 #define INSNS_32768 INSNS_16384 INSNS_16384 #define INSNS_65536 INSNS_32768 INSNS_32768 #define INSNS_131072 INSNS_65536 INSNS_65536 #define INSNS_262144 INSNS_131072 INSNS_131072 #define INSNS_524288 INSNS_262144 INSNS_262144 #define INSNS_1048576 INSNS_524288 INSNS_524288 int foo(int x) { if (x) goto out; // > 1MB of code INSNS_524288 out: return x; } # riscv64-unknown-linux-gnu-gcc -c large-function.c during RTL pass: final large-function.c: In function 'foo': large-function.c:33:1: internal compiler error: output_operand: invalid expression as operand