baloghadamsoftware created this revision. baloghadamsoftware added reviewers: NoQ, mikhail.ramalho. Herald added subscribers: a.sidorin, dkrupp, rnkovacs, szepet, xazax.hun, whisperity. Herald added a reviewer: george.karpenkov.
Marking a symbolic expression as live is not recursive. In our checkers we either use conjured symbols or conjured symbols plus/minus concrete integers to represent abstract positions of iterators, so we must mark the left-hand side of these expressions as live to prevent them from getting reaped. https://reviews.llvm.org/D48764 Files: lib/StaticAnalyzer/Checkers/IteratorChecker.cpp Index: lib/StaticAnalyzer/Checkers/IteratorChecker.cpp =================================================================== --- lib/StaticAnalyzer/Checkers/IteratorChecker.cpp +++ lib/StaticAnalyzer/Checkers/IteratorChecker.cpp @@ -489,12 +489,16 @@ auto RegionMap = State->get<IteratorRegionMap>(); for (const auto Reg : RegionMap) { const auto Pos = Reg.second; + if (const auto *SIE = dyn_cast<SymIntExpr>(Pos.getOffset())) + SR.markLive(SIE->getLHS()); SR.markLive(Pos.getOffset()); } auto SymbolMap = State->get<IteratorSymbolMap>(); for (const auto Sym : SymbolMap) { const auto Pos = Sym.second; + if (const auto *SIE = dyn_cast<SymIntExpr>(Pos.getOffset())) + SR.markLive(SIE->getLHS()); SR.markLive(Pos.getOffset()); }
Index: lib/StaticAnalyzer/Checkers/IteratorChecker.cpp =================================================================== --- lib/StaticAnalyzer/Checkers/IteratorChecker.cpp +++ lib/StaticAnalyzer/Checkers/IteratorChecker.cpp @@ -489,12 +489,16 @@ auto RegionMap = State->get<IteratorRegionMap>(); for (const auto Reg : RegionMap) { const auto Pos = Reg.second; + if (const auto *SIE = dyn_cast<SymIntExpr>(Pos.getOffset())) + SR.markLive(SIE->getLHS()); SR.markLive(Pos.getOffset()); } auto SymbolMap = State->get<IteratorSymbolMap>(); for (const auto Sym : SymbolMap) { const auto Pos = Sym.second; + if (const auto *SIE = dyn_cast<SymIntExpr>(Pos.getOffset())) + SR.markLive(SIE->getLHS()); SR.markLive(Pos.getOffset()); }
_______________________________________________ cfe-commits mailing list cfe-commits@lists.llvm.org http://lists.llvm.org/cgi-bin/mailman/listinfo/cfe-commits