From 9c6de4b25d318c6d211361dd62a112a9d2432c56 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=C3=81lvaro=20Rodr=C3=ADguez?= Date: Fri, 10 May 2024 18:20:03 +0200 Subject: [PATCH] fix: Fix no predicates for brillig with intermediate functions (#5015) # Description ## Problem\* Fixes https://github.com/noir-lang/noir/pull/5012 using the entry point instead of the source function, to consider intermediate functions. ## Summary\* ## 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. --- compiler/noirc_evaluator/src/ssa/opt/inlining.rs | 3 ++- .../execution_success/no_predicates_brillig/src/main.nr | 4 ++++ 2 files changed, 6 insertions(+), 1 deletion(-) diff --git a/compiler/noirc_evaluator/src/ssa/opt/inlining.rs b/compiler/noirc_evaluator/src/ssa/opt/inlining.rs index 77b9e545e03..73dc3888184 100644 --- a/compiler/noirc_evaluator/src/ssa/opt/inlining.rs +++ b/compiler/noirc_evaluator/src/ssa/opt/inlining.rs @@ -393,10 +393,11 @@ impl<'function> PerFunctionContext<'function> { let function = &ssa.functions[&func_id]; // If we have not already finished the flattening pass, functions marked // to not have predicates should be marked as entry points unless we are inlining into brillig. + let entry_point = &ssa.functions[&self.context.entry_point]; let no_predicates_is_entry_point = self.context.no_predicates_is_entry_point && function.is_no_predicates() - && !matches!(self.source_function.runtime(), RuntimeType::Brillig); + && !matches!(entry_point.runtime(), RuntimeType::Brillig); if function.runtime().is_entry_point() || no_predicates_is_entry_point { self.push_instruction(*id); } else { diff --git a/test_programs/execution_success/no_predicates_brillig/src/main.nr b/test_programs/execution_success/no_predicates_brillig/src/main.nr index 1d088473aa7..65e2e5d61fe 100644 --- a/test_programs/execution_success/no_predicates_brillig/src/main.nr +++ b/test_programs/execution_success/no_predicates_brillig/src/main.nr @@ -1,4 +1,8 @@ unconstrained fn main(x: u32, y: pub u32) { + intermediate_function(x, y); +} + +fn intermediate_function(x: u32, y: u32) { basic_checks(x, y); }