fix(coverage): proper instruction for 1st branch anchor #8512
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.
Motivation
Re https://t.me/foundry_support/55383
PR #8414 fixed the branch coverage report (issue reported in #7784 ) by properly mapping if/else source bodies
foundry/crates/evm/coverage/src/analysis.rs
Lines 236 to 241 in 5af9d16
but it also made the wrong assumption that the first branch opcode after JUMPI should be
pc + 1
foundry/crates/evm/coverage/src/anchors.rs
Lines 149 to 153 in 5af9d16
This is not true because the evaluation is done for the opcode before JUMPI (so JUMPI is
pc + 1
and next opcode ispc + 2
)foundry/crates/evm/coverage/src/anchors.rs
Lines 134 to 136 in 5af9d16
Solution
Proper source mappings fixes #7784 and #4294 (require and assert branches properly reported now), hence this PR reverts the instruction for first branch and adds back branching for asserts
Added unit tests for all require/assert branches
#4309 #4310 and #4315 tests were passing with wrong branch opcode, will follow up with a fix for them