summaryrefslogtreecommitdiffstats
path: root/tests/auto/tools/moc/tst_moc.cpp
diff options
context:
space:
mode:
authorMårten Nordheim <marten.nordheim@qt.io>2020-04-23 15:32:32 +0200
committerMårten Nordheim <marten.nordheim@qt.io>2021-05-04 01:39:48 +0200
commit12b8283f899ebcf401d974927314b9531334a56e (patch)
tree823f5266f1f047507e46c2f550c57a2383ef6277 /tests/auto/tools/moc/tst_moc.cpp
parente3e070e87b3a8036f7200755ba32b57437304ee6 (diff)
Moc: parse trailing return type
Pick-to: 5.15 6.1 Fixes: QTBUG-71123 Change-Id: I1c3749f0892fddcc433c9afcb1d6d7c30c97c9d9 Reviewed-by: Fabian Kosmale <fabian.kosmale@qt.io>
Diffstat (limited to 'tests/auto/tools/moc/tst_moc.cpp')
-rw-r--r--tests/auto/tools/moc/tst_moc.cpp38
1 files changed, 38 insertions, 0 deletions
diff --git a/tests/auto/tools/moc/tst_moc.cpp b/tests/auto/tools/moc/tst_moc.cpp
index 110b6b2d05..3c59502bf6 100644
--- a/tests/auto/tools/moc/tst_moc.cpp
+++ b/tests/auto/tools/moc/tst_moc.cpp
@@ -63,6 +63,7 @@
#include "cxx11-enums.h"
#include "cxx11-final-classes.h"
#include "cxx11-explicit-override-control.h"
+#include "cxx11-trailing-return.h"
#include "parse-defines.h"
#include "related-metaobjects-in-namespaces.h"
@@ -700,6 +701,7 @@ private slots:
void privateClass();
void cxx11Enums_data();
void cxx11Enums();
+ void cxx11TrailingReturn();
void returnRefs();
void memberProperties_data();
void memberProperties();
@@ -2231,6 +2233,30 @@ void tst_Moc::warnings_data()
<< QString()
<< QString("standard input:2:1: error: Plugin Metadata file \"does.not.exists\" does not exist. Declaration will be ignored");
+ QTest::newRow("Auto-declared, missing trailing return")
+ << QByteArray("class X { \n public slots: \n auto fun() { return 1; } };")
+ << QStringList()
+ << 1
+ << QString()
+ << QString("standard input:3:1: error: Function declared with auto as return type but missing trailing return type. Return type deduction is not supported.");
+
+ QTest::newRow("Auto-declared, volatile auto as trailing return type")
+ << QByteArray("class X { \n public slots: \n auto fun() -> volatile auto { return 1; } };")
+ << QStringList()
+ << 1
+ << QString()
+ << QString("standard input:3:1: error: Function declared with auto as return type but missing trailing return type. Return type deduction is not supported.");
+
+ // We don't currently support the decltype keyword, so it's not the same error as above.
+ // The test is just here to make sure this keeps generating an error until return type deduction
+ // is supported.
+ QTest::newRow("Auto-declared, decltype in trailing return type")
+ << QByteArray("class X { \n public slots: \n auto fun() -> decltype(0+1) { return 1; } };")
+ << QStringList()
+ << 1
+ << QString()
+ << QString("standard input:3:1: error: Parse error at \"decltype\"");
+
#ifdef Q_OS_UNIX // Limit to Unix because the error message is platform-dependent
QTest::newRow("Q_PLUGIN_METADATA: unreadable file")
<< QByteArray("class X { \n Q_PLUGIN_METADATA(FILE \".\") \n };")
@@ -2359,6 +2385,18 @@ void tst_Moc::cxx11Enums()
QCOMPARE(meta->enumerator(idx).isScoped(), isScoped);
}
+void tst_Moc::cxx11TrailingReturn()
+{
+ CXX11TrailingReturn retClass;
+ const QMetaObject *mobj = retClass.metaObject();
+ QVERIFY(mobj->indexOfSlot("fun()") != -1);
+ QVERIFY(mobj->indexOfSlot("arguments(int,char)") != -1);
+ QVERIFY(mobj->indexOfSlot("inlineFunc(int)") != -1);
+ QVERIFY(mobj->indexOfSlot("constRefReturn()") != -1);
+ QVERIFY(mobj->indexOfSlot("constConstRefReturn()") != -1);
+ QVERIFY(mobj->indexOfSignal("trailingSignalReturn(int)") != -1);
+}
+
void tst_Moc::returnRefs()
{
TestClass tst;