2012-08-03 04:49:51 +08:00
|
|
|
// RUN: %clang_cc1 -std=c++11 -fsyntax-only -Wdocumentation -Wdocumentation-pedantic -verify %s
|
2012-07-12 05:38:39 +08:00
|
|
|
|
|
|
|
// expected-warning@+1 {{expected quoted string after equals sign}}
|
|
|
|
/// <a href=>
|
|
|
|
int test_html1(int);
|
|
|
|
|
|
|
|
// expected-warning@+1 {{expected quoted string after equals sign}}
|
|
|
|
/// <a href==>
|
|
|
|
int test_html2(int);
|
|
|
|
|
|
|
|
// expected-warning@+2 {{expected quoted string after equals sign}}
|
2012-07-13 08:44:24 +08:00
|
|
|
// expected-warning@+1 {{HTML start tag prematurely ended, expected attribute name or '>'}}
|
2012-07-12 05:38:39 +08:00
|
|
|
/// <a href= blah
|
|
|
|
int test_html3(int);
|
|
|
|
|
2012-07-13 08:44:24 +08:00
|
|
|
// expected-warning@+1 {{HTML start tag prematurely ended, expected attribute name or '>'}}
|
2012-07-12 05:38:39 +08:00
|
|
|
/// <a =>
|
|
|
|
int test_html4(int);
|
|
|
|
|
2012-07-13 08:44:24 +08:00
|
|
|
// expected-warning@+1 {{HTML start tag prematurely ended, expected attribute name or '>'}}
|
2012-07-12 05:38:39 +08:00
|
|
|
/// <a "aaa">
|
|
|
|
int test_html5(int);
|
|
|
|
|
2012-07-13 08:44:24 +08:00
|
|
|
// expected-warning@+1 {{HTML start tag prematurely ended, expected attribute name or '>'}}
|
2012-07-12 05:38:39 +08:00
|
|
|
/// <a a="b" =>
|
|
|
|
int test_html6(int);
|
|
|
|
|
2012-07-13 08:44:24 +08:00
|
|
|
// expected-warning@+1 {{HTML start tag prematurely ended, expected attribute name or '>'}}
|
2012-07-12 05:38:39 +08:00
|
|
|
/// <a a="b" "aaa">
|
|
|
|
int test_html7(int);
|
|
|
|
|
2012-07-13 08:44:24 +08:00
|
|
|
// expected-warning@+1 {{HTML start tag prematurely ended, expected attribute name or '>'}}
|
2012-07-12 05:38:39 +08:00
|
|
|
/// <a a="b" =
|
|
|
|
int test_html8(int);
|
|
|
|
|
2012-07-13 08:44:24 +08:00
|
|
|
// expected-warning@+2 {{HTML start tag prematurely ended, expected attribute name or '>'}} expected-note@+1 {{HTML tag started here}}
|
2012-07-12 05:38:39 +08:00
|
|
|
/** Aaa bbb<ccc ddd eee
|
|
|
|
* fff ggg.
|
|
|
|
*/
|
|
|
|
int test_html9(int);
|
|
|
|
|
2012-07-13 08:44:24 +08:00
|
|
|
// expected-warning@+1 {{HTML start tag prematurely ended, expected attribute name or '>'}}
|
2012-07-12 05:38:39 +08:00
|
|
|
/** Aaa bbb<ccc ddd eee 42%
|
|
|
|
* fff ggg.
|
|
|
|
*/
|
|
|
|
int test_html10(int);
|
|
|
|
|
2012-07-13 08:44:24 +08:00
|
|
|
// expected-warning@+1 {{HTML end tag 'br' is forbidden}}
|
2012-07-13 07:37:09 +08:00
|
|
|
/// <br></br>
|
|
|
|
int test_html11(int);
|
2012-07-12 05:38:39 +08:00
|
|
|
|
|
|
|
/// <blockquote>Meow</blockquote>
|
|
|
|
int test_html_nesting1(int);
|
|
|
|
|
|
|
|
/// <b><i>Meow</i></b>
|
|
|
|
int test_html_nesting2(int);
|
|
|
|
|
|
|
|
/// <p>Aaa<br>
|
|
|
|
/// Bbb</p>
|
|
|
|
int test_html_nesting3(int);
|
|
|
|
|
|
|
|
/// <p>Aaa<br />
|
|
|
|
/// Bbb</p>
|
|
|
|
int test_html_nesting4(int);
|
|
|
|
|
2012-07-13 08:44:24 +08:00
|
|
|
// expected-warning@+1 {{HTML end tag does not match any start tag}}
|
2012-07-12 05:38:39 +08:00
|
|
|
/// <b><i>Meow</a>
|
|
|
|
int test_html_nesting5(int);
|
|
|
|
|
2012-07-13 08:44:24 +08:00
|
|
|
// expected-warning@+2 {{HTML start tag 'i' closed by 'b'}}
|
|
|
|
// expected-warning@+1 {{HTML end tag does not match any start tag}}
|
2012-07-12 05:38:39 +08:00
|
|
|
/// <b><i>Meow</b></b>
|
|
|
|
int test_html_nesting6(int);
|
|
|
|
|
2012-07-13 08:44:24 +08:00
|
|
|
// expected-warning@+2 {{HTML start tag 'i' closed by 'b'}}
|
|
|
|
// expected-warning@+1 {{HTML end tag does not match any start tag}}
|
2012-07-12 05:38:39 +08:00
|
|
|
/// <b><i>Meow</b></i>
|
|
|
|
int test_html_nesting7(int);
|
|
|
|
|
|
|
|
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
/// \brief\brief Aaa
|
|
|
|
int test_block_command1(int);
|
|
|
|
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
/// \brief \brief Aaa
|
|
|
|
int test_block_command2(int);
|
|
|
|
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
/// \brief
|
|
|
|
/// \brief Aaa
|
|
|
|
int test_block_command3(int);
|
|
|
|
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
/// \brief
|
|
|
|
///
|
|
|
|
/// \brief Aaa
|
|
|
|
int test_block_command4(int);
|
|
|
|
|
|
|
|
// There is trailing whitespace on one of the following lines, don't remove it!
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
/// \brief
|
|
|
|
///
|
|
|
|
/// \brief Aaa
|
|
|
|
int test_block_command5(int);
|
|
|
|
|
2012-07-19 08:01:56 +08:00
|
|
|
/// \brief \c Aaa
|
|
|
|
int test_block_command6(int);
|
|
|
|
|
2012-07-12 05:38:39 +08:00
|
|
|
// expected-warning@+1 {{'\param' command used in a comment that is not attached to a function declaration}}
|
|
|
|
/// \param a Blah blah.
|
|
|
|
int test_param1;
|
|
|
|
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\param' command}}
|
|
|
|
/// \param
|
|
|
|
/// \param a Blah blah.
|
|
|
|
int test_param2(int a);
|
|
|
|
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\param' command}}
|
|
|
|
/// \param a
|
|
|
|
int test_param3(int a);
|
|
|
|
|
|
|
|
/// \param a Blah blah.
|
|
|
|
int test_param4(int a);
|
|
|
|
|
|
|
|
/// \param [in] a Blah blah.
|
|
|
|
int test_param5(int a);
|
|
|
|
|
|
|
|
/// \param [out] a Blah blah.
|
|
|
|
int test_param6(int a);
|
|
|
|
|
|
|
|
/// \param [in,out] a Blah blah.
|
|
|
|
int test_param7(int a);
|
|
|
|
|
|
|
|
// expected-warning@+1 {{whitespace is not allowed in parameter passing direction}}
|
|
|
|
/// \param [ in ] a Blah blah.
|
|
|
|
int test_param8(int a);
|
|
|
|
|
|
|
|
// expected-warning@+1 {{whitespace is not allowed in parameter passing direction}}
|
|
|
|
/// \param [in, out] a Blah blah.
|
|
|
|
int test_param9(int a);
|
|
|
|
|
|
|
|
// expected-warning@+1 {{unrecognized parameter passing direction, valid directions are '[in]', '[out]' and '[in,out]'}}
|
|
|
|
/// \param [ junk] a Blah blah.
|
|
|
|
int test_param10(int a);
|
|
|
|
|
2012-07-25 05:56:59 +08:00
|
|
|
// expected-warning@+1 {{parameter 'a' not found in the function declaration}}
|
2012-07-25 05:46:24 +08:00
|
|
|
/// \param a Blah blah.
|
|
|
|
int test_param11();
|
|
|
|
|
2012-07-12 05:38:39 +08:00
|
|
|
// expected-warning@+1 {{parameter 'A' not found in the function declaration}} expected-note@+1 {{did you mean 'a'?}}
|
|
|
|
/// \param A Blah blah.
|
2012-07-25 05:46:24 +08:00
|
|
|
int test_param12(int a);
|
2012-07-12 05:38:39 +08:00
|
|
|
|
|
|
|
// expected-warning@+1 {{parameter 'aab' not found in the function declaration}} expected-note@+1 {{did you mean 'aaa'?}}
|
|
|
|
/// \param aab Blah blah.
|
2012-07-25 05:46:24 +08:00
|
|
|
int test_param13(int aaa, int bbb);
|
2012-07-12 05:38:39 +08:00
|
|
|
|
|
|
|
// expected-warning@+1 {{parameter 'aab' not found in the function declaration}}
|
|
|
|
/// \param aab Blah blah.
|
2012-07-25 05:46:24 +08:00
|
|
|
int test_param14(int bbb, int ccc);
|
2012-07-12 05:38:39 +08:00
|
|
|
|
|
|
|
class C {
|
|
|
|
// expected-warning@+1 {{parameter 'aaa' not found in the function declaration}}
|
|
|
|
/// \param aaa Blah blah.
|
|
|
|
C(int bbb, int ccc);
|
|
|
|
|
|
|
|
// expected-warning@+1 {{parameter 'aaa' not found in the function declaration}}
|
|
|
|
/// \param aaa Blah blah.
|
2012-07-25 05:46:24 +08:00
|
|
|
int test_param15(int bbb, int ccc);
|
2012-07-12 05:38:39 +08:00
|
|
|
};
|
|
|
|
|
2012-08-01 06:37:06 +08:00
|
|
|
// expected-warning@+1 {{parameter 'aab' not found in the function declaration}}
|
|
|
|
/// \param aab Blah blah.
|
|
|
|
template<typename T>
|
|
|
|
void test_param16(int bbb, int ccc);
|
|
|
|
|
2012-07-25 05:44:16 +08:00
|
|
|
// expected-warning@+3 {{parameter 'a' is already documented}}
|
|
|
|
// expected-note@+1 {{previous documentation}}
|
|
|
|
/// \param a Aaa.
|
|
|
|
/// \param a Aaa.
|
2012-08-01 06:37:06 +08:00
|
|
|
int test_param17(int a);
|
2012-07-25 05:44:16 +08:00
|
|
|
|
|
|
|
// expected-warning@+4 {{parameter 'x2' is already documented}}
|
|
|
|
// expected-note@+2 {{previous documentation}}
|
|
|
|
/// \param x1 Aaa.
|
|
|
|
/// \param x2 Bbb.
|
|
|
|
/// \param x2 Ccc.
|
2012-08-01 06:37:06 +08:00
|
|
|
int test_param18(int x1, int x2, int x3);
|
|
|
|
|
|
|
|
|
|
|
|
// expected-warning@+1 {{'\tparam' command used in a comment that is not attached to a template declaration}}
|
|
|
|
/// \tparam T Aaa
|
|
|
|
int test_tparam1;
|
|
|
|
|
|
|
|
// expected-warning@+1 {{'\tparam' command used in a comment that is not attached to a template declaration}}
|
|
|
|
/// \tparam T Aaa
|
|
|
|
void test_tparam2(int aaa);
|
|
|
|
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\tparam' command}}
|
|
|
|
/// \tparam
|
|
|
|
/// \param aaa Blah blah
|
|
|
|
template<typename T>
|
|
|
|
void test_tparam3(T aaa);
|
|
|
|
|
|
|
|
// expected-warning@+1 {{template parameter 'T' not found in the template declaration}} expected-note@+1 {{did you mean 'TT'?}}
|
|
|
|
/// \tparam T Aaa
|
|
|
|
template<typename TT>
|
|
|
|
void test_tparam4(TT aaa);
|
|
|
|
|
|
|
|
// expected-warning@+1 {{template parameter 'T' not found in the template declaration}} expected-note@+1 {{did you mean 'TT'?}}
|
|
|
|
/// \tparam T Aaa
|
|
|
|
template<typename TT>
|
|
|
|
class test_tparam5 {
|
|
|
|
// expected-warning@+1 {{template parameter 'T' not found in the template declaration}} expected-note@+1 {{did you mean 'TTT'?}}
|
|
|
|
/// \tparam T Aaa
|
|
|
|
template<typename TTT>
|
|
|
|
void test_tparam6(TTT aaa);
|
|
|
|
};
|
|
|
|
|
|
|
|
/// \tparam T1 Aaa
|
|
|
|
/// \tparam T2 Bbb
|
|
|
|
template<typename T1, typename T2>
|
|
|
|
void test_tparam7(T1 aaa, T2 bbb);
|
|
|
|
|
|
|
|
// expected-warning@+1 {{template parameter 'SomTy' not found in the template declaration}} expected-note@+1 {{did you mean 'SomeTy'?}}
|
|
|
|
/// \tparam SomTy Aaa
|
|
|
|
/// \tparam OtherTy Bbb
|
|
|
|
template<typename SomeTy, typename OtherTy>
|
|
|
|
void test_tparam8(SomeTy aaa, OtherTy bbb);
|
|
|
|
|
|
|
|
// expected-warning@+2 {{template parameter 'T1' is already documented}} expected-note@+1 {{previous documentation}}
|
|
|
|
/// \tparam T1 Aaa
|
|
|
|
/// \tparam T1 Bbb
|
|
|
|
template<typename T1, typename T2>
|
|
|
|
void test_tparam9(T1 aaa, T2 bbb);
|
|
|
|
|
|
|
|
/// \tparam T Aaa
|
|
|
|
/// \tparam TT Bbb
|
|
|
|
template<template<typename T> class TT>
|
|
|
|
void test_tparam10(TT<int> aaa);
|
|
|
|
|
|
|
|
/// \tparam T Aaa
|
|
|
|
/// \tparam TT Bbb
|
|
|
|
/// \tparam TTT Ccc
|
|
|
|
template<template<template<typename T> class TT, class C> class TTT>
|
|
|
|
void test_tparam11();
|
|
|
|
|
|
|
|
/// \tparam I Aaa
|
|
|
|
template<int I>
|
|
|
|
void test_tparam12();
|
|
|
|
|
2012-08-03 05:36:57 +08:00
|
|
|
template<typename T, typename U>
|
|
|
|
class test_tparam13 { };
|
|
|
|
|
|
|
|
/// \tparam T Aaa
|
|
|
|
template<typename T>
|
|
|
|
using test_tparam14 = test_tparam13<T, int>;
|
|
|
|
|
|
|
|
// expected-warning@+1 {{template parameter 'U' not found in the template declaration}} expected-note@+1 {{did you mean 'T'?}}
|
|
|
|
/// \tparam U Aaa
|
|
|
|
template<typename T>
|
|
|
|
using test_tparam15 = test_tparam13<T, int>;
|
|
|
|
|
2012-08-04 05:15:32 +08:00
|
|
|
// no-warning
|
|
|
|
/// \returns Aaa
|
|
|
|
int test_returns_right_decl_1(int);
|
|
|
|
|
|
|
|
class test_returns_right_decl_2 {
|
|
|
|
// no-warning
|
|
|
|
/// \returns Aaa
|
|
|
|
int test_returns_right_decl_3(int);
|
|
|
|
};
|
|
|
|
|
|
|
|
// no-warning
|
|
|
|
/// \returns Aaa
|
|
|
|
template<typename T>
|
|
|
|
int test_returns_right_decl_4(T aaa);
|
|
|
|
|
|
|
|
// no-warning
|
|
|
|
/// \returns Aaa
|
|
|
|
template<>
|
|
|
|
int test_returns_right_decl_4(int aaa);
|
|
|
|
|
|
|
|
/// \returns Aaa
|
|
|
|
template<typename T>
|
|
|
|
T test_returns_right_decl_5(T aaa);
|
|
|
|
|
|
|
|
// expected-warning@+1 {{'\returns' command used in a comment that is not attached to a function declaration}}
|
|
|
|
/// \returns Aaa
|
|
|
|
int test_returns_wrong_decl_1;
|
|
|
|
|
|
|
|
// expected-warning@+1 {{'\return' command used in a comment that is not attached to a function declaration}}
|
|
|
|
/// \return Aaa
|
|
|
|
int test_returns_wrong_decl_2;
|
|
|
|
|
|
|
|
// expected-warning@+1 {{'\result' command used in a comment that is not attached to a function declaration}}
|
|
|
|
/// \result Aaa
|
|
|
|
int test_returns_wrong_decl_3;
|
|
|
|
|
|
|
|
// expected-warning@+1 {{'\returns' command used in a comment that is attached to a void function}}
|
|
|
|
/// \returns Aaa
|
|
|
|
void test_returns_wrong_decl_4(int);
|
|
|
|
|
|
|
|
// expected-warning@+1 {{'\returns' command used in a comment that is attached to a void function}}
|
|
|
|
/// \returns Aaa
|
|
|
|
template<typename T>
|
|
|
|
void test_returns_wrong_decl_5(T aaa);
|
|
|
|
|
|
|
|
// expected-warning@+1 {{'\returns' command used in a comment that is attached to a void function}}
|
|
|
|
/// \returns Aaa
|
|
|
|
template<>
|
|
|
|
void test_returns_wrong_decl_5(int aaa);
|
|
|
|
|
|
|
|
// expected-warning@+1 {{'\returns' command used in a comment that is not attached to a function declaration}}
|
|
|
|
/// \returns Aaa
|
|
|
|
struct test_returns_wrong_decl_6 { };
|
|
|
|
|
|
|
|
// expected-warning@+1 {{'\returns' command used in a comment that is not attached to a function declaration}}
|
|
|
|
/// \returns Aaa
|
|
|
|
class test_returns_wrong_decl_7 {
|
|
|
|
// expected-warning@+1 {{'\returns' command used in a comment that is attached to a constructor}}
|
|
|
|
/// \returns Aaa
|
|
|
|
test_returns_wrong_decl_7();
|
|
|
|
|
|
|
|
// expected-warning@+1 {{'\returns' command used in a comment that is attached to a destructor}}
|
|
|
|
/// \returns Aaa
|
|
|
|
~test_returns_wrong_decl_7();
|
|
|
|
};
|
|
|
|
|
|
|
|
// expected-warning@+1 {{'\returns' command used in a comment that is not attached to a function declaration}}
|
|
|
|
/// \returns Aaa
|
|
|
|
enum test_returns_wrong_decl_8 {
|
|
|
|
// expected-warning@+1 {{'\returns' command used in a comment that is not attached to a function declaration}}
|
|
|
|
/// \returns Aaa
|
|
|
|
test_returns_wrong_decl_9
|
|
|
|
};
|
|
|
|
|
|
|
|
// expected-warning@+1 {{'\returns' command used in a comment that is not attached to a function declaration}}
|
|
|
|
/// \returns Aaa
|
|
|
|
namespace test_returns_wrong_decl_10 { };
|
|
|
|
|
2012-07-12 05:38:39 +08:00
|
|
|
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
int test1; ///< \brief\brief Aaa
|
|
|
|
|
|
|
|
// expected-warning@+2 {{empty paragraph passed to '\brief' command}}
|
|
|
|
// expected-warning@+2 {{empty paragraph passed to '\brief' command}}
|
|
|
|
int test2, ///< \brief\brief Aaa
|
|
|
|
test3; ///< \brief\brief Aaa
|
|
|
|
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
int test4; ///< \brief
|
|
|
|
///< \brief Aaa
|
|
|
|
|
|
|
|
|
|
|
|
// Check that we attach the comment to the declaration during parsing in the
|
|
|
|
// following cases. The test is based on the fact that we don't parse
|
|
|
|
// documentation comments that are not attached to anything.
|
|
|
|
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
/// \brief\brief Aaa
|
|
|
|
int test_attach1;
|
|
|
|
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
/// \brief\brief Aaa
|
|
|
|
int test_attach2(int);
|
|
|
|
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
/// \brief\brief Aaa
|
|
|
|
struct test_attach3 {
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
/// \brief\brief Aaa
|
|
|
|
int test_attach4;
|
|
|
|
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
int test_attach5; ///< \brief\brief Aaa
|
|
|
|
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
/// \brief\brief Aaa
|
|
|
|
int test_attach6(int);
|
|
|
|
};
|
|
|
|
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
/// \brief\brief Aaa
|
|
|
|
class test_attach7 {
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
/// \brief\brief Aaa
|
|
|
|
int test_attach8;
|
|
|
|
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
int test_attach9; ///< \brief\brief Aaa
|
|
|
|
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
/// \brief\brief Aaa
|
|
|
|
int test_attach10(int);
|
|
|
|
};
|
|
|
|
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
/// \brief\brief Aaa
|
|
|
|
enum test_attach9 {
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
/// \brief\brief Aaa
|
|
|
|
test_attach10,
|
|
|
|
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
test_attach11 ///< \brief\brief Aaa
|
|
|
|
};
|
|
|
|
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
/// \brief\brief Aaa
|
|
|
|
struct test_noattach12 *test_attach13;
|
|
|
|
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
/// \brief\brief Aaa
|
|
|
|
typedef struct test_noattach14 *test_attach15;
|
|
|
|
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
/// \brief\brief Aaa
|
|
|
|
typedef struct test_attach16 { int a; } test_attach17;
|
|
|
|
|
|
|
|
struct S { int a; };
|
|
|
|
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
/// \brief\brief Aaa
|
|
|
|
struct S *test_attach18;
|
|
|
|
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
/// \brief\brief Aaa
|
|
|
|
typedef struct S *test_attach19;
|
|
|
|
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
/// \brief\brief Aaa
|
|
|
|
struct test_attach20;
|
|
|
|
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
/// \brief\brief Aaa
|
|
|
|
typedef struct test_attach21 {
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
/// \brief\brief Aaa
|
|
|
|
int test_attach22;
|
|
|
|
} test_attach23;
|
|
|
|
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
/// \brief\brief Aaa
|
|
|
|
namespace test_attach24 {
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
/// \brief\brief Aaa
|
|
|
|
namespace test_attach25 {
|
|
|
|
}
|
|
|
|
}
|
|
|
|
|
2012-08-01 06:37:06 +08:00
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
/// \brief\brief Aaa
|
|
|
|
/// \tparam T Aaa
|
|
|
|
template<typename T>
|
|
|
|
void test_attach26(T aaa);
|
|
|
|
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
/// \brief\brief Aaa
|
|
|
|
/// \tparam T Aaa
|
|
|
|
template<typename T, typename U>
|
|
|
|
void test_attach27(T aaa, U bbb);
|
|
|
|
|
|
|
|
// expected-warning@+2 {{empty paragraph passed to '\brief' command}}
|
|
|
|
// expected-warning@+2 {{template parameter 'T' not found in the template declaration}}
|
|
|
|
/// \brief\brief Aaa
|
|
|
|
/// \tparam T Aaa
|
|
|
|
template<>
|
|
|
|
void test_attach27(int aaa, int bbb);
|
|
|
|
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
/// \brief\brief Aaa
|
|
|
|
/// \tparam T Aaa
|
|
|
|
template<typename T>
|
|
|
|
class test_attach28 {
|
|
|
|
T aaa;
|
|
|
|
};
|
|
|
|
|
2012-08-03 04:49:51 +08:00
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
/// \brief\brief Aaa
|
|
|
|
using test_attach29 = test_attach28<int>;
|
|
|
|
|
2012-08-01 06:37:06 +08:00
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
/// \brief\brief Aaa
|
|
|
|
/// \tparam T Aaa
|
|
|
|
template<typename T, typename U>
|
2012-08-03 04:49:51 +08:00
|
|
|
class test_attach30 { };
|
2012-08-01 06:37:06 +08:00
|
|
|
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
/// \brief\brief Aaa
|
|
|
|
/// \tparam T Aaa
|
|
|
|
template<typename T>
|
2012-08-03 04:49:51 +08:00
|
|
|
class test_attach30<T, int> { };
|
2012-08-01 06:37:06 +08:00
|
|
|
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
/// \brief\brief Aaa
|
|
|
|
template<>
|
2012-08-03 04:49:51 +08:00
|
|
|
class test_attach30<int, int> { };
|
|
|
|
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
/// \brief\brief Aaa
|
|
|
|
template<typename T>
|
|
|
|
using test_attach31 = test_attach30<T, int>;
|
2012-08-01 06:37:06 +08:00
|
|
|
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
/// \brief\brief Aaa
|
|
|
|
/// \tparam T Aaa
|
|
|
|
template<typename T, typename U, typename V>
|
2012-08-03 04:49:51 +08:00
|
|
|
class test_attach32 { };
|
2012-08-01 06:37:06 +08:00
|
|
|
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
/// \brief\brief Aaa
|
|
|
|
/// \tparam T Aaa
|
|
|
|
template<typename T, typename U>
|
2012-08-03 04:49:51 +08:00
|
|
|
class test_attach32<T, U, int> { };
|
2012-08-01 06:37:06 +08:00
|
|
|
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
/// \brief\brief Aaa
|
|
|
|
/// \tparam T Aaa
|
|
|
|
template<typename T>
|
2012-08-03 04:49:51 +08:00
|
|
|
class test_attach32<T, int, int> { };
|
2012-08-01 06:37:06 +08:00
|
|
|
|
|
|
|
// expected-warning@+2 {{empty paragraph passed to '\brief' command}}
|
|
|
|
// expected-warning@+2 {{template parameter 'T' not found in the template declaration}}
|
|
|
|
/// \brief\brief Aaa
|
|
|
|
/// \tparam T Aaa
|
|
|
|
template<>
|
2012-08-03 04:49:51 +08:00
|
|
|
class test_attach32<int, int, int> { };
|
2012-08-01 06:37:06 +08:00
|
|
|
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
/// \brief\brief Aaa
|
2012-08-03 04:49:51 +08:00
|
|
|
class test_attach33 {
|
2012-08-01 06:37:06 +08:00
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
/// \brief\brief Aaa
|
|
|
|
/// \tparam T Aaa
|
|
|
|
template<typename T, typename U>
|
2012-08-03 04:49:51 +08:00
|
|
|
void test_attach34(T aaa, U bbb);
|
2012-08-01 06:37:06 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
template<typename T>
|
2012-08-03 04:49:51 +08:00
|
|
|
class test_attach35 {
|
2012-08-01 06:37:06 +08:00
|
|
|
// expected-warning@+2 {{empty paragraph passed to '\brief' command}}
|
|
|
|
// expected-warning@+2 {{template parameter 'T' not found in the template declaration}}
|
|
|
|
/// \brief\brief Aaa
|
|
|
|
/// \tparam T Aaa
|
|
|
|
template<typename TT, typename UU>
|
2012-08-03 04:49:51 +08:00
|
|
|
void test_attach36(TT aaa, UU bbb);
|
2012-08-01 06:37:06 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
// expected-warning@+2 {{empty paragraph passed to '\brief' command}}
|
|
|
|
// expected-warning@+2 {{template parameter 'T' not found in the template declaration}}
|
|
|
|
/// \brief\brief Aaa
|
|
|
|
/// \tparam T Aaa
|
|
|
|
template<> template<>
|
2012-08-03 04:49:51 +08:00
|
|
|
void test_attach35<int>::test_attach36(int aaa, int bbb) {}
|
2012-08-01 06:37:06 +08:00
|
|
|
|
|
|
|
template<typename T>
|
2012-08-03 04:49:51 +08:00
|
|
|
class test_attach37 {
|
2012-08-01 06:37:06 +08:00
|
|
|
// expected-warning@+2 {{empty paragraph passed to '\brief' command}}
|
|
|
|
// expected-warning@+2 {{'\tparam' command used in a comment that is not attached to a template declaration}}
|
|
|
|
/// \brief\brief Aaa
|
|
|
|
/// \tparam T Aaa
|
2012-08-03 04:49:51 +08:00
|
|
|
void test_attach38(int aaa, int bbb);
|
2012-08-01 06:37:06 +08:00
|
|
|
};
|
|
|
|
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
/// \brief\brief Aaa
|
|
|
|
/// \tparam T Aaa
|
|
|
|
template<typename T>
|
2012-08-03 04:49:51 +08:00
|
|
|
void test_attach37<T>::test_attach38(int aaa, int bbb) {}
|
2012-08-01 06:37:06 +08:00
|
|
|
|
|
|
|
// expected-warning@+2 {{empty paragraph passed to '\brief' command}}
|
|
|
|
// expected-warning@+2 {{template parameter 'T' not found in the template declaration}}
|
|
|
|
/// \brief\brief Aaa
|
|
|
|
/// \tparam T Aaa
|
|
|
|
template<>
|
2012-08-03 04:49:51 +08:00
|
|
|
void test_attach37<int>::test_attach38(int aaa, int bbb) {}
|
2012-08-01 06:37:06 +08:00
|
|
|
|
|
|
|
|
2012-07-21 04:18:53 +08:00
|
|
|
// PR13411, reduced. We used to crash on this.
|
|
|
|
/**
|
|
|
|
* @code Aaa.
|
|
|
|
*/
|
|
|
|
void test_nocrash1(int);
|
|
|
|
|
2012-07-31 02:05:28 +08:00
|
|
|
// We used to crash on this.
|
|
|
|
// expected-warning@+2 {{empty paragraph passed to '\param' command}}
|
|
|
|
// expected-warning@+1 {{empty paragraph passed to '\brief' command}}
|
|
|
|
/// \param\brief
|
|
|
|
void test_nocrash2(int);
|
|
|
|
|