The code introduced in https://reviews.llvm.org/D130881 has a bug as it may cause a use-after-free error that can be caught by ASAN.
The bug essentially boils down to iterator invalidation of DenseMap. The expression SDEI[To] = I->second; may cause SDEI to grow if To is inserted for the very first time. When that happens, all existing iterators to the map are invalidated as their backing storage has been freed. Accessing I->second is then invalid and attempts to access freed memory (as I is an iterator of SDEI).
This patch fixes that quite simply by first making a copy of I->second, and then moving into the possibly newly inserted KV of the DenseMap.
No test attached as I am not sure it is practible to test.
Downstream ASAN failure for reference:
https://github.com/zero9178/Pylir/actions/runs/3165945057/jobs/5155328897
As can nicely be seen in the stacktrace, the memor is freed by operator[] and the accessed by operator= afterwards