From 5013f2f81959987d0ebb5992ca6927e3ec9b8c99 Mon Sep 17 00:00:00 2001 From: Volker Berlin Date: Wed, 27 Jul 2022 21:21:03 +0200 Subject: [PATCH] fix wrong block return type calculation with synchronized --- .../jwebassembly/module/WasmBlockInstruction.java | 2 ++ .../jwebassembly/runtime/Exceptions.java | 13 +++++++++++++ 2 files changed, 15 insertions(+) diff --git a/src/de/inetsoftware/jwebassembly/module/WasmBlockInstruction.java b/src/de/inetsoftware/jwebassembly/module/WasmBlockInstruction.java index 3a403bc..0186644 100644 --- a/src/de/inetsoftware/jwebassembly/module/WasmBlockInstruction.java +++ b/src/de/inetsoftware/jwebassembly/module/WasmBlockInstruction.java @@ -133,6 +133,8 @@ class WasmBlockInstruction extends WasmInstruction { case DROP: case THROW: case RETHROW: + case MONITOR_ENTER: + case MONITOR_EXIT: return 1; case BLOCK: return data instanceof BlockType ? ((BlockType)data).getParams().size() : 0; diff --git a/test/de/inetsoftware/jwebassembly/runtime/Exceptions.java b/test/de/inetsoftware/jwebassembly/runtime/Exceptions.java index 51fd2b3..0b27b1f 100644 --- a/test/de/inetsoftware/jwebassembly/runtime/Exceptions.java +++ b/test/de/inetsoftware/jwebassembly/runtime/Exceptions.java @@ -53,6 +53,7 @@ public class Exceptions extends AbstractBaseTest { addParam( list, script, "complex" ); addParam( list, script, "sync" ); addParam( list, script, "syncWithInnerTryCatch" ); + addParam( list, script, "syncInsideCondition" ); addParam( list, script, "emptyCatch" ); addParam( list, script, "multiCatch" ); addParam( list, script, "multiCatch2" ); @@ -193,6 +194,18 @@ public class Exceptions extends AbstractBaseTest { return result; } + @Export + static int syncInsideCondition() { + int value = 0; + Object obj = new Object(); + if( value == 0 ) { + synchronized( obj ) { + value = 42; + } + } + return value; + } + @Export static int emptyCatch() { int h = 127; // variable slot 0