forked from OSchip/llvm-project
[dllexport] Instantiate default ctor default args
Fixes https://bugs.llvm.org/show_bug.cgi?id=51414. Differential Revision: https://reviews.llvm.org/D108021
This commit is contained in:
parent
a58c2e4af0
commit
e42ce422a9
clang
|
@ -6005,6 +6005,15 @@ static void ReferenceDllExportedMembers(Sema &S, CXXRecordDecl *Class) {
|
|||
if (TSK == TSK_ImplicitInstantiation && !ClassAttr->isInherited())
|
||||
continue;
|
||||
|
||||
// If this is an MS ABI dllexport default constructor, instantiate any
|
||||
// default arguments.
|
||||
if (S.Context.getTargetInfo().getCXXABI().isMicrosoft()) {
|
||||
auto *CD = dyn_cast<CXXConstructorDecl>(MD);
|
||||
if (CD && CD->isDefaultConstructor() && TSK == TSK_Undeclared) {
|
||||
S.InstantiateDefaultCtorDefaultArgs(CD);
|
||||
}
|
||||
}
|
||||
|
||||
S.MarkFunctionReferenced(Class->getLocation(), MD);
|
||||
|
||||
// The function will be passed to the consumer when its definition is
|
||||
|
|
|
@ -0,0 +1,20 @@
|
|||
// RUN: %clang_cc1 -triple i686-windows-msvc -emit-llvm -std=c++14 \
|
||||
// RUN: -fno-threadsafe-statics -fms-extensions -O1 -mconstructor-aliases \
|
||||
// RUN: -disable-llvm-passes -o - %s -w -fms-compatibility-version=19.00 | \
|
||||
// RUN: FileCheck %s
|
||||
|
||||
struct HasDtor {
|
||||
~HasDtor();
|
||||
int o;
|
||||
};
|
||||
struct HasImplicitDtor1 {
|
||||
HasDtor o;
|
||||
};
|
||||
struct __declspec(dllexport) CtorClosureOuter {
|
||||
struct __declspec(dllexport) CtorClosureInner {
|
||||
CtorClosureInner(const HasImplicitDtor1 &v = {}) {}
|
||||
};
|
||||
};
|
||||
|
||||
// CHECK-LABEL: $"??1HasImplicitDtor1@@QAE@XZ" = comdat any
|
||||
// CHECK-LABEL: define weak_odr dso_local dllexport x86_thiscallcc void @"??_FCtorClosureInner@CtorClosureOuter@@QAEXXZ"({{.*}}) {{#[0-9]+}} comdat
|
Loading…
Reference in New Issue