From fa28271fe94df5db8dfe5e85f4bd4e56f493c911 Mon Sep 17 00:00:00 2001 From: Eric Astor Date: Thu, 22 Jul 2021 15:50:37 -0400 Subject: [PATCH] [ms] [llvm-ml] Fix macro case-insensitivity We previously had issues identifying macros not registered with a lowercase name. Reviewed By: mstorsjo, thakis Differential Revision: https://reviews.llvm.org/D106453 --- lib/MC/MCParser/MasmParser.cpp | 2 +- test/tools/llvm-ml/macro.asm | 72 ++++++++++++++++++++++++++-------- 2 files changed, 56 insertions(+), 18 deletions(-) diff --git a/lib/MC/MCParser/MasmParser.cpp b/lib/MC/MCParser/MasmParser.cpp index 92ec178e340..7b4d6e529cc 100644 --- a/lib/MC/MCParser/MasmParser.cpp +++ b/lib/MC/MCParser/MasmParser.cpp @@ -5957,7 +5957,7 @@ bool MasmParser::parseDirectiveMacro(StringRef Name, SMLoc NameLoc) { IsMacroFunction); DEBUG_WITH_TYPE("asm-macros", dbgs() << "Defining new macro:\n"; Macro.dump()); - getContext().defineMacro(Name, std::move(Macro)); + getContext().defineMacro(Name.lower(), std::move(Macro)); return false; } diff --git a/test/tools/llvm-ml/macro.asm b/test/tools/llvm-ml/macro.asm index 93543aaf3d9..3c81b89414f 100644 --- a/test/tools/llvm-ml/macro.asm +++ b/test/tools/llvm-ml/macro.asm @@ -8,7 +8,7 @@ xa1 DWORD ? .code -substitution_macro macro a1:req, a2:=<7> +SubstitutionMacro macro a1:req, a2:=<7> mov eax, a1 mov eax, a1& mov eax, &a1 @@ -27,7 +27,7 @@ endm substitution_test_with_default PROC ; CHECK-LABEL: substitution_test_with_default: - substitution_macro 1 + SubstitutionMacro 1 ; CHECK: mov eax, 1 ; CHECK-NEXT: mov eax, 1 ; CHECK-NEXT: mov eax, 1 @@ -46,7 +46,7 @@ substitution_test_with_default ENDP substitution_test_with_value PROC ; CHECK-LABEL: substitution_test_with_value: - substitution_macro 2, 8 + SubstitutionMacro 2, 8 ; CHECK: mov eax, 2 ; CHECK-NEXT: mov eax, 2 ; CHECK-NEXT: mov eax, 2 @@ -62,7 +62,45 @@ substitution_test_with_value PROC ret substitution_test_with_value ENDP -ambiguous_substitution_macro MACRO x, y +substitution_test_lowercase PROC +; CHECK-LABEL: substitution_test_lowercase: + + substitutionmacro 2, 8 +; CHECK: mov eax, 2 +; CHECK-NEXT: mov eax, 2 +; CHECK-NEXT: mov eax, 2 +; CHECK-NEXT: mov eax, 2 +; CHECK: mov eax, dword ptr [rip + xa1] +; CHECK-NEXT: mov eax, dword ptr [rip + x2] +; CHECK-NEXT: mov eax, dword ptr [rip + x2] +; CHECK: mov eax, 8 +; CHECK-NEXT: mov eax, 8 +; CHECK-NEXT: mov eax, 8 +; CHECK-NEXT: mov eax, 8 + + ret +substitution_test_lowercase ENDP + +substitution_test_uppercase PROC +; CHECK-LABEL: substitution_test_uppercase: + + SUBSTITUTIONMACRO 2, 8 +; CHECK: mov eax, 2 +; CHECK-NEXT: mov eax, 2 +; CHECK-NEXT: mov eax, 2 +; CHECK-NEXT: mov eax, 2 +; CHECK: mov eax, dword ptr [rip + xa1] +; CHECK-NEXT: mov eax, dword ptr [rip + x2] +; CHECK-NEXT: mov eax, dword ptr [rip + x2] +; CHECK: mov eax, 8 +; CHECK-NEXT: mov eax, 8 +; CHECK-NEXT: mov eax, 8 +; CHECK-NEXT: mov eax, 8 + + ret +substitution_test_uppercase ENDP + +AmbiguousSubstitutionMacro MACRO x, y x&y BYTE 0 ENDM @@ -70,7 +108,7 @@ ambiguous_substitution_test PROC ; CHECK-LABEL: ambiguous_substitution_test: ; should expand to ab BYTE 0 - ambiguous_substitution_macro a, b + AmbiguousSubstitutionMacro a, b ; CHECK: ab: ; CHECK-NOT: ay: @@ -78,7 +116,7 @@ ambiguous_substitution_test PROC ; CHECK-NOT: xy: ambiguous_substitution_test ENDP -ambiguous_substitution_in_string_macro MACRO x, y +AmbiguousSubstitutionInStringMacro MACRO x, y BYTE "x&y" ENDM @@ -86,14 +124,14 @@ ambiguous_substitution_in_string_test PROC ; CHECK-LABEL: ambiguous_substitution_in_string_test: ; should expand to BYTE "5y" - ambiguous_substitution_in_string_macro 5, 7 + AmbiguousSubstitutionInStringMacro 5, 7 ; CHECK: .byte 53 ; CHECK-NEXT: .byte 121 ; CHECK-NOT: .byte ambiguous_substitution_in_string_test ENDP -optional_parameter_macro MACRO a1:req, a2 +OptionalParameterMacro MACRO a1:req, a2 mov eax, a1 IFNB mov eax, a2 @@ -104,17 +142,17 @@ ENDM optional_parameter_test PROC ; CHECK-LABEL: optional_parameter_test: - optional_parameter_macro 4 + OptionalParameterMacro 4 ; CHECK: mov eax, 4 ; CHECK: ret - optional_parameter_macro 5, 9 + OptionalParameterMacro 5, 9 ; CHECK: mov eax, 5 ; CHECK: mov eax, 9 ; CHECK: ret optional_parameter_test ENDP -local_symbol_macro MACRO +LocalSymbolMacro MACRO LOCAL a a: ret jmp a @@ -123,22 +161,22 @@ ENDM local_symbol_test PROC ; CHECK-LABEL: local_symbol_test: - local_symbol_macro + LocalSymbolMacro ; CHECK: "??0000": ; CHECK-NEXT: ret ; CHECK-NEXT: jmp "??0000" - local_symbol_macro + LocalSymbolMacro ; CHECK: "??0001": ; CHECK-NEXT: ret ; CHECK-NEXT: jmp "??0001" local_symbol_test ENDP -PURGE ambiguous_substitution_macro, local_symbol_macro, - optional_parameter_macro +PURGE AmbiguousSubstitutionMacro, LocalSymbolMacro, + OptionalParameterMacro ; Redefinition -local_symbol_macro MACRO +LocalSymbolMacro MACRO LOCAL b b: xor eax, eax jmp b @@ -147,7 +185,7 @@ ENDM purge_test PROC ; CHECK-LABEL: purge_test: - local_symbol_macro + LocalSymbolMacro ; CHECK: "??0002": ; CHECK-NEXT: xor eax, eax ; CHECK-NEXT: jmp "??0002"