From bd173badb4743aac228027e5331bdbace5c9e286 Mon Sep 17 00:00:00 2001 From: David Majnemer Date: Sun, 7 Feb 2016 22:42:05 +0000 Subject: [PATCH] [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. llvm-svn: 260062 --- clang/lib/CodeGen/MicrosoftCXXABI.cpp | 4 +++- clang/test/CodeGenCXX/microsoft-abi-vftables.cpp | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/clang/lib/CodeGen/MicrosoftCXXABI.cpp b/clang/lib/CodeGen/MicrosoftCXXABI.cpp index 71fc207..4cd4f85 100644 --- a/clang/lib/CodeGen/MicrosoftCXXABI.cpp +++ b/clang/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/clang/test/CodeGenCXX/microsoft-abi-vftables.cpp b/clang/test/CodeGenCXX/microsoft-abi-vftables.cpp index 340675b..f32bff0 100644 --- a/clang/test/CodeGenCXX/microsoft-abi-vftables.cpp +++ b/clang/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; -- 2.7.4