diff options
| author | Marina Yatsina <marina.yatsina@intel.com> | 2015-12-24 12:09:51 +0000 |
|---|---|---|
| committer | Marina Yatsina <marina.yatsina@intel.com> | 2015-12-24 12:09:51 +0000 |
| commit | 8dfd5cbb73eee328a001b139ab844e48ad2ea495 (patch) | |
| tree | a55375ea6484d9a85933892872a9ee88cbed3232 | |
| parent | 01a65b19cf6412a54fb3f5a15ebd0092f534455f (diff) | |
| download | bcm5719-llvm-8dfd5cbb73eee328a001b139ab844e48ad2ea495.tar.gz bcm5719-llvm-8dfd5cbb73eee328a001b139ab844e48ad2ea495.zip | |
[X86][ms-inline asm] Add support for memory operands that include structs
Add ability to reference struct symbols in memory operands.
Test case will be added on the clang side (review http://reviews.llvm.org/D15749)
Differential Revision: http://reviews.llvm.org/D15748
llvm-svn: 256381
| -rw-r--r-- | llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp | 6 |
1 files changed, 5 insertions, 1 deletions
diff --git a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp index 4d36f1fd69c..5681966a279 100644 --- a/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp +++ b/llvm/lib/Target/X86/AsmParser/X86AsmParser.cpp @@ -1172,6 +1172,7 @@ bool X86AsmParser::ParseIntelExpression(IntelExprStateMachine &SM, SMLoc &End) { MCAsmParser &Parser = getParser(); const AsmToken &Tok = Parser.getTok(); + AsmToken::TokenKind PrevTK = AsmToken::Error; bool Done = false; while (!Done) { bool UpdateLocLex = true; @@ -1215,7 +1216,8 @@ bool X86AsmParser::ParseIntelExpression(IntelExprStateMachine &SM, SMLoc &End) { return Error(Tok.getLoc(), "Unexpected identifier!"); } else { // This is a dot operator, not an adjacent identifier. - if (Identifier.find('.') != StringRef::npos) { + if (Identifier.find('.') != StringRef::npos && + PrevTK == AsmToken::RBrac) { return false; } else { InlineAsmIdentifierInfo &Info = SM.getIdentifierInfo(); @@ -1284,6 +1286,8 @@ bool X86AsmParser::ParseIntelExpression(IntelExprStateMachine &SM, SMLoc &End) { if (!Done && UpdateLocLex) End = consumeToken(); + + PrevTK = TK; } return false; } |

