diff options
author | Thierry Bastian <thierry.bastian@nokia.com> | 2010-07-02 12:38:33 (GMT) |
---|---|---|
committer | Thierry Bastian <thierry.bastian@nokia.com> | 2010-07-02 12:48:20 (GMT) |
commit | 6a405778ca053d05d32ea8e0949bee917c0316e2 (patch) | |
tree | 6cfd014ca076a285b7323e0d3d0a21cd8bfa6c4b /src | |
parent | e9a314d6734972254f52b64da77d4c5d8762517a (diff) | |
download | Qt-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.h | 5 | ||||
-rw-r--r-- | src/corelib/kernel/qeventdispatcher_win_p.h | 2 |
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); |