diff options
| author | Sebastian Redl <sebastian.redl@getdesigned.at> | 2010-02-08 19:35:18 +0000 |
|---|---|---|
| committer | Sebastian Redl <sebastian.redl@getdesigned.at> | 2010-02-08 19:35:18 +0000 |
| commit | b0e3e1bf67b28fba9c70981ad3a4069440aa1600 (patch) | |
| tree | fdeae4282a112d21544d065622f06213deadc4e2 /clang/lib | |
| parent | 69f9dbc3e4a4a22b6aea560d386d70cabc885ef8 (diff) | |
| download | bcm5719-llvm-b0e3e1bf67b28fba9c70981ad3a4069440aa1600.tar.gz bcm5719-llvm-b0e3e1bf67b28fba9c70981ad3a4069440aa1600.zip | |
When placing an annotation token over an existing annotation token, make sure that the new token's range extends to the end of the old token. Assert that in AnnotateCachedTokens. Fixes PR6248.
llvm-svn: 95555
Diffstat (limited to 'clang/lib')
| -rw-r--r-- | clang/lib/Lex/PPCaching.cpp | 2 | ||||
| -rw-r--r-- | clang/lib/Parse/ParseTemplate.cpp | 2 | ||||
| -rw-r--r-- | clang/lib/Parse/Parser.cpp | 3 |
3 files changed, 4 insertions, 3 deletions
diff --git a/clang/lib/Lex/PPCaching.cpp b/clang/lib/Lex/PPCaching.cpp index 7c3780ffc0a..6aeb6fa3a2f 100644 --- a/clang/lib/Lex/PPCaching.cpp +++ b/clang/lib/Lex/PPCaching.cpp @@ -91,7 +91,7 @@ const Token &Preprocessor::PeekAhead(unsigned N) { void Preprocessor::AnnotatePreviousCachedTokens(const Token &Tok) { assert(Tok.isAnnotation() && "Expected annotation token"); assert(CachedLexPos != 0 && "Expected to have some cached tokens"); - assert(CachedTokens[CachedLexPos-1].getLocation() == Tok.getAnnotationEndLoc() + assert(CachedTokens[CachedLexPos-1].getLastLoc() == Tok.getAnnotationEndLoc() && "The annotation should be until the most recent cached token"); // Start from the end of the cached tokens list and look for the token diff --git a/clang/lib/Parse/ParseTemplate.cpp b/clang/lib/Parse/ParseTemplate.cpp index 797c1dfe3e6..12f26bfcb94 100644 --- a/clang/lib/Parse/ParseTemplate.cpp +++ b/clang/lib/Parse/ParseTemplate.cpp @@ -836,7 +836,7 @@ void Parser::AnnotateTemplateIdTokenAsType(const CXXScopeSpec *SS) { Tok.setAnnotationValue(Type.isInvalid()? 0 : Type.get()); if (SS && SS->isNotEmpty()) // it was a C++ qualified type name. Tok.setLocation(SS->getBeginLoc()); - Tok.setAnnotationEndLoc(TemplateId->TemplateNameLoc); + // End location stays the same // Replace the template-id annotation token, and possible the scope-specifier // that precedes it, with the typename annotation token. diff --git a/clang/lib/Parse/Parser.cpp b/clang/lib/Parse/Parser.cpp index 2558b667581..e5bed3096d5 100644 --- a/clang/lib/Parse/Parser.cpp +++ b/clang/lib/Parse/Parser.cpp @@ -944,9 +944,10 @@ bool Parser::TryAnnotateTypeOrScopeToken(bool EnteringContext) { return false; } + SourceLocation EndLoc = Tok.getLastLoc(); Tok.setKind(tok::annot_typename); Tok.setAnnotationValue(Ty.isInvalid()? 0 : Ty.get()); - Tok.setAnnotationEndLoc(Tok.getLocation()); + Tok.setAnnotationEndLoc(EndLoc); Tok.setLocation(TypenameLoc); PP.AnnotateCachedTokens(Tok); return true; |

