diff options
-rw-r--r-- | src/type-checker.cc | 6 | ||||
-rw-r--r-- | test/regress/regress-11.txt | 15 |
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 ;;) |