From df9fd41c87dfe34e202d54982220f8b0d2afc38b Mon Sep 17 00:00:00 2001 From: Alon Zakai Date: Thu, 30 Jan 2025 15:01:49 -0800 Subject: [PATCH] fix --- src/wasm/wasm-ir-builder.cpp | 3 +++ test/lit/parse-error-return-nofunc.wast | 10 ++++++++++ 2 files changed, 13 insertions(+) create mode 100644 test/lit/parse-error-return-nofunc.wast diff --git a/src/wasm/wasm-ir-builder.cpp b/src/wasm/wasm-ir-builder.cpp index 603768d55cd..78e622b3cb9 100644 --- a/src/wasm/wasm-ir-builder.cpp +++ b/src/wasm/wasm-ir-builder.cpp @@ -1698,6 +1698,9 @@ Result<> IRBuilder::makeDrop() { } Result<> IRBuilder::makeReturn() { + if (!func) { + return Err{"return is only valid in a function context"}; + } Return curr; CHECK_ERR(visitReturn(&curr)); push(builder.makeReturn(curr.value)); diff --git a/test/lit/parse-error-return-nofunc.wast b/test/lit/parse-error-return-nofunc.wast new file mode 100644 index 00000000000..2d745c3e097 --- /dev/null +++ b/test/lit/parse-error-return-nofunc.wast @@ -0,0 +1,10 @@ +;; We should error properly on a return in a non-function scope + +;; RUN: not wasm-opt %s 2>&1 | filecheck %s +;; CHECK: Fatal: 8:5: error: return is only valid in a function context + +(module + (elem + (return) + ) +)