diff options
author | Bill Wendling <isanbard@gmail.com> | 2013-12-02 07:38:30 +0000 |
---|---|---|
committer | Bill Wendling <isanbard@gmail.com> | 2013-12-02 07:38:30 +0000 |
commit | edb95d3f9eb354b30baddd58fee5d2e7b3da2c92 (patch) | |
tree | ca2e3256f3bb5f2a036cccc9705e0876f1dd8408 | |
parent | db60e42e35d980119c12b1a2e8b627817c8449f4 (diff) | |
download | clang-edb95d3f9eb354b30baddd58fee5d2e7b3da2c92.tar.gz clang-edb95d3f9eb354b30baddd58fee5d2e7b3da2c92.tar.bz2 clang-edb95d3f9eb354b30baddd58fee5d2e7b3da2c92.tar.xz |
Merging r196048:
------------------------------------------------------------------------
r196048 | d0k | 2013-12-01 07:09:32 -0800 (Sun, 01 Dec 2013) | 3 lines
CommentLexer: When proceeding with a typo corrected name don't clobber the token.
This would crash if the token is used in another diagnostic. PR18051.
------------------------------------------------------------------------
git-svn-id: https://llvm.org/svn/llvm-project/cfe/branches/release_34@196075 91177308-0d34-0410-b5e6-96231b3b80d8
-rw-r--r-- | lib/AST/CommentLexer.cpp | 11 | ||||
-rw-r--r-- | test/Sema/warn-documentation-fixits.cpp | 6 |
2 files changed, 12 insertions, 5 deletions
diff --git a/lib/AST/CommentLexer.cpp b/lib/AST/CommentLexer.cpp index 475532d9a9..01ed3ce80a 100644 --- a/lib/AST/CommentLexer.cpp +++ b/lib/AST/CommentLexer.cpp @@ -353,16 +353,17 @@ void Lexer::lexCommentText(Token &T) { const CommandInfo *Info = Traits.getCommandInfoOrNULL(CommandName); if (!Info) { - formTokenWithChars(T, TokenPtr, tok::unknown_command); - T.setUnknownCommandName(CommandName); if ((Info = Traits.getTypoCorrectCommandInfo(CommandName))) { StringRef CorrectedName = Info->Name; - SourceRange CommandRange(T.getLocation().getLocWithOffset(1), - T.getEndLocation()); - Diag(T.getLocation(), diag::warn_correct_comment_command_name) + SourceLocation Loc = getSourceLocation(BufferPtr); + SourceRange CommandRange(Loc.getLocWithOffset(1), + getSourceLocation(TokenPtr)); + Diag(Loc, diag::warn_correct_comment_command_name) << CommandName << CorrectedName << FixItHint::CreateReplacement(CommandRange, CorrectedName); } else { + formTokenWithChars(T, TokenPtr, tok::unknown_command); + T.setUnknownCommandName(CommandName); Diag(T.getLocation(), diag::warn_unknown_comment_command_name); return; } diff --git a/test/Sema/warn-documentation-fixits.cpp b/test/Sema/warn-documentation-fixits.cpp index a5a477f66d..675d86c366 100644 --- a/test/Sema/warn-documentation-fixits.cpp +++ b/test/Sema/warn-documentation-fixits.cpp @@ -70,6 +70,11 @@ int gorf(); /// \t bbb IS_DOXYGEN_END int Bar(); +// expected-warning@+2 {{unknown command tag name 'encode'; did you mean 'endcode'?}} +// expected-warning@+1 {{'\endcode' command does not terminate a verbatim text block}} +/// \encode PR18051 +int PR18051(); + // CHECK: fix-it:"{{.*}}":{5:12-5:22}:"a" // CHECK: fix-it:"{{.*}}":{9:12-9:15}:"aaa" // CHECK: fix-it:"{{.*}}":{13:13-13:23}:"T" @@ -83,3 +88,4 @@ int Bar(); // CHECK: fix-it:"{{.*}}":{58:30-58:30}:" MY_ATTR_DEPRECATED" // CHECK: fix-it:"{{.*}}":{63:6-63:11}:"return" // CHECK: fix-it:"{{.*}}":{67:6-67:11}:"foobar" +// CHECK: fix-it:"{{.*}}":{75:6-75:12}:"endcode" |