summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorBill Wendling <isanbard@gmail.com>2013-12-02 07:38:30 +0000
committerBill Wendling <isanbard@gmail.com>2013-12-02 07:38:30 +0000
commitedb95d3f9eb354b30baddd58fee5d2e7b3da2c92 (patch)
treeca2e3256f3bb5f2a036cccc9705e0876f1dd8408
parentdb60e42e35d980119c12b1a2e8b627817c8449f4 (diff)
downloadclang-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.cpp11
-rw-r--r--test/Sema/warn-documentation-fixits.cpp6
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"