gamesh411 created this revision. gamesh411 added a reviewer: steakhal. Herald added subscribers: manas, ASDenysPetrov, martong, dkrupp, donat.nagy, Szelethus, mikhail.ramalho, a.sidorin, szepet, baloghadamsoftware, xazax.hun. Herald added a reviewer: Szelethus. Herald added a project: All. gamesh411 requested review of this revision. Herald added a project: clang. Herald added a subscriber: cfe-commits.
When making a region interesting, also mark the subregions interesting. Original author: steakhal Repository: rG LLVM Github Monorepo https://reviews.llvm.org/D125362 Files: clang/lib/StaticAnalyzer/Core/BugReporter.cpp Index: clang/lib/StaticAnalyzer/Core/BugReporter.cpp =================================================================== --- clang/lib/StaticAnalyzer/Core/BugReporter.cpp +++ clang/lib/StaticAnalyzer/Core/BugReporter.cpp @@ -2261,6 +2261,12 @@ // How to handle multiple metadata for the same region? if (const auto *meta = dyn_cast<SymbolMetadata>(sym)) markInteresting(meta->getRegion(), TKind); + + auto SubSyms = llvm::make_range(sym->symbol_begin(), sym->symbol_end()); + for (SymbolRef SubSym : SubSyms) { + if (SymbolData::classof(SubSym)) + insertToInterestingnessMap(InterestingSymbols, SubSym, TKind); + } } void PathSensitiveBugReport::markNotInteresting(SymbolRef sym) { @@ -2341,10 +2347,25 @@ return None; // We don't currently consider metadata symbols to be interesting // even if we know their region is interesting. Is that correct behavior? - auto It = InterestingSymbols.find(sym); - if (It == InterestingSymbols.end()) - return None; - return It->getSecond(); + auto TryToLookupTrackingKind = + [this](SymbolRef Sym) -> Optional<bugreporter::TrackingKind> { + auto It = InterestingSymbols.find(Sym); + if (It == InterestingSymbols.end()) + return None; + return It->getSecond(); + }; + + if (auto MaybeTK = TryToLookupTrackingKind(sym)) + return MaybeTK; + + auto SubSyms = llvm::make_range(sym->symbol_begin(), sym->symbol_end()); + for (SymbolRef SubSym : SubSyms) { + if (SymbolData::classof(SubSym)) { + if (auto MaybeTK = TryToLookupTrackingKind(SubSym)) + return MaybeTK; + } + } + return None; } Optional<bugreporter::TrackingKind>
Index: clang/lib/StaticAnalyzer/Core/BugReporter.cpp =================================================================== --- clang/lib/StaticAnalyzer/Core/BugReporter.cpp +++ clang/lib/StaticAnalyzer/Core/BugReporter.cpp @@ -2261,6 +2261,12 @@ // How to handle multiple metadata for the same region? if (const auto *meta = dyn_cast<SymbolMetadata>(sym)) markInteresting(meta->getRegion(), TKind); + + auto SubSyms = llvm::make_range(sym->symbol_begin(), sym->symbol_end()); + for (SymbolRef SubSym : SubSyms) { + if (SymbolData::classof(SubSym)) + insertToInterestingnessMap(InterestingSymbols, SubSym, TKind); + } } void PathSensitiveBugReport::markNotInteresting(SymbolRef sym) { @@ -2341,10 +2347,25 @@ return None; // We don't currently consider metadata symbols to be interesting // even if we know their region is interesting. Is that correct behavior? - auto It = InterestingSymbols.find(sym); - if (It == InterestingSymbols.end()) - return None; - return It->getSecond(); + auto TryToLookupTrackingKind = + [this](SymbolRef Sym) -> Optional<bugreporter::TrackingKind> { + auto It = InterestingSymbols.find(Sym); + if (It == InterestingSymbols.end()) + return None; + return It->getSecond(); + }; + + if (auto MaybeTK = TryToLookupTrackingKind(sym)) + return MaybeTK; + + auto SubSyms = llvm::make_range(sym->symbol_begin(), sym->symbol_end()); + for (SymbolRef SubSym : SubSyms) { + if (SymbolData::classof(SubSym)) { + if (auto MaybeTK = TryToLookupTrackingKind(SubSym)) + return MaybeTK; + } + } + return None; } Optional<bugreporter::TrackingKind>
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org https://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits