From b36bca1f1b21ccd5d2c21657b4f0616c577e6f6b Mon Sep 17 00:00:00 2001 From: Martin Whitaker Date: Fri, 10 Jul 2020 23:34:11 +0100 Subject: [PATCH] Add support for return statements in void functions. --- elaborate.cc | 15 +++++++++++++-- 1 file changed, 13 insertions(+), 2 deletions(-) diff --git a/elaborate.cc b/elaborate.cc index ac86502ed..01d26e25d 100644 --- a/elaborate.cc +++ b/elaborate.cc @@ -5339,9 +5339,20 @@ NetProc* PReturn::elaborate(Design*des, NetScope*scope) const des->errors += 1; return 0; } + ivl_assert(*this, target->type() == NetScope::FUNC); + + if (target->func_def()->is_void()) { + if (expr_) { + cerr << get_fileline() << ": error: " + << "A value can't be returned from a void function." << endl; + des->errors += 1; + return 0; + } + NetDisable*disa = new NetDisable(target); + disa->set_line( *this ); + return disa; + } - // We don't yet support void functions, so require an - // expression for the return statement. if (expr_ == 0) { cerr << get_fileline() << ": error: " << "Return from " << scope_path(target)