[llvm] 18eae33 - [SCEV] Fix usage of invalid IP with FoldingSet

Ehud Katz via llvm-commits llvm-commits at lists.llvm.org
Fri Mar 13 09:37:14 PDT 2020


Author: Ehud Katz
Date: 2020-03-13T18:36:58+02:00
New Revision: 18eae3312297cb197a3131f3ad9ca2bebb217415

URL: https://github.com/llvm/llvm-project/commit/18eae3312297cb197a3131f3ad9ca2bebb217415
DIFF: https://github.com/llvm/llvm-project/commit/18eae3312297cb197a3131f3ad9ca2bebb217415.diff

LOG: [SCEV] Fix usage of invalid IP with FoldingSet

Fix the use of invalid Insertion Point pointer with the UniqueSCEVs FoldingSet,
which caused memory corruption.

Added: 
    

Modified: 
    llvm/lib/Analysis/ScalarEvolution.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/Analysis/ScalarEvolution.cpp b/llvm/lib/Analysis/ScalarEvolution.cpp
index debd03bf47b8..030de8cf90b7 100644
--- a/llvm/lib/Analysis/ScalarEvolution.cpp
+++ b/llvm/lib/Analysis/ScalarEvolution.cpp
@@ -3339,6 +3339,10 @@ const SCEV *ScalarEvolution::getUDivExpr(const SCEV *LHS,
     }
   }
 
+  // The Insertion Point (IP) might be invalid by now (due to UniqueSCEVs
+  // changes). Make sure we get a new one.
+  IP = nullptr;
+  if (const SCEV *S = UniqueSCEVs.FindNodeOrInsertPos(ID, IP)) return S;
   SCEV *S = new (SCEVAllocator) SCEVUDivExpr(ID.Intern(SCEVAllocator),
                                              LHS, RHS);
   UniqueSCEVs.InsertNode(S, IP);


        


More information about the llvm-commits mailing list