1aab8383aSDmitri Gribenko // Run lines are sensitive to line numbers and come below the code. 2aab8383aSDmitri Gribenko 3aab8383aSDmitri Gribenko #ifndef HEADER 4aab8383aSDmitri Gribenko #define HEADER 5aab8383aSDmitri Gribenko 6aab8383aSDmitri Gribenko // Not a Doxygen comment. NOT_DOXYGEN 7aab8383aSDmitri Gribenko void notdoxy1(void); 8aab8383aSDmitri Gribenko 9aab8383aSDmitri Gribenko /* Not a Doxygen comment. NOT_DOXYGEN */ 10aab8383aSDmitri Gribenko void notdoxy2(void); 11aab8383aSDmitri Gribenko 12aab8383aSDmitri Gribenko /*/ Not a Doxygen comment. NOT_DOXYGEN */ 13aab8383aSDmitri Gribenko void notdoxy3(void); 14aab8383aSDmitri Gribenko 15aab8383aSDmitri Gribenko /** Doxygen comment. isdoxy4 IS_DOXYGEN_SINGLE */ 16aab8383aSDmitri Gribenko void isdoxy4(void); 17aab8383aSDmitri Gribenko 18aab8383aSDmitri Gribenko /** 19aab8383aSDmitri Gribenko * Doxygen comment. isdoxy5 IS_DOXYGEN_SINGLE */ 20aab8383aSDmitri Gribenko void isdoxy5(void); 21aab8383aSDmitri Gribenko 22aab8383aSDmitri Gribenko /** 23aab8383aSDmitri Gribenko * Doxygen comment. 24aab8383aSDmitri Gribenko * isdoxy6 IS_DOXYGEN_SINGLE */ 25aab8383aSDmitri Gribenko void isdoxy6(void); 26aab8383aSDmitri Gribenko 27aab8383aSDmitri Gribenko /** 28aab8383aSDmitri Gribenko * Doxygen comment. 29aab8383aSDmitri Gribenko * isdoxy7 IS_DOXYGEN_SINGLE 30aab8383aSDmitri Gribenko */ 31aab8383aSDmitri Gribenko void isdoxy7(void); 32aab8383aSDmitri Gribenko 33aab8383aSDmitri Gribenko /*! Doxygen comment. isdoxy8 IS_DOXYGEN_SINGLE */ 34aab8383aSDmitri Gribenko void isdoxy8(void); 35aab8383aSDmitri Gribenko 36aab8383aSDmitri Gribenko /// Doxygen comment. isdoxy9 IS_DOXYGEN_SINGLE 37aab8383aSDmitri Gribenko void isdoxy9(void); 38aab8383aSDmitri Gribenko 39aab8383aSDmitri Gribenko // Not a Doxygen comment. NOT_DOXYGEN 40aab8383aSDmitri Gribenko /// Doxygen comment. isdoxy10 IS_DOXYGEN_SINGLE 41aab8383aSDmitri Gribenko void isdoxy10(void); 42aab8383aSDmitri Gribenko 43aab8383aSDmitri Gribenko /// Doxygen comment. isdoxy11 IS_DOXYGEN_SINGLE 44aab8383aSDmitri Gribenko // Not a Doxygen comment. NOT_DOXYGEN 45aab8383aSDmitri Gribenko void isdoxy11(void); 46aab8383aSDmitri Gribenko 47aab8383aSDmitri Gribenko /** Doxygen comment. isdoxy12 IS_DOXYGEN_SINGLE */ 48aab8383aSDmitri Gribenko /* Not a Doxygen comment. NOT_DOXYGEN */ 49aab8383aSDmitri Gribenko void isdoxy12(void); 50aab8383aSDmitri Gribenko 51aab8383aSDmitri Gribenko /// Doxygen comment. isdoxy13 IS_DOXYGEN_START 52aab8383aSDmitri Gribenko /// Doxygen comment. IS_DOXYGEN_END 53aab8383aSDmitri Gribenko void isdoxy13(void); 54aab8383aSDmitri Gribenko 55aab8383aSDmitri Gribenko /// Doxygen comment. isdoxy14 IS_DOXYGEN_START 56aab8383aSDmitri Gribenko /// Blah-blah-blah. 57aab8383aSDmitri Gribenko /// Doxygen comment. IS_DOXYGEN_END 58aab8383aSDmitri Gribenko void isdoxy14(void); 59aab8383aSDmitri Gribenko 60aab8383aSDmitri Gribenko /// Doxygen comment. isdoxy15 IS_DOXYGEN_START 61aab8383aSDmitri Gribenko /** Blah-blah-blah */ 62aab8383aSDmitri Gribenko /// Doxygen comment. IS_DOXYGEN_END 63aab8383aSDmitri Gribenko void isdoxy15(void); 64aab8383aSDmitri Gribenko 65aab8383aSDmitri Gribenko /** Blah-blah-blah. isdoxy16 IS_DOXYGEN_START *//** Blah */ 66aab8383aSDmitri Gribenko /// Doxygen comment. IS_DOXYGEN_END 67aab8383aSDmitri Gribenko void isdoxy16(void); 68aab8383aSDmitri Gribenko 69aab8383aSDmitri Gribenko /// isdoxy17 IS_DOXYGEN_START 70aab8383aSDmitri Gribenko // Not a Doxygen comment, but still picked up. 71aab8383aSDmitri Gribenko /// IS_DOXYGEN_END 72aab8383aSDmitri Gribenko void isdoxy17(void); 73aab8383aSDmitri Gribenko 74aab8383aSDmitri Gribenko unsigned 75aab8383aSDmitri Gribenko // NOT_DOXYGEN 76aab8383aSDmitri Gribenko /// isdoxy18 IS_DOXYGEN_START 77aab8383aSDmitri Gribenko // Not a Doxygen comment, but still picked up. 78aab8383aSDmitri Gribenko /// IS_DOXYGEN_END 79aab8383aSDmitri Gribenko // NOT_DOXYGEN 80aab8383aSDmitri Gribenko int isdoxy18(void); 81aab8383aSDmitri Gribenko 82aab8383aSDmitri Gribenko //! It all starts here. isdoxy19 IS_DOXYGEN_START 83aab8383aSDmitri Gribenko /*! It's a little odd to continue line this, 84aab8383aSDmitri Gribenko * 85aab8383aSDmitri Gribenko * but we need more multi-line comments. */ 86aab8383aSDmitri Gribenko /// This comment comes before my other comments 87aab8383aSDmitri Gribenko /** This is a block comment that is associated with the function f. It 88aab8383aSDmitri Gribenko * runs for three lines. IS_DOXYGEN_END 89aab8383aSDmitri Gribenko */ 90aab8383aSDmitri Gribenko void isdoxy19(int, int); 91aab8383aSDmitri Gribenko 92aab8383aSDmitri Gribenko // NOT IN THE COMMENT NOT_DOXYGEN 93aab8383aSDmitri Gribenko /// This is a BCPL comment. isdoxy20 IS_DOXYGEN_START 94aab8383aSDmitri Gribenko /// It has only two lines. 95aab8383aSDmitri Gribenko /** But there are other blocks that are part of the comment, too. IS_DOXYGEN_END */ 96aab8383aSDmitri Gribenko void isdoxy20(int); 97aab8383aSDmitri Gribenko 98*44cd7e67SDmitri Gribenko void notdoxy21(int); ///< This is a member comment. isdoxy21 IS_DOXYGEN_NOT_ATTACHED 99aab8383aSDmitri Gribenko 100*44cd7e67SDmitri Gribenko void notdoxy22(int); /*!< This is a member comment. isdoxy22 IS_DOXYGEN_NOT_ATTACHED */ 101aab8383aSDmitri Gribenko 102*44cd7e67SDmitri Gribenko void notdoxy23(int); /**< This is a member comment. isdoxy23 IS_DOXYGEN_NOT_ATTACHED */ 103aab8383aSDmitri Gribenko 104aab8383aSDmitri Gribenko void notdoxy24(int); // NOT_DOXYGEN 105aab8383aSDmitri Gribenko 106aab8383aSDmitri Gribenko /// IS_DOXYGEN_SINGLE 107aab8383aSDmitri Gribenko struct isdoxy25 { 108aab8383aSDmitri Gribenko }; 109aab8383aSDmitri Gribenko 110aab8383aSDmitri Gribenko struct test26 { 111aab8383aSDmitri Gribenko /// IS_DOXYGEN_SINGLE 112aab8383aSDmitri Gribenko int isdoxy26; 113aab8383aSDmitri Gribenko }; 114aab8383aSDmitri Gribenko 115aab8383aSDmitri Gribenko struct test27 { 116aab8383aSDmitri Gribenko int isdoxy27; ///< IS_DOXYGEN_SINGLE 117aab8383aSDmitri Gribenko }; 118aab8383aSDmitri Gribenko 119aab8383aSDmitri Gribenko struct notdoxy28 { 120aab8383aSDmitri Gribenko }; ///< IS_DOXYGEN_NOT_ATTACHED 121aab8383aSDmitri Gribenko 122aab8383aSDmitri Gribenko /// IS_DOXYGEN_SINGLE 123aab8383aSDmitri Gribenko enum isdoxy29 { 124aab8383aSDmitri Gribenko }; 125aab8383aSDmitri Gribenko 126aab8383aSDmitri Gribenko enum notdoxy30 { 127aab8383aSDmitri Gribenko }; ///< IS_DOXYGEN_NOT_ATTACHED 128aab8383aSDmitri Gribenko 129aab8383aSDmitri Gribenko /// IS_DOXYGEN_SINGLE 130aab8383aSDmitri Gribenko namespace isdoxy31 { 131aab8383aSDmitri Gribenko }; 132aab8383aSDmitri Gribenko 133aab8383aSDmitri Gribenko namespace notdoxy32 { 134aab8383aSDmitri Gribenko }; ///< IS_DOXYGEN_NOT_ATTACHED 135aab8383aSDmitri Gribenko 136aab8383aSDmitri Gribenko class test33 { 137aab8383aSDmitri Gribenko ///< IS_DOXYGEN_NOT_ATTACHED 138aab8383aSDmitri Gribenko int isdoxy33; ///< isdoxy33 IS_DOXYGEN_SINGLE 139aab8383aSDmitri Gribenko int isdoxy34; ///< isdoxy34 IS_DOXYGEN_SINGLE 140aab8383aSDmitri Gribenko 141aab8383aSDmitri Gribenko ///< IS_DOXYGEN_NOT_ATTACHED 142aab8383aSDmitri Gribenko int isdoxy35, ///< isdoxy35 IS_DOXYGEN_SINGLE 143aab8383aSDmitri Gribenko isdoxy36; ///< isdoxy36 IS_DOXYGEN_SINGLE 144aab8383aSDmitri Gribenko 145aab8383aSDmitri Gribenko ///< IS_DOXYGEN_NOT_ATTACHED 146aab8383aSDmitri Gribenko int isdoxy37 ///< isdoxy37 IS_DOXYGEN_SINGLE 147aab8383aSDmitri Gribenko , isdoxy38 ///< isdoxy38 IS_DOXYGEN_SINGLE 148aab8383aSDmitri Gribenko , isdoxy39; ///< isdoxy39 IS_DOXYGEN_SINGLE 149aab8383aSDmitri Gribenko }; 150aab8383aSDmitri Gribenko 151aab8383aSDmitri Gribenko // Verified that Doxygen attaches these. 152aab8383aSDmitri Gribenko 153aab8383aSDmitri Gribenko /// isdoxy40 IS_DOXYGEN_SINGLE 154aab8383aSDmitri Gribenko // NOT_DOXYGEN 155aab8383aSDmitri Gribenko void isdoxy40(int); 156aab8383aSDmitri Gribenko 157aab8383aSDmitri Gribenko unsigned 158aab8383aSDmitri Gribenko /// isdoxy41 IS_DOXYGEN_SINGLE 159aab8383aSDmitri Gribenko // NOT_DOXYGEN 160aab8383aSDmitri Gribenko int isdoxy41(int); 161aab8383aSDmitri Gribenko 162aab8383aSDmitri Gribenko class test42 { 163aab8383aSDmitri Gribenko int isdoxy42; /* NOT_DOXYGEN */ ///< isdoxy42 IS_DOXYGEN_SINGLE 164aab8383aSDmitri Gribenko }; 165aab8383aSDmitri Gribenko 1665188c4b9SDmitri Gribenko /// IS_DOXYGEN_START 1675188c4b9SDmitri Gribenko /// It is fine to have a command at the end of comment. 1685188c4b9SDmitri Gribenko ///\brief 1695188c4b9SDmitri Gribenko /// 1705188c4b9SDmitri Gribenko /// Some malformed command. 1715188c4b9SDmitri Gribenko /* \*/ 1725188c4b9SDmitri Gribenko /** 1735188c4b9SDmitri Gribenko * \brief Aaa aaaaaaa aaaa. 1745188c4b9SDmitri Gribenko * IS_DOXYGEN_END 1755188c4b9SDmitri Gribenko */ 1765188c4b9SDmitri Gribenko void isdoxy43(void); 1775188c4b9SDmitri Gribenko 1785188c4b9SDmitri Gribenko /// IS_DOXYGEN_START Aaa bbb 1795188c4b9SDmitri Gribenko /// ccc. 1805188c4b9SDmitri Gribenko /// 1815188c4b9SDmitri Gribenko /// Ddd eee. 1825188c4b9SDmitri Gribenko /// Fff. 1835188c4b9SDmitri Gribenko /// 1845188c4b9SDmitri Gribenko /// Ggg. IS_DOXYGEN_END 1855188c4b9SDmitri Gribenko void isdoxy44(void); 1865188c4b9SDmitri Gribenko 1875188c4b9SDmitri Gribenko /// IS_DOXYGEN_START Aaa bbb 1885188c4b9SDmitri Gribenko /// ccc. 1895188c4b9SDmitri Gribenko /// 1905188c4b9SDmitri Gribenko /// \brief 1915188c4b9SDmitri Gribenko /// Ddd eee. 1925188c4b9SDmitri Gribenko /// Fff. 1935188c4b9SDmitri Gribenko /// 1945188c4b9SDmitri Gribenko /// Ggg. IS_DOXYGEN_END 1955188c4b9SDmitri Gribenko void isdoxy45(void); 1965188c4b9SDmitri Gribenko 1977e8729b9SDmitri Gribenko /// IS_DOXYGEN_NOT_ATTACHED 1987e8729b9SDmitri Gribenko #define FOO 1997e8729b9SDmitri Gribenko void notdoxy46(void); 2007e8729b9SDmitri Gribenko 201a1e9c8e7SDmitri Gribenko /// IS_DOXYGEN_START Aaa bbb 202a1e9c8e7SDmitri Gribenko /// \param ccc 203a1e9c8e7SDmitri Gribenko /// \returns ddd IS_DOXYGEN_END 204a1e9c8e7SDmitri Gribenko void isdoxy47(int); 205a1e9c8e7SDmitri Gribenko 206aab8383aSDmitri Gribenko #endif 207aab8383aSDmitri Gribenko 208aab8383aSDmitri Gribenko // RUN: rm -rf %t 209aab8383aSDmitri Gribenko // RUN: mkdir %t 210aab8383aSDmitri Gribenko // RUN: %clang_cc1 -x c++ -emit-pch -o %t/out.pch %s 211aab8383aSDmitri Gribenko // RUN: %clang_cc1 -x c++ -include-pch %t/out.pch -fsyntax-only %s 212aab8383aSDmitri Gribenko 213aab8383aSDmitri Gribenko // RUN: c-index-test -test-load-source all %s > %t/out.c-index-direct 214aab8383aSDmitri Gribenko // RUN: c-index-test -test-load-tu %t/out.pch all > %t/out.c-index-pch 215aab8383aSDmitri Gribenko 216aab8383aSDmitri Gribenko // RUN: FileCheck %s -check-prefix=WRONG < %t/out.c-index-direct 217aab8383aSDmitri Gribenko // RUN: FileCheck %s -check-prefix=WRONG < %t/out.c-index-pch 218aab8383aSDmitri Gribenko 219aab8383aSDmitri Gribenko // Declarations without Doxygen comments should not pick up some Doxygen comments. 220aab8383aSDmitri Gribenko // WRONG-NOT: notdoxy{{.*}}Comment= 221aab8383aSDmitri Gribenko // WRONG-NOT: test{{.*}}Comment= 222aab8383aSDmitri Gribenko 223aab8383aSDmitri Gribenko // Non-Doxygen comments should not be attached to anything. 224aab8383aSDmitri Gribenko // WRONG-NOT: NOT_DOXYGEN 225aab8383aSDmitri Gribenko 226aab8383aSDmitri Gribenko // Some Doxygen comments are not attached to anything. 227aab8383aSDmitri Gribenko // WRONG-NOT: IS_DOXYGEN_NOT_ATTACHED 228aab8383aSDmitri Gribenko 229aab8383aSDmitri Gribenko // Ensure we don't pick up extra comments. 2305188c4b9SDmitri Gribenko // WRONG-NOT: IS_DOXYGEN_START{{.*}}IS_DOXYGEN_START{{.*}}BriefComment= 2315188c4b9SDmitri Gribenko // WRONG-NOT: IS_DOXYGEN_END{{.*}}IS_DOXYGEN_END{{.*}}BriefComment= 232aab8383aSDmitri Gribenko 233aab8383aSDmitri Gribenko // RUN: FileCheck %s < %t/out.c-index-direct 234aab8383aSDmitri Gribenko // RUN: FileCheck %s < %t/out.c-index-pch 235aab8383aSDmitri Gribenko 236aab8383aSDmitri Gribenko // CHECK: annotate-comments.cpp:16:6: FunctionDecl=isdoxy4:{{.*}} isdoxy4 IS_DOXYGEN_SINGLE 237aab8383aSDmitri Gribenko // CHECK: annotate-comments.cpp:20:6: FunctionDecl=isdoxy5:{{.*}} isdoxy5 IS_DOXYGEN_SINGLE 238aab8383aSDmitri Gribenko // CHECK: annotate-comments.cpp:25:6: FunctionDecl=isdoxy6:{{.*}} isdoxy6 IS_DOXYGEN_SINGLE 239aab8383aSDmitri Gribenko // CHECK: annotate-comments.cpp:31:6: FunctionDecl=isdoxy7:{{.*}} isdoxy7 IS_DOXYGEN_SINGLE 240aab8383aSDmitri Gribenko // CHECK: annotate-comments.cpp:34:6: FunctionDecl=isdoxy8:{{.*}} isdoxy8 IS_DOXYGEN_SINGLE 241aab8383aSDmitri Gribenko // CHECK: annotate-comments.cpp:37:6: FunctionDecl=isdoxy9:{{.*}} isdoxy9 IS_DOXYGEN_SINGLE 242aab8383aSDmitri Gribenko // CHECK: annotate-comments.cpp:41:6: FunctionDecl=isdoxy10:{{.*}} isdoxy10 IS_DOXYGEN_SINGLE 243aab8383aSDmitri Gribenko // CHECK: annotate-comments.cpp:53:6: FunctionDecl=isdoxy13:{{.*}} isdoxy13 IS_DOXYGEN_START{{.*}} IS_DOXYGEN_END 244aab8383aSDmitri Gribenko // CHECK: annotate-comments.cpp:58:6: FunctionDecl=isdoxy14:{{.*}} isdoxy14 IS_DOXYGEN_START{{.*}} IS_DOXYGEN_END 245aab8383aSDmitri Gribenko // CHECK: annotate-comments.cpp:63:6: FunctionDecl=isdoxy15:{{.*}} isdoxy15 IS_DOXYGEN_START{{.*}} IS_DOXYGEN_END 246aab8383aSDmitri Gribenko // CHECK: annotate-comments.cpp:67:6: FunctionDecl=isdoxy16:{{.*}} isdoxy16 IS_DOXYGEN_START{{.*}} IS_DOXYGEN_END 247aab8383aSDmitri Gribenko // CHECK: annotate-comments.cpp:72:6: FunctionDecl=isdoxy17:{{.*}} isdoxy17 IS_DOXYGEN_START{{.*}} IS_DOXYGEN_END 248aab8383aSDmitri Gribenko // CHECK: annotate-comments.cpp:80:5: FunctionDecl=isdoxy18:{{.*}} isdoxy18 IS_DOXYGEN_START{{.*}} IS_DOXYGEN_END 249aab8383aSDmitri Gribenko // CHECK: annotate-comments.cpp:90:6: FunctionDecl=isdoxy19:{{.*}} isdoxy19 IS_DOXYGEN_START{{.*}} IS_DOXYGEN_END 250aab8383aSDmitri Gribenko // CHECK: annotate-comments.cpp:96:6: FunctionDecl=isdoxy20:{{.*}} isdoxy20 IS_DOXYGEN_START{{.*}} IS_DOXYGEN_END 251aab8383aSDmitri Gribenko // CHECK: annotate-comments.cpp:107:8: StructDecl=isdoxy25:{{.*}} IS_DOXYGEN_SINGLE 252aab8383aSDmitri Gribenko // CHECK: annotate-comments.cpp:112:7: FieldDecl=isdoxy26:{{.*}} IS_DOXYGEN_SINGLE 253aab8383aSDmitri Gribenko // CHECK: annotate-comments.cpp:116:7: FieldDecl=isdoxy27:{{.*}} IS_DOXYGEN_SINGLE 254aab8383aSDmitri Gribenko // CHECK: annotate-comments.cpp:123:6: EnumDecl=isdoxy29:{{.*}} IS_DOXYGEN_SINGLE 255aab8383aSDmitri Gribenko // CHECK: annotate-comments.cpp:130:11: Namespace=isdoxy31:{{.*}} IS_DOXYGEN_SINGLE 256aab8383aSDmitri Gribenko // CHECK: annotate-comments.cpp:138:7: FieldDecl=isdoxy33:{{.*}} isdoxy33 IS_DOXYGEN_SINGLE 257aab8383aSDmitri Gribenko // CHECK: annotate-comments.cpp:139:7: FieldDecl=isdoxy34:{{.*}} isdoxy34 IS_DOXYGEN_SINGLE 258aab8383aSDmitri Gribenko // CHECK: annotate-comments.cpp:142:7: FieldDecl=isdoxy35:{{.*}} isdoxy35 IS_DOXYGEN_SINGLE 259aab8383aSDmitri Gribenko // CHECK: annotate-comments.cpp:143:7: FieldDecl=isdoxy36:{{.*}} isdoxy36 IS_DOXYGEN_SINGLE 260aab8383aSDmitri Gribenko // CHECK: annotate-comments.cpp:146:7: FieldDecl=isdoxy37:{{.*}} isdoxy37 IS_DOXYGEN_SINGLE 261aab8383aSDmitri Gribenko // CHECK: annotate-comments.cpp:147:7: FieldDecl=isdoxy38:{{.*}} isdoxy38 IS_DOXYGEN_SINGLE 262aab8383aSDmitri Gribenko // CHECK: annotate-comments.cpp:148:7: FieldDecl=isdoxy39:{{.*}} isdoxy39 IS_DOXYGEN_SINGLE 263aab8383aSDmitri Gribenko // CHECK: annotate-comments.cpp:155:6: FunctionDecl=isdoxy40:{{.*}} isdoxy40 IS_DOXYGEN_SINGLE 264aab8383aSDmitri Gribenko // CHECK: annotate-comments.cpp:160:5: FunctionDecl=isdoxy41:{{.*}} isdoxy41 IS_DOXYGEN_SINGLE 265aab8383aSDmitri Gribenko // CHECK: annotate-comments.cpp:163:7: FieldDecl=isdoxy42:{{.*}} isdoxy42 IS_DOXYGEN_SINGLE 2665188c4b9SDmitri Gribenko // CHECK: annotate-comments.cpp:176:6: FunctionDecl=isdoxy43:{{.*}} IS_DOXYGEN_START{{.*}} IS_DOXYGEN_END 2675188c4b9SDmitri Gribenko 2680743f946SDmitri Gribenko // CHECK: annotate-comments.cpp:185:6: FunctionDecl=isdoxy44:{{.*}} BriefComment=[IS_DOXYGEN_START Aaa bbb ccc.] 2690743f946SDmitri Gribenko // CHECK: annotate-comments.cpp:195:6: FunctionDecl=isdoxy45:{{.*}} BriefComment=[Ddd eee. Fff.] 2700743f946SDmitri Gribenko // CHECK: annotate-comments.cpp:204:6: FunctionDecl=isdoxy47:{{.*}} BriefComment=[IS_DOXYGEN_START Aaa bbb] 271aab8383aSDmitri Gribenko 272