mirror of
https://github.com/golang/go
synced 2024-11-12 08:10:21 -07:00
reflect: test, fix access to nil maps
Fixes #8010. LGTM=bradfitz, khr R=khr, bradfitz, dvyukov CC=golang-codereviews https://golang.org/cl/91450048
This commit is contained in:
parent
e893acf184
commit
d54b67df0c
@ -973,6 +973,28 @@ func TestMap(t *testing.T) {
|
||||
}
|
||||
}
|
||||
|
||||
func TestNilMap(t *testing.T) {
|
||||
var m map[string]int
|
||||
mv := ValueOf(m)
|
||||
keys := mv.MapKeys()
|
||||
if len(keys) != 0 {
|
||||
t.Errorf(">0 keys for nil map: %v", keys)
|
||||
}
|
||||
|
||||
// Check that value for missing key is zero.
|
||||
x := mv.MapIndex(ValueOf("hello"))
|
||||
if x.Kind() != Invalid {
|
||||
t.Errorf("m.MapIndex(\"hello\") for nil map = %v, want Invalid Value", x)
|
||||
}
|
||||
|
||||
// Check big value too.
|
||||
var mbig map[string][10 << 20]byte
|
||||
x = ValueOf(mbig).MapIndex(ValueOf("hello"))
|
||||
if x.Kind() != Invalid {
|
||||
t.Errorf("mbig.MapIndex(\"hello\") for nil map = %v, want Invalid Value", x)
|
||||
}
|
||||
}
|
||||
|
||||
func TestChan(t *testing.T) {
|
||||
for loop := 0; loop < 2; loop++ {
|
||||
var c chan int
|
||||
|
@ -908,11 +908,15 @@ func mapaccess2(t *MapType, h *Hmap, key *byte) (val *byte, pres bool) {
|
||||
|
||||
#pragma textflag NOSPLIT
|
||||
func reflect·mapaccess(t *MapType, h *Hmap, key *byte) (val *byte) {
|
||||
if(raceenabled && h != nil) {
|
||||
runtime·racereadpc(h, runtime·getcallerpc(&t), reflect·mapaccess);
|
||||
runtime·racereadobjectpc(key, t->key, runtime·getcallerpc(&t), reflect·mapaccess);
|
||||
if(h == nil)
|
||||
val = nil;
|
||||
else {
|
||||
if(raceenabled) {
|
||||
runtime·racereadpc(h, runtime·getcallerpc(&t), reflect·mapaccess);
|
||||
runtime·racereadobjectpc(key, t->key, runtime·getcallerpc(&t), reflect·mapaccess);
|
||||
}
|
||||
val = hash_lookup(t, h, &key);
|
||||
}
|
||||
val = hash_lookup(t, h, &key);
|
||||
}
|
||||
|
||||
#pragma textflag NOSPLIT
|
||||
|
Loading…
Reference in New Issue
Block a user