https://gcc.gnu.org/bugzilla/show_bug.cgi?id=66178
Mikhail Maltsev <miyuki at gcc dot gnu.org> changed: What |Removed |Added ---------------------------------------------------------------------------- CC| |miyuki at gcc dot gnu.org --- Comment #4 from Mikhail Maltsev <miyuki at gcc dot gnu.org> --- But for "static int a = ((char *)&&l1-(char *)&&l2)+1;" GCC is able to emit a valid initializer: .LFE1: .size main, .-main .section .rodata .align 4 .type a.1833, @object .size a.1833, 4 a.1833: .long .L2-.L3+1 And for last testcase the backtrace looks quite different: ./test.c:13:1: internal compiler error: output_operand: invalid expression as operand } ^ 0x7ed77f output_operand_lossage(char const*, ...) ../../src/gcc/final.c:3446 0x7ee045 output_addr_const(_IO_FILE*, rtx_def*) ../../src/gcc/final.c:4035 0x7edfe5 output_addr_const(_IO_FILE*, rtx_def*) ../../src/gcc/final.c:3995 0xd808ee assemble_integer_with_op(char const*, rtx_def*) ../../src/gcc/varasm.c:2743 0xd80956 default_assemble_integer(rtx_def*, unsigned int, int) ../../src/gcc/varasm.c:2759 0xd809d0 assemble_integer(rtx_def*, unsigned int, unsigned int, int) ../../src/gcc/varasm.c:2775 0xd86910 output_constant ../../src/gcc/varasm.c:4795