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) + ) +)