diff options
author | Sergio Martins <smartins@kde.org> | 2018-02-25 17:30:01 +0000 |
---|---|---|
committer | Sergio Martins <smartins@kde.org> | 2018-02-25 21:45:42 +0000 |
commit | d10f7306d23b9b3e6e696565450a33062548684a (patch) | |
tree | 82ae11cb7d1122db3d4e7e2ff45b5bda3f41d827 /tests/unneeded-cast | |
parent | 8d26cc40fbf69b01dee7fe1f5b9e4c694585b847 (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.cpp | 47 | ||||
-rw-r--r-- | tests/unneeded-cast/main.cpp.expected | 6 |
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] |