digitalmars.D.bugs - [Issue 8796] New: Optimizer bug on 64bit
- d-bugmail puremagic.com (91/91) Oct 10 2012 http://d.puremagic.com/issues/show_bug.cgi?id=8796
- d-bugmail puremagic.com (46/46) Nov 05 2012 http://d.puremagic.com/issues/show_bug.cgi?id=8796
- d-bugmail puremagic.com (8/8) Dec 10 2012 http://d.puremagic.com/issues/show_bug.cgi?id=8796
- d-bugmail puremagic.com (8/8) Dec 10 2012 http://d.puremagic.com/issues/show_bug.cgi?id=8796
- d-bugmail puremagic.com (14/14) Dec 10 2012 http://d.puremagic.com/issues/show_bug.cgi?id=8796
http://d.puremagic.com/issues/show_bug.cgi?id=8796
Summary: Optimizer bug on 64bit
Product: D
Version: unspecified
Platform: x86_64
OS/Version: All
Status: NEW
Severity: critical
Priority: P2
Component: DMD
AssignedTo: nobody puremagic.com
ReportedBy: dmitry.olsh gmail.com
14:13:18 PDT ---
Uncovered while doing a re-write for std.array.insertInPlace.
It got caught by pull auto-tester.
Sample:
import std.conv, std.utf;
void insertInPlace(T, U...)(ref T[] array, size_t pos, U stuff)
{
{// mutable, can do in place
//helper function: re-encode dchar to Ts and store at *ptr
static T* putDChar(T* ptr, dchar ch)
{
static if(is(T == dchar))
{
*ptr++ = ch;
return ptr;
}
else
{
T[dchar.sizeof/T.sizeof] buf;
size_t len = encode(buf, ch);
final switch(len)
{
static if(T.sizeof == char.sizeof)
{
case 4:
ptr[3] = buf[3];
goto case;
case 3:
ptr[2] = buf[2];
goto case;
}
case 2:
ptr[1] = buf[1];
goto case;
case 1:
ptr[0] = buf[0];
}
ptr += len;
return ptr;
}
}
immutable oldLen = array.length;
size_t to_insert = 0;
foreach (i, E; U)
to_insert += codeLength!T(stuff[i]);
array.length += to_insert;
auto ptr = array.ptr + pos;
foreach (i, E; U)
{
static if(is(E : dchar))
{
ptr = putDChar(ptr, stuff[i]);
}
else
{
foreach (dchar ch; stuff[i])
ptr = putDChar(ptr, ch);
}
}
assert(ptr == array.ptr + pos + to_insert, text(ptr - array.ptr, " vs
",pos+ to_insert ));
}
}
void main()
{
auto l = "hello"d.dup;
auto r = " વિશ્વ".dup;
l.insertInPlace(0, r);
}
Compiled as
dmd -O atest.d
It fails with:
core.exception.AssertError atest.d(75): 0 vs 6
Compiled without -O it doesn't fail. It also works fine in 32 bits.
Tested with dmd 2.061 from github. Commit
a1287bd0b1931917f4e43b5e2d7b997f0d60adf6.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Oct 10 2012
http://d.puremagic.com/issues/show_bug.cgi?id=8796
Don <clugdbug yahoo.com.au> changed:
What |Removed |Added
----------------------------------------------------------------------------
Summary|Optimizer bug on 64bit |Optimizer bug on 64bit:
| |*p++=1 where p is a
| |parameter
Reduced test case (applies to postfix ++ and --):
int* wrong8796(int* p)
{
*p++ = 1;
return p;
}
// The wrong code is generated in the function above, main() is just to
demonstrate
void main()
{
int [3] arr;
int * q = arr.ptr;
q = wrong8796(q);
assert(q != arr.ptr);
}
Without -O, wrong8796() compiles to:
push RBP
mov RBP,RSP
sub RSP,8
mov -8[RBP],RDI
mov RAX,-8[RBP]
add qword ptr -8[RBP],4
mov dword ptr [RAX],1
mov RAX,-8[RBP]
leave
ret
With -O:
push RBP
mov RBP,RSP
mov RAX,RDI
mov qword ptr [RAX],1
add RAX,4
mov RAX,RDI <---- wrong
pop RBP
ret
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Nov 05 2012
http://d.puremagic.com/issues/show_bug.cgi?id=8796 Commit pushed to dmd-1.x at https://github.com/D-Programming-Language/dmd https://github.com/D-Programming-Language/dmd/commit/5b7620ea1c664ac7686070a8493edcd34d9929fc fix Issue 8796 - Optimizer bug on 64bit: *p++=1 where p is a parameter -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Dec 10 2012
http://d.puremagic.com/issues/show_bug.cgi?id=8796 Commit pushed to master at https://github.com/D-Programming-Language/dmd https://github.com/D-Programming-Language/dmd/commit/de67647952432b11e61d7f79129a4f9d7f00e37a fix Issue 8796 - Optimizer bug on 64bit: *p++=1 where p is a parameter -- Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email ------- You are receiving this mail because: -------
Dec 10 2012
http://d.puremagic.com/issues/show_bug.cgi?id=8796
Walter Bright <bugzilla digitalmars.com> changed:
What |Removed |Added
----------------------------------------------------------------------------
Status|NEW |RESOLVED
CC| |bugzilla digitalmars.com
Platform|x86_64 |All
Version|D2 |D1 & D2
Resolution| |FIXED
23:58:07 PST ---
This bug has lurked for a very long time, and was on all platforms.
--
Configure issuemail: http://d.puremagic.com/issues/userprefs.cgi?tab=email
------- You are receiving this mail because: -------
Dec 10 2012









d-bugmail puremagic.com 