diff options
| author | Russ Cox <rsc@golang.org> | 2014-05-19 09:36:47 -0400 |
|---|---|---|
| committer | Russ Cox <rsc@golang.org> | 2014-05-19 09:36:47 -0400 |
| commit | d54b67df0cc2f9cfa7785919e20d152305bd72e8 (patch) | |
| tree | f9845b42aa8d2cd7a19764a48c4cceabd5fa4e88 /src/pkg/runtime/hashmap.goc | |
| parent | e893acf1848b96a922356eb753e8cea79f469afd (diff) | |
| download | go-d54b67df0cc2f9cfa7785919e20d152305bd72e8.tar.xz | |
reflect: test, fix access to nil maps
Fixes #8010.
LGTM=bradfitz, khr
R=khr, bradfitz, dvyukov
CC=golang-codereviews
https://golang.org/cl/91450048
Diffstat (limited to 'src/pkg/runtime/hashmap.goc')
| -rw-r--r-- | src/pkg/runtime/hashmap.goc | 12 |
1 files changed, 8 insertions, 4 deletions
diff --git a/src/pkg/runtime/hashmap.goc b/src/pkg/runtime/hashmap.goc index 4f5e78897b..36707c6ede 100644 --- a/src/pkg/runtime/hashmap.goc +++ b/src/pkg/runtime/hashmap.goc @@ -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 |
