<html><head><meta http-equiv="Content-Type" content="text/html charset=us-ascii"></head><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; "><div>What <i>is</i> the unexpected behavior? Or what will it <i>not</i> do that I would expect it to do? (I forget what __private_extern__ is actually for.)</div><br><div><div>On Aug 15, 2012, at 11:42 , Fariborz Jahanian <<a href="mailto:fjahanian@apple.com">fjahanian@apple.com</a>> wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite">Author: fjahanian<br>Date: Wed Aug 15 13:42:26 2012<br>New Revision: 161972<br><br>URL: <a href="http://llvm.org/viewvc/llvm-project?rev=161972&view=rev">http://llvm.org/viewvc/llvm-project?rev=161972&view=rev</a><br>Log:<br>Patch to warn about __private_extern__ on tentative definitions<br>as it does something unexpected (but gcc compatible).<br>Suggest use of __attribute__((visibility("hidden")))<br>on declaration instead. // <a href="rdar://7703982">rdar://7703982</a><br><br>Modified:<br>    cfe/trunk/include/clang/Basic/DiagnosticGroups.td<br>    cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td<br>    cfe/trunk/lib/Sema/SemaDecl.cpp<br>    cfe/trunk/test/Sema/tentative-decls.c<br><br>Modified: cfe/trunk/include/clang/Basic/DiagnosticGroups.td<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticGroups.td?rev=161972&r1=161971&r2=161972&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticGroups.td?rev=161972&r1=161971&r2=161972&view=diff</a><br>==============================================================================<br>--- cfe/trunk/include/clang/Basic/DiagnosticGroups.td (original)<br>+++ cfe/trunk/include/clang/Basic/DiagnosticGroups.td Wed Aug 15 13:42:26 2012<br>@@ -155,6 +155,7 @@<br> def ObjCReceiver : DiagGroup<"receiver-expr">;<br> def OverlengthStrings : DiagGroup<"overlength-strings">;<br> def OverloadedVirtual : DiagGroup<"overloaded-virtual">;<br>+def PrivateExtern : DiagGroup<"private-extern">;<br> def ObjCPropertyImpl : DiagGroup<"objc-property-implementation">;<br> def ObjCPropertyNoAttribute : DiagGroup<"objc-property-no-attribute">;<br> def ObjCMissingSuperCalls : DiagGroup<"objc-missing-super-calls">;<br>@@ -371,7 +372,8 @@<br>     Unused,<br>     VolatileRegisterVar,<br>     ObjCMissingSuperCalls,<br>-    OverloadedVirtual<br>+    OverloadedVirtual,<br>+    PrivateExtern<br>  ]>;<br><br> // Thread Safety warnings <br><br>Modified: cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=161972&r1=161971&r2=161972&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td?rev=161972&r1=161971&r2=161972&view=diff</a><br>==============================================================================<br>--- cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td (original)<br>+++ cfe/trunk/include/clang/Basic/DiagnosticSemaKinds.td Wed Aug 15 13:42:26 2012<br>@@ -1489,6 +1489,11 @@<br>   "%0 is not literal because it has a user-provided destructor">;<br> def note_non_literal_nontrivial_dtor : Note<<br>   "%0 is not literal because it has a non-trivial destructor">;<br>+def warn_private_extern : Warning<<br>+  "Use of __private_extern__ on tentative definition has unexpected"<br>+  " behaviour - use __attribute__((visibility(\"hidden\"))) on extern"<br>+  " declaration or definition instead">,<br>+  InGroup<PrivateExtern>, DefaultIgnore;<br><br> // C++11 char16_t/char32_t<br> def warn_cxx98_compat_unicode_type : Warning<<br><br>Modified: cfe/trunk/lib/Sema/SemaDecl.cpp<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=161972&r1=161971&r2=161972&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/Sema/SemaDecl.cpp?rev=161972&r1=161971&r2=161972&view=diff</a><br>==============================================================================<br>--- cfe/trunk/lib/Sema/SemaDecl.cpp (original)<br>+++ cfe/trunk/lib/Sema/SemaDecl.cpp Wed Aug 15 13:42:26 2012<br>@@ -6754,6 +6754,10 @@<br>                                  diag::err_abstract_type_in_decl,<br>                                  AbstractVariableType))<br>         Var->setInvalidDecl();<br>+      if (!Type->isDependentType() && !Var->isInvalidDecl() &&<br>+          Var->getStorageClass() == SC_PrivateExtern)<br>+        Diag(Var->getLocation(), diag::warn_private_extern);<br>+        <br>       return;<br><br>     case VarDecl::TentativeDefinition:<br><br>Modified: cfe/trunk/test/Sema/tentative-decls.c<br>URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/tentative-decls.c?rev=161972&r1=161971&r2=161972&view=diff">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/Sema/tentative-decls.c?rev=161972&r1=161971&r2=161972&view=diff</a><br>==============================================================================<br>--- cfe/trunk/test/Sema/tentative-decls.c (original)<br>+++ cfe/trunk/test/Sema/tentative-decls.c Wed Aug 15 13:42:26 2012<br>@@ -1,4 +1,4 @@<br>-// RUN: %clang_cc1 %s -fsyntax-only -verify<br>+// RUN: %clang_cc1 %s -fsyntax-only -Wprivate-extern -verify<br><br> // PR3310<br> struct a x1; // expected-note 2{{forward declaration of 'struct a'}}<br>@@ -32,7 +32,8 @@<br> static int i3 = 5;<br> extern int i3;<br><br>-__private_extern__ int pExtern;<br>+// <a href="rdar://7703982">rdar://7703982</a><br>+__private_extern__ int pExtern; // expected-warning {{Use of __private_extern__ on tentative definition has unexpected behaviour}}<br> int pExtern = 0;<br><br> int i4;<br><br><br>_______________________________________________<br>cfe-commits mailing list<br><a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits<br></blockquote></div><br></body></html>