diff options
author | Heejin Ahn <aheejin@gmail.com> | 2019-02-26 04:08:49 +0000 |
---|---|---|
committer | Heejin Ahn <aheejin@gmail.com> | 2019-02-26 04:08:49 +0000 |
commit | d2a56ac6612032e6e4446897747dc268b2b7a389 (patch) | |
tree | 3f02694f429518de1f80627bf59482b5f4a6367c /llvm/lib/Target/WebAssembly/WebAssemblyLateEHPrepare.cpp | |
parent | f0d2733e5032d5238793610e51dfe62f799cc279 (diff) | |
download | bcm5719-llvm-d2a56ac6612032e6e4446897747dc268b2b7a389.tar.gz bcm5719-llvm-d2a56ac6612032e6e4446897747dc268b2b7a389.zip |
[WebAssembly] Fix a bug deleting instruction in a ranged for loop
Summary: We shouldn't delete elements while iterating a ranged for loop.
Reviewers: dschuff
Subscribers: sbc100, jgravelle-google, sunfish, llvm-commits
Tags: #llvm
Differential Revision: https://reviews.llvm.org/D58519
llvm-svn: 354844
Diffstat (limited to 'llvm/lib/Target/WebAssembly/WebAssemblyLateEHPrepare.cpp')
-rw-r--r-- | llvm/lib/Target/WebAssembly/WebAssemblyLateEHPrepare.cpp | 8 |
1 files changed, 6 insertions, 2 deletions
diff --git a/llvm/lib/Target/WebAssembly/WebAssemblyLateEHPrepare.cpp b/llvm/lib/Target/WebAssembly/WebAssemblyLateEHPrepare.cpp index 2962de47653..65958e00eb3 100644 --- a/llvm/lib/Target/WebAssembly/WebAssemblyLateEHPrepare.cpp +++ b/llvm/lib/Target/WebAssembly/WebAssemblyLateEHPrepare.cpp @@ -222,18 +222,22 @@ bool WebAssemblyLateEHPrepare::addExceptionExtraction(MachineFunction &MF) { const auto &TII = *MF.getSubtarget<WebAssemblySubtarget>().getInstrInfo(); auto *EHInfo = MF.getWasmEHFuncInfo(); SmallVector<MachineInstr *, 16> ExtractInstrs; + SmallVector<MachineInstr *, 8> ToDelete; for (auto &MBB : MF) { for (auto &MI : MBB) { if (MI.getOpcode() == WebAssembly::EXTRACT_EXCEPTION_I32) { if (MI.getOperand(0).isDead()) - MI.eraseFromParent(); + ToDelete.push_back(&MI); else ExtractInstrs.push_back(&MI); } } } + bool Changed = !ToDelete.empty() || !ExtractInstrs.empty(); + for (auto *MI : ToDelete) + MI->eraseFromParent(); if (ExtractInstrs.empty()) - return false; + return Changed; // Find terminate pads. SmallSet<MachineBasicBlock *, 8> TerminatePads; |