[polly] r239061 - Use owning pointers to avoid memory leaks
Tobias Grosser
tobias at grosser.es
Thu Jun 4 10:59:54 PDT 2015
Author: grosser
Date: Thu Jun 4 12:59:54 2015
New Revision: 239061
URL: http://llvm.org/viewvc/llvm-project?rev=239061&view=rev
Log:
Use owning pointers to avoid memory leaks
This fixes a memory leak caused by us not freeing the expanded region nodes.
Modified:
polly/trunk/lib/Analysis/ScopDetection.cpp
Modified: polly/trunk/lib/Analysis/ScopDetection.cpp
URL: http://llvm.org/viewvc/llvm-project/polly/trunk/lib/Analysis/ScopDetection.cpp?rev=239061&r1=239060&r2=239061&view=diff
==============================================================================
--- polly/trunk/lib/Analysis/ScopDetection.cpp (original)
+++ polly/trunk/lib/Analysis/ScopDetection.cpp Thu Jun 4 12:59:54 2015
@@ -722,15 +722,15 @@ bool ScopDetection::isValidLoop(Loop *L,
Region *ScopDetection::expandRegion(Region &R) {
// Initial no valid region was found (greater than R)
- Region *LastValidRegion = nullptr;
- Region *ExpandedRegion = R.getExpandedRegion();
+ std::unique_ptr<Region> LastValidRegion;
+ auto ExpandedRegion = std::unique_ptr<Region>(R.getExpandedRegion());
DEBUG(dbgs() << "\tExpanding " << R.getNameStr() << "\n");
while (ExpandedRegion) {
DetectionContext Context(
- *ExpandedRegion, *AA, NonAffineSubRegionMap[ExpandedRegion],
- BoxedLoopsMap[ExpandedRegion], false /* verifying */);
+ *ExpandedRegion, *AA, NonAffineSubRegionMap[ExpandedRegion.get()],
+ BoxedLoopsMap[ExpandedRegion.get()], false /* verifying */);
DEBUG(dbgs() << "\t\tTrying " << ExpandedRegion->getNameStr() << "\n");
// Only expand when we did not collect errors.
@@ -742,25 +742,18 @@ Region *ScopDetection::expandRegion(Regi
if (!allBlocksValid(Context) || Context.Log.hasErrors())
break;
- // Delete unnecessary regions (allocated by getExpandedRegion)
- if (LastValidRegion)
- delete LastValidRegion;
-
// Store this region, because it is the greatest valid (encountered so
// far).
- LastValidRegion = ExpandedRegion;
+ LastValidRegion = std::move(ExpandedRegion);
// Create and test the next greater region (if any)
- ExpandedRegion = ExpandedRegion->getExpandedRegion();
+ ExpandedRegion =
+ std::unique_ptr<Region>(LastValidRegion->getExpandedRegion());
} else {
// Create and test the next greater region (if any)
- Region *TmpRegion = ExpandedRegion->getExpandedRegion();
-
- // Delete unnecessary regions (allocated by getExpandedRegion)
- delete ExpandedRegion;
-
- ExpandedRegion = TmpRegion;
+ ExpandedRegion =
+ std::unique_ptr<Region>(ExpandedRegion->getExpandedRegion());
}
}
@@ -771,7 +764,7 @@ Region *ScopDetection::expandRegion(Regi
dbgs() << "\tExpanding " << R.getNameStr() << " failed\n";
});
- return LastValidRegion;
+ return LastValidRegion.release();
}
static bool regionWithoutLoops(Region &R, LoopInfo *LI) {
for (const BasicBlock *BB : R.blocks())
More information about the llvm-commits
mailing list