diff options
author | Russ Cox <rsc@golang.org> | 2008-11-19 09:35:36 -0800 |
---|---|---|
committer | Russ Cox <rsc@golang.org> | 2008-11-19 09:35:36 -0800 |
commit | b8690c78f0683ae39241db2604fc0ba9f0b81f1a (patch) | |
tree | 73d24975f897e0451eb3132142d3a3540764d545 | |
parent | 875bca340078d218fb2cb12a3e9f2f476c05ca94 (diff) | |
download | golang-b8690c78f0683ae39241db2604fc0ba9f0b81f1a.tar.gz |
change array slice error to include bounds
$ 6.out
slice[5:12] of [10] array
throw: array slice
SIGSEGV: segmentation violation
R=r
DELTA=15 (13 added, 0 deleted, 2 changed)
OCL=19540
CL=19580
-rw-r--r-- | src/runtime/array.c | 17 |
1 files changed, 15 insertions, 2 deletions
diff --git a/src/runtime/array.c b/src/runtime/array.c index 548886e6c..a67deb00c 100644 --- a/src/runtime/array.c +++ b/src/runtime/array.c @@ -38,6 +38,19 @@ sys·newarray(uint32 nel, uint32 cap, uint32 width, Array* ret) } } +static void +throwslice(uint32 lb, uint32 hb, uint32 n) +{ + prints("slice["); + sys·printint(lb); + prints(":"); + sys·printint(hb); + prints("] of ["); + sys·printint(n); + prints("] array\n"); + throw("array slice"); +} + // arraysliced(old *[]any, lb uint32, hb uint32, width uint32) (ary *[]any); void sys·arraysliced(Array* old, uint32 lb, uint32 hb, uint32 width, Array* ret) @@ -62,7 +75,7 @@ sys·arraysliced(Array* old, uint32 lb, uint32 hb, uint32 width, Array* ret) sys·printint(old->cap); prints("\n"); } - throw("sys·arraysliced: new size exceeds old size"); + throwslice(lb, hb, old->cap); } // new array is inside old array @@ -109,7 +122,7 @@ sys·arrayslices(byte* old, uint32 nel, uint32 lb, uint32 hb, uint32 width, Arra sys·printint(width); prints("\n"); } - throw("sys·arrayslices: new size exceeds cap"); + throwslice(lb, hb, nel); } // new array is inside old array |