summaryrefslogtreecommitdiffstats
path: root/clang/test
diff options
context:
space:
mode:
Diffstat (limited to 'clang/test')
-rw-r--r--clang/test/Analysis/deadstores-driverkit.cpp24
-rw-r--r--clang/test/Analysis/os_object_base.h8
2 files changed, 32 insertions, 0 deletions
diff --git a/clang/test/Analysis/deadstores-driverkit.cpp b/clang/test/Analysis/deadstores-driverkit.cpp
new file mode 100644
index 00000000000..446821b32ca
--- /dev/null
+++ b/clang/test/Analysis/deadstores-driverkit.cpp
@@ -0,0 +1,24 @@
+/* iig generated from SomethingSomething.iig */
+
+// The comment above is the whole point of the test.
+// That's how the suppression works.
+// It needs to be on the top.
+// Run-lines can wait.
+
+// RUN: %clang_analyze_cc1 -w -triple x86_64-apple-driverkit19.0 \
+// RUN: -analyzer-checker=deadcode -verify %s
+
+// expected-no-diagnostics
+
+#include "os_object_base.h"
+
+class OSSomething {
+ kern_return_t Invoke(const IORPC);
+ void foo(OSDispatchMethod supermethod) {
+ kern_return_t ret;
+ IORPC rpc;
+ // Test the DriverKit specific suppression in the dead stores checker.
+ if (supermethod) ret = supermethod((OSObject *)this, rpc); // no-warning
+ else ret = ((OSObject *)this)->Invoke(rpc); // no-warning
+ }
+};
diff --git a/clang/test/Analysis/os_object_base.h b/clang/test/Analysis/os_object_base.h
index 37a3fc07df7..4698185f2b3 100644
--- a/clang/test/Analysis/os_object_base.h
+++ b/clang/test/Analysis/os_object_base.h
@@ -19,6 +19,9 @@
using size_t = decltype(sizeof(int));
+typedef int kern_return_t;
+struct IORPC {};
+
struct OSMetaClass;
struct OSMetaClassBase {
@@ -37,8 +40,13 @@ struct OSMetaClassBase {
virtual void free();
virtual ~OSMetaClassBase(){};
+
+ kern_return_t Invoke(IORPC invoke);
};
+typedef kern_return_t (*OSDispatchMethod)(OSMetaClassBase *self,
+ const IORPC rpc);
+
struct OSObject : public OSMetaClassBase {
virtual ~OSObject(){}
OpenPOWER on IntegriCloud