Bug 8079 – [64 bit] Memory corruption on stack-allocated temporary static arrays

Status
RESOLVED
Resolution
FIXED
Severity
critical
Priority
P2
Component
dmd
Product
D
Version
D2
Platform
x86_64
OS
Linux
Creation time
2012-05-10T12:00:00Z
Last change time
2012-09-05T02:05:26Z
Keywords
wrong-code
Assigned to
nobody
Creator
hsteoh

Comments

Comment #0 by hsteoh — 2012-05-10T12:00:55Z
Code: import std.stdio; struct S { short[4] x; this(short[4] args...) { x[] = args[]; } bool opEquals(in S s) const { for (auto i=0; i < 4; i++) { if (this.x[i] != s.x[i]) return false; } return true; } } void main() { assert(S(1,2,3,4) == S(1,2,3,4)); } Output: with dmd -m64, the assertion fails. Inserting writeln's show that the elements of s in opEquals() are garbage values. Trying to print out the entire array of this or s causes a segfault. On dmd -m32, there is no problem. Not sure if this is related to bug 5570.
Comment #1 by hsteoh — 2012-05-10T12:11:18Z
P.S. Changing the static array to int[4] for some reason makes the problem go away. Don't know how this is relevant, but might be useful to track down the bug in the compiler.
Comment #2 by hsteoh — 2012-05-22T11:13:49Z
Can no longer reproduce this bug in latest git dmd, may have been fixed?
Comment #3 by nazriel6969 — 2012-09-05T02:05:26Z
Seems to work with DMD 2.060 (and trunk) both with m32 and m64 http://dpaste.dzfl.pl/c6857366 I think we can close this issue as for now although I am not sure what certain Commit fixed it.