diff options
author | Simon Hausmann <simon.hausmann@digia.com> | 2013-08-06 11:57:42 +0200 |
---|---|---|
committer | The Qt Project <gerrit-noreply@qt-project.org> | 2013-08-06 12:04:59 +0200 |
commit | f3cbd0b8aa96abfc4b3660df4426ed10b11b18e0 (patch) | |
tree | ea79b396d577016b12bcb096ce50d323caa03e9e /tests/auto/qml/qjsengine | |
parent | 347496843db38f8f63aa4037d2f8e17a5eff6e15 (diff) |
Fix some GC related tests to work with MSVC
Using alloca instead of memset we can convince even MSVC to allocate memory on the
stack, to overwrite any previous dead V4 pointers.
Change-Id: Ic01bebfc6368e9c3ce1f6155a0f0ea206b90764c
Reviewed-by: Lars Knoll <lars.knoll@digia.com>
Diffstat (limited to 'tests/auto/qml/qjsengine')
-rw-r--r-- | tests/auto/qml/qjsengine/tst_qjsengine.cpp | 18 |
1 files changed, 15 insertions, 3 deletions
diff --git a/tests/auto/qml/qjsengine/tst_qjsengine.cpp b/tests/auto/qml/qjsengine/tst_qjsengine.cpp index ca3fa8bca4..1f43d21c51 100644 --- a/tests/auto/qml/qjsengine/tst_qjsengine.cpp +++ b/tests/auto/qml/qjsengine/tst_qjsengine.cpp @@ -49,16 +49,28 @@ #include <QtCore/qnumeric.h> #include <stdlib.h> +#ifdef Q_CC_MSVC +#define NO_INLINE __declspec(noinline) +#else +#define NO_INLINE __attribute__((noinline)) +#endif + +#if defined(Q_OS_WIN) +#include <malloc.h> +#else +#include <alloca.h> +#endif + Q_DECLARE_METATYPE(QList<int>) Q_DECLARE_METATYPE(QObjectList) // The JavaScriptCore GC marks the C stack. To try to ensure that there is // no JSObject* left in stack memory by the compiler, we call this function // to zap some bytes of memory before calling collectGarbage(). -static void zapSomeStack() +static void NO_INLINE zapSomeStack() { - char buf[4096]; - memset(buf, 0, sizeof(buf)); + char *buf = (char*)alloca(4096); + memset(buf, 0, 4096); } static void collectGarbage_helper(QJSEngine &eng) |