aganea added inline comments.
================ Comment at: clang/lib/Sema/SemaDeclCXX.cpp:11545 + for (CXXMethodDecl *M : WorkList) { + DefineImplicitSpecialMember(*this, M, M->getLocation()); + ActOnFinishInlineFunctionDef(M); ---------------- rnk wrote: > hans wrote: > > rnk wrote: > > > Do we need to do this until fixpoint? Suppose a dllexported implicit > > > special member triggers a template instantiation, and the template has a > > > dllexported defaulted special member, something like: > > > ``` > > > struct Bar { Bar(); }; > > > template <typename T> struct Foo { __declspec(dllexport) Foo() = default; > > > Bar obj; }; > > > struct Baz { > > > ... not sure how to trigger instantiation > > > }; > > > ``` > > I think that should work, and that's why the function is written to be > > re-entrant by having a local worklist. If it triggers a template > > instantiation, ActOnFinishCXXNonNestedClass should get called for the newly > > instantiated class. But I'm also not sure how to write a test case that > > would trigger it. > Right, I see. Nevermind then. This works on latest MSVC: ``` $ cat test.cc struct Bar { Bar(); }; template <typename T> struct Foo { __declspec(dllexport) Foo() = default; Bar b; }; template class Foo<int>; $ cl /c /Z7 test.cc <-- crashes if using clang-cl $ lib test.obj /def $ cat test2.cc struct Bar { Bar() { } }; template <typename T> struct Foo { __declspec(dllimport) Foo() = default; Bar b; }; int main() { Foo<int> f; return 0; } $ cl /c /Z7 test2.cc $ link test.lib test2.cc /DEBUG ``` CHANGES SINCE LAST ACTION https://reviews.llvm.org/D65511/new/ https://reviews.llvm.org/D65511 _______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits