digitalmars.D.bugs - [Regression] Cannot assign scalar variable to char[], byte[] or ubyte[]
- Stewart Gordon (70/70) Sep 15 2004 Using DMD 0.100, Windows 98SE.
Using DMD 0.100, Windows 98SE.
One of my very first D programs has stopped working. In particular,
assignment of a scalar variable to a char[] slice refuses to work,
instead giving me garbage or an AV for some reason I can't imagine.
----------
import std.stdio;
void main() {
char[] qwert = new char[4];
char yuiop = 'c';
qwert[0..4] = 'a';
show(qwert);
qwert[] = 'b';
show(qwert);
qwert[0..4] = yuiop;
show(qwert);
qwert[] = yuiop;
show(qwert);
}
void show(char[] s) {
foreach (int i, char c; s) {
writefln("qwert[%d] == %d", i, cast(int) c);
}
}
----------
Actual output:
qwert[0] == 97
qwert[1] == 97
qwert[2] == 97
qwert[3] == 97
qwert[0] == 98
qwert[1] == 98
qwert[2] == 98
qwert[3] == 98
qwert[0] == 249
qwert[1] == 35
qwert[2] == 71
qwert[3] == 0
Error: Access Violation
Expected output:
qwert[0] == 97
qwert[1] == 97
qwert[2] == 97
qwert[3] == 97
qwert[0] == 98
qwert[1] == 98
qwert[2] == 98
qwert[3] == 98
qwert[0] == 99
qwert[1] == 99
qwert[2] == 99
qwert[3] == 99
qwert[0] == 99
qwert[1] == 99
qwert[2] == 99
qwert[3] == 99
The garbage changes when I change my code a bit. If I take out lines
7-11, I get:
qwert[0] == 32
qwert[1] == 0
qwert[2] == 0
qwert[3] == 0
Error: Access Violation
As you see, it works on literals, but not variables. The bug is the
same if I use ints as the rvalues, or assign to a byte[] or ubyte[]
instead of a char[]. But it works OK with arrays of the other integral
types.
Stewart.
--
My e-mail is valid but not my primary mailbox. Please keep replies on
the 'group where everyone may benefit.
Sep 15 2004








Stewart Gordon <smjg_1998 yahoo.com>