diff options
author | Nirav Dave <niravd@google.com> | 2016-07-14 17:37:05 +0000 |
---|---|---|
committer | Nirav Dave <niravd@google.com> | 2016-07-14 17:37:05 +0000 |
commit | a6c7595d0fd94d6c0784d082eee28016f15c5940 (patch) | |
tree | 124d2c3ea32ce7cf0c5aec40e1cc119870283e3d /llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp | |
parent | 83dc5cb6a94b633fa2c02d3b6a155aabda0d0bcf (diff) | |
download | bcm5719-llvm-a6c7595d0fd94d6c0784d082eee28016f15c5940.tar.gz bcm5719-llvm-a6c7595d0fd94d6c0784d082eee28016f15c5940.zip |
[X86][MC] Fix bracket expression parsing in intel-style assembly.
Only perform struct field check on Identifier tokens.
Fixes PR28547.
Reviewers: rnk
Subscribers: llvm-commits
Differential Revision: https://reviews.llvm.org/D22361
llvm-svn: 275445
Diffstat (limited to 'llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp')
-rw-r--r-- | llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp | 7 |
1 files changed, 5 insertions, 2 deletions
diff --git a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp index d016ae0c57d..4e0ad8bfe1f 100644 --- a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp +++ b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp @@ -1394,7 +1394,7 @@ X86AsmParser::ParseIntelBracExpression(unsigned SegReg, SMLoc Start, return ErrorOperand(BracLoc, "Expected '[' token!"); Parser.Lex(); // Eat '[' - SMLoc StartInBrac = Tok.getLoc(); + SMLoc StartInBrac = Parser.getTok().getLoc(); // Parse [ Symbol + ImmDisp ] and [ BaseReg + Scale*IndexReg + ImmDisp ]. We // may have already parsed an immediate displacement before the bracketed // expression. @@ -1423,7 +1423,10 @@ X86AsmParser::ParseIntelBracExpression(unsigned SegReg, SMLoc Start, // Parse struct field access. Intel requires a dot, but MSVC doesn't. MSVC // will in fact do global lookup the field name inside all global typedefs, // but we don't emulate that. - if (Tok.getString().find('.') != StringRef::npos) { + if ((Parser.getTok().getKind() == AsmToken::Identifier || + Parser.getTok().getKind() == AsmToken::Dot || + Parser.getTok().getKind() == AsmToken::Real) && + Parser.getTok().getString().find('.') != StringRef::npos) { const MCExpr *NewDisp; if (ParseIntelDotOperator(Disp, NewDisp)) return nullptr; |