Mercurial > projects > ldc
comparison 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 |
comparison
equal
deleted
inserted
replaced
439:47b64d06eb9f | 440:d8dc221d3db7 |
---|---|
1007 if (e1type->ty == Tpointer) { | 1007 if (e1type->ty == Tpointer) { |
1008 arrptr = DtoGEP1(l->getRVal(),r->getRVal()); | 1008 arrptr = DtoGEP1(l->getRVal(),r->getRVal()); |
1009 } | 1009 } |
1010 else if (e1type->ty == Tsarray) { | 1010 else if (e1type->ty == Tsarray) { |
1011 if(global.params.useArrayBounds) | 1011 if(global.params.useArrayBounds) |
1012 DtoArrayBoundsCheck(loc, l, r); | 1012 DtoArrayBoundsCheck(loc, l, r, false); |
1013 arrptr = DtoGEP(l->getRVal(), zero, r->getRVal()); | 1013 arrptr = DtoGEP(l->getRVal(), zero, r->getRVal()); |
1014 } | 1014 } |
1015 else if (e1type->ty == Tarray) { | 1015 else if (e1type->ty == Tarray) { |
1016 if(global.params.useArrayBounds) | 1016 if(global.params.useArrayBounds) |
1017 DtoArrayBoundsCheck(loc, l, r); | 1017 DtoArrayBoundsCheck(loc, l, r, false); |
1018 arrptr = DtoArrayPtr(l); | 1018 arrptr = DtoArrayPtr(l); |
1019 arrptr = DtoGEP1(arrptr,r->getRVal()); | 1019 arrptr = DtoGEP1(arrptr,r->getRVal()); |
1020 } | 1020 } |
1021 else if (e1type->ty == Taarray) { | 1021 else if (e1type->ty == Taarray) { |
1022 return DtoAAIndex(loc, type, l, r); | 1022 return DtoAAIndex(loc, type, l, r); |
1068 DValue* lo = lwr->toElem(p); | 1068 DValue* lo = lwr->toElem(p); |
1069 DValue* up = upr->toElem(p); | 1069 DValue* up = upr->toElem(p); |
1070 p->arrays.pop_back(); | 1070 p->arrays.pop_back(); |
1071 LLValue* vlo = lo->getRVal(); | 1071 LLValue* vlo = lo->getRVal(); |
1072 LLValue* vup = up->getRVal(); | 1072 LLValue* vup = up->getRVal(); |
1073 | |
1074 if(global.params.useArrayBounds && (etype->ty == Tsarray || etype->ty == Tarray)) | |
1075 DtoArrayBoundsCheck(loc, e, up, true); | |
1073 | 1076 |
1074 // offset by lower | 1077 // offset by lower |
1075 eptr = DtoGEP1(eptr, vlo); | 1078 eptr = DtoGEP1(eptr, vlo); |
1076 | 1079 |
1077 // adjust length | 1080 // adjust length |