[Issue 7026] New: 64 bit optimizer bug
d-bugmail at puremagic.com
d-bugmail at puremagic.com
Mon Nov 28 11:14:47 PST 2011
http://d.puremagic.com/issues/show_bug.cgi?id=7026
Summary: 64 bit optimizer bug
Product: D
Version: D2
Platform: x86_64
OS/Version: Linux
Status: NEW
Keywords: wrong-code
Severity: major
Priority: P2
Component: DMD
AssignedTo: nobody at puremagic.com
ReportedBy: code at klickverbot.at
--- Comment #0 from klickverbot <code at klickverbot.at> 2011-11-28 11:13:45 PST ---
The following code (reduced varint encoding) works as expected on Linux x86_64
if built without flags or just one of -O and -release, but fails if both -O
-release are specified:
---
import core.stdc.stdio;
ubyte foo(uint n) {
ubyte[5] buf = void;
ubyte wsize;
while (true) {
if ((n & ~0x7F) == 0) {
buf[wsize++] = cast(ubyte)n;
break;
} else {
buf[wsize++] = cast(ubyte)((n & 0x7F) | 0x80);
n >>= 7;
}
}
printf("%hhu\n", wsize);
return buf[0];
}
void main() {
printf("%hhx\n", foo(3));
}
---
More specifically, the output (printf()s for shorter assembly) is »1 e0« for
the optimized build instead of »1 3«, and the program crashes most of the time
(different errors: segfaults, illegal instruction, glibc free() assert
triggers, …) – stack corruption?
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
More information about the Digitalmars-d-bugs
mailing list