OSDN Git Service

ScalarEvolution: added tmp to avoid use-after-dtor in for loop.
authorNaomi Musgrave <nmusgrave@google.com>
Wed, 16 Sep 2015 23:46:40 +0000 (23:46 +0000)
committerNaomi Musgrave <nmusgrave@google.com>
Wed, 16 Sep 2015 23:46:40 +0000 (23:46 +0000)
Summary:
For loop destroyed current instance before invoking next.
Temporary variable added to prevent use-after-dtor when invoke
destructor on current instance.

Reviewers: eugenis

Subscribers: llvm-commits, sanjoy

Differential Revision: http://reviews.llvm.org/D12912

Rename temp var.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@247867 91177308-0d34-0410-b5e6-96231b3b80d8

lib/Analysis/ScalarEvolution.cpp

index d8d94c4..3bdbee3 100644 (file)
@@ -8394,8 +8394,11 @@ ScalarEvolution::ScalarEvolution(ScalarEvolution &&Arg)
 ScalarEvolution::~ScalarEvolution() {
   // Iterate through all the SCEVUnknown instances and call their
   // destructors, so that they release their references to their values.
-  for (SCEVUnknown *U = FirstUnknown; U; U = U->Next)
-    U->~SCEVUnknown();
+  for (SCEVUnknown *U = FirstUnknown; U;) {
+    SCEVUnknown *Tmp = U;
+    U = U->Next;
+    Tmp->~SCEVUnknown();
+  }
   FirstUnknown = nullptr;
 
   ValueExprMap.clear();