summaryrefslogtreecommitdiff
path: root/src/validator.cc
diff options
context:
space:
mode:
Diffstat (limited to 'src/validator.cc')
-rw-r--r--src/validator.cc10
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);
}
}