Author: Aaron Puchert Date: 2022-05-13T13:48:46+02:00 New Revision: 99d35826a043916b259a0e440a2aa5cabbad2773
URL: https://github.com/llvm/llvm-project/commit/99d35826a043916b259a0e440a2aa5cabbad2773 DIFF: https://github.com/llvm/llvm-project/commit/99d35826a043916b259a0e440a2aa5cabbad2773.diff LOG: Comment parsing: Specify argument numbers for some block commands The command traits have a member NumArgs for which all the parsing infrastructure is in place, but no command was setting it to a value other than 0. By doing so we get warnings when passing an empty paragraph to \retval (the first argument is the return value, then comes the description). We also take \xrefitem along for the ride, although as the documentation states it's unlikely to be used directly. Reviewed By: gribozavr2 Differential Revision: https://reviews.llvm.org/D125422 Added: Modified: clang/include/clang/AST/CommentCommands.td clang/test/AST/ast-dump-comment.cpp clang/test/Sema/warn-documentation.cpp Removed: ################################################################################ diff --git a/clang/include/clang/AST/CommentCommands.td b/clang/include/clang/AST/CommentCommands.td index 7e962a4b4171b..d357ec1cf8b99 100644 --- a/clang/include/clang/AST/CommentCommands.td +++ b/clang/include/clang/AST/CommentCommands.td @@ -154,7 +154,7 @@ def Post : BlockCommand<"post">; def Pre : BlockCommand<"pre">; def Remark : BlockCommand<"remark">; def Remarks : BlockCommand<"remarks">; -def Retval : BlockCommand<"retval">; +def Retval : BlockCommand<"retval"> { let NumArgs = 1; } def Sa : BlockCommand<"sa">; def See : BlockCommand<"see">; def Since : BlockCommand<"since">; @@ -162,7 +162,7 @@ def Test : BlockCommand<"test">; def Todo : BlockCommand<"todo">; def Version : BlockCommand<"version">; def Warning : BlockCommand<"warning">; -def XRefItem : BlockCommand<"xrefitem">; +def XRefItem : BlockCommand<"xrefitem"> { let NumArgs = 3; } // HeaderDoc commands def Abstract : BlockCommand<"abstract"> { let IsBriefCommand = 1; } def ClassDesign : RecordLikeDetailCommand<"classdesign">; diff --git a/clang/test/AST/ast-dump-comment.cpp b/clang/test/AST/ast-dump-comment.cpp index 11c96024546e0..1936c732cb989 100644 --- a/clang/test/AST/ast-dump-comment.cpp +++ b/clang/test/AST/ast-dump-comment.cpp @@ -32,6 +32,13 @@ int Test_BlockCommandComment; // CHECK-NEXT: ParagraphComment // CHECK-NEXT: TextComment{{.*}} Text=" Aaa" +/// \retval 42 Aaa +int Test_BlockCommandComment_WithArgs(); +// CHECK: FunctionDecl{{.*}}Test_BlockCommandComment_WithArgs +// CHECK: BlockCommandComment{{.*}} Name="retval" Arg[0]="42" +// CHECK-NEXT: ParagraphComment +// CHECK-NEXT: TextComment{{.*}} Text=" Aaa" + /// \param Aaa xxx /// \param [in,out] Bbb yyy void Test_ParamCommandComment(int Aaa, int Bbb); diff --git a/clang/test/Sema/warn-documentation.cpp b/clang/test/Sema/warn-documentation.cpp index 353c94a47eb6f..570b5baf54029 100644 --- a/clang/test/Sema/warn-documentation.cpp +++ b/clang/test/Sema/warn-documentation.cpp @@ -189,6 +189,14 @@ int test_multiple_returns3(int); int test_multiple_returns4(int); +/// expected-warning@+1 {{empty paragraph passed to '\retval' command}} +/// \retval 0 +int test_retval_no_paragraph(); + +/// \retval 0 Everything is fine. +int test_retval_fine(); + + // expected-warning@+1 {{'\param' command used in a comment that is not attached to a function declaration}} /// \param a Blah blah. int test_param1_backslash; _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits