mirror of
https://github.com/golang/go.git
synced 2025-12-08 06:10:04 +00:00
cmd/compile/internal/gc: assert size of important types
Add tests to ensure that the size of important types don't change unexpectedly. Skip the test on nacl platforms because of their unusual padding requirements. Change-Id: Iddb127a99499e089a309b721f5073356c0da8b24 Reviewed-on: https://go-review.googlesource.com/20285 Reviewed-by: Brad Fitzpatrick <bradfitz@golang.org> Run-TryBot: Dave Cheney <dave@cheney.net> Reviewed-by: Josh Bleecher Snyder <josharian@gmail.com> TryBot-Result: Gobot Gobot <gobot@golang.org>
This commit is contained in:
parent
bd6d84282a
commit
8f5fb95db6
2 changed files with 83 additions and 0 deletions
43
src/cmd/compile/internal/gc/sizeof_test.go
Normal file
43
src/cmd/compile/internal/gc/sizeof_test.go
Normal file
|
|
@ -0,0 +1,43 @@
|
|||
// 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
|
||||
}{
|
||||
{Flow{}, 52, 88},
|
||||
{Func{}, 104, 184},
|
||||
{Name{}, 52, 80},
|
||||
{Node{}, 92, 144},
|
||||
{Sym{}, 64, 112},
|
||||
{Type{}, 144, 240},
|
||||
}
|
||||
|
||||
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): want %d, got %d", tt.val, want, got)
|
||||
}
|
||||
}
|
||||
}
|
||||
40
src/cmd/internal/obj/sizeof_test.go
Normal file
40
src/cmd/internal/obj/sizeof_test.go
Normal file
|
|
@ -0,0 +1,40 @@
|
|||
// 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 obj
|
||||
|
||||
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
|
||||
}{
|
||||
{Addr{}, 52, 80},
|
||||
{LSym{}, 92, 152},
|
||||
{Prog{}, 196, 288},
|
||||
}
|
||||
|
||||
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): want %d, got %d", tt.val, want, got)
|
||||
}
|
||||
}
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue