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

Reply via email to