diff options
author | Simon Hausmann <simon.hausmann@digia.com> | 2014-07-17 10:35:15 +0200 |
---|---|---|
committer | Simon Hausmann <simon.hausmann@digia.com> | 2014-07-22 13:49:20 +0200 |
commit | e6f3bcf66e0d154866e96a51b6ab2736ef5e2dc3 (patch) | |
tree | cca7f6d655fa34b3ff9fbd553c88b5a7448af441 /src | |
parent | 3110273d1cbb47cb28a4ea96e34373cc7bbdbaa9 (diff) |
Disable T::Data compile time size assertion for some compilers
The fallback implementation of Q_STATIC_ASSERT does not support the use
of "this" in the condition for all compilers, so let's use this macro only
with proper compilers and skip it otherwise.
Change-Id: Ia78ef9cc641dc403be66576033e35e61e28963e5
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'src')
-rw-r--r-- | src/qml/jsruntime/qv4arraydata_p.h | 2 | ||||
-rw-r--r-- | src/qml/jsruntime/qv4managed_p.h | 10 |
2 files changed, 9 insertions, 3 deletions
diff --git a/src/qml/jsruntime/qv4arraydata_p.h b/src/qml/jsruntime/qv4arraydata_p.h index a582effb01..c95f9b598d 100644 --- a/src/qml/jsruntime/qv4arraydata_p.h +++ b/src/qml/jsruntime/qv4arraydata_p.h @@ -57,7 +57,7 @@ namespace QV4 { static inline const QV4::ManagedVTable *staticVTable() { return &static_vtbl.managedVTable; } \ template <typename T> \ QV4::Returned<T> *asReturned() { return QV4::Returned<T>::create(this); } \ - void __dataTest() { Q_STATIC_ASSERT(sizeof(*this) == sizeof(Data)); } \ + V4_MANAGED_SIZE_TEST \ const Data *d() const { return &static_cast<const Data &>(Managed::data); } \ Data *d() { return &static_cast<Data &>(Managed::data); } diff --git a/src/qml/jsruntime/qv4managed_p.h b/src/qml/jsruntime/qv4managed_p.h index 4d7af1a5f0..1faed6286a 100644 --- a/src/qml/jsruntime/qv4managed_p.h +++ b/src/qml/jsruntime/qv4managed_p.h @@ -62,6 +62,12 @@ inline int qYouForgotTheQ_MANAGED_Macro(T, T) { return 0; } template <typename T1, typename T2> inline void qYouForgotTheQ_MANAGED_Macro(T1, T2) {} +#ifdef Q_COMPILER_STATIC_ASSERT +#define V4_MANAGED_SIZE_TEST void __dataTest() { Q_STATIC_ASSERT(sizeof(*this) == sizeof(Data)); } +#else +#define V4_MANAGED_SIZE_TEST +#endif + #define V4_MANAGED(superClass) \ public: \ Q_MANAGED_CHECK \ @@ -70,7 +76,7 @@ inline void qYouForgotTheQ_MANAGED_Macro(T1, T2) {} static inline const QV4::ManagedVTable *staticVTable() { return &static_vtbl; } \ template <typename T> \ QV4::Returned<T> *asReturned() { return QV4::Returned<T>::create(this); } \ - void __dataTest() { Q_STATIC_ASSERT(sizeof(*this) == sizeof(Data)); } \ + V4_MANAGED_SIZE_TEST \ const Data *d() const { return &static_cast<const Data &>(Managed::data); } \ Data *d() { return &static_cast<Data &>(Managed::data); } @@ -82,7 +88,7 @@ inline void qYouForgotTheQ_MANAGED_Macro(T1, T2) {} static inline const QV4::ManagedVTable *staticVTable() { return &static_vtbl.managedVTable; } \ template <typename T> \ QV4::Returned<T> *asReturned() { return QV4::Returned<T>::create(this); } \ - void __dataTest() { Q_STATIC_ASSERT(sizeof(*this) == sizeof(Data)); } \ + V4_MANAGED_SIZE_TEST \ const Data *d() const { return &static_cast<const Data &>(Managed::data); } \ Data *d() { return &static_cast<Data &>(Managed::data); } |