https://gcc.gnu.org/bugzilla/show_bug.cgi?id=101438
Bug ID: 101438
Summary: Compiler hang on inline asm with local register and
VLA operands
Product: gcc
Version: 11.1.0
Status: UNCONFIRMED
Severity: normal
Priority: P3
Component: inline-asm
Assignee: unassigned at gcc dot gnu.org
Reporter: andrey.vihrov at gmail dot com
Target Milestone: ---
Target: x86_64-pc-linux-gnu
Compiling this C source:
int main(void)
{
register long long rax __asm__("rax") = 0;
register long long rbx __asm__("rbx") = 0;
register long long rcx __asm__("rcx") = 0;
register long long rdx __asm__("rdx") = 0;
register long long rsi __asm__("rsi") = 0;
register long long rdi __asm__("rdi") = 0;
register long long r8 __asm__("r8") = 0;
register long long r9 __asm__("r9") = 0;
register long long r10 __asm__("r10") = 0;
register long long r11 __asm__("r11") = 0;
register long long r12 __asm__("r12") = 0;
register long long r13 __asm__("r13") = 0;
register long long r14 __asm__("r14") = 0;
register long long r15 __asm__("r15") = 0;
volatile int x = 1;
char arr[x];
__asm__ (""
:
: "r"(rax),
"r"(rbx),
"r"(rcx),
"r"(rdx),
"r"(rsi),
"r"(rdi),
"r"(r8),
"r"(r9),
"r"(r10),
"r"(r11),
"r"(r12),
"r"(r13),
"r"(r14),
"r"(r15),
"m"(arr)
);
}
with "gcc -O1 test.c" causes the compiler to hang in an infinite loop.
Note: This code could possibly be formally incorrect, as [1] warns about
potential clobbering after initialization of local register variables.
[1] https://gcc.gnu.org/onlinedocs/gcc/Local-Register-Variables.html