summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
authorThierry Bastian <thierry.bastian@nokia.com>2010-07-02 12:38:33 (GMT)
committerThierry Bastian <thierry.bastian@nokia.com>2010-07-02 12:48:20 (GMT)
commit6a405778ca053d05d32ea8e0949bee917c0316e2 (patch)
tree6cfd014ca076a285b7323e0d3d0a21cd8bfa6c4b /src
parente9a314d6734972254f52b64da77d4c5d8762517a (diff)
downloadQt-6a405778ca053d05d32ea8e0949bee917c0316e2.zip
Qt-6a405778ca053d05d32ea8e0949bee917c0316e2.tar.gz
Qt-6a405778ca053d05d32ea8e0949bee917c0316e2.tar.bz2
Crash when dragging with mingw
The problem was that there was a misalignment coming from the d&d code. That called in the end our SSE optimized functions. This code turns out to be calling QApplication::processEvents which in the the calls the Qt event dispatcher for windows' processEvents function. This function will now also always align the stack to 16 bytes and be SSE ready. Task-number: QTBUG-11880 Reviewed-by: Zeno Albisser
Diffstat (limited to 'src')
-rw-r--r--src/corelib/global/qglobal.h5
-rw-r--r--src/corelib/kernel/qeventdispatcher_win_p.h2
2 files changed, 4 insertions, 3 deletions
diff --git a/src/corelib/global/qglobal.h b/src/corelib/global/qglobal.h
index 76f35ac..8a3166d 100644
--- a/src/corelib/global/qglobal.h
+++ b/src/corelib/global/qglobal.h
@@ -1066,10 +1066,11 @@ redefine to built-in booleans to make autotests work properly */
//the alignment needs to be forced for sse2 to not crash with mingw
#if defined(Q_WS_WIN)
# if defined(Q_CC_MINGW)
-# define QT_WIN_CALLBACK CALLBACK __attribute__ ((force_align_arg_pointer))
+# define QT_ENSURE_STACK_ALIGNED_FOR_SSE __attribute__ ((force_align_arg_pointer))
# else
-# define QT_WIN_CALLBACK CALLBACK
+# define QT_ENSURE_STACK_ALIGNED_FOR_SSE
# endif
+# define QT_WIN_CALLBACK CALLBACK QT_ENSURE_STACK_ALIGNED_FOR_SSE
#endif
typedef int QNoImplicitBoolCast;
diff --git a/src/corelib/kernel/qeventdispatcher_win_p.h b/src/corelib/kernel/qeventdispatcher_win_p.h
index 788cc44..b219841 100644
--- a/src/corelib/kernel/qeventdispatcher_win_p.h
+++ b/src/corelib/kernel/qeventdispatcher_win_p.h
@@ -76,7 +76,7 @@ public:
explicit QEventDispatcherWin32(QObject *parent = 0);
~QEventDispatcherWin32();
- bool processEvents(QEventLoop::ProcessEventsFlags flags);
+ bool QT_ENSURE_STACK_ALIGNED_FOR_SSE processEvents(QEventLoop::ProcessEventsFlags flags);
bool hasPendingEvents();
void registerSocketNotifier(QSocketNotifier *notifier);