HDF5 1.10.0 Fortran H5AWRITE_F with Integers

Hi,

I am transitioning to HDF5 1.10.0 to use some of the new features in the library, but noticed that some old subroutines I had in place for writing integer attributes no longer compiled. Specifically, the compiler complained that there was no subroutine matching my call to H5AWRITE_F (using the Fortran 90 interface).

I am attaching a Fortran program which writes attributes to a test file using two approaches. First, an attribute is written in the main body of the program. Second, I call a subroutine and pass the desired value of the attribute. In the second approach, the code does not compile with HDF5 1.10.0 because the INTENT of the variable is IN (which in theory should work). If the INTENT is changed to OUT or INOUT, the code compiles and runs without any problem.

I have tested the same program using HDF5 1.8.17, and it works as expected with INTENT(IN) for the subroutine interface. Checking the online documentation (www.hdfgroup.org/HDF5/doc/RM/RM_H5A.html#Annot-Write), the interface does specify INTENT(IN) for the buf argument.

The HDF5 source code is a mystery to me, but I did some digging in the build directories to see if I could find anything suspicious. In the 1.8.17 build, I found a file H5Aff_F90.f90 which looks like it contains the interfaces for H5AWRITE_F. The argument buf does have INTENT(IN). In the 1.10.0 build, I found a similar file H5_gen.F90. Here, all of the routines, e.g., h5awrite_ikind_1_rank_0, have INTENT(INOUT) for buf.

Platforms tested: Personal linux desktop with gcc 4.9.3. Cray machine with Cray compiler version 8.4.2. HDF5 installed with MPI support.

Thanks,
Matthew

ATTRIBUTE.F90 (3 KB)

This was fixed in the trunk, but it appears it did not make it into 1.10.0. It should be fixed in the 1.10.0 patch.

Thanks,
Scot

ยทยทยท

On May 12, 2016, at 7:13 PM, Matthew Clay <mpclay@gmail.com> wrote:

Hi,

I am transitioning to HDF5 1.10.0 to use some of the new features in the library, but noticed that some old subroutines I had in place for writing integer attributes no longer compiled. Specifically, the compiler complained that there was no subroutine matching my call to H5AWRITE_F (using the Fortran 90 interface).

I am attaching a Fortran program which writes attributes to a test file using two approaches. First, an attribute is written in the main body of the program. Second, I call a subroutine and pass the desired value of the attribute. In the second approach, the code does not compile with HDF5 1.10.0 because the INTENT of the variable is IN (which in theory should work). If the INTENT is changed to OUT or INOUT, the code compiles and runs without any problem.

I have tested the same program using HDF5 1.8.17, and it works as expected with INTENT(IN) for the subroutine interface. Checking the online documentation (www.hdfgroup.org/HDF5/doc/RM/RM_H5A.html#Annot-Write), the interface does specify INTENT(IN) for the buf argument.

The HDF5 source code is a mystery to me, but I did some digging in the build directories to see if I could find anything suspicious. In the 1.8.17 build, I found a file H5Aff_F90.f90 which looks like it contains the interfaces for H5AWRITE_F. The argument buf does have INTENT(IN). In the 1.10.0 build, I found a similar file H5_gen.F90. Here, all of the routines, e.g., h5awrite_ikind_1_rank_0, have INTENT(INOUT) for buf.

Platforms tested: Personal linux desktop with gcc 4.9.3. Cray machine with Cray compiler version 8.4.2. HDF5 installed with MPI support.

Thanks,
Matthew
<ATTRIBUTE.F90>_______________________________________________
Hdf-forum is for HDF software users discussion.
Hdf-forum@lists.hdfgroup.org
http://lists.hdfgroup.org/mailman/listinfo/hdf-forum_lists.hdfgroup.org
Twitter: https://twitter.com/hdf5