summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/type-checker.cc6
-rw-r--r--test/regress/regress-11.txt15
2 files changed, 19 insertions, 2 deletions
diff --git a/src/type-checker.cc b/src/type-checker.cc
index 7c14b6db..ef38a1bc 100644
--- a/src/type-checker.cc
+++ b/src/type-checker.cc
@@ -292,8 +292,10 @@ Result TypeChecker::OnBrIf(Index depth) {
COMBINE_RESULT(result, PopAndCheck1Type(Type::I32, "br_if"));
Label* label;
CHECK_RESULT(GetLabel(depth, &label));
- if (label->label_type != LabelType::Loop)
- COMBINE_RESULT(result, CheckSignature(label->sig, "br_if"));
+ if (label->label_type != LabelType::Loop) {
+ COMBINE_RESULT(result, PopAndCheckSignature(label->sig, "br_if"));
+ PushTypes(label->sig);
+ }
return result;
}
diff --git a/test/regress/regress-11.txt b/test/regress/regress-11.txt
new file mode 100644
index 00000000..85ef9be1
--- /dev/null
+++ b/test/regress/regress-11.txt
@@ -0,0 +1,15 @@
+;;; ERROR: 1
+(module
+ (func (result i32)
+ block (result i32)
+ block
+ unreachable
+ br_if 1
+ end
+ i32.const 1
+ end))
+(;; STDERR ;;;
+out/test/regress/regress-11.txt:7:9: error: type stack at end of block is 1, expected 0
+ br_if 1
+ ^^^^^^^
+;;; STDERR ;;)