summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/wasm/wasm-type.cpp8
-rw-r--r--test/lit/nominal-good.wast70
2 files changed, 50 insertions, 28 deletions
diff --git a/src/wasm/wasm-type.cpp b/src/wasm/wasm-type.cpp
index 9bae42e98..eb1bd14b1 100644
--- a/src/wasm/wasm-type.cpp
+++ b/src/wasm/wasm-type.cpp
@@ -2278,9 +2278,11 @@ Type TypeBuilder::getTempRttType(Rtt rtt) {
void TypeBuilder::setSubType(size_t i, size_t j) {
assert(i < size() && j < size() && "index out of bounds");
- HeapTypeInfo* sub = impl->entries[i].info.get();
- HeapTypeInfo* super = impl->entries[j].info.get();
- sub->supertype = super;
+ if (typeSystem == TypeSystem::Nominal) {
+ HeapTypeInfo* sub = impl->entries[i].info.get();
+ HeapTypeInfo* super = impl->entries[j].info.get();
+ sub->supertype = super;
+ }
}
namespace {
diff --git a/test/lit/nominal-good.wast b/test/lit/nominal-good.wast
index 8fff43d6a..4110fb96b 100644
--- a/test/lit/nominal-good.wast
+++ b/test/lit/nominal-good.wast
@@ -1,46 +1,66 @@
;; NOTE: Assertions have been generated by update_lit_checks.py and should not be edited.
-;; RUN: wasm-opt %s -all --nominal -S -o - | filecheck %s
-;; RUN: wasm-opt %s -all --nominal --roundtrip -S -o - | filecheck %s
+;; RUN: wasm-opt %s -all --nominal -S -o - | filecheck %s --check-prefix NOMINAL
+;; RUN: wasm-opt %s -all --nominal --roundtrip -S -o - | filecheck %s --check-prefix NOMINAL
+;; RUN: wasm-opt %s -all -S -o - | filecheck %s --check-prefix EQUIREC
+;; RUN: wasm-opt %s -all --roundtrip -S -o - | filecheck %s --check-prefix EQUIREC
(module
- ;; CHECK: (type $super-struct (struct (field i32)))
- ;; CHECK: (type $sub-struct (struct (field i32) (field i64)) (extends $super-struct))
- (type $sub-struct (struct i32 i64) (extends $super-struct))
+ ;; NOMINAL: (type $super-struct (struct (field i32)))
+ ;; EQUIREC: (type $super-struct (struct (field i32)))
(type $super-struct (struct i32))
- ;; CHECK: (type $super-array (array (ref $super-struct)))
- ;; CHECK: (type $sub-array (array (ref $sub-struct)) (extends $super-array))
- (type $sub-array (array (ref $sub-struct)) (extends $super-array))
+ ;; NOMINAL: (type $sub-struct (struct (field i32) (field i64)) (extends $super-struct))
+ ;; EQUIREC: (type $sub-struct (struct (field i32) (field i64)))
+ (type $sub-struct (struct i32 i64) (extends $super-struct))
+
+ ;; NOMINAL: (type $super-array (array (ref $super-struct)))
+ ;; EQUIREC: (type $super-array (array (ref $super-struct)))
(type $super-array (array (ref $super-struct)))
- ;; TODO: signature types as well, once functions store their HeapTypes.
+ ;; NOMINAL: (type $sub-array (array (ref $sub-struct)) (extends $super-array))
+ ;; EQUIREC: (type $sub-array (array (ref $sub-struct)))
+ (type $sub-array (array (ref $sub-struct)) (extends $super-array))
- ;; CHECK: (func $make-sub-struct (result (ref $sub-struct))
- ;; CHECK-NEXT: (unreachable)
- ;; CHECK-NEXT: )
- (func $make-sub-struct (result (ref $sub-struct))
- (unreachable)
- )
+ ;; TODO: signature types as well, once functions store their HeapTypes.
- ;; CHECK: (func $make-super-struct (result (ref $super-struct))
- ;; CHECK-NEXT: (call $make-sub-struct)
- ;; CHECK-NEXT: )
+ ;; NOMINAL: (func $make-super-struct (result (ref $super-struct))
+ ;; NOMINAL-NEXT: (call $make-sub-struct)
+ ;; NOMINAL-NEXT: )
+ ;; EQUIREC: (func $make-super-struct (result (ref $super-struct))
+ ;; EQUIREC-NEXT: (call $make-sub-struct)
+ ;; EQUIREC-NEXT: )
(func $make-super-struct (result (ref $super-struct))
(call $make-sub-struct)
)
- ;; CHECK: (func $make-sub-array (result (ref $sub-array))
- ;; CHECK-NEXT: (unreachable)
- ;; CHECK-NEXT: )
- (func $make-sub-array (result (ref $sub-array))
+ ;; NOMINAL: (func $make-sub-struct (result (ref $sub-struct))
+ ;; NOMINAL-NEXT: (unreachable)
+ ;; NOMINAL-NEXT: )
+ ;; EQUIREC: (func $make-sub-struct (result (ref $sub-struct))
+ ;; EQUIREC-NEXT: (unreachable)
+ ;; EQUIREC-NEXT: )
+ (func $make-sub-struct (result (ref $sub-struct))
(unreachable)
)
- ;; CHECK: (func $make-super-array (result (ref $super-array))
- ;; CHECK-NEXT: (call $make-sub-array)
- ;; CHECK-NEXT: )
+ ;; NOMINAL: (func $make-super-array (result (ref $super-array))
+ ;; NOMINAL-NEXT: (call $make-sub-array)
+ ;; NOMINAL-NEXT: )
+ ;; EQUIREC: (func $make-super-array (result (ref $super-array))
+ ;; EQUIREC-NEXT: (call $make-sub-array)
+ ;; EQUIREC-NEXT: )
(func $make-super-array (result (ref $super-array))
(call $make-sub-array)
)
+
+ ;; NOMINAL: (func $make-sub-array (result (ref $sub-array))
+ ;; NOMINAL-NEXT: (unreachable)
+ ;; NOMINAL-NEXT: )
+ ;; EQUIREC: (func $make-sub-array (result (ref $sub-array))
+ ;; EQUIREC-NEXT: (unreachable)
+ ;; EQUIREC-NEXT: )
+ (func $make-sub-array (result (ref $sub-array))
+ (unreachable)
+ )
)