<div dir="ltr"><div class="gmail_extra"><div class="gmail_quote">On Thu, Nov 6, 2014 at 11:26 PM, David Majnemer <span dir="ltr"><<a href="mailto:david.majnemer@gmail.com" target="_blank">david.majnemer@gmail.com</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">Author: majnemer<br>
Date: Fri Nov  7 01:26:38 2014<br>
New Revision: 221511<br>
<br>
URL: <a href="http://llvm.org/viewvc/llvm-project?rev=221511&view=rev" target="_blank">http://llvm.org/viewvc/llvm-project?rev=221511&view=rev</a><br>
Log:<br>
CodeGen, Itanium: Properly dllimport RTTI data<br>
<br>
We would blindly assume that RTTI data should have the same linkage as<br>
the vtable because we didn't think the RTTI data was external.  This<br>
oversight stemmed because we didn't take dllimport into account.<br>
<br>
This fixes PR21512.<br></blockquote><div><br></div><div>Sorry for the confusion, this actually fixes PR21509.</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>
Modified:<br>
    cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp<br>
    cfe/trunk/test/CodeGenCXX/dllimport-rtti.cpp<br>
<br>
Modified: cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp?rev=221511&r1=221510&r2=221511&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp?rev=221511&r1=221510&r2=221511&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp (original)<br>
+++ cfe/trunk/lib/CodeGen/ItaniumCXXABI.cpp Fri Nov  7 01:26:38 2014<br>
@@ -2190,6 +2190,11 @@ ItaniumRTTIBuilder::GetAddrOfExternalRTT<br>
                                   /*Constant=*/true,<br>
                                   llvm::GlobalValue::ExternalLinkage, nullptr,<br>
                                   Name);<br>
+    if (const RecordType *RecordTy = dyn_cast<RecordType>(Ty)) {<br>
+      const CXXRecordDecl *RD = cast<CXXRecordDecl>(RecordTy->getDecl());<br>
+      if (RD->hasAttr<DLLImportAttr>())<br>
+        GV->setDLLStorageClass(llvm::GlobalVariable::DLLImportStorageClass);<br>
+    }<br>
   }<br>
<br>
   return llvm::ConstantExpr::getBitCast(GV, CGM.Int8PtrTy);<br>
@@ -2312,7 +2317,11 @@ static bool ShouldUseExternalRTTIDescrip<br>
<br>
     // FIXME: this may need to be reconsidered if the key function<br>
     // changes.<br>
-    return CGM.getVTables().isVTableExternal(RD);<br>
+    if (CGM.getVTables().isVTableExternal(RD))<br>
+      return true;<br>
+<br>
+    if (RD->hasAttr<DLLImportAttr>())<br>
+      return true;<br>
   }<br>
<br>
   return false;<br>
<br>
Modified: cfe/trunk/test/CodeGenCXX/dllimport-rtti.cpp<br>
URL: <a href="http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/dllimport-rtti.cpp?rev=221511&r1=221510&r2=221511&view=diff" target="_blank">http://llvm.org/viewvc/llvm-project/cfe/trunk/test/CodeGenCXX/dllimport-rtti.cpp?rev=221511&r1=221510&r2=221511&view=diff</a><br>
==============================================================================<br>
--- cfe/trunk/test/CodeGenCXX/dllimport-rtti.cpp (original)<br>
+++ cfe/trunk/test/CodeGenCXX/dllimport-rtti.cpp Fri Nov  7 01:26:38 2014<br>
@@ -1,13 +1,17 @@<br>
-// RUN: %clang_cc1 -triple i686-windows-msvc -emit-llvm -std=c++1y -O1 -disable-llvm-optzns -o - %s | FileCheck %s<br>
+// RUN: %clang_cc1 -triple i686-windows-msvc -emit-llvm -std=c++1y -O1 -disable-llvm-optzns -o - %s | FileCheck %s --check-prefix=MSVC<br>
+// RUN: %clang_cc1 -triple i686-windows-gnu  -emit-llvm -std=c++1y -O1 -disable-llvm-optzns -o - %s | FileCheck %s --check-prefix=GNU<br>
<br>
 struct __declspec(dllimport) S {<br>
-  virtual void f();<br>
+  virtual void f() {}<br>
 } s;<br>
-// CHECK-DAG: @"\01??_7S@@6B@" = available_externally dllimport<br>
-// CHECK-DAG: @"\01??_R0?AUS@@@8" = linkonce_odr<br>
-// CHECK-DAG: @"\01??_R1A@?0A@EA@S@@8" = linkonce_odr<br>
-// CHECK-DAG: @"\01??_R2S@@8" = linkonce_odr<br>
-// CHECK-DAG: @"\01??_R3S@@8" = linkonce_odr<br>
+// MSVC-DAG: @"\01??_7S@@6B@" = available_externally dllimport<br>
+// MSVC-DAG: @"\01??_R0?AUS@@@8" = linkonce_odr<br>
+// MSVC-DAG: @"\01??_R1A@?0A@EA@S@@8" = linkonce_odr<br>
+// MSVC-DAG: @"\01??_R2S@@8" = linkonce_odr<br>
+// MSVC-DAG: @"\01??_R3S@@8" = linkonce_odr<br>
+<br>
+// GNU-DAG: @_ZTV1S = available_externally dllimport<br>
+// GNU-DAG: @_ZTI1S = external dllimport<br>
<br>
 struct U : S {<br>
 } u;<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>