From: David Majnemer Date: Sun, 7 Feb 2016 22:42:05 +0000 (+0000) Subject: [MS ABI] Don't emit RTTI descriptors for dllimport vtables X-Git-Url: https://granicus.if.org/sourcecode?a=commitdiff_plain;h=8e361afc20450d8ad51448996e0c58957abb2820;p=clang [MS ABI] Don't emit RTTI descriptors for dllimport vtables A dllimport'd vtable always points one past the RTTI data, this means that the initializer will never end up referencing the data. Our emission is a harmless waste. git-svn-id: https://llvm.org/svn/llvm-project/cfe/trunk@260062 91177308-0d34-0410-b5e6-96231b3b80d8 --- diff --git a/lib/CodeGen/MicrosoftCXXABI.cpp b/lib/CodeGen/MicrosoftCXXABI.cpp index 71fc207e59..4cd4f8533b 100644 --- a/lib/CodeGen/MicrosoftCXXABI.cpp +++ b/lib/CodeGen/MicrosoftCXXABI.cpp @@ -1567,7 +1567,9 @@ void MicrosoftCXXABI::emitVTableDefinitions(CodeGenVTables &CGVT, if (VTable->hasInitializer()) continue; - llvm::Constant *RTTI = getContext().getLangOpts().RTTIData + llvm::Constant *RTTI = getContext().getLangOpts().RTTIData && + VTable->getDLLStorageClass() != + llvm::GlobalValue::DLLImportStorageClass ? getMSCompleteObjectLocator(RD, Info) : nullptr; diff --git a/test/CodeGenCXX/microsoft-abi-vftables.cpp b/test/CodeGenCXX/microsoft-abi-vftables.cpp index 340675b188..f32bff09a8 100644 --- a/test/CodeGenCXX/microsoft-abi-vftables.cpp +++ b/test/CodeGenCXX/microsoft-abi-vftables.cpp @@ -4,6 +4,8 @@ // RTTI-DAG: $"\01??_7S@@6B@" = comdat largest // RTTI-DAG: $"\01??_7V@@6B@" = comdat largest +// RTTI-NOT: @"\01??_R4U@@6B@" + struct S { virtual ~S(); } s;