]> Cypherpunks repositories - gostls13.git/commitdiff
change array slice error to include bounds
authorRuss Cox <rsc@golang.org>
Wed, 19 Nov 2008 17:35:36 +0000 (09:35 -0800)
committerRuss Cox <rsc@golang.org>
Wed, 19 Nov 2008 17:35:36 +0000 (09:35 -0800)
$ 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

src/runtime/array.c

index 548886e6cfb3e52fb4233d53c4bec5d93f398a20..a67deb00cd038139859ac96abad3945eee36556e 100644 (file)
@@ -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