summaryrefslogtreecommitdiffstats
path: root/src/tools/moc
diff options
context:
space:
mode:
authorThiago Macieira <thiago.macieira@intel.com>2022-06-18 08:41:42 -0700
committerThiago Macieira <thiago.macieira@intel.com>2022-06-22 13:03:17 -0700
commit116d8f987bfbb0ec1744fe6c2989f8f2a5756aba (patch)
treefbac06fdbd952ab3cfc5e6677125c42e9549bb3c /src/tools/moc
parent9959cf60d360a43c87c77f44a7d17e2fae25a303 (diff)
moc: add Q_CONSTINIT to the static const variables we emit
The macro was added to Qt 6.4, so we define it in each moc output to empty if it wasn't previously defined. Thus, moc retains compatibility with older Qt versions. Pick-to: 6.4 Change-Id: Id0fb9ab0089845ee8843fffd16f9c1539fa0368f Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io> Reviewed-by: Milian Wolff <milian.wolff@kdab.com>
Diffstat (limited to 'src/tools/moc')
-rw-r--r--src/tools/moc/generator.cpp12
-rw-r--r--src/tools/moc/moc.cpp6
2 files changed, 13 insertions, 5 deletions
diff --git a/src/tools/moc/generator.cpp b/src/tools/moc/generator.cpp
index b80e013ba4..7c0d579df4 100644
--- a/src/tools/moc/generator.cpp
+++ b/src/tools/moc/generator.cpp
@@ -257,7 +257,7 @@ void Generator::generateCode()
" uint(sizeof(qt_meta_stringdata_%s_t::offsetsAndSizes) + ofs), len \n",
qualifiedClassNameIdentifier.constData());
- fprintf(out, "static const qt_meta_stringdata_%s_t qt_meta_stringdata_%s = {\n",
+ fprintf(out, "Q_CONSTINIT static const qt_meta_stringdata_%s_t qt_meta_stringdata_%s = {\n",
qualifiedClassNameIdentifier.constData(), qualifiedClassNameIdentifier.constData());
fprintf(out, " {");
{
@@ -329,7 +329,7 @@ void Generator::generateCode()
//
int index = MetaObjectPrivateFieldCount;
- fprintf(out, "static const uint qt_meta_data_%s[] = {\n", qualifiedClassNameIdentifier.constData());
+ fprintf(out, "Q_CONSTINIT static const uint qt_meta_data_%s[] = {\n", qualifiedClassNameIdentifier.constData());
fprintf(out, "\n // content:\n");
fprintf(out, " %4d, // revision\n", int(QMetaObjectPrivate::OutputRevision));
fprintf(out, " %4d, // classname\n", stridx(cdef->qualified));
@@ -506,7 +506,7 @@ void Generator::generateCode()
//
if (!extraList.isEmpty()) {
- fprintf(out, "static const QMetaObject::SuperData qt_meta_extradata_%s[] = {\n",
+ fprintf(out, "Q_CONSTINIT static const QMetaObject::SuperData qt_meta_extradata_%s[] = {\n",
qualifiedClassNameIdentifier.constData());
for (int i = 0; i < extraList.count(); ++i) {
fprintf(out, " QMetaObject::SuperData::link<%s::staticMetaObject>(),\n", extraList.at(i).constData());
@@ -517,7 +517,9 @@ void Generator::generateCode()
//
// Finally create and initialize the static meta object
//
- fprintf(out, "const QMetaObject %s::staticMetaObject = { {\n", cdef->qualified.constData());
+ fprintf(out, "%sconst QMetaObject %s::staticMetaObject = { {\n",
+ // ### FIXME: gadgets are not constinit on Windows!
+ cdef->hasQGadget ? "" : "Q_CONSTINIT ", cdef->qualified.constData());
if (isQObject)
fprintf(out, " nullptr,\n");
@@ -1612,7 +1614,7 @@ void Generator::generatePluginMetaData()
// compatibility with Qt 6.0-6.2
fprintf(out, "#else\nQT_PLUGIN_METADATA_SECTION\n"
- "static constexpr unsigned char qt_pluginMetaData_%s[] = {\n"
+ "Q_CONSTINIT static constexpr unsigned char qt_pluginMetaData_%s[] = {\n"
" 'Q', 'T', 'M', 'E', 'T', 'A', 'D', 'A', 'T', 'A', ' ', '!',\n"
" // metadata version, Qt version, architectural requirements\n"
" 0, QT_VERSION_MAJOR, QT_VERSION_MINOR, qPluginArchRequirements(),",
diff --git a/src/tools/moc/moc.cpp b/src/tools/moc/moc.cpp
index 5ea79a4280..e931e32f4e 100644
--- a/src/tools/moc/moc.cpp
+++ b/src/tools/moc/moc.cpp
@@ -1103,6 +1103,12 @@ void Moc::generate(FILE *out, FILE *jsonOutput)
" much.)\"\n", QT_VERSION_STR);
fprintf(out, "#endif\n\n");
+#if QT_VERSION <= QT_VERSION_CHECK(7, 0, 0)
+ fprintf(out, "#ifndef Q_CONSTINIT\n"
+ "#define Q_CONSTINIT\n"
+ "#endif\n\n");
+#endif
+
fprintf(out, "QT_BEGIN_MOC_NAMESPACE\n");
fprintf(out, "QT_WARNING_PUSH\n");
fprintf(out, "QT_WARNING_DISABLE_DEPRECATED\n");