svn commit: r242080 - in head/contrib/llvm/tools/clang: include/clang/Basic lib/Sema

Roman Divacky rdivacky at freebsd.org
Thu Oct 25 12:18:20 UTC 2012


Why? I can understand cherry picking revisions that fix bugs FreeBSD
users hit but why additional features? 

Why cant this wait for next proper llvm/clang import?

On Thu, Oct 25, 2012 at 10:13:58AM +0000, Ed Schouten wrote:
> 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;
>  


More information about the svn-src-head mailing list