[clang-tidy] bug fix: Don't warn on partial template specialization in `misc-definitions-in-headers` check.
Reviewers: alexfh Subscribers: cfe-commits Differential Revision: http://reviews.llvm.org/D16578 llvm-svn: 259643
This commit is contained in:
parent
5f496fb941
commit
29634fe676
|
@ -91,9 +91,12 @@ void DefinitionsInHeadersCheck::check(const MatchFinder::MatchResult &Result) {
|
||||||
if (const auto *MD = dyn_cast<CXXMethodDecl>(FD)) {
|
if (const auto *MD = dyn_cast<CXXMethodDecl>(FD)) {
|
||||||
const auto *DC = MD->getDeclContext();
|
const auto *DC = MD->getDeclContext();
|
||||||
while (DC->isRecord()) {
|
while (DC->isRecord()) {
|
||||||
if (const auto *RD = dyn_cast<CXXRecordDecl>(DC))
|
if (const auto *RD = dyn_cast<CXXRecordDecl>(DC)) {
|
||||||
|
if (isa<ClassTemplatePartialSpecializationDecl>(RD))
|
||||||
|
return;
|
||||||
if (RD->getDescribedClassTemplate())
|
if (RD->getDescribedClassTemplate())
|
||||||
return;
|
return;
|
||||||
|
}
|
||||||
DC = DC->getParent();
|
DC = DC->getParent();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -133,3 +133,28 @@ const char* const g = "foo"; // OK: internal linkage variable definition.
|
||||||
static int h = 1; // OK: internal linkage variable definition.
|
static int h = 1; // OK: internal linkage variable definition.
|
||||||
const int i = 1; // OK: internal linkage variable definition.
|
const int i = 1; // OK: internal linkage variable definition.
|
||||||
extern int j; // OK: internal linkage variable definition.
|
extern int j; // OK: internal linkage variable definition.
|
||||||
|
|
||||||
|
template <typename T, typename U>
|
||||||
|
struct CD {
|
||||||
|
int f();
|
||||||
|
};
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
struct CD<T, int> {
|
||||||
|
int f();
|
||||||
|
};
|
||||||
|
|
||||||
|
template <>
|
||||||
|
struct CD<int, int> {
|
||||||
|
int f();
|
||||||
|
};
|
||||||
|
|
||||||
|
int CD<int, int>::f() {
|
||||||
|
// CHECK-MESSAGES: :[[@LINE-1]]:19: warning: function 'f' defined in a header file;
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
template <typename T>
|
||||||
|
int CD<T, int>::f() { // OK: partial template specialization.
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
Loading…
Reference in New Issue