diff options
Diffstat (limited to 'clang/lib')
-rw-r--r-- | clang/lib/Parse/ParseCXXInlineMethods.cpp | 7 | ||||
-rw-r--r-- | clang/lib/Parse/ParseDeclCXX.cpp | 3 |
2 files changed, 7 insertions, 3 deletions
diff --git a/clang/lib/Parse/ParseCXXInlineMethods.cpp b/clang/lib/Parse/ParseCXXInlineMethods.cpp index 0d5bb2e97d4..03784b4f5ea 100644 --- a/clang/lib/Parse/ParseCXXInlineMethods.cpp +++ b/clang/lib/Parse/ParseCXXInlineMethods.cpp @@ -418,7 +418,7 @@ void Parser::ParseLexedMethodDeclaration(LateParsedMethodDeclaration &LM) { ExceptionSpecTokens); // Clean up the remaining tokens. - if (Tok.is(tok::cxx_exceptspec_end)) + if (Tok.is(tok::eof) && Tok.getEofData() == Actions.CurScope) ConsumeToken(); else if (EST != EST_None) Diag(Tok.getLocation(), diag::err_except_spec_unparsed); @@ -437,8 +437,11 @@ void Parser::ParseLexedMethodDeclaration(LateParsedMethodDeclaration &LM) { // There could be leftover tokens (e.g. because of an error). // Skip through until we reach the original token position. - while (Tok.getLocation() != origLoc && Tok.isNot(tok::eof)) + while (Tok.getLocation() != origLoc) { + if (Tok.is(tok::eof) && Tok.getEofData() != Actions.CurScope) + break; ConsumeAnyToken(); + } delete Toks; LM.ExceptionSpecTokens = nullptr; diff --git a/clang/lib/Parse/ParseDeclCXX.cpp b/clang/lib/Parse/ParseDeclCXX.cpp index 10568b3671b..09239f467ea 100644 --- a/clang/lib/Parse/ParseDeclCXX.cpp +++ b/clang/lib/Parse/ParseDeclCXX.cpp @@ -3163,8 +3163,9 @@ Parser::tryParseExceptionSpecification(bool Delayed, // Add the 'stop' token. Token End; End.startToken(); - End.setKind(tok::cxx_exceptspec_end); + End.setKind(tok::eof); End.setLocation(Tok.getLocation()); + End.setEofData(Actions.CurScope); ExceptionSpecTokens->push_back(End); return EST_Unparsed; } |