hdf5/fortran/test/tf_F03.f90
Scot Breitenfeld bfb60a0cc1 [svn-r25304] Fixes latest check-in errors for:
HDFFV-8653
replace non-standard sizeof in the fortran tests with c_sizeof

(1) Removed the overloaded h5_sizeof functions for characters and integer arrays since Sun compilers don't allow them to be passed into a function that uses sizeof.

(2) Requested min. precision for reals to avoid duplicate interfaces when the flag -r8 (or equiv.) is set.

tested:
*jam: intel, -i8 -r8 --enable-fortran2003
*jam: pgi, --enable-fortran2003
*emu: sun, --enable-fortran2003
2014-06-17 13:09:39 -05:00

129 lines
4.2 KiB
Fortran

!****h* root/fortran/test/tf_F03.f90
!
! NAME
! tf_F03.f90
!
! FUNCTION
! Contains functions that are part of the F2003 standard, and are not F2008 compliant.
! Needed by the hdf5 fortran tests.
!
! COPYRIGHT
! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
! Copyright by The HDF Group. *
! Copyright by the Board of Trustees of the University of Illinois. *
! All rights reserved. *
! *
! This file is part of HDF5. The full HDF5 copyright notice, including *
! terms governing use, modification, and redistribution, is contained in *
! the files COPYING and Copyright.html. COPYING can be found at the root *
! of the source code distribution tree; Copyright.html can be found at the *
! root level of an installed copy of the electronic HDF5 document set and *
! is linked from the top-level documents page. It can also be found at *
! http://hdfgroup.org/HDF5/doc/Copyright.html. If you do not have *
! access to either file, you may request a copy from help@hdfgroup.org. *
! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
!
! CONTAINS SUBROUTINES
! H5_SIZEOF
!
! NOTES
! The Sun/Oracle compiler has the following restrictions on the SIZEOF intrinsic function:
!
! "The SIZEOF intrinsic cannot be applied to arrays of an assumed size, characters of a
! length that is passed, or subroutine calls or names. SIZEOF returns default INTEGER*4 data.
! If compiling for a 64-bit environment, the compiler will issue a warning if the result overflows
! the INTEGER*4 data range. To use SIZEOF in a 64-bit environment with arrays larger
! than the INTEGER*4 limit (2 Gbytes), the SIZEOF function and
! the variables receiving the result must be declared INTEGER*8."
!
! Thus, we can not overload the H5_SIZEOF function to handle arrays (as used in tH5P_F03.f90), or
! characters that do not have a set length (as used in tH5P_F03.f90), sigh...
!
!*****
MODULE TH5_MISC_PROVISIONAL
USE ISO_C_BINDING
IMPLICIT NONE
INTEGER, PARAMETER :: sp = SELECTED_REAL_KIND(5) ! This should map to REAL*4 on most modern processors
INTEGER, PARAMETER :: dp = SELECTED_REAL_KIND(10) ! This should map to REAL*8 on most modern processors
! generic compound datatype
TYPE, BIND(C) :: comp_datatype
REAL :: a
INTEGER :: x
DOUBLE PRECISION :: y
CHARACTER(LEN=1) :: z
END TYPE comp_datatype
PUBLIC :: H5_SIZEOF
INTERFACE H5_SIZEOF
MODULE PROCEDURE H5_SIZEOF_CMPD
MODULE PROCEDURE H5_SIZEOF_I, H5_SIZEOF_CHR
MODULE PROCEDURE H5_SIZEOF_SP,H5_SIZEOF_DP
END INTERFACE
CONTAINS
!This definition is needed for Windows DLLs
!DEC$if defined(BUILD_HDF5_DLL)
!DEC$attributes dllexport :: h5_sizeof_cmpd
!DEC$endif
INTEGER(C_SIZE_T) FUNCTION H5_SIZEOF_CMPD(a)
IMPLICIT NONE
TYPE(comp_datatype), INTENT(in) :: a
H5_SIZEOF_CMPD = SIZEOF(a)
END FUNCTION H5_SIZEOF_CMPD
!This definition is needed for Windows DLLs
!DEC$if defined(BUILD_HDF5_DLL)
!DEC$attributes dllexport :: h5_sizeof_chr
!DEC$endif
INTEGER(C_SIZE_T) FUNCTION H5_SIZEOF_CHR(a)
IMPLICIT NONE
CHARACTER(LEN=1), INTENT(in):: a
H5_SIZEOF_CHR = SIZEOF(a)
END FUNCTION H5_SIZEOF_CHR
!This definition is needed for Windows DLLs
!DEC$if defined(BUILD_HDF5_DLL)
!DEC$attributes dllexport :: h5_sizeof_i
!DEC$endif
INTEGER(C_SIZE_T) FUNCTION H5_SIZEOF_I(a)
IMPLICIT NONE
INTEGER, INTENT(in):: a
H5_SIZEOF_I = SIZEOF(a)
END FUNCTION H5_SIZEOF_I
!This definition is needed for Windows DLLs
!DEC$if defined(BUILD_HDF5_DLL)
!DEC$attributes dllexport :: h5_sizeof_sp
!DEC$endif
INTEGER(C_SIZE_T) FUNCTION H5_SIZEOF_SP(a)
IMPLICIT NONE
REAL(sp), INTENT(in):: a
H5_SIZEOF_SP = SIZEOF(a)
END FUNCTION H5_SIZEOF_SP
!This definition is needed for Windows DLLs
!DEC$if defined(BUILD_HDF5_DLL)
!DEC$attributes dllexport :: h5_sizeof_dp
!DEC$endif
INTEGER(C_SIZE_T) FUNCTION H5_SIZEOF_DP(a)
IMPLICIT NONE
REAL(dp), INTENT(in):: a
H5_SIZEOF_DP = SIZEOF(a)
END FUNCTION H5_SIZEOF_DP
END MODULE TH5_MISC_PROVISIONAL