diff options
| author | Craig Topper <craig.topper@intel.com> | 2018-06-27 20:58:46 +0000 |
|---|---|---|
| committer | Craig Topper <craig.topper@intel.com> | 2018-06-27 20:58:46 +0000 |
| commit | 880e34ed45aa1bfae2648d5d3426e6525fafecff (patch) | |
| tree | 0367b3d6cc2e5521a62d76b8dc1dde84c6a9a91e /llvm/lib/Target/X86/X86ISelDAGToDAG.cpp | |
| parent | 9b65ffb0976c5b9590959a6439d338fc5ec0dceb (diff) | |
| download | bcm5719-llvm-880e34ed45aa1bfae2648d5d3426e6525fafecff.tar.gz bcm5719-llvm-880e34ed45aa1bfae2648d5d3426e6525fafecff.zip | |
[X86] In X86DAGToDAGISel::PreprocessISelDAG, make sure we don't access N after we delete it.
If we turn X86ISD::AND into ISD::AND, we delete N. But we were continuing onto the next block of code even though N no longer existed.
Just happened to notice it. I assume asan didn't notice it because we explicitly unpoison deleted nodes and give them a DELETE_NODE opcode.
llvm-svn: 335787
Diffstat (limited to 'llvm/lib/Target/X86/X86ISelDAGToDAG.cpp')
| -rw-r--r-- | llvm/lib/Target/X86/X86ISelDAGToDAG.cpp | 1 |
1 files changed, 1 insertions, 0 deletions
diff --git a/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp b/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp index 754e74c77a8..3382ee808b1 100644 --- a/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp +++ b/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp @@ -668,6 +668,7 @@ void X86DAGToDAGISel::PreprocessISelDAG() { CurDAG->ReplaceAllUsesOfValueWith(SDValue(N, 0), Res); ++I; CurDAG->DeleteNode(N); + continue; } if (OptLevel != CodeGenOpt::None && |

