[Libreoffice-commits] core.git: config_host/config_global.h.in config_host.mk.in configure.ac sal/inc sal/qa xmlreader/inc

Luboš Luňák l.lunak at suse.cz
Thu Apr 4 04:44:52 PDT 2013


 config_host.mk.in                                  |    1 
 config_host/config_global.h.in                     |    1 
 configure.ac                                       |   36 ---------------------
 sal/inc/rtl/strbuf.hxx                             |   24 --------------
 sal/inc/rtl/string.hxx                             |   20 -----------
 sal/inc/rtl/stringutils.hxx                        |    2 -
 sal/inc/rtl/ustrbuf.hxx                            |   35 --------------------
 sal/inc/rtl/ustring.hxx                            |   36 ---------------------
 sal/qa/rtl/strings/test_ostring_stringliterals.cxx |   19 -----------
 xmlreader/inc/xmlreader/span.hxx                   |    2 -
 10 files changed, 1 insertion(+), 175 deletions(-)

New commits:
commit 598d3228cdcd66a79740bd05740f3e2169b1ec98
Author: Luboš Luňák <l.lunak at suse.cz>
Date:   Thu Apr 4 13:34:58 2013 +0200

    remove HAVE_SFINAE_ANONYMOUS_BROKEN
    
    Since we no longer support the old Apple SDK using gcc-4.0.1, we can
    remove the cruft to work around its problems. Woohoo.
    
    Change-Id: Idf275e76449443f1f0314e75dab993f213a77eb7

diff --git a/config_host.mk.in b/config_host.mk.in
index 08fc52c9..e7c1a0e 100644
--- a/config_host.mk.in
+++ b/config_host.mk.in
@@ -228,7 +228,6 @@ export HAVE_LD_HASH_STYLE=@HAVE_LD_HASH_STYLE@
 export HAVE_NON_CONST_NPP_GETMIMEDESCRIPTION=@HAVE_NON_CONST_NPP_GETMIMEDESCRIPTION@
 export HAVE_POSIX_FALLOCATE=@HAVE_POSIX_FALLOCATE@
 export HAVE_READDIR_R=@HAVE_READDIR_R@
-export HAVE_SFINAE_ANONYMOUS_BROKEN=@HAVE_SFINAE_ANONYMOUS_BROKEN@
 export HAVE_THREADSAFE_STATICS=@HAVE_THREADSAFE_STATICS@
 export HOST_PLATFORM=@host@
 export HSQLDB_JAR=@HSQLDB_JAR@
diff --git a/config_host/config_global.h.in b/config_host/config_global.h.in
index 1e256b6..19b13dc 100644
--- a/config_host/config_global.h.in
+++ b/config_host/config_global.h.in
@@ -18,7 +18,6 @@ Any change in this header will cause a rebuild of almost everything.
 #define HAVE_GCC_BUILTIN_ATOMIC 0
 #define HAVE_GCC_PRAGMA_DIAGNOSTIC_MODIFY 0
 #define HAVE_GCC_PRAGMA_DIAGNOSTIC_SCOPE 0
-#define HAVE_SFINAE_ANONYMOUS_BROKEN 0
 #define HAVE_THREADSAFE_STATICS 0
 #define HAVE_SYSLOG_H 0
 
diff --git a/configure.ac b/configure.ac
index eabc81a..c460f73 100644
--- a/configure.ac
+++ b/configure.ac
@@ -5775,42 +5775,6 @@ AC_SUBST(HAVE_GCC_VISIBILITY_FEATURE)
 AC_SUBST(HAVE_GCC_VISIBILITY_BROKEN)
 
 dnl ===================================================================
-dnl SFINAE test
-dnl Pre-C++11 does not allow types without linkage as template arguments.
-dnl Substitution Failure Is Not An Error is an idiom that disables
-dnl template instances that would cause an error, without actually
-dnl causing an error. Old gcc (pre-4.0.2) however causes a real error.
-dnl http://gcc.gnu.org/bugzilla/show_bug.cgi?id=21514
-dnl ===================================================================
-HAVE_SFINAE_ANONYMOUS_BROKEN=
-if test \( "$_os" != "WINNT" -o "$WITH_MINGW" = "yes" \); then
-
-    AC_LANG_PUSH([C++])
-    AC_MSG_CHECKING([if SFINAE is broken with anonymous types])
-    AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[
-enum { AnonymousEnumValue };
-template< typename T > class TestPredicate {};
-template<> class TestPredicate< int > { public: typedef bool Type; };
-template< typename T >
-bool test( const T&, typename TestPredicate< T >::Type = false )
-    { return true; };
-void test( ... );
-            ]], [[
-    test( 10 );
-    test( AnonymousEnumValue );
-            ]])],[sfinae_anonymous_broken=no],[sfinae_anonymous_broken=yes
-        ])
-        AC_MSG_RESULT([$sfinae_anonymous_broken])
-        if test "$sfinae_anonymous_broken" = "yes"; then
-            HAVE_SFINAE_ANONYMOUS_BROKEN="TRUE"
-            AC_DEFINE(HAVE_SFINAE_ANONYMOUS_BROKEN)
-        fi
-    AC_LANG_POP([C++])
-fi
-
-AC_SUBST(HAVE_SFINAE_ANONYMOUS_BROKEN)
-
-dnl ===================================================================
 dnl  Clang++ tests
 dnl ===================================================================
 
diff --git a/sal/inc/rtl/strbuf.hxx b/sal/inc/rtl/strbuf.hxx
index d858c89..9ebd495 100644
--- a/sal/inc/rtl/strbuf.hxx
+++ b/sal/inc/rtl/strbuf.hxx
@@ -154,15 +154,6 @@ public:
         @overload
         @since LibreOffice 3.6
      */
-#if HAVE_SFINAE_ANONYMOUS_BROKEN // see the OString ctors
-    OStringBuffer( const char* value )
-        : pData(NULL)
-    {
-        sal_Int32 length = rtl_str_getLength( value );
-        nCapacity = length + 16;
-        rtl_stringbuffer_newFromStr_WithLength( &pData, value, length );
-    }
-#else
     template< typename T >
     OStringBuffer( const T& value, typename internal::CharPtrDetector< T, internal::Dummy >::Type = internal::Dummy())
         : pData(NULL)
@@ -203,7 +194,6 @@ public:
         rtl_string_unittest_const_literal = true;
 #endif
     }
-#endif // HAVE_SFINAE_ANONYMOUS_BROKEN
 
     /**
         Constructs a string buffer so that it represents the same
@@ -458,12 +448,6 @@ public:
         @param   str   the characters to be appended.
         @return  this string buffer.
      */
-#if HAVE_SFINAE_ANONYMOUS_BROKEN
-    OStringBuffer & append( const sal_Char * str )
-    {
-        return append( str, rtl_str_getLength( str ) );
-    }
-#else
     template< typename T >
     typename internal::CharPtrDetector< T, OStringBuffer& >::Type append( const T& str )
     {
@@ -489,7 +473,6 @@ public:
         rtl_stringbuffer_insert( &pData, &nCapacity, getLength(), literal, internal::ConstCharArrayDetector< T, void >::size - 1 );
         return *this;
     }
-#endif
 
     /**
         Appends the string representation of the <code>char</code> array
@@ -669,12 +652,6 @@ public:
         @param      str      a character array.
         @return     this string buffer.
      */
-#if HAVE_SFINAE_ANONYMOUS_BROKEN
-    OStringBuffer & insert( sal_Int32 offset, const sal_Char * str )
-    {
-        return insert( offset, str, rtl_str_getLength( str ) );
-    }
-#else
     template< typename T >
     typename internal::CharPtrDetector< T, OStringBuffer& >::Type insert( sal_Int32 offset, const T& str )
     {
@@ -700,7 +677,6 @@ public:
         rtl_stringbuffer_insert( &pData, &nCapacity, offset, literal, internal::ConstCharArrayDetector< T, void >::size - 1 );
         return *this;
     }
-#endif
 
     /**
         Inserts the string representation of the <code>char</code> array
diff --git a/sal/inc/rtl/string.hxx b/sal/inc/rtl/string.hxx
index f9eeda2..e3d5afb 100644
--- a/sal/inc/rtl/string.hxx
+++ b/sal/inc/rtl/string.hxx
@@ -165,17 +165,6 @@ public:
 
       @param    value       a NULL-terminated character array.
     */
-#if HAVE_SFINAE_ANONYMOUS_BROKEN
-    // Old gcc can try to convert anonymous enums to OString and give compile error.
-    // So there's no special-cased handling of string literals.
-    // These are inline functions and technically both variants should work
-    // the same in practice, so there should be no compatibility problem.
-    OString( const sal_Char * value ) SAL_THROW(())
-     {
-         pData = 0;
-         rtl_string_newFromStr( &pData, value );
-     }
-#else
     template< typename T >
     OString( const T& value, typename internal::CharPtrDetector< T, internal::Dummy >::Type = internal::Dummy() ) SAL_THROW(())
     {
@@ -214,8 +203,6 @@ public:
 #endif
     }
 
-#endif // HAVE_SFINAE_ANONYMOUS_BROKEN
-
     /**
       New string from a character buffer array.
 
@@ -542,12 +529,6 @@ public:
       @return   sal_True if the strings are equal;
                 sal_False, otherwise.
     */
-#if HAVE_SFINAE_ANONYMOUS_BROKEN
-    sal_Bool equalsIgnoreAsciiCase( const sal_Char * asciiStr ) const SAL_THROW(())
-    {
-        return rtl_str_compareIgnoreAsciiCase( pData->buffer, asciiStr ) == 0;
-    }
-#else
     template< typename T >
     typename internal::CharPtrDetector< T, bool >::Type equalsIgnoreAsciiCase( const T& asciiStr ) const SAL_THROW(())
     {
@@ -575,7 +556,6 @@ public:
         return rtl_str_compareIgnoreAsciiCase_WithLength( pData->buffer, pData->length,
                                                           literal, internal::ConstCharArrayDetector< T, void >::size - 1 ) == 0;
     }
-#endif
 
     /**
       Perform a ASCII lowercase comparison of two strings.
diff --git a/sal/inc/rtl/stringutils.hxx b/sal/inc/rtl/stringutils.hxx
index 7ca2281..f832308 100644
--- a/sal/inc/rtl/stringutils.hxx
+++ b/sal/inc/rtl/stringutils.hxx
@@ -34,14 +34,12 @@
 // Manually defining RTL_DISABLE_FAST_STRING allows to force turning fast string concatenation off
 // (e.g. for debugging).
 #ifndef RTL_DISABLE_FAST_STRING
-#if ! HAVE_SFINAE_ANONYMOUS_BROKEN
 // This feature is not part of public API and is meant to be used only internally by LibreOffice.
 #ifdef LIBO_INTERNAL_ONLY
 // Enable fast string concatenation.
 #define RTL_FAST_STRING
 #endif
 #endif
-#endif
 
 // The unittest uses slightly different code to help check that the proper
 // calls are made. The class is put into a different namespace to make
diff --git a/sal/inc/rtl/ustrbuf.hxx b/sal/inc/rtl/ustrbuf.hxx
index abbf3d0..b648714 100644
--- a/sal/inc/rtl/ustrbuf.hxx
+++ b/sal/inc/rtl/ustrbuf.hxx
@@ -146,37 +146,6 @@ public:
         rtl_uStringbuffer_newFromStr_WithLength( &pData, value.getStr(), value.getLength() );
     }
 
-#if HAVE_SFINAE_ANONYMOUS_BROKEN // see OUString ctors
-    template< int N >
-    OUStringBuffer( const char (&literal)[ N ] )
-        : pData(NULL)
-        , nCapacity( N - 1 + 16 )
-    {
-        assert( strlen( literal ) == N - 1 );
-        rtl_uString_newFromLiteral( &pData, literal, N - 1, 16 );
-#ifdef RTL_STRING_UNITTEST
-        rtl_string_unittest_const_literal = true;
-#endif
-    }
-
-    /**
-     * It is an error to call this overload. Strings cannot directly use non-const char[].
-     * @internal
-     */
-    template< int N >
-    OUStringBuffer( char (&value)[ N ] )
-#ifndef RTL_STRING_UNITTEST
-        ; // intentionally not implemented
-#else
-    {
-        (void) value; // unused
-        pData = 0;
-        nCapacity = 10;
-        rtl_uString_newFromLiteral( &pData, "!!br0ken!!", 10, 0 ); // set to garbage
-        rtl_string_unittest_invalid_conversion = true;
-    }
-#endif
-#else // HAVE_SFINAE_ANONYMOUS_BROKEN
     template< typename T >
     OUStringBuffer( T& literal, typename internal::ConstCharArrayDetector< T, internal::Dummy >::Type = internal::Dummy() )
         : pData(NULL)
@@ -188,7 +157,6 @@ public:
         rtl_string_unittest_const_literal = true;
 #endif
     }
-#endif // HAVE_SFINAE_ANONYMOUS_BROKEN
 
 #ifdef RTL_STRING_UNITTEST
     /**
@@ -592,7 +560,7 @@ public:
         sal_Unicode sz[RTL_USTR_MAX_VALUEOFBOOLEAN];
         return append( sz, rtl_ustr_valueOfBoolean( sz, b ) );
     }
-#if ! HAVE_SFINAE_ANONYMOUS_BROKEN
+
     // Pointer can be automatically converted to bool, which is unwanted here.
     // Explicitly delete all pointer append() overloads to prevent this
     // (except for char* and sal_Unicode* overloads, which are handled elsewhere).
@@ -600,7 +568,6 @@ public:
     typename internal::Enable< void,
         !internal::CharPtrDetector< T* >::ok && !internal::SalUnicodePtrDetector< T* >::ok >::Type
         append( T* ) SAL_DELETED_FUNCTION;
-#endif
 
     // This overload is needed because OUString has a ctor from rtl_uString*, but
     // the bool overload above would be prefered to the conversion.
diff --git a/sal/inc/rtl/ustring.hxx b/sal/inc/rtl/ustring.hxx
index 0af8b6d..13756f8 100644
--- a/sal/inc/rtl/ustring.hxx
+++ b/sal/inc/rtl/ustring.hxx
@@ -193,39 +193,6 @@ public:
 
       @since LibreOffice 3.6
     */
-#if HAVE_SFINAE_ANONYMOUS_BROKEN
-    // Old gcc can try to convert anonymous enums to OUString and give compile error.
-    // So instead have a variant for const and non-const char[].
-    template< int N >
-    OUString( const char (&literal)[ N ] )
-    {
-        // Check that the string literal is in fact N - 1 long (no embedded \0's),
-        // any decent compiler should optimize out calls to strlen with literals.
-        assert( strlen( literal ) == N - 1 );
-        pData = 0;
-        rtl_uString_newFromLiteral( &pData, literal, N - 1, 0 );
-#ifdef RTL_STRING_UNITTEST
-        rtl_string_unittest_const_literal = true;
-#endif
-    }
-
-    /**
-     * It is an error to call this overload. Strings cannot directly use non-const char[].
-     * @internal
-     */
-    template< int N >
-    OUString( char (&value)[ N ] )
-#ifndef RTL_STRING_UNITTEST
-        ; // intentionally not implemented
-#else
-    {
-        (void) value; // unused
-        pData = 0;
-        rtl_uString_newFromLiteral( &pData, "!!br0ken!!", 10, 0 ); // set to garbage
-        rtl_string_unittest_invalid_conversion = true;
-    }
-#endif
-#else // HAVE_SFINAE_ANONYMOUS_BROKEN
     template< typename T >
     OUString( T& literal, typename internal::ConstCharArrayDetector< T, internal::Dummy >::Type = internal::Dummy() )
     {
@@ -240,9 +207,6 @@ public:
 #endif
     }
 
-#endif // HAVE_SFINAE_ANONYMOUS_BROKEN
-
-
 #ifdef RTL_STRING_UNITTEST
     /**
      * Only used by unittests to detect incorrect conversions.
diff --git a/sal/qa/rtl/strings/test_ostring_stringliterals.cxx b/sal/qa/rtl/strings/test_ostring_stringliterals.cxx
index 0fcbb84..139c5e4 100644
--- a/sal/qa/rtl/strings/test_ostring_stringliterals.cxx
+++ b/sal/qa/rtl/strings/test_ostring_stringliterals.cxx
@@ -76,8 +76,6 @@ CPPUNIT_TEST_SUITE_END();
 
 void test::ostring::StringLiterals::checkCtors()
 {
-// string literal ctors do not work with SFINAE broken and are disabled
-#if ! HAVE_SFINAE_ANONYMOUS_BROKEN
     bool result_tmp;
     CPPUNIT_ASSERT( CONST_CTOR_USED( "test" ));
     const char good1[] = "test";
@@ -115,17 +113,6 @@ void test::ostring::StringLiterals::checkCtors()
 // Check that contents are correct and equal to the case when RTL_CONSTASCII_STRINGPARAM is used.
     CPPUNIT_ASSERT( rtl::OString( RTL_CONSTASCII_STRINGPARAM( "" )) == rtl::OString( "" ));
     CPPUNIT_ASSERT( rtl::OString( RTL_CONSTASCII_STRINGPARAM( "ab" )) == rtl::OString( "ab" ));
-#if 0
-// This is currently disabled because it can't be consistent with HAVE_SFINAE_ANONYMOUS_BROKEN.
-// Since the situation wasn't quite consistent even before, there should be no big harm.
-
-// Check also that embedded \0 is included (RTL_CONSTASCII_STRINGPARAM does the same,
-// const char* ctor does not, but it seems to make more sense to include it when
-// it's explicitly mentioned in the string literal).
-    CPPUNIT_ASSERT( rtl::OString( RTL_CONSTASCII_STRINGPARAM( "\0" )) == rtl::OString( "\0" ));
-    CPPUNIT_ASSERT( rtl::OString( RTL_CONSTASCII_STRINGPARAM( "a\0b" )) == rtl::OString( "a\0b" ));
-#endif
-#endif
 }
 
 const char test::ostring::StringLiterals::bad5[] = "test";
@@ -159,11 +146,9 @@ void test::ostring::StringLiterals::checkUsage()
     rtl_string_unittest_const_literal_function = false;
     CPPUNIT_ASSERT_EQUAL( foo, rtl::OString() = "foo" );
     CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function == true );
-#if ! HAVE_SFINAE_ANONYMOUS_BROKEN
     rtl_string_unittest_const_literal_function = false;
     CPPUNIT_ASSERT( FoO.equalsIgnoreAsciiCase( "fOo" ));
     CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function == true );
-#endif
     rtl_string_unittest_const_literal_function = false;
     CPPUNIT_ASSERT( foobarfoo.match( "bar", 3 ));
     CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function == true );
@@ -264,7 +249,6 @@ void test::ostring::StringLiterals::checkNonConstUsage()
 void test::ostring::StringLiterals::checkBuffer()
 {
     rtl::OStringBuffer buf;
-#if ! HAVE_SFINAE_ANONYMOUS_BROKEN
     rtl_string_unittest_const_literal_function = false;
     buf.append( "foo" );
     CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function == true );
@@ -277,9 +261,6 @@ void test::ostring::StringLiterals::checkBuffer()
     buf.insert( 3, "baz" );
     CPPUNIT_ASSERT( rtl_string_unittest_const_literal_function == true );
     CPPUNIT_ASSERT_EQUAL( rtl::OString( "foobazbar" ), buf.toString());
-#else
-    buf.append( "foobazbar" );
-#endif
 
     rtl::OString foobazbard( "foobazbard" );
     rtl::OString foodbazbard( "foodbazbard" );
diff --git a/xmlreader/inc/xmlreader/span.hxx b/xmlreader/inc/xmlreader/span.hxx
index fbb4834..b8c28db 100644
--- a/xmlreader/inc/xmlreader/span.hxx
+++ b/xmlreader/inc/xmlreader/span.hxx
@@ -59,7 +59,6 @@ struct OOO_DLLPUBLIC_XMLREADER Span {
             begin, length, text.getStr(), text.getLength()) == 0;
     }
 
-#if ! HAVE_SFINAE_ANONYMOUS_BROKEN
     /**
      @overload
      This function accepts an ASCII string literal as its argument.
@@ -70,7 +69,6 @@ struct OOO_DLLPUBLIC_XMLREADER Span {
         assert( strlen( literal ) == rtl::internal::ConstCharArrayDetector< T >::size - 1 );
         return rtl_str_compare_WithLength( begin, length, literal, rtl::internal::ConstCharArrayDetector< T, void >::size - 1 ) == 0;
     }
-#endif
 
     rtl::OUString convertFromUtf8() const;
 };


More information about the Libreoffice-commits mailing list