compiler, runtime: remove hmap field from maptypes
This is the gofrontend version of https://golang.org/cl/91796. This is part of that CL, just the compiler change and required runtime changes, in preparation for updating libgo to 1.11. Relevant part of original CL description: The hmap field in the maptype is only used by the runtime to check the sizes of the hmap structure created by the compiler and runtime agree. Comments are already present about the hmap structure definitions in the compiler and runtime needing to be in sync. Reviewed-on: https://go-review.googlesource.com/130976 From-SVN: r263941
This commit is contained in:
parent
d16c446e0b
commit
347462bfee
|
@ -1,4 +1,4 @@
|
|||
8deaafd14414bb5cbbdf3e2673f61b6d836d7d2a
|
||||
da249ffd264154cc992e76ff03f91f700d3bf53e
|
||||
|
||||
The first line of this file holds the git revision number of the last
|
||||
merge done from the gofrontend repository.
|
||||
|
|
|
@ -7975,12 +7975,11 @@ Map_type::make_map_type_descriptor_type()
|
|||
Type* bool_type = Type::lookup_bool_type();
|
||||
|
||||
Struct_type* sf =
|
||||
Type::make_builtin_struct_type(12,
|
||||
Type::make_builtin_struct_type(11,
|
||||
"", tdt,
|
||||
"key", ptdt,
|
||||
"elem", ptdt,
|
||||
"bucket", ptdt,
|
||||
"hmap", ptdt,
|
||||
"keysize", uint8_type,
|
||||
"indirectkey", bool_type,
|
||||
"valuesize", uint8_type,
|
||||
|
@ -8064,11 +8063,6 @@ Map_type::do_type_descriptor(Gogo* gogo, Named_type* name)
|
|||
go_assert(p->is_field_name("bucket"));
|
||||
vals->push_back(Expression::make_type_descriptor(bucket_type, bloc));
|
||||
|
||||
++p;
|
||||
go_assert(p->is_field_name("hmap"));
|
||||
Type* hmap_type = this->hmap_type(bucket_type);
|
||||
vals->push_back(Expression::make_type_descriptor(hmap_type, bloc));
|
||||
|
||||
++p;
|
||||
go_assert(p->is_field_name("keysize"));
|
||||
if (keysize > Map_type::max_key_size)
|
||||
|
|
|
@ -351,7 +351,6 @@ type mapType struct {
|
|||
key *rtype // map key type
|
||||
elem *rtype // map element (value) type
|
||||
bucket *rtype // internal bucket structure
|
||||
hmap *rtype // internal map header
|
||||
keysize uint8 // size of key slot
|
||||
indirectkey uint8 // store ptr to key instead of key itself
|
||||
valuesize uint8 // size of value slot
|
||||
|
|
|
@ -311,20 +311,13 @@ func makemap_small() *hmap {
|
|||
// If h != nil, the map can be created directly in h.
|
||||
// If h.buckets != nil, bucket pointed to can be used as the first bucket.
|
||||
func makemap(t *maptype, hint int, h *hmap) *hmap {
|
||||
// The size of hmap should be 48 bytes on 64 bit
|
||||
// and 28 bytes on 32 bit platforms.
|
||||
if sz := unsafe.Sizeof(hmap{}); sz != 8+5*sys.PtrSize {
|
||||
println("runtime: sizeof(hmap) =", sz, ", t.hmap.size =", t.hmap.size)
|
||||
throw("bad hmap size")
|
||||
}
|
||||
|
||||
if hint < 0 || hint > int(maxSliceCap(t.bucket.size)) {
|
||||
hint = 0
|
||||
}
|
||||
|
||||
// initialize Hmap
|
||||
if h == nil {
|
||||
h = (*hmap)(newobject(t.hmap))
|
||||
h = new(hmap)
|
||||
}
|
||||
h.hash0 = fastrand()
|
||||
|
||||
|
@ -1210,11 +1203,6 @@ func ismapkey(t *_type) bool {
|
|||
|
||||
//go:linkname reflect_makemap reflect.makemap
|
||||
func reflect_makemap(t *maptype, cap int) *hmap {
|
||||
// Check invariants and reflects math.
|
||||
if sz := unsafe.Sizeof(hmap{}); sz != t.hmap.size {
|
||||
println("runtime: sizeof(hmap) =", sz, ", t.hmap.size =", t.hmap.size)
|
||||
throw("bad hmap size")
|
||||
}
|
||||
if !ismapkey(t.key) {
|
||||
throw("runtime.reflect_makemap: unsupported map key type")
|
||||
}
|
||||
|
|
|
@ -72,7 +72,6 @@ type maptype struct {
|
|||
key *_type
|
||||
elem *_type
|
||||
bucket *_type // internal type representing a hash bucket
|
||||
hmap *_type // internal type representing a hmap
|
||||
keysize uint8 // size of key slot
|
||||
indirectkey bool // store ptr to key instead of key itself
|
||||
valuesize uint8 // size of value slot
|
||||
|
|
Loading…
Reference in New Issue