1// Copyright 2024 The Go Authors. All rights reserved. 2// Use of this source code is governed by a BSD-style 3// license that can be found in the LICENSE file. 4 5package structs 6 7// HostLayout marks a struct as using host memory layout. A struct with a 8// field of type HostLayout will be laid out in memory according to host 9// expectations, generally following the host's C ABI. 10// 11// HostLayout does not affect layout within any other struct-typed fields 12// of the containing struct, nor does it affect layout of structs 13// containing the struct marked as host layout. 14// 15// By convention, HostLayout should be used as the type of a field 16// named "_", placed at the beginning of the struct type definition. 17type HostLayout struct { 18 _ hostLayout // prevent accidental conversion with plain struct{} 19} 20 21// We use an unexported type within the exported type to give the marker 22// type itself, rather than merely its name, a recognizable identity in 23// the type system. The main consequence of this is that a user can give 24// the type a new name and it will still have the same properties, e.g., 25// 26// type HL structs.HostLayout 27// 28// It also prevents unintentional conversion of struct{} to a named marker type. 29type hostLayout struct { 30} 31