http://d.puremagic.com/issues/show_bug.cgi?id=3914
Summary: Struct as argument that fits in register has member accessed wrong Product: D Version: 2.041 Platform: x86 OS/Version: Windows Status: NEW Severity: normal Priority: P2 Component: DMD AssignedTo: nob...@puremagic.com ReportedBy: crimson.ma...@gmail.com --- Comment #0 from Aldo Nunez <crimson.ma...@gmail.com> 2010-03-09 10:54:31 PST --- Depending on the build options and where in a function the struct parameter is used, referencing one member will actually reference another one. Given the following program: import std.stdio; struct SS { char a; char b; char c; char d; // char e; } void A( SS ss1 ) { C: //writeln( ss1.a, ss1.b, ss1.c, ss1.d ); char temp; temp = ss1.a; ss1.a = ss1.d; ss1.d = temp; temp = ss1.b; ss1.b = ss1.c; ss1.c = temp; B: //writeln( ss1.a, ss1.b, ss1.c, ss1.d ); temp = ss1.a; ss1.a = ss1.d; ss1.d = temp; temp = ss1.b; ss1.b = ss1.c; ss1.c = temp; A: writeln( ss1.a, ss1.b, ss1.c, ss1.d ); } void main() { SS ss3; ss3.a = 'A'; ss3.b = 'L'; ss3.c = 'D'; ss3.d = 'O'; A( ss3 ); } If lines A, B, and C are enabled in the following pattern along with the given build options, you get these results: (none) -g -rel -rel-O -O -g -O A ALDO ALDO ALDO ALDA ALDA ALDA B, A ODLA ODLA ODLA ADLA ADLA ADLA ALDO ALDO ALDO ALDA ALDA ALDA C, B, A ALDA ALDO ALDA ALDA ALDA ALDA ODLA ODLA ODLA ODLA ODLA ODLA ALDO ALDO ALDO ALDO ALDO ALDO In particular, notice that field 'd' starts off wrong. If I uncomment field 'e', or change one of them to an int, the problem goes away. At C, "ALDO" should be printed. At B, "ODLA" should be printed. At A, "ALDO" should be printed. -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------