Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
fix: Complete call stacks with no_predicates (#5418)
# Description ## Problem\* Consider the following code: ```rust fn inner<N>(input: Field) { assert_eq(input, 27); } #[no_predicates] fn no_predicates(input: Field) { inner(input) } fn outer_pass_through(input: Field) { no_predicates(input) } fn main(input: Field) { outer_pass_through(input) } ``` This is the call stack with `#[no_predicates]`: ``` ┌─ /mnt/user-data/alvaro/constructor/src/main.nr:23:5 │ 23 │ assert_eq(input, 27); │ -------------------- │ = Call stack: 1. /mnt/user-data/alvaro/constructor/src/main.nr:32:5 2. /mnt/user-data/alvaro/constructor/src/main.nr:28:5 3. /mnt/user-data/alvaro/constructor/src/main.nr:23:5 ``` This is the call stack without `#[no_predicates]`: ``` error: Failed constraint ┌─ /mnt/user-data/alvaro/constructor/src/main.nr:23:5 │ 23 │ assert_eq(input, 27); │ -------------------- │ = Call stack: 1. /mnt/user-data/alvaro/constructor/src/main.nr:35:5 2. /mnt/user-data/alvaro/constructor/src/main.nr:31:5 3. /mnt/user-data/alvaro/constructor/src/main.nr:27:5 4. /mnt/user-data/alvaro/constructor/src/main.nr:23:5 ``` Inlining with no predicates was eating up the `outer_pass_through` call. ## Summary\* The inliner now doesn't assume that there is at most one location in the source call stack. ## Additional Context ## Documentation\* Check one: - [x] No documentation needed. - [ ] Documentation included in this PR. - [ ] **[For Experimental Features]** Documentation to be submitted in a separate PR. # PR Checklist\* - [x] I have tested the changes locally. - [x] I have formatted the changes with [Prettier](https://prettier.io/) and/or `cargo fmt` on default settings.
- Loading branch information