I've simplified the testcase Padraig provided and attached it to
Notice that 'Base::Base ()' is not a constexpr ctor, because the integer
member is not initialized. That means 10.1.4/4.5 is unsatisfied. So
struct Base gets its 'has_constexpr' flag set via the Base::Base (int)
ctor. struct Derived is not so lucky, and 'has_constexpr' is unset.
Thus we end up with an unsatisfied strong reference to _ZTH11derived_obj
NEEDS_CONSTRUCTING && !HAS_CONSTEXPR_CTOR is insufficient to determine
whether there must be an init fn.
While the patch does indeed work, it may be too pessimal, making the
reference weak in more cases than necessary.
NEEDS_CONSTRUCTING && !HAS_CONSTEXPR_CTOR && !HAS_DEFAULT_CONSTRUCTOR
seems like it would be sufficient. and indeed that works in this case.