diff --git a/zokrates_cli/examples/compile_errors/no_return.zok b/zokrates_cli/examples/compile_errors/no_return.zok deleted file mode 100644 index 058212d5..00000000 --- a/zokrates_cli/examples/compile_errors/no_return.zok +++ /dev/null @@ -1,5 +0,0 @@ -def foo() {} - -def main() { - return; -} diff --git a/zokrates_core/src/semantics.rs b/zokrates_core/src/semantics.rs index 750ffaf0..38af1fdc 100644 --- a/zokrates_core/src/semantics.rs +++ b/zokrates_core/src/semantics.rs @@ -1186,10 +1186,22 @@ impl<'ast, T: Field> Checker<'ast, T> { } if !found_return { - errors.push(ErrorInner { - pos: Some(pos), - message: "Expected a return statement".to_string(), - }); + match &s.output { + box DeclarationType::Tuple(tuple_type) + if tuple_type.elements.is_empty() => + { + statements_checked.push(TypedStatement::Return(TypedExpression::Tuple( + TupleExpressionInner::Value(vec![]) + .annotate(TupleType::new(vec![])), + ))) + } + _ => { + errors.push(ErrorInner { + pos: Some(pos), + message: "Expected a return statement".to_string(), + }); + } + } } signature = Some(s); diff --git a/zokrates_core_test/tests/tests/no_return.json b/zokrates_core_test/tests/tests/no_return.json new file mode 100644 index 00000000..c6f09add --- /dev/null +++ b/zokrates_core_test/tests/tests/no_return.json @@ -0,0 +1,5 @@ +{ + "entry_point": "./tests/tests/no_return.zok", + "tests": [ + ] +} \ No newline at end of file diff --git a/zokrates_core_test/tests/tests/no_return.zok b/zokrates_core_test/tests/tests/no_return.zok new file mode 100644 index 00000000..940c5093 --- /dev/null +++ b/zokrates_core_test/tests/tests/no_return.zok @@ -0,0 +1,9 @@ +def foo() { + return; +} + +def bar() { + return foo(); +} + +def main() {} \ No newline at end of file