[Libreoffice-commits] core.git: sal/qa

Stephan Bergmann (via logerrit) logerrit at kemper.freedesktop.org
Wed Aug 18 21:01:59 UTC 2021


 sal/qa/rtl/strings/test_ostring_concat.cxx  |   18 ++++++++++++++----
 sal/qa/rtl/strings/test_oustring_concat.cxx |    9 +++++++--
 2 files changed, 21 insertions(+), 6 deletions(-)

New commits:
commit 8c717ea3854130067919658e9ec7433e0b5e2ba0
Author:     Stephan Bergmann <sbergman at redhat.com>
AuthorDate: Wed Aug 18 12:35:21 2021 +0200
Commit:     Stephan Bergmann <sbergman at redhat.com>
CommitDate: Wed Aug 18 23:01:22 2021 +0200

    GCC bug 96878 is fixed in upcoming GCC 12
    
    However, restricting the workaround to GCC <= 11 then revealed that some old
    versions of Clang apparently had a similar issue, causing "error: use of class
    template 'OStringLiteral' requires template arguments; argument deduction not
    allowed here", and thus also need the workaround.  I saw the non-workaround code
    fail with a build of Clang 6.0.0 and succeed with a build of Clang 7.0.0.
    
    Change-Id: I6e4cf6c8c3a11618a578401574e5679e6b65d7f4
    Reviewed-on: https://gerrit.libreoffice.org/c/core/+/120657
    Tested-by: Jenkins
    Reviewed-by: Stephan Bergmann <sbergman at redhat.com>

diff --git a/sal/qa/rtl/strings/test_ostring_concat.cxx b/sal/qa/rtl/strings/test_ostring_concat.cxx
index f797a15660b5..af1f31dcf162 100644
--- a/sal/qa/rtl/strings/test_ostring_concat.cxx
+++ b/sal/qa/rtl/strings/test_ostring_concat.cxx
@@ -68,15 +68,25 @@ void test::ostring::StringConcat::checkConcat()
     CPPUNIT_ASSERT_EQUAL( OString( "foobar" ), OString( OStringBuffer( "foo" ) + "bar" ));
     CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OStringBuffer, const char[ 4 ] > )), typeid( OStringBuffer( "foo" ) + "bar" ));
     CPPUNIT_ASSERT_EQUAL( OString( "foobar" ), OString( OStringLiteral( "foo" ) + "bar" ));
+#if (defined __GNUC__ && __GNUC__ <= 11 && !defined __clang__) || (defined __clang__ && __clang_major__ <= 6)
     CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OStringLiteral<4>, const char[ 4 ] > )), typeid( OStringLiteral<4>( "foo" ) + "bar" ));
-        //TODO: the explicit OStringLiteral<4> template argument in the unevaluated typeid context
+        // the explicit OStringLiteral<4> template argument in the unevaluated typeid context
         // is needed by some GCC versions, see <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96878>
-        // "Failed class template argument deduction in unevaluated, parenthesized context"
+        // "Failed class template argument deduction in unevaluated, parenthesized context", and by
+        // some old Clang versions
+#else
+    CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OStringLiteral<4>, const char[ 4 ] > )), typeid( OStringLiteral( "foo" ) + "bar" ));
+#endif
     CPPUNIT_ASSERT_EQUAL( OString( "foobar" ), OString( OStringLiteral( "foo" ) + static_cast<const char*>("bar") ));
+#if (defined __GNUC__ && __GNUC__ <= 11 && !defined __clang__) || (defined __clang__ && __clang_major__ <= 6)
     CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OStringLiteral<4>, const char* > )), typeid( OStringLiteral<4>( "foo" ) + static_cast<const char*>("bar") ));
-        //TODO: the explicit OStringLiteral<4> template argument in the unevaluated typeid context
+        // the explicit OStringLiteral<4> template argument in the unevaluated typeid context
         // is needed by some GCC versions, see <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96878>
-        // "Failed class template argument deduction in unevaluated, parenthesized context"
+        // "Failed class template argument deduction in unevaluated, parenthesized context", and by
+        // some old Clang versions
+#else
+    CPPUNIT_ASSERT_EQUAL(( typeid( OStringConcat< OStringLiteral<4>, const char* > )), typeid( OStringLiteral( "foo" ) + static_cast<const char*>("bar") ));
+#endif
     const char d1[] = "xyz";
     char d2[] = "abc";
     const char* d3 = d1;
diff --git a/sal/qa/rtl/strings/test_oustring_concat.cxx b/sal/qa/rtl/strings/test_oustring_concat.cxx
index 3a282a95c014..8e67817e1367 100644
--- a/sal/qa/rtl/strings/test_oustring_concat.cxx
+++ b/sal/qa/rtl/strings/test_oustring_concat.cxx
@@ -69,10 +69,15 @@ void test::oustring::StringConcat::checkConcat()
     CPPUNIT_ASSERT_EQUAL( OUString( "foobar" ), OUString( OUStringBuffer( "foo" ) + "bar" ));
     CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUStringBuffer, const char[ 4 ] > )), typeid( OUStringBuffer( "foo" ) + "bar" ));
     CPPUNIT_ASSERT_EQUAL( OUString( "foobar" ), OUString( OUStringLiteral( u"foo" ) + "bar" ));
+#if (defined __GNUC__ && __GNUC__ <= 11 && !defined __clang__) || (defined __clang__ && __clang_major__ <= 6)
     CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUStringLiteral<4>, const char[ 4 ] > )), typeid( OUStringLiteral<4>( u"foo" ) + "bar" ));
-        //TODO: the explicit OUStringLiteral<4> template argument in the unevaluated typeid context
+        // the explicit OUStringLiteral<4> template argument in the unevaluated typeid context
         // is needed by some GCC versions, see <https://gcc.gnu.org/bugzilla/show_bug.cgi?id=96878>
-        // "Failed class template argument deduction in unevaluated, parenthesized context"
+        // "Failed class template argument deduction in unevaluated, parenthesized context", and by
+        // some old Clang versions
+#else
+    CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUStringLiteral<4>, const char[ 4 ] > )), typeid( OUStringLiteral( u"foo" ) + "bar" ));
+#endif
     const char d1[] = "xyz";
     CPPUNIT_ASSERT_EQUAL( OUString( "fooxyz" ), OUString( OUString( "foo" ) + d1 ));
     CPPUNIT_ASSERT_EQUAL(( typeid( OUStringConcat< OUString, const char[ 4 ] > )), typeid( OUString( "foo" ) + d1 ));


More information about the Libreoffice-commits mailing list