diff --git a/src/syscall/zx/fidl/conformance/impl.go b/src/syscall/zx/fidl/conformance/impl.go
index cfd9ae0..df5665f 100644
--- a/src/syscall/zx/fidl/conformance/impl.go
+++ b/src/syscall/zx/fidl/conformance/impl.go
@@ -2,12 +2,13 @@
 // Use of this source code is governed by a BSD-style license that can be
 // found in the LICENSE file.
 //
-// GENERATED FILE: Do not edit!
-//
-// To rebuild this file, invoke third_party/go/regen-fidl.
+// Code generated by tools/fidl/gidl-conformance-suite/regen.sh; DO NOT EDIT.
 
 // +build fuchsia
 
+//
+// Code generated by fidlgen; DO NOT EDIT.
+
 package conformance
 
 import (
@@ -15,6 +16,340 @@
 	_bindings "syscall/zx/fidl"
 )
 
+type UnionWithBoundStringStruct struct {
+	_ struct{}             `fidl:"s,24,8" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	V UnionWithBoundString `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+}
+
+var _mUnionWithBoundStringStruct = _bindings.CreateLazyMarshaler(UnionWithBoundStringStruct{})
+
+func (msg *UnionWithBoundStringStruct) Marshaler() _bindings.Marshaler {
+	return _mUnionWithBoundStringStruct
+}
+
+type SingleVariantUnionStruct struct {
+	_ struct{}           `fidl:"s,8,4" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	U SingleVariantUnion `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+}
+
+var _mSingleVariantUnionStruct = _bindings.CreateLazyMarshaler(SingleVariantUnionStruct{})
+
+func (msg *SingleVariantUnionStruct) Marshaler() _bindings.Marshaler {
+	return _mSingleVariantUnionStruct
+}
+
+type SandwichUnionSize8Alignment4 struct {
+	_      struct{}             `fidl:"s,16,4" fidl_size_v1:"40" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"40" fidl_alignment_v1_no_ee:"8"`
+	Before uint32               `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Value  UnionSize8Alignment4 `fidl:"4" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
+	After  uint32               `fidl:"12" fidl_offset_v1:"32" fidl_offset_v1_no_ee:"32"`
+}
+
+var _mSandwichUnionSize8Alignment4 = _bindings.CreateLazyMarshaler(SandwichUnionSize8Alignment4{})
+
+func (msg *SandwichUnionSize8Alignment4) Marshaler() _bindings.Marshaler {
+	return _mSandwichUnionSize8Alignment4
+}
+
+type SandwichUnionSize12Alignment4 struct {
+	_      struct{}              `fidl:"s,20,4" fidl_size_v1:"40" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"40" fidl_alignment_v1_no_ee:"8"`
+	Before uint32                `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Value  UnionSize12Alignment4 `fidl:"4" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
+	After  uint32                `fidl:"16" fidl_offset_v1:"32" fidl_offset_v1_no_ee:"32"`
+}
+
+var _mSandwichUnionSize12Alignment4 = _bindings.CreateLazyMarshaler(SandwichUnionSize12Alignment4{})
+
+func (msg *SandwichUnionSize12Alignment4) Marshaler() _bindings.Marshaler {
+	return _mSandwichUnionSize12Alignment4
+}
+
+type StructSize16Alignment8 struct {
+	_  struct{} `fidl:"s,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
+	F1 uint64   `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	F2 uint64   `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
+}
+
+var _mStructSize16Alignment8 = _bindings.CreateLazyMarshaler(StructSize16Alignment8{})
+
+func (msg *StructSize16Alignment8) Marshaler() _bindings.Marshaler {
+	return _mStructSize16Alignment8
+}
+
+type SandwichUnionSize24Alignment8 struct {
+	_      struct{}              `fidl:"s,40,8" fidl_size_v1:"40" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"40" fidl_alignment_v1_no_ee:"8"`
+	Before uint32                `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Value  UnionSize24Alignment8 `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
+	After  uint32                `fidl:"32" fidl_offset_v1:"32" fidl_offset_v1_no_ee:"32"`
+}
+
+var _mSandwichUnionSize24Alignment8 = _bindings.CreateLazyMarshaler(SandwichUnionSize24Alignment8{})
+
+func (msg *SandwichUnionSize24Alignment8) Marshaler() _bindings.Marshaler {
+	return _mSandwichUnionSize24Alignment8
+}
+
+type SandwichUnionSize36Alignment4 struct {
+	_      struct{}              `fidl:"s,44,4" fidl_size_v1:"40" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"40" fidl_alignment_v1_no_ee:"8"`
+	Before uint32                `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Value  UnionSize36Alignment4 `fidl:"4" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
+	After  uint32                `fidl:"40" fidl_offset_v1:"32" fidl_offset_v1_no_ee:"32"`
+}
+
+var _mSandwichUnionSize36Alignment4 = _bindings.CreateLazyMarshaler(SandwichUnionSize36Alignment4{})
+
+func (msg *SandwichUnionSize36Alignment4) Marshaler() _bindings.Marshaler {
+	return _mSandwichUnionSize36Alignment4
+}
+
+type Length2StringWrapper struct {
+	_             struct{} `fidl:"s,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
+	Length2String string   `fidl:"0,2" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+}
+
+var _mLength2StringWrapper = _bindings.CreateLazyMarshaler(Length2StringWrapper{})
+
+func (msg *Length2StringWrapper) Marshaler() _bindings.Marshaler {
+	return _mLength2StringWrapper
+}
+
+type StringWrapper struct {
+	_   struct{} `fidl:"s,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
+	Str string   `fidl:"0," fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+}
+
+var _mStringWrapper = _bindings.CreateLazyMarshaler(StringWrapper{})
+
+func (msg *StringWrapper) Marshaler() _bindings.Marshaler {
+	return _mStringWrapper
+}
+
+type TestXUnionInTable struct {
+	_     struct{}      `fidl:"s,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
+	Value XUnionInTable `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+}
+
+var _mTestXUnionInTable = _bindings.CreateLazyMarshaler(TestXUnionInTable{})
+
+func (msg *TestXUnionInTable) Marshaler() _bindings.Marshaler {
+	return _mTestXUnionInTable
+}
+
+type InterfaceConfig struct {
+	_               struct{}        `fidl:"s,48,8" fidl_size_v1:"40" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"40" fidl_alignment_v1_no_ee:"8"`
+	Name            string          `fidl:"0," fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	IpAddressConfig IpAddressConfig `fidl:"16" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+}
+
+var _mInterfaceConfig = _bindings.CreateLazyMarshaler(InterfaceConfig{})
+
+func (msg *InterfaceConfig) Marshaler() _bindings.Marshaler {
+	return _mInterfaceConfig
+}
+
+type TestAddEthernetDeviceRequest struct {
+	_                   struct{}        `fidl:"s,72,8" fidl_size_v1:"64" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"64" fidl_alignment_v1_no_ee:"8"`
+	TopologicalPath     string          `fidl:"0," fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Config              InterfaceConfig `fidl:"16" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	ThisShouldBeAHandle uint32          `fidl:"64" fidl_offset_v1:"56" fidl_offset_v1_no_ee:"56"`
+}
+
+var _mTestAddEthernetDeviceRequest = _bindings.CreateLazyMarshaler(TestAddEthernetDeviceRequest{})
+
+func (msg *TestAddEthernetDeviceRequest) Marshaler() _bindings.Marshaler {
+	return _mTestAddEthernetDeviceRequest
+}
+
+type NodeAttributes struct {
+	_                struct{} `fidl:"s,56,8" fidl_size_v1:"56" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"56" fidl_alignment_v1_no_ee:"8"`
+	Mode             uint32   `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Id               uint64   `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
+	ContentSize      uint64   `fidl:"16" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	StorageSize      uint64   `fidl:"24" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
+	LinkCount        uint64   `fidl:"32" fidl_offset_v1:"32" fidl_offset_v1_no_ee:"32"`
+	CreationTime     uint64   `fidl:"40" fidl_offset_v1:"40" fidl_offset_v1_no_ee:"40"`
+	ModificationTime uint64   `fidl:"48" fidl_offset_v1:"48" fidl_offset_v1_no_ee:"48"`
+}
+
+var _mNodeAttributes = _bindings.CreateLazyMarshaler(NodeAttributes{})
+
+func (msg *NodeAttributes) Marshaler() _bindings.Marshaler {
+	return _mNodeAttributes
+}
+
+type FileGetAttrResponse struct {
+	_          struct{}       `fidl:"s,64,8" fidl_size_v1:"64" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"64" fidl_alignment_v1_no_ee:"8"`
+	S          int32          `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Attributes NodeAttributes `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
+}
+
+var _mFileGetAttrResponse = _bindings.CreateLazyMarshaler(FileGetAttrResponse{})
+
+func (msg *FileGetAttrResponse) Marshaler() _bindings.Marshaler {
+	return _mFileGetAttrResponse
+}
+
+type StructOfSimpleTable struct {
+	_     struct{}    `fidl:"s,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
+	Table SimpleTable `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+}
+
+var _mStructOfSimpleTable = _bindings.CreateLazyMarshaler(StructOfSimpleTable{})
+
+func (msg *StructOfSimpleTable) Marshaler() _bindings.Marshaler {
+	return _mStructOfSimpleTable
+}
+
+type SimpleTableThenUint64 struct {
+	_      struct{}    `fidl:"s,24,8" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	Table  SimpleTable `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Number uint64      `fidl:"16" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+}
+
+var _mSimpleTableThenUint64 = _bindings.CreateLazyMarshaler(SimpleTableThenUint64{})
+
+func (msg *SimpleTableThenUint64) Marshaler() _bindings.Marshaler {
+	return _mSimpleTableThenUint64
+}
+
+type StructOfTableWithStringAndVector struct {
+	_     struct{}                 `fidl:"s,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
+	Table TableWithStringAndVector `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+}
+
+var _mStructOfTableWithStringAndVector = _bindings.CreateLazyMarshaler(StructOfTableWithStringAndVector{})
+
+func (msg *StructOfTableWithStringAndVector) Marshaler() _bindings.Marshaler {
+	return _mStructOfTableWithStringAndVector
+}
+
+type Int64Struct struct {
+	_ struct{} `fidl:"s,8,8" fidl_size_v1:"8" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"8"`
+	X int64    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+}
+
+var _mInt64Struct = _bindings.CreateLazyMarshaler(Int64Struct{})
+
+func (msg *Int64Struct) Marshaler() _bindings.Marshaler {
+	return _mInt64Struct
+}
+
+type TestInlineXUnionInStruct struct {
+	_      struct{}     `fidl:"s,56,8" fidl_size_v1:"56" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"56" fidl_alignment_v1_no_ee:"8"`
+	Before string       `fidl:"0," fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Xu     SampleXUnion `fidl:"16" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	After  string       `fidl:"40," fidl_offset_v1:"40" fidl_offset_v1_no_ee:"40"`
+}
+
+var _mTestInlineXUnionInStruct = _bindings.CreateLazyMarshaler(TestInlineXUnionInStruct{})
+
+func (msg *TestInlineXUnionInStruct) Marshaler() _bindings.Marshaler {
+	return _mTestInlineXUnionInStruct
+}
+
+type TestOptionalXUnionInStruct struct {
+	_      struct{}      `fidl:"s,56,8" fidl_size_v1:"56" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"56" fidl_alignment_v1_no_ee:"8"`
+	Before string        `fidl:"0," fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Xu     *SampleXUnion `fidl:"16" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	After  string        `fidl:"40," fidl_offset_v1:"40" fidl_offset_v1_no_ee:"40"`
+}
+
+var _mTestOptionalXUnionInStruct = _bindings.CreateLazyMarshaler(TestOptionalXUnionInStruct{})
+
+func (msg *TestOptionalXUnionInStruct) Marshaler() _bindings.Marshaler {
+	return _mTestOptionalXUnionInStruct
+}
+
+type TestStrictXUnionInStruct struct {
+	_  struct{}           `fidl:"s,24,8" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	Xu SampleStrictXUnion `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+}
+
+var _mTestStrictXUnionInStruct = _bindings.CreateLazyMarshaler(TestStrictXUnionInStruct{})
+
+func (msg *TestStrictXUnionInStruct) Marshaler() _bindings.Marshaler {
+	return _mTestStrictXUnionInStruct
+}
+
+type TestFlexibleXUnionInStruct struct {
+	_  struct{}     `fidl:"s,24,8" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	Xu SampleXUnion `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+}
+
+var _mTestFlexibleXUnionInStruct = _bindings.CreateLazyMarshaler(TestFlexibleXUnionInStruct{})
+
+func (msg *TestFlexibleXUnionInStruct) Marshaler() _bindings.Marshaler {
+	return _mTestFlexibleXUnionInStruct
+}
+
+type StructWithOptionals struct {
+	_   struct{}               `fidl:"s,104,8" fidl_size_v1:"128" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"128" fidl_alignment_v1_no_ee:"8"`
+	S   EmptyStruct            `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	S2  *EmptyStruct           `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
+	T   TableWithEmptyStruct   `fidl:"16" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	Xu  XUnionWithEmptyStruct  `fidl:"32" fidl_offset_v1:"32" fidl_offset_v1_no_ee:"32"`
+	Xu2 *XUnionWithEmptyStruct `fidl:"56" fidl_offset_v1:"56" fidl_offset_v1_no_ee:"56"`
+	U   UnionWithEmptyStruct   `fidl:"80" fidl_offset_v1:"80" fidl_offset_v1_no_ee:"80"`
+	U2  *UnionWithEmptyStruct  `fidl:"96" fidl_offset_v1:"104" fidl_offset_v1_no_ee:"104"`
+}
+
+var _mStructWithOptionals = _bindings.CreateLazyMarshaler(StructWithOptionals{})
+
+func (msg *StructWithOptionals) Marshaler() _bindings.Marshaler {
+	return _mStructWithOptionals
+}
+
+type EmptyStruct struct {
+	_ struct{} `fidl:"s,1,1" fidl_size_v1:"1" fidl_alignment_v1:"1" fidl_size_v1_no_ee:"1" fidl_alignment_v1_no_ee:"1"`
+}
+
+var _mEmptyStruct = _bindings.CreateLazyMarshaler(EmptyStruct{})
+
+func (msg *EmptyStruct) Marshaler() _bindings.Marshaler {
+	return _mEmptyStruct
+}
+
+type EmptyStructSandwich struct {
+	_      struct{}    `fidl:"s,40,8" fidl_size_v1:"40" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"40" fidl_alignment_v1_no_ee:"8"`
+	Before string      `fidl:"0," fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	Es     EmptyStruct `fidl:"16" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	After  string      `fidl:"24," fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
+}
+
+var _mEmptyStructSandwich = _bindings.CreateLazyMarshaler(EmptyStructSandwich{})
+
+func (msg *EmptyStructSandwich) Marshaler() _bindings.Marshaler {
+	return _mEmptyStructSandwich
+}
+
+type Uint8Uint16Uint32Uint64 struct {
+	_  struct{} `fidl:"s,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
+	F1 uint8    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	F2 uint16   `fidl:"2" fidl_offset_v1:"2" fidl_offset_v1_no_ee:"2"`
+	F3 uint32   `fidl:"4" fidl_offset_v1:"4" fidl_offset_v1_no_ee:"4"`
+	F4 uint64   `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
+}
+
+var _mUint8Uint16Uint32Uint64 = _bindings.CreateLazyMarshaler(Uint8Uint16Uint32Uint64{})
+
+func (msg *Uint8Uint16Uint32Uint64) Marshaler() _bindings.Marshaler {
+	return _mUint8Uint16Uint32Uint64
+}
+
+type Uint64Uint32Uint16Uint8 struct {
+	_  struct{} `fidl:"s,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
+	F1 uint64   `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	F2 uint32   `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
+	F3 uint16   `fidl:"12" fidl_offset_v1:"12" fidl_offset_v1_no_ee:"12"`
+	F4 uint8    `fidl:"14" fidl_offset_v1:"14" fidl_offset_v1_no_ee:"14"`
+}
+
+var _mUint64Uint32Uint16Uint8 = _bindings.CreateLazyMarshaler(Uint64Uint32Uint16Uint8{})
+
+func (msg *Uint64Uint32Uint16Uint8) Marshaler() _bindings.Marshaler {
+	return _mUint64Uint32Uint16Uint8
+}
+
 type ThreeByte struct {
 	_     struct{} `fidl:"s,3,1" fidl_size_v1:"3" fidl_alignment_v1:"1" fidl_size_v1_no_ee:"3" fidl_alignment_v1_no_ee:"1"`
 	Elem1 uint8    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
@@ -154,88 +489,6 @@
 	return _mStructWithVectors
 }
 
-type TestXUnionInTable struct {
-	_     struct{}      `fidl:"s,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
-	Value XUnionInTable `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-}
-
-var _mTestXUnionInTable = _bindings.CreateLazyMarshaler(TestXUnionInTable{})
-
-func (msg *TestXUnionInTable) Marshaler() _bindings.Marshaler {
-	return _mTestXUnionInTable
-}
-
-type InterfaceConfig struct {
-	_               struct{}        `fidl:"s,48,8" fidl_size_v1:"40" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"40" fidl_alignment_v1_no_ee:"8"`
-	Name            string          `fidl:"0," fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-	IpAddressConfig IpAddressConfig `fidl:"16" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-}
-
-var _mInterfaceConfig = _bindings.CreateLazyMarshaler(InterfaceConfig{})
-
-func (msg *InterfaceConfig) Marshaler() _bindings.Marshaler {
-	return _mInterfaceConfig
-}
-
-type TestAddEthernetDeviceRequest struct {
-	_                   struct{}        `fidl:"s,72,8" fidl_size_v1:"64" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"64" fidl_alignment_v1_no_ee:"8"`
-	TopologicalPath     string          `fidl:"0," fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-	Config              InterfaceConfig `fidl:"16" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	ThisShouldBeAHandle uint32          `fidl:"64" fidl_offset_v1:"56" fidl_offset_v1_no_ee:"56"`
-}
-
-var _mTestAddEthernetDeviceRequest = _bindings.CreateLazyMarshaler(TestAddEthernetDeviceRequest{})
-
-func (msg *TestAddEthernetDeviceRequest) Marshaler() _bindings.Marshaler {
-	return _mTestAddEthernetDeviceRequest
-}
-
-type NodeAttributes struct {
-	_                struct{} `fidl:"s,56,8" fidl_size_v1:"56" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"56" fidl_alignment_v1_no_ee:"8"`
-	Mode             uint32   `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-	Id               uint64   `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
-	ContentSize      uint64   `fidl:"16" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	StorageSize      uint64   `fidl:"24" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
-	LinkCount        uint64   `fidl:"32" fidl_offset_v1:"32" fidl_offset_v1_no_ee:"32"`
-	CreationTime     uint64   `fidl:"40" fidl_offset_v1:"40" fidl_offset_v1_no_ee:"40"`
-	ModificationTime uint64   `fidl:"48" fidl_offset_v1:"48" fidl_offset_v1_no_ee:"48"`
-}
-
-var _mNodeAttributes = _bindings.CreateLazyMarshaler(NodeAttributes{})
-
-func (msg *NodeAttributes) Marshaler() _bindings.Marshaler {
-	return _mNodeAttributes
-}
-
-type FileGetAttrResponse struct {
-	_          struct{}       `fidl:"s,64,8" fidl_size_v1:"64" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"64" fidl_alignment_v1_no_ee:"8"`
-	S          int32          `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-	Attributes NodeAttributes `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
-}
-
-var _mFileGetAttrResponse = _bindings.CreateLazyMarshaler(FileGetAttrResponse{})
-
-func (msg *FileGetAttrResponse) Marshaler() _bindings.Marshaler {
-	return _mFileGetAttrResponse
-}
-
-type StructWithOptionals struct {
-	_   struct{}               `fidl:"s,104,8" fidl_size_v1:"128" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"128" fidl_alignment_v1_no_ee:"8"`
-	S   EmptyStruct            `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-	S2  *EmptyStruct           `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
-	T   TableWithEmptyStruct   `fidl:"16" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	Xu  XUnionWithEmptyStruct  `fidl:"32" fidl_offset_v1:"32" fidl_offset_v1_no_ee:"32"`
-	Xu2 *XUnionWithEmptyStruct `fidl:"56" fidl_offset_v1:"56" fidl_offset_v1_no_ee:"56"`
-	U   UnionWithEmptyStruct   `fidl:"80" fidl_offset_v1:"80" fidl_offset_v1_no_ee:"80"`
-	U2  *UnionWithEmptyStruct  `fidl:"96" fidl_offset_v1:"104" fidl_offset_v1_no_ee:"104"`
-}
-
-var _mStructWithOptionals = _bindings.CreateLazyMarshaler(StructWithOptionals{})
-
-func (msg *StructWithOptionals) Marshaler() _bindings.Marshaler {
-	return _mStructWithOptionals
-}
-
 type MyBool struct {
 	_     struct{} `fidl:"s,1,1" fidl_size_v1:"1" fidl_alignment_v1:"1" fidl_size_v1_no_ee:"1" fidl_alignment_v1_no_ee:"1"`
 	Value bool     `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
@@ -368,336 +621,327 @@
 	return _mMyFloat64
 }
 
-type Length2StringWrapper struct {
-	_             struct{} `fidl:"s,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
-	Length2String string   `fidl:"0,2" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-}
-
-var _mLength2StringWrapper = _bindings.CreateLazyMarshaler(Length2StringWrapper{})
-
-func (msg *Length2StringWrapper) Marshaler() _bindings.Marshaler {
-	return _mLength2StringWrapper
-}
-
-type StringWrapper struct {
-	_   struct{} `fidl:"s,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
-	Str string   `fidl:"0," fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-}
-
-var _mStringWrapper = _bindings.CreateLazyMarshaler(StringWrapper{})
-
-func (msg *StringWrapper) Marshaler() _bindings.Marshaler {
-	return _mStringWrapper
-}
-
-type EmptyStruct struct {
-	_ struct{} `fidl:"s,1,1" fidl_size_v1:"1" fidl_alignment_v1:"1" fidl_size_v1_no_ee:"1" fidl_alignment_v1_no_ee:"1"`
-}
-
-var _mEmptyStruct = _bindings.CreateLazyMarshaler(EmptyStruct{})
-
-func (msg *EmptyStruct) Marshaler() _bindings.Marshaler {
-	return _mEmptyStruct
-}
-
-type EmptyStructSandwich struct {
-	_      struct{}    `fidl:"s,40,8" fidl_size_v1:"40" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"40" fidl_alignment_v1_no_ee:"8"`
-	Before string      `fidl:"0," fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-	Es     EmptyStruct `fidl:"16" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	After  string      `fidl:"24," fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
-}
-
-var _mEmptyStructSandwich = _bindings.CreateLazyMarshaler(EmptyStructSandwich{})
-
-func (msg *EmptyStructSandwich) Marshaler() _bindings.Marshaler {
-	return _mEmptyStructSandwich
-}
-
-type Uint8Uint16Uint32Uint64 struct {
-	_  struct{} `fidl:"s,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
-	F1 uint8    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-	F2 uint16   `fidl:"2" fidl_offset_v1:"2" fidl_offset_v1_no_ee:"2"`
-	F3 uint32   `fidl:"4" fidl_offset_v1:"4" fidl_offset_v1_no_ee:"4"`
-	F4 uint64   `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
-}
-
-var _mUint8Uint16Uint32Uint64 = _bindings.CreateLazyMarshaler(Uint8Uint16Uint32Uint64{})
-
-func (msg *Uint8Uint16Uint32Uint64) Marshaler() _bindings.Marshaler {
-	return _mUint8Uint16Uint32Uint64
-}
-
-type Uint64Uint32Uint16Uint8 struct {
-	_  struct{} `fidl:"s,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
-	F1 uint64   `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-	F2 uint32   `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
-	F3 uint16   `fidl:"12" fidl_offset_v1:"12" fidl_offset_v1_no_ee:"12"`
-	F4 uint8    `fidl:"14" fidl_offset_v1:"14" fidl_offset_v1_no_ee:"14"`
-}
-
-var _mUint64Uint32Uint16Uint8 = _bindings.CreateLazyMarshaler(Uint64Uint32Uint16Uint8{})
-
-func (msg *Uint64Uint32Uint16Uint8) Marshaler() _bindings.Marshaler {
-	return _mUint64Uint32Uint16Uint8
-}
-
-type StructOfSimpleTable struct {
-	_     struct{}    `fidl:"s,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
-	Table SimpleTable `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-}
-
-var _mStructOfSimpleTable = _bindings.CreateLazyMarshaler(StructOfSimpleTable{})
-
-func (msg *StructOfSimpleTable) Marshaler() _bindings.Marshaler {
-	return _mStructOfSimpleTable
-}
-
-type SimpleTableThenUint64 struct {
-	_      struct{}    `fidl:"s,24,8" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
-	Table  SimpleTable `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-	Number uint64      `fidl:"16" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-}
-
-var _mSimpleTableThenUint64 = _bindings.CreateLazyMarshaler(SimpleTableThenUint64{})
-
-func (msg *SimpleTableThenUint64) Marshaler() _bindings.Marshaler {
-	return _mSimpleTableThenUint64
-}
-
-type StructOfTableWithStringAndVector struct {
-	_     struct{}                 `fidl:"s,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
-	Table TableWithStringAndVector `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-}
-
-var _mStructOfTableWithStringAndVector = _bindings.CreateLazyMarshaler(StructOfTableWithStringAndVector{})
-
-func (msg *StructOfTableWithStringAndVector) Marshaler() _bindings.Marshaler {
-	return _mStructOfTableWithStringAndVector
-}
-
-type UnionWithBoundStringStruct struct {
-	_ struct{}             `fidl:"s,24,8" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
-	V UnionWithBoundString `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-}
-
-var _mUnionWithBoundStringStruct = _bindings.CreateLazyMarshaler(UnionWithBoundStringStruct{})
-
-func (msg *UnionWithBoundStringStruct) Marshaler() _bindings.Marshaler {
-	return _mUnionWithBoundStringStruct
-}
-
-type SingleVariantUnionStruct struct {
-	_ struct{}           `fidl:"s,8,4" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
-	U SingleVariantUnion `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-}
-
-var _mSingleVariantUnionStruct = _bindings.CreateLazyMarshaler(SingleVariantUnionStruct{})
-
-func (msg *SingleVariantUnionStruct) Marshaler() _bindings.Marshaler {
-	return _mSingleVariantUnionStruct
-}
-
-type SandwichUnionSize8Alignment4 struct {
-	_      struct{}             `fidl:"s,16,4" fidl_size_v1:"40" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"40" fidl_alignment_v1_no_ee:"8"`
-	Before uint32               `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-	Value  UnionSize8Alignment4 `fidl:"4" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
-	After  uint32               `fidl:"12" fidl_offset_v1:"32" fidl_offset_v1_no_ee:"32"`
-}
-
-var _mSandwichUnionSize8Alignment4 = _bindings.CreateLazyMarshaler(SandwichUnionSize8Alignment4{})
-
-func (msg *SandwichUnionSize8Alignment4) Marshaler() _bindings.Marshaler {
-	return _mSandwichUnionSize8Alignment4
-}
-
-type SandwichUnionSize12Alignment4 struct {
-	_      struct{}              `fidl:"s,20,4" fidl_size_v1:"40" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"40" fidl_alignment_v1_no_ee:"8"`
-	Before uint32                `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-	Value  UnionSize12Alignment4 `fidl:"4" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
-	After  uint32                `fidl:"16" fidl_offset_v1:"32" fidl_offset_v1_no_ee:"32"`
-}
-
-var _mSandwichUnionSize12Alignment4 = _bindings.CreateLazyMarshaler(SandwichUnionSize12Alignment4{})
-
-func (msg *SandwichUnionSize12Alignment4) Marshaler() _bindings.Marshaler {
-	return _mSandwichUnionSize12Alignment4
-}
-
-type StructSize16Alignment8 struct {
+type StructSize16Align8 struct {
 	_  struct{} `fidl:"s,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
 	F1 uint64   `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 	F2 uint64   `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
 }
 
-var _mStructSize16Alignment8 = _bindings.CreateLazyMarshaler(StructSize16Alignment8{})
+var _mStructSize16Align8 = _bindings.CreateLazyMarshaler(StructSize16Align8{})
 
-func (msg *StructSize16Alignment8) Marshaler() _bindings.Marshaler {
-	return _mStructSize16Alignment8
+func (msg *StructSize16Align8) Marshaler() _bindings.Marshaler {
+	return _mStructSize16Align8
 }
 
-type SandwichUnionSize24Alignment8 struct {
-	_      struct{}              `fidl:"s,40,8" fidl_size_v1:"40" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"40" fidl_alignment_v1_no_ee:"8"`
-	Before uint32                `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-	Value  UnionSize24Alignment8 `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
-	After  uint32                `fidl:"32" fidl_offset_v1:"32" fidl_offset_v1_no_ee:"32"`
+type Sandwich1 struct {
+	_        struct{}         `fidl:"s,16,4" fidl_size_v1:"40" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"40" fidl_alignment_v1_no_ee:"8"`
+	Before   uint32           `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	TheUnion UnionSize8Align4 `fidl:"4" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
+	After    uint32           `fidl:"12" fidl_offset_v1:"32" fidl_offset_v1_no_ee:"32"`
 }
 
-var _mSandwichUnionSize24Alignment8 = _bindings.CreateLazyMarshaler(SandwichUnionSize24Alignment8{})
+var _mSandwich1 = _bindings.CreateLazyMarshaler(Sandwich1{})
 
-func (msg *SandwichUnionSize24Alignment8) Marshaler() _bindings.Marshaler {
-	return _mSandwichUnionSize24Alignment8
+func (msg *Sandwich1) Marshaler() _bindings.Marshaler {
+	return _mSandwich1
 }
 
-type SandwichUnionSize36Alignment4 struct {
-	_      struct{}              `fidl:"s,44,4" fidl_size_v1:"40" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"40" fidl_alignment_v1_no_ee:"8"`
-	Before uint32                `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-	Value  UnionSize36Alignment4 `fidl:"4" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
-	After  uint32                `fidl:"40" fidl_offset_v1:"32" fidl_offset_v1_no_ee:"32"`
+type Sandwich2 struct {
+	_        struct{}          `fidl:"s,20,4" fidl_size_v1:"40" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"40" fidl_alignment_v1_no_ee:"8"`
+	Before   uint32            `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	TheUnion UnionSize12Align4 `fidl:"4" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
+	After    uint32            `fidl:"16" fidl_offset_v1:"32" fidl_offset_v1_no_ee:"32"`
 }
 
-var _mSandwichUnionSize36Alignment4 = _bindings.CreateLazyMarshaler(SandwichUnionSize36Alignment4{})
+var _mSandwich2 = _bindings.CreateLazyMarshaler(Sandwich2{})
 
-func (msg *SandwichUnionSize36Alignment4) Marshaler() _bindings.Marshaler {
-	return _mSandwichUnionSize36Alignment4
+func (msg *Sandwich2) Marshaler() _bindings.Marshaler {
+	return _mSandwich2
 }
 
-type Int64Struct struct {
-	_ struct{} `fidl:"s,8,8" fidl_size_v1:"8" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"8"`
-	X int64    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+type Sandwich3 struct {
+	_        struct{}          `fidl:"s,40,8" fidl_size_v1:"40" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"40" fidl_alignment_v1_no_ee:"8"`
+	Before   uint32            `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	TheUnion UnionSize24Align8 `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
+	After    uint32            `fidl:"32" fidl_offset_v1:"32" fidl_offset_v1_no_ee:"32"`
 }
 
-var _mInt64Struct = _bindings.CreateLazyMarshaler(Int64Struct{})
+var _mSandwich3 = _bindings.CreateLazyMarshaler(Sandwich3{})
 
-func (msg *Int64Struct) Marshaler() _bindings.Marshaler {
-	return _mInt64Struct
+func (msg *Sandwich3) Marshaler() _bindings.Marshaler {
+	return _mSandwich3
 }
 
-type TestInlineXUnionInStruct struct {
-	_      struct{}     `fidl:"s,56,8" fidl_size_v1:"56" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"56" fidl_alignment_v1_no_ee:"8"`
-	Before string       `fidl:"0," fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-	Xu     SampleXUnion `fidl:"16" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	After  string       `fidl:"40," fidl_offset_v1:"40" fidl_offset_v1_no_ee:"40"`
+type Sandwich4 struct {
+	_        struct{}          `fidl:"s,44,4" fidl_size_v1:"40" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"40" fidl_alignment_v1_no_ee:"8"`
+	Before   uint32            `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	TheUnion UnionSize36Align4 `fidl:"4" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
+	After    uint32            `fidl:"40" fidl_offset_v1:"32" fidl_offset_v1_no_ee:"32"`
 }
 
-var _mTestInlineXUnionInStruct = _bindings.CreateLazyMarshaler(TestInlineXUnionInStruct{})
+var _mSandwich4 = _bindings.CreateLazyMarshaler(Sandwich4{})
 
-func (msg *TestInlineXUnionInStruct) Marshaler() _bindings.Marshaler {
-	return _mTestInlineXUnionInStruct
+func (msg *Sandwich4) Marshaler() _bindings.Marshaler {
+	return _mSandwich4
 }
 
-type TestOptionalXUnionInStruct struct {
-	_      struct{}      `fidl:"s,56,8" fidl_size_v1:"56" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"56" fidl_alignment_v1_no_ee:"8"`
-	Before string        `fidl:"0," fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
-	Xu     *SampleXUnion `fidl:"16" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
-	After  string        `fidl:"40," fidl_offset_v1:"40" fidl_offset_v1_no_ee:"40"`
+type Sandwich5 struct {
+	_            struct{}     `fidl:"s,48,8" fidl_size_v1:"40" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"40" fidl_alignment_v1_no_ee:"8"`
+	Before       uint32       `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	UnionOfUnion UnionOfUnion `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
+	After        uint32       `fidl:"40" fidl_offset_v1:"32" fidl_offset_v1_no_ee:"32"`
 }
 
-var _mTestOptionalXUnionInStruct = _bindings.CreateLazyMarshaler(TestOptionalXUnionInStruct{})
+var _mSandwich5 = _bindings.CreateLazyMarshaler(Sandwich5{})
 
-func (msg *TestOptionalXUnionInStruct) Marshaler() _bindings.Marshaler {
-	return _mTestOptionalXUnionInStruct
+func (msg *Sandwich5) Marshaler() _bindings.Marshaler {
+	return _mSandwich5
 }
 
-type TestStrictXUnionInStruct struct {
-	_  struct{}           `fidl:"s,24,8" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
-	Xu SampleStrictXUnion `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+type StructSize3Align1 struct {
+	_          struct{} `fidl:"s,3,1" fidl_size_v1:"3" fidl_alignment_v1:"1" fidl_size_v1_no_ee:"3" fidl_alignment_v1_no_ee:"1"`
+	ThreeBytes [3]uint8 `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
-var _mTestStrictXUnionInStruct = _bindings.CreateLazyMarshaler(TestStrictXUnionInStruct{})
+var _mStructSize3Align1 = _bindings.CreateLazyMarshaler(StructSize3Align1{})
 
-func (msg *TestStrictXUnionInStruct) Marshaler() _bindings.Marshaler {
-	return _mTestStrictXUnionInStruct
+func (msg *StructSize3Align1) Marshaler() _bindings.Marshaler {
+	return _mStructSize3Align1
 }
 
-type TestFlexibleXUnionInStruct struct {
-	_  struct{}     `fidl:"s,24,8" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
-	Xu SampleXUnion `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+type StructSize3Align2 struct {
+	_  struct{} `fidl:"s,4,2" fidl_size_v1:"4" fidl_alignment_v1:"2" fidl_size_v1_no_ee:"4" fidl_alignment_v1_no_ee:"2"`
+	F1 uint16   `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	F2 uint8    `fidl:"2" fidl_offset_v1:"2" fidl_offset_v1_no_ee:"2"`
 }
 
-var _mTestFlexibleXUnionInStruct = _bindings.CreateLazyMarshaler(TestFlexibleXUnionInStruct{})
+var _mStructSize3Align2 = _bindings.CreateLazyMarshaler(StructSize3Align2{})
 
-func (msg *TestFlexibleXUnionInStruct) Marshaler() _bindings.Marshaler {
-	return _mTestFlexibleXUnionInStruct
+func (msg *StructSize3Align2) Marshaler() _bindings.Marshaler {
+	return _mStructSize3Align2
 }
 
-type I_ipAddressConfigTag uint32
-
-const (
-	_ I_ipAddressConfigTag = iota
-	IpAddressConfigPaddingSize24Align4
-	IpAddressConfigDhcp
-)
-
-type IpAddressConfig struct {
-	I_ipAddressConfigTag `fidl:"u,28,4" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
-	PaddingSize24Align4  [6]uint32 `fidl:"1"`
-	Dhcp                 bool      `fidl:"2"`
+type Sandwich6 struct {
+	_        struct{}        `fidl:"s,40,8" fidl_size_v1:"40" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"40" fidl_alignment_v1_no_ee:"8"`
+	Before   uint32          `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	TheUnion UnionWithVector `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
+	After    uint32          `fidl:"32" fidl_offset_v1:"32" fidl_offset_v1_no_ee:"32"`
 }
 
-func (u *IpAddressConfig) Which() I_ipAddressConfigTag {
-	return u.I_ipAddressConfigTag
+var _mSandwich6 = _bindings.CreateLazyMarshaler(Sandwich6{})
+
+func (msg *Sandwich6) Marshaler() _bindings.Marshaler {
+	return _mSandwich6
 }
 
-func (u *IpAddressConfig) SetPaddingSize24Align4(paddingSize24Align4 [6]uint32) {
-	u.I_ipAddressConfigTag = IpAddressConfigPaddingSize24Align4
-	u.PaddingSize24Align4 = paddingSize24Align4
+type Sandwich7 struct {
+	_            struct{}   `fidl:"s,24,8" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	Before       uint32     `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	OptSandwich1 *Sandwich1 `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
+	After        uint32     `fidl:"16" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
 }
 
-func IpAddressConfigWithPaddingSize24Align4(paddingSize24Align4 [6]uint32) IpAddressConfig {
-	var _u IpAddressConfig
-	_u.SetPaddingSize24Align4(paddingSize24Align4)
-	return _u
+var _mSandwich7 = _bindings.CreateLazyMarshaler(Sandwich7{})
+
+func (msg *Sandwich7) Marshaler() _bindings.Marshaler {
+	return _mSandwich7
 }
 
-func (u *IpAddressConfig) SetDhcp(dhcp bool) {
-	u.I_ipAddressConfigTag = IpAddressConfigDhcp
-	u.Dhcp = dhcp
+type Sandwich8 struct {
+	_            struct{}     `fidl:"s,48,8" fidl_size_v1:"40" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"40" fidl_alignment_v1_no_ee:"8"`
+	Before       uint64       `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	UnionOfUnion UnionOfUnion `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
+	After        uint32       `fidl:"40" fidl_offset_v1:"32" fidl_offset_v1_no_ee:"32"`
 }
 
-func IpAddressConfigWithDhcp(dhcp bool) IpAddressConfig {
-	var _u IpAddressConfig
-	_u.SetDhcp(dhcp)
-	return _u
+var _mSandwich8 = _bindings.CreateLazyMarshaler(Sandwich8{})
+
+func (msg *Sandwich8) Marshaler() _bindings.Marshaler {
+	return _mSandwich8
 }
 
-type I_unionWithEmptyStructTag uint32
-
-const (
-	_ I_unionWithEmptyStructTag = iota
-	UnionWithEmptyStructS
-	UnionWithEmptyStructForceAlignmentOf8
-)
-
-type UnionWithEmptyStruct struct {
-	I_unionWithEmptyStructTag `fidl:"u,16,8" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
-	S                         EmptyStruct `fidl:"1"`
-	ForceAlignmentOf8         uint64      `fidl:"2"`
+type Regression1 struct {
+	_  struct{} `fidl:"s,32,8" fidl_size_v1:"32" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"32" fidl_alignment_v1_no_ee:"8"`
+	F1 uint8    `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	F2 uint32   `fidl:"4" fidl_offset_v1:"4" fidl_offset_v1_no_ee:"4"`
+	F3 uint8    `fidl:"8" fidl_offset_v1:"8" fidl_offset_v1_no_ee:"8"`
+	F4 uint16   `fidl:"10" fidl_offset_v1:"10" fidl_offset_v1_no_ee:"10"`
+	F5 uint64   `fidl:"16" fidl_offset_v1:"16" fidl_offset_v1_no_ee:"16"`
+	F6 uint8    `fidl:"24" fidl_offset_v1:"24" fidl_offset_v1_no_ee:"24"`
 }
 
-func (u *UnionWithEmptyStruct) Which() I_unionWithEmptyStructTag {
-	return u.I_unionWithEmptyStructTag
+var _mRegression1 = _bindings.CreateLazyMarshaler(Regression1{})
+
+func (msg *Regression1) Marshaler() _bindings.Marshaler {
+	return _mRegression1
 }
 
-func (u *UnionWithEmptyStruct) SetS(s EmptyStruct) {
-	u.I_unionWithEmptyStructTag = UnionWithEmptyStructS
-	u.S = s
+type Regression2 struct {
+	_    struct{}    `fidl:"s,40,8" fidl_size_v1:"40" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"40" fidl_alignment_v1_no_ee:"8"`
+	Head Regression1 `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	F7   uint8       `fidl:"32" fidl_offset_v1:"32" fidl_offset_v1_no_ee:"32"`
 }
 
-func UnionWithEmptyStructWithS(s EmptyStruct) UnionWithEmptyStruct {
-	var _u UnionWithEmptyStruct
-	_u.SetS(s)
-	return _u
+var _mRegression2 = _bindings.CreateLazyMarshaler(Regression2{})
+
+func (msg *Regression2) Marshaler() _bindings.Marshaler {
+	return _mRegression2
 }
 
-func (u *UnionWithEmptyStruct) SetForceAlignmentOf8(forceAlignmentOf8 uint64) {
-	u.I_unionWithEmptyStructTag = UnionWithEmptyStructForceAlignmentOf8
-	u.ForceAlignmentOf8 = forceAlignmentOf8
+type Regression3 struct {
+	_        struct{}     `fidl:"s,8,8" fidl_size_v1:"8" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"8"`
+	OptValue *Regression2 `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
 }
 
-func UnionWithEmptyStructWithForceAlignmentOf8(forceAlignmentOf8 uint64) UnionWithEmptyStruct {
-	var _u UnionWithEmptyStruct
-	_u.SetForceAlignmentOf8(forceAlignmentOf8)
-	return _u
+var _mRegression3 = _bindings.CreateLazyMarshaler(Regression3{})
+
+func (msg *Regression3) Marshaler() _bindings.Marshaler {
+	return _mRegression3
+}
+
+type TableStructWithReservedSandwichStruct struct {
+	_     struct{}                        `fidl:"s,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
+	Table TableStructWithReservedSandwich `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+}
+
+var _mTableStructWithReservedSandwichStruct = _bindings.CreateLazyMarshaler(TableStructWithReservedSandwichStruct{})
+
+func (msg *TableStructWithReservedSandwichStruct) Marshaler() _bindings.Marshaler {
+	return _mTableStructWithReservedSandwichStruct
+}
+
+type TableStructWithUint32SandwichStruct struct {
+	_     struct{}                      `fidl:"s,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
+	Table TableStructWithUint32Sandwich `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+}
+
+var _mTableStructWithUint32SandwichStruct = _bindings.CreateLazyMarshaler(TableStructWithUint32SandwichStruct{})
+
+func (msg *TableStructWithUint32SandwichStruct) Marshaler() _bindings.Marshaler {
+	return _mTableStructWithUint32SandwichStruct
+}
+
+type TableUnionWithVectorReservedSandwichStruct struct {
+	_     struct{}                             `fidl:"s,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
+	Table TableUnionWithVectorReservedSandwich `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+}
+
+var _mTableUnionWithVectorReservedSandwichStruct = _bindings.CreateLazyMarshaler(TableUnionWithVectorReservedSandwichStruct{})
+
+func (msg *TableUnionWithVectorReservedSandwichStruct) Marshaler() _bindings.Marshaler {
+	return _mTableUnionWithVectorReservedSandwichStruct
+}
+
+type TableUnionWithVectorStructSandwichStruct struct {
+	_     struct{}                           `fidl:"s,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
+	Table TableUnionWithVectorStructSandwich `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+}
+
+var _mTableUnionWithVectorStructSandwichStruct = _bindings.CreateLazyMarshaler(TableUnionWithVectorStructSandwichStruct{})
+
+func (msg *TableUnionWithVectorStructSandwichStruct) Marshaler() _bindings.Marshaler {
+	return _mTableUnionWithVectorStructSandwichStruct
+}
+
+type XUnionWithStructStruct struct {
+	_  struct{}         `fidl:"s,24,8" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	Xu XUnionWithStruct `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+}
+
+var _mXUnionWithStructStruct = _bindings.CreateLazyMarshaler(XUnionWithStructStruct{})
+
+func (msg *XUnionWithStructStruct) Marshaler() _bindings.Marshaler {
+	return _mXUnionWithStructStruct
+}
+
+type XUnionWithXUnionStruct struct {
+	_  struct{}         `fidl:"s,24,8" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	Xu XUnionWithXUnion `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+}
+
+var _mXUnionWithXUnionStruct = _bindings.CreateLazyMarshaler(XUnionWithXUnionStruct{})
+
+func (msg *XUnionWithXUnionStruct) Marshaler() _bindings.Marshaler {
+	return _mXUnionWithXUnionStruct
+}
+
+type StructSize5Align1 struct {
+	_    struct{} `fidl:"s,5,1" fidl_size_v1:"5" fidl_alignment_v1:"1" fidl_size_v1_no_ee:"5" fidl_alignment_v1_no_ee:"1"`
+	Data [5]uint8 `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+}
+
+var _mStructSize5Align1 = _bindings.CreateLazyMarshaler(StructSize5Align1{})
+
+func (msg *StructSize5Align1) Marshaler() _bindings.Marshaler {
+	return _mStructSize5Align1
+}
+
+type StructSize5Align4 struct {
+	_    struct{} `fidl:"s,8,4" fidl_size_v1:"8" fidl_alignment_v1:"4" fidl_size_v1_no_ee:"8" fidl_alignment_v1_no_ee:"4"`
+	Four uint32   `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	One  uint8    `fidl:"4" fidl_offset_v1:"4" fidl_offset_v1_no_ee:"4"`
+}
+
+var _mStructSize5Align4 = _bindings.CreateLazyMarshaler(StructSize5Align4{})
+
+func (msg *StructSize5Align4) Marshaler() _bindings.Marshaler {
+	return _mStructSize5Align4
+}
+
+type StructSize5Align1Vector struct {
+	_ struct{}            `fidl:"s,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
+	V []StructSize5Align1 `fidl:"0," fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+}
+
+var _mStructSize5Align1Vector = _bindings.CreateLazyMarshaler(StructSize5Align1Vector{})
+
+func (msg *StructSize5Align1Vector) Marshaler() _bindings.Marshaler {
+	return _mStructSize5Align1Vector
+}
+
+type StructSize5Align4Vector struct {
+	_ struct{}            `fidl:"s,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
+	V []StructSize5Align4 `fidl:"0," fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+}
+
+var _mStructSize5Align4Vector = _bindings.CreateLazyMarshaler(StructSize5Align4Vector{})
+
+func (msg *StructSize5Align4Vector) Marshaler() _bindings.Marshaler {
+	return _mStructSize5Align4Vector
+}
+
+type StructSize5Align1Array struct {
+	_ struct{}             `fidl:"s,15,1" fidl_size_v1:"15" fidl_alignment_v1:"1" fidl_size_v1_no_ee:"15" fidl_alignment_v1_no_ee:"1"`
+	A [3]StructSize5Align1 `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+}
+
+var _mStructSize5Align1Array = _bindings.CreateLazyMarshaler(StructSize5Align1Array{})
+
+func (msg *StructSize5Align1Array) Marshaler() _bindings.Marshaler {
+	return _mStructSize5Align1Array
+}
+
+type StructSize5Align4Array struct {
+	_ struct{}             `fidl:"s,24,4" fidl_size_v1:"24" fidl_alignment_v1:"4" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"4"`
+	A [3]StructSize5Align4 `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+}
+
+var _mStructSize5Align4Array = _bindings.CreateLazyMarshaler(StructSize5Align4Array{})
+
+func (msg *StructSize5Align4Array) Marshaler() _bindings.Marshaler {
+	return _mStructSize5Align4Array
+}
+
+type ArrayStruct struct {
+	_              struct{}        `fidl:"s,96,8" fidl_size_v1:"144" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"144" fidl_alignment_v1_no_ee:"8"`
+	Unions         [3]StringUnion  `fidl:"0" fidl_offset_v1:"0" fidl_offset_v1_no_ee:"0"`
+	OptionalUnions [3]*StringUnion `fidl:"72" fidl_offset_v1:"72" fidl_offset_v1_no_ee:"72"`
+}
+
+var _mArrayStruct = _bindings.CreateLazyMarshaler(ArrayStruct{})
+
+func (msg *ArrayStruct) Marshaler() _bindings.Marshaler {
+	return _mArrayStruct
 }
 
 type I_unionWithBoundStringTag uint32
@@ -1005,6 +1249,46 @@
 	return _u
 }
 
+type I_ipAddressConfigTag uint32
+
+const (
+	_ I_ipAddressConfigTag = iota
+	IpAddressConfigPaddingSize24Align4
+	IpAddressConfigDhcp
+)
+
+type IpAddressConfig struct {
+	I_ipAddressConfigTag `fidl:"u,28,4" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	PaddingSize24Align4  [6]uint32 `fidl:"1"`
+	Dhcp                 bool      `fidl:"2"`
+}
+
+func (u *IpAddressConfig) Which() I_ipAddressConfigTag {
+	return u.I_ipAddressConfigTag
+}
+
+func (u *IpAddressConfig) SetPaddingSize24Align4(paddingSize24Align4 [6]uint32) {
+	u.I_ipAddressConfigTag = IpAddressConfigPaddingSize24Align4
+	u.PaddingSize24Align4 = paddingSize24Align4
+}
+
+func IpAddressConfigWithPaddingSize24Align4(paddingSize24Align4 [6]uint32) IpAddressConfig {
+	var _u IpAddressConfig
+	_u.SetPaddingSize24Align4(paddingSize24Align4)
+	return _u
+}
+
+func (u *IpAddressConfig) SetDhcp(dhcp bool) {
+	u.I_ipAddressConfigTag = IpAddressConfigDhcp
+	u.Dhcp = dhcp
+}
+
+func IpAddressConfigWithDhcp(dhcp bool) IpAddressConfig {
+	var _u IpAddressConfig
+	_u.SetDhcp(dhcp)
+	return _u
+}
+
 type I_simpleUnionTag uint32
 
 const (
@@ -1071,39 +1355,543 @@
 	return _u
 }
 
-type I_xUnionWithEmptyStructTag uint32
+type I_unionWithEmptyStructTag uint32
 
 const (
-	XUnionWithEmptyStruct_unknownData = 0          // 0x00000000
-	XUnionWithEmptyStructS            = 1956241662 // 0x7499e0fe
+	_ I_unionWithEmptyStructTag = iota
+	UnionWithEmptyStructS
+	UnionWithEmptyStructForceAlignmentOf8
 )
 
-type XUnionWithEmptyStruct struct {
-	I_xUnionWithEmptyStructTag `fidl:"x,24,8" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
-	I_unknownData              []byte
-	S                          EmptyStruct `fidl:"1956241662"`
+type UnionWithEmptyStruct struct {
+	I_unionWithEmptyStructTag `fidl:"u,16,8" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	S                         EmptyStruct `fidl:"1"`
+	ForceAlignmentOf8         uint64      `fidl:"2"`
 }
 
-func (_m *XUnionWithEmptyStruct) Which() I_xUnionWithEmptyStructTag {
-	switch _m.I_xUnionWithEmptyStructTag {
-	case 1956241662:
-		return XUnionWithEmptyStructS
-	default:
-		return XUnionWithEmptyStruct_unknownData
-	}
+func (u *UnionWithEmptyStruct) Which() I_unionWithEmptyStructTag {
+	return u.I_unionWithEmptyStructTag
 }
 
-func (_m *XUnionWithEmptyStruct) Ordinal() uint32 {
-	return uint32(_m.I_xUnionWithEmptyStructTag)
+func (u *UnionWithEmptyStruct) SetS(s EmptyStruct) {
+	u.I_unionWithEmptyStructTag = UnionWithEmptyStructS
+	u.S = s
 }
 
-func (_m *XUnionWithEmptyStruct) SetS(s EmptyStruct) {
-	_m.I_xUnionWithEmptyStructTag = XUnionWithEmptyStructS
-	_m.S = s
+func UnionWithEmptyStructWithS(s EmptyStruct) UnionWithEmptyStruct {
+	var _u UnionWithEmptyStruct
+	_u.SetS(s)
+	return _u
 }
 
-func XUnionWithEmptyStructWithS(s EmptyStruct) XUnionWithEmptyStruct {
-	var _u XUnionWithEmptyStruct
+func (u *UnionWithEmptyStruct) SetForceAlignmentOf8(forceAlignmentOf8 uint64) {
+	u.I_unionWithEmptyStructTag = UnionWithEmptyStructForceAlignmentOf8
+	u.ForceAlignmentOf8 = forceAlignmentOf8
+}
+
+func UnionWithEmptyStructWithForceAlignmentOf8(forceAlignmentOf8 uint64) UnionWithEmptyStruct {
+	var _u UnionWithEmptyStruct
+	_u.SetForceAlignmentOf8(forceAlignmentOf8)
+	return _u
+}
+
+type I_unionSize8Align4Tag uint32
+
+const (
+	_ I_unionSize8Align4Tag = iota
+	UnionSize8Align4Unused1
+	UnionSize8Align4Unused2
+	UnionSize8Align4Variant
+)
+
+type UnionSize8Align4 struct {
+	I_unionSize8Align4Tag `fidl:"u,8,4" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	Unused1               uint8  `fidl:"1"`
+	Unused2               uint8  `fidl:"2"`
+	Variant               uint32 `fidl:"3"`
+}
+
+func (u *UnionSize8Align4) Which() I_unionSize8Align4Tag {
+	return u.I_unionSize8Align4Tag
+}
+
+func (u *UnionSize8Align4) SetUnused1(unused1 uint8) {
+	u.I_unionSize8Align4Tag = UnionSize8Align4Unused1
+	u.Unused1 = unused1
+}
+
+func UnionSize8Align4WithUnused1(unused1 uint8) UnionSize8Align4 {
+	var _u UnionSize8Align4
+	_u.SetUnused1(unused1)
+	return _u
+}
+
+func (u *UnionSize8Align4) SetUnused2(unused2 uint8) {
+	u.I_unionSize8Align4Tag = UnionSize8Align4Unused2
+	u.Unused2 = unused2
+}
+
+func UnionSize8Align4WithUnused2(unused2 uint8) UnionSize8Align4 {
+	var _u UnionSize8Align4
+	_u.SetUnused2(unused2)
+	return _u
+}
+
+func (u *UnionSize8Align4) SetVariant(variant uint32) {
+	u.I_unionSize8Align4Tag = UnionSize8Align4Variant
+	u.Variant = variant
+}
+
+func UnionSize8Align4WithVariant(variant uint32) UnionSize8Align4 {
+	var _u UnionSize8Align4
+	_u.SetVariant(variant)
+	return _u
+}
+
+type I_unionSize12Align4Tag uint32
+
+const (
+	_ I_unionSize12Align4Tag = iota
+	UnionSize12Align4Unused1
+	UnionSize12Align4Unused2
+	UnionSize12Align4Unused3
+	UnionSize12Align4Variant
+)
+
+type UnionSize12Align4 struct {
+	I_unionSize12Align4Tag `fidl:"u,12,4" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	Unused1                uint8    `fidl:"1"`
+	Unused2                uint8    `fidl:"2"`
+	Unused3                uint8    `fidl:"3"`
+	Variant                [6]uint8 `fidl:"4"`
+}
+
+func (u *UnionSize12Align4) Which() I_unionSize12Align4Tag {
+	return u.I_unionSize12Align4Tag
+}
+
+func (u *UnionSize12Align4) SetUnused1(unused1 uint8) {
+	u.I_unionSize12Align4Tag = UnionSize12Align4Unused1
+	u.Unused1 = unused1
+}
+
+func UnionSize12Align4WithUnused1(unused1 uint8) UnionSize12Align4 {
+	var _u UnionSize12Align4
+	_u.SetUnused1(unused1)
+	return _u
+}
+
+func (u *UnionSize12Align4) SetUnused2(unused2 uint8) {
+	u.I_unionSize12Align4Tag = UnionSize12Align4Unused2
+	u.Unused2 = unused2
+}
+
+func UnionSize12Align4WithUnused2(unused2 uint8) UnionSize12Align4 {
+	var _u UnionSize12Align4
+	_u.SetUnused2(unused2)
+	return _u
+}
+
+func (u *UnionSize12Align4) SetUnused3(unused3 uint8) {
+	u.I_unionSize12Align4Tag = UnionSize12Align4Unused3
+	u.Unused3 = unused3
+}
+
+func UnionSize12Align4WithUnused3(unused3 uint8) UnionSize12Align4 {
+	var _u UnionSize12Align4
+	_u.SetUnused3(unused3)
+	return _u
+}
+
+func (u *UnionSize12Align4) SetVariant(variant [6]uint8) {
+	u.I_unionSize12Align4Tag = UnionSize12Align4Variant
+	u.Variant = variant
+}
+
+func UnionSize12Align4WithVariant(variant [6]uint8) UnionSize12Align4 {
+	var _u UnionSize12Align4
+	_u.SetVariant(variant)
+	return _u
+}
+
+type I_unionSize24Align8Tag uint32
+
+const (
+	_ I_unionSize24Align8Tag = iota
+	UnionSize24Align8Unused1
+	UnionSize24Align8Unused2
+	UnionSize24Align8Unused3
+	UnionSize24Align8Variant
+)
+
+type UnionSize24Align8 struct {
+	I_unionSize24Align8Tag `fidl:"u,24,8" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	Unused1                uint8              `fidl:"1"`
+	Unused2                uint8              `fidl:"2"`
+	Unused3                uint8              `fidl:"3"`
+	Variant                StructSize16Align8 `fidl:"4"`
+}
+
+func (u *UnionSize24Align8) Which() I_unionSize24Align8Tag {
+	return u.I_unionSize24Align8Tag
+}
+
+func (u *UnionSize24Align8) SetUnused1(unused1 uint8) {
+	u.I_unionSize24Align8Tag = UnionSize24Align8Unused1
+	u.Unused1 = unused1
+}
+
+func UnionSize24Align8WithUnused1(unused1 uint8) UnionSize24Align8 {
+	var _u UnionSize24Align8
+	_u.SetUnused1(unused1)
+	return _u
+}
+
+func (u *UnionSize24Align8) SetUnused2(unused2 uint8) {
+	u.I_unionSize24Align8Tag = UnionSize24Align8Unused2
+	u.Unused2 = unused2
+}
+
+func UnionSize24Align8WithUnused2(unused2 uint8) UnionSize24Align8 {
+	var _u UnionSize24Align8
+	_u.SetUnused2(unused2)
+	return _u
+}
+
+func (u *UnionSize24Align8) SetUnused3(unused3 uint8) {
+	u.I_unionSize24Align8Tag = UnionSize24Align8Unused3
+	u.Unused3 = unused3
+}
+
+func UnionSize24Align8WithUnused3(unused3 uint8) UnionSize24Align8 {
+	var _u UnionSize24Align8
+	_u.SetUnused3(unused3)
+	return _u
+}
+
+func (u *UnionSize24Align8) SetVariant(variant StructSize16Align8) {
+	u.I_unionSize24Align8Tag = UnionSize24Align8Variant
+	u.Variant = variant
+}
+
+func UnionSize24Align8WithVariant(variant StructSize16Align8) UnionSize24Align8 {
+	var _u UnionSize24Align8
+	_u.SetVariant(variant)
+	return _u
+}
+
+type I_unionSize36Align4Tag uint32
+
+const (
+	_ I_unionSize36Align4Tag = iota
+	UnionSize36Align4Unused1
+	UnionSize36Align4Unused2
+	UnionSize36Align4Unused3
+	UnionSize36Align4Variant
+)
+
+type UnionSize36Align4 struct {
+	I_unionSize36Align4Tag `fidl:"u,36,4" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	Unused1                uint8     `fidl:"1"`
+	Unused2                uint8     `fidl:"2"`
+	Unused3                uint8     `fidl:"3"`
+	Variant                [32]uint8 `fidl:"4"`
+}
+
+func (u *UnionSize36Align4) Which() I_unionSize36Align4Tag {
+	return u.I_unionSize36Align4Tag
+}
+
+func (u *UnionSize36Align4) SetUnused1(unused1 uint8) {
+	u.I_unionSize36Align4Tag = UnionSize36Align4Unused1
+	u.Unused1 = unused1
+}
+
+func UnionSize36Align4WithUnused1(unused1 uint8) UnionSize36Align4 {
+	var _u UnionSize36Align4
+	_u.SetUnused1(unused1)
+	return _u
+}
+
+func (u *UnionSize36Align4) SetUnused2(unused2 uint8) {
+	u.I_unionSize36Align4Tag = UnionSize36Align4Unused2
+	u.Unused2 = unused2
+}
+
+func UnionSize36Align4WithUnused2(unused2 uint8) UnionSize36Align4 {
+	var _u UnionSize36Align4
+	_u.SetUnused2(unused2)
+	return _u
+}
+
+func (u *UnionSize36Align4) SetUnused3(unused3 uint8) {
+	u.I_unionSize36Align4Tag = UnionSize36Align4Unused3
+	u.Unused3 = unused3
+}
+
+func UnionSize36Align4WithUnused3(unused3 uint8) UnionSize36Align4 {
+	var _u UnionSize36Align4
+	_u.SetUnused3(unused3)
+	return _u
+}
+
+func (u *UnionSize36Align4) SetVariant(variant [32]uint8) {
+	u.I_unionSize36Align4Tag = UnionSize36Align4Variant
+	u.Variant = variant
+}
+
+func UnionSize36Align4WithVariant(variant [32]uint8) UnionSize36Align4 {
+	var _u UnionSize36Align4
+	_u.SetVariant(variant)
+	return _u
+}
+
+type I_unionOfUnionTag uint32
+
+const (
+	_ I_unionOfUnionTag = iota
+	UnionOfUnionUnused1
+	UnionOfUnionSize8align4
+	UnionOfUnionSize12align4
+	UnionOfUnionUnused2
+	UnionOfUnionSize24align8
+)
+
+type UnionOfUnion struct {
+	I_unionOfUnionTag `fidl:"u,32,8" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	Unused1           uint8             `fidl:"1"`
+	Size8align4       UnionSize8Align4  `fidl:"2"`
+	Size12align4      UnionSize12Align4 `fidl:"3"`
+	Unused2           uint8             `fidl:"4"`
+	Size24align8      UnionSize24Align8 `fidl:"5"`
+}
+
+func (u *UnionOfUnion) Which() I_unionOfUnionTag {
+	return u.I_unionOfUnionTag
+}
+
+func (u *UnionOfUnion) SetUnused1(unused1 uint8) {
+	u.I_unionOfUnionTag = UnionOfUnionUnused1
+	u.Unused1 = unused1
+}
+
+func UnionOfUnionWithUnused1(unused1 uint8) UnionOfUnion {
+	var _u UnionOfUnion
+	_u.SetUnused1(unused1)
+	return _u
+}
+
+func (u *UnionOfUnion) SetSize8align4(size8align4 UnionSize8Align4) {
+	u.I_unionOfUnionTag = UnionOfUnionSize8align4
+	u.Size8align4 = size8align4
+}
+
+func UnionOfUnionWithSize8align4(size8align4 UnionSize8Align4) UnionOfUnion {
+	var _u UnionOfUnion
+	_u.SetSize8align4(size8align4)
+	return _u
+}
+
+func (u *UnionOfUnion) SetSize12align4(size12align4 UnionSize12Align4) {
+	u.I_unionOfUnionTag = UnionOfUnionSize12align4
+	u.Size12align4 = size12align4
+}
+
+func UnionOfUnionWithSize12align4(size12align4 UnionSize12Align4) UnionOfUnion {
+	var _u UnionOfUnion
+	_u.SetSize12align4(size12align4)
+	return _u
+}
+
+func (u *UnionOfUnion) SetUnused2(unused2 uint8) {
+	u.I_unionOfUnionTag = UnionOfUnionUnused2
+	u.Unused2 = unused2
+}
+
+func UnionOfUnionWithUnused2(unused2 uint8) UnionOfUnion {
+	var _u UnionOfUnion
+	_u.SetUnused2(unused2)
+	return _u
+}
+
+func (u *UnionOfUnion) SetSize24align8(size24align8 UnionSize24Align8) {
+	u.I_unionOfUnionTag = UnionOfUnionSize24align8
+	u.Size24align8 = size24align8
+}
+
+func UnionOfUnionWithSize24align8(size24align8 UnionSize24Align8) UnionOfUnion {
+	var _u UnionOfUnion
+	_u.SetSize24align8(size24align8)
+	return _u
+}
+
+type I_unionWithVectorTag uint32
+
+const (
+	_ I_unionWithVectorTag = iota
+	UnionWithVectorUnused
+	UnionWithVectorVectorOfUint8
+	UnionWithVectorString
+	UnionWithVectorVectorS3A1
+	UnionWithVectorVectorS3A2
+	UnionWithVectorHandles
+	UnionWithVectorArrayS3A1
+	UnionWithVectorArrayS3A2
+	UnionWithVectorVectorUnion
+)
+
+type UnionWithVector struct {
+	I_unionWithVectorTag `fidl:"u,24,8" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	Unused               uint8                `fidl:"1"`
+	VectorOfUint8        []uint8              `fidl:"2,"`
+	String               string               `fidl:"3,"`
+	VectorS3A1           []StructSize3Align1  `fidl:"4,"`
+	VectorS3A2           []StructSize3Align2  `fidl:"5,"`
+	Handles              []uint32             `fidl:"6,"`
+	ArrayS3A1            [2]StructSize3Align1 `fidl:"7"`
+	ArrayS3A2            [2]StructSize3Align2 `fidl:"8"`
+	VectorUnion          []UnionSize8Align4   `fidl:"9,"`
+}
+
+func (u *UnionWithVector) Which() I_unionWithVectorTag {
+	return u.I_unionWithVectorTag
+}
+
+func (u *UnionWithVector) SetUnused(unused uint8) {
+	u.I_unionWithVectorTag = UnionWithVectorUnused
+	u.Unused = unused
+}
+
+func UnionWithVectorWithUnused(unused uint8) UnionWithVector {
+	var _u UnionWithVector
+	_u.SetUnused(unused)
+	return _u
+}
+
+func (u *UnionWithVector) SetVectorOfUint8(vectorOfUint8 []uint8) {
+	u.I_unionWithVectorTag = UnionWithVectorVectorOfUint8
+	u.VectorOfUint8 = vectorOfUint8
+}
+
+func UnionWithVectorWithVectorOfUint8(vectorOfUint8 []uint8) UnionWithVector {
+	var _u UnionWithVector
+	_u.SetVectorOfUint8(vectorOfUint8)
+	return _u
+}
+
+func (u *UnionWithVector) SetString(string_ string) {
+	u.I_unionWithVectorTag = UnionWithVectorString
+	u.String = string_
+}
+
+func UnionWithVectorWithString(string_ string) UnionWithVector {
+	var _u UnionWithVector
+	_u.SetString(string_)
+	return _u
+}
+
+func (u *UnionWithVector) SetVectorS3A1(vectorS3A1 []StructSize3Align1) {
+	u.I_unionWithVectorTag = UnionWithVectorVectorS3A1
+	u.VectorS3A1 = vectorS3A1
+}
+
+func UnionWithVectorWithVectorS3A1(vectorS3A1 []StructSize3Align1) UnionWithVector {
+	var _u UnionWithVector
+	_u.SetVectorS3A1(vectorS3A1)
+	return _u
+}
+
+func (u *UnionWithVector) SetVectorS3A2(vectorS3A2 []StructSize3Align2) {
+	u.I_unionWithVectorTag = UnionWithVectorVectorS3A2
+	u.VectorS3A2 = vectorS3A2
+}
+
+func UnionWithVectorWithVectorS3A2(vectorS3A2 []StructSize3Align2) UnionWithVector {
+	var _u UnionWithVector
+	_u.SetVectorS3A2(vectorS3A2)
+	return _u
+}
+
+func (u *UnionWithVector) SetHandles(handles []uint32) {
+	u.I_unionWithVectorTag = UnionWithVectorHandles
+	u.Handles = handles
+}
+
+func UnionWithVectorWithHandles(handles []uint32) UnionWithVector {
+	var _u UnionWithVector
+	_u.SetHandles(handles)
+	return _u
+}
+
+func (u *UnionWithVector) SetArrayS3A1(arrayS3A1 [2]StructSize3Align1) {
+	u.I_unionWithVectorTag = UnionWithVectorArrayS3A1
+	u.ArrayS3A1 = arrayS3A1
+}
+
+func UnionWithVectorWithArrayS3A1(arrayS3A1 [2]StructSize3Align1) UnionWithVector {
+	var _u UnionWithVector
+	_u.SetArrayS3A1(arrayS3A1)
+	return _u
+}
+
+func (u *UnionWithVector) SetArrayS3A2(arrayS3A2 [2]StructSize3Align2) {
+	u.I_unionWithVectorTag = UnionWithVectorArrayS3A2
+	u.ArrayS3A2 = arrayS3A2
+}
+
+func UnionWithVectorWithArrayS3A2(arrayS3A2 [2]StructSize3Align2) UnionWithVector {
+	var _u UnionWithVector
+	_u.SetArrayS3A2(arrayS3A2)
+	return _u
+}
+
+func (u *UnionWithVector) SetVectorUnion(vectorUnion []UnionSize8Align4) {
+	u.I_unionWithVectorTag = UnionWithVectorVectorUnion
+	u.VectorUnion = vectorUnion
+}
+
+func UnionWithVectorWithVectorUnion(vectorUnion []UnionSize8Align4) UnionWithVector {
+	var _u UnionWithVector
+	_u.SetVectorUnion(vectorUnion)
+	return _u
+}
+
+type I_stringUnionTag uint32
+
+const (
+	_ I_stringUnionTag = iota
+	StringUnionUnused
+	StringUnionS
+)
+
+type StringUnion struct {
+	I_stringUnionTag `fidl:"u,24,8" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	Unused           uint8  `fidl:"1"`
+	S                string `fidl:"2,"`
+}
+
+func (u *StringUnion) Which() I_stringUnionTag {
+	return u.I_stringUnionTag
+}
+
+func (u *StringUnion) SetUnused(unused uint8) {
+	u.I_stringUnionTag = StringUnionUnused
+	u.Unused = unused
+}
+
+func StringUnionWithUnused(unused uint8) StringUnion {
+	var _u StringUnion
+	_u.SetUnused(unused)
+	return _u
+}
+
+func (u *StringUnion) SetS(s string) {
+	u.I_stringUnionTag = StringUnionS
+	u.S = s
+}
+
+func StringUnionWithS(s string) StringUnion {
+	var _u StringUnion
 	_u.SetS(s)
 	return _u
 }
@@ -1231,6 +2019,169 @@
 	return _u
 }
 
+type I_xUnionWithEmptyStructTag uint32
+
+const (
+	XUnionWithEmptyStruct_unknownData = 0          // 0x00000000
+	XUnionWithEmptyStructS            = 1956241662 // 0x7499e0fe
+)
+
+type XUnionWithEmptyStruct struct {
+	I_xUnionWithEmptyStructTag `fidl:"x,24,8" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	I_unknownData              []byte
+	S                          EmptyStruct `fidl:"1956241662"`
+}
+
+func (_m *XUnionWithEmptyStruct) Which() I_xUnionWithEmptyStructTag {
+	switch _m.I_xUnionWithEmptyStructTag {
+	case 1956241662:
+		return XUnionWithEmptyStructS
+	default:
+		return XUnionWithEmptyStruct_unknownData
+	}
+}
+
+func (_m *XUnionWithEmptyStruct) Ordinal() uint32 {
+	return uint32(_m.I_xUnionWithEmptyStructTag)
+}
+
+func (_m *XUnionWithEmptyStruct) SetS(s EmptyStruct) {
+	_m.I_xUnionWithEmptyStructTag = XUnionWithEmptyStructS
+	_m.S = s
+}
+
+func XUnionWithEmptyStructWithS(s EmptyStruct) XUnionWithEmptyStruct {
+	var _u XUnionWithEmptyStruct
+	_u.SetS(s)
+	return _u
+}
+
+type I_xUnionWithStructTag uint32
+
+const (
+	XUnionWithStruct_unknownData = 0         // 0x00000000
+	XUnionWithStructS            = 423517204 // 0x193e5c14
+)
+
+type XUnionWithStruct struct {
+	I_xUnionWithStructTag `fidl:"x,24,8" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	I_unknownData         []byte
+	S                     StructSize3Align1 `fidl:"423517204"`
+}
+
+func (_m *XUnionWithStruct) Which() I_xUnionWithStructTag {
+	switch _m.I_xUnionWithStructTag {
+	case 423517204:
+		return XUnionWithStructS
+	default:
+		return XUnionWithStruct_unknownData
+	}
+}
+
+func (_m *XUnionWithStruct) Ordinal() uint32 {
+	return uint32(_m.I_xUnionWithStructTag)
+}
+
+func (_m *XUnionWithStruct) SetS(s StructSize3Align1) {
+	_m.I_xUnionWithStructTag = XUnionWithStructS
+	_m.S = s
+}
+
+func XUnionWithStructWithS(s StructSize3Align1) XUnionWithStruct {
+	var _u XUnionWithStruct
+	_u.SetS(s)
+	return _u
+}
+
+type I_xUnionWithXUnionTag uint32
+
+const (
+	XUnionWithXUnion_unknownData = 0          // 0x00000000
+	XUnionWithXUnionXu           = 1812359455 // 0x6c06691f
+)
+
+type XUnionWithXUnion struct {
+	I_xUnionWithXUnionTag `fidl:"x,24,8" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	I_unknownData         []byte
+	Xu                    XUnionWithStruct `fidl:"1812359455"`
+}
+
+func (_m *XUnionWithXUnion) Which() I_xUnionWithXUnionTag {
+	switch _m.I_xUnionWithXUnionTag {
+	case 1812359455:
+		return XUnionWithXUnionXu
+	default:
+		return XUnionWithXUnion_unknownData
+	}
+}
+
+func (_m *XUnionWithXUnion) Ordinal() uint32 {
+	return uint32(_m.I_xUnionWithXUnionTag)
+}
+
+func (_m *XUnionWithXUnion) SetXu(xu XUnionWithStruct) {
+	_m.I_xUnionWithXUnionTag = XUnionWithXUnionXu
+	_m.Xu = xu
+}
+
+func XUnionWithXUnionWithXu(xu XUnionWithStruct) XUnionWithXUnion {
+	var _u XUnionWithXUnion
+	_u.SetXu(xu)
+	return _u
+}
+
+type I_xUnionWithUnionsTag uint32
+
+const (
+	XUnionWithUnions_unknownData = 0          // 0x00000000
+	XUnionWithUnionsU1           = 684009751  // 0x28c52917
+	XUnionWithUnionsU2           = 1971727256 // 0x75862b98
+)
+
+type XUnionWithUnions struct {
+	I_xUnionWithUnionsTag `fidl:"x,24,8" fidl_size_v1:"24" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"24" fidl_alignment_v1_no_ee:"8"`
+	I_unknownData         []byte
+	U1                    UnionSize8Align4  `fidl:"684009751"`
+	U2                    UnionSize12Align4 `fidl:"1971727256"`
+}
+
+func (_m *XUnionWithUnions) Which() I_xUnionWithUnionsTag {
+	switch _m.I_xUnionWithUnionsTag {
+	case 684009751:
+		return XUnionWithUnionsU1
+	case 1971727256:
+		return XUnionWithUnionsU2
+	default:
+		return XUnionWithUnions_unknownData
+	}
+}
+
+func (_m *XUnionWithUnions) Ordinal() uint32 {
+	return uint32(_m.I_xUnionWithUnionsTag)
+}
+
+func (_m *XUnionWithUnions) SetU1(u1 UnionSize8Align4) {
+	_m.I_xUnionWithUnionsTag = XUnionWithUnionsU1
+	_m.U1 = u1
+}
+
+func XUnionWithUnionsWithU1(u1 UnionSize8Align4) XUnionWithUnions {
+	var _u XUnionWithUnions
+	_u.SetU1(u1)
+	return _u
+}
+
+func (_m *XUnionWithUnions) SetU2(u2 UnionSize12Align4) {
+	_m.I_xUnionWithUnionsTag = XUnionWithUnionsU2
+	_m.U2 = u2
+}
+
+func XUnionWithUnionsWithU2(u2 UnionSize12Align4) XUnionWithUnions {
+	var _u XUnionWithUnions
+	_u.SetU2(u2)
+	return _u
+}
+
 type XUnionInTable struct {
 	_             struct{} `fidl:"t,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
 	Before        string   `fidl:"1,"`
@@ -1313,36 +2264,6 @@
 	u.AfterPresent = false
 }
 
-type TableWithEmptyStruct struct {
-	_        struct{}    `fidl:"t,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
-	S        EmptyStruct `fidl:"1"`
-	SPresent bool
-}
-
-func (u *TableWithEmptyStruct) SetS(s EmptyStruct) {
-	u.S = s
-	u.SPresent = true
-}
-
-func (u *TableWithEmptyStruct) GetS() EmptyStruct {
-	return u.S
-}
-
-func (u *TableWithEmptyStruct) GetSWithDefault(_default EmptyStruct) EmptyStruct {
-	if !u.HasS() {
-		return _default
-	}
-	return u.S
-}
-
-func (u *TableWithEmptyStruct) HasS() bool {
-	return u.SPresent
-}
-
-func (u *TableWithEmptyStruct) ClearS() {
-	u.SPresent = false
-}
-
 type SimpleTable struct {
 	_        struct{} `fidl:"t,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
 	X        int64    `fidl:"1"`
@@ -1481,6 +2402,312 @@
 	u.BazPresent = false
 }
 
+type TableWithEmptyStruct struct {
+	_        struct{}    `fidl:"t,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
+	S        EmptyStruct `fidl:"1"`
+	SPresent bool
+}
+
+func (u *TableWithEmptyStruct) SetS(s EmptyStruct) {
+	u.S = s
+	u.SPresent = true
+}
+
+func (u *TableWithEmptyStruct) GetS() EmptyStruct {
+	return u.S
+}
+
+func (u *TableWithEmptyStruct) GetSWithDefault(_default EmptyStruct) EmptyStruct {
+	if !u.HasS() {
+		return _default
+	}
+	return u.S
+}
+
+func (u *TableWithEmptyStruct) HasS() bool {
+	return u.SPresent
+}
+
+func (u *TableWithEmptyStruct) ClearS() {
+	u.SPresent = false
+}
+
+type TableStructWithReservedSandwich struct {
+	_         struct{}          `fidl:"t,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
+	S1        StructSize3Align1 `fidl:"2"`
+	S1Present bool
+	S2        StructSize3Align1 `fidl:"3"`
+	S2Present bool
+}
+
+func (u *TableStructWithReservedSandwich) SetS1(s1 StructSize3Align1) {
+	u.S1 = s1
+	u.S1Present = true
+}
+
+func (u *TableStructWithReservedSandwich) GetS1() StructSize3Align1 {
+	return u.S1
+}
+
+func (u *TableStructWithReservedSandwich) GetS1WithDefault(_default StructSize3Align1) StructSize3Align1 {
+	if !u.HasS1() {
+		return _default
+	}
+	return u.S1
+}
+
+func (u *TableStructWithReservedSandwich) HasS1() bool {
+	return u.S1Present
+}
+
+func (u *TableStructWithReservedSandwich) ClearS1() {
+	u.S1Present = false
+}
+
+func (u *TableStructWithReservedSandwich) SetS2(s2 StructSize3Align1) {
+	u.S2 = s2
+	u.S2Present = true
+}
+
+func (u *TableStructWithReservedSandwich) GetS2() StructSize3Align1 {
+	return u.S2
+}
+
+func (u *TableStructWithReservedSandwich) GetS2WithDefault(_default StructSize3Align1) StructSize3Align1 {
+	if !u.HasS2() {
+		return _default
+	}
+	return u.S2
+}
+
+func (u *TableStructWithReservedSandwich) HasS2() bool {
+	return u.S2Present
+}
+
+func (u *TableStructWithReservedSandwich) ClearS2() {
+	u.S2Present = false
+}
+
+type TableStructWithUint32Sandwich struct {
+	_         struct{} `fidl:"t,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
+	I         uint32   `fidl:"1"`
+	IPresent  bool
+	S1        StructSize3Align1 `fidl:"2"`
+	S1Present bool
+	S2        StructSize3Align1 `fidl:"3"`
+	S2Present bool
+	I2        uint32 `fidl:"4"`
+	I2Present bool
+}
+
+func (u *TableStructWithUint32Sandwich) SetI(i uint32) {
+	u.I = i
+	u.IPresent = true
+}
+
+func (u *TableStructWithUint32Sandwich) GetI() uint32 {
+	return u.I
+}
+
+func (u *TableStructWithUint32Sandwich) GetIWithDefault(_default uint32) uint32 {
+	if !u.HasI() {
+		return _default
+	}
+	return u.I
+}
+
+func (u *TableStructWithUint32Sandwich) HasI() bool {
+	return u.IPresent
+}
+
+func (u *TableStructWithUint32Sandwich) ClearI() {
+	u.IPresent = false
+}
+
+func (u *TableStructWithUint32Sandwich) SetS1(s1 StructSize3Align1) {
+	u.S1 = s1
+	u.S1Present = true
+}
+
+func (u *TableStructWithUint32Sandwich) GetS1() StructSize3Align1 {
+	return u.S1
+}
+
+func (u *TableStructWithUint32Sandwich) GetS1WithDefault(_default StructSize3Align1) StructSize3Align1 {
+	if !u.HasS1() {
+		return _default
+	}
+	return u.S1
+}
+
+func (u *TableStructWithUint32Sandwich) HasS1() bool {
+	return u.S1Present
+}
+
+func (u *TableStructWithUint32Sandwich) ClearS1() {
+	u.S1Present = false
+}
+
+func (u *TableStructWithUint32Sandwich) SetS2(s2 StructSize3Align1) {
+	u.S2 = s2
+	u.S2Present = true
+}
+
+func (u *TableStructWithUint32Sandwich) GetS2() StructSize3Align1 {
+	return u.S2
+}
+
+func (u *TableStructWithUint32Sandwich) GetS2WithDefault(_default StructSize3Align1) StructSize3Align1 {
+	if !u.HasS2() {
+		return _default
+	}
+	return u.S2
+}
+
+func (u *TableStructWithUint32Sandwich) HasS2() bool {
+	return u.S2Present
+}
+
+func (u *TableStructWithUint32Sandwich) ClearS2() {
+	u.S2Present = false
+}
+
+func (u *TableStructWithUint32Sandwich) SetI2(i2 uint32) {
+	u.I2 = i2
+	u.I2Present = true
+}
+
+func (u *TableStructWithUint32Sandwich) GetI2() uint32 {
+	return u.I2
+}
+
+func (u *TableStructWithUint32Sandwich) GetI2WithDefault(_default uint32) uint32 {
+	if !u.HasI2() {
+		return _default
+	}
+	return u.I2
+}
+
+func (u *TableStructWithUint32Sandwich) HasI2() bool {
+	return u.I2Present
+}
+
+func (u *TableStructWithUint32Sandwich) ClearI2() {
+	u.I2Present = false
+}
+
+type TableUnionWithVectorReservedSandwich struct {
+	_         struct{}        `fidl:"t,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
+	Uv        UnionWithVector `fidl:"2"`
+	UvPresent bool
+}
+
+func (u *TableUnionWithVectorReservedSandwich) SetUv(uv UnionWithVector) {
+	u.Uv = uv
+	u.UvPresent = true
+}
+
+func (u *TableUnionWithVectorReservedSandwich) GetUv() UnionWithVector {
+	return u.Uv
+}
+
+func (u *TableUnionWithVectorReservedSandwich) GetUvWithDefault(_default UnionWithVector) UnionWithVector {
+	if !u.HasUv() {
+		return _default
+	}
+	return u.Uv
+}
+
+func (u *TableUnionWithVectorReservedSandwich) HasUv() bool {
+	return u.UvPresent
+}
+
+func (u *TableUnionWithVectorReservedSandwich) ClearUv() {
+	u.UvPresent = false
+}
+
+type TableUnionWithVectorStructSandwich struct {
+	_         struct{}          `fidl:"t,16,8" fidl_size_v1:"16" fidl_alignment_v1:"8" fidl_size_v1_no_ee:"16" fidl_alignment_v1_no_ee:"8"`
+	S1        StructSize3Align1 `fidl:"1"`
+	S1Present bool
+	Uv        UnionWithVector `fidl:"2"`
+	UvPresent bool
+	S2        StructSize3Align1 `fidl:"3"`
+	S2Present bool
+}
+
+func (u *TableUnionWithVectorStructSandwich) SetS1(s1 StructSize3Align1) {
+	u.S1 = s1
+	u.S1Present = true
+}
+
+func (u *TableUnionWithVectorStructSandwich) GetS1() StructSize3Align1 {
+	return u.S1
+}
+
+func (u *TableUnionWithVectorStructSandwich) GetS1WithDefault(_default StructSize3Align1) StructSize3Align1 {
+	if !u.HasS1() {
+		return _default
+	}
+	return u.S1
+}
+
+func (u *TableUnionWithVectorStructSandwich) HasS1() bool {
+	return u.S1Present
+}
+
+func (u *TableUnionWithVectorStructSandwich) ClearS1() {
+	u.S1Present = false
+}
+
+func (u *TableUnionWithVectorStructSandwich) SetUv(uv UnionWithVector) {
+	u.Uv = uv
+	u.UvPresent = true
+}
+
+func (u *TableUnionWithVectorStructSandwich) GetUv() UnionWithVector {
+	return u.Uv
+}
+
+func (u *TableUnionWithVectorStructSandwich) GetUvWithDefault(_default UnionWithVector) UnionWithVector {
+	if !u.HasUv() {
+		return _default
+	}
+	return u.Uv
+}
+
+func (u *TableUnionWithVectorStructSandwich) HasUv() bool {
+	return u.UvPresent
+}
+
+func (u *TableUnionWithVectorStructSandwich) ClearUv() {
+	u.UvPresent = false
+}
+
+func (u *TableUnionWithVectorStructSandwich) SetS2(s2 StructSize3Align1) {
+	u.S2 = s2
+	u.S2Present = true
+}
+
+func (u *TableUnionWithVectorStructSandwich) GetS2() StructSize3Align1 {
+	return u.S2
+}
+
+func (u *TableUnionWithVectorStructSandwich) GetS2WithDefault(_default StructSize3Align1) StructSize3Align1 {
+	if !u.HasS2() {
+		return _default
+	}
+	return u.S2
+}
+
+func (u *TableUnionWithVectorStructSandwich) HasS2() bool {
+	return u.S2Present
+}
+
+func (u *TableUnionWithVectorStructSandwich) ClearS2() {
+	u.S2Present = false
+}
+
 type EthernetDeviceInterface _bindings.ChannelProxy
 
 type EthernetDevice interface {
diff --git a/src/syscall/zx/fidl/encoding_new.go b/src/syscall/zx/fidl/encoding_new.go
index 9e35dd7..650243d 100644
--- a/src/syscall/zx/fidl/encoding_new.go
+++ b/src/syscall/zx/fidl/encoding_new.go
@@ -261,14 +261,16 @@
 			alignmentV1:  alignmentV1,
 		}, nil
 	case unionTag:
-		return mUnion{
+		m := mUnion{
 			fields:       fields,
 			ordinals:     ordinals,
 			sizeOld:      sizeOld,
 			alignmentOld: alignmentOld,
 			sizeV1:       sizeV1,
 			alignmentV1:  alignmentV1,
-		}, nil
+		}
+		m.mXUnion = mUnionToMXUnion(m)
+		return m, nil
 	case xunionTag, strictXunionTag:
 		strictness := strictness(kind == strictXunionTag)
 
@@ -298,6 +300,20 @@
 	}
 }
 
+func mUnionToMXUnion(m mUnion) mXUnion {
+	ordinalToFields := make(map[int]mField)
+	for i := 0; i < len(m.fields); i++ {
+		ordinalToFields[m.ordinals[i]] = m.fields[i]
+	}
+	return mXUnion{
+		fields:        ordinalToFields,
+		unionToXunion: true,
+		sizeV1:        m.sizeV1,
+		alignmentV1:   m.alignmentV1,
+		strictness:    true,
+	}
+}
+
 func readIntTag(field reflect.StructField, tagKey string) (int, error) {
 	content, ok := field.Tag.Lookup(tagKey)
 	if !ok {
@@ -455,19 +471,25 @@
 	case mVector:
 		return mOptVector(m), nil
 	case mEmptyStruct:
-		return mOptStructUnion{
+		return mPointer{
 			Marshaler: m,
 			elemTyp:   typ,
 		}, nil
 	case mStruct:
-		return mOptStructUnion{
+		return mPointer{
 			Marshaler: m,
 			elemTyp:   typ,
 		}, nil
 	case mUnion:
-		return mOptStructUnion{
-			Marshaler: m,
-			elemTyp:   typ,
+		return mOptUnion{
+			mPointer: mPointer{
+				Marshaler: m,
+				elemTyp:   typ,
+			},
+			mOptXUnion: mOptXUnion{
+				mXUnion: m.mXUnion,
+				typ:     typ,
+			},
 		}, nil
 	case mXUnion:
 		return mOptXUnion{
@@ -506,7 +528,8 @@
 	mXUnion{},
 	mOptXUnion{},
 	mTable{},
-	mOptStructUnion{},
+	mPointer{},
+	mOptUnion{},
 	mArray{},
 	mVector{},
 	mOptVector{},
@@ -633,6 +656,8 @@
 	ordinals              []int
 	sizeOld, alignmentOld int
 	sizeV1, alignmentV1   int
+
+	mXUnion
 }
 
 func (m mUnion) getMarshalSize(ctx MarshalerContext) int {
@@ -665,7 +690,7 @@
 
 func (m mUnion) marshal(ctx MarshalerContext, v reflect.Value, out *encoder) error {
 	if ctx.EncodeUnionsAsXUnionBytes {
-		return m.marshalAsXUnion(ctx, v, out)
+		return m.mXUnion.marshal(ctx, v, out)
 	}
 
 	// Kind.
@@ -692,38 +717,9 @@
 	return nil
 }
 
-func (m mUnion) marshalAsXUnion(ctx MarshalerContext, v reflect.Value, out *encoder) error {
-	// Ordinal.
-	fieldTag := int(v.Field(0).Uint())
-	ordinal, err := strconv.ParseInt(v.Type().Field(fieldTag).Tag.Get("fidl"), 0, 64)
-	if err != nil {
-		return errors.New("error parsing ordinal from tag: " + err.Error())
-	}
-	out.writeUint(uint64(ordinal), 8)
-	// Field.
-	field := m.fields[fieldTag-1]
-	if err := marshalEnvelopePresent(ctx, field, v.Field(field.index), out); err != nil {
-		return err
-	}
-	return nil
-}
-
 func (m mUnion) unmarshal(ctx MarshalerContext, in *decoder, v reflect.Value) error {
 	if ctx.DecodeUnionsFromXUnionBytes {
-		ordinalToFields := make(map[int]mField)
-		for i := 0; i < len(m.fields); i++ {
-			ordinalToFields[m.ordinals[i]] = m.fields[i]
-		}
-		// Just use the xunion unmarshaler because the layout of union and xunion
-		// is the same in go.
-		xunion := mXUnion{
-			fields:        ordinalToFields,
-			unionToXunion: true,
-			sizeV1:        m.sizeV1,
-			alignmentV1:   m.alignmentV1,
-			strictness:    true,
-		}
-		return xunion.unmarshal(ctx, in, v)
+		return m.mXUnion.unmarshal(ctx, in, v)
 	}
 
 	// Save the head for proper padding.
@@ -1211,20 +1207,20 @@
 	return nil
 }
 
-type mOptStructUnion struct {
+type mPointer struct {
 	Marshaler
 	elemTyp reflect.Type
 }
 
-func (m mOptStructUnion) getMarshalSize(ctx MarshalerContext) int {
+func (m mPointer) getMarshalSize(ctx MarshalerContext) int {
 	return 8
 }
 
-func (m mOptStructUnion) getUnmarshalSize(ctx MarshalerContext) int {
+func (m mPointer) getUnmarshalSize(ctx MarshalerContext) int {
 	return 8
 }
 
-func (m mOptStructUnion) marshal(ctx MarshalerContext, v reflect.Value, out *encoder) error {
+func (m mPointer) marshal(ctx MarshalerContext, v reflect.Value, out *encoder) error {
 	// Nil?
 	if v.IsNil() {
 		out.writeUint(noAlloc, 8)
@@ -1249,7 +1245,7 @@
 	return nil
 }
 
-func (m mOptStructUnion) unmarshal(ctx MarshalerContext, in *decoder, v reflect.Value) error {
+func (m mPointer) unmarshal(ctx MarshalerContext, in *decoder, v reflect.Value) error {
 	// Nil?
 	ptr, err := in.readUint(8)
 	if err != nil {
@@ -1284,6 +1280,41 @@
 	return nil
 }
 
+type mOptUnion struct {
+	mPointer
+	mOptXUnion
+}
+
+func (m mOptUnion) getMarshalSize(ctx MarshalerContext) int {
+	if ctx.EncodeUnionsAsXUnionBytes {
+		return 24
+	}
+	return 8
+}
+
+func (m mOptUnion) getUnmarshalSize(ctx MarshalerContext) int {
+	if ctx.DecodeUnionsFromXUnionBytes {
+		return 24
+	}
+	return 8
+}
+
+func (m mOptUnion) marshal(ctx MarshalerContext, v reflect.Value, out *encoder) error {
+	if ctx.EncodeUnionsAsXUnionBytes {
+		return m.mOptXUnion.marshal(ctx, v, out)
+	} else {
+		return m.mPointer.marshal(ctx, v, out)
+	}
+}
+
+func (m mOptUnion) unmarshal(ctx MarshalerContext, in *decoder, v reflect.Value) error {
+	if ctx.DecodeUnionsFromXUnionBytes {
+		return m.mOptXUnion.unmarshal(ctx, in, v)
+	} else {
+		return m.mPointer.unmarshal(ctx, in, v)
+	}
+}
+
 type mArray struct {
 	Marshaler
 	size int
diff --git a/src/syscall/zx/fidl/fidl_test/conformance_test.go b/src/syscall/zx/fidl/fidl_test/conformance_test.go
index 5246cd5..ba494c7 100644
--- a/src/syscall/zx/fidl/fidl_test/conformance_test.go
+++ b/src/syscall/zx/fidl/fidl_test/conformance_test.go
@@ -1574,6 +1574,1917 @@
 	}
 
 	{
+		v1 := conformance.Sandwich1{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionSize8Align4{}
+		var v4 uint32 = 202050057
+		v3.SetVariant(v4)
+		v1.TheUnion = v3
+		var v5 uint32 = 134678021
+		v1.After = v5
+
+		encodeSuccessCase{
+			name: "Sandwich1Case1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x02, 0x00, 0x00, 0x00,
+				0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x07, 0x08,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich1{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionSize8Align4{}
+		var v4 uint32 = 202050057
+		v3.SetVariant(v4)
+		v1.TheUnion = v3
+		var v5 uint32 = 134678021
+		v1.After = v5
+
+		encodeSuccessCase{
+			name: "Sandwich1Case1_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+				0x09, 0x0a, 0x0b, 0x0c, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich2{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionSize12Align4{}
+		var v4 uint8 = 160
+		var v5 uint8 = 161
+		var v6 uint8 = 162
+		var v7 uint8 = 163
+		var v8 uint8 = 164
+		var v9 uint8 = 165
+		v10 := [6]uint8{v4, v5, v6, v7, v8, v9}
+		v3.SetVariant(v10)
+		v1.TheUnion = v3
+		var v11 uint32 = 134678021
+		v1.After = v11
+
+		encodeSuccessCase{
+			name: "Sandwich2Case1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x03, 0x00, 0x00, 0x00,
+				0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0x00, 0x00,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich2{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionSize12Align4{}
+		var v4 uint8 = 160
+		var v5 uint8 = 161
+		var v6 uint8 = 162
+		var v7 uint8 = 163
+		var v8 uint8 = 164
+		var v9 uint8 = 165
+		v10 := [6]uint8{v4, v5, v6, v7, v8, v9}
+		v3.SetVariant(v10)
+		v1.TheUnion = v3
+		var v11 uint32 = 134678021
+		v1.After = v11
+
+		encodeSuccessCase{
+			name: "Sandwich2Case1_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+				0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich3{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionSize24Align8{}
+		v4 := conformance.StructSize16Align8{}
+		var v5 uint64 = 12080525177006498208
+		v4.F1 = v5
+		var v6 uint64 = 12659246559711111592
+		v4.F2 = v6
+		v3.SetVariant(v4)
+		v1.TheUnion = v3
+		var v7 uint32 = 134678021
+		v1.After = v7
+
+		encodeSuccessCase{
+			name: "Sandwich3Case1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
+				0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich3{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionSize24Align8{}
+		v4 := conformance.StructSize16Align8{}
+		var v5 uint64 = 12080525177006498208
+		v4.F1 = v5
+		var v6 uint64 = 12659246559711111592
+		v4.F2 = v6
+		v3.SetVariant(v4)
+		v1.TheUnion = v3
+		var v7 uint32 = 134678021
+		v1.After = v7
+
+		encodeSuccessCase{
+			name: "Sandwich3Case1_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+				0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
+				0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich4{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionSize36Align4{}
+		var v4 uint8 = 160
+		var v5 uint8 = 161
+		var v6 uint8 = 162
+		var v7 uint8 = 163
+		var v8 uint8 = 164
+		var v9 uint8 = 165
+		var v10 uint8 = 166
+		var v11 uint8 = 167
+		var v12 uint8 = 168
+		var v13 uint8 = 169
+		var v14 uint8 = 170
+		var v15 uint8 = 171
+		var v16 uint8 = 172
+		var v17 uint8 = 173
+		var v18 uint8 = 174
+		var v19 uint8 = 175
+		var v20 uint8 = 176
+		var v21 uint8 = 177
+		var v22 uint8 = 178
+		var v23 uint8 = 179
+		var v24 uint8 = 180
+		var v25 uint8 = 181
+		var v26 uint8 = 182
+		var v27 uint8 = 183
+		var v28 uint8 = 184
+		var v29 uint8 = 185
+		var v30 uint8 = 186
+		var v31 uint8 = 187
+		var v32 uint8 = 188
+		var v33 uint8 = 189
+		var v34 uint8 = 190
+		var v35 uint8 = 191
+		v36 := [32]uint8{v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35}
+		v3.SetVariant(v36)
+		v1.TheUnion = v3
+		var v37 uint32 = 134678021
+		v1.After = v37
+
+		encodeSuccessCase{
+			name: "Sandwich4Case1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x03, 0x00, 0x00, 0x00,
+				0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
+				0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+				0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
+				0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich4{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionSize36Align4{}
+		var v4 uint8 = 160
+		var v5 uint8 = 161
+		var v6 uint8 = 162
+		var v7 uint8 = 163
+		var v8 uint8 = 164
+		var v9 uint8 = 165
+		var v10 uint8 = 166
+		var v11 uint8 = 167
+		var v12 uint8 = 168
+		var v13 uint8 = 169
+		var v14 uint8 = 170
+		var v15 uint8 = 171
+		var v16 uint8 = 172
+		var v17 uint8 = 173
+		var v18 uint8 = 174
+		var v19 uint8 = 175
+		var v20 uint8 = 176
+		var v21 uint8 = 177
+		var v22 uint8 = 178
+		var v23 uint8 = 179
+		var v24 uint8 = 180
+		var v25 uint8 = 181
+		var v26 uint8 = 182
+		var v27 uint8 = 183
+		var v28 uint8 = 184
+		var v29 uint8 = 185
+		var v30 uint8 = 186
+		var v31 uint8 = 187
+		var v32 uint8 = 188
+		var v33 uint8 = 189
+		var v34 uint8 = 190
+		var v35 uint8 = 191
+		v36 := [32]uint8{v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35}
+		v3.SetVariant(v36)
+		v1.TheUnion = v3
+		var v37 uint32 = 134678021
+		v1.After = v37
+
+		encodeSuccessCase{
+			name: "Sandwich4Case1_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+				0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
+				0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+				0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
+				0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich5{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionOfUnion{}
+		v4 := conformance.UnionSize8Align4{}
+		var v5 uint32 = 202050057
+		v4.SetVariant(v5)
+		v3.SetSize8align4(v4)
+		v1.UnionOfUnion = v3
+		var v6 uint32 = 134678021
+		v1.After = v6
+
+		encodeSuccessCase{
+			name: "Sandwich5Case1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x02, 0x00, 0x00, 0x00, 0x09, 0x0a, 0x0b, 0x0c,
+				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich5{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionOfUnion{}
+		v4 := conformance.UnionSize8Align4{}
+		var v5 uint32 = 202050057
+		v4.SetVariant(v5)
+		v3.SetSize8align4(v4)
+		v1.UnionOfUnion = v3
+		var v6 uint32 = 134678021
+		v1.After = v6
+
+		encodeSuccessCase{
+			name: "Sandwich5Case1_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x09, 0x0a, 0x0b, 0x0c, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich5{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionOfUnion{}
+		v4 := conformance.UnionSize24Align8{}
+		v5 := conformance.StructSize16Align8{}
+		var v6 uint64 = 12080525177006498208
+		v5.F1 = v6
+		var v7 uint64 = 12659246559711111592
+		v5.F2 = v7
+		v4.SetVariant(v5)
+		v3.SetSize24align8(v4)
+		v1.UnionOfUnion = v3
+		var v8 uint32 = 134678021
+		v1.After = v8
+
+		encodeSuccessCase{
+			name: "Sandwich5Case2",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
+				0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich5{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionOfUnion{}
+		v4 := conformance.UnionSize24Align8{}
+		v5 := conformance.StructSize16Align8{}
+		var v6 uint64 = 12080525177006498208
+		v5.F1 = v6
+		var v7 uint64 = 12659246559711111592
+		v5.F2 = v7
+		v4.SetVariant(v5)
+		v3.SetSize24align8(v4)
+		v1.UnionOfUnion = v3
+		var v8 uint32 = 134678021
+		v1.After = v8
+
+		encodeSuccessCase{
+			name: "Sandwich5Case2_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+				0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
+				0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich6{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionWithVector{}
+		var v4 uint8 = 160
+		var v5 uint8 = 161
+		var v6 uint8 = 162
+		var v7 uint8 = 163
+		var v8 uint8 = 164
+		var v9 uint8 = 165
+		v10 := []uint8{v4, v5, v6, v7, v8, v9}
+		v3.SetVectorOfUint8(v10)
+		v1.TheUnion = v3
+		var v11 uint32 = 134678021
+		v1.After = v11
+
+		encodeSuccessCase{
+			name: "Sandwich6Case1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+				0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich6{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionWithVector{}
+		var v4 uint8 = 160
+		var v5 uint8 = 161
+		var v6 uint8 = 162
+		var v7 uint8 = 163
+		var v8 uint8 = 164
+		var v9 uint8 = 165
+		v10 := []uint8{v4, v5, v6, v7, v8, v9}
+		v3.SetVectorOfUint8(v10)
+		v1.TheUnion = v3
+		var v11 uint32 = 134678021
+		v1.After = v11
+
+		encodeSuccessCase{
+			name: "Sandwich6Case1_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+				0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich6{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionWithVector{}
+		v4 := []uint8{}
+		v3.SetVectorOfUint8(v4)
+		v1.TheUnion = v3
+		var v5 uint32 = 134678021
+		v1.After = v5
+
+		encodeSuccessCase{
+			name: "Sandwich6Case1AbsentVector",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich6{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionWithVector{}
+		v4 := []uint8{}
+		v3.SetVectorOfUint8(v4)
+		v1.TheUnion = v3
+		var v5 uint32 = 134678021
+		v1.After = v5
+
+		encodeSuccessCase{
+			name: "Sandwich6Case1AbsentVector_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich6{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionWithVector{}
+		v4 := "soft migrations rock!"
+		v3.SetString(v4)
+		v1.TheUnion = v3
+		var v5 uint32 = 134678021
+		v1.After = v5
+
+		encodeSuccessCase{
+			name: "Sandwich6Case2",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+				0x73, 0x6f, 0x66, 0x74, 0x20, 0x6d, 0x69, 0x67,
+				0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20,
+				0x72, 0x6f, 0x63, 0x6b, 0x21, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich6{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionWithVector{}
+		v4 := "soft migrations rock!"
+		v3.SetString(v4)
+		v1.TheUnion = v3
+		var v5 uint32 = 134678021
+		v1.After = v5
+
+		encodeSuccessCase{
+			name: "Sandwich6Case2_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+				0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x73, 0x6f, 0x66, 0x74, 0x20, 0x6d, 0x69, 0x67,
+				0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20,
+				0x72, 0x6f, 0x63, 0x6b, 0x21, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich6{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionWithVector{}
+		v4 := conformance.StructSize3Align1{}
+		var v5 uint8 = 115
+		var v6 uint8 = 111
+		var v7 uint8 = 102
+		v8 := [3]uint8{v5, v6, v7}
+		v4.ThreeBytes = v8
+		v9 := conformance.StructSize3Align1{}
+		var v10 uint8 = 32
+		var v11 uint8 = 109
+		var v12 uint8 = 105
+		v13 := [3]uint8{v10, v11, v12}
+		v9.ThreeBytes = v13
+		v14 := conformance.StructSize3Align1{}
+		var v15 uint8 = 114
+		var v16 uint8 = 97
+		var v17 uint8 = 116
+		v18 := [3]uint8{v15, v16, v17}
+		v14.ThreeBytes = v18
+		v19 := []conformance.StructSize3Align1{v4, v9, v14}
+		v3.SetVectorS3A1(v19)
+		v1.TheUnion = v3
+		var v20 uint32 = 134678021
+		v1.After = v20
+
+		encodeSuccessCase{
+			name: "Sandwich6Case3",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+				0x73, 0x6f, 0x66, 0x20, 0x6d, 0x69, 0x72, 0x61,
+				0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich6{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionWithVector{}
+		v4 := conformance.StructSize3Align1{}
+		var v5 uint8 = 115
+		var v6 uint8 = 111
+		var v7 uint8 = 102
+		v8 := [3]uint8{v5, v6, v7}
+		v4.ThreeBytes = v8
+		v9 := conformance.StructSize3Align1{}
+		var v10 uint8 = 32
+		var v11 uint8 = 109
+		var v12 uint8 = 105
+		v13 := [3]uint8{v10, v11, v12}
+		v9.ThreeBytes = v13
+		v14 := conformance.StructSize3Align1{}
+		var v15 uint8 = 114
+		var v16 uint8 = 97
+		var v17 uint8 = 116
+		v18 := [3]uint8{v15, v16, v17}
+		v14.ThreeBytes = v18
+		v19 := []conformance.StructSize3Align1{v4, v9, v14}
+		v3.SetVectorS3A1(v19)
+		v1.TheUnion = v3
+		var v20 uint32 = 134678021
+		v1.After = v20
+
+		encodeSuccessCase{
+			name: "Sandwich6Case3_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x73, 0x6f, 0x66, 0x20, 0x6d, 0x69, 0x72, 0x61,
+				0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich6{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionWithVector{}
+		v4 := conformance.StructSize3Align2{}
+		var v5 uint16 = 28531
+		v4.F1 = v5
+		var v6 uint8 = 102
+		v4.F2 = v6
+		v7 := conformance.StructSize3Align2{}
+		var v8 uint16 = 27936
+		v7.F1 = v8
+		var v9 uint8 = 105
+		v7.F2 = v9
+		v10 := conformance.StructSize3Align2{}
+		var v11 uint16 = 24946
+		v10.F1 = v11
+		var v12 uint8 = 116
+		v10.F2 = v12
+		v13 := []conformance.StructSize3Align2{v4, v7, v10}
+		v3.SetVectorS3A2(v13)
+		v1.TheUnion = v3
+		var v14 uint32 = 134678021
+		v1.After = v14
+
+		encodeSuccessCase{
+			name: "Sandwich6Case4",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+				0x73, 0x6f, 0x66, 0x00, 0x20, 0x6d, 0x69, 0x00,
+				0x72, 0x61, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich6{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionWithVector{}
+		v4 := conformance.StructSize3Align2{}
+		var v5 uint16 = 28531
+		v4.F1 = v5
+		var v6 uint8 = 102
+		v4.F2 = v6
+		v7 := conformance.StructSize3Align2{}
+		var v8 uint16 = 27936
+		v7.F1 = v8
+		var v9 uint8 = 105
+		v7.F2 = v9
+		v10 := conformance.StructSize3Align2{}
+		var v11 uint16 = 24946
+		v10.F1 = v11
+		var v12 uint8 = 116
+		v10.F2 = v12
+		v13 := []conformance.StructSize3Align2{v4, v7, v10}
+		v3.SetVectorS3A2(v13)
+		v1.TheUnion = v3
+		var v14 uint32 = 134678021
+		v1.After = v14
+
+		encodeSuccessCase{
+			name: "Sandwich6Case4_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x73, 0x6f, 0x66, 0x00, 0x20, 0x6d, 0x69, 0x00,
+				0x72, 0x61, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich6{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionWithVector{}
+		var v4 uint32 = 4294967295
+		var v5 uint32 = 4294967295
+		var v6 uint32 = 4294967295
+		v7 := []uint32{v4, v5, v6}
+		v3.SetHandles(v7)
+		v1.TheUnion = v3
+		var v8 uint32 = 134678021
+		v1.After = v8
+
+		encodeSuccessCase{
+			name: "Sandwich6Case5",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich6{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionWithVector{}
+		var v4 uint32 = 4294967295
+		var v5 uint32 = 4294967295
+		var v6 uint32 = 4294967295
+		v7 := []uint32{v4, v5, v6}
+		v3.SetHandles(v7)
+		v1.TheUnion = v3
+		var v8 uint32 = 134678021
+		v1.After = v8
+
+		encodeSuccessCase{
+			name: "Sandwich6Case5_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich6{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionWithVector{}
+		v4 := conformance.StructSize3Align1{}
+		var v5 uint8 = 161
+		var v6 uint8 = 162
+		var v7 uint8 = 163
+		v8 := [3]uint8{v5, v6, v7}
+		v4.ThreeBytes = v8
+		v9 := conformance.StructSize3Align1{}
+		var v10 uint8 = 164
+		var v11 uint8 = 165
+		var v12 uint8 = 166
+		v13 := [3]uint8{v10, v11, v12}
+		v9.ThreeBytes = v13
+		v14 := [2]conformance.StructSize3Align1{v4, v9}
+		v3.SetArrayS3A1(v14)
+		v1.TheUnion = v3
+		var v15 uint32 = 134678021
+		v1.After = v15
+
+		encodeSuccessCase{
+			name: "Sandwich6Case6",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0x00, 0x00,
+				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich6{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionWithVector{}
+		v4 := conformance.StructSize3Align1{}
+		var v5 uint8 = 161
+		var v6 uint8 = 162
+		var v7 uint8 = 163
+		v8 := [3]uint8{v5, v6, v7}
+		v4.ThreeBytes = v8
+		v9 := conformance.StructSize3Align1{}
+		var v10 uint8 = 164
+		var v11 uint8 = 165
+		var v12 uint8 = 166
+		v13 := [3]uint8{v10, v11, v12}
+		v9.ThreeBytes = v13
+		v14 := [2]conformance.StructSize3Align1{v4, v9}
+		v3.SetArrayS3A1(v14)
+		v1.TheUnion = v3
+		var v15 uint32 = 134678021
+		v1.After = v15
+
+		encodeSuccessCase{
+			name: "Sandwich6Case6_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+				0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich6{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionWithVector{}
+		v4 := conformance.StructSize3Align2{}
+		var v5 uint16 = 41633
+		v4.F1 = v5
+		var v6 uint8 = 163
+		v4.F2 = v6
+		v7 := conformance.StructSize3Align2{}
+		var v8 uint16 = 42404
+		v7.F1 = v8
+		var v9 uint8 = 166
+		v7.F2 = v9
+		v10 := [2]conformance.StructSize3Align2{v4, v7}
+		v3.SetArrayS3A2(v10)
+		v1.TheUnion = v3
+		var v11 uint32 = 134678021
+		v1.After = v11
+
+		encodeSuccessCase{
+			name: "Sandwich6Case7",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xa1, 0xa2, 0xa3, 0x00, 0xa4, 0xa5, 0xa6, 0x00,
+				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich6{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionWithVector{}
+		v4 := conformance.StructSize3Align2{}
+		var v5 uint16 = 41633
+		v4.F1 = v5
+		var v6 uint8 = 163
+		v4.F2 = v6
+		v7 := conformance.StructSize3Align2{}
+		var v8 uint16 = 42404
+		v7.F1 = v8
+		var v9 uint8 = 166
+		v7.F2 = v9
+		v10 := [2]conformance.StructSize3Align2{v4, v7}
+		v3.SetArrayS3A2(v10)
+		v1.TheUnion = v3
+		var v11 uint32 = 134678021
+		v1.After = v11
+
+		encodeSuccessCase{
+			name: "Sandwich6Case7_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+				0xa1, 0xa2, 0xa3, 0x00, 0xa4, 0xa5, 0xa6, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich6{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionWithVector{}
+		v4 := conformance.UnionSize8Align4{}
+		var v5 uint32 = 202050057
+		v4.SetVariant(v5)
+		v6 := []conformance.UnionSize8Align4{v4}
+		v3.SetVectorUnion(v6)
+		v1.TheUnion = v3
+		var v7 uint32 = 134678021
+		v1.After = v7
+
+		encodeSuccessCase{
+			name: "Sandwich6Case8",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+				0x02, 0x00, 0x00, 0x00, 0x09, 0x0a, 0x0b, 0x0c,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich6{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionWithVector{}
+		v4 := conformance.UnionSize8Align4{}
+		var v5 uint32 = 202050057
+		v4.SetVariant(v5)
+		v6 := []conformance.UnionSize8Align4{v4}
+		v3.SetVectorUnion(v6)
+		v1.TheUnion = v3
+		var v7 uint32 = 134678021
+		v1.After = v7
+
+		encodeSuccessCase{
+			name: "Sandwich6Case8_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+				0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x09, 0x0a, 0x0b, 0x0c, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.TableStructWithReservedSandwichStruct{}
+		v2 := conformance.TableStructWithReservedSandwich{}
+		v3 := conformance.StructSize3Align1{}
+		var v4 uint8 = 9
+		var v5 uint8 = 10
+		var v6 uint8 = 11
+		v7 := [3]uint8{v4, v5, v6}
+		v3.ThreeBytes = v7
+		v2.SetS1(v3)
+		v8 := conformance.StructSize3Align1{}
+		var v9 uint8 = 25
+		var v10 uint8 = 26
+		var v11 uint8 = 27
+		v12 := [3]uint8{v9, v10, v11}
+		v8.ThreeBytes = v12
+		v2.SetS2(v8)
+		v1.Table = v2
+
+		encodeSuccessCase{
+			name: "Table_StructWithReservedSandwich",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x09, 0x0a, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x19, 0x1a, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.TableStructWithReservedSandwichStruct{}
+		v2 := conformance.TableStructWithReservedSandwich{}
+		v3 := conformance.StructSize3Align1{}
+		var v4 uint8 = 9
+		var v5 uint8 = 10
+		var v6 uint8 = 11
+		v7 := [3]uint8{v4, v5, v6}
+		v3.ThreeBytes = v7
+		v2.SetS1(v3)
+		v8 := conformance.StructSize3Align1{}
+		var v9 uint8 = 25
+		var v10 uint8 = 26
+		var v11 uint8 = 27
+		v12 := [3]uint8{v9, v10, v11}
+		v8.ThreeBytes = v12
+		v2.SetS2(v8)
+		v1.Table = v2
+
+		encodeSuccessCase{
+			name: "Table_StructWithReservedSandwich_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x09, 0x0a, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x19, 0x1a, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.TableStructWithUint32SandwichStruct{}
+		v2 := conformance.TableStructWithUint32Sandwich{}
+		var v3 uint32 = 67305985
+		v2.SetI(v3)
+		v4 := conformance.StructSize3Align1{}
+		var v5 uint8 = 9
+		var v6 uint8 = 10
+		var v7 uint8 = 11
+		v8 := [3]uint8{v5, v6, v7}
+		v4.ThreeBytes = v8
+		v2.SetS1(v4)
+		v9 := conformance.StructSize3Align1{}
+		var v10 uint8 = 25
+		var v11 uint8 = 26
+		var v12 uint8 = 27
+		v13 := [3]uint8{v10, v11, v12}
+		v9.ThreeBytes = v13
+		v2.SetS2(v9)
+		var v14 uint32 = 218893066
+		v2.SetI2(v14)
+		v1.Table = v2
+
+		encodeSuccessCase{
+			name: "Table_StructWithUint32Sandwich",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x09, 0x0a, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x19, 0x1a, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x0a, 0x0b, 0x0c, 0x0d, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.TableStructWithUint32SandwichStruct{}
+		v2 := conformance.TableStructWithUint32Sandwich{}
+		var v3 uint32 = 67305985
+		v2.SetI(v3)
+		v4 := conformance.StructSize3Align1{}
+		var v5 uint8 = 9
+		var v6 uint8 = 10
+		var v7 uint8 = 11
+		v8 := [3]uint8{v5, v6, v7}
+		v4.ThreeBytes = v8
+		v2.SetS1(v4)
+		v9 := conformance.StructSize3Align1{}
+		var v10 uint8 = 25
+		var v11 uint8 = 26
+		var v12 uint8 = 27
+		v13 := [3]uint8{v10, v11, v12}
+		v9.ThreeBytes = v13
+		v2.SetS2(v9)
+		var v14 uint32 = 218893066
+		v2.SetI2(v14)
+		v1.Table = v2
+
+		encodeSuccessCase{
+			name: "Table_StructWithUint32Sandwich_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x09, 0x0a, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x19, 0x1a, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x0a, 0x0b, 0x0c, 0x0d, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.TableUnionWithVectorReservedSandwichStruct{}
+		v2 := conformance.TableUnionWithVectorReservedSandwich{}
+		v3 := conformance.UnionWithVector{}
+		v4 := "hello"
+		v3.SetString(v4)
+		v2.SetUv(v3)
+		v1.Table = v2
+
+		encodeSuccessCase{
+			name: "Table_UnionWithVector_ReservedSandwich",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.TableUnionWithVectorReservedSandwichStruct{}
+		v2 := conformance.TableUnionWithVectorReservedSandwich{}
+		v3 := conformance.UnionWithVector{}
+		v4 := "hello"
+		v3.SetString(v4)
+		v2.SetUv(v3)
+		v1.Table = v2
+
+		encodeSuccessCase{
+			name: "Table_UnionWithVector_ReservedSandwich_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.TableUnionWithVectorStructSandwichStruct{}
+		v2 := conformance.TableUnionWithVectorStructSandwich{}
+		v3 := conformance.StructSize3Align1{}
+		var v4 uint8 = 1
+		var v5 uint8 = 2
+		var v6 uint8 = 3
+		v7 := [3]uint8{v4, v5, v6}
+		v3.ThreeBytes = v7
+		v2.SetS1(v3)
+		v8 := conformance.UnionWithVector{}
+		v9 := "hello"
+		v8.SetString(v9)
+		v2.SetUv(v8)
+		v10 := conformance.StructSize3Align1{}
+		var v11 uint8 = 4
+		var v12 uint8 = 5
+		var v13 uint8 = 6
+		v14 := [3]uint8{v11, v12, v13}
+		v10.ThreeBytes = v14
+		v2.SetS2(v10)
+		v1.Table = v2
+
+		encodeSuccessCase{
+			name: "Table_UnionWithVector_StructSandwich",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x01, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x00, 0x00, 0x00,
+				0x04, 0x05, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.TableUnionWithVectorStructSandwichStruct{}
+		v2 := conformance.TableUnionWithVectorStructSandwich{}
+		v3 := conformance.StructSize3Align1{}
+		var v4 uint8 = 1
+		var v5 uint8 = 2
+		var v6 uint8 = 3
+		v7 := [3]uint8{v4, v5, v6}
+		v3.ThreeBytes = v7
+		v2.SetS1(v3)
+		v8 := conformance.UnionWithVector{}
+		v9 := "hello"
+		v8.SetString(v9)
+		v2.SetUv(v8)
+		v10 := conformance.StructSize3Align1{}
+		var v11 uint8 = 4
+		var v12 uint8 = 5
+		var v13 uint8 = 6
+		v14 := [3]uint8{v11, v12, v13}
+		v10.ThreeBytes = v14
+		v2.SetS2(v10)
+		v1.Table = v2
+
+		encodeSuccessCase{
+			name: "Table_UnionWithVector_StructSandwich_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x01, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x00, 0x00, 0x00,
+				0x04, 0x05, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.XUnionWithStructStruct{}
+		v2 := conformance.XUnionWithStruct{}
+		v3 := conformance.StructSize3Align1{}
+		var v4 uint8 = 1
+		var v5 uint8 = 2
+		var v6 uint8 = 3
+		v7 := [3]uint8{v4, v5, v6}
+		v3.ThreeBytes = v7
+		v2.SetS(v3)
+		v1.Xu = v2
+
+		encodeSuccessCase{
+			name: "XUnionWithStruct",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x14, 0x5c, 0x3e, 0x19, 0x00, 0x00, 0x00, 0x00,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x01, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.XUnionWithStructStruct{}
+		v2 := conformance.XUnionWithStruct{}
+		v3 := conformance.StructSize3Align1{}
+		var v4 uint8 = 1
+		var v5 uint8 = 2
+		var v6 uint8 = 3
+		v7 := [3]uint8{v4, v5, v6}
+		v3.ThreeBytes = v7
+		v2.SetS(v3)
+		v1.Xu = v2
+
+		encodeSuccessCase{
+			name: "XUnionWithStruct_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x14, 0x5c, 0x3e, 0x19, 0x00, 0x00, 0x00, 0x00,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x01, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.ArrayStruct{}
+		v2 := conformance.StringUnion{}
+		v3 := "one"
+		v2.SetS(v3)
+		v4 := conformance.StringUnion{}
+		v5 := "two"
+		v4.SetS(v5)
+		v6 := conformance.StringUnion{}
+		v7 := "three"
+		v6.SetS(v7)
+		v8 := [3]conformance.StringUnion{v2, v4, v6}
+		v1.Unions = v8
+		v9 := &conformance.StringUnion{}
+		v10 := "four"
+		v9.SetS(v10)
+		v11 := &conformance.StringUnion{}
+		v12 := "five"
+		v11.SetS(v12)
+		v13 := &conformance.StringUnion{}
+		v14 := "six"
+		v13.SetS(v14)
+		v15 := [3]*conformance.StringUnion{v9, v11, v13}
+		v1.OptionalUnions = v15
+
+		encodeSuccessCase{
+			name: "ArrayStruct",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x6f, 0x6e, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x74, 0x77, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x74, 0x68, 0x72, 0x65, 0x65, 0x00, 0x00, 0x00,
+				0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x66, 0x6f, 0x75, 0x72, 0x00, 0x00, 0x00, 0x00,
+				0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x66, 0x69, 0x76, 0x65, 0x00, 0x00, 0x00, 0x00,
+				0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x73, 0x69, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.ArrayStruct{}
+		v2 := conformance.StringUnion{}
+		v3 := "one"
+		v2.SetS(v3)
+		v4 := conformance.StringUnion{}
+		v5 := "two"
+		v4.SetS(v5)
+		v6 := conformance.StringUnion{}
+		v7 := "three"
+		v6.SetS(v7)
+		v8 := [3]conformance.StringUnion{v2, v4, v6}
+		v1.Unions = v8
+		v9 := &conformance.StringUnion{}
+		v10 := "four"
+		v9.SetS(v10)
+		v11 := &conformance.StringUnion{}
+		v12 := "five"
+		v11.SetS(v12)
+		v13 := &conformance.StringUnion{}
+		v14 := "six"
+		v13.SetS(v14)
+		v15 := [3]*conformance.StringUnion{v9, v11, v13}
+		v1.OptionalUnions = v15
+
+		encodeSuccessCase{
+			name: "ArrayStruct_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x6f, 0x6e, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x74, 0x77, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x74, 0x68, 0x72, 0x65, 0x65, 0x00, 0x00, 0x00,
+				0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x66, 0x6f, 0x75, 0x72, 0x00, 0x00, 0x00, 0x00,
+				0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x66, 0x69, 0x76, 0x65, 0x00, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x73, 0x69, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Regression1{}
+		var v2 uint8 = 1
+		v1.F1 = v2
+		var v3 uint32 = 2
+		v1.F2 = v3
+		var v4 uint8 = 3
+		v1.F3 = v4
+		var v5 uint16 = 4
+		v1.F4 = v5
+		var v6 uint64 = 5
+		v1.F5 = v6
+		var v7 uint8 = 6
+		v1.F6 = v7
+
+		encodeSuccessCase{
+			name: "Regression1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Regression1{}
+		var v2 uint8 = 1
+		v1.F1 = v2
+		var v3 uint32 = 2
+		v1.F2 = v3
+		var v4 uint8 = 3
+		v1.F3 = v4
+		var v5 uint16 = 4
+		v1.F4 = v5
+		var v6 uint64 = 5
+		v1.F5 = v6
+		var v7 uint8 = 6
+		v1.F6 = v7
+
+		encodeSuccessCase{
+			name: "Regression1_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Regression2{}
+		v2 := conformance.Regression1{}
+		var v3 uint8 = 1
+		v2.F1 = v3
+		var v4 uint32 = 2
+		v2.F2 = v4
+		var v5 uint8 = 3
+		v2.F3 = v5
+		var v6 uint16 = 4
+		v2.F4 = v6
+		var v7 uint64 = 5
+		v2.F5 = v7
+		var v8 uint8 = 6
+		v2.F6 = v8
+		v1.Head = v2
+		var v9 uint8 = 7
+		v1.F7 = v9
+
+		encodeSuccessCase{
+			name: "Regression2",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Regression2{}
+		v2 := conformance.Regression1{}
+		var v3 uint8 = 1
+		v2.F1 = v3
+		var v4 uint32 = 2
+		v2.F2 = v4
+		var v5 uint8 = 3
+		v2.F3 = v5
+		var v6 uint16 = 4
+		v2.F4 = v6
+		var v7 uint64 = 5
+		v2.F5 = v7
+		var v8 uint8 = 6
+		v2.F6 = v8
+		v1.Head = v2
+		var v9 uint8 = 7
+		v1.F7 = v9
+
+		encodeSuccessCase{
+			name: "Regression2_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Regression3{}
+
+		encodeSuccessCase{
+			name: "Regression3Absent",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Regression3{}
+
+		encodeSuccessCase{
+			name: "Regression3Absent_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Regression3{}
+		v2 := &conformance.Regression2{}
+		v3 := conformance.Regression1{}
+		var v4 uint8 = 1
+		v3.F1 = v4
+		var v5 uint32 = 2
+		v3.F2 = v5
+		var v6 uint8 = 3
+		v3.F3 = v6
+		var v7 uint16 = 4
+		v3.F4 = v7
+		var v8 uint64 = 5
+		v3.F5 = v8
+		var v9 uint8 = 6
+		v3.F6 = v9
+		v2.Head = v3
+		var v10 uint8 = 7
+		v2.F7 = v10
+		v1.OptValue = v2
+
+		encodeSuccessCase{
+			name: "Regression3Present",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Regression3{}
+		v2 := &conformance.Regression2{}
+		v3 := conformance.Regression1{}
+		var v4 uint8 = 1
+		v3.F1 = v4
+		var v5 uint32 = 2
+		v3.F2 = v5
+		var v6 uint8 = 3
+		v3.F3 = v6
+		var v7 uint16 = 4
+		v3.F4 = v7
+		var v8 uint64 = 5
+		v3.F5 = v8
+		var v9 uint8 = 6
+		v3.F6 = v9
+		v2.Head = v3
+		var v10 uint8 = 7
+		v2.F7 = v10
+		v1.OptValue = v2
+
+		encodeSuccessCase{
+			name: "Regression3Present_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
 		v1 := conformance.UnionWithBoundStringStruct{}
 		v2 := conformance.UnionWithBoundString{}
 		v3 := "abcd"
@@ -3510,6 +5421,1917 @@
 	}
 
 	{
+		v1 := conformance.Sandwich1{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionSize8Align4{}
+		var v4 uint32 = 202050057
+		v3.SetVariant(v4)
+		v1.TheUnion = v3
+		var v5 uint32 = 134678021
+		v1.After = v5
+
+		decodeSuccessCase{
+			name: "Sandwich1Case1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x02, 0x00, 0x00, 0x00,
+				0x09, 0x0a, 0x0b, 0x0c, 0x05, 0x06, 0x07, 0x08,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich1{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionSize8Align4{}
+		var v4 uint32 = 202050057
+		v3.SetVariant(v4)
+		v1.TheUnion = v3
+		var v5 uint32 = 134678021
+		v1.After = v5
+
+		decodeSuccessCase{
+			name: "Sandwich1Case1_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+				0x09, 0x0a, 0x0b, 0x0c, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich2{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionSize12Align4{}
+		var v4 uint8 = 160
+		var v5 uint8 = 161
+		var v6 uint8 = 162
+		var v7 uint8 = 163
+		var v8 uint8 = 164
+		var v9 uint8 = 165
+		v10 := [6]uint8{v4, v5, v6, v7, v8, v9}
+		v3.SetVariant(v10)
+		v1.TheUnion = v3
+		var v11 uint32 = 134678021
+		v1.After = v11
+
+		decodeSuccessCase{
+			name: "Sandwich2Case1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x03, 0x00, 0x00, 0x00,
+				0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0x00, 0x00,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich2{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionSize12Align4{}
+		var v4 uint8 = 160
+		var v5 uint8 = 161
+		var v6 uint8 = 162
+		var v7 uint8 = 163
+		var v8 uint8 = 164
+		var v9 uint8 = 165
+		v10 := [6]uint8{v4, v5, v6, v7, v8, v9}
+		v3.SetVariant(v10)
+		v1.TheUnion = v3
+		var v11 uint32 = 134678021
+		v1.After = v11
+
+		decodeSuccessCase{
+			name: "Sandwich2Case1_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+				0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich3{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionSize24Align8{}
+		v4 := conformance.StructSize16Align8{}
+		var v5 uint64 = 12080525177006498208
+		v4.F1 = v5
+		var v6 uint64 = 12659246559711111592
+		v4.F2 = v6
+		v3.SetVariant(v4)
+		v1.TheUnion = v3
+		var v7 uint32 = 134678021
+		v1.After = v7
+
+		decodeSuccessCase{
+			name: "Sandwich3Case1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
+				0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich3{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionSize24Align8{}
+		v4 := conformance.StructSize16Align8{}
+		var v5 uint64 = 12080525177006498208
+		v4.F1 = v5
+		var v6 uint64 = 12659246559711111592
+		v4.F2 = v6
+		v3.SetVariant(v4)
+		v1.TheUnion = v3
+		var v7 uint32 = 134678021
+		v1.After = v7
+
+		decodeSuccessCase{
+			name: "Sandwich3Case1_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+				0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
+				0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich4{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionSize36Align4{}
+		var v4 uint8 = 160
+		var v5 uint8 = 161
+		var v6 uint8 = 162
+		var v7 uint8 = 163
+		var v8 uint8 = 164
+		var v9 uint8 = 165
+		var v10 uint8 = 166
+		var v11 uint8 = 167
+		var v12 uint8 = 168
+		var v13 uint8 = 169
+		var v14 uint8 = 170
+		var v15 uint8 = 171
+		var v16 uint8 = 172
+		var v17 uint8 = 173
+		var v18 uint8 = 174
+		var v19 uint8 = 175
+		var v20 uint8 = 176
+		var v21 uint8 = 177
+		var v22 uint8 = 178
+		var v23 uint8 = 179
+		var v24 uint8 = 180
+		var v25 uint8 = 181
+		var v26 uint8 = 182
+		var v27 uint8 = 183
+		var v28 uint8 = 184
+		var v29 uint8 = 185
+		var v30 uint8 = 186
+		var v31 uint8 = 187
+		var v32 uint8 = 188
+		var v33 uint8 = 189
+		var v34 uint8 = 190
+		var v35 uint8 = 191
+		v36 := [32]uint8{v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35}
+		v3.SetVariant(v36)
+		v1.TheUnion = v3
+		var v37 uint32 = 134678021
+		v1.After = v37
+
+		decodeSuccessCase{
+			name: "Sandwich4Case1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x03, 0x00, 0x00, 0x00,
+				0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
+				0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+				0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
+				0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich4{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionSize36Align4{}
+		var v4 uint8 = 160
+		var v5 uint8 = 161
+		var v6 uint8 = 162
+		var v7 uint8 = 163
+		var v8 uint8 = 164
+		var v9 uint8 = 165
+		var v10 uint8 = 166
+		var v11 uint8 = 167
+		var v12 uint8 = 168
+		var v13 uint8 = 169
+		var v14 uint8 = 170
+		var v15 uint8 = 171
+		var v16 uint8 = 172
+		var v17 uint8 = 173
+		var v18 uint8 = 174
+		var v19 uint8 = 175
+		var v20 uint8 = 176
+		var v21 uint8 = 177
+		var v22 uint8 = 178
+		var v23 uint8 = 179
+		var v24 uint8 = 180
+		var v25 uint8 = 181
+		var v26 uint8 = 182
+		var v27 uint8 = 183
+		var v28 uint8 = 184
+		var v29 uint8 = 185
+		var v30 uint8 = 186
+		var v31 uint8 = 187
+		var v32 uint8 = 188
+		var v33 uint8 = 189
+		var v34 uint8 = 190
+		var v35 uint8 = 191
+		v36 := [32]uint8{v4, v5, v6, v7, v8, v9, v10, v11, v12, v13, v14, v15, v16, v17, v18, v19, v20, v21, v22, v23, v24, v25, v26, v27, v28, v29, v30, v31, v32, v33, v34, v35}
+		v3.SetVariant(v36)
+		v1.TheUnion = v3
+		var v37 uint32 = 134678021
+		v1.After = v37
+
+		decodeSuccessCase{
+			name: "Sandwich4Case1_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+				0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
+				0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+				0xb0, 0xb1, 0xb2, 0xb3, 0xb4, 0xb5, 0xb6, 0xb7,
+				0xb8, 0xb9, 0xba, 0xbb, 0xbc, 0xbd, 0xbe, 0xbf,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich5{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionOfUnion{}
+		v4 := conformance.UnionSize8Align4{}
+		var v5 uint32 = 202050057
+		v4.SetVariant(v5)
+		v3.SetSize8align4(v4)
+		v1.UnionOfUnion = v3
+		var v6 uint32 = 134678021
+		v1.After = v6
+
+		decodeSuccessCase{
+			name: "Sandwich5Case1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x02, 0x00, 0x00, 0x00, 0x09, 0x0a, 0x0b, 0x0c,
+				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich5{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionOfUnion{}
+		v4 := conformance.UnionSize8Align4{}
+		var v5 uint32 = 202050057
+		v4.SetVariant(v5)
+		v3.SetSize8align4(v4)
+		v1.UnionOfUnion = v3
+		var v6 uint32 = 134678021
+		v1.After = v6
+
+		decodeSuccessCase{
+			name: "Sandwich5Case1_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x09, 0x0a, 0x0b, 0x0c, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich5{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionOfUnion{}
+		v4 := conformance.UnionSize24Align8{}
+		v5 := conformance.StructSize16Align8{}
+		var v6 uint64 = 12080525177006498208
+		v5.F1 = v6
+		var v7 uint64 = 12659246559711111592
+		v5.F2 = v7
+		v4.SetVariant(v5)
+		v3.SetSize24align8(v4)
+		v1.UnionOfUnion = v3
+		var v8 uint32 = 134678021
+		v1.After = v8
+
+		decodeSuccessCase{
+			name: "Sandwich5Case2",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
+				0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich5{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionOfUnion{}
+		v4 := conformance.UnionSize24Align8{}
+		v5 := conformance.StructSize16Align8{}
+		var v6 uint64 = 12080525177006498208
+		v5.F1 = v6
+		var v7 uint64 = 12659246559711111592
+		v5.F2 = v7
+		v4.SetVariant(v5)
+		v3.SetSize24align8(v4)
+		v1.UnionOfUnion = v3
+		var v8 uint32 = 134678021
+		v1.After = v8
+
+		decodeSuccessCase{
+			name: "Sandwich5Case2_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+				0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0xa7,
+				0xa8, 0xa9, 0xaa, 0xab, 0xac, 0xad, 0xae, 0xaf,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich6{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionWithVector{}
+		var v4 uint8 = 160
+		var v5 uint8 = 161
+		var v6 uint8 = 162
+		var v7 uint8 = 163
+		var v8 uint8 = 164
+		var v9 uint8 = 165
+		v10 := []uint8{v4, v5, v6, v7, v8, v9}
+		v3.SetVectorOfUint8(v10)
+		v1.TheUnion = v3
+		var v11 uint32 = 134678021
+		v1.After = v11
+
+		decodeSuccessCase{
+			name: "Sandwich6Case1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+				0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich6{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionWithVector{}
+		var v4 uint8 = 160
+		var v5 uint8 = 161
+		var v6 uint8 = 162
+		var v7 uint8 = 163
+		var v8 uint8 = 164
+		var v9 uint8 = 165
+		v10 := []uint8{v4, v5, v6, v7, v8, v9}
+		v3.SetVectorOfUint8(v10)
+		v1.TheUnion = v3
+		var v11 uint32 = 134678021
+		v1.After = v11
+
+		decodeSuccessCase{
+			name: "Sandwich6Case1_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+				0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0xa0, 0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich6{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionWithVector{}
+		v4 := []uint8{}
+		v3.SetVectorOfUint8(v4)
+		v1.TheUnion = v3
+		var v5 uint32 = 134678021
+		v1.After = v5
+
+		decodeSuccessCase{
+			name: "Sandwich6Case1AbsentVector",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich6{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionWithVector{}
+		v4 := []uint8{}
+		v3.SetVectorOfUint8(v4)
+		v1.TheUnion = v3
+		var v5 uint32 = 134678021
+		v1.After = v5
+
+		decodeSuccessCase{
+			name: "Sandwich6Case1AbsentVector_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x10, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich6{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionWithVector{}
+		v4 := "soft migrations rock!"
+		v3.SetString(v4)
+		v1.TheUnion = v3
+		var v5 uint32 = 134678021
+		v1.After = v5
+
+		decodeSuccessCase{
+			name: "Sandwich6Case2",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+				0x73, 0x6f, 0x66, 0x74, 0x20, 0x6d, 0x69, 0x67,
+				0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20,
+				0x72, 0x6f, 0x63, 0x6b, 0x21, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich6{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionWithVector{}
+		v4 := "soft migrations rock!"
+		v3.SetString(v4)
+		v1.TheUnion = v3
+		var v5 uint32 = 134678021
+		v1.After = v5
+
+		decodeSuccessCase{
+			name: "Sandwich6Case2_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x28, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+				0x15, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x73, 0x6f, 0x66, 0x74, 0x20, 0x6d, 0x69, 0x67,
+				0x72, 0x61, 0x74, 0x69, 0x6f, 0x6e, 0x73, 0x20,
+				0x72, 0x6f, 0x63, 0x6b, 0x21, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich6{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionWithVector{}
+		v4 := conformance.StructSize3Align1{}
+		var v5 uint8 = 115
+		var v6 uint8 = 111
+		var v7 uint8 = 102
+		v8 := [3]uint8{v5, v6, v7}
+		v4.ThreeBytes = v8
+		v9 := conformance.StructSize3Align1{}
+		var v10 uint8 = 32
+		var v11 uint8 = 109
+		var v12 uint8 = 105
+		v13 := [3]uint8{v10, v11, v12}
+		v9.ThreeBytes = v13
+		v14 := conformance.StructSize3Align1{}
+		var v15 uint8 = 114
+		var v16 uint8 = 97
+		var v17 uint8 = 116
+		v18 := [3]uint8{v15, v16, v17}
+		v14.ThreeBytes = v18
+		v19 := []conformance.StructSize3Align1{v4, v9, v14}
+		v3.SetVectorS3A1(v19)
+		v1.TheUnion = v3
+		var v20 uint32 = 134678021
+		v1.After = v20
+
+		decodeSuccessCase{
+			name: "Sandwich6Case3",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+				0x73, 0x6f, 0x66, 0x20, 0x6d, 0x69, 0x72, 0x61,
+				0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich6{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionWithVector{}
+		v4 := conformance.StructSize3Align1{}
+		var v5 uint8 = 115
+		var v6 uint8 = 111
+		var v7 uint8 = 102
+		v8 := [3]uint8{v5, v6, v7}
+		v4.ThreeBytes = v8
+		v9 := conformance.StructSize3Align1{}
+		var v10 uint8 = 32
+		var v11 uint8 = 109
+		var v12 uint8 = 105
+		v13 := [3]uint8{v10, v11, v12}
+		v9.ThreeBytes = v13
+		v14 := conformance.StructSize3Align1{}
+		var v15 uint8 = 114
+		var v16 uint8 = 97
+		var v17 uint8 = 116
+		v18 := [3]uint8{v15, v16, v17}
+		v14.ThreeBytes = v18
+		v19 := []conformance.StructSize3Align1{v4, v9, v14}
+		v3.SetVectorS3A1(v19)
+		v1.TheUnion = v3
+		var v20 uint32 = 134678021
+		v1.After = v20
+
+		decodeSuccessCase{
+			name: "Sandwich6Case3_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x73, 0x6f, 0x66, 0x20, 0x6d, 0x69, 0x72, 0x61,
+				0x74, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich6{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionWithVector{}
+		v4 := conformance.StructSize3Align2{}
+		var v5 uint16 = 28531
+		v4.F1 = v5
+		var v6 uint8 = 102
+		v4.F2 = v6
+		v7 := conformance.StructSize3Align2{}
+		var v8 uint16 = 27936
+		v7.F1 = v8
+		var v9 uint8 = 105
+		v7.F2 = v9
+		v10 := conformance.StructSize3Align2{}
+		var v11 uint16 = 24946
+		v10.F1 = v11
+		var v12 uint8 = 116
+		v10.F2 = v12
+		v13 := []conformance.StructSize3Align2{v4, v7, v10}
+		v3.SetVectorS3A2(v13)
+		v1.TheUnion = v3
+		var v14 uint32 = 134678021
+		v1.After = v14
+
+		decodeSuccessCase{
+			name: "Sandwich6Case4",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+				0x73, 0x6f, 0x66, 0x00, 0x20, 0x6d, 0x69, 0x00,
+				0x72, 0x61, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich6{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionWithVector{}
+		v4 := conformance.StructSize3Align2{}
+		var v5 uint16 = 28531
+		v4.F1 = v5
+		var v6 uint8 = 102
+		v4.F2 = v6
+		v7 := conformance.StructSize3Align2{}
+		var v8 uint16 = 27936
+		v7.F1 = v8
+		var v9 uint8 = 105
+		v7.F2 = v9
+		v10 := conformance.StructSize3Align2{}
+		var v11 uint16 = 24946
+		v10.F1 = v11
+		var v12 uint8 = 116
+		v10.F2 = v12
+		v13 := []conformance.StructSize3Align2{v4, v7, v10}
+		v3.SetVectorS3A2(v13)
+		v1.TheUnion = v3
+		var v14 uint32 = 134678021
+		v1.After = v14
+
+		decodeSuccessCase{
+			name: "Sandwich6Case4_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x73, 0x6f, 0x66, 0x00, 0x20, 0x6d, 0x69, 0x00,
+				0x72, 0x61, 0x74, 0x00, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich6{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionWithVector{}
+		var v4 uint32 = 4294967295
+		var v5 uint32 = 4294967295
+		var v6 uint32 = 4294967295
+		v7 := []uint32{v4, v5, v6}
+		v3.SetHandles(v7)
+		v1.TheUnion = v3
+		var v8 uint32 = 134678021
+		v1.After = v8
+
+		decodeSuccessCase{
+			name: "Sandwich6Case5",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich6{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionWithVector{}
+		var v4 uint32 = 4294967295
+		var v5 uint32 = 4294967295
+		var v6 uint32 = 4294967295
+		v7 := []uint32{v4, v5, v6}
+		v3.SetHandles(v7)
+		v1.TheUnion = v3
+		var v8 uint32 = 134678021
+		v1.After = v8
+
+		decodeSuccessCase{
+			name: "Sandwich6Case5_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0xff, 0xff, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich6{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionWithVector{}
+		v4 := conformance.StructSize3Align1{}
+		var v5 uint8 = 161
+		var v6 uint8 = 162
+		var v7 uint8 = 163
+		v8 := [3]uint8{v5, v6, v7}
+		v4.ThreeBytes = v8
+		v9 := conformance.StructSize3Align1{}
+		var v10 uint8 = 164
+		var v11 uint8 = 165
+		var v12 uint8 = 166
+		v13 := [3]uint8{v10, v11, v12}
+		v9.ThreeBytes = v13
+		v14 := [2]conformance.StructSize3Align1{v4, v9}
+		v3.SetArrayS3A1(v14)
+		v1.TheUnion = v3
+		var v15 uint32 = 134678021
+		v1.After = v15
+
+		decodeSuccessCase{
+			name: "Sandwich6Case6",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0x00, 0x00,
+				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich6{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionWithVector{}
+		v4 := conformance.StructSize3Align1{}
+		var v5 uint8 = 161
+		var v6 uint8 = 162
+		var v7 uint8 = 163
+		v8 := [3]uint8{v5, v6, v7}
+		v4.ThreeBytes = v8
+		v9 := conformance.StructSize3Align1{}
+		var v10 uint8 = 164
+		var v11 uint8 = 165
+		var v12 uint8 = 166
+		v13 := [3]uint8{v10, v11, v12}
+		v9.ThreeBytes = v13
+		v14 := [2]conformance.StructSize3Align1{v4, v9}
+		v3.SetArrayS3A1(v14)
+		v1.TheUnion = v3
+		var v15 uint32 = 134678021
+		v1.After = v15
+
+		decodeSuccessCase{
+			name: "Sandwich6Case6_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+				0xa1, 0xa2, 0xa3, 0xa4, 0xa5, 0xa6, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich6{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionWithVector{}
+		v4 := conformance.StructSize3Align2{}
+		var v5 uint16 = 41633
+		v4.F1 = v5
+		var v6 uint8 = 163
+		v4.F2 = v6
+		v7 := conformance.StructSize3Align2{}
+		var v8 uint16 = 42404
+		v7.F1 = v8
+		var v9 uint8 = 166
+		v7.F2 = v9
+		v10 := [2]conformance.StructSize3Align2{v4, v7}
+		v3.SetArrayS3A2(v10)
+		v1.TheUnion = v3
+		var v11 uint32 = 134678021
+		v1.After = v11
+
+		decodeSuccessCase{
+			name: "Sandwich6Case7",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xa1, 0xa2, 0xa3, 0x00, 0xa4, 0xa5, 0xa6, 0x00,
+				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich6{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionWithVector{}
+		v4 := conformance.StructSize3Align2{}
+		var v5 uint16 = 41633
+		v4.F1 = v5
+		var v6 uint8 = 163
+		v4.F2 = v6
+		v7 := conformance.StructSize3Align2{}
+		var v8 uint16 = 42404
+		v7.F1 = v8
+		var v9 uint8 = 166
+		v7.F2 = v9
+		v10 := [2]conformance.StructSize3Align2{v4, v7}
+		v3.SetArrayS3A2(v10)
+		v1.TheUnion = v3
+		var v11 uint32 = 134678021
+		v1.After = v11
+
+		decodeSuccessCase{
+			name: "Sandwich6Case7_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+				0xa1, 0xa2, 0xa3, 0x00, 0xa4, 0xa5, 0xa6, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich6{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionWithVector{}
+		v4 := conformance.UnionSize8Align4{}
+		var v5 uint32 = 202050057
+		v4.SetVariant(v5)
+		v6 := []conformance.UnionSize8Align4{v4}
+		v3.SetVectorUnion(v6)
+		v1.TheUnion = v3
+		var v7 uint32 = 134678021
+		v1.After = v7
+
+		decodeSuccessCase{
+			name: "Sandwich6Case8",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+				0x02, 0x00, 0x00, 0x00, 0x09, 0x0a, 0x0b, 0x0c,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Sandwich6{}
+		var v2 uint32 = 67305985
+		v1.Before = v2
+		v3 := conformance.UnionWithVector{}
+		v4 := conformance.UnionSize8Align4{}
+		var v5 uint32 = 202050057
+		v4.SetVariant(v5)
+		v6 := []conformance.UnionSize8Align4{v4}
+		v3.SetVectorUnion(v6)
+		v1.TheUnion = v3
+		var v7 uint32 = 134678021
+		v1.After = v7
+
+		decodeSuccessCase{
+			name: "Sandwich6Case8_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x09, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x06, 0x07, 0x08, 0x00, 0x00, 0x00, 0x00,
+				0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x09, 0x0a, 0x0b, 0x0c, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.TableStructWithReservedSandwichStruct{}
+		v2 := conformance.TableStructWithReservedSandwich{}
+		v3 := conformance.StructSize3Align1{}
+		var v4 uint8 = 9
+		var v5 uint8 = 10
+		var v6 uint8 = 11
+		v7 := [3]uint8{v4, v5, v6}
+		v3.ThreeBytes = v7
+		v2.SetS1(v3)
+		v8 := conformance.StructSize3Align1{}
+		var v9 uint8 = 25
+		var v10 uint8 = 26
+		var v11 uint8 = 27
+		v12 := [3]uint8{v9, v10, v11}
+		v8.ThreeBytes = v12
+		v2.SetS2(v8)
+		v1.Table = v2
+
+		decodeSuccessCase{
+			name: "Table_StructWithReservedSandwich",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x09, 0x0a, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x19, 0x1a, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.TableStructWithReservedSandwichStruct{}
+		v2 := conformance.TableStructWithReservedSandwich{}
+		v3 := conformance.StructSize3Align1{}
+		var v4 uint8 = 9
+		var v5 uint8 = 10
+		var v6 uint8 = 11
+		v7 := [3]uint8{v4, v5, v6}
+		v3.ThreeBytes = v7
+		v2.SetS1(v3)
+		v8 := conformance.StructSize3Align1{}
+		var v9 uint8 = 25
+		var v10 uint8 = 26
+		var v11 uint8 = 27
+		v12 := [3]uint8{v9, v10, v11}
+		v8.ThreeBytes = v12
+		v2.SetS2(v8)
+		v1.Table = v2
+
+		decodeSuccessCase{
+			name: "Table_StructWithReservedSandwich_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x09, 0x0a, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x19, 0x1a, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.TableStructWithUint32SandwichStruct{}
+		v2 := conformance.TableStructWithUint32Sandwich{}
+		var v3 uint32 = 67305985
+		v2.SetI(v3)
+		v4 := conformance.StructSize3Align1{}
+		var v5 uint8 = 9
+		var v6 uint8 = 10
+		var v7 uint8 = 11
+		v8 := [3]uint8{v5, v6, v7}
+		v4.ThreeBytes = v8
+		v2.SetS1(v4)
+		v9 := conformance.StructSize3Align1{}
+		var v10 uint8 = 25
+		var v11 uint8 = 26
+		var v12 uint8 = 27
+		v13 := [3]uint8{v10, v11, v12}
+		v9.ThreeBytes = v13
+		v2.SetS2(v9)
+		var v14 uint32 = 218893066
+		v2.SetI2(v14)
+		v1.Table = v2
+
+		decodeSuccessCase{
+			name: "Table_StructWithUint32Sandwich",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x09, 0x0a, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x19, 0x1a, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x0a, 0x0b, 0x0c, 0x0d, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.TableStructWithUint32SandwichStruct{}
+		v2 := conformance.TableStructWithUint32Sandwich{}
+		var v3 uint32 = 67305985
+		v2.SetI(v3)
+		v4 := conformance.StructSize3Align1{}
+		var v5 uint8 = 9
+		var v6 uint8 = 10
+		var v7 uint8 = 11
+		v8 := [3]uint8{v5, v6, v7}
+		v4.ThreeBytes = v8
+		v2.SetS1(v4)
+		v9 := conformance.StructSize3Align1{}
+		var v10 uint8 = 25
+		var v11 uint8 = 26
+		var v12 uint8 = 27
+		v13 := [3]uint8{v10, v11, v12}
+		v9.ThreeBytes = v13
+		v2.SetS2(v9)
+		var v14 uint32 = 218893066
+		v2.SetI2(v14)
+		v1.Table = v2
+
+		decodeSuccessCase{
+			name: "Table_StructWithUint32Sandwich_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x01, 0x02, 0x03, 0x04, 0x00, 0x00, 0x00, 0x00,
+				0x09, 0x0a, 0x0b, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x19, 0x1a, 0x1b, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x0a, 0x0b, 0x0c, 0x0d, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.TableUnionWithVectorReservedSandwichStruct{}
+		v2 := conformance.TableUnionWithVectorReservedSandwich{}
+		v3 := conformance.UnionWithVector{}
+		v4 := "hello"
+		v3.SetString(v4)
+		v2.SetUv(v3)
+		v1.Table = v2
+
+		decodeSuccessCase{
+			name: "Table_UnionWithVector_ReservedSandwich",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.TableUnionWithVectorReservedSandwichStruct{}
+		v2 := conformance.TableUnionWithVectorReservedSandwich{}
+		v3 := conformance.UnionWithVector{}
+		v4 := "hello"
+		v3.SetString(v4)
+		v2.SetUv(v3)
+		v1.Table = v2
+
+		decodeSuccessCase{
+			name: "Table_UnionWithVector_ReservedSandwich_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.TableUnionWithVectorStructSandwichStruct{}
+		v2 := conformance.TableUnionWithVectorStructSandwich{}
+		v3 := conformance.StructSize3Align1{}
+		var v4 uint8 = 1
+		var v5 uint8 = 2
+		var v6 uint8 = 3
+		v7 := [3]uint8{v4, v5, v6}
+		v3.ThreeBytes = v7
+		v2.SetS1(v3)
+		v8 := conformance.UnionWithVector{}
+		v9 := "hello"
+		v8.SetString(v9)
+		v2.SetUv(v8)
+		v10 := conformance.StructSize3Align1{}
+		var v11 uint8 = 4
+		var v12 uint8 = 5
+		var v13 uint8 = 6
+		v14 := [3]uint8{v11, v12, v13}
+		v10.ThreeBytes = v14
+		v2.SetS2(v10)
+		v1.Table = v2
+
+		decodeSuccessCase{
+			name: "Table_UnionWithVector_StructSandwich",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x20, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x01, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x00, 0x00, 0x00,
+				0x04, 0x05, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.TableUnionWithVectorStructSandwichStruct{}
+		v2 := conformance.TableUnionWithVectorStructSandwich{}
+		v3 := conformance.StructSize3Align1{}
+		var v4 uint8 = 1
+		var v5 uint8 = 2
+		var v6 uint8 = 3
+		v7 := [3]uint8{v4, v5, v6}
+		v3.ThreeBytes = v7
+		v2.SetS1(v3)
+		v8 := conformance.UnionWithVector{}
+		v9 := "hello"
+		v8.SetString(v9)
+		v2.SetUv(v8)
+		v10 := conformance.StructSize3Align1{}
+		var v11 uint8 = 4
+		var v12 uint8 = 5
+		var v13 uint8 = 6
+		v14 := [3]uint8{v11, v12, v13}
+		v10.ThreeBytes = v14
+		v2.SetS2(v10)
+		v1.Table = v2
+
+		decodeSuccessCase{
+			name: "Table_UnionWithVector_StructSandwich_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x30, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x01, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x68, 0x65, 0x6c, 0x6c, 0x6f, 0x00, 0x00, 0x00,
+				0x04, 0x05, 0x06, 0x00, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.XUnionWithStructStruct{}
+		v2 := conformance.XUnionWithStruct{}
+		v3 := conformance.StructSize3Align1{}
+		var v4 uint8 = 1
+		var v5 uint8 = 2
+		var v6 uint8 = 3
+		v7 := [3]uint8{v4, v5, v6}
+		v3.ThreeBytes = v7
+		v2.SetS(v3)
+		v1.Xu = v2
+
+		decodeSuccessCase{
+			name: "XUnionWithStruct",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x14, 0x5c, 0x3e, 0x19, 0x00, 0x00, 0x00, 0x00,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x01, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.XUnionWithStructStruct{}
+		v2 := conformance.XUnionWithStruct{}
+		v3 := conformance.StructSize3Align1{}
+		var v4 uint8 = 1
+		var v5 uint8 = 2
+		var v6 uint8 = 3
+		v7 := [3]uint8{v4, v5, v6}
+		v3.ThreeBytes = v7
+		v2.SetS(v3)
+		v1.Xu = v2
+
+		decodeSuccessCase{
+			name: "XUnionWithStruct_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x14, 0x5c, 0x3e, 0x19, 0x00, 0x00, 0x00, 0x00,
+				0x08, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x01, 0x02, 0x03, 0x00, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.ArrayStruct{}
+		v2 := conformance.StringUnion{}
+		v3 := "one"
+		v2.SetS(v3)
+		v4 := conformance.StringUnion{}
+		v5 := "two"
+		v4.SetS(v5)
+		v6 := conformance.StringUnion{}
+		v7 := "three"
+		v6.SetS(v7)
+		v8 := [3]conformance.StringUnion{v2, v4, v6}
+		v1.Unions = v8
+		v9 := &conformance.StringUnion{}
+		v10 := "four"
+		v9.SetS(v10)
+		v11 := &conformance.StringUnion{}
+		v12 := "five"
+		v11.SetS(v12)
+		v13 := &conformance.StringUnion{}
+		v14 := "six"
+		v13.SetS(v14)
+		v15 := [3]*conformance.StringUnion{v9, v11, v13}
+		v1.OptionalUnions = v15
+
+		decodeSuccessCase{
+			name: "ArrayStruct",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x6f, 0x6e, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x74, 0x77, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x74, 0x68, 0x72, 0x65, 0x65, 0x00, 0x00, 0x00,
+				0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x66, 0x6f, 0x75, 0x72, 0x00, 0x00, 0x00, 0x00,
+				0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x66, 0x69, 0x76, 0x65, 0x00, 0x00, 0x00, 0x00,
+				0x01, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x73, 0x69, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.ArrayStruct{}
+		v2 := conformance.StringUnion{}
+		v3 := "one"
+		v2.SetS(v3)
+		v4 := conformance.StringUnion{}
+		v5 := "two"
+		v4.SetS(v5)
+		v6 := conformance.StringUnion{}
+		v7 := "three"
+		v6.SetS(v7)
+		v8 := [3]conformance.StringUnion{v2, v4, v6}
+		v1.Unions = v8
+		v9 := &conformance.StringUnion{}
+		v10 := "four"
+		v9.SetS(v10)
+		v11 := &conformance.StringUnion{}
+		v12 := "five"
+		v11.SetS(v12)
+		v13 := &conformance.StringUnion{}
+		v14 := "six"
+		v13.SetS(v14)
+		v15 := [3]*conformance.StringUnion{v9, v11, v13}
+		v1.OptionalUnions = v15
+
+		decodeSuccessCase{
+			name: "ArrayStruct_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x02, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x18, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x6f, 0x6e, 0x65, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x74, 0x77, 0x6f, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x74, 0x68, 0x72, 0x65, 0x65, 0x00, 0x00, 0x00,
+				0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x66, 0x6f, 0x75, 0x72, 0x00, 0x00, 0x00, 0x00,
+				0x04, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x66, 0x69, 0x76, 0x65, 0x00, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x73, 0x69, 0x78, 0x00, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Regression1{}
+		var v2 uint8 = 1
+		v1.F1 = v2
+		var v3 uint32 = 2
+		v1.F2 = v3
+		var v4 uint8 = 3
+		v1.F3 = v4
+		var v5 uint16 = 4
+		v1.F4 = v5
+		var v6 uint64 = 5
+		v1.F5 = v6
+		var v7 uint8 = 6
+		v1.F6 = v7
+
+		decodeSuccessCase{
+			name: "Regression1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Regression1{}
+		var v2 uint8 = 1
+		v1.F1 = v2
+		var v3 uint32 = 2
+		v1.F2 = v3
+		var v4 uint8 = 3
+		v1.F3 = v4
+		var v5 uint16 = 4
+		v1.F4 = v5
+		var v6 uint64 = 5
+		v1.F5 = v6
+		var v7 uint8 = 6
+		v1.F6 = v7
+
+		decodeSuccessCase{
+			name: "Regression1_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Regression2{}
+		v2 := conformance.Regression1{}
+		var v3 uint8 = 1
+		v2.F1 = v3
+		var v4 uint32 = 2
+		v2.F2 = v4
+		var v5 uint8 = 3
+		v2.F3 = v5
+		var v6 uint16 = 4
+		v2.F4 = v6
+		var v7 uint64 = 5
+		v2.F5 = v7
+		var v8 uint8 = 6
+		v2.F6 = v8
+		v1.Head = v2
+		var v9 uint8 = 7
+		v1.F7 = v9
+
+		decodeSuccessCase{
+			name: "Regression2",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Regression2{}
+		v2 := conformance.Regression1{}
+		var v3 uint8 = 1
+		v2.F1 = v3
+		var v4 uint32 = 2
+		v2.F2 = v4
+		var v5 uint8 = 3
+		v2.F3 = v5
+		var v6 uint16 = 4
+		v2.F4 = v6
+		var v7 uint64 = 5
+		v2.F5 = v7
+		var v8 uint8 = 6
+		v2.F6 = v8
+		v1.Head = v2
+		var v9 uint8 = 7
+		v1.F7 = v9
+
+		decodeSuccessCase{
+			name: "Regression2_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Regression3{}
+
+		decodeSuccessCase{
+			name: "Regression3Absent",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Regression3{}
+
+		decodeSuccessCase{
+			name: "Regression3Absent_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Regression3{}
+		v2 := &conformance.Regression2{}
+		v3 := conformance.Regression1{}
+		var v4 uint8 = 1
+		v3.F1 = v4
+		var v5 uint32 = 2
+		v3.F2 = v5
+		var v6 uint8 = 3
+		v3.F3 = v6
+		var v7 uint16 = 4
+		v3.F4 = v7
+		var v8 uint64 = 5
+		v3.F5 = v8
+		var v9 uint8 = 6
+		v3.F6 = v9
+		v2.Head = v3
+		var v10 uint8 = 7
+		v2.F7 = v10
+		v1.OptValue = v2
+
+		decodeSuccessCase{
+			name: "Regression3Present",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: false,
+				EncodeUnionsAsXUnionBytes:   false,
+			},
+			input: &v1,
+			bytes: []byte{
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
+		v1 := conformance.Regression3{}
+		v2 := &conformance.Regression2{}
+		v3 := conformance.Regression1{}
+		var v4 uint8 = 1
+		v3.F1 = v4
+		var v5 uint32 = 2
+		v3.F2 = v5
+		var v6 uint8 = 3
+		v3.F3 = v6
+		var v7 uint16 = 4
+		v3.F4 = v7
+		var v8 uint64 = 5
+		v3.F5 = v8
+		var v9 uint8 = 6
+		v3.F6 = v9
+		v2.Head = v3
+		var v10 uint8 = 7
+		v2.F7 = v10
+		v1.OptValue = v2
+
+		decodeSuccessCase{
+			name: "Regression3Present_v1",
+			context: fidl.MarshalerContext{
+				DecodeUnionsFromXUnionBytes: true,
+				EncodeUnionsAsXUnionBytes:   true,
+			},
+			input: &v1,
+			bytes: []byte{
+				0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff, 0xff,
+				0x01, 0x00, 0x00, 0x00, 0x02, 0x00, 0x00, 0x00,
+				0x03, 0x00, 0x04, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x05, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x06, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+				0x07, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00,
+			},
+		}.check(t)
+	}
+
+	{
 		v1 := conformance.UnionWithBoundStringStruct{}
 		v2 := conformance.UnionWithBoundString{}
 		v3 := "abcd"
