Author: tstellar
Date: Wed May 30 21:15:13 2018
New Revision: 333623

URL: http://llvm.org/viewvc/llvm-project?rev=333623&view=rev
Log:
Merging r322030:

------------------------------------------------------------------------
r322030 | rsmith | 2018-01-08 13:46:42 -0800 (Mon, 08 Jan 2018) | 3 lines

PR35862: Suppress -Wmissing-variable-declarations warning on inline variables,
variable templates, and instantiations thereof.

------------------------------------------------------------------------

Modified:
    cfe/branches/release_60/lib/Sema/SemaDecl.cpp
    cfe/branches/release_60/test/SemaCXX/warn-missing-variable-declarations.cpp

Modified: cfe/branches/release_60/lib/Sema/SemaDecl.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/branches/release_60/lib/Sema/SemaDecl.cpp?rev=333623&r1=333622&r2=333623&view=diff
==============================================================================
--- cfe/branches/release_60/lib/Sema/SemaDecl.cpp (original)
+++ cfe/branches/release_60/lib/Sema/SemaDecl.cpp Wed May 30 21:15:13 2018
@@ -10947,6 +10947,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/branches/release_60/test/SemaCXX/warn-missing-variable-declarations.cpp
URL: 
http://llvm.org/viewvc/llvm-project/cfe/branches/release_60/test/SemaCXX/warn-missing-variable-declarations.cpp?rev=333623&r1=333622&r2=333623&view=diff
==============================================================================
--- cfe/branches/release_60/test/SemaCXX/warn-missing-variable-declarations.cpp 
(original)
+++ cfe/branches/release_60/test/SemaCXX/warn-missing-variable-declarations.cpp 
Wed May 30 21:15:13 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}}


_______________________________________________
llvm-branch-commits mailing list
llvm-branch-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/llvm-branch-commits

Reply via email to