aboutsummaryrefslogtreecommitdiffstats
path: root/tests/unneeded-cast
diff options
context:
space:
mode:
authorSergio Martins <smartins@kde.org>2018-02-25 17:30:01 +0000
committerSergio Martins <smartins@kde.org>2018-02-25 21:45:42 +0000
commitd10f7306d23b9b3e6e696565450a33062548684a (patch)
tree82ae11cb7d1122db3d4e7e2ff45b5bda3f41d827 /tests/unneeded-cast
parent8d26cc40fbf69b01dee7fe1f5b9e4c694585b847 (diff)
unneeded-cast: Revamp this check a bit
Now warns of unneeded qobject-casts and static_casts too. Like casting to itself, or casting to base class.
Diffstat (limited to 'tests/unneeded-cast')
-rw-r--r--tests/unneeded-cast/main.cpp47
-rw-r--r--tests/unneeded-cast/main.cpp.expected6
2 files changed, 51 insertions, 2 deletions
diff --git a/tests/unneeded-cast/main.cpp b/tests/unneeded-cast/main.cpp
index c58c32ac..808e1a87 100644
--- a/tests/unneeded-cast/main.cpp
+++ b/tests/unneeded-cast/main.cpp
@@ -41,10 +41,57 @@ void test()
class MyObj : public QObject
{
+ Q_OBJECT
public:
};
void testQObjectCast(QObject *o)
{
dynamic_cast<MyObj*>(o); // Warn
+ qobject_cast<QObject*>(o); // Warn
+ MyObj myobj;
+ qobject_cast<QObject*>(&myobj); // Warn
+ qobject_cast<MyObj*>(o); // OK
}
+
+class FwdDeclared;
+
+class MyObj2 : public QObject
+{
+public:
+ Q_DECLARE_PUBLIC(QObject) // OK, in macro
+ MyObj2 *q_ptr;
+};
+
+struct Base2 {};
+class Base1 : public QObject {};
+
+class Derived : public Base1, public Base2
+{
+public:
+ void test()
+ {
+ static_cast<Base1*>(this); // OK
+ static_cast<Base2*>(this); // OK
+ }
+};
+
+void test2()
+{
+ static_cast<MyObj*>(nullptr); // OK
+ static_cast<MyObj*>(0); // OK
+
+ MyObj *o1;
+ MyObj2 *o2;
+ true ? static_cast<QObject*>(o1) : static_cast<QObject*>(o2); // Ok
+}
+
+class MyObj4 : public QObject
+{
+ Q_OBJECT
+public:
+ void test()
+ {
+ qobject_cast<MyObj4*>(sender()); // OK
+ }
+};
diff --git a/tests/unneeded-cast/main.cpp.expected b/tests/unneeded-cast/main.cpp.expected
index bcaee9ca..448e714c 100644
--- a/tests/unneeded-cast/main.cpp.expected
+++ b/tests/unneeded-cast/main.cpp.expected
@@ -4,10 +4,12 @@ unneeded-cast/main.cpp:33:5: warning: Casting to itself [-Wclazy-unneeded-cast]
dynamic_cast<A*>(a); // warning: Casting to itself
unneeded-cast/main.cpp:35:5: warning: Casting to itself [-Wclazy-unneeded-cast]
dynamic_cast<B*>(b); // warning: Casting to itself
-unneeded-cast/main.cpp:36:5: warning: Casting to itself [-Wclazy-unneeded-cast]
+unneeded-cast/main.cpp:36:5: warning: explicitly casting to base is unnecessary [-Wclazy-unneeded-cast]
static_cast<A*>(b); // warning: Casting to base
unneeded-cast/main.cpp:37:5: warning: Casting to itself [-Wclazy-unneeded-cast]
static_cast<A*>(a); // warning: Casting to itself
unneeded-cast/main.cpp:39:5: warning: Casting to itself [-Wclazy-unneeded-cast]
static_cast<B*>(b); // warning: Casting to itself
-unneeded-cast/main.cpp:49:5: warning: Use qobject_cast rather than dynamic_cast [-Wclazy-unneeded-cast]
+unneeded-cast/main.cpp:50:5: warning: Use qobject_cast rather than dynamic_cast [-Wclazy-unneeded-cast]
+unneeded-cast/main.cpp:51:5: warning: Casting to itself [-Wclazy-unneeded-cast]
+unneeded-cast/main.cpp:53:5: warning: explicitly casting to base is unnecessary [-Wclazy-unneeded-cast]