summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorThomas Lively <tlively@google.com>2024-11-22 14:21:54 -0800
committerGitHub <noreply@github.com>2024-11-22 14:21:54 -0800
commit013a8d346807da751fec283eddf86aee9ea28382 (patch)
treef867ba4f2e992bd663f1d13b3d2c8c5d814167a8 /src
parentad3735ae7def0923c0f04738c6cba3f86634e865 (diff)
downloadbinaryen-013a8d346807da751fec283eddf86aee9ea28382.tar.gz
binaryen-013a8d346807da751fec283eddf86aee9ea28382.tar.bz2
binaryen-013a8d346807da751fec283eddf86aee9ea28382.zip
Print castType for unreachable br_on_cast{_fail} (#7107)
I forgot that there is a validation rule that the output type for br_on_cast and br_on_cast_fail must be a subtype of the input type. We were previously printing bottom input types in cases where the cast operand was unreachable, but that's only valid if the cast type is the same bottom type. Instead print the most precise valid input type, which is the cast type itself.
Diffstat (limited to 'src')
-rw-r--r--src/passes/Print.cpp10
1 files changed, 4 insertions, 6 deletions
diff --git a/src/passes/Print.cpp b/src/passes/Print.cpp
index 0b15477ee..bbf5f2a6b 100644
--- a/src/passes/Print.cpp
+++ b/src/passes/Print.cpp
@@ -2229,10 +2229,9 @@ struct PrintExpressionContents
o << ' ';
if (curr->ref->type == Type::unreachable) {
// Need to print some reference type in the correct hierarchy rather
- // than unreachable, and the bottom type is valid in the most
- // contexts.
- printType(
- Type(curr->castType.getHeapType().getBottom(), NonNullable));
+ // than unreachable, and the cast type itself is the best possible
+ // option.
+ printType(curr->castType);
} else {
printType(curr->ref->type);
}
@@ -2244,8 +2243,7 @@ struct PrintExpressionContents
curr->name.print(o);
o << ' ';
if (curr->ref->type == Type::unreachable) {
- printType(
- Type(curr->castType.getHeapType().getBottom(), NonNullable));
+ printType(curr->castType);
} else {
printType(curr->ref->type);
}