warn-documentation.cpp revision ad6fd9f93ce0d328397e8d57ef7117ced24fc8e2
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=> 9int test_html1(int); 10 11// expected-warning@+1 {{expected quoted string after equals sign}} 12/// <a href==> 13int 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 18int test_html3(int); 19 20// expected-warning@+1 {{HTML start tag prematurely ended, expected attribute name or '>'}} 21/// <a => 22int test_html4(int); 23 24// expected-warning@+1 {{HTML start tag prematurely ended, expected attribute name or '>'}} 25/// <a "aaa"> 26int test_html5(int); 27 28// expected-warning@+1 {{HTML start tag prematurely ended, expected attribute name or '>'}} 29/// <a a="b" => 30int test_html6(int); 31 32// expected-warning@+1 {{HTML start tag prematurely ended, expected attribute name or '>'}} 33/// <a a="b" "aaa"> 34int test_html7(int); 35 36// expected-warning@+1 {{HTML start tag prematurely ended, expected attribute name or '>'}} 37/// <a a="b" = 38int 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 */ 44int 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 */ 50int test_html10(int); 51 52// expected-warning@+1 {{HTML end tag 'br' is forbidden}} 53/// <br></br> 54int test_html11(int); 55 56/// <blockquote>Meow</blockquote> 57int test_html_nesting1(int); 58 59/// <b><i>Meow</i></b> 60int test_html_nesting2(int); 61 62/// <p>Aaa<br> 63/// Bbb</p> 64int test_html_nesting3(int); 65 66/// <p>Aaa<br /> 67/// Bbb</p> 68int test_html_nesting4(int); 69 70// expected-warning@+1 {{HTML end tag does not match any start tag}} 71/// <b><i>Meow</a> 72int 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> 77int 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> 82int test_html_nesting7(int); 83 84 85// expected-warning@+1 {{empty paragraph passed to '\brief' command}} 86/// \brief\returns Aaa 87int test_block_command1(int); 88 89// expected-warning@+1 {{empty paragraph passed to '\brief' command}} 90/// \brief \returns Aaa 91int test_block_command2(int); 92 93// expected-warning@+1 {{empty paragraph passed to '\brief' command}} 94/// \brief 95/// \returns Aaa 96int test_block_command3(int); 97 98// expected-warning@+1 {{empty paragraph passed to '\brief' command}} 99/// \brief 100/// 101/// \returns Aaa 102int 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 109int test_block_command5(int); 110 111/// \brief \c Aaa 112int 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 120int 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 128int 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 136int test_duplicate_brief3(int); 137 138 139// expected-warning@+5 {{duplicated command '\return'}} expected-note@+1 {{previous command '\return' here}} 140/// \return Aaa 141/// 142/// Bbb 143/// 144/// \return Ccc 145int test_duplicate_returns1(int); 146 147// expected-warning@+5 {{duplicated command '\returns'}} expected-note@+1 {{previous command '\returns' here}} 148/// \returns Aaa 149/// 150/// Bbb 151/// 152/// \returns Ccc 153int test_duplicate_returns2(int); 154 155// expected-warning@+5 {{duplicated command '\result'}} expected-note@+1 {{previous command '\result' here}} 156/// \result Aaa 157/// 158/// Bbb 159/// 160/// \result Ccc 161int test_duplicate_returns3(int); 162 163// expected-warning@+5 {{duplicated command '\return'}} expected-note@+1 {{previous command '\returns' (an alias of '\return') here}} 164/// \returns Aaa 165/// 166/// Bbb 167/// 168/// \return Ccc 169int test_duplicate_returns4(int); 170 171 172// expected-warning@+1 {{'\param' command used in a comment that is not attached to a function declaration}} 173/// \param a Blah blah. 174int test_param1; 175 176// expected-warning@+1 {{empty paragraph passed to '\param' command}} 177/// \param 178/// \param a Blah blah. 179int test_param2(int a); 180 181// expected-warning@+1 {{empty paragraph passed to '\param' command}} 182/// \param a 183int test_param3(int a); 184 185/// \param a Blah blah. 186int test_param4(int a); 187 188/// \param [in] a Blah blah. 189int test_param5(int a); 190 191/// \param [out] a Blah blah. 192int test_param6(int a); 193 194/// \param [in,out] a Blah blah. 195int test_param7(int a); 196 197// expected-warning@+1 {{whitespace is not allowed in parameter passing direction}} 198/// \param [ in ] a Blah blah. 199int test_param8(int a); 200 201// expected-warning@+1 {{whitespace is not allowed in parameter passing direction}} 202/// \param [in, out] a Blah blah. 203int test_param9(int a); 204 205// expected-warning@+1 {{unrecognized parameter passing direction, valid directions are '[in]', '[out]' and '[in,out]'}} 206/// \param [ junk] a Blah blah. 207int test_param10(int a); 208 209// expected-warning@+1 {{parameter 'a' not found in the function declaration}} 210/// \param a Blah blah. 211int test_param11(); 212 213// expected-warning@+1 {{parameter 'A' not found in the function declaration}} expected-note@+1 {{did you mean 'a'?}} 214/// \param A Blah blah. 215int test_param12(int a); 216 217// expected-warning@+1 {{parameter 'aab' not found in the function declaration}} expected-note@+1 {{did you mean 'aaa'?}} 218/// \param aab Blah blah. 219int test_param13(int aaa, int bbb); 220 221// expected-warning@+2 {{parameter 'aab' not found in the function declaration}} expected-note@+2 {{did you mean 'bbb'?}} 222/// \param aaa Blah blah. 223/// \param aab Blah blah. 224int test_param14(int aaa, int bbb); 225 226// expected-warning@+1 {{parameter 'aab' not found in the function declaration}} 227/// \param aab Blah blah. 228int test_param15(int bbb, int ccc); 229 230// expected-warning@+1 {{parameter 'aab' not found in the function declaration}} 231/// \param aab Ccc. 232/// \param aaa Aaa. 233/// \param bbb Bbb. 234int test_param16(int aaa, int bbb); 235 236// expected-warning@+2 {{parameter 'aab' not found in the function declaration}} 237/// \param aaa Aaa. 238/// \param aab Ccc. 239/// \param bbb Bbb. 240int test_param17(int aaa, int bbb); 241 242// expected-warning@+3 {{parameter 'aab' not found in the function declaration}} 243/// \param aaa Aaa. 244/// \param bbb Bbb. 245/// \param aab Ccc. 246int test_param18(int aaa, int bbb); 247 248class C { 249 // expected-warning@+1 {{parameter 'aaa' not found in the function declaration}} 250 /// \param aaa Blah blah. 251 C(int bbb, int ccc); 252 253 // expected-warning@+1 {{parameter 'aaa' not found in the function declaration}} 254 /// \param aaa Blah blah. 255 int test_param19(int bbb, int ccc); 256}; 257 258// expected-warning@+1 {{parameter 'aab' not found in the function declaration}} 259/// \param aab Blah blah. 260template<typename T> 261void test_param20(int bbb, int ccc); 262 263// expected-warning@+3 {{parameter 'a' is already documented}} 264// expected-note@+1 {{previous documentation}} 265/// \param a Aaa. 266/// \param a Aaa. 267int test_param21(int a); 268 269// expected-warning@+4 {{parameter 'x2' is already documented}} 270// expected-note@+2 {{previous documentation}} 271/// \param x1 Aaa. 272/// \param x2 Bbb. 273/// \param x2 Ccc. 274int test_param22(int x1, int x2, int x3); 275 276// expected-warning@+2 {{parameter 'bbb' not found in the function declaration}} expected-note@+2 {{did you mean 'ccc'?}} 277/// \param aaa Meow. 278/// \param bbb Bbb. 279/// \returns aaa. 280typedef int test_param23(int aaa, int ccc); 281 282// expected-warning@+2 {{parameter 'bbb' not found in the function declaration}} expected-note@+2 {{did you mean 'ccc'?}} 283/// \param aaa Meow. 284/// \param bbb Bbb. 285/// \returns aaa. 286typedef int (*test_param24)(int aaa, int ccc); 287 288// expected-warning@+2 {{parameter 'bbb' not found in the function declaration}} expected-note@+2 {{did you mean 'ccc'?}} 289/// \param aaa Meow. 290/// \param bbb Bbb. 291/// \returns aaa. 292typedef int (* const test_param25)(int aaa, int ccc); 293 294// expected-warning@+2 {{parameter 'bbb' not found in the function declaration}} expected-note@+2 {{did you mean 'ccc'?}} 295/// \param aaa Meow. 296/// \param bbb Bbb. 297/// \returns aaa. 298typedef int (C::*test_param26)(int aaa, int ccc); 299 300typedef int (*test_param27)(int aaa); 301 302// expected-warning@+1 {{'\param' command used in a comment that is not attached to a function declaration}} 303/// \param aaa Meow. 304typedef test_param27 test_param28; 305 306// rdar://13066276 307// expected-warning@+1 {{'@param' command used in a comment that is not attached to a function declaration}} 308/// @param aaa Meow. 309typedef unsigned int test_param29; 310 311 312// expected-warning@+1 {{'\tparam' command used in a comment that is not attached to a template declaration}} 313/// \tparam T Aaa 314int test_tparam1; 315 316// expected-warning@+1 {{'\tparam' command used in a comment that is not attached to a template declaration}} 317/// \tparam T Aaa 318void test_tparam2(int aaa); 319 320// expected-warning@+1 {{empty paragraph passed to '\tparam' command}} 321/// \tparam 322/// \param aaa Blah blah 323template<typename T> 324void test_tparam3(T aaa); 325 326// expected-warning@+1 {{template parameter 'T' not found in the template declaration}} expected-note@+1 {{did you mean 'TT'?}} 327/// \tparam T Aaa 328template<typename TT> 329void test_tparam4(TT aaa); 330 331// expected-warning@+1 {{template parameter 'T' not found in the template declaration}} expected-note@+1 {{did you mean 'TT'?}} 332/// \tparam T Aaa 333template<typename TT> 334class test_tparam5 { 335 // expected-warning@+1 {{template parameter 'T' not found in the template declaration}} expected-note@+1 {{did you mean 'TTT'?}} 336 /// \tparam T Aaa 337 template<typename TTT> 338 void test_tparam6(TTT aaa); 339}; 340 341/// \tparam T1 Aaa 342/// \tparam T2 Bbb 343template<typename T1, typename T2> 344void test_tparam7(T1 aaa, T2 bbb); 345 346// expected-warning@+1 {{template parameter 'SomTy' not found in the template declaration}} expected-note@+1 {{did you mean 'SomeTy'?}} 347/// \tparam SomTy Aaa 348/// \tparam OtherTy Bbb 349template<typename SomeTy, typename OtherTy> 350void test_tparam8(SomeTy aaa, OtherTy bbb); 351 352// expected-warning@+2 {{template parameter 'T1' is already documented}} expected-note@+1 {{previous documentation}} 353/// \tparam T1 Aaa 354/// \tparam T1 Bbb 355template<typename T1, typename T2> 356void test_tparam9(T1 aaa, T2 bbb); 357 358/// \tparam T Aaa 359/// \tparam TT Bbb 360template<template<typename T> class TT> 361void test_tparam10(TT<int> aaa); 362 363/// \tparam T Aaa 364/// \tparam TT Bbb 365/// \tparam TTT Ccc 366template<template<template<typename T> class TT, class C> class TTT> 367void test_tparam11(); 368 369/// \tparam I Aaa 370template<int I> 371void test_tparam12(); 372 373template<typename T, typename U> 374class test_tparam13 { }; 375 376/// \tparam T Aaa 377template<typename T> 378using test_tparam14 = test_tparam13<T, int>; 379 380// expected-warning@+1 {{template parameter 'U' not found in the template declaration}} expected-note@+1 {{did you mean 'T'?}} 381/// \tparam U Aaa 382template<typename T> 383using test_tparam15 = test_tparam13<T, int>; 384 385// ---- 386 387/// \tparam T Aaa 388template<typename T> 389class test_tparam16 { }; 390 391typedef test_tparam16<int> test_tparam17; 392typedef test_tparam16<double> test_tparam18; 393 394// ---- 395 396template<typename T> 397class test_tparam19; 398 399typedef test_tparam19<int> test_tparam20; 400typedef test_tparam19<double> test_tparam21; 401 402/// \tparam T Aaa 403template<typename T> 404class test_tparam19 { }; 405 406// ---- 407 408// expected-warning@+1 {{'@tparam' command used in a comment that is not attached to a template declaration}} 409/// @tparam T Aaa 410int test_tparam22; 411 412// ---- 413 414 415/// Aaa 416/// \deprecated Bbb 417void test_deprecated_1(int a) __attribute__((deprecated)); 418 419// We don't want \deprecated to warn about empty paragraph. It is fine to use 420// \deprecated by itself without explanations. 421 422/// Aaa 423/// \deprecated 424void test_deprecated_2(int a) __attribute__((deprecated)); 425 426/// Aaa 427/// \deprecated 428void test_deprecated_3(int a) __attribute__((availability(macosx,introduced=10.4))); 429 430/// Aaa 431/// \deprecated 432void test_deprecated_4(int a) __attribute__((unavailable)); 433 434// 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}} 435/// Aaa 436/// \deprecated 437void test_deprecated_5(int a); 438 439// 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}} 440/// Aaa 441/// \deprecated 442void test_deprecated_6(int a) { 443} 444 445// expected-warning@+2 {{declaration is marked with '\deprecated' command but does not have a deprecation attribute}} 446/// Aaa 447/// \deprecated 448template<typename T> 449void test_deprecated_7(T aaa); 450 451 452// rdar://12397511 453// expected-note@+2 {{previous command '\headerfile' here}} 454// expected-warning@+2 {{duplicated command '\headerfile'}} 455/// \headerfile "" 456/// \headerfile foo.h 457int test__headerfile_1(int a); 458 459 460/// \invariant aaa 461void test_invariant_1(int a); 462 463// expected-warning@+1 {{empty paragraph passed to '\invariant' command}} 464/// \invariant 465void test_invariant_2(int a); 466 467 468// no-warning 469/// \returns Aaa 470int test_returns_right_decl_1(int); 471 472class test_returns_right_decl_2 { 473 // no-warning 474 /// \returns Aaa 475 int test_returns_right_decl_3(int); 476}; 477 478// no-warning 479/// \returns Aaa 480template<typename T> 481int test_returns_right_decl_4(T aaa); 482 483// no-warning 484/// \returns Aaa 485template<> 486int test_returns_right_decl_4(int aaa); 487 488/// \returns Aaa 489template<typename T> 490T test_returns_right_decl_5(T aaa); 491 492// expected-warning@+1 {{'\returns' command used in a comment that is not attached to a function or method declaration}} 493/// \returns Aaa 494int test_returns_wrong_decl_1; 495 496// expected-warning@+1 {{'\return' command used in a comment that is not attached to a function or method declaration}} 497/// \return Aaa 498int test_returns_wrong_decl_2; 499 500// expected-warning@+1 {{'\result' command used in a comment that is not attached to a function or method declaration}} 501/// \result Aaa 502int test_returns_wrong_decl_3; 503 504// expected-warning@+1 {{'\returns' command used in a comment that is attached to a function returning void}} 505/// \returns Aaa 506void test_returns_wrong_decl_4(int); 507 508// expected-warning@+1 {{'\returns' command used in a comment that is attached to a function returning void}} 509/// \returns Aaa 510template<typename T> 511void test_returns_wrong_decl_5(T aaa); 512 513// expected-warning@+1 {{'\returns' command used in a comment that is attached to a function returning void}} 514/// \returns Aaa 515template<> 516void test_returns_wrong_decl_5(int aaa); 517 518// expected-warning@+1 {{'\returns' command used in a comment that is not attached to a function or method declaration}} 519/// \returns Aaa 520struct test_returns_wrong_decl_6 { }; 521 522// expected-warning@+1 {{'\returns' command used in a comment that is not attached to a function or method declaration}} 523/// \returns Aaa 524class test_returns_wrong_decl_7 { 525 // expected-warning@+1 {{'\returns' command used in a comment that is attached to a constructor}} 526 /// \returns Aaa 527 test_returns_wrong_decl_7(); 528 529 // expected-warning@+1 {{'\returns' command used in a comment that is attached to a destructor}} 530 /// \returns Aaa 531 ~test_returns_wrong_decl_7(); 532}; 533 534// expected-warning@+1 {{'\returns' command used in a comment that is not attached to a function or method declaration}} 535/// \returns Aaa 536enum test_returns_wrong_decl_8 { 537 // expected-warning@+1 {{'\returns' command used in a comment that is not attached to a function or method declaration}} 538 /// \returns Aaa 539 test_returns_wrong_decl_9 540}; 541 542// expected-warning@+1 {{'\returns' command used in a comment that is not attached to a function or method declaration}} 543/// \returns Aaa 544namespace test_returns_wrong_decl_10 { }; 545 546// rdar://13066276 547// expected-warning@+1 {{'@returns' command used in a comment that is not attached to a function or method declaration}} 548/// @returns Aaa 549typedef unsigned int test_returns_wrong_decl_11; 550 551// rdar://13094352 552// expected-warning@+1 {{'@function' command should be used in a comment attached to a function declaration}} 553/*! @function test_function 554*/ 555typedef unsigned int Base64Flags; 556unsigned test_function(Base64Flags inFlags); 557 558// expected-warning@+1 {{'@callback' command should be used in a comment attached to a pointer to function declaration}} 559/*! @callback test_callback 560*/ 561typedef unsigned int BaseFlags; 562unsigned (*test_callback)(BaseFlags inFlags); 563 564// expected-warning@+1 {{'\endverbatim' command does not terminate a verbatim text block}} 565/// \endverbatim 566int test_verbatim_1(); 567 568// expected-warning@+1 {{'\endcode' command does not terminate a verbatim text block}} 569/// \endcode 570int test_verbatim_2(); 571 572// FIXME: we give a bad diagnostic here because we throw away non-documentation 573// comments early. 574// 575// expected-warning@+3 {{'\endcode' command does not terminate a verbatim text block}} 576/// \code 577// foo 578/// \endcode 579int test_verbatim_3(); 580 581 582// expected-warning@+1 {{empty paragraph passed to '\brief' command}} 583int test1; ///< \brief\author Aaa 584 585// expected-warning@+2 {{empty paragraph passed to '\brief' command}} 586// expected-warning@+2 {{empty paragraph passed to '\brief' command}} 587int test2, ///< \brief\author Aaa 588 test3; ///< \brief\author Aaa 589 590// expected-warning@+1 {{empty paragraph passed to '\brief' command}} 591int test4; ///< \brief 592 ///< \author Aaa 593 594 595// Check that we attach the comment to the declaration during parsing in the 596// following cases. The test is based on the fact that we don't parse 597// documentation comments that are not attached to anything. 598 599// expected-warning@+1 {{empty paragraph passed to '\brief' command}} 600/// \brief\author Aaa 601int test_attach1; 602 603// expected-warning@+1 {{empty paragraph passed to '\brief' command}} 604/// \brief\author Aaa 605int test_attach2(int); 606 607// expected-warning@+1 {{empty paragraph passed to '\brief' command}} 608/// \brief\author Aaa 609struct test_attach3 { 610 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 611 /// \brief\author Aaa 612 int test_attach4; 613 614 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 615 int test_attach5; ///< \brief\author Aaa 616 617 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 618 /// \brief\author Aaa 619 int test_attach6(int); 620}; 621 622// expected-warning@+1 {{empty paragraph passed to '\brief' command}} 623/// \brief\author Aaa 624class test_attach7 { 625 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 626 /// \brief\author Aaa 627 int test_attach8; 628 629 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 630 int test_attach9; ///< \brief\author Aaa 631 632 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 633 /// \brief\author Aaa 634 int test_attach10(int); 635}; 636 637// expected-warning@+1 {{empty paragraph passed to '\brief' command}} 638/// \brief\author Aaa 639enum test_attach9 { 640 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 641 /// \brief\author Aaa 642 test_attach10, 643 644 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 645 test_attach11 ///< \brief\author Aaa 646}; 647 648// expected-warning@+1 {{empty paragraph passed to '\brief' command}} 649/// \brief\author Aaa 650struct test_noattach12 *test_attach13; 651 652// expected-warning@+1 {{empty paragraph passed to '\brief' command}} 653/// \brief\author Aaa 654typedef struct test_noattach14 *test_attach15; 655 656// expected-warning@+1 {{empty paragraph passed to '\brief' command}} 657/// \brief\author Aaa 658typedef struct test_attach16 { int a; } test_attach17; 659 660struct S { int a; }; 661 662// expected-warning@+1 {{empty paragraph passed to '\brief' command}} 663/// \brief\author Aaa 664struct S *test_attach18; 665 666// expected-warning@+1 {{empty paragraph passed to '\brief' command}} 667/// \brief\author Aaa 668typedef struct S *test_attach19; 669 670// expected-warning@+1 {{empty paragraph passed to '\brief' command}} 671/// \brief\author Aaa 672struct test_attach20; 673 674// expected-warning@+1 {{empty paragraph passed to '\brief' command}} 675/// \brief\author Aaa 676typedef struct test_attach21 { 677 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 678 /// \brief\author Aaa 679 int test_attach22; 680} test_attach23; 681 682// expected-warning@+1 {{empty paragraph passed to '\brief' command}} 683/// \brief\author Aaa 684namespace test_attach24 { 685 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 686 /// \brief\author Aaa 687 namespace test_attach25 { 688 } 689} 690 691// expected-warning@+1 {{empty paragraph passed to '\brief' command}} 692/// \brief\author Aaa 693/// \tparam T Aaa 694template<typename T> 695void test_attach26(T aaa); 696 697// expected-warning@+1 {{empty paragraph passed to '\brief' command}} 698/// \brief\author Aaa 699/// \tparam T Aaa 700template<typename T, typename U> 701void test_attach27(T aaa, U bbb); 702 703// expected-warning@+2 {{empty paragraph passed to '\brief' command}} 704// expected-warning@+2 {{template parameter 'T' not found in the template declaration}} 705/// \brief\author Aaa 706/// \tparam T Aaa 707template<> 708void test_attach27(int aaa, int bbb); 709 710// expected-warning@+1 {{empty paragraph passed to '\brief' command}} 711/// \brief\author Aaa 712/// \tparam T Aaa 713template<typename T> 714class test_attach28 { 715 T aaa; 716}; 717 718// expected-warning@+1 {{empty paragraph passed to '\brief' command}} 719/// \brief\author Aaa 720using test_attach29 = test_attach28<int>; 721 722// expected-warning@+1 {{empty paragraph passed to '\brief' command}} 723/// \brief\author Aaa 724/// \tparam T Aaa 725template<typename T, typename U> 726class test_attach30 { }; 727 728// expected-warning@+1 {{empty paragraph passed to '\brief' command}} 729/// \brief\author Aaa 730/// \tparam T Aaa 731template<typename T> 732class test_attach30<T, int> { }; 733 734// expected-warning@+1 {{empty paragraph passed to '\brief' command}} 735/// \brief\author Aaa 736template<> 737class test_attach30<int, int> { }; 738 739// expected-warning@+1 {{empty paragraph passed to '\brief' command}} 740/// \brief\author Aaa 741template<typename T> 742using test_attach31 = test_attach30<T, int>; 743 744// expected-warning@+1 {{empty paragraph passed to '\brief' command}} 745/// \brief\author Aaa 746/// \tparam T Aaa 747template<typename T, typename U, typename V> 748class test_attach32 { }; 749 750// expected-warning@+1 {{empty paragraph passed to '\brief' command}} 751/// \brief\author Aaa 752/// \tparam T Aaa 753template<typename T, typename U> 754class test_attach32<T, U, int> { }; 755 756// expected-warning@+1 {{empty paragraph passed to '\brief' command}} 757/// \brief\author Aaa 758/// \tparam T Aaa 759template<typename T> 760class test_attach32<T, int, int> { }; 761 762// expected-warning@+2 {{empty paragraph passed to '\brief' command}} 763// expected-warning@+2 {{template parameter 'T' not found in the template declaration}} 764/// \brief\author Aaa 765/// \tparam T Aaa 766template<> 767class test_attach32<int, int, int> { }; 768 769// expected-warning@+1 {{empty paragraph passed to '\brief' command}} 770/// \brief\author Aaa 771class test_attach33 { 772 // expected-warning@+1 {{empty paragraph passed to '\brief' command}} 773 /// \brief\author Aaa 774 /// \tparam T Aaa 775 template<typename T, typename U> 776 void test_attach34(T aaa, U bbb); 777}; 778 779template<typename T> 780class test_attach35 { 781 // expected-warning@+2 {{empty paragraph passed to '\brief' command}} 782 // expected-warning@+2 {{template parameter 'T' not found in the template declaration}} 783 /// \brief\author Aaa 784 /// \tparam T Aaa 785 template<typename TT, typename UU> 786 void test_attach36(TT aaa, UU bbb); 787}; 788 789// expected-warning@+2 {{empty paragraph passed to '\brief' command}} 790// expected-warning@+2 {{template parameter 'T' not found in the template declaration}} 791/// \brief\author Aaa 792/// \tparam T Aaa 793template<> template<> 794void test_attach35<int>::test_attach36(int aaa, int bbb) {} 795 796template<typename T> 797class test_attach37 { 798 // expected-warning@+2 {{empty paragraph passed to '\brief' command}} 799 // expected-warning@+2 {{'\tparam' command used in a comment that is not attached to a template declaration}} 800 /// \brief\author Aaa 801 /// \tparam T Aaa 802 void test_attach38(int aaa, int bbb); 803 804 void test_attach39(int aaa, int bbb); 805}; 806 807// expected-warning@+2 {{empty paragraph passed to '\brief' command}} 808// expected-warning@+2 {{template parameter 'T' not found in the template declaration}} 809/// \brief\author Aaa 810/// \tparam T Aaa 811template<> 812void test_attach37<int>::test_attach38(int aaa, int bbb) {} 813 814// expected-warning@+1 {{empty paragraph passed to '\brief' command}} 815/// \brief\author Aaa 816/// \tparam T Aaa 817template<typename T> 818void test_attach37<T>::test_attach39(int aaa, int bbb) {} 819 820// We used to emit warning that parameter 'a' is not found because we parsed 821// the comment in context of the redeclaration which does not have parameter 822// names. 823template <typename T> 824struct test_attach38 { 825 /*! 826 \param a First param 827 \param b Second param 828 */ 829 template <typename B> 830 void test_attach39(T a, B b); 831}; 832 833template <> 834template <typename B> 835void test_attach38<int>::test_attach39(int, B); 836 837 838// PR13411, reduced. We used to crash on this. 839/** 840 * @code Aaa. 841 */ 842void test_nocrash1(int); 843 844// We used to crash on this. 845// expected-warning@+2 {{empty paragraph passed to '\param' command}} 846// expected-warning@+1 {{empty paragraph passed to '\brief' command}} 847/// \param\brief 848void test_nocrash2(int); 849 850// PR13593, example 1 and 2 851 852/** 853* Bla. 854*/ 855template <typename> 856void test_nocrash3(); 857 858/// Foo 859template <typename, typename> 860void test_nocrash4() { } 861 862template <typename> 863void test_nocrash3() 864{ 865} 866 867// PR13593, example 3 868 869/** 870 * aaa 871 */ 872template <typename T> 873inline T test_nocrash5(T a1) 874{ 875 return a1; 876} 877 878/// 879//, 880 881inline void test_nocrash6() 882{ 883 test_nocrash5(1); 884} 885 886// We used to crash on this. 887 888/*! 889 Blah. 890*/ 891typedef const struct test_nocrash7 * test_nocrash8; 892 893// We used to crash on this. 894 895// expected-warning@+1 {{unknown command tag name}} 896/// aaa \unknown aaa \unknown aaa 897int test_nocrash9; 898 899// We used to crash on this. PR15068 900 901// expected-warning@+2 {{empty paragraph passed to '@param' command}} 902// expected-warning@+2 {{empty paragraph passed to '@param' command}} 903///@param x 904///@param y 905int test_nocrash10(int x, int y); 906 907// expected-warning@+2 {{empty paragraph passed to '@param' command}} expected-warning@+2 {{parameter 'x' not found in the function declaration}} 908// expected-warning@+2 {{empty paragraph passed to '@param' command}} expected-warning@+2 {{parameter 'y' not found in the function declaration}} 909///@param x 910///@param y 911int test_nocrash11(); 912 913// expected-warning@+3 {{empty paragraph passed to '@param' command}} expected-warning@+3 {{parameter 'x' not found in the function declaration}} 914// expected-warning@+3 {{empty paragraph passed to '@param' command}} expected-warning@+3 {{parameter 'y' not found in the function declaration}} 915/** 916@param x 917@param y 918**/ 919int test_nocrash12(); 920 921// expected-warning@+2 {{empty paragraph passed to '@param' command}} 922// expected-warning@+1 {{empty paragraph passed to '@param' command}} 923///@param x@param y 924int test_nocrash13(int x, int y); 925 926// rdar://12379114 927// expected-warning@+2 {{'@union' command should not be used in a comment attached to a non-union declaration}} 928/*! 929 @union U This is new 930*/ 931struct U { int iS; }; 932 933/*! 934 @union U1 935*/ 936union U1 {int i; }; 937 938// expected-warning@+2 {{'@struct' command should not be used in a comment attached to a non-struct declaration}} 939/*! 940 @struct S2 941*/ 942union S2 {}; 943 944/*! 945 @class C1 946*/ 947class C1; 948 949/*! 950 @struct S3; 951*/ 952class S3; 953