NoQ added inline comments.

================
Comment at: clang/lib/StaticAnalyzer/Core/BugReporter.cpp:2260-2261
+  InterestingSymbols.erase(sym);
+  if (const auto *meta = dyn_cast<SymbolMetadata>(sym))
+    markNotInteresting(meta->getRegion());
+}
----------------
balazske wrote:
> balazske wrote:
> > NoQ wrote:
> > > You're saying, e.g., "If string length is not interesting then neither is 
> > > the string itself". Or, dunno, "If the raw pointer value is not 
> > > interesting then neither is a smart pointer that was holding it".
> > > 
> > > I'm not sure about that. I'm pretty sure that no checkers are currently 
> > > affected by this code but I still don't understand your point.
> > > 
> > > I don't understand the original code in `markInteresting()` either; do we 
> > > have even one test to cover it?
> > > 
> > > Also note that what you've written is not a correct negation of the 
> > > original code. The correct negation (that would keep the region-metadata 
> > > relationship in sync as originally intended) would be "if the region 
> > > loses interestingness, so does the metadata". Or it has to go both ways. 
> > > I'm still not sure if any of this matters though.
> > > 
> > > Maybe we should eliminate these extra clauses entirely. If you're not 
> > > willing to investigate whether this is all dead code or it actually does 
> > > something, I'd like to suggest a "FIXME: Is this necessary?" (or 
> > > something like that) both here and in the original code.
> > The metadata interestingness was added in rG735724fb1e78 long ago, there is 
> > not more information. All test pass if the code is removed (but it may have 
> > impacts on bug paths). Is it not the job of the checker to mark the 
> > interestingness of objects? I assume that the meaning of 
> > `meta->getRegion()` is checker dependent (the string or smart pointer or 
> > something totally different?) and the checker should know what to make 
> > interesting (or not). The `markInteresting()` has no test (what I could 
> > extend here), it may be implicitly tested by the other checker tests.
> The mark of associated region as interesting may not work correct if there 
> are multiple metadata symbols for the same region, which should be a possible 
> case. Specially the remove of interestingness is not correct in this way. So 
> I would remove the `if (const auto *meta = dyn_cast<SymbolMetadata>(sym))` 
> part.
> A better approach can be to make the interestingness depend totally on the 
> associated region for metadata symbol. If a symbol is metadata, its 
> interestingness is that of the region. And only the region is inserted into 
> the map. `isInteresting` can be updated for this purpose.
> I assume that the meaning of `meta->getRegion()` is checker dependent

I completely agree with your reasoning. One way or another, that old commit 
didn't come with a test, or any explanation whatsoever. I think we have all the 
rights to question it.


Repository:
  rG LLVM Github Monorepo

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

https://reviews.llvm.org/D105637

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

Reply via email to