Author: rsmith Date: Mon Jan 8 13:46:42 2018 New Revision: 322030 URL: http://llvm.org/viewvc/llvm-project?rev=322030&view=rev Log: PR35862: Suppress -Wmissing-variable-declarations warning on inline variables, variable templates, and instantiations thereof.
Modified: cfe/trunk/lib/Sema/SemaDecl.cpp cfe/trunk/test/SemaCXX/warn-missing-variable-declarations.cpp Modified: cfe/trunk/lib/Sema/SemaDecl.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=322030&r1=322029&r2=322030&view=diff ============================================================================== --- cfe/trunk/lib/Sema/SemaDecl.cpp (original) +++ cfe/trunk/lib/Sema/SemaDecl.cpp Mon Jan 8 13:46:42 2018 @@ -11348,6 +11348,8 @@ void Sema::CheckCompleteVariableDeclarat if (var->isThisDeclarationADefinition() && var->getDeclContext()->getRedeclContext()->isFileContext() && var->isExternallyVisible() && var->hasLinkage() && + !var->isInline() && !var->getDescribedVarTemplate() && + !isTemplateInstantiation(var->getTemplateSpecializationKind()) && !getDiagnostics().isIgnored(diag::warn_missing_variable_declarations, var->getLocation())) { // Find a previous declaration that's not a definition. Modified: cfe/trunk/test/SemaCXX/warn-missing-variable-declarations.cpp URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/warn-missing-variable-declarations.cpp?rev=322030&r1=322029&r2=322030&view=diff ============================================================================== --- cfe/trunk/test/SemaCXX/warn-missing-variable-declarations.cpp (original) +++ cfe/trunk/test/SemaCXX/warn-missing-variable-declarations.cpp Mon Jan 8 13:46:42 2018 @@ -1,4 +1,4 @@ -// RUN: %clang -Wmissing-variable-declarations -fsyntax-only -Xclang -verify %s +// RUN: %clang -Wmissing-variable-declarations -fsyntax-only -Xclang -verify -std=c++17 %s // Variable declarations that should trigger a warning. int vbad1; // expected-warning{{no previous extern declaration for non-static variable 'vbad1'}} @@ -52,3 +52,24 @@ class C { namespace { int vgood4; } + +inline int inline_var = 0; +const int const_var = 0; +constexpr int constexpr_var = 0; +inline constexpr int inline_constexpr_var = 0; +extern const int extern_const_var = 0; // expected-warning {{no previous extern declaration}} +extern constexpr int extern_constexpr_var = 0; // expected-warning {{no previous extern declaration}} + +template<typename> int var_template = 0; +template<typename> constexpr int const_var_template = 0; +template<typename> static int static_var_template = 0; + +template int var_template<int[1]>; +int use_var_template() { return var_template<int[2]>; } +template int var_template<int[3]>; +extern template int var_template<int[4]>; +template<> int var_template<int[5]>; // expected-warning {{no previous extern declaration}} + +// FIXME: We give this specialization internal linkage rather than inheriting +// the linkage from the template! We should not warn here. +template<> int static_var_template<int[5]>; // expected-warning {{no previous extern declaration}} _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits