rupprecht added a comment.

I threw this at the "test everything" test (some millions of targets) and it 
found only one breakage, so this is very very close. Without further ado, here 
is this silly looking thing:

File `blah.h`:

  #include <functional>
  #include <memory>
  
  template <typename T>
  struct Base {
    virtual ~Base() = default;
  };
  
  class Impl : public Base<int> {};
  
  struct ImplHolder {
    std::unique_ptr<Base<int>> impl = std::make_unique<Impl>();
  };
  
  struct GetImplCreators {
    std::function<ImplHolder()> impl_creator = []() { return ImplHolder{}; };
  };
  
  void UseImpl(GetImplCreators impl_creators = GetImplCreators{});

And `blah.cc`:

  #include "blah.h"
  
  void UseImpl(GetImplCreators impl_creators) {}

And lastly, `blah_main.cc`:

  #include "blah.h"
  
  void Func1() { UseImpl(); }
  // Note: it also fails when we explicitly specify the default arg, in case 
that is interesting.
  // void Func2() { UseImpl(GetImplCreators()); }
  
  int main(int argc, char* argv[]) { return 0; }

And here's the LLD output:

  ld: error: undefined hidden symbol: 
std::__u::__unique_if<Impl>::__unique_single std::__u::make_unique<Impl>()
  >>> referenced by blah_main.cc
  >>>               blah_main.o:(ImplHolder 
std::__u::__function::__policy_invoker<ImplHolder 
()>::__call_impl<std::__u::__function::__default_alloc_func<GetImplCreators::impl_creator::'lambda'(),
 ImplHolder ()>>(std::__u::__function::__policy_storage const*))
  
  ld: error: undefined hidden symbol: std::__u::unique_ptr<Impl, 
std::__u::default_delete<Impl>>::~unique_ptr()
  >>> referenced by blah_main.cc
  >>>               blah_main.o:(ImplHolder 
std::__u::__function::__policy_invoker<ImplHolder 
()>::__call_impl<std::__u::__function::__default_alloc_func<GetImplCreators::impl_creator::'lambda'(),
 ImplHolder ()>>(std::__u::__function::__policy_storage const*))

I'm out of time today so I don't have a repro script to offer, but I can dig 
into that when I get back next year if the source-only example is insufficient.


Repository:
  rG LLVM Github Monorepo

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D136554/new/

https://reviews.llvm.org/D136554

_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to