1 // Without serialization: 2 // RUN: %clang_cc1 -Wdocumentation -ast-dump -ast-dump-filter Test %s \ 3 // RUN: | FileCheck -strict-whitespace %s 4 // 5 // With serialization: 6 // RUN: %clang_cc1 -Wdocumentation -emit-pch -o %t %s 7 // RUN: %clang_cc1 -x c++ -Wdocumentation -include-pch %t -ast-dump-all -ast-dump-filter Test /dev/null \ 8 // RUN: | sed -e "s/ <undeserialized declarations>//" -e "s/ imported//" \ 9 // RUN: | FileCheck --strict-whitespace %s 10 11 /// Aaa 12 int TestLocation; 13 // CHECK: VarDecl{{.*}}TestLocation 14 // CHECK-NEXT: FullComment 0x{{[^ ]*}} <line:[[@LINE-3]]:4, col:7> 15 16 /// 17 int TestIndent; 18 // CHECK: {{^VarDecl.*TestIndent[^()]*$}} 19 // CHECK-NEXT: {{^`-FullComment.*>$}} 20 21 /// Aaa 22 int Test_TextComment; 23 // CHECK: VarDecl{{.*}}Test_TextComment 24 // CHECK-NEXT: FullComment 25 // CHECK-NEXT: ParagraphComment 26 // CHECK-NEXT: TextComment{{.*}} Text=" Aaa" 27 28 /// \brief Aaa 29 int Test_BlockCommandComment; 30 // CHECK: VarDecl{{.*}}Test_BlockCommandComment 31 // CHECK: BlockCommandComment{{.*}} Name="brief" 32 // CHECK-NEXT: ParagraphComment 33 // CHECK-NEXT: TextComment{{.*}} Text=" Aaa" 34 35 /// \param Aaa xxx 36 /// \param [in,out] Bbb yyy 37 void Test_ParamCommandComment(int Aaa, int Bbb); 38 // CHECK: FunctionDecl{{.*}}Test_ParamCommandComment 39 // CHECK: ParamCommandComment{{.*}} [in] implicitly Param="Aaa" ParamIndex=0 40 // CHECK-NEXT: ParagraphComment 41 // CHECK-NEXT: TextComment{{.*}} Text=" xxx" 42 // CHECK: ParamCommandComment{{.*}} [in,out] explicitly Param="Bbb" ParamIndex=1 43 // CHECK-NEXT: ParagraphComment 44 // CHECK-NEXT: TextComment{{.*}} Text=" yyy" 45 46 /// \tparam Aaa xxx 47 template <typename Aaa> class Test_TParamCommandComment; 48 // CHECK: ClassTemplateDecl{{.*}}Test_TParamCommandComment 49 // CHECK: TParamCommandComment{{.*}} Param="Aaa" Position=<0> 50 // CHECK-NEXT: ParagraphComment 51 // CHECK-NEXT: TextComment{{.*}} Text=" xxx" 52 53 /// \c Aaa 54 int Test_InlineCommandComment; 55 // CHECK: VarDecl{{.*}}Test_InlineCommandComment 56 // CHECK: InlineCommandComment{{.*}} Name="c" RenderMonospaced Arg[0]="Aaa" 57 58 /// \anchor Aaa 59 int Test_InlineCommandCommentAnchor; 60 // CHECK: VarDecl{{.*}}Test_InlineCommandComment 61 // CHECK: InlineCommandComment{{.*}} Name="anchor" RenderAnchor Arg[0]="Aaa" 62 63 /// <a>Aaa</a> 64 /// <br/> 65 int Test_HTMLTagComment; 66 // CHECK: VarDecl{{.*}}Test_HTMLTagComment 67 // CHECK-NEXT: FullComment 68 // CHECK-NEXT: ParagraphComment 69 // CHECK-NEXT: TextComment{{.*}} Text=" " 70 // CHECK-NEXT: HTMLStartTagComment{{.*}} Name="a" 71 // CHECK-NEXT: TextComment{{.*}} Text="Aaa" 72 // CHECK-NEXT: HTMLEndTagComment{{.*}} Name="a" 73 // CHECK-NEXT: TextComment{{.*}} Text=" " 74 // CHECK-NEXT: HTMLStartTagComment{{.*}} Name="br" SelfClosing 75 76 /// \verbatim 77 /// Aaa 78 /// \endverbatim 79 /// \f$ a \f$ 80 /// \f( b \f) 81 /// \f[ c \f] 82 /// \f{env}{ c \f} 83 int Test_VerbatimBlockComment; 84 // CHECK: VarDecl{{.*}}Test_VerbatimBlockComment 85 // CHECK: VerbatimBlockComment{{.*}} Name="verbatim" CloseName="endverbatim" 86 // CHECK-NEXT: VerbatimBlockLineComment{{.*}} Text=" Aaa" 87 // CHECK: VerbatimBlockComment{{.*}} Name="f$" CloseName="f$" 88 // CHECK-NEXT: VerbatimBlockLineComment{{.*}} Text=" a " 89 // CHECK: VerbatimBlockComment{{.*}} Name="f(" CloseName="f)" 90 // CHECK-NEXT: VerbatimBlockLineComment{{.*}} Text=" b " 91 // CHECK: VerbatimBlockComment{{.*}} Name="f[" CloseName="f]" 92 // CHECK-NEXT: VerbatimBlockLineComment{{.*}} Text=" c " 93 // CHECK: VerbatimBlockComment{{.*}} Name="f{" CloseName="f}" 94 // CHECK-NEXT: VerbatimBlockLineComment{{.*}} Text="env}{ c " 95 96 /// \param ... More arguments 97 template<typename T> 98 void Test_TemplatedFunctionVariadic(int arg, ...); 99 // CHECK: FunctionTemplateDecl{{.*}}Test_TemplatedFunctionVariadic 100 // CHECK: ParamCommandComment{{.*}} [in] implicitly Param="..." 101 // CHECK-NEXT: ParagraphComment 102 // CHECK-NEXT: TextComment{{.*}} Text=" More arguments" 103