From 880e34ed45aa1bfae2648d5d3426e6525fafecff Mon Sep 17 00:00:00 2001 From: Craig Topper Date: Wed, 27 Jun 2018 20:58:46 +0000 Subject: [PATCH] [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 --- llvm/lib/Target/X86/X86ISelDAGToDAG.cpp | 1 + 1 file changed, 1 insertion(+) diff --git a/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp b/llvm/lib/Target/X86/X86ISelDAGToDAG.cpp index 754e74c77a8e..3382ee808b1d 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 &&