A simple test program which aborts immediately: #include <stdlib.h> #include <limits.h> int main(void) { while(1) { long x = mrand48(); if (x > 2147483648 || x < -2147483648) abort(); } }
Subject: Re: New: mrand48 and it's friends return values outside of [-2^31, 2^31] on 64-bit platforms > if (x > 2147483648 Invalid testcase; this number is negative with default GCC -std flag. Segher
Since you're too lazy to do the obvious: #include <stdlib.h> #include <stdio.h> int main(void) { while(1) { long x = mrand48(); if (x > 2147483648L || x < -2147483648L) { printf("long: %ld, int: %d\n", x, (int) x); abort(); } } }
Fixed in cvs.
Subject: Bug 3747 CVSROOT: /cvs/glibc Module name: libc Branch: glibc-2_5-branch Changes by: jakub@sourceware.org 2007-01-12 17:52:07 Modified files: . : ChangeLog stdlib : Makefile jrand48_r.c tst-rand48.c Added files: stdlib : tst-rand48-2.c Log message: [BZ #3747] * stdlib/jrand48_r.c (__jrand48_r): Make sure result is in the [-231 .. 231) range. * stdlib/tst-rand48.c (main): Fix expected values for 64-bit targets. * stdlib/tst-rand48-2.c: New test. * stdlib/Makefile (tests): Add tst-rand48-2. Patches: http://sourceware.org/cgi-bin/cvsweb.cgi/libc/ChangeLog.diff?cvsroot=glibc&only_with_tag=glibc-2_5-branch&r1=1.10362.2.23&r2=1.10362.2.24 http://sourceware.org/cgi-bin/cvsweb.cgi/libc/stdlib/tst-rand48-2.c.diff?cvsroot=glibc&only_with_tag=glibc-2_5-branch&r1=NONE&r2=1.1.4.1 http://sourceware.org/cgi-bin/cvsweb.cgi/libc/stdlib/Makefile.diff?cvsroot=glibc&only_with_tag=glibc-2_5-branch&r1=1.109&r2=1.109.2.1 http://sourceware.org/cgi-bin/cvsweb.cgi/libc/stdlib/jrand48_r.c.diff?cvsroot=glibc&only_with_tag=glibc-2_5-branch&r1=1.9&r2=1.9.10.1 http://sourceware.org/cgi-bin/cvsweb.cgi/libc/stdlib/tst-rand48.c.diff?cvsroot=glibc&only_with_tag=glibc-2_5-branch&r1=1.1&r2=1.1.10.1