Properly check for Clang with static initializer_list bug
Change-Id: I98060f1adae0ba8ec03b2f0d6b0db6d5a1c0385c
This commit is contained in:
parent
5b8947a093
commit
f58769c8f1
@ -22,6 +22,7 @@ Any change in this header will cause a rebuild of almost everything.
|
|||||||
#define HAVE_GCC_PRAGMA_OPERATOR 0
|
#define HAVE_GCC_PRAGMA_OPERATOR 0
|
||||||
#define HAVE_GCC_DEPRECATED_MESSAGE 0
|
#define HAVE_GCC_DEPRECATED_MESSAGE 0
|
||||||
#define HAVE_THREADSAFE_STATICS 0
|
#define HAVE_THREADSAFE_STATICS 0
|
||||||
|
#define HAVE_BROKEN_STATIC_INITILIZER_LIST 0
|
||||||
#define HAVE_SYSLOG_H 0
|
#define HAVE_SYSLOG_H 0
|
||||||
/* Compiler supports __attribute__((warn_unused)). */
|
/* Compiler supports __attribute__((warn_unused)). */
|
||||||
#define HAVE_GCC_ATTRIBUTE_WARN_UNUSED 0
|
#define HAVE_GCC_ATTRIBUTE_WARN_UNUSED 0
|
||||||
|
28
configure.ac
28
configure.ac
@ -6225,6 +6225,34 @@ if test "$GCC" = "yes"; then
|
|||||||
fi
|
fi
|
||||||
AC_SUBST(HAVE_GCC_PRAGMA_OPERATOR)
|
AC_SUBST(HAVE_GCC_PRAGMA_OPERATOR)
|
||||||
|
|
||||||
|
AC_MSG_CHECKING([whether $CXX has broken static initializer_list support])
|
||||||
|
save_CXXFLAGS=$CXXFLAGS
|
||||||
|
CXXFLAGS="$CXXFLAGS $CXXFLAGS_CXX11"
|
||||||
|
AC_LANG_PUSH([C++])
|
||||||
|
AC_RUN_IFELSE([AC_LANG_PROGRAM([[
|
||||||
|
// Exit with failure if the static initializer_list is stored on the stack
|
||||||
|
// (as done by Clang < 3.4):
|
||||||
|
#include <initializer_list>
|
||||||
|
struct S {};
|
||||||
|
bool g(void const * p1, void const * p2) {
|
||||||
|
int n;
|
||||||
|
return !((p1 > p2 && p2 > &n) || (p1 < p2 && p2 < &n));
|
||||||
|
}
|
||||||
|
bool f(void const * p1) {
|
||||||
|
static std::initializer_list<S> s { S() };
|
||||||
|
return g(p1, s.begin());
|
||||||
|
}
|
||||||
|
]],[[
|
||||||
|
int n;
|
||||||
|
return f(&n) ? 0 : 1;
|
||||||
|
]])], [broken=no], [broken=yes])
|
||||||
|
AC_LANG_POP([C++])
|
||||||
|
CXXFLAGS=$save_CXXFLAGS
|
||||||
|
AC_MSG_RESULT([$broken])
|
||||||
|
if test "$broken" = yes; then
|
||||||
|
AC_DEFINE([HAVE_BROKEN_STATIC_INITILIZER_LIST])
|
||||||
|
fi
|
||||||
|
|
||||||
dnl ===================================================================
|
dnl ===================================================================
|
||||||
dnl system stl sanity tests
|
dnl system stl sanity tests
|
||||||
dnl ===================================================================
|
dnl ===================================================================
|
||||||
|
@ -17,6 +17,9 @@
|
|||||||
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
* the License at http://www.apache.org/licenses/LICENSE-2.0 .
|
||||||
*/
|
*/
|
||||||
|
|
||||||
|
#include <sal/config.h>
|
||||||
|
|
||||||
|
#include <config_global.h>
|
||||||
#include <unotools/mediadescriptor.hxx>
|
#include <unotools/mediadescriptor.hxx>
|
||||||
#include <filter/msfilter/util.hxx>
|
#include <filter/msfilter/util.hxx>
|
||||||
#include "oox/core/xmlfilterbase.hxx"
|
#include "oox/core/xmlfilterbase.hxx"
|
||||||
@ -283,7 +286,7 @@ ShapeExport& ShapeExport::WriteGroupShape(uno::Reference<drawing::XShape> xShape
|
|||||||
|
|
||||||
static bool lcl_IsOnBlacklist(OUString& rShapeType)
|
static bool lcl_IsOnBlacklist(OUString& rShapeType)
|
||||||
{
|
{
|
||||||
#if !defined __clang__
|
#if !HAVE_BROKEN_STATIC_INITILIZER_LIST
|
||||||
static
|
static
|
||||||
#endif
|
#endif
|
||||||
const std::initializer_list<OUStringLiteral> vBlacklist = {
|
const std::initializer_list<OUStringLiteral> vBlacklist = {
|
||||||
@ -347,7 +350,7 @@ static bool lcl_IsOnBlacklist(OUString& rShapeType)
|
|||||||
|
|
||||||
static bool lcl_IsOnWhitelist(OUString& rShapeType)
|
static bool lcl_IsOnWhitelist(OUString& rShapeType)
|
||||||
{
|
{
|
||||||
#if !defined __clang__
|
#if !HAVE_BROKEN_STATIC_INITILIZER_LIST
|
||||||
static
|
static
|
||||||
#endif
|
#endif
|
||||||
const std::initializer_list<OUStringLiteral> vWhitelist = {
|
const std::initializer_list<OUStringLiteral> vWhitelist = {
|
||||||
|
Loading…
x
Reference in New Issue
Block a user