summaryrefslogtreecommitdiffstats
path: root/clang/test
diff options
context:
space:
mode:
authorGeorge Karpenkov <ekarpenkov@apple.com>2019-02-08 21:09:00 +0000
committerGeorge Karpenkov <ekarpenkov@apple.com>2019-02-08 21:09:00 +0000
commit2add627e350161cd84e77fb4717483daf69782e5 (patch)
treedb43c053d264b7a1a7099588c4b370fd858c343f /clang/test
parentfcb63c4c6c354f40cbf627bedd78366772fdd576 (diff)
downloadbcm5719-llvm-2add627e350161cd84e77fb4717483daf69782e5.tar.gz
bcm5719-llvm-2add627e350161cd84e77fb4717483daf69782e5.zip
[analyzer] Opt-in C Style Cast Checker for OSObject pointers
Differential Revision: https://reviews.llvm.org/D57261 llvm-svn: 353566
Diffstat (limited to 'clang/test')
-rw-r--r--clang/test/Analysis/osobjectcstylecastchecker_test.cpp39
1 files changed, 39 insertions, 0 deletions
diff --git a/clang/test/Analysis/osobjectcstylecastchecker_test.cpp b/clang/test/Analysis/osobjectcstylecastchecker_test.cpp
new file mode 100644
index 00000000000..bc9fb3ee780
--- /dev/null
+++ b/clang/test/Analysis/osobjectcstylecastchecker_test.cpp
@@ -0,0 +1,39 @@
+// RUN: %clang_analyze_cc1 -analyzer-checker=optin.osx.OSObjectCStyleCast %s -verify
+#include "os_object_base.h"
+
+struct OSArray : public OSObject {
+ unsigned getCount();
+};
+
+struct A {
+ int x;
+};
+struct B : public A {
+ unsigned getCount();
+};
+
+unsigned warn_on_explicit_downcast(OSObject * obj) {
+ OSArray *a = (OSArray *) obj; // expected-warning{{C-style cast of OSObject. Use OSDynamicCast instead}}
+ return a->getCount();
+}
+
+void no_warn_on_upcast(OSArray *arr) {
+ OSObject *obj = (OSObject *) arr;
+ obj->retain();
+ obj->release();
+}
+
+unsigned no_warn_on_dynamic_cast(OSObject *obj) {
+ OSArray *a = OSDynamicCast(OSArray, obj);
+ return a->getCount();
+}
+
+unsigned long no_warn_on_primitive_conversion(OSArray *arr) {
+ return (unsigned long) arr;
+}
+
+unsigned no_warn_on_other_type_cast(A *a) {
+ B *b = (B *) a;
+ return b->getCount();
+}
+
OpenPOWER on IntegriCloud