gfortran should not accept the following: character s,ss(1),pad(1),order(1) integer nn(7) c gfortran should complain that POS and LEN are negative print *,ibits(i,-1,-1) c POS+LEN>BIT_SIZE(i) print *,ibits(i,100,100) c 30+3>32 call mvbits(n,30,3,n,1) c 31+2>32 call mvbits(n,30,2,n,31) c LEN negative call mvbits(n,30,-2,n,30) c TOPOS negative call mvbits(n,30,2,n,-3) c FROMPOS negative call mvbits(n,-1,2,n,3) end Best regards Vittorio Zecca
Thanks for the bug report. Technically, the prohibition of nonnegative is on the programmer, and as such the code is illegal. gfortran can do anything it wants with the program including starting world war iii. OTOH, this appears to be a quality-of-implementation issue, and if gfortran can diagnosis the problem, and error should be emitted.
I have a patch for the IBITS() portion of the problem.
I have a complete patch with the mvbits checking done.
Steve's patch: http://gcc.gnu.org/ml/fortran/2010-06/msg00002.html
Patch has been committed to 4.4, 4.5, and trunk. Closing.