Don't use the gcc extension for QStringLiteral & Q_ARRAY_LITERAL
authorLars Knoll <lars.knoll@nokia.com>
Mon, 11 Jun 2012 14:08:55 +0000 (16:08 +0200)
committerQt by Nokia <qt-info@nokia.com>
Tue, 12 Jun 2012 02:30:13 +0000 (04:30 +0200)
The extension doesn't work outside of function scopes, so a
function declaration such as
void foo(const QString &str = QStringLiteral("bar"));
would fail on certain gcc versions.

Change-Id: I2971301f2859edd3fc81b95dfa5a7c15f29e395c
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
Reviewed-by: Olivier Goffart <ogoffart@woboq.com>
src/corelib/tools/qarraydata.h
src/corelib/tools/qstring.h

index e9f70bc..f3de8de 100644 (file)
@@ -315,14 +315,6 @@ struct QArrayDataPointerRef
             return StaticWrapper::get();                                        \
         }())                                                                    \
     /**/
-#elif defined(Q_CC_GNU)
-// Hide array within GCC's __extension__ {( )} block
-#define Q_ARRAY_LITERAL(Type, ...)                                              \
-    __extension__ ({                                                            \
-            Q_ARRAY_LITERAL_IMPL(Type, __VA_ARGS__)                             \
-            ref;                                                                \
-        })                                                                      \
-    /**/
 #endif
 #endif // defined(Q_COMPILER_VARIADIC_MACROS)
 
index 375dfbb..f136d74 100644 (file)
@@ -167,22 +167,6 @@ Q_STATIC_ASSERT_X(sizeof(qunicodechar) == 2,
     }()) \
     /**/
 
-# elif defined(Q_CC_GNU)
-// We need to create a QStringData in the .rodata section of memory
-// and the only way to do that is to create a "static const" variable.
-// To do that, we need the __extension__ {( )} trick which only GCC supports
-
-#  define QStringLiteral(str) \
-    QString(__extension__ ({ \
-        enum { Size = sizeof(QT_UNICODE_LITERAL(str))/2 - 1 }; \
-        static const QStaticStringData<Size> qstring_literal = { \
-            Q_STATIC_STRING_DATA_HEADER_INITIALIZER(Size), \
-            QT_UNICODE_LITERAL(str) }; \
-        QStringDataPtr holder = { qstring_literal.data_ptr() }; \
-        holder; \
-    })) \
-    /**/
-
 # endif
 #endif // QT_NO_UNICODE_LITERAL