<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Tue, May 27, 2014 at 4:51 PM, Richard Smith <span dir="ltr"><<a href="mailto:richard@metafoo.co.uk" target="_blank">richard@metafoo.co.uk</a>></span> wrote:<br>
<blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">Looks basically fine. Just a few comments.<br>
<br>
================<br>
Comment at: lib/CodeGen/CodeGenModule.cpp:1395<br>
@@ +1394,3 @@<br>
+      // Don't dllexport/import destructor thunks.<br>
+      F->setDLLStorageClass(llvm::GlobalValue::DefaultStorageClass);<br>
+    }<br>
----------------<br>
This would make more sense to me in `SetFunctionAttributes`, where (presumably) the DLL storage class is set.<br>
<br>
================<br>
Comment at: lib/Sema/SemaDeclCXX.cpp:4394<br>
@@ +4393,3 @@<br>
+  // template specialization bases.<br>
+  for (Decl *D : Class->decls()) {<br>
+    if (VarDecl *VD = dyn_cast<VarDecl>(D)) {<br>
----------------<br>
What about member classes? Are they implicitly re-exported too?<br>
<br>
================<br>
Comment at: lib/Sema/SemaDeclCXX.cpp:4404<br>
@@ +4403,3 @@<br>
+<br>
+      if (ClassExported && !MD->isDefaulted() && !MD->isDeleted()) {<br>
+        // Instantiate non-default methods.<br>
----------------<br>
`ClassExported && MD->isUserProvided()` maybe<br>
<br>
================<br>
Comment at: lib/Sema/SemaDeclCXX.cpp:4407-4408<br>
@@ +4406,4 @@<br>
+        S.MarkFunctionReferenced(Class->getLocation(), MD);<br>
+      } else if (ClassExported && !MD->isDeleted() &&<br>
+                 (!MD->isTrivial() || MD->isCopyAssignmentOperator())) {<br>
+        // Also instantiate non-trivial default methods and the copy assignment<br>
----------------<br>
Weird! You get an exported trivial copy assignment but not an exported trivial copy constructor? I guess we'll need to update this once we find out what they do with implicit move operations?<br></blockquote><div><br>
</div><div>Given a struct 'A', they export the following as well:</div><div>public: struct A & __thiscall A::operator=(struct A &&)<br></div><div> </div><blockquote class="gmail_quote" style="margin:0px 0px 0px 0.8ex;border-left-width:1px;border-left-color:rgb(204,204,204);border-left-style:solid;padding-left:1ex">

<br>
================<br>
Comment at: lib/Sema/SemaDeclCXX.cpp:4415<br>
@@ +4414,3 @@<br>
+        S.ResolveExceptionSpec(Class->getLocation(), FPT);<br>
+        S.ActOnFinishInlineMethodDef(MD);<br>
+      }<br>
----------------<br>
Why do we need this here but not in the non-defaulted case?<br>
<br>
<a href="http://reviews.llvm.org/D3877" target="_blank">http://reviews.llvm.org/D3877</a><br>
<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></div>