Subject: sparc64 double casting bug?
To: None <tech-toolchain@netbsd.org>
From: Jarkko Hietaniemi <jhi@iki.fi>
List: tech-toolchain
Date: 04/27/2002 21:26:48
Hi, while trying to get Perl-5.8.0-to-be running on NetBSD sparc64,
we ran into this oddity (this is a severely cut down version of a
test run by Perl's Configure script):

#include <stdio.h>
int main() {
    double d = 0;

#if 1
    if (d <= 0) { }
#endif
    d = (double)0;
    fprintf(stderr, "d = %g %lu\n", d, (unsigned long)d);
    exit(0);
}

The output in

% cc -v
Using builtin specs.
gcc version 2.95.3 20010315 (release) (NetBSD nb1)
% uname -a
NetBSD rfhs8036 1.5ZA NetBSD 1.5ZA (GENERIC) #0: Sun Dec 23 03:12:29 PST 2001     chs@ultra2:/build/obj/build/src/sys/arch/sparc64/compile/GENERIC sparc64
% 

is

d = 0 9223372036854775808

instead of

d = 0 0

The strange thing is that the bug seems to be somehow related to the
#if 1 comparison.  Change it to #if 0 and one gets the "d = 0 0".

-- 
$jhi++; # http://www.iki.fi/jhi/
        # There is this special biologist word we use for 'stable'.
        # It is 'dead'. -- Jack Cohen