fix(acir): Attach locations to MemoryOps in ACIR#2389
Merged
Conversation
jfecher
reviewed
Aug 21, 2023
Contributor
Author
I have found the cause of this bug, and it is not due to misplaced location data during SSA, but rather a missing predicate from MemoryOps. I have a fix locally that I will push based off of this branch after I am done testing the changes. |
Contributor
Author
|
The follow-up PR (#2400) requires a breaking ACVM release so I have re-requested review on this PR as we can merge it in separately. |
jfecher
reviewed
Aug 22, 2023
jfecher
approved these changes
Aug 22, 2023
TomAFrench
added a commit
that referenced
this pull request
Aug 22, 2023
* master: fix(acir): Attach locations to MemoryOps in ACIR (#2389) feat: Use equivalence information from equality assertions to simplify circuit (#2378) chore: fix body expr span (#2402) feat(attributes): enable custom attributes (#2395) chore: Remove `serde` from `noirc_frontend` (#2390) chore: allow parenthesizing in two type locations (#2388) chore(ci): automatically delete cache entries associated with closed PRs (#2342)
TomAFrench
added a commit
that referenced
this pull request
Aug 23, 2023
* master: (34 commits) chore: Decouple `noirc_abi` from frontend by introducing `PrintableType` (#2373) feat(brillig): Added locations for brillig artifacts (#2415) feat: Report compilation warnings before errors (#2398) chore: Rework `CrateGraph` to only have one root crate (#2391) chore: clippy fix (#2408) chore(deps): bump rustls-webpki from 0.101.1 to 0.101.4 (#2404) fix(acir): Attach locations to MemoryOps in ACIR (#2389) feat: Use equivalence information from equality assertions to simplify circuit (#2378) chore: fix body expr span (#2402) feat(attributes): enable custom attributes (#2395) chore: Remove `serde` from `noirc_frontend` (#2390) chore: allow parenthesizing in two type locations (#2388) chore(ci): automatically delete cache entries associated with closed PRs (#2342) feat: Perform more checks for compile-time arithmetic (#2380) chore: Remove `noirc_abi::FunctionSignature` and define in terms of HIR (#2372) feat: Update to `acvm` 0.22.0 (#2363) chore: Update committed ACIR artifacts (#2376) feat(ssa): Merge slices in if statements with witness conditions (#2347) chore: Separate frontend `Visibility` and `Distinctness` from the ABI (#2369) feat: add syntax for specifying function type environments (#2357) ...
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
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.
Description
Problem*
Initial work towards resolving #2133. Pushing for visibility in case we want to merge this now as this does fix reporting for index out of bounds errors from ACVM, but does not fully resolve #2133. Read the summary for more details.
Summary*
I have added reporting for IndexOutOfBounds errors triggered by ACVM. These occur when there is an index out of bounds on a dynamic arrray that uses the MemoryOp ACIR opcode. The reporting essentially extends the work for unsatisfied constrain statements, but I felt a true refactor of how nargo execute handles ACVM errors can be left for another PR.
In order to report the error accurately, a couple other changes had to be made as well. When we were creating MemoryOp's to work with dynamic arrays in ACIR we were pushing to the list of opcodes directly and not attaching location information. I have switched to calling the
push_opcodemethod when adding opcodes that deal with memory. I have also restricted theopcodesfield to now be private with the goal to avoid this error in the future. Any opcodes should be included using thepush_opcodemethod that also attaches a location.A new

dynamic_array_indextest has been included undercompile_failurewhich will now exit with this:The new location data has also exposed the actual bug that occurs in #2133. It looks like we are not handling locations correctly during flattening. A smaller reproduced snippet of the storage proof example is provided in the
dynamic_array_index. If the dynamic array is accessed with an index out of bounds later after flattening, only the then case of the array merger is shown. For exampleThis bug is also seen in the storage proof example, which will return the below output when calling

nargo execute:However, based on the smaller snippet above, it looks to be using the incorrect location, as the array access being reported is within the then case of an if statement:
Documentation
This PR requires documentation updates when merged.
Additional Context
PR Checklist*
cargo fmton default settings.