1 // RUN: %clang_cc1 -std=c++11 -fsyntax-only -Wdocumentation -Wdocumentation-pedantic -verify %s 2 3 // This file contains lots of corner cases, so ensure that XML we generate is not invalid. 4 // RUN: c-index-test -test-load-source all -comments-xml-schema=%S/../../bindings/xml/comment-xml-schema.rng %s | FileCheck %s -check-prefix=WRONG 5 // WRONG-NOT: CommentXMLInvalid 6 7 // expected-warning@+1 {{expected quoted string after equals sign}} 8 /// <a href=> 9 int test_html1(int); 10 11 // expected-warning@+1 {{expected quoted string after equals sign}} 12 /// <a href==> 13 int test_html2(int); 14 15 // expected-warning@+2 {{expected quoted string after equals sign}} 16 // expected-warning@+1 {{HTML start tag prematurely ended, expected attribute name or '>'}} 17 /// <a href= blah 18 int test_html3(int); 19 20 // expected-warning@+1 {{HTML start tag prematurely ended, expected attribute name or '>'}} 21 /// <a => 22 int test_html4(int); 23 24 // expected-warning@+1 {{HTML start tag prematurely ended, expected attribute name or '>'}} 25 /// <a "aaa"> 26 int test_html5(int); 27 28 // expected-warning@+1 {{HTML start tag prematurely ended, expected attribute name or '>'}} 29 /// <a a="b" => 30 int test_html6(int); 31 32 // expected-warning@+1 {{HTML start tag prematurely ended, expected attribute name or '>'}} 33 /// <a a="b" "aaa"> 34 int test_html7(int); 35 36 // expected-warning@+1 {{HTML start tag prematurely ended, expected attribute name or '>'}} 37 /// <a a="b" = 38 int test_html8(int); 39 40 // expected-warning@+2 {{HTML start tag prematurely ended, expected attribute name or '>'}} expected-note@+1 {{HTML tag started here}} 41 /** Aaa bbb<img ddd eee 42 * fff ggg. 43 */ 44 int test_html9(int); 45 46 // expected-warning@+1 {{HTML start tag prematurely ended, expected attribute name or '>'}} 47 /** Aaa bbb<img ddd eee 42% 48 * fff ggg. 49 */ 50 int test_html10(int); 51 52 // expected-warning@+1 {{HTML end tag 'br' is forbidden}} 53 /// <br></br> 54 int test_html11(int); 55 56 /// <blockquote>Meow</blockquote> 57 int test_html_nesting1(int); 58 59 /// <b><i>Meow</i></b> 60 int test_html_nesting2(int); 61 62 /// <p>Aaa<br> 63 /// Bbb</p> 64 int test_html_nesting3(int); 65 66 /// <p>Aaa<br /> 67 /// Bbb</p> 68 int test_html_nesting4(int); 69 70 // expected-warning@+1 {{HTML end tag does not match any start tag}} 71 /// <b><i>Meow</a> 72 int test_html_nesting5(int); 73 74 // expected-warning@+2 {{HTML start tag 'i' closed by 'b'}} 75 // expected-warning@+1 {{HTML end tag does not match any start tag}} 76 /// <b><i>Meow</b></b> 77 int test_html_nesting6(int); 78 79 // expected-warning@+2 {{HTML start tag 'i' closed by 'b'}} 80 // expected-warning@+1 {{HTML end tag does not match any start tag}} 81 /// <b><i>Meow</b></i> 82 int test_html_nesting7(int); 83 84 85 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 86 /// \brief\returns Aaa 87 int test_block_command1(int); 88 89 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 90 /// \brief \returns Aaa 91 int test_block_command2(int); 92 93 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 94 /// \brief 95 /// \returns Aaa 96 int test_block_command3(int); 97 98 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 99 /// \brief 100 /// 101 /// \returns Aaa 102 int test_block_command4(int); 103 104 // There is trailing whitespace on one of the following lines, don't remove it! 105 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 106 /// \brief 107 /// 108 /// \returns Aaa 109 int test_block_command5(int); 110 111 /// \brief \c Aaa 112 int test_block_command6(int); 113 114 // expected-warning@+5 {{duplicated command '\brief'}} expected-note@+1 {{previous command '\brief' here}} 115 /// \brief Aaa 116 /// 117 /// Bbb 118 /// 119 /// \brief Ccc 120 int test_duplicate_brief1(int); 121 122 // expected-warning@+5 {{duplicated command '\short'}} expected-note@+1 {{previous command '\short' here}} 123 /// \short Aaa 124 /// 125 /// Bbb 126 /// 127 /// \short Ccc 128 int test_duplicate_brief2(int); 129 130 // expected-warning@+5 {{duplicated command '\brief'}} expected-note@+1 {{previous command '\short' (an alias of '\brief') here}} 131 /// \short Aaa 132 /// 133 /// Bbb 134 /// 135 /// \brief Ccc 136 int test_duplicate_brief3(int); 137 138 139 /// \return Aaa 140 /// 141 /// Bbb 142 /// 143 /// \return Ccc 144 int test_multiple_returns1(int); 145 146 /// \returns Aaa 147 /// 148 /// Bbb 149 /// 150 /// \returns Ccc 151 int test_multiple_returns2(int); 152 153 /// \result Aaa 154 /// 155 /// Bbb 156 /// 157 /// \result Ccc 158 int test_multiple_returns3(int); 159 160 /// \returns Aaa 161 /// 162 /// Bbb 163 /// 164 /// \return Ccc 165 int test_multiple_returns4(int); 166 167 168 // expected-warning@+1 {{'\param' command used in a comment that is not attached to a function declaration}} 169 /// \param a Blah blah. 170 int test_param1_backslash; 171 172 // rdar://13066276 173 // Check that the diagnostic uses the same command marker as the comment. 174 // expected-warning@+1 {{'@param' command used in a comment that is not attached to a function declaration}} 175 /// @param a Blah blah. 176 int test_param1_at; 177 178 // expected-warning@+1 {{empty paragraph passed to '\param' command}} 179 /// \param 180 /// \param a Blah blah. 181 int test_param2(int a); 182 183 // expected-warning@+1 {{empty paragraph passed to '\param' command}} 184 /// \param a 185 int test_param3(int a); 186 187 /// \param a Blah blah. 188 int test_param4(int a); 189 190 /// \param [in] a Blah blah. 191 int test_param5(int a); 192 193 /// \param [out] a Blah blah. 194 int test_param6(int a); 195 196 /// \param [in,out] a Blah blah. 197 int test_param7(int a); 198 199 // expected-warning@+1 {{whitespace is not allowed in parameter passing direction}} 200 /// \param [ in ] a Blah blah. 201 int test_param8(int a); 202 203 // expected-warning@+1 {{whitespace is not allowed in parameter passing direction}} 204 /// \param [in, out] a Blah blah. 205 int test_param9(int a); 206 207 // expected-warning@+1 {{unrecognized parameter passing direction, valid directions are '[in]', '[out]' and '[in,out]'}} 208 /// \param [ junk] a Blah blah. 209 int test_param10(int a); 210 211 // expected-warning@+1 {{parameter 'a' not found in the function declaration}} 212 /// \param a Blah blah. 213 int test_param11(); 214 215 // expected-warning@+1 {{parameter 'A' not found in the function declaration}} expected-note@+1 {{did you mean 'a'?}} 216 /// \param A Blah blah. 217 int test_param12(int a); 218 219 // expected-warning@+1 {{parameter 'aab' not found in the function declaration}} expected-note@+1 {{did you mean 'aaa'?}} 220 /// \param aab Blah blah. 221 int test_param13(int aaa, int bbb); 222 223 // expected-warning@+2 {{parameter 'aab' not found in the function declaration}} expected-note@+2 {{did you mean 'bbb'?}} 224 /// \param aaa Blah blah. 225 /// \param aab Blah blah. 226 int test_param14(int aaa, int bbb); 227 228 // expected-warning@+1 {{parameter 'aab' not found in the function declaration}} 229 /// \param aab Blah blah. 230 int test_param15(int bbb, int ccc); 231 232 // expected-warning@+1 {{parameter 'aab' not found in the function declaration}} 233 /// \param aab Ccc. 234 /// \param aaa Aaa. 235 /// \param bbb Bbb. 236 int test_param16(int aaa, int bbb); 237 238 // expected-warning@+2 {{parameter 'aab' not found in the function declaration}} 239 /// \param aaa Aaa. 240 /// \param aab Ccc. 241 /// \param bbb Bbb. 242 int test_param17(int aaa, int bbb); 243 244 // expected-warning@+3 {{parameter 'aab' not found in the function declaration}} 245 /// \param aaa Aaa. 246 /// \param bbb Bbb. 247 /// \param aab Ccc. 248 int test_param18(int aaa, int bbb); 249 250 class C { 251 // expected-warning@+1 {{parameter 'aaa' not found in the function declaration}} 252 /// \param aaa Blah blah. 253 C(int bbb, int ccc); 254 255 // expected-warning@+1 {{parameter 'aaa' not found in the function declaration}} 256 /// \param aaa Blah blah. 257 int test_param19(int bbb, int ccc); 258 }; 259 260 // expected-warning@+1 {{parameter 'aab' not found in the function declaration}} 261 /// \param aab Blah blah. 262 template<typename T> 263 void test_param20(int bbb, int ccc); 264 265 // expected-warning@+3 {{parameter 'a' is already documented}} 266 // expected-note@+1 {{previous documentation}} 267 /// \param a Aaa. 268 /// \param a Aaa. 269 int test_param21(int a); 270 271 // expected-warning@+4 {{parameter 'x2' is already documented}} 272 // expected-note@+2 {{previous documentation}} 273 /// \param x1 Aaa. 274 /// \param x2 Bbb. 275 /// \param x2 Ccc. 276 int test_param22(int x1, int x2, int x3); 277 278 //===--- 279 // Test that we treat typedefs to some non-function types as functions for the 280 // purposes of documentation comment parsing. 281 //===--- 282 283 namespace foo { 284 inline namespace bar { 285 template<typename> 286 struct function_wrapper {}; 287 288 template<unsigned> 289 struct not_a_function_wrapper {}; 290 } 291 }; 292 293 // expected-warning@+2 {{parameter 'bbb' not found in the function declaration}} expected-note@+2 {{did you mean 'ccc'?}} 294 /// \param aaa Meow. 295 /// \param bbb Bbb. 296 /// \returns aaa. 297 typedef int test_function_like_typedef1(int aaa, int ccc); 298 299 // expected-warning@+2 {{parameter 'bbb' not found in the function declaration}} expected-note@+2 {{did you mean 'ccc'?}} 300 /// \param aaa Meow. 301 /// \param bbb Bbb. 302 /// \returns aaa. 303 typedef int (*test_function_like_typedef2)(int aaa, int ccc); 304 305 // expected-warning@+2 {{parameter 'bbb' not found in the function declaration}} expected-note@+2 {{did you mean 'ccc'?}} 306 /// \param aaa Meow. 307 /// \param bbb Bbb. 308 /// \returns aaa. 309 typedef int (* const test_function_like_typedef3)(int aaa, int ccc); 310 311 // expected-warning@+2 {{parameter 'bbb' not found in the function declaration}} expected-note@+2 {{did you mean 'ccc'?}} 312 /// \param aaa Meow. 313 /// \param bbb Bbb. 314 /// \returns aaa. 315 typedef int (C::*test_function_like_typedef4)(int aaa, int ccc); 316 317 // expected-warning@+2 {{parameter 'bbb' not found in the function declaration}} expected-note@+2 {{did you mean 'ccc'?}} 318 /// \param aaa Meow. 319 /// \param bbb Bbb. 320 /// \returns aaa. 321 typedef foo::function_wrapper<int (int aaa, int ccc)> test_function_like_typedef5; 322 323 // expected-warning@+2 {{parameter 'bbb' not found in the function declaration}} expected-note@+2 {{did you mean 'ccc'?}} 324 /// \param aaa Meow. 325 /// \param bbb Bbb. 326 /// \returns aaa. 327 typedef foo::function_wrapper<int (int aaa, int ccc)> *test_function_like_typedef6; 328 329 // expected-warning@+2 {{parameter 'bbb' not found in the function declaration}} expected-note@+2 {{did you mean 'ccc'?}} 330 /// \param aaa Meow. 331 /// \param bbb Bbb. 332 /// \returns aaa. 333 typedef foo::function_wrapper<int (int aaa, int ccc)> &test_function_like_typedef7; 334 335 // expected-warning@+2 {{parameter 'bbb' not found in the function declaration}} expected-note@+2 {{did you mean 'ccc'?}} 336 /// \param aaa Meow. 337 /// \param bbb Bbb. 338 /// \returns aaa. 339 typedef foo::function_wrapper<int (int aaa, int ccc)> &&test_function_like_typedef8; 340 341 342 typedef int (*test_not_function_like_typedef1)(int aaa); 343 344 // expected-warning@+1 {{'\param' command used in a comment that is not attached to a function declaration}} 345 /// \param aaa Meow. 346 typedef test_not_function_like_typedef1 test_not_function_like_typedef2; 347 348 // rdar://13066276 349 // Check that the diagnostic uses the same command marker as the comment. 350 // expected-warning@+1 {{'@param' command used in a comment that is not attached to a function declaration}} 351 /// @param aaa Meow. 352 typedef unsigned int test_not_function_like_typedef3; 353 354 // expected-warning@+1 {{'\param' command used in a comment that is not attached to a function declaration}} 355 /// \param aaa Meow. 356 typedef foo::not_a_function_wrapper<1> test_not_function_like_typedef4; 357 358 /// \param aaa Aaa 359 /// \param ... Vararg 360 int test_vararg_param1(int aaa, ...); 361 362 /// \param ... Vararg 363 int test_vararg_param2(...); 364 365 // expected-warning@+1 {{parameter '...' not found in the function declaration}} expected-note@+1 {{did you mean 'aaa'?}} 366 /// \param ... Vararg 367 int test_vararg_param3(int aaa); 368 369 // expected-warning@+1 {{parameter '...' not found in the function declaration}} 370 /// \param ... Vararg 371 int test_vararg_param4(); 372 373 374 /// \param aaa Aaa 375 /// \param ... Vararg 376 template<typename T> 377 int test_template_vararg_param1(int aaa, ...); 378 379 /// \param ... Vararg 380 template<typename T> 381 int test_template_vararg_param2(...); 382 383 // expected-warning@+1 {{parameter '...' not found in the function declaration}} expected-note@+1 {{did you mean 'aaa'?}} 384 /// \param ... Vararg 385 template<typename T> 386 int test_template_vararg_param3(int aaa); 387 388 // expected-warning@+1 {{parameter '...' not found in the function declaration}} 389 /// \param ... Vararg 390 template<typename T> 391 int test_template_vararg_param4(); 392 393 394 // expected-warning@+1 {{'\tparam' command used in a comment that is not attached to a template declaration}} 395 /// \tparam T Aaa 396 int test_tparam1; 397 398 // expected-warning@+1 {{'\tparam' command used in a comment that is not attached to a template declaration}} 399 /// \tparam T Aaa 400 void test_tparam2(int aaa); 401 402 // expected-warning@+1 {{empty paragraph passed to '\tparam' command}} 403 /// \tparam 404 /// \param aaa Blah blah 405 template<typename T> 406 void test_tparam3(T aaa); 407 408 // expected-warning@+1 {{template parameter 'T' not found in the template declaration}} expected-note@+1 {{did you mean 'TT'?}} 409 /// \tparam T Aaa 410 template<typename TT> 411 void test_tparam4(TT aaa); 412 413 // expected-warning@+1 {{template parameter 'T' not found in the template declaration}} expected-note@+1 {{did you mean 'TT'?}} 414 /// \tparam T Aaa 415 template<typename TT> 416 class test_tparam5 { 417 // expected-warning@+1 {{template parameter 'T' not found in the template declaration}} expected-note@+1 {{did you mean 'TTT'?}} 418 /// \tparam T Aaa 419 template<typename TTT> 420 void test_tparam6(TTT aaa); 421 }; 422 423 /// \tparam T1 Aaa 424 /// \tparam T2 Bbb 425 template<typename T1, typename T2> 426 void test_tparam7(T1 aaa, T2 bbb); 427 428 // expected-warning@+1 {{template parameter 'SomTy' not found in the template declaration}} expected-note@+1 {{did you mean 'SomeTy'?}} 429 /// \tparam SomTy Aaa 430 /// \tparam OtherTy Bbb 431 template<typename SomeTy, typename OtherTy> 432 void test_tparam8(SomeTy aaa, OtherTy bbb); 433 434 // expected-warning@+2 {{template parameter 'T1' is already documented}} expected-note@+1 {{previous documentation}} 435 /// \tparam T1 Aaa 436 /// \tparam T1 Bbb 437 template<typename T1, typename T2> 438 void test_tparam9(T1 aaa, T2 bbb); 439 440 /// \tparam T Aaa 441 /// \tparam TT Bbb 442 template<template<typename T> class TT> 443 void test_tparam10(TT<int> aaa); 444 445 /// \tparam T Aaa 446 /// \tparam TT Bbb 447 /// \tparam TTT Ccc 448 template<template<template<typename T> class TT, class C> class TTT> 449 void test_tparam11(); 450 451 /// \tparam I Aaa 452 template<int I> 453 void test_tparam12(); 454 455 template<typename T, typename U> 456 class test_tparam13 { }; 457 458 /// \tparam T Aaa 459 template<typename T> 460 using test_tparam14 = test_tparam13<T, int>; 461 462 // expected-warning@+1 {{template parameter 'U' not found in the template declaration}} expected-note@+1 {{did you mean 'T'?}} 463 /// \tparam U Aaa 464 template<typename T> 465 using test_tparam15 = test_tparam13<T, int>; 466 467 // ---- 468 469 /// \tparam T Aaa 470 template<typename T> 471 class test_tparam16 { }; 472 473 typedef test_tparam16<int> test_tparam17; 474 typedef test_tparam16<double> test_tparam18; 475 476 // ---- 477 478 template<typename T> 479 class test_tparam19; 480 481 typedef test_tparam19<int> test_tparam20; 482 typedef test_tparam19<double> test_tparam21; 483 484 /// \tparam T Aaa 485 template<typename T> 486 class test_tparam19 { }; 487 488 // ---- 489 490 // expected-warning@+1 {{'@tparam' command used in a comment that is not attached to a template declaration}} 491 /// @tparam T Aaa 492 int test_tparam22; 493 494 // ---- 495 496 497 /// Aaa 498 /// \deprecated Bbb 499 void test_deprecated_1(int a) __attribute__((deprecated)); 500 501 // We don't want \deprecated to warn about empty paragraph. It is fine to use 502 // \deprecated by itself without explanations. 503 504 /// Aaa 505 /// \deprecated 506 void test_deprecated_2(int a) __attribute__((deprecated)); 507 508 /// Aaa 509 /// \deprecated 510 void test_deprecated_3(int a) __attribute__((availability(macosx,introduced=10.4))); 511 512 /// Aaa 513 /// \deprecated 514 void test_deprecated_4(int a) __attribute__((unavailable)); 515 516 // expected-warning@+2 {{declaration is marked with '\deprecated' command but does not have a deprecation attribute}} expected-note@+3 {{add a deprecation attribute to the declaration to silence this warning}} 517 /// Aaa 518 /// \deprecated 519 void test_deprecated_5(int a); 520 521 // expected-warning@+2 {{declaration is marked with '\deprecated' command but does not have a deprecation attribute}} expected-note@+3 {{add a deprecation attribute to the declaration to silence this warning}} 522 /// Aaa 523 /// \deprecated 524 void test_deprecated_6(int a) { 525 } 526 527 // expected-warning@+2 {{declaration is marked with '\deprecated' command but does not have a deprecation attribute}} 528 /// Aaa 529 /// \deprecated 530 template<typename T> 531 void test_deprecated_7(T aaa); 532 533 534 // rdar://12397511 535 // expected-note@+2 {{previous command '\headerfile' here}} 536 // expected-warning@+2 {{duplicated command '\headerfile'}} 537 /// \headerfile "" 538 /// \headerfile foo.h 539 int test__headerfile_1(int a); 540 541 542 /// \invariant aaa 543 void test_invariant_1(int a); 544 545 // expected-warning@+1 {{empty paragraph passed to '\invariant' command}} 546 /// \invariant 547 void test_invariant_2(int a); 548 549 550 // no-warning 551 /// \returns Aaa 552 int test_returns_right_decl_1(int); 553 554 class test_returns_right_decl_2 { 555 // no-warning 556 /// \returns Aaa 557 int test_returns_right_decl_3(int); 558 }; 559 560 // no-warning 561 /// \returns Aaa 562 template<typename T> 563 int test_returns_right_decl_4(T aaa); 564 565 // no-warning 566 /// \returns Aaa 567 template<> 568 int test_returns_right_decl_4(int aaa); 569 570 /// \returns Aaa 571 template<typename T> 572 T test_returns_right_decl_5(T aaa); 573 574 // expected-warning@+1 {{'\returns' command used in a comment that is not attached to a function or method declaration}} 575 /// \returns Aaa 576 int test_returns_wrong_decl_1_backslash; 577 578 // rdar://13066276 579 // Check that the diagnostic uses the same command marker as the comment. 580 // expected-warning@+1 {{'@returns' command used in a comment that is not attached to a function or method declaration}} 581 /// @returns Aaa 582 int test_returns_wrong_decl_1_at; 583 584 // expected-warning@+1 {{'\return' command used in a comment that is not attached to a function or method declaration}} 585 /// \return Aaa 586 int test_returns_wrong_decl_2; 587 588 // expected-warning@+1 {{'\result' command used in a comment that is not attached to a function or method declaration}} 589 /// \result Aaa 590 int test_returns_wrong_decl_3; 591 592 // expected-warning@+1 {{'\returns' command used in a comment that is attached to a function returning void}} 593 /// \returns Aaa 594 void test_returns_wrong_decl_4(int); 595 596 // expected-warning@+1 {{'\returns' command used in a comment that is attached to a function returning void}} 597 /// \returns Aaa 598 template<typename T> 599 void test_returns_wrong_decl_5(T aaa); 600 601 // expected-warning@+1 {{'\returns' command used in a comment that is attached to a function returning void}} 602 /// \returns Aaa 603 template<> 604 void test_returns_wrong_decl_5(int aaa); 605 606 // expected-warning@+1 {{'\returns' command used in a comment that is not attached to a function or method declaration}} 607 /// \returns Aaa 608 struct test_returns_wrong_decl_6 { }; 609 610 // expected-warning@+1 {{'\returns' command used in a comment that is not attached to a function or method declaration}} 611 /// \returns Aaa 612 class test_returns_wrong_decl_7 { 613 // expected-warning@+1 {{'\returns' command used in a comment that is attached to a constructor}} 614 /// \returns Aaa 615 test_returns_wrong_decl_7(); 616 617 // expected-warning@+1 {{'\returns' command used in a comment that is attached to a destructor}} 618 /// \returns Aaa 619 ~test_returns_wrong_decl_7(); 620 }; 621 622 // expected-warning@+1 {{'\returns' command used in a comment that is not attached to a function or method declaration}} 623 /// \returns Aaa 624 enum test_returns_wrong_decl_8 { 625 // expected-warning@+1 {{'\returns' command used in a comment that is not attached to a function or method declaration}} 626 /// \returns Aaa 627 test_returns_wrong_decl_9 628 }; 629 630 // expected-warning@+1 {{'\returns' command used in a comment that is not attached to a function or method declaration}} 631 /// \returns Aaa 632 namespace test_returns_wrong_decl_10 { }; 633 634 // rdar://13094352 635 // expected-warning@+1 {{'@function' command should be used in a comment attached to a function declaration}} 636 /*! @function test_function 637 */ 638 typedef unsigned int Base64Flags; 639 unsigned test_function(Base64Flags inFlags); 640 641 // expected-warning@+1 {{'@callback' command should be used in a comment attached to a pointer to function declaration}} 642 /*! @callback test_callback 643 */ 644 typedef unsigned int BaseFlags; 645 unsigned (*test_callback)(BaseFlags inFlags); 646 647 // expected-warning@+1 {{'\endverbatim' command does not terminate a verbatim text block}} 648 /// \endverbatim 649 int test_verbatim_1(); 650 651 // expected-warning@+1 {{'\endcode' command does not terminate a verbatim text block}} 652 /// \endcode 653 int test_verbatim_2(); 654 655 // FIXME: we give a bad diagnostic here because we throw away non-documentation 656 // comments early. 657 // 658 // expected-warning@+3 {{'\endcode' command does not terminate a verbatim text block}} 659 /// \code 660 // foo 661 /// \endcode 662 int test_verbatim_3(); 663 664 665 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 666 int test1; ///< \brief\author Aaa 667 668 // expected-warning@+2 {{empty paragraph passed to '\brief' command}} 669 // expected-warning@+2 {{empty paragraph passed to '\brief' command}} 670 int test2, ///< \brief\author Aaa 671 test3; ///< \brief\author Aaa 672 673 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 674 int test4; ///< \brief 675 ///< \author Aaa 676 677 678 class TestRelates {}; 679 680 /// \relates TestRelates 681 /// \brief Aaa 682 void test_relates_1(); 683 684 /// \related TestRelates 685 /// \brief Aaa 686 void test_relates_2(); 687 688 /// \relatesalso TestRelates 689 /// \brief Aaa 690 void test_relates_3(); 691 692 /// \relatedalso TestRelates 693 /// \brief Aaa 694 void test_relates_4(); 695 696 697 // Check that we attach the comment to the declaration during parsing in the 698 // following cases. The test is based on the fact that we don't parse 699 // documentation comments that are not attached to anything. 700 701 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 702 /// \brief\author Aaa 703 int test_attach1; 704 705 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 706 /// \brief\author Aaa 707 int test_attach2(int); 708 709 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 710 /// \brief\author Aaa 711 struct test_attach3 { 712 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 713 /// \brief\author Aaa 714 int test_attach4; 715 716 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 717 int test_attach5; ///< \brief\author Aaa 718 719 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 720 /// \brief\author Aaa 721 int test_attach6(int); 722 }; 723 724 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 725 /// \brief\author Aaa 726 class test_attach7 { 727 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 728 /// \brief\author Aaa 729 int test_attach8; 730 731 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 732 int test_attach9; ///< \brief\author Aaa 733 734 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 735 /// \brief\author Aaa 736 int test_attach10(int); 737 }; 738 739 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 740 /// \brief\author Aaa 741 enum test_attach9 { 742 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 743 /// \brief\author Aaa 744 test_attach10, 745 746 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 747 test_attach11 ///< \brief\author Aaa 748 }; 749 750 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 751 /// \brief\author Aaa 752 struct test_noattach12 *test_attach13; 753 754 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 755 /// \brief\author Aaa 756 typedef struct test_noattach14 *test_attach15; 757 758 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 759 /// \brief\author Aaa 760 typedef struct test_attach16 { int a; } test_attach17; 761 762 struct S { int a; }; 763 764 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 765 /// \brief\author Aaa 766 struct S *test_attach18; 767 768 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 769 /// \brief\author Aaa 770 typedef struct S *test_attach19; 771 772 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 773 /// \brief\author Aaa 774 struct test_attach20; 775 776 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 777 /// \brief\author Aaa 778 typedef struct test_attach21 { 779 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 780 /// \brief\author Aaa 781 int test_attach22; 782 } test_attach23; 783 784 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 785 /// \brief\author Aaa 786 namespace test_attach24 { 787 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 788 /// \brief\author Aaa 789 namespace test_attach25 { 790 } 791 } 792 793 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 794 /// \brief\author Aaa 795 /// \tparam T Aaa 796 template<typename T> 797 void test_attach26(T aaa); 798 799 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 800 /// \brief\author Aaa 801 /// \tparam T Aaa 802 template<typename T, typename U> 803 void test_attach27(T aaa, U bbb); 804 805 // expected-warning@+2 {{empty paragraph passed to '\brief' command}} 806 // expected-warning@+2 {{template parameter 'T' not found in the template declaration}} 807 /// \brief\author Aaa 808 /// \tparam T Aaa 809 template<> 810 void test_attach27(int aaa, int bbb); 811 812 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 813 /// \brief\author Aaa 814 /// \tparam T Aaa 815 template<typename T> 816 class test_attach28 { 817 T aaa; 818 }; 819 820 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 821 /// \brief\author Aaa 822 using test_attach29 = test_attach28<int>; 823 824 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 825 /// \brief\author Aaa 826 /// \tparam T Aaa 827 template<typename T, typename U> 828 class test_attach30 { }; 829 830 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 831 /// \brief\author Aaa 832 /// \tparam T Aaa 833 template<typename T> 834 class test_attach30<T, int> { }; 835 836 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 837 /// \brief\author Aaa 838 template<> 839 class test_attach30<int, int> { }; 840 841 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 842 /// \brief\author Aaa 843 template<typename T> 844 using test_attach31 = test_attach30<T, int>; 845 846 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 847 /// \brief\author Aaa 848 /// \tparam T Aaa 849 template<typename T, typename U, typename V> 850 class test_attach32 { }; 851 852 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 853 /// \brief\author Aaa 854 /// \tparam T Aaa 855 template<typename T, typename U> 856 class test_attach32<T, U, int> { }; 857 858 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 859 /// \brief\author Aaa 860 /// \tparam T Aaa 861 template<typename T> 862 class test_attach32<T, int, int> { }; 863 864 // expected-warning@+2 {{empty paragraph passed to '\brief' command}} 865 // expected-warning@+2 {{template parameter 'T' not found in the template declaration}} 866 /// \brief\author Aaa 867 /// \tparam T Aaa 868 template<> 869 class test_attach32<int, int, int> { }; 870 871 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 872 /// \brief\author Aaa 873 class test_attach33 { 874 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 875 /// \brief\author Aaa 876 /// \tparam T Aaa 877 template<typename T, typename U> 878 void test_attach34(T aaa, U bbb); 879 }; 880 881 template<typename T> 882 class test_attach35 { 883 // expected-warning@+2 {{empty paragraph passed to '\brief' command}} 884 // expected-warning@+2 {{template parameter 'T' not found in the template declaration}} 885 /// \brief\author Aaa 886 /// \tparam T Aaa 887 template<typename TT, typename UU> 888 void test_attach36(TT aaa, UU bbb); 889 }; 890 891 // expected-warning@+2 {{empty paragraph passed to '\brief' command}} 892 // expected-warning@+2 {{template parameter 'T' not found in the template declaration}} 893 /// \brief\author Aaa 894 /// \tparam T Aaa 895 template<> template<> 896 void test_attach35<int>::test_attach36(int aaa, int bbb) {} 897 898 template<typename T> 899 class test_attach37 { 900 // expected-warning@+2 {{empty paragraph passed to '\brief' command}} 901 // expected-warning@+2 {{'\tparam' command used in a comment that is not attached to a template declaration}} 902 /// \brief\author Aaa 903 /// \tparam T Aaa 904 void test_attach38(int aaa, int bbb); 905 906 void test_attach39(int aaa, int bbb); 907 }; 908 909 // expected-warning@+2 {{empty paragraph passed to '\brief' command}} 910 // expected-warning@+2 {{template parameter 'T' not found in the template declaration}} 911 /// \brief\author Aaa 912 /// \tparam T Aaa 913 template<> 914 void test_attach37<int>::test_attach38(int aaa, int bbb) {} 915 916 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 917 /// \brief\author Aaa 918 /// \tparam T Aaa 919 template<typename T> 920 void test_attach37<T>::test_attach39(int aaa, int bbb) {} 921 922 // We used to emit warning that parameter 'a' is not found because we parsed 923 // the comment in context of the redeclaration which does not have parameter 924 // names. 925 template <typename T> 926 struct test_attach38 { 927 /*! 928 \param a First param 929 \param b Second param 930 */ 931 template <typename B> 932 void test_attach39(T a, B b); 933 }; 934 935 template <> 936 template <typename B> 937 void test_attach38<int>::test_attach39(int, B); 938 939 940 // PR13411, reduced. We used to crash on this. 941 /** 942 * @code Aaa. 943 */ 944 void test_nocrash1(int); 945 946 // We used to crash on this. 947 // expected-warning@+2 {{empty paragraph passed to '\param' command}} 948 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 949 /// \param\brief 950 void test_nocrash2(int); 951 952 // PR13593, example 1 and 2 953 954 /** 955 * Bla. 956 */ 957 template <typename> 958 void test_nocrash3(); 959 960 /// Foo 961 template <typename, typename> 962 void test_nocrash4() { } 963 964 template <typename> 965 void test_nocrash3() 966 { 967 } 968 969 // PR13593, example 3 970 971 /** 972 * aaa 973 */ 974 template <typename T> 975 inline T test_nocrash5(T a1) 976 { 977 return a1; 978 } 979 980 /// 981 //, 982 983 inline void test_nocrash6() 984 { 985 test_nocrash5(1); 986 } 987 988 // We used to crash on this. 989 990 /*! 991 Blah. 992 */ 993 typedef const struct test_nocrash7 * test_nocrash8; 994 995 // We used to crash on this. 996 997 // expected-warning@+1 {{unknown command tag name}} 998 /// aaa \unknown aaa \unknown aaa 999 int test_nocrash9; 1000 1001 // We used to crash on this. PR15068 1002 1003 // expected-warning@+2 {{empty paragraph passed to '@param' command}} 1004 // expected-warning@+2 {{empty paragraph passed to '@param' command}} 1005 ///@param x 1006 ///@param y 1007 int test_nocrash10(int x, int y); 1008 1009 // expected-warning@+2 {{empty paragraph passed to '@param' command}} expected-warning@+2 {{parameter 'x' not found in the function declaration}} 1010 // expected-warning@+2 {{empty paragraph passed to '@param' command}} expected-warning@+2 {{parameter 'y' not found in the function declaration}} 1011 ///@param x 1012 ///@param y 1013 int test_nocrash11(); 1014 1015 // expected-warning@+3 {{empty paragraph passed to '@param' command}} expected-warning@+3 {{parameter 'x' not found in the function declaration}} 1016 // expected-warning@+3 {{empty paragraph passed to '@param' command}} expected-warning@+3 {{parameter 'y' not found in the function declaration}} 1017 /** 1018 @param x 1019 @param y 1020 **/ 1021 int test_nocrash12(); 1022 1023 // expected-warning@+2 {{empty paragraph passed to '@param' command}} 1024 // expected-warning@+1 {{empty paragraph passed to '@param' command}} 1025 ///@param x@param y 1026 int test_nocrash13(int x, int y); 1027 1028 // rdar://12379114 1029 // expected-warning@+2 {{'@union' command should not be used in a comment attached to a non-union declaration}} 1030 /*! 1031 @union U This is new 1032 */ 1033 struct U { int iS; }; 1034 1035 /*! 1036 @union U1 1037 */ 1038 union U1 {int i; }; 1039 1040 // expected-warning@+2 {{'@struct' command should not be used in a comment attached to a non-struct declaration}} 1041 /*! 1042 @struct S2 1043 */ 1044 union S2 {}; 1045 1046 /*! 1047 @class C1 1048 */ 1049 class C1; 1050 1051 /*! 1052 @struct S3; 1053 */ 1054 class S3; 1055 1056 // rdar://14124702 1057 //---------------------------------------------------------------------- 1058 /// @class Predicate Predicate.h "lldb/Host/Predicate.h" 1059 /// @brief A C++ wrapper class for providing threaded access to a value 1060 /// of type T. 1061 /// 1062 /// A templatized class. 1063 /// specified values. 1064 //---------------------------------------------------------------------- 1065 template <class T, class T1> 1066 class Predicate 1067 { 1068 }; 1069 1070 //---------------------------------------------------------------------- 1071 /// @class Predicate<int, char> Predicate.h "lldb/Host/Predicate.h" 1072 /// @brief A C++ wrapper class for providing threaded access to a value 1073 /// of type T. 1074 /// 1075 /// A template specilization class. 1076 //---------------------------------------------------------------------- 1077 template<> class Predicate<int, char> 1078 { 1079 }; 1080 1081 //---------------------------------------------------------------------- 1082 /// @class Predicate<T, int> Predicate.h "lldb/Host/Predicate.h" 1083 /// @brief A C++ wrapper class for providing threaded access to a value 1084 /// of type T. 1085 /// 1086 /// A partial specialization template class. 1087 //---------------------------------------------------------------------- 1088 template<class T> class Predicate<T, int> 1089 { 1090 }; 1091 1092 /*! @function test_function 1093 */ 1094 template <class T> T test_function (T arg); 1095 1096 /*! @function test_function<int> 1097 */ 1098 template <> int test_function<int> (int arg); 1099