[llvm] e3a00d5 - [Assignment Tracking] Fix invalidated iterator usage

via llvm-commits llvm-commits at lists.llvm.org
Fri Jan 20 06:31:08 PST 2023


Author: OCHyams
Date: 2023-01-20T14:30:26Z
New Revision: e3a00d51864e05b6755601543c5e2a2df44081d1

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

LOG: [Assignment Tracking] Fix invalidated iterator usage

The iterator `FirstOverlap` is invalidated after the call to `insert` - avoid
dereferencing the iterator after the call to `insert`.

Reviewed By: CarlosAlbertoEnciso

Differential Revision: https://reviews.llvm.org/D141854

Added: 
    

Modified: 
    llvm/lib/CodeGen/AssignmentTrackingAnalysis.cpp

Removed: 
    


################################################################################
diff  --git a/llvm/lib/CodeGen/AssignmentTrackingAnalysis.cpp b/llvm/lib/CodeGen/AssignmentTrackingAnalysis.cpp
index 16782a344d21..7098824dbe4b 100644
--- a/llvm/lib/CodeGen/AssignmentTrackingAnalysis.cpp
+++ b/llvm/lib/CodeGen/AssignmentTrackingAnalysis.cpp
@@ -651,14 +651,19 @@ class MemLocFragmentFill {
       // [  -   i   -  ]
       // +
       // [ i ][ f ][ i ]
+
+      // Save values for use after inserting a new interval.
       auto EndBitOfOverlap = FirstOverlap.stop();
+      unsigned OverlapValue = FirstOverlap.value();
+
+      // Shorten the overlapping interval.
       FirstOverlap.setStop(StartBit);
       insertMemLoc(BB, Before, Var, FirstOverlap.start(), StartBit,
-                   *FirstOverlap, VarLoc.DL);
+                   OverlapValue, VarLoc.DL);
 
       // Insert a new interval to represent the end part.
-      FragMap.insert(EndBit, EndBitOfOverlap, *FirstOverlap);
-      insertMemLoc(BB, Before, Var, EndBit, EndBitOfOverlap, *FirstOverlap,
+      FragMap.insert(EndBit, EndBitOfOverlap, OverlapValue);
+      insertMemLoc(BB, Before, Var, EndBit, EndBitOfOverlap, OverlapValue,
                    VarLoc.DL);
 
       // Insert the new (middle) fragment now there is space.


        


More information about the llvm-commits mailing list