llvm-project
7f6896a9 - [X86] Quote symbol names that collide with registers/keywords in Intel syntax (#186570)

Commit
15 days ago
[X86] Quote symbol names that collide with registers/keywords in Intel syntax (#186570) When outputting Intel syntax assembly, symbol names that match register names (e.g., `rsi`, `rax`) or keywords (`byte`, `ptr`, etc.) must be quoted, otherwise the assembler parses them as registers/keywords instead of symbol references. Fix this by populating MCAsmInfo::ReservedIdentifiers with all X86 register names and Intel syntax keywords. isValidUnquotedName() checks this set and forces quoting when a symbol name matches. ``` % cat rsi.c void rsi(void); void foo(void) { rsi(); } // old clang % clang -c rsi.c -save-temps -masm=intel -fno-pic -o - | llvm-objdump -dr - ... 4: ff d6 callq *%rsi // new clang % fclang -c rsi.c -save-temps -masm=intel -fno-pic -o - | llvm-objdump -dr - ... 4: e8 00 00 00 00 callq 0x9 <foo+0x9> 0000000000000005: R_X86_64_PLT32 rsi-0x4 % cat byte.c void byte(void); void foo(void) { byte(); } // old clang % clang -c byte.c -save-temps -masm=intel -fno-pic -o - byte.s:15:11: error: Expected 'PTR' or 'ptr' token! // new clang => good ```
Author
Parents
Loading