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

Reply via email to