mirror of https://github.com/golang/go.git
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
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -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…
Reference in New Issue