pull in some upstream fixes, for QTBUG-45753/kde-345544 in particular

This commit is contained in:
Rex Dieter 2015-05-02 17:23:29 -05:00
parent faa9507dc6
commit 66e30f34be
9 changed files with 371 additions and 3 deletions

View File

@ -0,0 +1,28 @@
From 6b3ac8e2e0944fb6025371c2ff37db350fef69fd Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pasi=20Pet=C3=A4j=C3=A4j=C3=A4rvi?=
<pasi.petajajarvi@theqtcompany.com>
Date: Wed, 21 Jan 2015 16:02:17 +0200
Subject: [PATCH 08/68] Fix usage of pow to C99 standard compliance
Change-Id: I37c25b848dd3f53afff360d81a3a685cbd8e5d26
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
---
src/qml/jsruntime/qv4globalobject.cpp | 2 +-
1 file changed, 1 insertion(+), 1 deletion(-)
diff --git a/src/qml/jsruntime/qv4globalobject.cpp b/src/qml/jsruntime/qv4globalobject.cpp
index 9a9de8b..77bc9f5 100644
--- a/src/qml/jsruntime/qv4globalobject.cpp
+++ b/src/qml/jsruntime/qv4globalobject.cpp
@@ -502,7 +502,7 @@ ReturnedValue GlobalFunctions::method_parseInt(CallContext *ctx)
}
if (overflow) {
- double result = (double) v_overflow * pow(R, overflow_digit_count);
+ double result = (double) v_overflow * pow(static_cast<double>(R), static_cast<double>(overflow_digit_count));
result += v;
return Encode(sign * result);
} else {
--
2.3.7

View File

@ -0,0 +1,41 @@
From 47c089d15f79cd678e0c9de5c7fb5b5e2488a9f5 Mon Sep 17 00:00:00 2001
From: =?UTF-8?q?Pasi=20Pet=C3=A4j=C3=A4j=C3=A4rvi?=
<pasi.petajajarvi@theqtcompany.com>
Date: Wed, 21 Jan 2015 12:35:38 +0200
Subject: [PATCH 11/68] V4: include alloca private header as alloca is used
unconditionally.
Change-Id: Ic94a7ec3980ca9e2629620ef83c93b179d75162b
Reviewed-by: Simon Hausmann <simon.hausmann@digia.com>
---
src/qml/jit/qv4regalloc.cpp | 1 +
src/qml/jsruntime/qv4stringobject.cpp | 1 +
2 files changed, 2 insertions(+)
diff --git a/src/qml/jit/qv4regalloc.cpp b/src/qml/jit/qv4regalloc.cpp
index e695224..f9f494c 100644
--- a/src/qml/jit/qv4regalloc.cpp
+++ b/src/qml/jit/qv4regalloc.cpp
@@ -32,6 +32,7 @@
****************************************************************************/
#include "qv4regalloc_p.h"
+#include "qv4alloca_p.h"
#include <private/qv4value_inl_p.h>
#include <algorithm>
diff --git a/src/qml/jsruntime/qv4stringobject.cpp b/src/qml/jsruntime/qv4stringobject.cpp
index 397a6ef..8bf9a09 100644
--- a/src/qml/jsruntime/qv4stringobject.cpp
+++ b/src/qml/jsruntime/qv4stringobject.cpp
@@ -37,6 +37,7 @@
#include "qv4objectproto_p.h"
#include "qv4mm_p.h"
#include "qv4scopedvalue_p.h"
+#include "qv4alloca_p.h"
#include <QtCore/qnumeric.h>
#include <QtCore/qmath.h>
#include <QtCore/QDateTime>
--
2.3.7

View File

@ -0,0 +1,47 @@
From fd395141f00ef0fc72e2d6b7da0c6397324036a3 Mon Sep 17 00:00:00 2001
From: Allan Sandfeld Jensen <allan.jensen@theqtcompany.com>
Date: Fri, 30 Jan 2015 11:54:44 +0100
Subject: [PATCH 32/68] Update C++11 warning logic from QtWebKit
Fixes compatibility with gcc 5.0.
Change-Id: I017c6d690c1f64359c3bac6c8b6b0f5e089861eb
Reviewed-by: Oswald Buddenhagen <oswald.buddenhagen@theqtcompany.com>
Reviewed-by: Thiago Macieira <thiago.macieira@intel.com>
---
src/3rdparty/masm/masm.pri | 16 +++++++---------
1 file changed, 7 insertions(+), 9 deletions(-)
diff --git a/src/3rdparty/masm/masm.pri b/src/3rdparty/masm/masm.pri
index 3fd4aa6..3655af3 100644
--- a/src/3rdparty/masm/masm.pri
+++ b/src/3rdparty/masm/masm.pri
@@ -71,18 +71,16 @@ retgen.commands = python $$retgen.script > ${QMAKE_FILE_OUT}
QMAKE_EXTRA_COMPILERS += retgen
# Taken from WebKit/Tools/qmake/mkspecs/features/unix/default_post.prf
-linux-g++* {
- greaterThan(QT_GCC_MAJOR_VERSION, 3):greaterThan(QT_GCC_MINOR_VERSION, 5) {
- !contains(QMAKE_CXXFLAGS, -std=(c|gnu)\\+\\+(0x|11)) {
+!c++11:!intel_icc {
+ # Don't warn about OVERRIDE and FINAL, since they are feature-checked anyways
+ clang {
+ QMAKE_CXXFLAGS += -Wno-c++11-extensions -Wno-c++0x-extensions
+ QMAKE_OBJECTIVE_CFLAGS += -Wno-c++11-extensions -Wno-c++0x-extensions
+ } else: gcc {
+ greaterThan(QT_GCC_MAJOR_VERSION, 4)|greaterThan(QT_GCC_MINOR_VERSION, 5) {
# We need to deactivate those warnings because some names conflicts with upcoming c++0x types (e.g.nullptr).
QMAKE_CXXFLAGS_WARN_ON += -Wno-c++0x-compat
QMAKE_CXXFLAGS += -Wno-c++0x-compat
}
}
}
-
-# Don't warn about OVERRIDE and FINAL, since they are feature-checked anyways
-*clang:!contains(QMAKE_CXXFLAGS, -std=c++11) {
- QMAKE_CXXFLAGS += -Wno-c++11-extensions
- QMAKE_OBJECTIVE_CFLAGS += -Wno-c++11-extensions
-}
--
2.3.7

View File

@ -0,0 +1,39 @@
From d43a963e49956ba772644e9f3448dc3672147f77 Mon Sep 17 00:00:00 2001
From: Daiwei Li <daiweili@suitabletech.com>
Date: Mon, 2 Feb 2015 16:34:27 -0800
Subject: [PATCH 41/68] Fix crash in overdraw and change visualizers
It appears to be possible for node->element()->batch to be NULL
Task-number: QTBUG-43129
Change-Id: If6e4e265a02ee305bf3aa9cad387b7a73648367a
Reviewed-by: Gunnar Sletta <gunnar@sletta.org>
---
src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp b/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp
index dbea0fa..b926697 100644
--- a/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp
+++ b/src/quick/scenegraph/coreapi/qsgbatchrenderer.cpp
@@ -2815,7 +2815,7 @@ void Renderer::visualizeChangesPrepare(Node *n, uint parentChanges)
void Renderer::visualizeChanges(Node *n)
{
- if (n->type() == QSGNode::GeometryNodeType && m_visualizeChanceSet.contains(n)) {
+ if (n->type() == QSGNode::GeometryNodeType && n->element()->batch && m_visualizeChanceSet.contains(n)) {
uint dirty = m_visualizeChanceSet.value(n);
bool tinted = (dirty & QSGNODE_DIRTY_PARENT) != 0;
@@ -2852,7 +2852,7 @@ void Renderer::visualizeChanges(Node *n)
void Renderer::visualizeOverdraw_helper(Node *node)
{
- if (node->type() == QSGNode::GeometryNodeType) {
+ if (node->type() == QSGNode::GeometryNodeType && node->element()->batch) {
VisualizeShader *shader = static_cast<VisualizeShader *>(m_shaderManager->visualizeProgram);
QSGGeometryNode *gn = static_cast<QSGGeometryNode *>(node->sgNode);
--
2.3.7

View File

@ -0,0 +1,73 @@
From c3effc6cd3a66b6c02048d8ad85c7ed3bb3c1463 Mon Sep 17 00:00:00 2001
From: Erik Verbruggen <erik.verbruggen@digia.com>
Date: Wed, 28 Jan 2015 09:34:10 +0100
Subject: [PATCH 43/68] V4: fix ToFixed rounding for 0 fraction digits.
(12.5).toFixed() should return 13, not 12.
Task-number: QTBUG-43885
Task-number: QTBUG-44039
Change-Id: Id2b19641e8c12dd5755d8447508b74567e4a2b9b
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
---
src/qml/jsruntime/qv4numberobject.cpp | 12 +++++++++---
tests/auto/qml/qjsengine/tst_qjsengine.cpp | 13 +++++++++++++
2 files changed, 22 insertions(+), 3 deletions(-)
diff --git a/src/qml/jsruntime/qv4numberobject.cpp b/src/qml/jsruntime/qv4numberobject.cpp
index 227ff14..236091b 100644
--- a/src/qml/jsruntime/qv4numberobject.cpp
+++ b/src/qml/jsruntime/qv4numberobject.cpp
@@ -202,9 +202,15 @@ ReturnedValue NumberPrototype::method_toFixed(CallContext *ctx)
str = QString::fromLatin1("NaN");
else if (qIsInf(v))
str = QString::fromLatin1(v < 0 ? "-Infinity" : "Infinity");
- else if (v < 1.e21)
- str = QString::number(v, 'f', int (fdigits));
- else
+ else if (v < 1.e21) {
+ char buf[100];
+ double_conversion::StringBuilder builder(buf, sizeof(buf));
+ double_conversion::DoubleToStringConverter::EcmaScriptConverter().ToFixed(v, fdigits, &builder);
+ str = QString::fromLatin1(builder.Finalize());
+ // At some point, the 3rd party double-conversion code should be moved to qtcore.
+ // When that's done, we can use:
+// str = QString::number(v, 'f', int (fdigits));
+ } else
return RuntimeHelpers::stringFromNumber(ctx, v)->asReturnedValue();
return ctx->d()->engine->newString(str)->asReturnedValue();
}
diff --git a/tests/auto/qml/qjsengine/tst_qjsengine.cpp b/tests/auto/qml/qjsengine/tst_qjsengine.cpp
index 158ee15..2b7b1fc 100644
--- a/tests/auto/qml/qjsengine/tst_qjsengine.cpp
+++ b/tests/auto/qml/qjsengine/tst_qjsengine.cpp
@@ -174,6 +174,7 @@ private slots:
void privateMethods();
void intConversion_QTBUG43309();
+ void toFixed();
signals:
void testSignal();
@@ -3615,6 +3616,18 @@ void tst_QJSEngine::intConversion_QTBUG43309()
QCOMPARE(result.toNumber(), 25.0);
}
+// QTBUG-44039 and QTBUG-43885:
+void tst_QJSEngine::toFixed()
+{
+ QJSEngine engine;
+ QJSValue result = engine.evaluate(QStringLiteral("(12.5).toFixed()"));
+ QVERIFY(result.isString());
+ QCOMPARE(result.toString(), QStringLiteral("13"));
+ result = engine.evaluate(QStringLiteral("(12.05).toFixed(1)"));
+ QVERIFY(result.isString());
+ QCOMPARE(result.toString(), QStringLiteral("12.1"));
+}
+
QTEST_MAIN(tst_QJSEngine)
#include "tst_qjsengine.moc"
--
2.3.7

View File

@ -0,0 +1,29 @@
From ea70dd579522667e1ba2ffa7f6a39faa13857a72 Mon Sep 17 00:00:00 2001
From: Thiago Macieira <thiago.macieira@intel.com>
Date: Mon, 16 Feb 2015 16:17:21 -0800
Subject: [PATCH 45/68] Fix thread-safety: _POSIX_THREAD_SAFE_FUNCTIONS is in
<unistd.h>
If you don't include it, it isn't defined...
Change-Id: I1a800c709d3543699131ffff13c388ba652761fc
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
---
src/qml/jsruntime/qv4dateobject.cpp | 1 +
1 file changed, 1 insertion(+)
diff --git a/src/qml/jsruntime/qv4dateobject.cpp b/src/qml/jsruntime/qv4dateobject.cpp
index b3c340c..0aa53c4 100644
--- a/src/qml/jsruntime/qv4dateobject.cpp
+++ b/src/qml/jsruntime/qv4dateobject.cpp
@@ -57,6 +57,7 @@
# else
# include "qplatformdefs.h"
# endif
+# include <unistd.h> // for _POSIX_THREAD_SAFE_FUNCTIONS
#endif
using namespace QV4;
--
2.3.7

View File

@ -0,0 +1,34 @@
From 181824f2497b3c874acce0f4a54a5580ee64ea90 Mon Sep 17 00:00:00 2001
From: Julien Brianceau <jbriance@cisco.com>
Date: Mon, 13 Apr 2015 17:00:34 +0200
Subject: [PATCH 58/68] V4 JIT: fix typo in Binop::int32Binop
Change-Id: I68f073ab512b482c9b3b1ad7860f4c759245298e
Reviewed-by: Simon Hausmann <simon.hausmann@theqtcompany.com>
---
src/qml/jit/qv4binop.cpp | 4 ++--
1 file changed, 2 insertions(+), 2 deletions(-)
diff --git a/src/qml/jit/qv4binop.cpp b/src/qml/jit/qv4binop.cpp
index a2d4815..7d6f397 100644
--- a/src/qml/jit/qv4binop.cpp
+++ b/src/qml/jit/qv4binop.cpp
@@ -430,13 +430,13 @@ bool Binop::int32Binop(IR::Expr *leftSource, IR::Expr *rightSource, IR::Expr *ta
as->lshift32(l, Assembler::ScratchRegister, targetReg);
break;
- case IR::OpLShift:
+ case IR::OpRShift:
as->move(r, Assembler::ScratchRegister);
as->and32(Assembler::TrustedImm32(0x1f), Assembler::ScratchRegister);
as->rshift32(l, Assembler::ScratchRegister, targetReg);
break;
- case IR::OpLShift:
+ case IR::OpURShift:
as->move(r, Assembler::ScratchRegister);
as->and32(Assembler::TrustedImm32(0x1f), Assembler::ScratchRegister);
as->storeUInt32(targetReg, target); // IMPORTANT: do NOT do a break here! The stored type of an urshift is different from the other binary operations!
--
2.3.7

View File

@ -0,0 +1,64 @@
From 0d31aa1617c96ed3e3624d77332ea6f13aba1492 Mon Sep 17 00:00:00 2001
From: David Edmundson <davidedmundson@kde.org>
Date: Thu, 23 Apr 2015 15:01:24 +0200
Subject: [PATCH 67/68] Avoid calling potentially pure virtual method
In Qt 5.4 screenChanged is called indirectly from the destructor of
QPlatformScreen. By comparing new values against the oldScreen we call
call virtual methods of QPlatformScreen from it's own destructor which
results in a crash.
This patch simply emits change signals whenever a screen change regardless
of whether the value differs from the previous screen. Arguably less
efficient, but better than crashing.
This fix is not needed in Qt 5.5 where the QPA architecture has changed.
Task-number: QTBUG-45753
Change-Id: Ic155906928855a377add9b21bff9e72b31f4667e
Reviewed-by: Alan Alpert <aalpert@blackberry.com>
---
src/quick/items/qquickscreen.cpp | 27 +++++++++------------------
1 file changed, 9 insertions(+), 18 deletions(-)
diff --git a/src/quick/items/qquickscreen.cpp b/src/quick/items/qquickscreen.cpp
index c4d1407..0900adb 100644
--- a/src/quick/items/qquickscreen.cpp
+++ b/src/quick/items/qquickscreen.cpp
@@ -347,24 +347,15 @@ void QQuickScreenAttached::screenChanged(QScreen *screen)
emit orientationUpdateMaskChanged();
}
- if (!oldScreen || screen->size() != oldScreen->size()) {
- emit widthChanged();
- emit heightChanged();
- }
- if (!oldScreen || screen->name() != oldScreen->name())
- emit nameChanged();
- if (!oldScreen || screen->orientation() != oldScreen->orientation())
- emit orientationChanged();
- if (!oldScreen || screen->primaryOrientation() != oldScreen->primaryOrientation())
- emit primaryOrientationChanged();
- if (!oldScreen || screen->availableVirtualGeometry() != oldScreen->availableVirtualGeometry())
- emit desktopGeometryChanged();
- if (!oldScreen || screen->logicalDotsPerInch() != oldScreen->logicalDotsPerInch())
- emit logicalPixelDensityChanged();
- if (!oldScreen || screen->physicalDotsPerInch() != oldScreen->physicalDotsPerInch())
- emit pixelDensityChanged();
- if (!oldScreen || screen->devicePixelRatio() != oldScreen->devicePixelRatio())
- emit devicePixelRatioChanged();
+ emit widthChanged();
+ emit heightChanged();
+ emit nameChanged();
+ emit orientationChanged();
+ emit primaryOrientationChanged();
+ emit desktopGeometryChanged();
+ emit logicalPixelDensityChanged();
+ emit pixelDensityChanged();
+ emit devicePixelRatioChanged();
connect(screen, SIGNAL(geometryChanged(QRect)),
this, SIGNAL(widthChanged()));
--
2.3.7

View File

@ -13,7 +13,7 @@
Summary: Qt5 - QtDeclarative component
Name: qt5-%{qt_module}
Version: 5.4.1
Release: 3%{?dist}
Release: 4%{?dist}
# See LICENSE.GPL LICENSE.LGPL LGPL_EXCEPTION.txt, for details
License: LGPLv2 with exceptions or GPLv3 with exceptions
@ -24,6 +24,16 @@ Source0: http://download.qt-project.org/development_releases/qt/5.4/%{version}-%
Source0: http://download.qt-project.org/official_releases/qt/5.4/%{version}/submodules/%{qt_module}-opensource-src-%{version}.tar.xz
%endif
## upstream patches
Patch08: 0008-Fix-usage-of-pow-to-C99-standard-compliance.patch
Patch11: 0011-V4-include-alloca-private-header-as-alloca-is-used-u.patch
Patch32: 0032-Update-C-11-warning-logic-from-QtWebKit.patch
Patch41: 0041-Fix-crash-in-overdraw-and-change-visualizers.patch
Patch43: 0043-V4-fix-ToFixed-rounding-for-0-fraction-digits.patch
Patch45: 0045-Fix-thread-safety-_POSIX_THREAD_SAFE_FUNCTIONS-is-in.patch
Patch58: 0058-V4-JIT-fix-typo-in-Binop-int32Binop.patch
Patch67: 0067-Avoid-calling-potentially-pure-virtual-method.patch
# support no_sse2 CONFIG (fedora i686 builds cannot assume -march=pentium4 -msse2 -mfpmath=sse flags, or the JIT that needs them)
# https://codereview.qt-project.org/#change,73710
Patch1: qtdeclarative-opensource-src-5.4.1-no_sse2.patch
@ -75,9 +85,9 @@ Requires: %{name}%{?_isa} = %{version}-%{release}
%prep
%setup -q -n %{qt_module}-opensource-src-%{version}%{?pre:-%{pre}}
%autosetup -p1 -n %{qt_module}-opensource-src-%{version}%{?pre:-%{pre}}
%patch1 -p1 -b .no_sse2
#patch1 -p1 -b .no_sse2
%build
@ -205,6 +215,9 @@ popd
%changelog
* Sat May 02 2015 Rex Dieter <rdieter@fedoraproject.org> 5.4.1-4
- pull in some upstream fixes, for QTBUG-45753/kde-345544 in particular
* Wed Apr 22 2015 Kevin Kofler <Kevin@tigcc.ticalc.org> - 5.4.1-3
- fix non-sse2 support (kde#346244) and optimize sse2 binaries