The fix for PR22004: X86AsmParser.cpp asserts: OperandStack.size() > 1 && "Too few...
authorAndrew V. Tischenko <andrew.v.tischenko@gmail.com>
Fri, 26 May 2017 13:23:34 +0000 (13:23 +0000)
committerAndrew V. Tischenko <andrew.v.tischenko@gmail.com>
Fri, 26 May 2017 13:23:34 +0000 (13:23 +0000)
llvm-svn: 303985

llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp
llvm/test/MC/X86/pr22004.s [new file with mode: 0644]

index 32ab475..e5d3209 100644 (file)
@@ -1316,16 +1316,17 @@ bool X86AsmParser::ParseIntelExpression(IntelExprStateMachine &SM, SMLoc &End) {
   while (!Done) {
     bool UpdateLocLex = true;
 
+    AsmToken::TokenKind TK = getLexer().getKind();
     // The period in the dot operator (e.g., [ebx].foo.bar) is parsed as an
     // identifier.  Don't try an parse it as a register.
-    if (PrevTK != AsmToken::Error && Tok.getString().startswith("."))
+    if (PrevTK != AsmToken::Error && Tok.getString().startswith(".") &&
+        TK != AsmToken::Identifier)
       break;
 
     // If we're parsing an immediate expression, we don't expect a '['.
     if (SM.getStopOnLBrac() && getLexer().getKind() == AsmToken::LBrac)
       break;
 
-    AsmToken::TokenKind TK = getLexer().getKind();
     switch (TK) {
     default: {
       if (SM.isValidEndState()) {
diff --git a/llvm/test/MC/X86/pr22004.s b/llvm/test/MC/X86/pr22004.s
new file mode 100644 (file)
index 0000000..3ef1526
--- /dev/null
@@ -0,0 +1,3 @@
+// RUN: llvm-mc -triple x86_64-unknown-unknown -x86-asm-syntax=intel %s
+
+lea rax, qword ptr [rip + .L.str]