[PATCH] D147852: [WebAssembly] Handle unreachable in block-like structure in type checker
Heejin Ahn via Phabricator via llvm-commits
llvm-commits at lists.llvm.org
Sat Apr 8 07:26:13 PDT 2023
aheejin updated this revision to Diff 511890.
aheejin added a comment.
Test name change
Repository:
rG LLVM Github Monorepo
CHANGES SINCE LAST ACTION
https://reviews.llvm.org/D147852/new/
https://reviews.llvm.org/D147852
Files:
llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmTypeCheck.cpp
llvm/test/MC/WebAssembly/type-checker-errors.s
llvm/test/MC/WebAssembly/type-checker-return.s
Index: llvm/test/MC/WebAssembly/type-checker-return.s
===================================================================
--- llvm/test/MC/WebAssembly/type-checker-return.s
+++ llvm/test/MC/WebAssembly/type-checker-return.s
@@ -27,3 +27,9 @@
i32.const 2
return_call fn_void_to_void
end_function
+
+no_check_after_unreachable:
+ .functype no_check_after_unreachable () -> ()
+ unreachable
+ drop
+ end_function
Index: llvm/test/MC/WebAssembly/type-checker-errors.s
===================================================================
--- llvm/test/MC/WebAssembly/type-checker-errors.s
+++ llvm/test/MC/WebAssembly/type-checker-errors.s
@@ -513,3 +513,44 @@
f32.add
# CHECK: :[[@LINE+1]]:3: error: 1 superfluous return values
end_function
+
+check_after_unreachable_within_block:
+ .functype check_after_unreachable_within_block () -> ()
+ block
+ unreachable
+ end_block
+# CHECK: :[[@LINE+1]]:3: error: empty stack while popping value
+ drop
+ end_function
+
+check_after_unreachable_within_loop:
+ .functype check_after_unreachable_within_loop () -> ()
+ loop
+ unreachable
+ end_loop
+# CHECK: :[[@LINE+1]]:3: error: empty stack while popping value
+ drop
+ end_function
+
+check_after_unreachable_within_if:
+ .functype check_after_unreachable_within_if () -> ()
+ i32.const 0
+ if
+ unreachable
+ else
+ unreachable
+ end_if
+# CHECK: :[[@LINE+1]]:3: error: empty stack while popping value
+ drop
+ end_function
+
+check_after_unreachable_within_try:
+ .functype check_after_unreachable_within_try () -> ()
+ try
+ unreachable
+ catch_all
+ unreachable
+ end_try
+# CHECK: :[[@LINE+1]]:3: error: empty stack while popping value
+ drop
+ end_function
Index: llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmTypeCheck.cpp
===================================================================
--- llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmTypeCheck.cpp
+++ llvm/lib/Target/WebAssembly/AsmParser/WebAssemblyAsmTypeCheck.cpp
@@ -303,7 +303,7 @@
Name == "else" || Name == "end_try") {
if (checkEnd(ErrorLoc, Name == "else"))
return true;
- if (Name == "end_block")
+ if (Name.startswith("end_"))
Unreachable = false;
} else if (Name == "return") {
if (endOfFunction(ErrorLoc))
-------------- next part --------------
A non-text attachment was scrubbed...
Name: D147852.511890.patch
Type: text/x-patch
Size: 2281 bytes
Desc: not available
URL: <http://lists.llvm.org/pipermail/llvm-commits/attachments/20230408/e94810e2/attachment.bin>
More information about the llvm-commits
mailing list