Skip to content

Commit adea6e0

Browse files
authored
Ensure printed tuple.extract arity is valid (#6487)
We previously printed the size of the tuple operand as the arity, but that printed `1` when the operand is unreachable. We don't allow our text input to use `1` as the arity, so don't print it, either. Instead, print the smallest valid arity, `2`, in this case.
1 parent dd09242 commit adea6e0

File tree

3 files changed

+9
-4
lines changed

3 files changed

+9
-4
lines changed

src/passes/Print.cpp

Lines changed: 6 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,8 @@
1818
// Print out text in s-expression format
1919
//
2020

21+
#include <algorithm>
22+
2123
#include <ir/iteration.h>
2224
#include <ir/module-utils.h>
2325
#include <ir/table-utils.h>
@@ -2016,7 +2018,10 @@ struct PrintExpressionContents
20162018
}
20172019
void visitTupleExtract(TupleExtract* curr) {
20182020
printMedium(o, "tuple.extract ");
2019-
o << curr->tuple->type.size() << " ";
2021+
// If the tuple is unreachable, its size will be reported as 1, but that's
2022+
// not a valid tuple size. The size we print mostly doesn't matter if the
2023+
// tuple is unreachable, but it does have to be valid.
2024+
o << std::max(curr->tuple->type.size(), size_t(2)) << " ";
20202025
o << curr->index;
20212026
}
20222027
void visitRefI31(RefI31* curr) { printMedium(o, "ref.i31"); }

test/lit/passes/optimize-instructions-multivalue.wast

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -103,7 +103,7 @@
103103
)
104104

105105
;; CHECK: (func $extract-make-unreachable (param $x i32) (param $y i32) (result i32)
106-
;; CHECK-NEXT: (tuple.extract 1 0
106+
;; CHECK-NEXT: (tuple.extract 2 0
107107
;; CHECK-NEXT: (tuple.make 2
108108
;; CHECK-NEXT: (unreachable)
109109
;; CHECK-NEXT: (local.get $y)

test/lit/passes/tuple-optimization.wast

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -580,12 +580,12 @@
580580
;; CHECK-NEXT: (unreachable)
581581
;; CHECK-NEXT: )
582582
;; CHECK-NEXT: (drop
583-
;; CHECK-NEXT: (tuple.extract 1 0
583+
;; CHECK-NEXT: (tuple.extract 2 0
584584
;; CHECK-NEXT: (unreachable)
585585
;; CHECK-NEXT: )
586586
;; CHECK-NEXT: )
587587
;; CHECK-NEXT: (drop
588-
;; CHECK-NEXT: (tuple.extract 1 1
588+
;; CHECK-NEXT: (tuple.extract 2 1
589589
;; CHECK-NEXT: (local.tee $tuple
590590
;; CHECK-NEXT: (unreachable)
591591
;; CHECK-NEXT: )

0 commit comments

Comments
 (0)