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 | e0acd859d0b3245bc7dbd3ae511617f76c2fe23a (patch) | |
tree | 21bd905eb78f55e67ca3673fe99623b1b4ada787 | |
parent | 82305fc59a70f3b10b07235daa2601d08aebf0d3 (diff) | |
download | bcm5719-llvm-e0acd859d0b3245bc7dbd3ae511617f76c2fe23a.tar.gz bcm5719-llvm-e0acd859d0b3245bc7dbd3ae511617f76c2fe23a.zip |
Fixed source range for MS asm statement.
llvm-svn: 120724
-rw-r--r-- | clang/include/clang/Parse/Parser.h | 2 | ||||
-rw-r--r-- | clang/lib/Parse/ParseStmt.cpp | 11 |
2 files changed, 8 insertions, 5 deletions
diff --git a/clang/include/clang/Parse/Parser.h b/clang/include/clang/Parse/Parser.h index 5b0b56ac841..75263823cce 100644 --- a/clang/include/clang/Parse/Parser.h +++ b/clang/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<IdentifierInfo *> &Names, llvm::SmallVectorImpl<ExprTy *> &Constraints, llvm::SmallVectorImpl<ExprTy *> &Exprs); diff --git a/clang/lib/Parse/ParseStmt.cpp b/clang/lib/Parse/ParseStmt.cpp index 26d2279d31e..4d737b73704 100644 --- a/clang/lib/Parse/ParseStmt.cpp +++ b/clang/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(); |