[CodeGen][CodeLayout] Fix segfault on access to deleted block in MBP. #142357
+5
−10
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Problem 1: There is a typo which reassigns
BlockWorkList
toEHPadWorkList
on attempt to removeRemBB
from work lists.Problem 2:
Chain->UnscheduledPredecessors == 0
is an incorrect way to check whetherRemBB
is enqueued or not. The root cause is a postponed deletion ofWorkList
from already scheduled blocks inselectBestCandidateBlock
. Bug happens in the following scenario:FunctionChain
is being processed with non-zeroUnscheduledPredecessors
B'
is added to theBlockWorkList
B'
is chosen as the best successor (selectBestSuccessor
) for some another block and added intoChain
B'
is removed by tail duplicator.RemovalCallback
erroneously won't eraseB'
fromBlockWorkList
, becauseUnscheduledPredecessors
value ofFunctionChain
is not zero (and it is allowed to be non-zero).Proposed solution is to always cleanup worklists on block deletion by tail duplicator.