------- Comment #1 from dir at lanl dot gov 2005-12-29 15:34 ------- Here is another test example that more clearly shows the problem (The f90 output is correct) -
[dranta:~/tests/gfortran-D] dir% f90 -o sage03 sage03.f90 [dranta:~/tests/gfortran-D] dir% sage03 1 ffffffffffffffff ffffffffffffffff 2 fffffffffffffffd fffffffffffffffd 3 fffffffffffffff9 fffffffffffffff9 4 fffffffffffffff1 fffffffffffffff1 5 ffffffffffffffe1 ffffffffffffffe1 6 ffffffffffffffc1 ffffffffffffffc1 7 ffffffffffffff81 ffffffffffffff81 8 ffffffffffffff01 ffffffffffffff01 9 fffffffffffffe01 fffffffffffffe01 10 fffffffffffffc01 fffffffffffffc01 11 fffffffffffff801 fffffffffffff801 12 fffffffffffff001 fffffffffffff001 13 ffffffffffffe001 ffffffffffffe001 14 ffffffffffffc001 ffffffffffffc001 15 ffffffffffff8001 ffffffffffff8001 16 ffffffffffff0001 ffffffffffff0001 17 fffffffffffe0001 fffffffffffe0001 18 fffffffffffc0001 fffffffffffc0001 19 fffffffffff80001 fffffffffff80001 20 fffffffffff00001 fffffffffff00001 21 ffffffffffe00001 ffffffffffe00001 22 ffffffffffc00001 ffffffffffc00001 23 ffffffffff800001 ffffffffff800001 24 ffffffffff000001 ffffffffff000001 25 fffffffffe000001 fffffffffe000001 26 fffffffffc000001 fffffffffc000001 27 fffffffff8000001 fffffffff8000001 28 fffffffff0000001 fffffffff0000001 29 ffffffffe0000001 ffffffffe0000001 30 ffffffffc0000001 ffffffffc0000001 31 ffffffff80000001 ffffffff80000001 32 ffffffff00000001 ffffffff00000001 33 fffffffe00000001 fffffffe00000001 34 fffffffc00000001 fffffffc00000001 35 fffffff800000001 fffffff800000001 36 fffffff000000001 fffffff000000001 37 ffffffe000000001 ffffffe000000001 38 ffffffc000000001 ffffffc000000001 39 ffffff8000000001 ffffff8000000001 40 ffffff0000000001 ffffff0000000001 41 fffffe0000000001 fffffe0000000001 42 fffffc0000000001 fffffc0000000001 43 fffff80000000001 fffff80000000001 44 fffff00000000001 fffff00000000001 45 ffffe00000000001 ffffe00000000001 46 ffffc00000000001 ffffc00000000001 47 ffff800000000001 ffff800000000001 48 ffff000000000001 ffff000000000001 49 fffe000000000001 fffe000000000001 50 fffc000000000001 fffc000000000001 51 fff8000000000001 fff8000000000001 52 fff0000000000001 fff0000000000001 53 ffe0000000000001 ffe0000000000001 54 ffc0000000000001 ffc0000000000001 55 ff80000000000001 ff80000000000001 56 ff00000000000001 ff00000000000001 57 fe00000000000001 fe00000000000001 58 fc00000000000001 fc00000000000001 59 f800000000000001 f800000000000001 60 f000000000000001 f000000000000001 61 e000000000000001 e000000000000001 62 c000000000000001 c000000000000001 63 8000000000000001 8000000000000001 64 1 1 [dranta:~/tests/gfortran-D] dir% gfortran -o sage03 sage03.f90 [dranta:~/tests/gfortran-D] dir% sage03 1 FFFFFFFFFFFFFFFF FFFFFFFFFFFFFFFF 2 FFFFFFFFFFFFFFFD FFFFFFFFFFFFFFFD 3 FFFFFFFFFFFFFFF9 FFFFFFFFFFFFFFF9 4 FFFFFFFFFFFFFFF1 FFFFFFFFFFFFFFF1 5 FFFFFFFFFFFFFFE1 FFFFFFFFFFFFFFE1 6 FFFFFFFFFFFFFFC1 FFFFFFFFFFFFFFC1 7 FFFFFFFFFFFFFF81 FFFFFFFFFFFFFF81 8 FFFFFFFFFFFFFF01 FFFFFFFFFFFFFF01 9 FFFFFFFFFFFFFE01 FFFFFFFFFFFFFE01 10 FFFFFFFFFFFFFC01 FFFFFFFFFFFFFC01 11 FFFFFFFFFFFFF801 FFFFFFFFFFFFF801 12 FFFFFFFFFFFFF001 FFFFFFFFFFFFF001 13 FFFFFFFFFFFFE001 FFFFFFFFFFFFE001 14 FFFFFFFFFFFFC001 FFFFFFFFFFFFC001 15 FFFFFFFFFFFF8001 FFFFFFFFFFFF8001 16 FFFFFFFFFFFF0001 FFFFFFFFFFFF0001 17 FFFFFFFFFFFE0001 FFFFFFFFFFFE0001 18 FFFFFFFFFFFC0001 FFFFFFFFFFFC0001 19 FFFFFFFFFFF80001 FFFFFFFFFFF80001 20 FFFFFFFFFFF00001 FFFFFFFFFFF00001 21 FFFFFFFFFFE00001 FFFFFFFFFFE00001 22 FFFFFFFFFFC00001 FFFFFFFFFFC00001 23 FFFFFFFFFF800001 FFFFFFFFFF800001 24 FFFFFFFFFF000001 FFFFFFFFFF000001 25 FFFFFFFFFE000001 FFFFFFFFFE000001 26 FFFFFFFFFC000001 FFFFFFFFFC000001 27 FFFFFFFFF8000001 FFFFFFFFF8000001 28 FFFFFFFFF0000001 FFFFFFFFF0000001 29 FFFFFFFFE0000001 FFFFFFFFE0000001 30 FFFFFFFFC0000001 FFFFFFFFC0000001 31 FFFFFFFF80000001 FFFFFFFF80000001 32 1 FFFFFFFF00000001 Abort [dranta:~/tests/gfortran-D] dir% cat sage03.f90 implicit none integer*8 cray64_int,ieee64_int,ia,itwo integer ibits,n itwo=2 ibits=bit_size(cray64_int) do n=1,ibits ieee64_int=-1 cray64_int=1 call mvbits(cray64_int, 0,n,ieee64_int, 0) ia=-1 ia=ia-itwo**n+2 write(6,'(i5,2z20)')n,ieee64_int,ia if(ia.ne.ieee64_int)call abort enddo stop end [dranta:~/tests/gfortran-D] dir% Changing the line in mvbits.c from lenmask = (*len == sizeof (TYPE)*8) ? ~(TYPE)0 : (1 << *len) - 1; to lenmask = (*len == sizeof (TYPE)*8) ? ~(TYPE)0 : ((TYPE)1 << *len) - 1; fixes the problem on the Macintosh, but the results are still incorrect on linux -- http://gcc.gnu.org/bugzilla/show_bug.cgi?id=25577