summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorAaron Puchert <aaronpuchert@alice-dsl.net>2020-02-01 00:05:36 +0100
committerHans Wennborg <hans@chromium.org>2020-02-05 15:22:08 +0100
commitfd271fd64a284e9182c8afd8eb8084d8d43df587 (patch)
tree517b67f8f0b316b52efd6bbad309fe1c87325c48
parent4c96b369a074e93a0be536dd795d3f245ef6f18b (diff)
downloadbcm5719-llvm-fd271fd64a284e9182c8afd8eb8084d8d43df587.tar.gz
bcm5719-llvm-fd271fd64a284e9182c8afd8eb8084d8d43df587.zip
Don't warn about missing declarations for partial template specializations
Summary: Just like templates, they are excepted from the ODR rule. Reviewed By: aaron.ballman, rsmith Differential Revision: https://reviews.llvm.org/D68923 (cherry picked from commit 27684ae66d5545f211c0ac4393d0ba2bf3b5b47c)
-rw-r--r--clang/lib/Sema/SemaDecl.cpp1
-rw-r--r--clang/test/SemaCXX/warn-missing-variable-declarations.cpp2
2 files changed, 3 insertions, 0 deletions
diff --git a/clang/lib/Sema/SemaDecl.cpp b/clang/lib/Sema/SemaDecl.cpp
index 0bf49033653..64146f4a912 100644
--- a/clang/lib/Sema/SemaDecl.cpp
+++ b/clang/lib/Sema/SemaDecl.cpp
@@ -12526,6 +12526,7 @@ void Sema::CheckCompleteVariableDeclaration(VarDecl *var) {
var->getDeclContext()->getRedeclContext()->isFileContext() &&
var->isExternallyVisible() && var->hasLinkage() &&
!var->isInline() && !var->getDescribedVarTemplate() &&
+ !isa<VarTemplatePartialSpecializationDecl>(var) &&
!isTemplateInstantiation(var->getTemplateSpecializationKind()) &&
!getDiagnostics().isIgnored(diag::warn_missing_variable_declarations,
var->getLocation())) {
diff --git a/clang/test/SemaCXX/warn-missing-variable-declarations.cpp b/clang/test/SemaCXX/warn-missing-variable-declarations.cpp
index e2480fd663b..b50eeed30e7 100644
--- a/clang/test/SemaCXX/warn-missing-variable-declarations.cpp
+++ b/clang/test/SemaCXX/warn-missing-variable-declarations.cpp
@@ -70,6 +70,8 @@ template<typename> int var_template = 0;
template<typename> constexpr int const_var_template = 0;
template<typename> static int static_var_template = 0;
+template<typename T> int var_template<T*>;
+
template int var_template<int[1]>;
int use_var_template() { return var_template<int[2]>; }
template int var_template<int[3]>;
OpenPOWER on IntegriCloud