[dmd-internals] OSX 64 bit
Don Clugston
dclugston at googlemail.com
Thu Dec 1 00:45:18 PST 2011
On 30 November 2011 23:18, Walter Bright <walter at digitalmars.com> wrote:
>
>
> On 11/30/2011 1:30 AM, Don Clugston wrote:
>>
>> On 30 November 2011 09:27, Walter Bright<walter at digitalmars.com> wrote:
>>>
>>> The compiler is passing the test suite now, the only failure is in the
>>> unit
>>> tests of std.bigint. Anyhow, any brave souls who want to try it out
>>> should
>>> have a go!
>>
>> If anyone tries it, please help me fix the bigint failure by telling
>> me the result of:
>
>
> osx ~/cbx/mars> cat foo.d
>
> import std.bigint;
> import std.stdio;
>
> string toHex(BigInt x)
> {
> string outbuff="";
> void sink(const(char)[] s) { outbuff ~= s; }
> x.toString(&sink, "%x");
> return outbuff;
> }
>
> void main()
> {
> writeln(toHex(BigInt("0x1234567890123456789")));
> }
>
> osx ~/cbx/mars> ./dmd foo -m32
> osx ~/cbx/mars> ./foo
> 123_45678901_23456789
> osx ~/cbx/mars> ./dmd foo -m64
> osx ~/cbx/mars> ./foo
> 44444567_89ABCD45_6789ABCD
The hex digits are 4 higher than they should be, in every case.
'0'-> '4', '2'->'6', '9' -> 'D', etc.
The hex digits are set in this function:
void toHexZeroPadded(char[] output, uint value)
{
ptrdiff_t x = output.length - 1;
static immutable string hexDigits = "0123456789ABCDEF";
for( ; x>=0; --x)
{
output[x] = hexDigits[value & 0xF];
value >>= 4;
}
}
This really looks as though hexDigits is the wrong address. Maybe
because it's a local static variable.
I predict that a minimal test case would be:
void foo(uint value)
{
static immutable string hexDigits = "0123456789ABCDEF";
assert( hexDigits[value & 0xF] == '0');
}
void main()
{
foo(0);
}
More information about the dmd-internals
mailing list