aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSergio Martins <smartins@kde.org>2018-03-28 22:13:54 +0100
committerSergio Martins <smartins@kde.org>2018-03-28 22:13:54 +0100
commita7d808a87d4f120505edffab47ae9128154f3beb (patch)
treec72eb2191814d995a939dd83061c29208acc20d5
parenta5ff4acabe83ee0e9fde223d06db5b79602e7f90 (diff)
connect-non-signal: Make it know about QOverload
BUG: 392441
-rw-r--r--src/QtUtils.cpp6
-rw-r--r--tests/connect-non-signal/main.cpp8
2 files changed, 12 insertions, 2 deletions
diff --git a/src/QtUtils.cpp b/src/QtUtils.cpp
index cfa5042a..bba757d1 100644
--- a/src/QtUtils.cpp
+++ b/src/QtUtils.cpp
@@ -310,7 +310,7 @@ CXXMethodDecl *clazy::pmfFromUnary(Expr *expr)
if (!context)
return nullptr;
- CXXRecordDecl *record = dyn_cast<CXXRecordDecl>(context);
+ auto record = dyn_cast<CXXRecordDecl>(context);
if (!record)
return nullptr;
@@ -321,6 +321,10 @@ CXXMethodDecl *clazy::pmfFromUnary(Expr *expr)
return pmfFromUnary(dyn_cast<UnaryOperator>(call->getArg(1)));
} else if (auto staticCast = dyn_cast<CXXStaticCastExpr>(expr)) {
return pmfFromUnary(staticCast->getSubExpr());
+ } else if (auto callexpr = dyn_cast<CallExpr>(expr)) {
+ // QOverload case, go deeper one level to get to the UnaryOperator
+ if (callexpr->getNumArgs() == 1)
+ return pmfFromUnary(callexpr->getArg(0));
}
return nullptr;
diff --git a/tests/connect-non-signal/main.cpp b/tests/connect-non-signal/main.cpp
index e41c5c6f..ecd4c13a 100644
--- a/tests/connect-non-signal/main.cpp
+++ b/tests/connect-non-signal/main.cpp
@@ -1,5 +1,5 @@
#include <QtCore/QObject>
-
+#include <QtWidgets/QComboBox>
class MyObj;
class MyObj : public QObject
{
@@ -51,3 +51,9 @@ void test3()
QObject::connect(o, &MyDerivedObj::myVirtualSig, o, &MyObj::foo); // Warn, overridden but not a signal now
QObject::connect(o, &MyObj::myVirtualSig, o, &MyObj::foo); // OK
}
+
+void test_bug392441()
+{
+ QComboBox *combo;
+ QObject::connect(combo, QOverload<const QString &>::of(&QComboBox::currentIndexChanged), [] (QString) {}); // OK
+}