https://gcc.gnu.org/bugzilla/show_bug.cgi?id=77748
--- Comment #5 from Bernd Edlinger <bernd.edlinger at hotmail dot de> --- I think the problem is that tree libstdc++ functions are called, but the basic_string structure has been c-reduced. Especially _Alloc_hider, but when that is removed the test case does no longer reproduce the original problem.... But at least tow externals can be removed easily. Does this work? --- pr77550.C.orig 2016-09-27 10:05:17.812179103 +0200 +++ pr77550.C 2016-09-27 10:13:50.407075199 +0200 @@ -231,9 +231,8 @@ } _M_dataplus; size_type _M_string_length; enum { _S_local_capacity = 15 } _M_local_buf[_S_local_capacity]; - pointer _M_local_data(); - void _M_set_length(size_type); - basic_string() : _M_dataplus(_M_local_data()) { _M_set_length(0); } + pointer _M_local_data() { return 0; } + basic_string() : _M_dataplus(_M_local_data()) {} basic_string(const basic_string &) : _M_dataplus(0) {} size_type size() { return _M_string_length; } char *data() const {}