Szelethus added a reviewer: xazax.hun.
Szelethus added a comment.
Herald added a subscriber: rnkovacs.

Alright, I'm sold. How about we add a checker option for it? I don't actually 
insist, just an idea. @xazax.hun, how has this feature played out?



================
Comment at: clang/lib/StaticAnalyzer/Checkers/StreamChecker.cpp:394
 
+const ExplodedNode *StreamChecker::getAcquireSite(const ExplodedNode *N,
+                                                  SymbolRef Sym,
----------------
How about `getAcquisitionSite`, and a line of comment:
> Searches for the `ExplodedNode` where the file descriptor was acquired for 
> `Sym`.


================
Comment at: clang/lib/StaticAnalyzer/Checkers/StreamChecker.cpp:398-399
+  ProgramStateRef State = N->getState();
+  // When bug type is resource leak, exploded node N may not have state info
+  // for leaked file descriptor, but predecessor should have it.
+  if (!State->get<StreamMap>(Sym))
----------------
I see what you mean, but I'd phrase this differently, and place it...

>Resource leaks can result in multiple warning that describe the same kind of 
>programming error:
>```
>void f() {
>  FILE *F = fopen("a.txt");
>  if (rand()) // state split
>    return; // warning
>} // warning
>```
>While this isn't necessarily true (leaking the same stream could result from a 
>different kinds of errors), the reduction in redundant reports makes this a 
>worthwhile heuristic.


================
Comment at: clang/lib/StaticAnalyzer/Checkers/StreamChecker.cpp:961
 
-    C.emitReport(std::make_unique<PathSensitiveBugReport>(
-        BT_ResourceLeak, BT_ResourceLeak.getDescription(), N));
+    ;
+    const ExplodedNode *AcquireNode = getAcquireSite(N, Sym, C);
----------------
...here!


================
Comment at: clang/test/Analysis/stream-note.c:1
+// RUN: %clang_analyze_cc1 -analyzer-checker=alpha.unix.Stream -analyzer-store 
region -analyzer-output text -verify %s
+
----------------
`core` package! Also, we don't specify `-analyzer-store region` explicitly, we 
even wondered whether we should just remove the option altogether. Fun fact, 
`clang_analyze_cc1` actually expands to an invocation that contains it anyways.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D81407



_______________________________________________
cfe-commits mailing list
cfe-commits@lists.llvm.org
https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits

Reply via email to