summaryrefslogtreecommitdiffstats
path: root/clang/lib/Analysis/CFG.cpp
diff options
context:
space:
mode:
authorNAKAMURA Takumi <geek4civic@gmail.com>2012-03-25 06:30:32 +0000
committerNAKAMURA Takumi <geek4civic@gmail.com>2012-03-25 06:30:32 +0000
commitf0434b09fccec48e3c01fc91fc7a58004a3d96e5 (patch)
treef447f1bda1a72bbc0c849d9e532d1448db3313b1 /clang/lib/Analysis/CFG.cpp
parent212119924171797051369dd2be7173018d7ee1b0 (diff)
downloadbcm5719-llvm-f0434b09fccec48e3c01fc91fc7a58004a3d96e5.tar.gz
bcm5719-llvm-f0434b09fccec48e3c01fc91fc7a58004a3d96e5.zip
clang/lib/Analysis/CFG.cpp: Fix memory leak since r153297.
evaluateAsBooleanConditionNoCache(S) might update the map and invalidate the iterator. llvm-svn: 153406
Diffstat (limited to 'clang/lib/Analysis/CFG.cpp')
-rw-r--r--clang/lib/Analysis/CFG.cpp7
1 files changed, 5 insertions, 2 deletions
diff --git a/clang/lib/Analysis/CFG.cpp b/clang/lib/Analysis/CFG.cpp
index 706d69010b4..e54fae33fe8 100644
--- a/clang/lib/Analysis/CFG.cpp
+++ b/clang/lib/Analysis/CFG.cpp
@@ -457,8 +457,11 @@ private:
CachedBoolEvals.insert(std::make_pair(S, TryResult()));
if (!Inserted)
return I->second; // already in map;
-
- return (I->second = evaluateAsBooleanConditionNoCache(S));
+
+ // Retrieve result at first, or the map might be updated.
+ TryResult Result = evaluateAsBooleanConditionNoCache(S);
+ CachedBoolEvals[S] = Result; // update or insert
+ return Result;
}
}
OpenPOWER on IntegriCloud