diff options
| author | David Majnemer <david.majnemer@gmail.com> | 2016-02-07 22:42:05 +0000 |
|---|---|---|
| committer | David Majnemer <david.majnemer@gmail.com> | 2016-02-07 22:42:05 +0000 |
| commit | bd173badb4743aac228027e5331bdbace5c9e286 (patch) | |
| tree | 3f8b5c249c58e298c9147d4b408ecb171e72dde0 | |
| parent | a8d76d8741ac943fd6dc0eaa07c852520d6fd24a (diff) | |
| download | bcm5719-llvm-bd173badb4743aac228027e5331bdbace5c9e286.tar.gz bcm5719-llvm-bd173badb4743aac228027e5331bdbace5c9e286.zip | |
[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
| -rw-r--r-- | clang/lib/CodeGen/MicrosoftCXXABI.cpp | 4 | ||||
| -rw-r--r-- | clang/test/CodeGenCXX/microsoft-abi-vftables.cpp | 2 |
2 files changed, 5 insertions, 1 deletions
diff --git a/clang/lib/CodeGen/MicrosoftCXXABI.cpp b/clang/lib/CodeGen/MicrosoftCXXABI.cpp index 71fc207e595..4cd4f8533b7 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 340675b188d..f32bff09a8a 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; |

