summaryrefslogtreecommitdiffstats
path: root/llvm/lib/MC/MCParser/AsmParser.cpp
diff options
context:
space:
mode:
authorReid Kleckner <rnk@google.com>2018-10-24 20:23:57 +0000
committerReid Kleckner <rnk@google.com>2018-10-24 20:23:57 +0000
commit953bdce68db36f1fec5299f9525b1b87c491a8a8 (patch)
treee640b62d318996512113fa1f58f0b3d1441618f9 /llvm/lib/MC/MCParser/AsmParser.cpp
parent1c353419ab51f63235389b821c1e6ed02c3ccfb8 (diff)
downloadbcm5719-llvm-953bdce68db36f1fec5299f9525b1b87c491a8a8.tar.gz
bcm5719-llvm-953bdce68db36f1fec5299f9525b1b87c491a8a8.zip
[MC] Separate masm integer literal lexer support from inline asm
Summary: This renames the IsParsingMSInlineAsm member variable of AsmLexer to LexMasmIntegers and moves it up to MCAsmLexer. This is the only behavior controlled by that variable. I added a public setter, so that it can be set from outside or from the llvm-mc command line. We may need to arrange things so that users can get this behavior from clang, but that's future work. I also put additional hex literal lexing functionality under this flag to fix PR32973. It appears that this hex literal parsing wasn't intended to be enabled in non-masm-style blocks. Now, masm integers (0b1101 and 0ABCh) work in __asm blocks from clang, but 0b label references work when using .intel_syntax in standalone .s files. However, 0b label references will *not* work from __asm blocks in clang. They will work from GCC inline asm blocks, which it sounds like is important for Crypto++ as mentioned in PR36144. Essentially, we only lex masm literals for inline asm blobs that use intel syntax. If the .intel_syntax directive is used inside a gnu-style inline asm statement, masm literals will not be lexed, which is compatible with gas and llvm-mc standalone .s assembly. This fixes PR36144 and PR32973. Reviewers: Gerolf, avt77 Subscribers: eraman, hiraditya, llvm-commits Differential Revision: https://reviews.llvm.org/D53535 llvm-svn: 345189
Diffstat (limited to 'llvm/lib/MC/MCParser/AsmParser.cpp')
-rw-r--r--llvm/lib/MC/MCParser/AsmParser.cpp4
1 files changed, 3 insertions, 1 deletions
diff --git a/llvm/lib/MC/MCParser/AsmParser.cpp b/llvm/lib/MC/MCParser/AsmParser.cpp
index 529f16525fe..3f7b507791e 100644
--- a/llvm/lib/MC/MCParser/AsmParser.cpp
+++ b/llvm/lib/MC/MCParser/AsmParser.cpp
@@ -229,7 +229,9 @@ public:
void setParsingInlineAsm(bool V) override {
ParsingInlineAsm = V;
- Lexer.setParsingMSInlineAsm(V);
+ // When parsing MS inline asm, we must lex 0b1101 and 0ABCH as binary and
+ // hex integer literals.
+ Lexer.setLexMasmIntegers(V);
}
bool isParsingInlineAsm() override { return ParsingInlineAsm; }
OpenPOWER on IntegriCloud