From: Abramo Bagnara Date: Thu, 2 Dec 2010 18:34:55 +0000 (+0000) Subject: Fixed source range for MS asm statement. X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=a44724d0d6d03568ec9acadc0781d612163008e1;p=clang Fixed source range for MS asm statement. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@120724 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/include/clang/Parse/Parser.h b/include/clang/Parse/Parser.h index 5b0b56ac84..75263823cc 100644 --- a/include/clang/Parse/Parser.h +++ b/include/clang/Parse/Parser.h @@ -1210,7 +1210,7 @@ private: StmtResult ParseBreakStatement(AttributeList *Attr); StmtResult ParseReturnStatement(AttributeList *Attr); StmtResult ParseAsmStatement(bool &msAsm); - StmtResult FuzzyParseMicrosoftAsmStatement(); + StmtResult FuzzyParseMicrosoftAsmStatement(SourceLocation AsmLoc); bool ParseAsmOperandsOpt(llvm::SmallVectorImpl &Names, llvm::SmallVectorImpl &Constraints, llvm::SmallVectorImpl &Exprs); 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();