sal/qa/rtl/strings/test_oustring_stringliterals.cxx | 8 ++++++++ 1 file changed, 8 insertions(+)
New commits: commit 6c15598a3ff60b3d078fa9bf8b3b077c16343517 Author: Stephan Bergmann <sberg...@redhat.com> AuthorDate: Fri Aug 4 13:31:39 2023 +0200 Commit: Stephan Bergmann <sberg...@redhat.com> CommitDate: Fri Aug 4 16:18:38 2023 +0200 Avoid a Clang template instantiation bug with libstdc++ and C++20 See patch set 2 of <https://gerrit.libreoffice.org/c/core/+/155121/2> "Bump baseline to C++20" for how that would affect us here, > /opt/rh/gcc-toolset-12/root/usr/lib/gcc/x86_64-redhat-linux/12/../../../../include/c++/12/bits/basic_string.h:620: error: undefined reference to 'void std::__cxx11::basic_string<char16_t, std::char_traits<char16_t>, std::allocator<char16_t> >::_M_construct<char16_t const*>(char16_t const*, char16_t const*, std::forward_iterator_tag)' > clang-12: error: linker command failed with exit code 1 (use -v to see invocation) > make[1]: *** [/home/tdf/lode/jenkins/workspace/lo_gerrit/Config/linux_clang_dbgutil_64/solenv/gbuild/LinkTarget.mk:841: /home/tdf/lode/jenkins/workspace/lo_gerrit/Config/linux_clang_dbgutil_64/workdir/LinkTarget/CppunitTest/libtest_sal_rtl.so] Error 1 (<https://ci.libreoffice.org/job/gerrit_linux_clang_dbgutil/145874/>) Change-Id: Ibda1a5687a16e45aa0e77958f2bf547766cb0f48 Reviewed-on: https://gerrit.libreoffice.org/c/core/+/155343 Tested-by: Jenkins Reviewed-by: Stephan Bergmann <sberg...@redhat.com> diff --git a/sal/qa/rtl/strings/test_oustring_stringliterals.cxx b/sal/qa/rtl/strings/test_oustring_stringliterals.cxx index 2f4de194928d..6c653f118935 100644 --- a/sal/qa/rtl/strings/test_oustring_stringliterals.cxx +++ b/sal/qa/rtl/strings/test_oustring_stringliterals.cxx @@ -419,7 +419,15 @@ void test::oustring::StringLiterals::checkEmbeddedNul() { CPPUNIT_ASSERT(s.startsWith(a)); CPPUNIT_ASSERT(s.startsWith(p)); CPPUNIT_ASSERT(s.startsWith(u"foo\0hidden")); + // For Clang against libstdc++ with C++20 and greater, this would hit not-yet-fixed + // <https://github.com/llvm/llvm-project/issues/24502> "eagerly-instantiated entities whose + // templates are defined after the first point of instantiation don't get instantiated at all" + // (see the mailing list thread starting at + // <https://gcc.gnu.org/pipermail/libstdc++/2021-November/053548.html> "std::basic_string<_Tp> + // constructor point of instantiation woes?"): +#if !(defined __clang__ && defined __GLIBCXX__ && __cplusplus >= 202002L) CPPUNIT_ASSERT(!s.startsWith(u"foo\0hidden"s)); +#endif CPPUNIT_ASSERT(!s.startsWith(u"foo\0hidden"sv)); /*TODO:*/ CPPUNIT_ASSERT(!s.startsWith(rtlunittest::OUStringLiteral(a)));