src/pkg/reflect/all_test.go | 3 +++ src/pkg/runtime/hashmap.goc | 2 +- diff --git a/src/pkg/reflect/all_test.go b/src/pkg/reflect/all_test.go index 9c5eb4e5540ab285b47c516e0e5752cc1228a5a4..e9949012c4d58f50348ec49e02826c3e4b9782cc 100644 --- a/src/pkg/reflect/all_test.go +++ b/src/pkg/reflect/all_test.go @@ -993,6 +993,9 @@ x = ValueOf(mbig).MapIndex(ValueOf("hello")) 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) { diff --git a/src/pkg/runtime/hashmap.goc b/src/pkg/runtime/hashmap.goc index 36707c6ede29ba6c62ee54bdf0d60060782256ec..3327bed65efbd06c5374596da651cd05a7a0e753 100644 --- a/src/pkg/runtime/hashmap.goc +++ b/src/pkg/runtime/hashmap.goc @@ -990,7 +990,7 @@ #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);