diff gen/toir.cpp @ 440:d8dc221d3db7

Insert array bound checks for slices.
author Christian Kamm <kamm incasoftware de>
date Wed, 30 Jul 2008 19:02:13 +0200
parents 47b64d06eb9f
children 44f08170f4ef
line wrap: on
line diff
--- a/gen/toir.cpp	Wed Jul 30 18:38:56 2008 +0200
+++ b/gen/toir.cpp	Wed Jul 30 19:02:13 2008 +0200
@@ -1009,12 +1009,12 @@
     }
     else if (e1type->ty == Tsarray) {
         if(global.params.useArrayBounds) 
-            DtoArrayBoundsCheck(loc, l, r);
+            DtoArrayBoundsCheck(loc, l, r, false);
         arrptr = DtoGEP(l->getRVal(), zero, r->getRVal());
     }
     else if (e1type->ty == Tarray) {
         if(global.params.useArrayBounds) 
-            DtoArrayBoundsCheck(loc, l, r);
+            DtoArrayBoundsCheck(loc, l, r, false);
         arrptr = DtoArrayPtr(l);
         arrptr = DtoGEP1(arrptr,r->getRVal());
     }
@@ -1071,6 +1071,9 @@
         LLValue* vlo = lo->getRVal();
         LLValue* vup = up->getRVal();
 
+        if(global.params.useArrayBounds && (etype->ty == Tsarray || etype->ty == Tarray))
+            DtoArrayBoundsCheck(loc, e, up, true);
+
         // offset by lower
         eptr = DtoGEP1(eptr, vlo);