]> Cypherpunks repositories - gostls13.git/commitdiff
reflect: don't panic on delete from nil map.
authorKeith Randall <khr@golang.org>
Tue, 20 May 2014 23:26:04 +0000 (16:26 -0700)
committerKeith Randall <khr@golang.org>
Tue, 20 May 2014 23:26:04 +0000 (16:26 -0700)
Fixes #8051

LGTM=bradfitz
R=golang-codereviews, bradfitz
CC=golang-codereviews
https://golang.org/cl/95560046

src/pkg/reflect/all_test.go
src/pkg/runtime/hashmap.goc

index 9c5eb4e5540ab285b47c516e0e5752cc1228a5a4..e9949012c4d58f50348ec49e02826c3e4b9782cc 100644 (file)
@@ -993,6 +993,9 @@ func TestNilMap(t *testing.T) {
        if x.Kind() != Invalid {
                t.Errorf("mbig.MapIndex(\"hello\") for nil map = %v, want Invalid Value", x)
        }
+
+       // Test that deletes from a nil map succeed.
+       mv.SetMapIndex(ValueOf("hi"), Value{})
 }
 
 func TestChan(t *testing.T) {
index 36707c6ede29ba6c62ee54bdf0d60060782256ec..3327bed65efbd06c5374596da651cd05a7a0e753 100644 (file)
@@ -990,7 +990,7 @@ func reflect·mapassign(t *MapType, h *Hmap, key *byte, val *byte) {
 #pragma textflag NOSPLIT
 func reflect·mapdelete(t *MapType, h *Hmap, key *byte) {
        if(h == nil)
-               runtime·panicstring("delete from nil map");
+               return; // see bug 8051
        if(raceenabled) {
                runtime·racewritepc(h, runtime·getcallerpc(&t), reflect·mapdelete);
                runtime·racereadobjectpc(key, t->key, runtime·getcallerpc(&t), reflect·mapdelete);