Wednesday, June 12, 2019

Re: llvm8: productivity/devtodo build failure

Stuart Henderson:

> > ld: error: undefined symbol: std::__1::basic_ostream<char, std::__1::char_traits<char> >::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >& (*)(std::__1::basic_ostream<char, std::__1::char_traits<char> >&))
> > >>> referenced by TodoDB.cc
> > >>> TodoDB.o:(TodoDB::StreamColour::veryhigh(std::__1::basic_ostream<char, std::__1::char_traits<char> >&))
>
> I'll update i386 after my current build is done and take a look there
> (got about a day to go) but if you have time could you try reordering
> the #includes in util/Strings.h please? Perhaps move "#include <string>"
> up ..

??? That doesn't have any bearing on the problem at hand.


ld complains that this is an undefined symbol:

std::__1::basic_ostream<char, std::__1::char_traits<char> >::operator<<(std::__1::basic_ostream<char, std::__1::char_traits<char> >& (*)(std::__1::basic_ostream<char, std::__1::char_traits<char> >&))

Which is a bit confusing, because it appears in libc++.so.3.0.
Anyway, in more human-readable form that's ...

basic_ostream::operator<<(basic_ostream& (*)(basic_ostream&))

... which brings us to this part of the libc++ diff:

// 27.7.2.6 Formatted output:
- inline _LIBCPP_EXTERN_TEMPLATE_INLINE_VISIBILITY
+ inline _LIBCPP_HIDE_FROM_ABI_AFTER_V1
basic_ostream& operator<<(basic_ostream& (*__pf)(basic_ostream&))
{ return __pf(*this); }

c++ -E confirms that this now expands to an additional
__visibility__("hidden").

So...
(1) Is this change intentional?
(2) If so, what's required to fix the code?

--
Christian "naddy" Weisgerber naddy@mips.inka.de

No comments:

Post a Comment