For a number of library functions, the current tests only check what the compiler does. Look at this: $ cat ishft.f90 ! { dg-do run } ! verifies basic functioning of the ishft and ishftc intrinsics if (ishft (1_1, 0) /= 1) call abort if (ishft (1_1, 1) /= 2) call abort if (ishft (3_1, 1) /= 6) call abort if (ishft (-1_1, 1) /= -2) call abort if (ishft (-1_1, -1) /= 127) call abort if (ishft (96_1, 2) /= -128) call abort if (ishft (1_2, 0) /= 1) call abort if (ishft (1_2, 1) /= 2) call abort if (ishft (3_2, 1) /= 6) call abort if (ishft (-1_2, 1) /= -2) call abort if (ishft (-1_2, -1) /= 32767) call abort if (ishft (16384_2 + 8192_2, 2) /= -32768_4) call abort if (ishft (1_4, 0) /= 1) call abort if (ishft (1_4, 1) /= 2) call abort if (ishft (3_4, 1) /= 6) call abort if (ishft (-1_4, 1) /= -2) call abort if (ishft (-1_4, -1) /= 2147483647) call abort if (ishft (1073741824_4 + 536870912_4, 2) /= -2147483648_8) call abort if (ishft (1_8, 0) /= 1) call abort if (ishft (1_8, 1) /= 2) call abort if (ishft (3_8, 1) /= 6) call abort if (ishft (-1_8, 1) /= -2) call abort if (ishft (-1_8, -60) /= z'F') call abort if (ishftc (1_1, 0) /= 1) call abort if (ishftc (1_1, 1) /= 2) call abort if (ishftc (3_1, 1) /= 6) call abort if (ishftc (-1_1, 1) /= -1) call abort if (ishftc (-1_1, -1) /= -1) call abort if (ishftc (ishftc (96_1, 2), -2) /= 96) call abort if (ishftc (1_2, 0) /= 1) call abort if (ishftc (1_2, 1) /= 2) call abort if (ishftc (3_2, 1) /= 6) call abort if (ishftc (-1_2, 1) /= -1) call abort if (ishftc (-1_2, -1) /= -1) call abort if (ishftc (ishftc (25000_2, 2), -2) /= 25000) call abort if (ishftc (1_4, 0) /= 1) call abort if (ishftc (1_4, 1) /= 2) call abort if (ishftc (3_4, 1) /= 6) call abort if (ishftc (-1_4, 1) /= -1) call abort if (ishftc (-1_4, -1) /= -1) call abort if (ishftc (ishftc (1325876_4, 2), -2) /= 1325876) call abort if (ishftc (1_8, 0) /= 1) call abort if (ishftc (1_8, 1) /= 2) call abort if (ishftc (3_8, 1) /= 6) call abort if (ishftc (-1_8, 1) /= -1) call abort if (ishftc (-1_8, -1) /= -1) call abort if (ishftc (ishftc (1325876_8, 2), -2) /= 1325876) call abort end $ gfortran -fdump-tree-original ishft.f90 $ cat ishft.f90.t02.original MAIN__ () { (void) 0; $ gfortran -v Using built-in specs. Target: ia64-unknown-linux-gnu Configured with: ../gcc-4.1-20050702/configure --prefix=/home/zfkts --enable- languages=c,f95 Thread model: posix gcc version 4.1.0 20050702 (experimental) We need more test cases that really test the library calls. Chances are there may be a few more bugs out there like PR 22142 (which was also hidden by this).
Confirmed, what about using temporary variables which should solve this problem. This does not look that critical.
Closing, as we probably want one testsuite (in gcc/testsuite) rather than adding a separate library testsuite. (http://gcc.gnu.org/ml/fortran/2007-09/msg00234.html)