Fixes #2477
gcc/rust/ChangeLog:
* typecheck/rust-hir-type-check-expr.cc (TypeCheckExpr::visit):
We need to check if a function context exists
gcc/testsuite/ChangeLog:
* rust/compile/issue-2477.rs: New test.
Signed-off-by: Philip Herron <herron.philip@googlemail.com>
void
TypeCheckExpr::visit (HIR::ReturnExpr &expr)
{
+ if (!context->have_function_context ())
+ {
+ rust_error_at (expr.get_locus (),
+ "return statement outside of function body");
+ infered = new TyTy::ErrorType (expr.get_mappings ().get_hirid ());
+ return;
+ }
+
auto fn_return_tyty = context->peek_return_type ();
location_t expr_locus = expr.has_return_expr ()
? expr.get_expr ()->get_locus ()
--- /dev/null
+const FOO: u32 = return 0;
+// { dg-error "return statement outside of function body" "" { target *-*-* } .-1 }
+// { dg-error "expected .u32. got" "" { target *-*-* } .-2 }