diff options
-rw-r--r-- | lib/AST/ASTContext.cpp | 4 | ||||
-rw-r--r-- | lib/Sema/SemaDeclCXX.cpp | 1 | ||||
-rw-r--r-- | test/Sema/warn-documentation.cpp | 43 |
3 files changed, 29 insertions, 19 deletions
diff --git a/lib/AST/ASTContext.cpp b/lib/AST/ASTContext.cpp index 1c0c0c404d..0ff0e35a43 100644 --- a/lib/AST/ASTContext.cpp +++ b/lib/AST/ASTContext.cpp @@ -95,8 +95,8 @@ RawComment *ASTContext::getRawCommentForDeclNoCache(const Decl *D) const { SourceLocation DeclLoc; if (isa<ObjCMethodDecl>(D) || isa<ObjCContainerDecl>(D) || isa<ObjCPropertyDecl>(D) || - isa<FunctionTemplateDecl>(D) || - isa<ClassTemplateDecl>(D) || isa<ClassTemplateSpecializationDecl>(D)) + isa<RedeclarableTemplateDecl>(D) || + isa<ClassTemplateSpecializationDecl>(D)) DeclLoc = D->getLocStart(); else DeclLoc = D->getLocation(); diff --git a/lib/Sema/SemaDeclCXX.cpp b/lib/Sema/SemaDeclCXX.cpp index fae0b165ce..35364dca74 100644 --- a/lib/Sema/SemaDeclCXX.cpp +++ b/lib/Sema/SemaDeclCXX.cpp @@ -6649,6 +6649,7 @@ Decl *Sema::ActOnAliasDeclaration(Scope *S, if (!Redeclaration) PushOnScopeChains(NewND, S); + ActOnDocumentableDecl(NewND); return NewND; } diff --git a/test/Sema/warn-documentation.cpp b/test/Sema/warn-documentation.cpp index f0813682fc..b31e480db8 100644 --- a/test/Sema/warn-documentation.cpp +++ b/test/Sema/warn-documentation.cpp @@ -1,4 +1,4 @@ -// RUN: %clang_cc1 -fsyntax-only -Wdocumentation -Wdocumentation-pedantic -verify %s +// RUN: %clang_cc1 -std=c++11 -fsyntax-only -Wdocumentation -Wdocumentation-pedantic -verify %s // expected-warning@+1 {{expected quoted string after equals sign}} /// <a href=> @@ -389,64 +389,73 @@ class test_attach28 { // expected-warning@+1 {{empty paragraph passed to '\brief' command}} /// \brief\brief Aaa +using test_attach29 = test_attach28<int>; + +// expected-warning@+1 {{empty paragraph passed to '\brief' command}} +/// \brief\brief Aaa /// \tparam T Aaa template<typename T, typename U> -class test_attach29 { }; +class test_attach30 { }; // expected-warning@+1 {{empty paragraph passed to '\brief' command}} /// \brief\brief Aaa /// \tparam T Aaa template<typename T> -class test_attach29<T, int> { }; +class test_attach30<T, int> { }; // expected-warning@+1 {{empty paragraph passed to '\brief' command}} /// \brief\brief Aaa template<> -class test_attach29<int, int> { }; +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>; // expected-warning@+1 {{empty paragraph passed to '\brief' command}} /// \brief\brief Aaa /// \tparam T Aaa template<typename T, typename U, typename V> -class test_attach30 { }; +class test_attach32 { }; // expected-warning@+1 {{empty paragraph passed to '\brief' command}} /// \brief\brief Aaa /// \tparam T Aaa template<typename T, typename U> -class test_attach30<T, U, int> { }; +class test_attach32<T, U, int> { }; // expected-warning@+1 {{empty paragraph passed to '\brief' command}} /// \brief\brief Aaa /// \tparam T Aaa template<typename T> -class test_attach30<T, int, int> { }; +class test_attach32<T, int, int> { }; // 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<> -class test_attach30<int, int, int> { }; +class test_attach32<int, int, int> { }; // expected-warning@+1 {{empty paragraph passed to '\brief' command}} /// \brief\brief Aaa -class test_attach31 { +class test_attach33 { // expected-warning@+1 {{empty paragraph passed to '\brief' command}} /// \brief\brief Aaa /// \tparam T Aaa template<typename T, typename U> - void test_attach32(T aaa, U bbb); + void test_attach34(T aaa, U bbb); }; template<typename T> -class test_attach33 { +class test_attach35 { // 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> - void test_attach34(TT aaa, UU bbb); + void test_attach36(TT aaa, UU bbb); }; // expected-warning@+2 {{empty paragraph passed to '\brief' command}} @@ -454,29 +463,29 @@ class test_attach33 { /// \brief\brief Aaa /// \tparam T Aaa template<> template<> -void test_attach33<int>::test_attach34(int aaa, int bbb) {} +void test_attach35<int>::test_attach36(int aaa, int bbb) {} template<typename T> -class test_attach35 { +class test_attach37 { // 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 - void test_attach36(int aaa, int bbb); + void test_attach38(int aaa, int bbb); }; // expected-warning@+1 {{empty paragraph passed to '\brief' command}} /// \brief\brief Aaa /// \tparam T Aaa template<typename T> -void test_attach35<T>::test_attach36(int aaa, int bbb) {} +void test_attach37<T>::test_attach38(int aaa, int 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_attach35<int>::test_attach36(int aaa, int bbb) {} +void test_attach37<int>::test_attach38(int aaa, int bbb) {} // PR13411, reduced. We used to crash on this. |