[Issue 287] New: DMD optimization bug arround dynamic array length
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Mon Aug 14 08:07:33 PDT 2006
http://d.puremagic.com/issues/show_bug.cgi?id=287
Summary: DMD optimization bug arround dynamic array length
Product: D
Version: 0.163
Platform: PC
OS/Version: Windows
Status: NEW
Severity: normal
Priority: P2
Component: DMD
AssignedTo: bugzilla at digitalmars.com
ReportedBy: iceelyne at gmail.com
build -release -O -clean sample.d
got wrong optimized exe.
import std.stdio;
import std.process;
char[] replace(char[] subject) {
char[] s = new char[subject.length];
int lng = 0;
char[] sa;
int lngnew;
int i = 0;
while(i<10) {
i++;
sa = "repxxxxxxxxxxxx";
lngnew = lng + sa.length;
if(lngnew > s.length) s.length = lngnew * 2; // expand
size
writefln(lng, \t, lngnew, \t, s.length, \t, sa.length);
s[lng .. lngnew] = sa[0 .. $];
lng = lngnew;
//volatile{//OK
sa = "repzzzzzzzzzzzzzzzzzzzzzz";
//lngnew = lng-1 + sa.length+1;//OK
//synchronized lngnew = lng + sa.length;//OK
//lngnew += sa.length;//OK
lngnew = lng + sa.length;// 2*sa.length?
if(lngnew > s.length) s.length = lngnew * 2; // expand
size
writefln(lng, \t, lngnew, \t, s.length, \t, sa.length);
s[lng .. lngnew] = sa[0 .. $];
lng = lngnew;
//}
}
return s[0 .. lng];
}
void demo() {
int lng = 0;
int lngnew = 0;
int i = 0;
char[] sa = "xxxx";//it seem to be around the Dynamic Array's length
property.
// class SA {
// int _a;
// this(int a) {_a = a;}
// int length() {return _a;}
// }
// SA sa = new SA(4);//OK
while(i<10) {
i++;
lngnew = lng + sa.length;
writefln(lng, \t, lngnew, \t, sa.length);
lng = lngnew;
lngnew = lng + sa.length;
writefln(lng, \t, lngnew, \t, sa.length);
lng = lngnew;
}
}
int main(char[][] args) {
try {
demo();
writefln(replace("012345678901234567890"));
} catch(Exception e) {
writefln(e.msg);
}
system("pause");
return 0;
}
--
More information about the Digitalmars-d-bugs
mailing list