diff options
Diffstat (limited to 'clang-tools-extra/clang-tidy')
| -rw-r--r-- | clang-tools-extra/clang-tidy/readability/ContainerSizeEmptyCheck.cpp | 8 | 
1 files changed, 8 insertions, 0 deletions
diff --git a/clang-tools-extra/clang-tidy/readability/ContainerSizeEmptyCheck.cpp b/clang-tools-extra/clang-tidy/readability/ContainerSizeEmptyCheck.cpp index 60a153a8032..97f9eb714be 100644 --- a/clang-tools-extra/clang-tidy/readability/ContainerSizeEmptyCheck.cpp +++ b/clang-tools-extra/clang-tidy/readability/ContainerSizeEmptyCheck.cpp @@ -213,6 +213,14 @@ void ContainerSizeEmptyCheck::check(const MatchFinder::MatchResult &Result) {    }    const auto *Container = Result.Nodes.getNodeAs<NamedDecl>("container"); +  if (const auto *CTS = dyn_cast<ClassTemplateSpecializationDecl>(Container)) { +    // The definition of the empty() method is the same for all implicit +    // instantiations. In order to avoid duplicate or inconsistent warnings +    // (depending on how deduplication is done), we use the same class name +    // for all implicit instantiations of a template. +    if (CTS->getSpecializationKind() == TSK_ImplicitInstantiation) +      Container = CTS->getSpecializedTemplate(); +  }    const auto *Empty = Result.Nodes.getNodeAs<FunctionDecl>("empty");    diag(Empty->getLocation(), "method %0::empty() defined here",  | 

