moc: Do not fail to compile meta-methods containing non-const ref types
Amends 2d0c31e7d92a3e9df4ce2b9c1d41b94fb12735fc. We were using MetaTypeDecay in qTryMetaTypeInterfaceForType; but that is not used by moc when complete types are enforced. Change qt_metaTypeArray to also use qTryMetaTypeInterfaceForType, so that the code path for "force complete types"[0] and the normal one do not diverge. [0] Most easily enabled by using one of the QML type registration macros. Fixes: QTBUG-106672 Change-Id: I9bf14873d1d0c4127a676643f7e8eb77f6e42dc8 Reviewed-by: Volker Hilsheimer <volker.hilsheimer@qt.io> (cherry picked from commit a8ccd9cd848be9aafd2d07d83a8897dc8b2a0cb3) Reviewed-by: Qt Cherry-pick Bot <cherrypick_bot@qt-project.org>
This commit is contained in:
parent
c265315931
commit
bc7e633855
@ -2512,7 +2512,14 @@ constexpr const QMetaObject *QMetaType::metaObject() const
|
||||
|
||||
template<typename... T>
|
||||
constexpr const QtPrivate::QMetaTypeInterface *const qt_metaTypeArray[] = {
|
||||
QtPrivate::qMetaTypeInterfaceForType<T>()...
|
||||
/*
|
||||
Unique in qTryMetaTypeInterfaceForType does not have to be unique here
|
||||
as we require _all_ types here to be actually complete.
|
||||
We just want to have the additional type processing that exist in
|
||||
QtPrivate::qTryMetaTypeInterfaceForType as opposed to the normal
|
||||
QtPrivate::qMetaTypeInterfaceForType used in QMetaType::fromType
|
||||
*/
|
||||
QtPrivate::qTryMetaTypeInterfaceForType<void, QtPrivate::TypeAndForceComplete<T, std::true_type>>()...
|
||||
};
|
||||
|
||||
constexpr const char *QMetaType::name() const
|
||||
|
19
tests/auto/tools/moc/qmlmacro.h
Normal file
19
tests/auto/tools/moc/qmlmacro.h
Normal file
@ -0,0 +1,19 @@
|
||||
// Copyright (C) 2022 The Qt Company Ltd.
|
||||
// SPDX-License-Identifier: LicenseRef-Qt-Commercial OR GPL-3.0-only WITH Qt-GPL-exception-1.0
|
||||
|
||||
|
||||
#ifndef QMlMACRO_H
|
||||
#define QMlMACRO_H
|
||||
|
||||
#include <QObject>
|
||||
#include <QByteArray>
|
||||
|
||||
struct QmlMacro : QObject
|
||||
{
|
||||
Q_OBJECT
|
||||
Q_CLASSINFO("QML.Element", "auto")
|
||||
|
||||
signals:
|
||||
void f(QByteArray &b);
|
||||
};
|
||||
#endif
|
@ -56,6 +56,8 @@
|
||||
#include "fwdclass2.h"
|
||||
#include "fwdclass3.h"
|
||||
|
||||
#include "qmlmacro.h"
|
||||
|
||||
#ifdef Q_MOC_RUN
|
||||
// check that moc can parse these constructs, they are being used in Windows winsock2.h header
|
||||
#define STRING_HASH_HASH(x) ("foo" ## x ## "bar")
|
||||
|
Loading…
x
Reference in New Issue
Block a user