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 <[email protected]> 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 > [email protected] > http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
_______________________________________________ cfe-commits mailing list [email protected] http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits
