summaryrefslogtreecommitdiffstats
path: root/tests/auto/tools
diff options
context:
space:
mode:
authorOlivier Goffart <ogoffart@woboq.com>2011-11-15 10:14:23 +0100
committerQt by Nokia <qt-info@nokia.com>2011-11-15 11:53:44 +0100
commit9924a637ccf63a6a002080497a25890edafe492e (patch)
tree55d7e431d345b21230d9042e2bafdd8df0397944 /tests/auto/tools
parenta254611ba152cefb425ca205fde796a7a7810d4f (diff)
moc: fix Q_INVOKABLE returning references
The moc generated code would not compile otherwise Keep Moc::parseFunction and Moc::parseMaybeFunction in sync (the first is used for signals and slots, and the second for normal functions such as Q_INVOKABLE) Last patch that introduced function pointer updated parseFunction but not parseMaybeFunction When a slot return a reference, moc generate code that make the MetaObject system think it is a void, so qt_metacall and invokeMethod do not mess with the return value. But when we want to take the function signature, in the IndexOfMethod call, we need to have the exact return type. Change-Id: I4661218d7ce367ad3934e73929e7d04f0a6dbc09 Reviewed-by: Bradley T. Hughes <bradley.hughes@nokia.com>
Diffstat (limited to 'tests/auto/tools')
-rw-r--r--tests/auto/tools/moc/tst_moc.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/tests/auto/tools/moc/tst_moc.cpp b/tests/auto/tools/moc/tst_moc.cpp
index 6a84eb244a..f3abe9b5ff 100644
--- a/tests/auto/tools/moc/tst_moc.cpp
+++ b/tests/auto/tools/moc/tst_moc.cpp
@@ -373,6 +373,11 @@ public slots:
public:
Q_INVOKABLE void const slotWithSillyConst2() {}
+ Q_INVOKABLE QObject& myInvokableReturningRef()
+ { return *this; }
+ Q_INVOKABLE const QObject& myInvokableReturningConstRef() const
+ { return *this; }
+
// that one however should be fine
public slots:
@@ -530,6 +535,7 @@ private slots:
void privateClass();
void cxx11Enums_data();
void cxx11Enums();
+ void returnRefs();
signals:
void sigWithUnsignedArg(unsigned foo);
@@ -1687,6 +1693,16 @@ void tst_Moc::cxx11Enums()
}
}
+void tst_Moc::returnRefs()
+{
+ TestClass tst;
+ const QMetaObject *mobj = tst.metaObject();
+ QVERIFY(mobj->indexOfMethod("myInvokableReturningRef()") != -1);
+ QVERIFY(mobj->indexOfMethod("myInvokableReturningConstRef()") != -1);
+ // Those two functions are copied from the qscriptextqobject test in qtscript
+ // they used to cause miscompilation of the moc generated file.
+}
+
QTEST_APPLESS_MAIN(tst_Moc)
#include "tst_moc.moc"