diff --git a/clang/include/clang/AST/CommentCommands.td b/clang/include/clang/AST/CommentCommands.td --- a/clang/include/clang/AST/CommentCommands.td +++ b/clang/include/clang/AST/CommentCommands.td @@ -154,7 +154,7 @@ 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 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 --- a/clang/test/AST/ast-dump-comment.cpp +++ b/clang/test/AST/ast-dump-comment.cpp @@ -32,6 +32,13 @@ // 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 --- a/clang/test/Sema/warn-documentation.cpp +++ b/clang/test/Sema/warn-documentation.cpp @@ -189,6 +189,14 @@ 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;