+128
@@ -0,0 +1,128 @@
|
||||
From e5d9bcf70ae704569e091ee0ee93561e01fefe38 Mon Sep 17 00:00:00 2001
|
||||
From: Ulf Hermann <ulf.hermann@qt.io>
|
||||
Date: Fri, 11 Apr 2025 17:00:52 +0200
|
||||
Subject: [PATCH] QmlCompiler: Error out on unstorable types
|
||||
|
||||
We already do this for return types, but it's fatal on any type.
|
||||
|
||||
Fixes: QTBUG-135342
|
||||
Change-Id: I7aee2a19ffcd39d2707eceb34b5073057d8b5ebb
|
||||
Reviewed-by: Olivier De Cannière <olivier.decanniere@qt.io>
|
||||
(cherry picked from commit 0bd329a0b42b4c8c3bf77c201f3d8b187467ef02)
|
||||
---
|
||||
|
||||
diff --git a/src/qmlcompiler/qqmljsstorageinitializer.cpp b/src/qmlcompiler/qqmljsstorageinitializer.cpp
|
||||
index 4123716..60f46fa 100644
|
||||
--- a/src/qmlcompiler/qqmljsstorageinitializer.cpp
|
||||
+++ b/src/qmlcompiler/qqmljsstorageinitializer.cpp
|
||||
@@ -35,17 +35,25 @@
|
||||
if (!content.isValid() || !content.storage().isNull())
|
||||
return;
|
||||
|
||||
- const QQmlJSRegisterContent original = m_typeResolver->original(content);
|
||||
- const QQmlJSScope::ConstPtr originalStored
|
||||
- = m_typeResolver->storedType(original.containedType());
|
||||
- m_pool->storeType(content, originalStored);
|
||||
+ const QQmlJSScope::ConstPtr original = m_typeResolver->originalContainedType(content);
|
||||
+ if (const QQmlJSScope::ConstPtr originalStored = m_typeResolver->storedType(original)) {
|
||||
+ m_pool->storeType(content, originalStored);
|
||||
+ } else {
|
||||
+ addError(QStringLiteral("Cannot store type %1.").arg(original->internalName()));
|
||||
+ return;
|
||||
+ }
|
||||
|
||||
- const QQmlJSScope::ConstPtr adjustedStored
|
||||
- = m_typeResolver->storedType(content.containedType());
|
||||
+ const QQmlJSScope::ConstPtr contentContained = content.containedType();
|
||||
+ const QQmlJSScope::ConstPtr adjustedStored = m_typeResolver->storedType(contentContained);
|
||||
+ if (!adjustedStored) {
|
||||
+ addError(QStringLiteral("Cannot store type %1.")
|
||||
+ .arg(contentContained->internalName()));
|
||||
+ return;
|
||||
+ }
|
||||
|
||||
if (!m_typeResolver->adjustTrackedType(content.storage(), adjustedStored)) {
|
||||
- addError(QStringLiteral("Cannot adjust stored type for %1.")
|
||||
- .arg(content.containedType()->internalName()));
|
||||
+ addError(QStringLiteral("Cannot adjust stored type for %1 to %2.")
|
||||
+ .arg(contentContained->internalName(), adjustedStored->internalName()));
|
||||
}
|
||||
};
|
||||
|
||||
diff --git a/tests/auto/qml/qmlcppcodegen/data/CMakeLists.txt b/tests/auto/qml/qmlcppcodegen/data/CMakeLists.txt
|
||||
index 4661211..cc92631 100644
|
||||
--- a/tests/auto/qml/qmlcppcodegen/data/CMakeLists.txt
|
||||
+++ b/tests/auto/qml/qmlcppcodegen/data/CMakeLists.txt
|
||||
@@ -308,6 +308,7 @@
|
||||
undefinedToDouble.qml
|
||||
unknownAttached.qml
|
||||
unknownParameter.qml
|
||||
+ unknownUnderlyingType.qml
|
||||
unstoredUndefined.qml
|
||||
unusedAttached.qml
|
||||
urlString.qml
|
||||
diff --git a/tests/auto/qml/qmlcppcodegen/data/enumproblems.h b/tests/auto/qml/qmlcppcodegen/data/enumproblems.h
|
||||
index 36f97be..9c98789 100644
|
||||
--- a/tests/auto/qml/qmlcppcodegen/data/enumproblems.h
|
||||
+++ b/tests/auto/qml/qmlcppcodegen/data/enumproblems.h
|
||||
@@ -116,4 +116,19 @@
|
||||
Q_ENUM(EType)
|
||||
};
|
||||
|
||||
+using uint_myown_t = decltype(75 - 12);
|
||||
+
|
||||
+class UnknownUnderlyingType : public QObject
|
||||
+{
|
||||
+ Q_OBJECT
|
||||
+ QML_ELEMENT
|
||||
+
|
||||
+public:
|
||||
+ enum Bla : uint_myown_t {
|
||||
+ Yo = 11,
|
||||
+ };
|
||||
+ Q_ENUM(Bla)
|
||||
+};
|
||||
+
|
||||
+
|
||||
#endif // ENUMPROBLEMS_H
|
||||
diff --git a/tests/auto/qml/qmlcppcodegen/data/unknownUnderlyingType.qml b/tests/auto/qml/qmlcppcodegen/data/unknownUnderlyingType.qml
|
||||
new file mode 100644
|
||||
index 0000000..8e43828
|
||||
--- /dev/null
|
||||
+++ b/tests/auto/qml/qmlcppcodegen/data/unknownUnderlyingType.qml
|
||||
@@ -0,0 +1,6 @@
|
||||
+import QtQml
|
||||
+import TestTypes as FB
|
||||
+
|
||||
+QtObject {
|
||||
+ property var foo: FB.UnknownUnderlyingType.Yo
|
||||
+}
|
||||
diff --git a/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp b/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp
|
||||
index f44cae1..5f701d7 100644
|
||||
--- a/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp
|
||||
+++ b/tests/auto/qml/qmlcppcodegen/tst_qmlcppcodegen.cpp
|
||||
@@ -269,6 +269,7 @@
|
||||
void undefinedToDouble();
|
||||
void unknownAttached();
|
||||
void unknownParameter();
|
||||
+ void unknownUnderlyingType();
|
||||
void unstoredUndefined();
|
||||
void unusedAttached();
|
||||
void urlString();
|
||||
@@ -5466,6 +5467,16 @@
|
||||
QCOMPARE(object->property("cppProp").toInt(), 18);
|
||||
}
|
||||
|
||||
+void tst_QmlCppCodegen::unknownUnderlyingType()
|
||||
+{
|
||||
+ QQmlEngine engine;
|
||||
+ QQmlComponent component(&engine, QUrl(u"qrc:/qt/qml/TestTypes/unknownUnderlyingType.qml"_s));
|
||||
+ QVERIFY2(!component.isError(), component.errorString().toUtf8());
|
||||
+ QScopedPointer<QObject> object(component.create());
|
||||
+ QVERIFY(!object.isNull());
|
||||
+ QCOMPARE(object->property("foo").toInt(), 11);
|
||||
+}
|
||||
+
|
||||
void tst_QmlCppCodegen::unstoredUndefined()
|
||||
{
|
||||
QQmlEngine engine;
|
||||
@@ -11,26 +11,26 @@
|
||||
<Summary>Classes for QML and JavaScript languages</Summary>
|
||||
<Description>Classes for QML and JavaScript languages</Description>
|
||||
<License>LGPLv2.1-linking-exception</License>
|
||||
<Archive sha1sum="38a8ab99beb0aa6c8443ad466248f7dd4a020da8" type="tarxz">https://download.qt.io/official_releases/qt/6.8/6.8.2/submodules/qtdeclarative-everywhere-src-6.8.2.tar.xz</Archive>
|
||||
<Archive sha1sum="aab45329a3a1c1f5b64c8696573fb1481892afa3" type="tarxz">https://download.qt.io/official_releases/qt/6.9/6.9.0/submodules/qtdeclarative-everywhere-src-6.9.0.tar.xz</Archive>
|
||||
<BuildDependencies>
|
||||
<Dependency>ninja</Dependency>
|
||||
<Dependency>cmake</Dependency>
|
||||
<Dependency>python3</Dependency>
|
||||
<Dependency>libxkbcommon-devel</Dependency>
|
||||
<Dependency versionFrom="13.0.4">mesa-devel</Dependency>
|
||||
<Dependency versionFrom="6.8.2">qt6-sql-sqlite</Dependency>
|
||||
<Dependency versionFrom="6.8.2">qt6-sql-mysql</Dependency>
|
||||
<Dependency versionFrom="6.8.2">qt6-sql-odbc</Dependency>
|
||||
<Dependency versionFrom="6.8.2">qt6-svg-devel</Dependency>
|
||||
<Dependency versionFrom="6.8.2">qt6-base-devel</Dependency>
|
||||
<Dependency versionFrom="6.8.2">qt6-sql-postgresql</Dependency>
|
||||
<Dependency versionFrom="6.9.0">qt6-sql-sqlite</Dependency>
|
||||
<Dependency versionFrom="6.9.0">qt6-sql-mysql</Dependency>
|
||||
<Dependency versionFrom="6.9.0">qt6-sql-odbc</Dependency>
|
||||
<Dependency versionFrom="6.9.0">qt6-svg-devel</Dependency>
|
||||
<Dependency versionFrom="6.9.0">qt6-base-devel</Dependency>
|
||||
<Dependency versionFrom="6.9.0">qt6-sql-postgresql</Dependency>
|
||||
<!--Dependency versionFrom="6.4.0">qt6-svg-devel</Dependency-->
|
||||
<Dependency versionFrom="6.8.2">qt6-imageformats</Dependency>
|
||||
<Dependency versionFrom="6.8.2">qt6-shadertools-devel</Dependency>
|
||||
<Dependency versionFrom="6.8.2">qt6-languageserver-devel</Dependency>
|
||||
<Dependency versionFrom="6.9.0">qt6-imageformats</Dependency>
|
||||
<Dependency versionFrom="6.9.0">qt6-shadertools-devel</Dependency>
|
||||
<Dependency versionFrom="6.9.0">qt6-languageserver-devel</Dependency>
|
||||
</BuildDependencies>
|
||||
<Patches>
|
||||
<!-- <Patch level="1">qt_kde.patch</Patch> -->
|
||||
<Patch level="1">qtdeclarative-qmlcompiler-error-out-on-unstorable-types.patch</Patch>
|
||||
</Patches>
|
||||
</Source>
|
||||
|
||||
@@ -39,11 +39,11 @@
|
||||
<RuntimeDependencies>
|
||||
<Dependency>libgcc</Dependency>
|
||||
<!-- <Dependency>libglvnd</Dependency> -->
|
||||
<Dependency versionFrom="6.8.2">qt6-base</Dependency>
|
||||
<Dependency versionFrom="6.8.2">qt6-svg</Dependency>
|
||||
<Dependency versionFrom="6.8.2">qt6-languageserver</Dependency>
|
||||
<Dependency versionFrom="6.9.0">qt6-base</Dependency>
|
||||
<Dependency versionFrom="6.9.0">qt6-svg</Dependency>
|
||||
<Dependency versionFrom="6.9.0">qt6-languageserver</Dependency>
|
||||
<Dependency>libglvnd</Dependency>
|
||||
<!-- <Dependency versionFrom="6.8.2">qt6-xmlpatterns</Dependency> -->
|
||||
<!-- <Dependency versionFrom="6.9.0">qt6-xmlpatterns</Dependency> -->
|
||||
</RuntimeDependencies>
|
||||
<Files>
|
||||
<Path fileType="library">/usr/lib</Path>
|
||||
@@ -64,7 +64,7 @@
|
||||
<Path fileType="header">/usr/include/qt6</Path>
|
||||
</Files>
|
||||
<RuntimeDependencies>
|
||||
<Dependency versionFrom="6.8.2">qt6-base-devel</Dependency>
|
||||
<Dependency versionFrom="6.9.0">qt6-base-devel</Dependency>
|
||||
<Dependency release="current">qt6-declarative</Dependency>
|
||||
</RuntimeDependencies>
|
||||
</Package>
|
||||
@@ -72,7 +72,7 @@
|
||||
<!--Package>
|
||||
<Name>qt6-declarative-docs</Name>
|
||||
<RuntimeDependencies>
|
||||
<Dependency versionFrom="6.8.2">qt6-base</Dependency>
|
||||
<Dependency versionFrom="6.9.0">qt6-base</Dependency>
|
||||
</RuntimeDependencies>
|
||||
<Files>
|
||||
<Path fileType="doc">/usr/share/doc/qt6</Path>
|
||||
@@ -80,6 +80,13 @@
|
||||
</Package-->
|
||||
|
||||
<History>
|
||||
<Update release="14">
|
||||
<Date>2025-05-12</Date>
|
||||
<Version>6.9.0</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Pisi Linux Community</Name>
|
||||
<Email>admin@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="13">
|
||||
<Date>2025-02-01</Date>
|
||||
<Version>6.8.2</Version>
|
||||
|
||||
@@ -11,20 +11,20 @@
|
||||
<Summary>Provides access to hardware and virtual serial ports</Summary>
|
||||
<Description>Provides access to hardware and virtual serial ports</Description>
|
||||
<License>LGPLv2.1-linking-exception</License>
|
||||
<Archive sha1sum="6fdf622d07a86722a481e79cc3165049b88b1fd3" type="tarxz">https://download.qt.io/official_releases/qt/6.8/6.8.2/submodules/qtserialport-everywhere-src-6.8.2.tar.xz</Archive>
|
||||
<Archive sha1sum="2642cf0906508575c4166e3d76a6d7c62a7a0470" type="tarxz">https://download.qt.io/official_releases/qt/6.9/6.9.0/submodules/qtserialport-everywhere-src-6.9.0.tar.xz</Archive>
|
||||
<BuildDependencies>
|
||||
<Dependency>ninja</Dependency>
|
||||
<Dependency>cmake</Dependency>
|
||||
<Dependency>eudev-devel</Dependency>
|
||||
<Dependency versionFrom="6.8.2">qt6-base-devel</Dependency>
|
||||
<Dependency versionFrom="6.8.2">qt6-sql-sqlite</Dependency>
|
||||
<Dependency versionFrom="6.9.0">qt6-base-devel</Dependency>
|
||||
<Dependency versionFrom="6.9.0">qt6-sql-sqlite</Dependency>
|
||||
</BuildDependencies>
|
||||
</Source>
|
||||
|
||||
<Package>
|
||||
<Name>qt6-serialport</Name>
|
||||
<RuntimeDependencies>
|
||||
<Dependency versionFrom="6.8.2">qt6-base</Dependency>
|
||||
<Dependency versionFrom="6.9.0">qt6-base</Dependency>
|
||||
<Dependency versionFrom="3.2.1">eudev</Dependency>
|
||||
<Dependency>libgcc</Dependency>
|
||||
</RuntimeDependencies>
|
||||
@@ -39,7 +39,7 @@
|
||||
<Package>
|
||||
<Name>qt6-serialport-devel</Name>
|
||||
<RuntimeDependencies>
|
||||
<Dependency versionFrom="6.8.2">qt6-base-devel</Dependency>
|
||||
<Dependency versionFrom="6.9.0">qt6-base-devel</Dependency>
|
||||
<Dependency release="current">qt6-serialport</Dependency>
|
||||
</RuntimeDependencies>
|
||||
<Files>
|
||||
@@ -49,6 +49,13 @@
|
||||
</Package>
|
||||
|
||||
<History>
|
||||
<Update release="14">
|
||||
<Date>2025-05-12</Date>
|
||||
<Version>6.9.0</Version>
|
||||
<Comment>Version bump.</Comment>
|
||||
<Name>Pisi Linux Community</Name>
|
||||
<Email>admin@pisilinux.org</Email>
|
||||
</Update>
|
||||
<Update release="13">
|
||||
<Date>2025-02-01</Date>
|
||||
<Version>6.8.2</Version>
|
||||
|
||||
Reference in New Issue
Block a user