mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
Even very large Types are not very big. The haspointer cache looks like premature optimization. Removing them has no detectable compiler performance impact, and it removes mutable shared state used by the backend. Updates #15756 Change-Id: I2d2cf03f470f5eef5bcd50ff693ef6a01d481700 Reviewed-on: https://go-review.googlesource.com/38912 Run-TryBot: Josh Bleecher Snyder <josharian@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org> Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org>
56 lines
1.2 KiB
Go
56 lines
1.2 KiB
Go
// Copyright 2016 The Go Authors. All rights reserved.
|
|
// Use of this source code is governed by a BSD-style
|
|
// license that can be found in the LICENSE file.
|
|
|
|
// +build !nacl
|
|
|
|
package gc
|
|
|
|
import (
|
|
"reflect"
|
|
"testing"
|
|
"unsafe"
|
|
)
|
|
|
|
// Assert that the size of important structures do not change unexpectedly.
|
|
|
|
func TestSizeof(t *testing.T) {
|
|
const _64bit = unsafe.Sizeof(uintptr(0)) == 8
|
|
|
|
var tests = []struct {
|
|
val interface{} // type as a value
|
|
_32bit uintptr // size on 32bit platforms
|
|
_64bit uintptr // size on 64bit platforms
|
|
}{
|
|
{Func{}, 96, 160},
|
|
{Name{}, 36, 56},
|
|
{Param{}, 28, 56},
|
|
{Node{}, 84, 136},
|
|
{Sym{}, 60, 104},
|
|
{Type{}, 52, 88},
|
|
{MapType{}, 20, 40},
|
|
{ForwardType{}, 20, 32},
|
|
{FuncType{}, 28, 48},
|
|
{StructType{}, 12, 24},
|
|
{InterType{}, 4, 8},
|
|
{ChanType{}, 8, 16},
|
|
{ArrayType{}, 12, 16},
|
|
{InterMethType{}, 4, 8},
|
|
{DDDFieldType{}, 4, 8},
|
|
{FuncArgsType{}, 4, 8},
|
|
{ChanArgsType{}, 4, 8},
|
|
{PtrType{}, 4, 8},
|
|
{SliceType{}, 4, 8},
|
|
}
|
|
|
|
for _, tt := range tests {
|
|
want := tt._32bit
|
|
if _64bit {
|
|
want = tt._64bit
|
|
}
|
|
got := reflect.TypeOf(tt.val).Size()
|
|
if want != got {
|
|
t.Errorf("unsafe.Sizeof(%T) = %d, want %d", tt.val, got, want)
|
|
}
|
|
}
|
|
}
|