From 59065a85301376f52e58f944ceaad0e5baaeae64 Mon Sep 17 00:00:00 2001 From: Thiago Macieira Date: Sun, 31 Jul 2022 09:14:35 -0700 Subject: [PATCH] QMetaType: fix void* parameters Commit 3695b35dfc427f274e55f8e2a6a9876deb52f1b4 accounted for pointer to other incomplete types, but pointer-to-void was missed. This caused an inconsistency in the stored metatype for void*, which is a built-in type (QMetaType::VoidStar) but no pointer was recorded. The test in tst_moc hadn't been enabled because the functions in questions weren't extracted by moc. That is fixed in this commit. Change-Id: I6f936da6f6e84d649f70fffd1706f613517a75fb Reviewed-by: Fabian Kosmale --- src/corelib/kernel/qmetatype.h | 4 +- tests/auto/tools/moc/allmocs_baseline_in.json | 72 +++++++++++++++++++ tests/auto/tools/moc/pointery_to_incomplete.h | 6 +- 3 files changed, 79 insertions(+), 3 deletions(-) diff --git a/src/corelib/kernel/qmetatype.h b/src/corelib/kernel/qmetatype.h index 77bb68e218..3be6a2099c 100644 --- a/src/corelib/kernel/qmetatype.h +++ b/src/corelib/kernel/qmetatype.h @@ -2547,9 +2547,9 @@ constexpr const QMetaTypeInterface *qTryMetaTypeInterfaceForType() using Ty = typename MetatypeDecay::type; using Tz = qRemovePointerLike_t; - if constexpr (std::is_void_v) { + if constexpr (std::is_void_v) { // early out to avoid expanding the rest of the templates - return &QMetaTypeInterfaceWrapper::metaType; + return &QMetaTypeInterfaceWrapper::metaType; } else if constexpr (ForceComplete::value) { checkTypeIsSuitableForMetaType(); return &QMetaTypeInterfaceWrapper::metaType; diff --git a/tests/auto/tools/moc/allmocs_baseline_in.json b/tests/auto/tools/moc/allmocs_baseline_in.json index d362f94c7b..e1c6a5d7d8 100644 --- a/tests/auto/tools/moc/allmocs_baseline_in.json +++ b/tests/auto/tools/moc/allmocs_baseline_in.json @@ -1671,6 +1671,78 @@ "className": "TestPointeeCanBeIncomplete", "object": true, "qualifiedClassName": "TestPointeeCanBeIncomplete", + "slots": [ + { + "access": "public", + "arguments": [ + { + "type": "QPointer" + } + ], + "name": "setProp1", + "returnType": "void" + }, + { + "access": "public", + "arguments": [ + { + "type": "QSharedPointer" + } + ], + "name": "setProp2", + "returnType": "void" + }, + { + "access": "public", + "arguments": [ + { + "type": "QWeakPointer" + } + ], + "name": "setProp3", + "returnType": "void" + }, + { + "access": "public", + "arguments": [ + { + "type": "FwdClass*" + } + ], + "name": "setProp4", + "returnType": "void" + }, + { + "access": "public", + "arguments": [ + { + "type": "const FwdClass*" + } + ], + "name": "setProp5", + "returnType": "void" + }, + { + "access": "public", + "arguments": [ + { + "type": "void*" + } + ], + "name": "setProp6", + "returnType": "void" + }, + { + "access": "public", + "arguments": [ + { + "type": "const void*" + } + ], + "name": "setProp7", + "returnType": "void" + } + ], "superClasses": [ { "access": "public", diff --git a/tests/auto/tools/moc/pointery_to_incomplete.h b/tests/auto/tools/moc/pointery_to_incomplete.h index 38dea13340..46cd04d763 100644 --- a/tests/auto/tools/moc/pointery_to_incomplete.h +++ b/tests/auto/tools/moc/pointery_to_incomplete.h @@ -14,10 +14,14 @@ class FwdClass; class TestPointeeCanBeIncomplete : public QObject { Q_OBJECT -public: +public slots: void setProp1(QPointer) {} void setProp2(QSharedPointer) {} void setProp3(const QWeakPointer &) {} + void setProp4(FwdClass *) {} + void setProp5(const FwdClass *) {} + void setProp6(void *) {} + void setProp7(const void *) {} }; #endif // POINTERY_TO_INCOMPLETE_H