<div dir="ltr">Folks who did selectany codegen: Is it better to make SelectAnyAttr a regular Attr instead of an InheritableAttr in include/clang/Basic/Attr.td instead of checking this in code?</div><div class="gmail_extra"><br><div class="gmail_quote">On Fri, Apr 17, 2015 at 2:50 AM, Nico Weber <span dir="ltr"><<a href="mailto:nicolasweber@gmx.de" target="_blank">nicolasweber@gmx.de</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">Author: nico<br>
Date: Fri Apr 17 04:50:28 2015<br>
New Revision: 235174<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=235174&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=235174&view=rev</a><br>
Log:<br>
Follow-up to r235046: selectany only causes a definition if it's not inherited.<br>
<br>
(For example needed to parse system header inputscope.h, which first has<br>
an extern "C" selectany IID and then later an extern "C" declaration of that<br>
same IID.)<br>
<br>
Modified:<br>
    cfe/trunk/lib/AST/Decl.cpp<br>
    cfe/trunk/test/SemaCXX/attr-selectany.cpp<br>
<br>
Modified: cfe/trunk/lib/AST/Decl.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Decl.cpp?rev=235174&r1=235173&r2=235174&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/AST/Decl.cpp?rev=235174&r1=235173&r2=235174&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/AST/Decl.cpp (original)<br>
+++ cfe/trunk/lib/AST/Decl.cpp Fri Apr 17 04:50:28 2015<br>
@@ -1915,7 +1915,8 @@ VarDecl::isThisDeclarationADefinition(AS<br>
   if (hasInit())<br>
     return Definition;<br>
<br>
-  if (hasAttr<AliasAttr>() || hasAttr<SelectAnyAttr>())<br>
+  if (hasAttr<AliasAttr>() ||<br>
+      (hasAttr<SelectAnyAttr>() && !getAttr<SelectAnyAttr>()->isInherited()))<br>
     return Definition;<br>
<br>
   // A variable template specialization (other than a static data member<br>
<br>
Modified: cfe/trunk/test/SemaCXX/attr-selectany.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/attr-selectany.cpp?rev=235174&r1=235173&r2=235174&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/SemaCXX/attr-selectany.cpp?rev=235174&r1=235173&r2=235174&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/SemaCXX/attr-selectany.cpp (original)<br>
+++ cfe/trunk/test/SemaCXX/attr-selectany.cpp Fri Apr 17 04:50:28 2015<br>
@@ -42,5 +42,9 @@ __declspec(selectany) auto x8 = Internal<br>
 struct SomeStruct {};<br>
 extern const __declspec(selectany) SomeStruct some_struct; // expected-warning {{default initialization of an object of const type 'const SomeStruct' without a user-provided default constructor is a Microsoft extension}}<br>
<br>
+// It should be possible to redeclare variables that were defined<br>
+// __declspec(selectany) previously.<br>
+extern const SomeStruct some_struct;<br>
+<br>
 // Without selectany, this should stay an error.<br>
 const SomeStruct some_struct2; // expected-error {{default initialization of an object of const type 'const SomeStruct' without a user-provided default constructor}}<br>
<br>
<br>
_______________________________________________<br>
cfe-commits mailing list<br>
<a href="mailto:cfe-commits@cs.uiuc.edu">cfe-commits@cs.uiuc.edu</a><br>
<a href="http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits" target="_blank">http://lists.cs.uiuc.edu/mailman/listinfo/cfe-commits</a><br>
</blockquote></div><br></div>