diff options
Diffstat (limited to 'src/validator.cc')
-rw-r--r-- | src/validator.cc | 10 |
1 files changed, 6 insertions, 4 deletions
diff --git a/src/validator.cc b/src/validator.cc index b3f231bd..6e52d262 100644 --- a/src/validator.cc +++ b/src/validator.cc @@ -816,16 +816,18 @@ Result Validator::CheckModule() { Index func_index = module->num_func_imports; for (const ModuleField& field : module->fields) { if (auto* f = dyn_cast<FuncModuleField>(&field)) { - result_ |= validator_.BeginFunctionBody(field.loc, func_index++); + const Location& body_start = f->func.loc; + const Location& body_end = + f->func.exprs.empty() ? body_start : f->func.exprs.back().loc; + result_ |= validator_.BeginFunctionBody(body_start, func_index++); for (auto&& decl : f->func.local_types.decls()) { - // TODO: Better location? - result_ |= validator_.OnLocalDecl(field.loc, decl.second, decl.first); + result_ |= validator_.OnLocalDecl(body_start, decl.second, decl.first); } ExprVisitor visitor(this); result_ |= visitor.VisitExprList(const_cast<ExprList&>(f->func.exprs)); - result_ |= validator_.EndFunctionBody(field.loc); + result_ |= validator_.EndFunctionBody(body_end); } } |