On Saturday, 31 May 2014 at 10:56:06 UTC, bearophile wrote:
void main() {
int[5] data;
foreach (const i; 0 .. 10)
data[i] = 0;
foreach (immutable i; 0 .. 10)
data[i] = 0;
int[10] big;
foreach (const i, x; big)
data[i] = x;
}
But the compiler must recognize this as correct code:
void main() {
int[5] data;
foreach (const i; 0 .. 10)
if (i < 5)
data[i] = 0;
}
Can this logic be added to D?
More info on the topic:
http://en.wikipedia.org/wiki/Bounds-checking_elimination
http://ssw.jku.at/Research/Papers/Wuerthinger07/Wuerthinger07.pdf
Bye,
bearophile
What do GDC or LDC generate for these sample code with
optimizations on ?