[PATCH] D63118: [analyzer] DeadStores: Add a crude suppression files generated by DriverKit IIG.

Phabricator via Phabricator via cfe-commits cfe-commits at lists.llvm.org
Wed Jun 19 16:30:40 PDT 2019


This revision was not accepted when it landed; it landed in state "Needs Review".
This revision was automatically updated to reflect the committed changes.
Closed by commit rL363892: [analyzer] DeadStores: Add a crude suppression files generated by DriverKit IIG. (authored by dergachev, committed by ).
Herald added a project: LLVM.
Herald added a subscriber: llvm-commits.

Changed prior to commit:
  https://reviews.llvm.org/D63118?vs=203962&id=205700#toc

Repository:
  rL LLVM

CHANGES SINCE LAST ACTION
  https://reviews.llvm.org/D63118/new/

https://reviews.llvm.org/D63118

Files:
  cfe/trunk/lib/StaticAnalyzer/Checkers/DeadStoresChecker.cpp
  cfe/trunk/test/Analysis/deadstores-driverkit.cpp
  cfe/trunk/test/Analysis/os_object_base.h


Index: cfe/trunk/test/Analysis/os_object_base.h
===================================================================
--- cfe/trunk/test/Analysis/os_object_base.h
+++ cfe/trunk/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 @@
 
   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(){}
 
Index: cfe/trunk/test/Analysis/deadstores-driverkit.cpp
===================================================================
--- cfe/trunk/test/Analysis/deadstores-driverkit.cpp
+++ cfe/trunk/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
+  }
+};
Index: cfe/trunk/lib/StaticAnalyzer/Checkers/DeadStoresChecker.cpp
===================================================================
--- cfe/trunk/lib/StaticAnalyzer/Checkers/DeadStoresChecker.cpp
+++ cfe/trunk/lib/StaticAnalyzer/Checkers/DeadStoresChecker.cpp
@@ -160,6 +160,26 @@
     return InEH->count(D);
   }
 
+  bool isSuppressed(SourceRange R) {
+    SourceManager &SMgr = Ctx.getSourceManager();
+    SourceLocation Loc = R.getBegin();
+    if (!Loc.isValid())
+      return false;
+
+    FileID FID = SMgr.getFileID(Loc);
+    bool Invalid = false;
+    StringRef Data = SMgr.getBufferData(FID, &Invalid);
+    if (Invalid)
+      return false;
+
+    // Files autogenerated by DriverKit IIG contain some dead stores that
+    // we don't want to report.
+    if (Data.startswith("/* iig generated from"))
+      return true;
+
+    return false;
+  }
+
   void Report(const VarDecl *V, DeadStoreKind dsk,
               PathDiagnosticLocation L, SourceRange R) {
     if (Escaped.count(V))
@@ -175,6 +195,9 @@
     if (!reachableCode->isReachable(currentBlock))
       return;
 
+    if (isSuppressed(R))
+      return;
+
     SmallString<64> buf;
     llvm::raw_svector_ostream os(buf);
     const char *BugType = nullptr;


-------------- next part --------------
A non-text attachment was scrubbed...
Name: D63118.205700.patch
Type: text/x-patch
Size: 2935 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/cfe-commits/attachments/20190619/caba558f/attachment.bin>


More information about the cfe-commits mailing list