Commit d54b67df authored by Russ Cox's avatar Russ Cox

reflect: test, fix access to nil maps

Fixes #8010.

LGTM=bradfitz, khr
R=khr, bradfitz, dvyukov
CC=golang-codereviews
https://golang.org/cl/91450048
parent e893acf1
......@@ -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
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment