diff options
author | Abramo Bagnara <abramo.bagnara@gmail.com> | 2010-12-02 18:34:55 +0000 |
---|---|---|
committer | Abramo Bagnara <abramo.bagnara@gmail.com> | 2010-12-02 18:34:55 +0000 |
commit | a44724d0d6d03568ec9acadc0781d612163008e1 (patch) | |
tree | 2e38fcc1f580ac8ea1e6c25aff79231faad84e94 /lib/Parse/ParseStmt.cpp | |
parent | d1d56df188e25c633f9bc65d229897b42442b0f7 (diff) |
Fixed source range for MS asm statement.
git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@120724 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Parse/ParseStmt.cpp')
-rw-r--r-- | lib/Parse/ParseStmt.cpp | 11 |
1 files changed, 7 insertions, 4 deletions
diff --git a/lib/Parse/ParseStmt.cpp b/lib/Parse/ParseStmt.cpp index 26d2279d31..4d737b7370 100644 --- a/lib/Parse/ParseStmt.cpp +++ b/lib/Parse/ParseStmt.cpp @@ -1215,10 +1215,12 @@ StmtResult Parser::ParseReturnStatement(AttributeList *Attr) { /// FuzzyParseMicrosoftAsmStatement. When -fms-extensions is enabled, this /// routine is called to skip/ignore tokens that comprise the MS asm statement. -StmtResult Parser::FuzzyParseMicrosoftAsmStatement() { +StmtResult Parser::FuzzyParseMicrosoftAsmStatement(SourceLocation AsmLoc) { + SourceLocation EndLoc; if (Tok.is(tok::l_brace)) { unsigned short savedBraceCount = BraceCount; do { + EndLoc = Tok.getLocation(); ConsumeAnyToken(); } while (BraceCount > savedBraceCount && Tok.isNot(tok::eof)); } else { @@ -1228,6 +1230,7 @@ StmtResult Parser::FuzzyParseMicrosoftAsmStatement() { SourceLocation TokLoc = Tok.getLocation(); unsigned LineNo = SrcMgr.getInstantiationLineNumber(TokLoc); do { + EndLoc = TokLoc; ConsumeAnyToken(); TokLoc = Tok.getLocation(); } while ((SrcMgr.getInstantiationLineNumber(TokLoc) == LineNo) && @@ -1243,10 +1246,10 @@ StmtResult Parser::FuzzyParseMicrosoftAsmStatement() { ExprVector Constraints(Actions); ExprVector Exprs(Actions); ExprVector Clobbers(Actions); - return Actions.ActOnAsmStmt(Tok.getLocation(), true, true, 0, 0, 0, + return Actions.ActOnAsmStmt(AsmLoc, true, true, 0, 0, 0, move_arg(Constraints), move_arg(Exprs), AsmString.take(), move_arg(Clobbers), - Tok.getLocation(), true); + EndLoc, true); } /// ParseAsmStatement - Parse a GNU extended asm statement. @@ -1282,7 +1285,7 @@ StmtResult Parser::ParseAsmStatement(bool &msAsm) { if (getLang().Microsoft && Tok.isNot(tok::l_paren) && !isTypeQualifier()) { msAsm = true; - return FuzzyParseMicrosoftAsmStatement(); + return FuzzyParseMicrosoftAsmStatement(AsmLoc); } DeclSpec DS; SourceLocation Loc = Tok.getLocation(); |