ScopInfo: Make clear that no double-free problem exists
authorTobias Grosser <tobias@grosser.es>
Thu, 8 Sep 2016 14:08:07 +0000 (14:08 +0000)
committerTobias Grosser <tobias@grosser.es>
Thu, 8 Sep 2016 14:08:07 +0000 (14:08 +0000)
When running the clang static analyser to check for memory issues, this code
originally showed a double free, as the analyser was unable to understand that
isl_set_free always returns NULL and consequently later uses of the isl object
we just freed will never be reached. Without this knowledge, the analyser has
to issue a warning.

We refactor the code to make it clear that for empty maps the current loop
iteration is aborted.

llvm-svn: 280940

polly/lib/Analysis/ScopInfo.cpp

index 5fb1616..2c0cd42 100644 (file)
@@ -1536,10 +1536,12 @@ void ScopStmt::checkForReductions() {
           isl_map_intersect_domain(MA->getAccessRelation(), getDomain());
       isl_set *Accs = isl_map_range(AccRel);
 
-      if (isl_set_has_equal_space(AllAccs, Accs) || isl_set_free(Accs)) {
+      if (isl_set_has_equal_space(AllAccs, Accs)) {
         isl_set *OverlapAccs = isl_set_intersect(Accs, isl_set_copy(AllAccs));
         Valid = Valid && isl_set_is_empty(OverlapAccs);
         isl_set_free(OverlapAccs);
+      } else {
+        isl_set_free(Accs);
       }
     }