[llvm] 37fb3b3 - [AsmParser] Make generic directives and aliases case insensitive.
David Spickett via llvm-commits
llvm-commits at lists.llvm.org
Fri Jan 17 03:07:17 PST 2020
Author: David Spickett
Date: 2020-01-17T11:02:56Z
New Revision: 37fb3b33637b7ac120d68792ad2246c8b5d7eeff
URL: https://github.com/llvm/llvm-project/commit/37fb3b33637b7ac120d68792ad2246c8b5d7eeff
DIFF: https://github.com/llvm/llvm-project/commit/37fb3b33637b7ac120d68792ad2246c8b5d7eeff.diff
LOG: [AsmParser] Make generic directives and aliases case insensitive.
GCC will accept any case for assembler directives.
For example ".abort" and ".ABORT" (even ".aBoRt")
are equivalent.
https://sourceware.org/binutils/docs/as/Pseudo-Ops.html#Pseudo-Ops
"The names are case insensitive for most targets,
and usually written in lower case."
Change llvm-mc to accept any case for generic directives
or aliases of those directives.
This for Bugzilla #39527.
Differential Revision: https://reviews.llvm.org/D72686
Added:
llvm/test/MC/AsmParser/directive_case_insensitive.s
Modified:
llvm/lib/MC/MCParser/AsmParser.cpp
Removed:
################################################################################
diff --git a/llvm/lib/MC/MCParser/AsmParser.cpp b/llvm/lib/MC/MCParser/AsmParser.cpp
index 94a44c1f93b1..c5938b813f41 100644
--- a/llvm/lib/MC/MCParser/AsmParser.cpp
+++ b/llvm/lib/MC/MCParser/AsmParser.cpp
@@ -199,7 +199,7 @@ class AsmParser : public MCAsmParser {
}
void addAliasForDirective(StringRef Directive, StringRef Alias) override {
- DirectiveKindMap[Directive] = DirectiveKindMap[Alias];
+ DirectiveKindMap[Directive.lower()] = DirectiveKindMap[Alias.lower()];
}
/// @name MCAsmParser Interface
@@ -1750,7 +1750,7 @@ bool AsmParser::parseStatement(ParseStatementInfo &Info,
// have to do this so that .endif isn't skipped in a ".if 0" block for
// example.
StringMap<DirectiveKind>::const_iterator DirKindIt =
- DirectiveKindMap.find(IDVal);
+ DirectiveKindMap.find(IDVal.lower());
DirectiveKind DirKind = (DirKindIt == DirectiveKindMap.end())
? DK_NO_DIRECTIVE
@@ -5320,6 +5320,12 @@ bool AsmParser::parseDirectiveEndIf(SMLoc DirectiveLoc) {
}
void AsmParser::initializeDirectiveKindMap() {
+ /* Lookup will be done with the directive
+ * converted to lower case, so all these
+ * keys should be lower case.
+ * (target specific directives are handled
+ * elsewhere)
+ */
DirectiveKindMap[".set"] = DK_SET;
DirectiveKindMap[".equ"] = DK_EQU;
DirectiveKindMap[".equiv"] = DK_EQUIV;
diff --git a/llvm/test/MC/AsmParser/directive_case_insensitive.s b/llvm/test/MC/AsmParser/directive_case_insensitive.s
new file mode 100644
index 000000000000..67a204bb0c68
--- /dev/null
+++ b/llvm/test/MC/AsmParser/directive_case_insensitive.s
@@ -0,0 +1,16 @@
+# RUN: llvm-mc -triple i386-unknown-unknown %s | FileCheck %s
+
+# CHECK: .byte 65
+ .ascii "A"
+# CHECK: .byte 66
+ .ASCII "B"
+# CHECK: .byte 67
+ .aScIi "C"
+
+# Note: using 2byte because it is an alias
+# CHECK: .short 4660
+ .2byte 0x1234
+# CHECK: .short 4661
+ .2BYTE 0x1235
+# CHECK: .short 4662
+ .2bYtE 0x1236
More information about the llvm-commits
mailing list