Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 25 Oct 2012 10:13:58 +0000 (UTC)
From:      Ed Schouten <ed@FreeBSD.org>
To:        src-committers@freebsd.org, svn-src-all@freebsd.org, svn-src-head@freebsd.org
Subject:   svn commit: r242080 - in head/contrib/llvm/tools/clang: include/clang/Basic lib/Sema
Message-ID:  <201210251013.q9PADwYO029047@svn.freebsd.org>

next in thread | raw e-mail | index | archive | help
Author: ed
Date: Thu Oct 25 10:13:58 2012
New Revision: 242080
URL: http://svn.freebsd.org/changeset/base/242080

Log:
  Pull in r166498 from upstream clang trunk:
  
  Add a new warning -Wmissing-variable-declarations, to warn about variables
  defined without a previous declaration.  This is similar to
  -Wmissing-prototypes, but for variables instead of functions.

Modified:
  head/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticSemaKinds.td
  head/contrib/llvm/tools/clang/lib/Sema/Sema.cpp
  head/contrib/llvm/tools/clang/lib/Sema/SemaDecl.cpp

Modified: head/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticSemaKinds.td
==============================================================================
--- head/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticSemaKinds.td	Thu Oct 25 09:39:14 2012	(r242079)
+++ head/contrib/llvm/tools/clang/include/clang/Basic/DiagnosticSemaKinds.td	Thu Oct 25 10:13:58 2012	(r242080)
@@ -3058,6 +3058,9 @@ def note_sentinel_here : Note<
 def warn_missing_prototype : Warning<
   "no previous prototype for function %0">,
   InGroup<DiagGroup<"missing-prototypes">>, DefaultIgnore;
+def warn_missing_variable_declarations : Warning<
+  "no previous extern declaration for non-static variable %0">,
+  InGroup<DiagGroup<"missing-variable-declarations">>, DefaultIgnore;
 def err_redefinition : Error<"redefinition of %0">;
 def err_definition_of_implicitly_declared_member : Error<
   "definition of implicitly declared %select{default constructor|copy "

Modified: head/contrib/llvm/tools/clang/lib/Sema/Sema.cpp
==============================================================================
--- head/contrib/llvm/tools/clang/lib/Sema/Sema.cpp	Thu Oct 25 09:39:14 2012	(r242079)
+++ head/contrib/llvm/tools/clang/lib/Sema/Sema.cpp	Thu Oct 25 10:13:58 2012	(r242080)
@@ -648,6 +648,8 @@ void Sema::ActOnEndOfTranslationUnit() {
                                    diag::err_tentative_def_incomplete_type))
       VD->setInvalidDecl();
 
+    CheckCompleteVariableDeclaration(VD);
+
     // Notify the consumer that we've completed a tentative definition.
     if (!VD->isInvalidDecl())
       Consumer.CompleteTentativeDefinition(VD);

Modified: head/contrib/llvm/tools/clang/lib/Sema/SemaDecl.cpp
==============================================================================
--- head/contrib/llvm/tools/clang/lib/Sema/SemaDecl.cpp	Thu Oct 25 09:39:14 2012	(r242079)
+++ head/contrib/llvm/tools/clang/lib/Sema/SemaDecl.cpp	Thu Oct 25 10:13:58 2012	(r242080)
@@ -6957,6 +6957,17 @@ void Sema::CheckCompleteVariableDeclarat
     }
   }
 
+  if (var->isThisDeclarationADefinition() &&
+      var->getLinkage() == ExternalLinkage) {
+    // Find a previous declaration that's not a definition.
+    VarDecl *prev = var->getPreviousDecl();
+    while (prev && prev->isThisDeclarationADefinition())
+      prev = prev->getPreviousDecl();
+
+    if (!prev)
+      Diag(var->getLocation(), diag::warn_missing_variable_declarations) << var;
+  }
+
   // All the following checks are C++ only.
   if (!getLangOpts().CPlusPlus) return;
 



Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?201210251013.q9PADwYO029047>