From e81a8f97bebc44b2e22885c237c305d5ca4f2386 Mon Sep 17 00:00:00 2001 From: Thomas Lively Date: Mon, 2 Mar 2026 11:26:44 -0800 Subject: [PATCH 1/2] [spec] Validation for exact heap types Add Heaptype_ok/exact and Heaptype_sub/exact-l rules for exact heap types in the spectec and in the doc. --- document/core/valid/matching.rst | 3 ++- document/core/valid/types.rst | 8 ++++++++ specification/wasm-latest/2.1-validation.types.spectec | 4 ++++ .../wasm-latest/2.2-validation.subtyping.spectec | 4 ++++ 4 files changed, 18 insertions(+), 1 deletion(-) diff --git a/document/core/valid/matching.rst b/document/core/valid/matching.rst index 200628753..a4cb28d34 100644 --- a/document/core/valid/matching.rst +++ b/document/core/valid/matching.rst @@ -39,7 +39,8 @@ Heap Types $${rule-prose: Heaptype_sub} $${rule: - {Heaptype_sub/refl Heaptype_sub/trans} + {Heaptype_sub/refl Heaptype_sub/exact-l} + {Heaptype_sub/trans} {Heaptype_sub/eq-any Heaptype_sub/i31-eq Heaptype_sub/struct-eq Heaptype_sub/array-eq} {Heaptype_sub/struct Heaptype_sub/array Heaptype_sub/func} {Heaptype_sub/typeidx-l Heaptype_sub/typeidx-r} diff --git a/document/core/valid/types.rst b/document/core/valid/types.rst index b5ba80c84..4dc152dd0 100644 --- a/document/core/valid/types.rst +++ b/document/core/valid/types.rst @@ -58,6 +58,14 @@ $${rule-prose: Heaptype_ok/abs} $${rule: Heaptype_ok/abs} +$${rule-prose: Heaptype_ok/typeuse} + +$${rule: Heaptype_ok/typeuse} + +$${rule-prose: Heaptype_ok/exact} + +$${rule: Heaptype_ok/exact} + .. index:: reference type, heap type pair: validation; reference type diff --git a/specification/wasm-latest/2.1-validation.types.spectec b/specification/wasm-latest/2.1-validation.types.spectec index eac31a140..5325d2cc6 100644 --- a/specification/wasm-latest/2.1-validation.types.spectec +++ b/specification/wasm-latest/2.1-validation.types.spectec @@ -24,6 +24,10 @@ rule Heaptype_ok/typeuse: C |- typeuse : OK -- Typeuse_ok: C |- typeuse : OK +rule Heaptype_ok/exact: + C |- EXACT typeuse : OK + -- Typeuse_ok: C |- typeuse : OK + rule Reftype_ok: C |- REF NULL? heaptype : OK -- Heaptype_ok: C |- heaptype : OK diff --git a/specification/wasm-latest/2.2-validation.subtyping.spectec b/specification/wasm-latest/2.2-validation.subtyping.spectec index 3c2aead03..a38d1f418 100644 --- a/specification/wasm-latest/2.2-validation.subtyping.spectec +++ b/specification/wasm-latest/2.2-validation.subtyping.spectec @@ -20,6 +20,10 @@ rule Vectype_sub: rule Heaptype_sub/refl: C |- heaptype <: heaptype +rule Heaptype_sub/exact-l: + C |- EXACT typeuse <: heaptype + -- Heaptype_sub: C |- typeuse <: heaptype + rule Heaptype_sub/trans: C |- heaptype_1 <: heaptype_2 -- Heaptype_ok: C |- heaptype' : OK From 37ef5c4f88bf0cd69a1e8e7863a4c9a2c9fb7171 Mon Sep 17 00:00:00 2001 From: Thomas Lively Date: Tue, 3 Mar 2026 07:53:23 -0800 Subject: [PATCH 2/2] remove trivial rule from doc --- document/core/valid/types.rst | 4 ---- 1 file changed, 4 deletions(-) diff --git a/document/core/valid/types.rst b/document/core/valid/types.rst index 4dc152dd0..3fd1de4b5 100644 --- a/document/core/valid/types.rst +++ b/document/core/valid/types.rst @@ -58,10 +58,6 @@ $${rule-prose: Heaptype_ok/abs} $${rule: Heaptype_ok/abs} -$${rule-prose: Heaptype_ok/typeuse} - -$${rule: Heaptype_ok/typeuse} - $${rule-prose: Heaptype_ok/exact} $${rule: Heaptype_ok/exact}