PR22763: if a defaulted (non-user-provided) special member function is
authorRichard Smith <richard-llvm@metafoo.co.uk>
Thu, 16 Nov 2017 23:54:56 +0000 (23:54 +0000)
committerRichard Smith <richard-llvm@metafoo.co.uk>
Thu, 16 Nov 2017 23:54:56 +0000 (23:54 +0000)
commite2467b7aed5d90db90108e8486cfc5e6dbae2b41
tree7917e383903f16ba5990a0b27ed29861218f269d
parent39bcd4ed3e5e824f363303077c98f54be61c3add
PR22763: if a defaulted (non-user-provided) special member function is
explicitly instantiated, still emit it with each use.

We don't emit a definition of the member with an explicit instantiation
definition (and indeed it appears that we're not allowed to, since an explicit
instantiation definition does not constitute an odr-use and only odr-use
permits definition for defaulted special members). So we still need to emit a
weak definition with each use.

This also makes defaulted-in-class declarations behave more like
implicitly-declared special members, which matches their design intent.
And it matches the way this problem was solved in GCC.

llvm-svn: 318474
clang/include/clang/AST/DeclCXX.h
clang/lib/AST/ASTContext.cpp
clang/test/CodeGenCXX/cxx11-special-members.cpp
clang/test/CodeGenCXX/explicit-instantiation.cpp