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