Intel® Fortran Compiler
Build applications that can scale for the future with optimized code designed for Intel® Xeon® and compatible processors.

2025.1 ICE passing shape

andrew_4619
Honored Contributor III
1,070 Views
MODULE H5S
  INTEGER, PARAMETER :: HSIZE_T = 8
  INTEGER, PARAMETER :: HID_T = 8
  CONTAINS
  SUBROUTINE h5screate_simple_f(rank, dims, space_id, hdferr, maxdims)

    IMPLICIT NONE
    INTEGER, INTENT(IN) :: rank
    INTEGER(HSIZE_T), INTENT(IN) :: dims(rank)
    INTEGER(HID_T), INTENT(OUT) :: space_id
    INTEGER, INTENT(OUT) :: hdferr
    INTEGER(HSIZE_T), OPTIONAL, INTENT(IN) :: maxdims(rank)
!*****
    INTEGER(HSIZE_T), ALLOCATABLE, DIMENSION(:) :: f_maxdims

    INTERFACE
       INTEGER FUNCTION h5screate_simple_c(rank, dims, maxdims, space_id) BIND(C,NAME='h5screate_simple_c')
         IMPORT :: HID_T, HSIZE_T
         IMPLICIT NONE
         INTEGER, INTENT(IN) :: rank
         INTEGER(HSIZE_T), INTENT(IN) :: dims(rank)
         INTEGER(HSIZE_T), DIMENSION(:),INTENT(IN) :: maxdims(rank)
         INTEGER(HID_T), INTENT(OUT) :: space_id
       END FUNCTION h5screate_simple_c
    END INTERFACE

    ALLOCATE (f_maxdims(rank), stat=hdferr)
    IF (hdferr .NE. 0) THEN
       hdferr = -1
       RETURN
    ENDIF
    IF (PRESENT(maxdims)) THEN
       f_maxdims = maxdims
    ELSE
       f_maxdims = dims
    ENDIF
    hdferr = h5screate_simple_c(rank, dims, f_maxdims, space_id)
    DEALLOCATE(f_maxdims)

  END SUBROUTINE h5screate_simple_f
END MODULE H5S
    
module fred
    USE H5S
    implicit none(type, external)
    contains
    subroutine hdf5_add_dset_1D_int( iarry )
        integer, intent(in) :: iarry(:)   ! 1d array to write
        INTEGER(HID_T)      :: dspace_id  ! Dataspace identifier
        integer             :: error      ! Error flag
        CALL h5screate_simple_f( rank(iarry), shape(iarry,HSIZE_T), dspace_id, error) ! ICE
      ! CALL h5screate_simple_f( rank(iarry), shape(iarry,8), dspace_id, error)       ! ICE
      ! CALL h5screate_simple_f( rank(iarry), shape(iarry,4), dspace_id, error)       ! NO ICE ERROR 6633
      ! error #6633: The type of the actual argument differs from the type of the dummy argument.
      ! CALL h5screate_simple_f( rank(iarry), [5_HSIZE_T], dspace_id, error)       ! ICE
    end subroutine hdf5_add_dset_1D_int
end module fred

 

A complete source file that generates an ICE is attached, this is a cut down version from a real code that is running OK with ifort. The build was IFX debug. I have extracted an HDF5 routine to complete the reproducer. The bug is on line 52 or the variants in the lines that follow and seems to relate to passing shape.  Any insights would be helpful.

4 Replies
andrew_4619
Honored Contributor III
1,063 Views

Actually a release build gets the same ICE and I still get a couple of other ICEs for stuff I have reported  for previous IFX versions. It is quite concerning  that several iterations after IFORT was retired that is still the only compiler that we can use for production code.  Enough said.

0 Kudos
andrew_4619
Honored Contributor III
982 Views

https://community.intel.com/t5/Intel-Fortran-Compiler/Regression-ICE-with-2025-1-RANK-intrinsic/m-p/1678707#M175358

this new thread reports a ICE passing RANK and I an now thinking that in fact my ICE is the same.....

Some Intel triage is required I feel. 

0 Kudos
andrew_4619
Honored Contributor III
938 Views

OK as a workaround I changed 

rank(iarry)

to

int(rank(iarry))

IFX does not choke on that. Assigning  e.g. J = rank(iarry)  and passing J also works

 

Xiaoping_D_Intel
Employee
818 Views

A compiler bug report has been opened for it.


Reply