[cfe-commits] r161972 - in /cfe/trunk: include/clang/Basic/DiagnosticGroups.td include/clang/Basic/DiagnosticSemaKinds.td lib/Sema/SemaDecl.cpp test/Sema/tentative-decls.c

Jordan Rose jordan_rose at apple.com
Wed Aug 15 11:49:59 PDT 2012


What is the unexpected behavior? Or what will it not do that I would expect it to do? (I forget what __private_extern__ is actually for.)

On Aug 15, 2012, at 11:42 , Fariborz Jahanian <fjahanian at apple.com> wrote:

> Author: fjahanian
> Date: Wed Aug 15 13:42:26 2012
> New Revision: 161972
> 
> URL: http://llvm.org/viewvc/llvm-project?rev=161972&view=rev
> Log:
> Patch to warn about __private_extern__ on tentative definitions
> as it does something unexpected (but gcc compatible).
> Suggest use of __attribute__((visibility("hidden")))
> on declaration instead. // rdar://7703982
> 
> Modified:
>    cfe/trunk/include/clang/Basic/DiagnosticGroups.td
>    cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
>    cfe/trunk/lib/Sema/SemaDecl.cpp
>    cfe/trunk/test/Sema/tentative-decls.c
> 
> Modified: cfe/trunk/include/clang/Basic/DiagnosticGroups.td
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticGroups.td?rev=161972&r1=161971&r2=161972&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Basic/DiagnosticGroups.td (original)
> +++ cfe/trunk/include/clang/Basic/DiagnosticGroups.td Wed Aug 15 13:42:26 2012
> @@ -155,6 +155,7 @@
> def ObjCReceiver : DiagGroup<"receiver-expr">;
> def OverlengthStrings : DiagGroup<"overlength-strings">;
> def OverloadedVirtual : DiagGroup<"overloaded-virtual">;
> +def PrivateExtern : DiagGroup<"private-extern">;
> def ObjCPropertyImpl : DiagGroup<"objc-property-implementation">;
> def ObjCPropertyNoAttribute : DiagGroup<"objc-property-no-attribute">;
> def ObjCMissingSuperCalls : DiagGroup<"objc-missing-super-calls">;
> @@ -371,7 +372,8 @@
>     Unused,
>     VolatileRegisterVar,
>     ObjCMissingSuperCalls,
> -    OverloadedVirtual
> +    OverloadedVirtual,
> +    PrivateExtern
>  ]>;
> 
> // Thread Safety warnings 
> 
> Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=161972&r1=161971&r2=161972&view=diff
> ==============================================================================
> --- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original)
> +++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Wed Aug 15 13:42:26 2012
> @@ -1489,6 +1489,11 @@
>   "%0 is not literal because it has a user-provided destructor">;
> def note_non_literal_nontrivial_dtor : Note<
>   "%0 is not literal because it has a non-trivial destructor">;
> +def warn_private_extern : Warning<
> +  "Use of __private_extern__ on tentative definition has unexpected"
> +  " behaviour - use __attribute__((visibility(\"hidden\"))) on extern"
> +  " declaration or definition instead">,
> +  InGroup<PrivateExtern>, DefaultIgnore;
> 
> // C++11 char16_t/char32_t
> def warn_cxx98_compat_unicode_type : Warning<
> 
> Modified: cfe/trunk/lib/Sema/SemaDecl.cpp
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=161972&r1=161971&r2=161972&view=diff
> ==============================================================================
> --- cfe/trunk/lib/Sema/SemaDecl.cpp (original)
> +++ cfe/trunk/lib/Sema/SemaDecl.cpp Wed Aug 15 13:42:26 2012
> @@ -6754,6 +6754,10 @@
>                                  diag::err_abstract_type_in_decl,
>                                  AbstractVariableType))
>         Var->setInvalidDecl();
> +      if (!Type->isDependentType() && !Var->isInvalidDecl() &&
> +          Var->getStorageClass() == SC_PrivateExtern)
> +        Diag(Var->getLocation(), diag::warn_private_extern);
> +        
>       return;
> 
>     case VarDecl::TentativeDefinition:
> 
> Modified: cfe/trunk/test/Sema/tentative-decls.c
> URL: http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/tentative-decls.c?rev=161972&r1=161971&r2=161972&view=diff
> ==============================================================================
> --- cfe/trunk/test/Sema/tentative-decls.c (original)
> +++ cfe/trunk/test/Sema/tentative-decls.c Wed Aug 15 13:42:26 2012
> @@ -1,4 +1,4 @@
> -// RUN: %clang_cc1 %s -fsyntax-only -verify
> +// RUN: %clang_cc1 %s -fsyntax-only -Wprivate-extern -verify
> 
> // PR3310
> struct a x1; // expected-note 2{{forward declaration of 'struct a'}}
> @@ -32,7 +32,8 @@
> static int i3 = 5;
> extern int i3;
> 
> -__private_extern__ int pExtern;
> +// rdar://7703982
> +__private_extern__ int pExtern; // expected-warning {{Use of __private_extern__ on tentative definition has unexpected behaviour}}
> int pExtern = 0;
> 
> int i4;
> 
> 
> _______________________________________________
> cfe-commits mailing list
> cfe-commits at cs.uiuc.edu
> http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits

-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20120815/406bbeca/attachment.html>


More information about the cfe-commits mailing list