Thanks for working on the issue. While testing your patch I have found the following problems:
(1) Typo in gcc/fortran/array.c + /* If an array contains a BT_BOZ, then array elements need to be converted + an INTEGER. This is an GNU Fortran extension. Mixing BOZ and non-BOZ missing ‘to’? (2) Compiling integer :: i = 1, j = 2 print *, ble(i,j), blt(z'ff',z'fa') end gives an ICE f951: internal compiler error: in compare_bitwise, at fortran/simplify.c:1516 which is gcc_assert (i->ts.type == BT_INTEGER); gcc_assert (j->ts.type == BT_INTEGER); (3) Compiling (variant of pr54072) USE, INTRINSIC :: ISO_C_BINDING IMPLICIT NONE INTEGER, PARAMETER :: GLbitfield=C_INT INTEGER(GLbitfield), PARAMETER :: GL_CURRENT_BIT = INT(z'00000001') ! 0x00000001 INTEGER(GLbitfield), PARAMETER :: GL_CLIENT_ALL_ATTRIB_BITS = & transfer(z'ffffffff',GL_CURRENT_BIT) ! 0xffffffff print *, GLbitfield, GL_CURRENT_BIT, GL_CLIENT_ALL_ATTRIB_BITS END gives an ICE f951: internal compiler error: Invalid expression in gfc_element_size. (4) Compiling print *, INT(z'ffffffff',4) end gives print *, INT(z'ffffffff',4) 1 Error: Arithmetic overflow converting INTEGER(-1) to INTEGER(4) at (1). This check can be disabled with the option '-fno-range-check’ Should not it be -1? (5) Compiling print *, real(z'ffffffff',4) end gives print *, real(z'ffffffff',4) 1 Error: Arithmetic NaN converting REAL(4) to REAL(4) at (1). This check can be disabled with the option '-fno-range-check’ Why not a warning? (6) Compiling print *, storage_size(z'FFFFFFFF') end gives an ICE f951: internal compiler error: Invalid expression in gfc_element_size. The code is probably invalid, but I don’t know how to parse > The processor shall allow the position of the leftmost nonzero bit to be at > least z - 1, > where z is the maximum value that could result from invoking the intrinsic > function > STORAGE_SIZE (13.8.175) with an argument that is a real or integer scalar of > any kind > supported by the processor. Without the patch it returns 128 at run time. Dominique