From 31e79cac1e69cb250194ea6668011e248c33a80f Mon Sep 17 00:00:00 2001 From: guipublic Date: Tue, 28 Nov 2023 18:11:09 +0000 Subject: [PATCH 1/2] pub is required on return for entry points --- compiler/noirc_frontend/src/hir/resolution/resolver.rs | 4 ++-- .../compile_success_contract/simple_contract/src/main.nr | 5 +++++ 2 files changed, 7 insertions(+), 2 deletions(-) diff --git a/compiler/noirc_frontend/src/hir/resolution/resolver.rs b/compiler/noirc_frontend/src/hir/resolution/resolver.rs index 4b829932b76..78ed2718c8a 100644 --- a/compiler/noirc_frontend/src/hir/resolution/resolver.rs +++ b/compiler/noirc_frontend/src/hir/resolution/resolver.rs @@ -790,8 +790,8 @@ impl<'a> Resolver<'a> { }); } - // 'pub_allowed' also implies 'pub' is required on return types - if self.pub_allowed(func) + // 'pub' is required on return types for entry point functions + if self.is_entry_point_function(func) && return_type.as_ref() != &Type::Unit && func.def.return_visibility != Visibility::Public { diff --git a/test_programs/compile_success_contract/simple_contract/src/main.nr b/test_programs/compile_success_contract/simple_contract/src/main.nr index 88edd4ac2c3..fea0ae08c22 100644 --- a/test_programs/compile_success_contract/simple_contract/src/main.nr +++ b/test_programs/compile_success_contract/simple_contract/src/main.nr @@ -11,4 +11,9 @@ contract Foo { open internal fn skibbidy(x: Field) -> pub Field { x * 5 } + // Regression for issue #3344 + #[contract_library_method] + fn foo(x : u8) -> u8 { + x + } } From 125e012de2782e908671bfdc5c4b6d2d65be1cb5 Mon Sep 17 00:00:00 2001 From: guipublic Date: Mon, 4 Dec 2023 17:58:24 +0000 Subject: [PATCH 2/2] pub parameters are allowed for entry points --- compiler/noirc_frontend/src/hir/resolution/resolver.rs | 7 ++----- 1 file changed, 2 insertions(+), 5 deletions(-) diff --git a/compiler/noirc_frontend/src/hir/resolution/resolver.rs b/compiler/noirc_frontend/src/hir/resolution/resolver.rs index c29aae44448..0967bc097fb 100644 --- a/compiler/noirc_frontend/src/hir/resolution/resolver.rs +++ b/compiler/noirc_frontend/src/hir/resolution/resolver.rs @@ -847,12 +847,9 @@ impl<'a> Resolver<'a> { } /// True if the 'pub' keyword is allowed on parameters in this function + /// 'pub' on function parameters is only allowed for entry point functions fn pub_allowed(&self, func: &NoirFunction) -> bool { - if self.in_contract { - !func.def.is_unconstrained - } else { - func.name() == MAIN_FUNCTION - } + self.is_entry_point_function(func) } fn is_entry_point_function(&self, func: &NoirFunction) -> bool {