aboutsummaryrefslogtreecommitdiffstats
path: root/tests/unneeded-cast
diff options
context:
space:
mode:
authorSergio Martins <smartins@kde.org>2018-02-24 17:00:51 +0000
committerSergio Martins <smartins@kde.org>2018-02-24 17:04:32 +0000
commit044c1dfdb92bc680c7b70084d5fe3f33137a9cae (patch)
treef31549c063e5584abd483ebe020f129f88d31b15 /tests/unneeded-cast
parent46c9af032c56687c944c19b2d6ff485b1869c21d (diff)
Rename bogus-dynamic-cast to unneeded-cast
Preparing to warn for qobject_casts too.
Diffstat (limited to 'tests/unneeded-cast')
-rw-r--r--tests/unneeded-cast/config.json14
-rw-r--r--tests/unneeded-cast/main.cpp46
-rw-r--r--tests/unneeded-cast/main.cpp.expected6
-rw-r--r--tests/unneeded-cast/qobjectcast.cpp8
-rw-r--r--tests/unneeded-cast/qobjectcast.cpp.expected1
5 files changed, 75 insertions, 0 deletions
diff --git a/tests/unneeded-cast/config.json b/tests/unneeded-cast/config.json
new file mode 100644
index 00000000..cf5fbd5e
--- /dev/null
+++ b/tests/unneeded-cast/config.json
@@ -0,0 +1,14 @@
+{
+ "tests" : [
+ {
+ "filename" : "main.cpp"
+ },
+ {
+ "filename" : "qobjectcast.cpp",
+ "env" :
+ {
+ "CLAZY_EXTRA_OPTIONS" : "unneeded-cast-qobject"
+ }
+ }
+ ]
+}
diff --git a/tests/unneeded-cast/main.cpp b/tests/unneeded-cast/main.cpp
new file mode 100644
index 00000000..bca5b416
--- /dev/null
+++ b/tests/unneeded-cast/main.cpp
@@ -0,0 +1,46 @@
+#include <QtCore/QObject>
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+struct A
+{
+ virtual void foo() { }
+};
+
+struct B : public A
+{
+
+};
+
+void test()
+{
+ A *a = new A();
+ B *b = new B();
+
+ dynamic_cast<A*>(b); // warning: Casting to base
+ dynamic_cast<A*>(a); // warning: Casting to itself
+ dynamic_cast<B*>(a); // OK
+ dynamic_cast<B*>(b); // warning: Casting to itself
+}
+
+class MyObj : public QObject
+{
+public:
+};
+
+void testQObjectCast(QObject *o)
+{
+ dynamic_cast<MyObj*>(o); // OK
+}
diff --git a/tests/unneeded-cast/main.cpp.expected b/tests/unneeded-cast/main.cpp.expected
new file mode 100644
index 00000000..44ee4318
--- /dev/null
+++ b/tests/unneeded-cast/main.cpp.expected
@@ -0,0 +1,6 @@
+unneeded-cast/main.cpp:32:5: warning: explicitly casting to base is unnecessary [-Wclazy-unneeded-cast]
+ dynamic_cast<A*>(b); // warning: Casting to base
+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
diff --git a/tests/unneeded-cast/qobjectcast.cpp b/tests/unneeded-cast/qobjectcast.cpp
new file mode 100644
index 00000000..11e0ed62
--- /dev/null
+++ b/tests/unneeded-cast/qobjectcast.cpp
@@ -0,0 +1,8 @@
+#include <QtCore/QObject>
+
+struct MyObj : public QObject {};
+
+void testQObjectCast(QObject *o)
+{
+ dynamic_cast<MyObj*>(o); // Warn
+}
diff --git a/tests/unneeded-cast/qobjectcast.cpp.expected b/tests/unneeded-cast/qobjectcast.cpp.expected
new file mode 100644
index 00000000..ba0b86e0
--- /dev/null
+++ b/tests/unneeded-cast/qobjectcast.cpp.expected
@@ -0,0 +1 @@
+unneeded-cast/qobjectcast.cpp:7:5: warning: Use qobject_cast rather than dynamic_cast [-Wclazy-unneeded-cast]