summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--CMakeLists.txt2
-rw-r--r--CTestConfig.cmake4
-rw-r--r--MANIFEST5
-rw-r--r--Makefile.in1
-rw-r--r--README.txt2
-rwxr-xr-xbin/genltanalyze54
-rwxr-xr-xbin/reconfigure6
-rw-r--r--c++/Makefile.in1
-rw-r--r--c++/examples/Makefile.in1
-rw-r--r--c++/src/H5CppDoc.h39
-rw-r--r--c++/src/Makefile.in3
-rw-r--r--c++/test/CMakeTests.cmake1
-rw-r--r--c++/test/Makefile.in1
-rw-r--r--config/cmake/ConfigureChecks.cmake8
-rw-r--r--config/cmake/ConversionTests.c466
-rw-r--r--config/cmake/H5pubconf.h.in12
-rw-r--r--config/cmake/HDF5Macros.cmake2
-rw-r--r--config/lt_vers.am2
-rwxr-xr-xconfigure183
-rw-r--r--configure.ac81
-rw-r--r--examples/Makefile.in1
-rw-r--r--fortran/Makefile.in1
-rw-r--r--fortran/examples/Makefile.in1
-rw-r--r--fortran/src/CMakeLists.txt28
-rw-r--r--fortran/src/H5test_kind.f9024
-rw-r--r--fortran/src/H5test_kind_SIZEOF.f9024
-rw-r--r--fortran/src/H5test_kind_STORAGE_SIZE.f90230
-rw-r--r--fortran/src/Makefile.am4
-rw-r--r--fortran/src/Makefile.in18
-rw-r--r--fortran/test/CMakeLists.txt13
-rw-r--r--fortran/test/Makefile.am18
-rw-r--r--fortran/test/Makefile.in47
-rw-r--r--fortran/test/tH5P_F03.f9034
-rw-r--r--fortran/test/tH5T_F03.f9013
-rw-r--r--fortran/test/tf.f904
-rw-r--r--fortran/test/tf_F03.f90128
-rw-r--r--fortran/test/tf_F08.f90128
-rw-r--r--fortran/test/tf_F90.f9033
-rw-r--r--fortran/testpar/Makefile.in1
-rw-r--r--hl/Makefile.in1
-rw-r--r--hl/c++/Makefile.in1
-rw-r--r--hl/c++/examples/Makefile.in1
-rw-r--r--hl/c++/src/Makefile.in3
-rw-r--r--hl/c++/test/Makefile.in1
-rw-r--r--hl/examples/Makefile.in1
-rw-r--r--hl/fortran/Makefile.in1
-rw-r--r--hl/fortran/examples/Makefile.in1
-rw-r--r--hl/fortran/src/Makefile.in3
-rw-r--r--hl/fortran/test/Makefile.in1
-rw-r--r--hl/src/H5LTanalyze.c1587
-rw-r--r--hl/src/H5LTparse.c3022
-rw-r--r--hl/src/H5LTparse.h196
-rw-r--r--hl/src/Makefile.in3
-rw-r--r--hl/test/Makefile.in1
-rw-r--r--hl/test/test_ds.c4
-rw-r--r--hl/tools/Makefile.in1
-rw-r--r--hl/tools/gif2h5/Makefile.in1
-rw-r--r--hl/tools/h5watch/Makefile.in1
-rw-r--r--perform/CMakeTests.cmake1
-rw-r--r--perform/Makefile.in1
-rw-r--r--release_docs/RELEASE.txt2
-rw-r--r--src/H5AC.c131
-rw-r--r--src/H5ACprivate.h12
-rw-r--r--src/H5C.c726
-rw-r--r--src/H5Cpkg.h13
-rw-r--r--src/H5Cprivate.h12
-rw-r--r--src/H5Dchunk.c6
-rw-r--r--src/H5FDmpio.c37
-rw-r--r--src/H5HFcache.c1114
-rw-r--r--src/H5HFdblock.c1
-rw-r--r--src/H5HFiblock.c32
-rw-r--r--src/H5HFpkg.h13
-rw-r--r--src/H5Lpublic.h2
-rw-r--r--src/H5Smpio.c2
-rw-r--r--src/H5config.h.in7
-rw-r--r--src/H5public.h4
-rw-r--r--src/Makefile.in3
-rw-r--r--test/CMakeTests.cmake4
-rw-r--r--test/Makefile.in1
-rw-r--r--test/dsets.c76
-rw-r--r--testpar/Makefile.in1
-rw-r--r--testpar/t_chunk_alloc.c14
-rw-r--r--testpar/t_mdset.c57
-rw-r--r--testpar/t_mpi.c21
-rw-r--r--testpar/testphdf5.c3
-rw-r--r--testpar/testphdf5.h1
-rw-r--r--tools/Makefile.in1
-rw-r--r--tools/h5copy/Makefile.in1
-rw-r--r--tools/h5diff/Makefile.in1
-rw-r--r--tools/h5dump/Makefile.in1
-rw-r--r--tools/h5import/Makefile.in1
-rw-r--r--tools/h5jam/Makefile.in1
-rw-r--r--tools/h5ls/Makefile.in1
-rw-r--r--tools/h5repack/Makefile.in1
-rw-r--r--tools/h5stat/Makefile.in1
-rw-r--r--tools/lib/Makefile.in1
-rw-r--r--tools/misc/Makefile.in1
-rw-r--r--vms/src/h5pubconf.h13
98 files changed, 6413 insertions, 2362 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
index dd0ae5d..9ee21de 100644
--- a/CMakeLists.txt
+++ b/CMakeLists.txt
@@ -643,8 +643,6 @@ if (HDF5_ENABLE_PARALLEL)
# MPI checks, only do these if MPI_C_FOUND is true, otherwise they always fail
# and once set, they are cached as false and not regenerated
set (CMAKE_REQUIRED_LIBRARIES "${MPI_C_LIBRARIES}" )
- CHECK_FUNCTION_EXISTS (MPI_File_get_size H5_HAVE_MPI_GET_SIZE)
- set (H5_MPI_FILE_SET_SIZE_BIG 1)
# Used by Fortran + MPI
CHECK_SYMBOL_EXISTS (MPI_Comm_c2f "${MPI_C_INCLUDE_PATH}/mpi.h" H5_HAVE_MPI_MULTI_LANG_Comm)
CHECK_SYMBOL_EXISTS (MPI_Info_c2f "${MPI_C_INCLUDE_PATH}/mpi.h" H5_HAVE_MPI_MULTI_LANG_Info)
diff --git a/CTestConfig.cmake b/CTestConfig.cmake
index 0e00427..7bbce4f 100644
--- a/CTestConfig.cmake
+++ b/CTestConfig.cmake
@@ -23,9 +23,9 @@ set (VALGRIND_COMMAND_OPTIONS "-v --tool=memcheck --leak-check=full --track-fds=
set (CTEST_MEMORYCHECK_COMMAND "/usr/bin/valgrind")
set (CTEST_MEMORYCHECK_COMMAND_OPTIONS "-v --tool=memcheck --leak-check=full --track-fds=yes --num-callers=50 --show-reachable=yes --track-origins=yes --malloc-fill=0xff --free-fill=0xfe")
-set (CTEST_TEST_TIMEOUT 3600 CACHE STRING
+set (CTEST_TEST_TIMEOUT 1200 CACHE STRING
"Maximum time allowed before CTest will kill the test.")
-set (DART_TESTING_TIMEOUT 3600 CACHE STRING
+set (DART_TESTING_TIMEOUT 1200 CACHE STRING
"Maximum time allowed before CTest will kill the test." FORCE)
SET(CTEST_SUBMIT_RETRY_DELAY 20 CACHE STRING
diff --git a/MANIFEST b/MANIFEST
index 9645d66..9aeb628 100644
--- a/MANIFEST
+++ b/MANIFEST
@@ -56,6 +56,7 @@
./bin/deploy
./bin/distdep
./bin/errors _DO_NOT_DISTRIBUTE_
+./bin/genltanalyze _DO_NOT_DISTRIBUTE_
./bin/gcov_script _DO_NOT_DISTRIBUTE_
./bin/h5vers
./bin/install-sh
@@ -332,6 +333,7 @@
./fortran/src/H5f90proto.h
./fortran/src/H5test_kind.f90
./fortran/src/H5test_kind_SIZEOF.f90
+./fortran/src/H5test_kind_STORAGE_SIZE.f90
./fortran/src/H5match_types.c
./fortran/src/HDF5.f90
./fortran/src/HDF5mpio.f90
@@ -352,6 +354,9 @@
./fortran/test/t.c
./fortran/test/t.h
./fortran/test/tf.f90
+./fortran/test/tf_F90.f90
+./fortran/test/tf_F03.f90
+./fortran/test/tf_F08.f90
./fortran/test/tH5A.f90
./fortran/test/tH5A_1_8.f90
./fortran/test/tH5D.f90
diff --git a/Makefile.in b/Makefile.in
index d254df5..05e2d73 100644
--- a/Makefile.in
+++ b/Makefile.in
@@ -344,7 +344,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/README.txt b/README.txt
index ffcebb0..6f267ea 100644
--- a/README.txt
+++ b/README.txt
@@ -1,4 +1,4 @@
-HDF5 version 1.9.184-swmr0 currently under development
+HDF5 version 1.9.190-swmr0 currently under development
Please refer to the release_docs/INSTALL file for installation instructions.
------------------------------------------------------------------------------
diff --git a/bin/genltanalyze b/bin/genltanalyze
new file mode 100755
index 0000000..8bb0423
--- /dev/null
+++ b/bin/genltanalyze
@@ -0,0 +1,54 @@
+#!/bin/sh
+##
+## 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://hdf.ncsa.uiuc.edu/HDF5/doc/Copyright.html. If you do not have
+## access to either file, you may request a copy from hdfhelp@ncsa.uiuc.edu.
+##
+# regenerate hl/src/H5LTanalyze.c
+
+# HDF5 currently uses the following versions of the bison flex:
+BISON_VERSION="bison (GNU Bison) 2.7"
+FLEX_VERSION="flex 2.5.37"
+
+# If paths to bison flex are not specified by the user, assume tools are
+# running on jam in /mnt/hdf/packages and set paths accordingly.
+if test -z ${BISON}; then
+ BISON=/usr/hdf/bin/bison
+fi
+if test -z ${FLEX}; then
+ FLEX=/usr/hdf/bin/flex
+fi
+
+# Check version numbers of all bison flex against the "correct" versions
+BI_VERS=`${BISON} --version 2>&1 | grep "^${BISON_VERSION}"`
+if test -z "${BI_VERS}"; then
+ echo "${BISON} version is not ${BISON_VERSION}"
+ exit 1
+fi
+FL_VERS=`${FLEX} --version 2>&1 | grep "^${FLEX_VERSION}"`
+if test -z "${FL_VERS}"; then
+ echo "${FLEX} version is not ${FLEX_VERSION}"
+ exit 1
+fi
+
+# Make sure that the tools are in the path.
+BISON_DIR=`dirname ${BISON}`
+FLEX_DIR=`dirname ${FLEX}`
+
+# Main body
+cd hl/src
+echo "Generate hl/src/H5LTparse.c from hl/src/H5LTparse.y"
+bison -pH5LTyy -o H5LTparse.c -d H5LTparse.y
+echo "Generate hl/src/H5LTanalyze.c from hl/src/H5LTanalyze.l"
+flex --nounistd -PH5LTyy -oH5LTanalyze.c H5LTanalyze.l
+cd ../..
+
+exit 0
diff --git a/bin/reconfigure b/bin/reconfigure
index f2f1f23..7a0f437 100755
--- a/bin/reconfigure
+++ b/bin/reconfigure
@@ -143,4 +143,10 @@ echo
echo " Running API version generation script:"
bin/make_vers src/H5vers.txt || exit 1
+# Run flex
+# automatically generates the lexical file for hl/src/H5LTanalyze.c
+echo
+echo " Running flex generation script:"
+bin/genltanalyze || exit 1
+
exit 0
diff --git a/c++/Makefile.in b/c++/Makefile.in
index c56cfc4..de87fa5 100644
--- a/c++/Makefile.in
+++ b/c++/Makefile.in
@@ -504,7 +504,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/c++/examples/Makefile.in b/c++/examples/Makefile.in
index 273ab52..3403db4 100644
--- a/c++/examples/Makefile.in
+++ b/c++/examples/Makefile.in
@@ -452,7 +452,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/c++/src/H5CppDoc.h b/c++/src/H5CppDoc.h
index f3ed040..5ba5bd4 100644
--- a/c++/src/H5CppDoc.h
+++ b/c++/src/H5CppDoc.h
@@ -26,28 +26,31 @@
*
* \section intro_sec Introduction
*
- * The C++ API provides C++ wrappers for the HDF5 C library.
- * It is assumed that the user has knowledge of the HDF5 file format
- * and its components. If you are not familiar with HDF5 file format,
- * and would like to find out more, please refer to the HDF5 documentation
- * at http://www.hdfgroup.org/HDF5/doc/index.html
+ * The C++ API provides C++ wrappers for the HDF5 C Library.
+ *
+ * It is assumed that the user has knowledge of the
+ * <a href="http://www.hdfgroup.org/HDF5/doc/H5.format.html">
+ * HDF5 file format</a> and its components.
+ * For more information on the HDF5 C Library, see the
+ * <a href="http://www.hdfgroup.org/HDF5/doc/index.html">
+ * HDF5 Software Documentation</a> page.
*
- * Because the HDF5 library maps very well to
+ * Because the HDF5 C Library maps very well to
* the object oriented design approach, classes in the C++ API can
- * closely represent the interfaces of the HDF5 APIs, as followed:
+ * closely represent the interfaces of the C APIs as follows:
*
* \verbatim
- HDF5 C APIs C++ Classes
- ----------- -----------
- Attribute Interface (H5A) Attribute
- Datasets Interface (H5D) DataSet
- Error Interface (H5E) Exception
- File Interface (H5F) H5File
- Group Interface (H5G) Group
- Identifier Interface (H5I) IdComponent
- Property List Interface (H5P) PropList and subclasses
- Dataspace Interface (H5S) DataSpace
- Datatype Interface (H5T) DataType and subclasses
+ HDF5 C APIs C++ Classes
+ ----------- -----------
+ Attribute Interface (H5A) Attribute
+ Datasets Interface (H5D) DataSet
+ Error Interface (H5E) Exception
+ File Interface (H5F) H5File
+ Group Interface (H5G) Group
+ Identifier Interface (H5I) IdComponent
+ Property List Interface (H5P) PropList and subclasses
+ Dataspace Interface (H5S) DataSpace
+ Datatype Interface (H5T) DataType and subclasses
\endverbatim
* \section install_sec Installation
*
diff --git a/c++/src/Makefile.in b/c++/src/Makefile.in
index ab95efe..042e2f6 100644
--- a/c++/src/Makefile.in
+++ b/c++/src/Makefile.in
@@ -518,7 +518,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
@@ -682,7 +681,7 @@ CHECK_CLEANFILES = *.chkexe *.chklog *.clog
# Add libtool shared library version numbers to the HDF5 library
# See libtool versioning documentation online.
LT_VERS_INTERFACE = 6
-LT_VERS_REVISION = 174
+LT_VERS_REVISION = 180
LT_VERS_AGE = 0
# This is our main target
diff --git a/c++/test/CMakeTests.cmake b/c++/test/CMakeTests.cmake
index 1048ee7..c725f69 100644
--- a/c++/test/CMakeTests.cmake
+++ b/c++/test/CMakeTests.cmake
@@ -60,6 +60,7 @@ if (HDF5_TEST_VFD)
-P "${HDF_RESOURCES_DIR}/vfdTest.cmake"
)
set_tests_properties (CPP_VFD-${vfdname}-cpp_testhdf5 PROPERTIES DEPENDS CPP_VFD-${vfdname}-cpp_testhdf5-clear-objects)
+ set_tests_properties (CPP_VFD-${vfdname}-cpp_testhdf5 PROPERTIES TIMEOUT 30)
endif (NOT HDF5_ENABLE_USING_MEMCHECKER)
ENDMACRO (ADD_VFD_TEST)
diff --git a/c++/test/Makefile.in b/c++/test/Makefile.in
index 621618e..49c08e4 100644
--- a/c++/test/Makefile.in
+++ b/c++/test/Makefile.in
@@ -509,7 +509,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/config/cmake/ConfigureChecks.cmake b/config/cmake/ConfigureChecks.cmake
index 360d5b0..9330546 100644
--- a/config/cmake/ConfigureChecks.cmake
+++ b/config/cmake/ConfigureChecks.cmake
@@ -283,9 +283,7 @@ H5MiscConversionTest (H5_SIZEOF_LONG_DOUBLE H5_LDOUBLE_TO_INTEGER_ACCURATE "chec
# integers except 'unsigned long long'. Other HP-UX systems are unknown
# yet. (1/8/05 - SLU)
#
-if (NOT MSVC)
- H5ConversionTests (H5_LDOUBLE_TO_INTEGER_WORKS "Checking IF converting from long double to integers works")
-endif (NOT MSVC)
+H5ConversionTests (H5_LDOUBLE_TO_INTEGER_WORKS "Checking IF converting from long double to integers works")
# -----------------------------------------------------------------------
# Set flag to indicate that the machine can handle conversion from
# integers to long double. (This flag should be set "yes" for all
@@ -363,9 +361,7 @@ endif (H5_LLONG_TO_FP_CAST_WORKS MATCHES ^H5_LLONG_TO_FP_CAST_WORKS$)
# where the last 2 bytes of mantissa are lost when compiler tries to do
# the conversion, and Cygwin where compiler doesn't do rounding correctly.)
#
-if (NOT MSVC)
- H5ConversionTests (H5_ULLONG_TO_LDOUBLE_PRECISION "Checking IF converting unsigned long long to long double with precision")
-endif (NOT MSVC)
+H5ConversionTests (H5_ULLONG_TO_LDOUBLE_PRECISION "Checking IF converting unsigned long long to long double with precision")
# ----------------------------------------------------------------------
# Set the flag to indicate that the machine can handle overflow converting
# all floating-point to all integer types.
diff --git a/config/cmake/ConversionTests.c b/config/cmake/ConversionTests.c
index 0e24954..1ee9842 100644
--- a/config/cmake/ConversionTests.c
+++ b/config/cmake/ConversionTests.c
@@ -2,13 +2,13 @@
int main(void)
{
- float f = 2147483648.0f;
- int i;
+ float f = 2147483648.0f;
+ int i;
- i = (int)f;
+ i = (int)f;
- done:
- exit(0);
+done:
+ exit(0);
}
#endif
@@ -17,19 +17,19 @@ int main(void)
int main(void)
{
- float f = 111.60f;
- double d = 222.55L;
- unsigned long long l1 = (unsigned long long)f;
- unsigned long long l2 = (unsigned long long)d;
- int ret = 0;
-
- if(l1 == 112)
- ret = 1;
- if(l2 == 223)
- ret = 1;
-
- done:
- exit(ret);
+ float f = 111.60f;
+ double d = 222.55L;
+ unsigned long long l1 = (unsigned long long)f;
+ unsigned long long l2 = (unsigned long long)d;
+ int ret = 0;
+
+ if(l1 == 112)
+ ret = 1;
+ if(l2 == 223)
+ ret = 1;
+
+done:
+ exit(ret);
}
#endif
@@ -37,50 +37,55 @@ int main(void)
#ifdef H5_FP_TO_ULLONG_RIGHT_MAXIMUM_TEST
int main(void)
{
- float f = 9701917572145405952.00f;
- double d1 = 9701917572145405952.00L;
- long double d2 = 9701917572145405952.00L;
- double d3 = 2e40L;
- unsigned long long l1 = (unsigned long long)f;
- unsigned long long l2 = (unsigned long long)d1;
- unsigned long long l3 = (unsigned long long)d2;
- unsigned long long l4;
- unsigned long long l5 = 0x7fffffffffffffffULL;
- int ret = 0;
-
- if(l1 <= l5 || l2 <= l5 || l3 <= l5)
- ret = 1;
-
- l4 = (unsigned long long)d3;
- if(l4 <= l5)
- ret = 1;
-
- done:
- exit(ret);
+ float f = 9701917572145405952.00f;
+ double d1 = 9701917572145405952.00L;
+ long double d2 = 9701917572145405952.00L;
+ double d3 = 2e40L;
+ unsigned long long l1 = (unsigned long long)f;
+ unsigned long long l2 = (unsigned long long)d1;
+ unsigned long long l3 = (unsigned long long)d2;
+ unsigned long long l4;
+ unsigned long long l5 = 0x7fffffffffffffffULL;
+ int ret = 0;
+
+ if(l1 <= l5 || l2 <= l5 || l3 <= l5)
+ ret = 1;
+
+ l4 = (unsigned long long)d3;
+ if(l4 <= l5)
+ ret = 1;
+
+done:
+ exit(ret);
}
#endif
#ifdef H5_LDOUBLE_TO_INTEGER_WORKS_TEST
+
+#include <stdlib.h>
+#include <string.h>
+
int main(void)
{
- void *align;
- long double ld = 9701917572145405952.00L;
- unsigned char v1;
- short v2;
- unsigned int v3;
- int ret = 0;
-
- align = (void*) malloc(sizeof(long double));
- memcpy(align, &ld, sizeof(long double));
-
- /*For HU-UX11.00, there's floating exception(core dump) when doing some of casting
- *from 'long double' to integers*/
- v1 = (unsigned char) (*((long double*) align));
- v2 = (short) (*((long double*) align));
- v3 = (unsigned int) (*((long double*) align));
-
- done: exit(ret);
+ void *align;
+ long double ld= 9701917572145405952.00L;
+ unsigned char v1;
+ short v2;
+ unsigned int v3;
+ int ret = 0;
+
+ align = (void*)malloc(sizeof(long double));
+ memcpy(align, &ld, sizeof(long double));
+
+ /*For HU-UX11.00, there's floating exception(core dump) when doing some of casting
+ *from 'long double' to integers*/
+ v1=(unsigned char)(*((long double*)align));
+ v2=(short)(*((long double*)align));
+ v3=(unsigned int)(*((long double*)align));
+
+done:
+ exit(ret);
}
#endif
@@ -88,103 +93,98 @@ int main(void)
#ifdef H5_LDOUBLE_TO_LLONG_ACCURATE_TEST
int main(void)
{
- long double ld = 20041683600089727.779961L;
- long long ll;
- unsigned long long ull;
- unsigned char s[16];
- int ret = 0;
-
- if(sizeof(long double) == 16)
- {
- /*make sure the long double type is the same as the failing type
- *which has 16 bytes in size and 11 bits of exponent. If it is,
- *the bit sequence should be like below. It's not
- *a decent way to check but this info isn't available. */
- memcpy(s, &ld, 16);
- if(s[0]==0x43 && s[1]==0x51 && s[2]==0xcc && s[3]==0xf3 &&
- s[4]==0x85 && s[5]==0xeb && s[6]==0xc8 && s[7]==0xa0 &&
- s[8]==0xbf && s[9]==0xcc && s[10]==0x2a && s[11]==0x3c)
- {
-
- /*slightly adjust the bit sequence (s[8]=0xdf). The converted
- *values will go wild on Mac OS 10.4 and IRIX64 6.5.*/
- s[0]=0x43; s[1]=0x51; s[2]=0xcc; s[3]=0xf3;
- s[4]=0x85; s[5]=0xeb; s[6]=0xc8; s[7]=0xa0;
- s[8]=0xdf; s[9]=0xcc; s[10]=0x2a; s[11]=0x3c;
- s[12]=0x3d; s[13]=0x85; s[14]=0x56; s[15]=0x20;
-
- memcpy(&ld, s, 16);
- ll = (long long)ld;
- ull = (unsigned long long)ld;
-
- if(ll != 20041683600089728 || ull != 20041683600089728)
- ret = 1;
+ long double ld = 20041683600089727.779961L;
+ long long ll;
+ unsigned long long ull;
+ unsigned char s[16];
+ int ret = 0;
+
+ if(sizeof(long double) == 16) {
+ /*make sure the long double type is the same as the failing type
+ *which has 16 bytes in size and 11 bits of exponent. If it is,
+ *the bit sequence should be like below. It's not
+ *a decent way to check but this info isn't available. */
+ memcpy(s, &ld, 16);
+ if(s[0]==0x43 && s[1]==0x51 && s[2]==0xcc && s[3]==0xf3 &&
+ s[4]==0x85 && s[5]==0xeb && s[6]==0xc8 && s[7]==0xa0 &&
+ s[8]==0xbf && s[9]==0xcc && s[10]==0x2a && s[11]==0x3c) {
+
+ /*slightly adjust the bit sequence (s[8]=0xdf). The converted
+ *values will go wild on Mac OS 10.4 and IRIX64 6.5.*/
+ s[0]=0x43; s[1]=0x51; s[2]=0xcc; s[3]=0xf3;
+ s[4]=0x85; s[5]=0xeb; s[6]=0xc8; s[7]=0xa0;
+ s[8]=0xdf; s[9]=0xcc; s[10]=0x2a; s[11]=0x3c;
+ s[12]=0x3d; s[13]=0x85; s[14]=0x56; s[15]=0x20;
+
+ memcpy(&ld, s, 16);
+ ll = (long long)ld;
+ ull = (unsigned long long)ld;
+
+ if(ll != 20041683600089728 || ull != 20041683600089728)
+ ret = 1;
+ }
}
- }
- done:
- exit(ret);
+done:
+ exit(ret);
}
#endif
#ifdef H5_LDOUBLE_TO_UINT_ACCURATE_TEST
int main(void)
{
- long double ld = 2733248032.9183987530L;
- unsigned int i;
- int ret = 0;
+ long double ld = 2733248032.9183987530L;
+ unsigned int i;
+ int ret = 0;
- i = (unsigned int)ld;
- if(i!=2733248032 && i!=2733248031 && i!=2733248033)
- ret = 1;
+ i = (unsigned int)ld;
+ if(i!=2733248032 && i!=2733248031 && i!=2733248033)
+ ret = 1;
- done:
- exit(ret);
+done:
+ exit(ret);
}
#endif
#ifdef H5_LLONG_TO_LDOUBLE_CORRECT_TEST
int main(void)
{
- long double ld;
- long long ll;
- unsigned long long ull;
- unsigned char s[16];
- int flag=0, ret=0;
-
- /*Determine if long double has 16 byte in size, 11 bit exponent, and
- *the bias is 0x3ff */
- if(sizeof(long double) == 16)
- {
- ld = 1.0L;
- memcpy(s, &ld, 16);
- if(s[0]==0x3f && s[1]==0xf0 && s[2]==0x00 && s[3]==0x00 &&
- s[4]==0x00 && s[5]==0x00 && s[6]==0x00 && s[7]==0x00)
- flag = 1;
- }
-
- if(flag==1 && sizeof(long long)==8)
- {
- ll = 0x01ffffffffffffffLL;
- ld = (long double)ll;
- memcpy(s, &ld, 16);
- /*Check if the bit sequence is as supposed to be*/
- if(s[0]!=0x43 || s[1]!=0x7f || s[2]!=0xff || s[3]!=0xff ||
- s[4]!=0xff || s[5]!=0xff || s[6]!=0xff || s[7]!=0xff ||
- s[8]!=0xf0 || s[9]!=0x00 || s[10]!=0x00 || s[11]!=0x00)
- ret = 1;
- }
- if(flag==1 && sizeof(unsigned long long)==8)
- {
- ull = 0x01ffffffffffffffULL;
- ld = (long double)ull;
- memcpy(s, &ld, 16);
- if(s[0]!=0x43 || s[1]!=0x7f || s[2]!=0xff || s[3]!=0xff ||
- s[4]!=0xff || s[5]!=0xff || s[6]!=0xff || s[7]!=0xff ||
- s[8]!=0xf0 || s[9]!=0x00 || s[10]!=0x00 || s[11]!=0x00)
- ret = 1;
- }
- done:
- exit(ret);
+ long double ld;
+ long long ll;
+ unsigned long long ull;
+ unsigned char s[16];
+ int flag=0, ret=0;
+
+ /*Determine if long double has 16 byte in size, 11 bit exponent, and
+ *the bias is 0x3ff */
+ if(sizeof(long double) == 16) {
+ ld = 1.0L;
+ memcpy(s, &ld, 16);
+ if(s[0]==0x3f && s[1]==0xf0 && s[2]==0x00 && s[3]==0x00 &&
+ s[4]==0x00 && s[5]==0x00 && s[6]==0x00 && s[7]==0x00)
+ flag = 1;
+ }
+
+ if(flag==1 && sizeof(long long)==8) {
+ ll = 0x01ffffffffffffffLL;
+ ld = (long double)ll;
+ memcpy(s, &ld, 16);
+ /*Check if the bit sequence is as supposed to be*/
+ if(s[0]!=0x43 || s[1]!=0x7f || s[2]!=0xff || s[3]!=0xff ||
+ s[4]!=0xff || s[5]!=0xff || s[6]!=0xff || s[7]!=0xff ||
+ s[8]!=0xf0 || s[9]!=0x00 || s[10]!=0x00 || s[11]!=0x00)
+ ret = 1;
+ }
+ if(flag==1 && sizeof(unsigned long long)==8) {
+ ull = 0x01ffffffffffffffULL;
+ ld = (long double)ull;
+ memcpy(s, &ld, 16);
+ if(s[0]!=0x43 || s[1]!=0x7f || s[2]!=0xff || s[3]!=0xff ||
+ s[4]!=0xff || s[5]!=0xff || s[6]!=0xff || s[7]!=0xff ||
+ s[8]!=0xf0 || s[9]!=0x00 || s[10]!=0x00 || s[11]!=0x00)
+ ret = 1;
+ }
+done:
+ exit(ret);
}
#endif
@@ -193,11 +193,10 @@ int main(void)
#include <stdlib.h>
#include <string.h>
-typedef struct
-{
- size_t len;
- void *p;
-}hvl_t;
+typedef struct {
+ size_t len;
+ void *p;
+} hvl_t;
#ifdef FC_DUMMY_MAIN
#ifndef FC_DUMMY_MAIN_EQ_F77
@@ -212,32 +211,29 @@ int
main ()
{
- char *chp = "beefs";
- char **chpp = malloc (2 * sizeof (char *));
- char **chpp2;
- hvl_t vl =
- { 12345, (void *) chp};
- hvl_t *vlp;
- hvl_t *vlp2;
-
- memcpy ((void *) ((char *) chpp + 1), &chp, sizeof (char *));
- chpp2 = (char **) ((char *) chpp + 1);
- if (strcmp (*chpp2, chp))
- {
+ char *chp = "beefs";
+ char **chpp = malloc (2 * sizeof (char *));
+ char **chpp2;
+ hvl_t vl = { 12345, (void *) chp };
+ hvl_t *vlp;
+ hvl_t *vlp2;
+
+ memcpy ((void *) ((char *) chpp + 1), &chp, sizeof (char *));
+ chpp2 = (char **) ((char *) chpp + 1);
+ if (strcmp (*chpp2, chp)) {
+ free (chpp);
+ return 1;
+ }
free (chpp);
- return 1;
- }
- free (chpp);
-
- vlp = malloc (2 * sizeof (hvl_t));
- memcpy ((void *) ((char *) vlp + 1), &vl, sizeof (hvl_t));
- vlp2 = (hvl_t *) ((char *) vlp + 1);
- if (vlp2->len != vl.len || vlp2->p != vl.p)
- {
+
+ vlp = malloc (2 * sizeof (hvl_t));
+ memcpy ((void *) ((char *) vlp + 1), &vl, sizeof (hvl_t));
+ vlp2 = (hvl_t *) ((char *) vlp + 1);
+ if (vlp2->len != vl.len || vlp2->p != vl.p) {
+ free (vlp);
+ return 1;
+ }
free (vlp);
- return 1;
- }
- free (vlp);
;
return 0;
@@ -248,77 +244,78 @@ main ()
#ifdef H5_ULLONG_TO_LDOUBLE_PRECISION_TEST
#include <stddef.h>
-
+#include <stdlib.h>
+#include <string.h>
int main(void)
{
- /* General variables */
- int endian;
- int tst_value = 1;
- int ret = 0;
-
- /* For FreeBSD */
- unsigned long long l = 0xa601e80bda85fcefULL;
- long double ld;
- unsigned char *c1, *c2;
- size_t size;
-
- /* For Cygwin */
- unsigned long long l_cyg = 0xfffffffffffffff0ULL;
- long double ld_cyg;
- unsigned char *c2_cyg;
- size_t size_cyg;
-
- /* Determine this system's endianess */
- c1 = (unsigned char*)calloc(1, sizeof(int));
- memcpy((void*)c1, &tst_value, sizeof(int));
- if(c1[0]==1)
- endian = 0; /* little endian */
- else
- endian = 1; /* big endian */
-
- /* For FreeBSD */
- size = sizeof(long double);
- memset(&ld, 0, size);
- ld = (long double)l;
-
- c2 = (unsigned char*)calloc(1, size);
- memcpy((void*)c2, &ld, size);
-
- /* Test if the last 2 bytes of mantissa are lost. Mainly for FreeBSD on Intel
- * architecture(sleipnir) where it happens. */
- /*if(endian==0 && c2[0]==0 && c2[1]==0)*//*little endian*/
- if(endian==0 && c2[0]==0)
- { /*little endian*/
- ret = 1;
- goto done;
- }
-
- /* For Cygwin */
- size_cyg = sizeof(long double);
- memset(&ld_cyg, 0, size);
- ld_cyg = (long double)l_cyg;
-
- c2_cyg = (unsigned char*)calloc(1, size_cyg);
- memcpy((void*)c2_cyg, &ld_cyg, size_cyg);
-
- /* Test if the last 4 bytes(roughly) of mantissa are rounded up. Mainly for Cygwin
- * where the values like 0xffffffffffffffff, 0xfffffffffffffffe, ...,
- * 0xfffffffffffff000 ... are rounded up as 0x0000403f8000000000000000
- * instead of 0x0000403effffffffffffffff, 0x0000403efffffffffffffffe, ...,
- * 0x0000403efffffffffffff000 ...
- */
- if(endian==0 && c2_cyg[0]==0 && c2_cyg[1]==0 && c2_cyg[2]==0 && c2_cyg[3]==0)
- ret = 1;
-
- done:
- if(c1)
- free(c1);
- if(c2)
- free(c2);
- if(c2_cyg)
- free(c2_cyg);
- exit(ret);
+ /* General variables */
+ int endian;
+ int tst_value = 1;
+ int ret = 0;
+
+ /* For FreeBSD */
+ unsigned long long l = 0xa601e80bda85fcefULL;
+ long double ld;
+ unsigned char *c1, *c2;
+ size_t size;
+
+ /* For Cygwin */
+ unsigned long long l_cyg = 0xfffffffffffffff0ULL;
+ long double ld_cyg;
+ unsigned char *c2_cyg;
+ size_t size_cyg;
+
+
+ /* Determine this system's endianess */
+ c1 = (unsigned char*)calloc(1, sizeof(int));
+ memcpy((void*)c1, &tst_value, sizeof(int));
+ if(c1[0]==1)
+ endian = 0; /* little endian */
+ else
+ endian = 1; /* big endian */
+
+ /* For FreeBSD */
+ size = sizeof(long double);
+ memset(&ld, 0, size);
+ ld = (long double)l;
+
+ c2 = (unsigned char*)calloc(1, size);
+ memcpy((void*)c2, &ld, size);
+
+ /* Test if the last 2 bytes of mantissa are lost. Mainly for FreeBSD on Intel
+ * architecture(sleipnir) where it happens. */
+ /*if(endian==0 && c2[0]==0 && c2[1]==0)*/ /*little endian*/
+ if(endian==0 && c2[0]==0) { /*little endian*/
+ ret = 1;
+ goto done;
+ }
+
+ /* For Cygwin */
+ size_cyg = sizeof(long double);
+ memset(&ld_cyg, 0, size);
+ ld_cyg = (long double)l_cyg;
+
+ c2_cyg = (unsigned char*)calloc(1, size_cyg);
+ memcpy((void*)c2_cyg, &ld_cyg, size_cyg);
+
+ /* Test if the last 4 bytes(roughly) of mantissa are rounded up. Mainly for Cygwin
+ * where the values like 0xffffffffffffffff, 0xfffffffffffffffe, ...,
+ * 0xfffffffffffff000 ... are rounded up as 0x0000403f8000000000000000
+ * instead of 0x0000403effffffffffffffff, 0x0000403efffffffffffffffe, ...,
+ * 0x0000403efffffffffffff000 ...
+ */
+ if(endian==0 && c2_cyg[0]==0 && c2_cyg[1]==0 && c2_cyg[2]==0 && c2_cyg[3]==0)
+ ret = 1;
+
+done:
+ if(c1)
+ free(c1);
+ if(c2)
+ free(c2);
+ if(c2_cyg)
+ free(c2_cyg);
+ exit(ret);
}
#endif
@@ -419,4 +416,5 @@ int main(void)
done:
exit(ret);
}
+}
#endif
diff --git a/config/cmake/H5pubconf.h.in b/config/cmake/H5pubconf.h.in
index 6be0903..8235c54 100644
--- a/config/cmake/H5pubconf.h.in
+++ b/config/cmake/H5pubconf.h.in
@@ -95,6 +95,9 @@
/* Define to 1 if you have the `alarm' function. */
#cmakedefine H5_HAVE_ALARM @H5_HAVE_ALARM@
+/* Define to 1 if you have the `asprintf' function. */
+#cmakedefine H5_HAVE_ASPRINTF @H5_HAVE_ASPRINTF@
+
/* Define if the __attribute__(()) extension is present */
#cmakedefine H5_HAVE_ATTRIBUTE @H5_HAVE_ATTRIBUTE@
@@ -293,9 +296,6 @@
/* Define to 1 if you have the <mpe.h> header file. */
#cmakedefine H5_HAVE_MPE_H @H5_HAVE_MPE_H@
-/* Define if MPI_File_get_size works correctly */
-#cmakedefine H5_HAVE_MPI_GET_SIZE @H5_HAVE_MPI_GET_SIZE@
-
/* Define if `MPI_Comm_c2f' and `MPI_Comm_f2c' exists */
#cmakedefine H5_HAVE_MPI_MULTI_LANG_Comm @H5_HAVE_MPI_MULTI_LANG_Comm@
@@ -317,7 +317,7 @@
/* Define to 1 if you have the `rand_r' function. */
#cmakedefine H5_HAVE_RAND_R @H5_HAVE_RAND_R@
-/* Define to 1 if you have the `sigsetjmp' function. */
+/* Define to 1 if you have the `setjmp' function. */
#cmakedefine H5_HAVE_SETJMP @H5_HAVE_SETJMP@
/* Define to 1 if you have the <setjmp.h> header file. */
@@ -534,10 +534,6 @@
/* Define if the metadata trace file code is to be compiled in */
#cmakedefine H5_METADATA_TRACE_FILE @H5_METADATA_TRACE_FILE@
-/* Define if your system's `MPI_File_set_size' function works for files over
- 2GB. */
-#cmakedefine H5_MPI_FILE_SET_SIZE_BIG @H5_MPI_FILE_SET_SIZE_BIG@
-
/* Define if we can violate pointer alignment restrictions */
#cmakedefine H5_NO_ALIGNMENT_RESTRICTIONS @H5_NO_ALIGNMENT_RESTRICTIONS@
diff --git a/config/cmake/HDF5Macros.cmake b/config/cmake/HDF5Macros.cmake
index d0379db..baa18c0 100644
--- a/config/cmake/HDF5Macros.cmake
+++ b/config/cmake/HDF5Macros.cmake
@@ -20,7 +20,7 @@ MACRO (H5_SET_LIB_OPTIONS libtarget libname libtype)
if (APPLE)
option (HDF5_BUILD_WITH_INSTALL_NAME "Build with library install_name set to the installation path" OFF)
if (HDF5_BUILD_WITH_INSTALL_NAME)
- SET_TARGET_PROPERTIES(${libtarget} PROPERTIES
+ set_target_properties (${libtarget} PROPERTIES
LINK_FLAGS "-current_version ${HDF5_PACKAGE_VERSION} -compatibility_version ${HDF5_PACKAGE_VERSION}"
INSTALL_NAME_DIR "${CMAKE_INSTALL_PREFIX}/lib"
BUILD_WITH_INSTALL_RPATH ${HDF5_BUILD_WITH_INSTALL_NAME}
diff --git a/config/lt_vers.am b/config/lt_vers.am
index 5537f6f..1d1ae4b 100644
--- a/config/lt_vers.am
+++ b/config/lt_vers.am
@@ -17,7 +17,7 @@
# Add libtool shared library version numbers to the HDF5 library
# See libtool versioning documentation online.
LT_VERS_INTERFACE = 6
-LT_VERS_REVISION = 174
+LT_VERS_REVISION = 180
LT_VERS_AGE = 0
## If the API changes *at all*, increment LT_VERS_INTERFACE and
diff --git a/configure b/configure
index 9a57cf2..ef90418 100755
--- a/configure
+++ b/configure
@@ -1,7 +1,7 @@
#! /bin/sh
# From configure.ac Id: configure.ac 22697 2012-08-19 14:35:47Z hdftest .
# Guess values for system-dependent variables and create Makefiles.
-# Generated by GNU Autoconf 2.69 for HDF5 1.9.184-swmr0.
+# Generated by GNU Autoconf 2.69 for HDF5 1.9.190-swmr0.
#
# Report bugs to <help@hdfgroup.org>.
#
@@ -591,8 +591,8 @@ MAKEFLAGS=
# Identity of this package.
PACKAGE_NAME='HDF5'
PACKAGE_TARNAME='hdf5'
-PACKAGE_VERSION='1.9.184-swmr0'
-PACKAGE_STRING='HDF5 1.9.184-swmr0'
+PACKAGE_VERSION='1.9.190-swmr0'
+PACKAGE_STRING='HDF5 1.9.190-swmr0'
PACKAGE_BUGREPORT='help@hdfgroup.org'
PACKAGE_URL=''
@@ -675,7 +675,6 @@ USE_FILTER_NBIT
USE_FILTER_FLETCHER32
USE_FILTER_SHUFFLE
FILTERS
-MPI_GET_SIZE
ADD_PARALLEL_FILES
USINGMEMCHECKER
CLEARFILEBUF
@@ -739,6 +738,10 @@ FORTRAN_DEFAULT_REALisDBLE_F_FALSE
FORTRAN_DEFAULT_REALisDBLE_F_TRUE
FORTRAN_2003_CONDITIONAL_F_FALSE
FORTRAN_2003_CONDITIONAL_F_TRUE
+FORTRAN_HAVE_STORAGE_SIZE_FALSE
+FORTRAN_HAVE_STORAGE_SIZE_TRUE
+FORTRAN_HAVE_C_SIZEOF_FALSE
+FORTRAN_HAVE_C_SIZEOF_TRUE
FORTRAN_HAVE_SIZEOF_FALSE
FORTRAN_HAVE_SIZEOF_TRUE
FCLIBS
@@ -918,7 +921,6 @@ enable_clear_file_buffers
enable_using_memchecker
enable_parallel
with_mpe
-enable_mpi_size
enable_filters
with_default_vfd
enable_direct_vfd
@@ -1487,7 +1489,7 @@ if test "$ac_init_help" = "long"; then
# Omit some internal or obsolete options to make the list less imposing.
# This message is too long to be a string in the A/UX 3.1 sh.
cat <<_ACEOF
-\`configure' configures HDF5 1.9.184-swmr0 to adapt to many kinds of systems.
+\`configure' configures HDF5 1.9.190-swmr0 to adapt to many kinds of systems.
Usage: $0 [OPTION]... [VAR=VALUE]...
@@ -1557,7 +1559,7 @@ fi
if test -n "$ac_init_help"; then
case $ac_init_help in
- short | recursive ) echo "Configuration of HDF5 1.9.184-swmr0:";;
+ short | recursive ) echo "Configuration of HDF5 1.9.190-swmr0:";;
esac
cat <<\_ACEOF
@@ -1614,11 +1616,6 @@ Optional Features:
picky about it's memory operations and also disables
the library's free space manager code. Default=no.
--enable-parallel Search for MPI-IO and MPI support files
- --enable-mpi-size Some systems (only SGI Altix Propack 4 so far)
- return wrong value from MPI_File_get_size. By
- disabling this function, the library will replace it
- with stat to get the correct file size.
- [default=yes]
--enable-filters=all Turn on all internal I/O filters. One may also
specify a comma-separated list of filters or the
word no. The default is all internal I/O filters.
@@ -1755,7 +1752,7 @@ fi
test -n "$ac_init_help" && exit $ac_status
if $ac_init_version; then
cat <<\_ACEOF
-HDF5 configure 1.9.184-swmr0
+HDF5 configure 1.9.190-swmr0
generated by GNU Autoconf 2.69
Copyright (C) 2012 Free Software Foundation, Inc.
@@ -2849,7 +2846,7 @@ cat >config.log <<_ACEOF
This file contains any messages produced by compilers while
running configure, to aid debugging if configure makes a mistake.
-It was created by HDF5 $as_me 1.9.184-swmr0, which was
+It was created by HDF5 $as_me 1.9.190-swmr0, which was
generated by GNU Autoconf 2.69. Invocation command line was
$ $0 $@
@@ -3720,7 +3717,7 @@ fi
# Define the identity of the package.
PACKAGE='hdf5'
- VERSION='1.9.184-swmr0'
+ VERSION='1.9.190-swmr0'
cat >>confdefs.h <<_ACEOF
@@ -5360,6 +5357,8 @@ else
fi
HAVE_SIZEOF="no"
+HAVE_C_SIZEOF="no"
+HAVE_STORAGE_SIZE="no"
FORTRAN_DEFAULT_REALisDBLE="no"
if test "X$HDF_FORTRAN" = "Xyes"; then
@@ -6699,6 +6698,71 @@ rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
fi
+ ## See if the fortran compiler supports the intrinsic function "C_SIZEOF"
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Fortran compiler supports intrinsic C_SIZEOF" >&5
+$as_echo_n "checking if Fortran compiler supports intrinsic C_SIZEOF... " >&6; }
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ cat > conftest.$ac_ext <<_ACEOF
+
+ PROGRAM main
+ USE ISO_C_BINDING
+ INTEGER(C_INT) :: a
+ INTEGER(C_SIZE_T) :: result
+ result = C_SIZEOF(a)
+ END PROGRAM
+
+_ACEOF
+if ac_fn_fc_try_run "$LINENO"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ HAVE_C_SIZEOF="yes"
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
+ ## See if the fortran compiler supports the intrinsic function "STORAGE_SIZE"
+
+ { $as_echo "$as_me:${as_lineno-$LINENO}: checking if Fortran compiler supports intrinsic STORAGE_SIZE" >&5
+$as_echo_n "checking if Fortran compiler supports intrinsic STORAGE_SIZE... " >&6; }
+ if test "$cross_compiling" = yes; then :
+ { { $as_echo "$as_me:${as_lineno-$LINENO}: error: in \`$ac_pwd':" >&5
+$as_echo "$as_me: error: in \`$ac_pwd':" >&2;}
+as_fn_error $? "cannot run test program while cross compiling
+See \`config.log' for more details" "$LINENO" 5; }
+else
+ cat > conftest.$ac_ext <<_ACEOF
+
+ PROGRAM main
+ INTEGER :: a
+ INTEGER :: result
+ result = STORAGE_SIZE(a)
+ END PROGRAM
+
+_ACEOF
+if ac_fn_fc_try_run "$LINENO"; then :
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
+$as_echo "yes" >&6; }
+ HAVE_STORAGE_SIZE="yes"
+else
+ { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
+$as_echo "no" >&6; }
+fi
+rm -f core *.core core.conftest.* gmon.out bb.out conftest$ac_exeext \
+ conftest.$ac_objext conftest.beam conftest.$ac_ext
+fi
+
+
## Check to see if -r8 was specified to determine if we need to
## compile the DOUBLE PRECISION interfaces.
@@ -6809,6 +6873,22 @@ else
FORTRAN_HAVE_SIZEOF_FALSE=
fi
+ if test "X$HAVE_C_SIZEOF" = "Xyes"; then
+ FORTRAN_HAVE_C_SIZEOF_TRUE=
+ FORTRAN_HAVE_C_SIZEOF_FALSE='#'
+else
+ FORTRAN_HAVE_C_SIZEOF_TRUE='#'
+ FORTRAN_HAVE_C_SIZEOF_FALSE=
+fi
+
+ if test "X$HAVE_STORAGE_SIZE" = "Xyes"; then
+ FORTRAN_HAVE_STORAGE_SIZE_TRUE=
+ FORTRAN_HAVE_STORAGE_SIZE_FALSE='#'
+else
+ FORTRAN_HAVE_STORAGE_SIZE_TRUE='#'
+ FORTRAN_HAVE_STORAGE_SIZE_FALSE=
+fi
+
if test "X$HAVE_FORTRAN_2003" = "Xyes"; then
FORTRAN_2003_CONDITIONAL_F_TRUE=
FORTRAN_2003_CONDITIONAL_F_FALSE='#'
@@ -29146,65 +29226,6 @@ fi
$as_echo "#define HAVE_MPE 1" >>confdefs.h
fi
-
- ## ----------------------------------------------------------------------
- ## Set the flag to indicate that the MPI_File_set_size() function
- ## works with files over 2GB, unless it's already set in the cache.
- ## (This flag should be set for all machines, except for ASCI Red, where
- ## the cache value is set in it's config file)
- ##
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI_File_set_size works for files over 2GB" >&5
-$as_echo_n "checking if MPI_File_set_size works for files over 2GB... " >&6; }
- if ${hdf5_cv_mpi_file_set_size_big+:} false; then :
- $as_echo_n "(cached) " >&6
-else
- hdf5_cv_mpi_file_set_size_big=yes
-fi
-
-
- if test ${hdf5_cv_mpi_file_set_size_big} = "yes"; then
-
-$as_echo "#define MPI_FILE_SET_SIZE_BIG 1" >>confdefs.h
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- else
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- fi
-
- ## ----------------------------------------------------------------------
- ## Set the flag to indicate that the MPI_File_get_size() function
- ## works. The default is enabled unless the user knows the function
- ## doesn't work on the system and disables it. (This flag should be set
- ## for all machines except for SGI Altix Propack 4 where the function
- ## doesn't return correct file size.)
- ##
- # Check whether --enable-mpi-size was given.
-if test "${enable_mpi_size+set}" = set; then :
- enableval=$enable_mpi_size; MPI_GET_SIZE=$enableval
-fi
-
-
- { $as_echo "$as_me:${as_lineno-$LINENO}: checking if MPI_File_get_size is enabled" >&5
-$as_echo_n "checking if MPI_File_get_size is enabled... " >&6; }
-
-
- case "X-$MPI_GET_SIZE" in
- X-no)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: no" >&5
-$as_echo "no" >&6; }
- MPI_GET_SIZE=no
- ;;
- X-yes|*)
- { $as_echo "$as_me:${as_lineno-$LINENO}: result: yes" >&5
-$as_echo "yes" >&6; }
- MPI_GET_SIZE=yes
-
-$as_echo "#define HAVE_MPI_GET_SIZE 1" >>confdefs.h
-
- ;;
- esac
fi
## ----------------------------------------------------------------------
@@ -31702,7 +31723,7 @@ Usage: $0 [OPTIONS]
Report bugs to <bug-libtool@gnu.org>."
lt_cl_version="\
-HDF5 config.lt 1.9.184-swmr0
+HDF5 config.lt 1.9.190-swmr0
configured by $0, generated by GNU Autoconf 2.69.
Copyright (C) 2011 Free Software Foundation, Inc.
@@ -33382,6 +33403,14 @@ if test -z "${FORTRAN_HAVE_SIZEOF_TRUE}" && test -z "${FORTRAN_HAVE_SIZEOF_FALSE
as_fn_error $? "conditional \"FORTRAN_HAVE_SIZEOF\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
fi
+if test -z "${FORTRAN_HAVE_C_SIZEOF_TRUE}" && test -z "${FORTRAN_HAVE_C_SIZEOF_FALSE}"; then
+ as_fn_error $? "conditional \"FORTRAN_HAVE_C_SIZEOF\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
+if test -z "${FORTRAN_HAVE_STORAGE_SIZE_TRUE}" && test -z "${FORTRAN_HAVE_STORAGE_SIZE_FALSE}"; then
+ as_fn_error $? "conditional \"FORTRAN_HAVE_STORAGE_SIZE\" was never defined.
+Usually this means the macro was only invoked conditionally." "$LINENO" 5
+fi
if test -z "${FORTRAN_2003_CONDITIONAL_F_TRUE}" && test -z "${FORTRAN_2003_CONDITIONAL_F_FALSE}"; then
as_fn_error $? "conditional \"FORTRAN_2003_CONDITIONAL_F\" was never defined.
Usually this means the macro was only invoked conditionally." "$LINENO" 5
@@ -33836,7 +33865,7 @@ cat >>$CONFIG_STATUS <<\_ACEOF || ac_write_fail=1
# report actual input values of CONFIG_FILES etc. instead of their
# values after options handling.
ac_log="
-This file was extended by HDF5 $as_me 1.9.184-swmr0, which was
+This file was extended by HDF5 $as_me 1.9.190-swmr0, which was
generated by GNU Autoconf 2.69. Invocation command line was
CONFIG_FILES = $CONFIG_FILES
@@ -33902,7 +33931,7 @@ _ACEOF
cat >>$CONFIG_STATUS <<_ACEOF || ac_write_fail=1
ac_cs_config="`$as_echo "$ac_configure_args" | sed 's/^ //; s/[\\""\`\$]/\\\\&/g'`"
ac_cs_version="\\
-HDF5 config.status 1.9.184-swmr0
+HDF5 config.status 1.9.190-swmr0
configured by $0, generated by GNU Autoconf 2.69,
with options \\"\$ac_cs_config\\"
diff --git a/configure.ac b/configure.ac
index 407a0ce6..1ee9bb4 100644
--- a/configure.ac
+++ b/configure.ac
@@ -26,7 +26,7 @@ AC_PREREQ([2.69])
## NOTE: Do not forget to change the version number here when we do a
## release!!!
##
-AC_INIT([HDF5], [1.9.184-swmr0], [help@hdfgroup.org])
+AC_INIT([HDF5], [1.9.190-swmr0], [help@hdfgroup.org])
AC_CONFIG_SRCDIR([src/H5.c])
AC_CONFIG_HEADER([src/H5config.h])
@@ -403,6 +403,8 @@ else
fi
HAVE_SIZEOF="no"
+HAVE_C_SIZEOF="no"
+HAVE_STORAGE_SIZE="no"
FORTRAN_DEFAULT_REALisDBLE="no"
if test "X$HDF_FORTRAN" = "Xyes"; then
@@ -483,6 +485,33 @@ if test "X$HDF_FORTRAN" = "Xyes"; then
HAVE_SIZEOF="yes"],
[AC_MSG_RESULT([no])])
+ ## See if the fortran compiler supports the intrinsic function "C_SIZEOF"
+
+ AC_MSG_CHECKING([if Fortran compiler supports intrinsic C_SIZEOF])
+ AC_TRY_RUN([
+ PROGRAM main
+ USE ISO_C_BINDING
+ INTEGER(C_INT) :: a
+ INTEGER(C_SIZE_T) :: result
+ result = C_SIZEOF(a)
+ END PROGRAM
+ ], [AC_MSG_RESULT([yes])
+ HAVE_C_SIZEOF="yes"],
+ [AC_MSG_RESULT([no])])
+
+ ## See if the fortran compiler supports the intrinsic function "STORAGE_SIZE"
+
+ AC_MSG_CHECKING([if Fortran compiler supports intrinsic STORAGE_SIZE])
+ AC_TRY_RUN([
+ PROGRAM main
+ INTEGER :: a
+ INTEGER :: result
+ result = STORAGE_SIZE(a)
+ END PROGRAM
+ ], [AC_MSG_RESULT([yes])
+ HAVE_STORAGE_SIZE="yes"],
+ [AC_MSG_RESULT([no])])
+
## Check to see if -r8 was specified to determine if we need to
## compile the DOUBLE PRECISION interfaces.
@@ -552,6 +581,8 @@ fi
AC_LANG_POP(Fortran)
AM_CONDITIONAL([FORTRAN_HAVE_SIZEOF], [test "X$HAVE_SIZEOF" = "Xyes"])
+AM_CONDITIONAL([FORTRAN_HAVE_C_SIZEOF], [test "X$HAVE_C_SIZEOF" = "Xyes"])
+AM_CONDITIONAL([FORTRAN_HAVE_STORAGE_SIZE], [test "X$HAVE_STORAGE_SIZE" = "Xyes"])
AM_CONDITIONAL([FORTRAN_2003_CONDITIONAL_F], [test "X$HAVE_FORTRAN_2003" = "Xyes"])
AM_CONDITIONAL([FORTRAN_DEFAULT_REALisDBLE_F], [test "X$FORTRAN_DEFAULT_REALisDBLE" = "Xyes"])
@@ -2864,54 +2895,6 @@ if test -n "$PARALLEL"; then
if test "X-$MPE" = "X-yes"; then
AC_DEFINE([HAVE_MPE], [1], [Define if we have MPE support])
fi
-
- ## ----------------------------------------------------------------------
- ## Set the flag to indicate that the MPI_File_set_size() function
- ## works with files over 2GB, unless it's already set in the cache.
- ## (This flag should be set for all machines, except for ASCI Red, where
- ## the cache value is set in it's config file)
- ##
- AC_MSG_CHECKING([if MPI_File_set_size works for files over 2GB])
- AC_CACHE_VAL([hdf5_cv_mpi_file_set_size_big], [hdf5_cv_mpi_file_set_size_big=yes])
-
- if test ${hdf5_cv_mpi_file_set_size_big} = "yes"; then
- AC_DEFINE([MPI_FILE_SET_SIZE_BIG], [1],
- [Define if your system's `MPI_File_set_size' function works for files over 2GB.])
- AC_MSG_RESULT([yes])
- else
- AC_MSG_RESULT([no])
- fi
-
- ## ----------------------------------------------------------------------
- ## Set the flag to indicate that the MPI_File_get_size() function
- ## works. The default is enabled unless the user knows the function
- ## doesn't work on the system and disables it. (This flag should be set
- ## for all machines except for SGI Altix Propack 4 where the function
- ## doesn't return correct file size.)
- ##
- AC_ARG_ENABLE([mpi-size],
- [AS_HELP_STRING([--enable-mpi-size],
- [Some systems (only SGI Altix Propack 4 so far) return wrong value
- from MPI_File_get_size. By disabling this function, the library
- will replace it with stat to get the correct file size.
- [default=yes]])],
- [MPI_GET_SIZE=$enableval])
-
- AC_MSG_CHECKING([if MPI_File_get_size is enabled])
-
- AC_SUBST(MPI_GET_SIZE)
- case "X-$MPI_GET_SIZE" in
- X-no)
- AC_MSG_RESULT([no])
- MPI_GET_SIZE=no
- ;;
- X-yes|*)
- AC_MSG_RESULT([yes])
- MPI_GET_SIZE=yes
- AC_DEFINE([HAVE_MPI_GET_SIZE], [1],
- [Define if MPI_File_get_size works correctly])
- ;;
- esac
fi
## ----------------------------------------------------------------------
diff --git a/examples/Makefile.in b/examples/Makefile.in
index 02db80c..71a9b4c 100644
--- a/examples/Makefile.in
+++ b/examples/Makefile.in
@@ -452,7 +452,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/fortran/Makefile.in b/fortran/Makefile.in
index b1c7f6a..4d8abdc 100644
--- a/fortran/Makefile.in
+++ b/fortran/Makefile.in
@@ -508,7 +508,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/fortran/examples/Makefile.in b/fortran/examples/Makefile.in
index 890d52a..b9b5efb 100644
--- a/fortran/examples/Makefile.in
+++ b/fortran/examples/Makefile.in
@@ -460,7 +460,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/fortran/src/CMakeLists.txt b/fortran/src/CMakeLists.txt
index 723e930..66f6634 100644
--- a/fortran/src/CMakeLists.txt
+++ b/fortran/src/CMakeLists.txt
@@ -19,19 +19,28 @@ endif (WIN32)
#-----------------------------------------------------------------------------
# Setup the Fortran auto-detection utilities
-# H5test_kind(_SIZEOF).f90 used to generate H5fortran_detect.f90
+# H5test_kind(_SIZEOF,_STORAGE_SIZE).f90 used to generate H5fortran_detect.f90
# H5fortran_detect.f90 used to generate H5fort_type_defines.h
# H5fort_type_defines.h used to generate H5f90i_gen.h + H5fortran_types.f90
#-----------------------------------------------------------------------------
-if (FORTRAN_HAVE_SIZEOF)
+if (FORTRAN_HAVE_STORAGE_SIZE)
add_executable (H5test_FortranHavekind
- ${HDF5_F90_SRC_SOURCE_DIR}/H5test_kind_SIZEOF.f90
+ ${HDF5_F90_SRC_SOURCE_DIR}/H5test_kind_STORAGE_SIZE.f90
)
-else (FORTRAN_HAVE_SIZEOF)
- add_executable (H5test_FortranHavekind
- ${HDF5_F90_SRC_SOURCE_DIR}/H5test_kind.f90
- )
-endif (FORTRAN_HAVE_SIZEOF)
+ set (H5_TEST_KIND_NAME "h5test_kind_storage_size_mod")
+else (FORTRAN_HAVE_STORAGE_SIZE)
+ if (FORTRAN_HAVE_SIZEOF)
+ add_executable (H5test_FortranHavekind
+ ${HDF5_F90_SRC_SOURCE_DIR}/H5test_kind_SIZEOF.f90
+ )
+ set (H5_TEST_KIND_NAME "h5test_kind_sizeof_mod")
+ else (FORTRAN_HAVE_SIZEOF)
+ add_executable (H5test_FortranHavekind
+ ${HDF5_F90_SRC_SOURCE_DIR}/H5test_kind.f90
+ )
+ set (H5_TEST_KIND_NAME "h5test_kind_mod")
+ endif (FORTRAN_HAVE_SIZEOF)
+endif (FORTRAN_HAVE_STORAGE_SIZE)
if (WIN32 AND MSVC)
if (BUILD_SHARED_LIBS)
set_target_properties (H5test_FortranHavekind
@@ -270,7 +279,7 @@ if (WIN32)
install (
FILES
${CMAKE_Fortran_MODULE_DIRECTORY}/\${BUILD_TYPE}/h5fortran_types.mod
- ${CMAKE_Fortran_MODULE_DIRECTORY}/\${BUILD_TYPE}/h5test_kind_sizeof_mod.mod
+ ${CMAKE_Fortran_MODULE_DIRECTORY}/\${BUILD_TYPE}/${H5_TEST_KIND_NAME}.mod
${CMAKE_Fortran_MODULE_DIRECTORY}/\${BUILD_TYPE}/hdf5.mod
${CMAKE_Fortran_MODULE_DIRECTORY}/\${BUILD_TYPE}/h5global.mod
${CMAKE_Fortran_MODULE_DIRECTORY}/\${BUILD_TYPE}/h5a.mod
@@ -307,6 +316,7 @@ else (WIN32)
install (
FILES
${CMAKE_Fortran_MODULE_DIRECTORY}/h5fortran_types.mod
+ ${CMAKE_Fortran_MODULE_DIRECTORY}/${H5_TEST_KIND_NAME}.mod
${CMAKE_Fortran_MODULE_DIRECTORY}/hdf5.mod
${CMAKE_Fortran_MODULE_DIRECTORY}/h5global.mod
${CMAKE_Fortran_MODULE_DIRECTORY}/h5f.mod
diff --git a/fortran/src/H5test_kind.f90 b/fortran/src/H5test_kind.f90
index 3182853..1a1a0ec 100644
--- a/fortran/src/H5test_kind.f90
+++ b/fortran/src/H5test_kind.f90
@@ -23,18 +23,18 @@
!
! 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. *
+! 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. *
! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
!
! AUTHOR
diff --git a/fortran/src/H5test_kind_SIZEOF.f90 b/fortran/src/H5test_kind_SIZEOF.f90
index 7a58b0e..468086a 100644
--- a/fortran/src/H5test_kind_SIZEOF.f90
+++ b/fortran/src/H5test_kind_SIZEOF.f90
@@ -24,18 +24,18 @@
!
! 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. *
+! 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. *
! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
!
! AUTHOR
diff --git a/fortran/src/H5test_kind_STORAGE_SIZE.f90 b/fortran/src/H5test_kind_STORAGE_SIZE.f90
new file mode 100644
index 0000000..89c904c
--- /dev/null
+++ b/fortran/src/H5test_kind_STORAGE_SIZE.f90
@@ -0,0 +1,230 @@
+!****p* Program/H5test_kind_STORAGE_SIZE
+!
+! NAME
+! Executable: H5test_kind
+!
+! FILE
+! fortran/src/H5test_kind_STORAGE_SIZE.f90
+!
+! PURPOSE
+! This stand alone program is used at build time to generate the program
+! H5fortran_detect.f90. It cycles through all the available KIND parameters for
+! integers and reals. The appropriate program and subroutines are then generated
+! depending on which of the KIND values are found.
+!
+! NOTES
+! This program is used in place of H5test_kind.f90 or H5test_kind_SIZEOF.f90 when
+! the Fortran 2008 intrinsic function STORAGE_SIZE is available. It generates code
+! that makes use of STORAGE_SIZE in H5fortran_detect.f90, which will be standard
+! compliant. This program is the preferred method.
+!
+! The availability of STORAGE_SIZE is checked at configure time and the TRUE/FALSE
+! condition is set in the configure variable "FORTRAN_HAVE_STORAGE_SIZE".
+!
+! The use of C_SIZOF(X) is not used since the argument X must be an interoperable
+! data entity.
+!
+! 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. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+! AUTHOR
+! M. Scot Breitenfeld
+!
+!*****
+
+PROGRAM test_kind
+ IMPLICIT NONE
+ INTEGER :: i, j, ii, ir, last, ikind_numbers(10), rkind_numbers(10)
+ INTEGER :: ji, jr, jd
+ last = -1
+ ii = 0
+
+ ikind_numbers = 0
+ rkind_numbers = 0
+
+ DO i = 1,100
+ j = SELECTED_INT_KIND(i)
+ IF(j .NE. last) THEN
+ IF(last .NE. -1) THEN
+ ii = ii + 1
+ ikind_numbers(ii) = last
+ ENDIF
+ last = j
+ IF(j .EQ. -1) EXIT
+ ENDIF
+ ENDDO
+
+ last = -1
+ ir = 0
+ DO i = 1,100
+ j = SELECTED_REAL_KIND(i)
+ IF(j .NE. last) THEN
+ IF(last .NE. -1) THEN
+ ir = ir + 1
+ rkind_numbers(ir) = last
+ ENDIF
+ last = j
+ IF(j .EQ. -1) EXIT
+ ENDIF
+ ENDDO
+
+! Generate program information:
+
+WRITE(*,'(40(A,/))') &
+'!****h* ROBODoc/H5fortran_detect.f90',&
+'!',&
+'! NAME',&
+'! H5fortran_detect',&
+'! ',&
+'! PURPOSE',&
+'! This stand alone program is used at build time to generate the header file',&
+'! H5fort_type_defines.h. The source code itself was automatically generated by',&
+'! the program H5test_kind_STORAGE_SIZE.f90',&
+'!',&
+'! NOTES',&
+'! This source code makes use of the Fortran intrinsic function STORAGE_SIZE because',&
+'! the availability of the intrinsic function was determined to be available at',&
+'! configure time',&
+'!',&
+'! 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. *',&
+'! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *',&
+'!',&
+'! AUTHOR',&
+'! H5test_kind_C_SIZEOF.f90',&
+'!',&
+'!*****'
+
+! GENERATE A PROGRAM
+!
+! (a) Generate the module
+
+ WRITE(*,*) "MODULE H5test_kind_STORAGE_SIZE_mod"
+ WRITE(*,*) "USE ISO_C_BINDING"
+ WRITE(*,*) "IMPLICIT NONE"
+ WRITE(*,*) "CONTAINS"
+ j = 0
+ ji = KIND(1)
+ WRITE(*, "("" SUBROUTINE i"", i2.2,""()"")") j
+ WRITE(*,*)" IMPLICIT NONE"
+ WRITE(*,*)" INTEGER :: a"
+ WRITE(*,*)" INTEGER(C_SIZE_T) :: a_size"
+ WRITE(*,*)" CHARACTER(LEN=2) :: ichr2, jchr2"
+ WRITE(*,*)" a_size = STORAGE_SIZE(a, c_size_t)/STORAGE_SIZE(c_char_'a',c_size_t)"
+ WRITE(*,*)" WRITE(ichr2,'(I2)') a_size"
+ WRITE(*,'(A,I0)')" WRITE(jchr2,'(I2)') ",ji
+ WRITE(*,'(A)')' WRITE(*,*) "#define H5_FORTRAN_HAS_NATIVE_"'// &
+ "//TRIM(ADJUSTL(ichr2))//"//'"_KIND "'//"//ADJUSTL(jchr2)"
+ WRITE(*,*)" RETURN"
+ WRITE(*,*)"END SUBROUTINE"
+ jr = 0
+ j = KIND(1.0)
+ WRITE(*, "("" SUBROUTINE r"", i2.2,""()"")") jr
+ WRITE(*,*)" IMPLICIT NONE"
+ WRITE(*,*)" REAL :: a"
+ WRITE(*,*)" INTEGER(C_SIZE_T) :: a_size"
+ WRITE(*,*)" CHARACTER(LEN=2) :: ichr2, jchr2"
+ WRITE(*,*)" a_size = STORAGE_SIZE(a, c_size_t)/STORAGE_SIZE(c_char_'a',c_size_t)"
+ WRITE(*,*)" WRITE(ichr2,'(I2)') a_size"
+ WRITE(*,'(A,I0)')" WRITE(jchr2,'(I2)') ",j
+ WRITE(*,'(A)')' WRITE(*,*) "#define H5_FORTRAN_HAS_REAL_NATIVE_"'// &
+ "//TRIM(ADJUSTL(ichr2))//"//'"_KIND "'//"//ADJUSTL(jchr2)"
+ WRITE(*,*)" RETURN"
+ WRITE(*,*)"END SUBROUTINE"
+ jd = 0
+ j = KIND(1.d0)
+ WRITE(*, "("" SUBROUTINE d"", i2.2,""()"")") jd
+ WRITE(*,*)" IMPLICIT NONE"
+ WRITE(*,*)" DOUBLE PRECISION :: a"
+ WRITE(*,*)" INTEGER(C_SIZE_T) :: a_size"
+ WRITE(*,*)" CHARACTER(LEN=2) :: ichr2, jchr2"
+ WRITE(*,*)" a_size = STORAGE_SIZE(a, c_size_t)/STORAGE_SIZE(c_char_'a',c_size_t)"
+ WRITE(*,*)" WRITE(ichr2,'(I2)') a_size"
+ WRITE(*,'(A,I0)')" WRITE(jchr2,'(I2)') ",j
+ WRITE(*,'(A)')' WRITE(*,*) "#define H5_FORTRAN_HAS_DOUBLE_NATIVE_"'// &
+ "//TRIM(ADJUSTL(ichr2))//"//'"_KIND "'//"//ADJUSTL(jchr2)"
+ WRITE(*,*)" RETURN"
+ WRITE(*,*)"END SUBROUTINE"
+ DO i = 1, ii
+ j = ikind_numbers(i)
+ WRITE(*, "("" SUBROUTINE i"", i2.2,""()"")") j
+ WRITE(*,*)" IMPLICIT NONE"
+ WRITE(*,'(A,I0,A)')" INTEGER(KIND=",j,") :: a"
+ WRITE(*,*)" INTEGER(C_SIZE_T) :: a_size"
+ WRITE(*,*)" CHARACTER(LEN=2) :: ichr2, jchr2"
+ WRITE(*,*)" a_size = STORAGE_SIZE(a, c_size_t)/STORAGE_SIZE(c_char_'a',c_size_t)"
+ WRITE(*,*)" WRITE(ichr2,'(I2)') a_size"
+ WRITE(*,'(A,I0)')" WRITE(jchr2,'(I2)') ",j
+ WRITE(*,'(A)')' WRITE(*,*) "#define H5_FORTRAN_HAS_INTEGER_"'// &
+ "//TRIM(ADJUSTL(ichr2))//"//'"_KIND "'//"//ADJUSTL(jchr2)"
+ WRITE(*,*)" RETURN"
+ WRITE(*,*)"END SUBROUTINE"
+ ENDDO
+ DO i = 1, ir
+ j = rkind_numbers(i)
+ WRITE(*, "("" SUBROUTINE r"", i2.2,""()"")") j
+ WRITE(*,*)" IMPLICIT NONE"
+ WRITE(*,'(A,I0,A)')" REAL(KIND= ",j,") :: a"
+ WRITE(*,*)" INTEGER(C_SIZE_T) :: a_size"
+ WRITE(*,*)" CHARACTER(LEN=2) :: ichr2, jchr2"
+ WRITE(*,*)" a_size = STORAGE_SIZE(a, c_size_t)/STORAGE_SIZE(c_char_'a',c_size_t)"
+ WRITE(*,*)" WRITE(ichr2,'(I2)') a_size"
+ WRITE(*,'(A,I0)')" WRITE(jchr2,'(I2)') ", j
+ WRITE(*,'(A)')' WRITE(*,*) "#define H5_FORTRAN_HAS_REAL_"'// &
+ "//TRIM(ADJUSTL(ichr2))//"//'"_KIND "'//"//ADJUSTL(jchr2)"
+ WRITE(*,*)" RETURN"
+ WRITE(*,*)"END SUBROUTINE"
+ ENDDO
+ WRITE(*,*) "END MODULE H5test_kind_STORAGE_SIZE_mod"
+ WRITE(*,*) ""
+
+ ! (b) generate the main program
+
+ WRITE(*,*) "PROGRAM H5test_kind_STORAGE_SIZE"
+ WRITE(*,*) "USE H5test_kind_STORAGE_SIZE_mod"
+ WRITE(*,*) "WRITE(*,*) "" /*generating header file*/ """
+ ji = 0
+ WRITE(*, "("" CALL i"", i2.2,""()"")") ji
+ jr = 0
+ WRITE(*, "("" CALL r"", i2.2,""()"")") jr
+ jd = 0
+ WRITE(*, "("" CALL d"", i2.2,""()"")") jd
+ DO i = 1, ii
+ j = ikind_numbers(i)
+ WRITE(*, "("" CALL i"", i2.2,""()"")") j
+ ENDDO
+ DO i = 1, ir
+ j = rkind_numbers(i)
+ WRITE(*, "("" CALL r"", i2.2,""()"")") j
+ ENDDO
+ WRITE(*,*) "END PROGRAM H5test_kind_STORAGE_SIZE"
+
+END PROGRAM test_kind
+
+
+
diff --git a/fortran/src/Makefile.am b/fortran/src/Makefile.am
index af0e6ee..a4b3843 100644
--- a/fortran/src/Makefile.am
+++ b/fortran/src/Makefile.am
@@ -176,11 +176,15 @@ H5fortran_detect.f90: H5test_kind$(EXEEXT)
# H5test_kind.f90 is included in the distribution, and Automake knows
# how to compile a fortran program given its sources.
+if FORTRAN_HAVE_STORAGE_SIZE
+ H5test_kind_SOURCES = H5test_kind_STORAGE_SIZE.f90
+else
if FORTRAN_HAVE_SIZEOF
H5test_kind_SOURCES = H5test_kind_SIZEOF.f90
else
H5test_kind_SOURCES = H5test_kind.f90
endif
+endif
# Mark this directory as part of the Fortran API
FORTRAN_API=yes
diff --git a/fortran/src/Makefile.in b/fortran/src/Makefile.in
index 7fa1861..231891a 100644
--- a/fortran/src/Makefile.in
+++ b/fortran/src/Makefile.in
@@ -189,11 +189,11 @@ H5fortran_detect_LDADD = $(LDADD)
H5match_types_SOURCES = H5match_types.c
H5match_types_OBJECTS = H5match_types.$(OBJEXT)
H5match_types_LDADD = $(LDADD)
-am__H5test_kind_SOURCES_DIST = H5test_kind.f90 H5test_kind_SIZEOF.f90
-@FORTRAN_HAVE_SIZEOF_FALSE@am_H5test_kind_OBJECTS = \
-@FORTRAN_HAVE_SIZEOF_FALSE@ H5test_kind.$(OBJEXT)
-@FORTRAN_HAVE_SIZEOF_TRUE@am_H5test_kind_OBJECTS = \
-@FORTRAN_HAVE_SIZEOF_TRUE@ H5test_kind_SIZEOF.$(OBJEXT)
+am__H5test_kind_SOURCES_DIST = H5test_kind.f90 H5test_kind_SIZEOF.f90 \
+ H5test_kind_STORAGE_SIZE.f90
+@FORTRAN_HAVE_SIZEOF_FALSE@@FORTRAN_HAVE_STORAGE_SIZE_FALSE@am_H5test_kind_OBJECTS = H5test_kind.$(OBJEXT)
+@FORTRAN_HAVE_SIZEOF_TRUE@@FORTRAN_HAVE_STORAGE_SIZE_FALSE@am_H5test_kind_OBJECTS = H5test_kind_SIZEOF.$(OBJEXT)
+@FORTRAN_HAVE_STORAGE_SIZE_TRUE@am_H5test_kind_OBJECTS = H5test_kind_STORAGE_SIZE.$(OBJEXT)
H5test_kind_OBJECTS = $(am_H5test_kind_OBJECTS)
H5test_kind_LDADD = $(LDADD)
AM_V_P = $(am__v_P_@AM_V@)
@@ -569,7 +569,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
@@ -733,7 +732,7 @@ CHECK_CLEANFILES = *.chkexe *.chklog *.clog
# Add libtool shared library version numbers to the HDF5 library
# See libtool versioning documentation online.
LT_VERS_INTERFACE = 6
-LT_VERS_REVISION = 174
+LT_VERS_REVISION = 180
LT_VERS_AGE = 0
AM_FCLIBS = $(LIBHDF5)
@@ -799,11 +798,12 @@ BUILT_SOURCES = H5f90i_gen.h
# Automake knows how to build fortran programs if we tell it the source
# files.
H5fortran_detect_SOURCES = H5fortran_detect.f90
-@FORTRAN_HAVE_SIZEOF_FALSE@H5test_kind_SOURCES = H5test_kind.f90
+@FORTRAN_HAVE_SIZEOF_FALSE@@FORTRAN_HAVE_STORAGE_SIZE_FALSE@H5test_kind_SOURCES = H5test_kind.f90
+@FORTRAN_HAVE_SIZEOF_TRUE@@FORTRAN_HAVE_STORAGE_SIZE_FALSE@H5test_kind_SOURCES = H5test_kind_SIZEOF.f90
# H5test_kind.f90 is included in the distribution, and Automake knows
# how to compile a fortran program given its sources.
-@FORTRAN_HAVE_SIZEOF_TRUE@H5test_kind_SOURCES = H5test_kind_SIZEOF.f90
+@FORTRAN_HAVE_STORAGE_SIZE_TRUE@H5test_kind_SOURCES = H5test_kind_STORAGE_SIZE.f90
# Mark this directory as part of the Fortran API
FORTRAN_API = yes
diff --git a/fortran/test/CMakeLists.txt b/fortran/test/CMakeLists.txt
index 28b2ae1..d10f2ef 100644
--- a/fortran/test/CMakeLists.txt
+++ b/fortran/test/CMakeLists.txt
@@ -21,7 +21,18 @@ set_target_properties (${HDF5_F90_C_TEST_LIB_TARGET} PROPERTIES
INTERFACE_INCLUDE_DIRECTORIES "$<INSTALL_INTERFACE:$<INSTALL_PREFIX>/include>"
)
-add_library (${HDF5_F90_TEST_LIB_TARGET} ${LIB_TYPE} tf.f90)
+# See if the F2008 intrinsic STORAGE_SIZE and C_SIZEOF are supported. If not then
+# fall back to F2003. If F2003 not supported then use F90 for the tests.
+
+if (FORTRAN_HAVE_STORAGE_SIZE AND FORTRAN_HAVE_C_SIZEOF)
+ add_library (${HDF5_F90_TEST_LIB_TARGET} ${LIB_TYPE} tf_F08.f90 tf.f90)
+elseif (HDF5_ENABLE_F2003)
+ add_library (${HDF5_F90_TEST_LIB_TARGET} ${LIB_TYPE} tf_F03.f90 tf.f90)
+else (FORTRAN_HAVE_STORAGE_SIZE AND FORTRAN_HAVE_C_SIZEOF)
+ add_library (${HDF5_F90_TEST_LIB_TARGET} ${LIB_TYPE} tf_F90.f90 tf.f90)
+endif (FORTRAN_HAVE_STORAGE_SIZE AND FORTRAN_HAVE_C_SIZEOF)
+
+
set (SHARED_LINK_FLAGS " ")
if (WIN32)
if (BUILD_SHARED_LIBS)
diff --git a/fortran/test/Makefile.am b/fortran/test/Makefile.am
index c0b5395..735ab7a 100644
--- a/fortran/test/Makefile.am
+++ b/fortran/test/Makefile.am
@@ -53,7 +53,23 @@ endif
check_PROGRAMS=$(TEST_PROG)
-libh5test_fortran_la_SOURCES= tf.f90 t.c
+if FORTRAN_HAVE_STORAGE_SIZE
+if FORTRAN_HAVE_C_SIZEOF
+ libh5test_fortran_la_SOURCES = tf_F08.f90
+else
+ libh5test_fortran_la_SOURCES = tf_F03.f90
+endif
+else
+if FORTRAN_2003_CONDITIONAL_F
+ libh5test_fortran_la_SOURCES = tf_F03.f90
+else
+ libh5test_fortran_la_SOURCES = tf_F90.f90
+endif
+endif
+
+# tf.f90 depends on either tf_F08.f90 or tf_F03.f90 so they need to be
+# compiled first
+libh5test_fortran_la_SOURCES += tf.f90 t.c
# Source files are used for both the library and fortranlib_test.
# Automake will complain about this without the following workaround.
diff --git a/fortran/test/Makefile.in b/fortran/test/Makefile.in
index 89db8f4..ca91cf5 100644
--- a/fortran/test/Makefile.in
+++ b/fortran/test/Makefile.in
@@ -101,7 +101,20 @@ CONFIG_CLEAN_FILES =
CONFIG_CLEAN_VPATH_FILES =
LTLIBRARIES = $(noinst_LTLIBRARIES)
libh5test_fortran_la_LIBADD =
-am_libh5test_fortran_la_OBJECTS = tf.lo t.lo
+am__libh5test_fortran_la_SOURCES_DIST = tf_F90.f90 tf.f90 t.c \
+ tf_F03.f90 tf_F08.f90
+@FORTRAN_2003_CONDITIONAL_F_FALSE@@FORTRAN_HAVE_STORAGE_SIZE_FALSE@am_libh5test_fortran_la_OBJECTS = tf_F90.lo \
+@FORTRAN_2003_CONDITIONAL_F_FALSE@@FORTRAN_HAVE_STORAGE_SIZE_FALSE@ tf.lo \
+@FORTRAN_2003_CONDITIONAL_F_FALSE@@FORTRAN_HAVE_STORAGE_SIZE_FALSE@ t.lo
+@FORTRAN_2003_CONDITIONAL_F_TRUE@@FORTRAN_HAVE_STORAGE_SIZE_FALSE@am_libh5test_fortran_la_OBJECTS = tf_F03.lo \
+@FORTRAN_2003_CONDITIONAL_F_TRUE@@FORTRAN_HAVE_STORAGE_SIZE_FALSE@ tf.lo \
+@FORTRAN_2003_CONDITIONAL_F_TRUE@@FORTRAN_HAVE_STORAGE_SIZE_FALSE@ t.lo
+@FORTRAN_HAVE_C_SIZEOF_FALSE@@FORTRAN_HAVE_STORAGE_SIZE_TRUE@am_libh5test_fortran_la_OBJECTS = tf_F03.lo \
+@FORTRAN_HAVE_C_SIZEOF_FALSE@@FORTRAN_HAVE_STORAGE_SIZE_TRUE@ tf.lo \
+@FORTRAN_HAVE_C_SIZEOF_FALSE@@FORTRAN_HAVE_STORAGE_SIZE_TRUE@ t.lo
+@FORTRAN_HAVE_C_SIZEOF_TRUE@@FORTRAN_HAVE_STORAGE_SIZE_TRUE@am_libh5test_fortran_la_OBJECTS = tf_F08.lo \
+@FORTRAN_HAVE_C_SIZEOF_TRUE@@FORTRAN_HAVE_STORAGE_SIZE_TRUE@ tf.lo \
+@FORTRAN_HAVE_C_SIZEOF_TRUE@@FORTRAN_HAVE_STORAGE_SIZE_TRUE@ t.lo
libh5test_fortran_la_OBJECTS = $(am_libh5test_fortran_la_OBJECTS)
AM_V_lt = $(am__v_lt_@AM_V@)
am__v_lt_ = $(am__v_lt_@AM_DEFAULT_V@)
@@ -213,9 +226,9 @@ am__v_FCLD_1 =
SOURCES = $(libh5test_fortran_la_SOURCES) $(fflush1_SOURCES) \
$(fflush2_SOURCES) $(fortranlib_test_SOURCES) \
$(fortranlib_test_1_8_SOURCES) $(fortranlib_test_F03_SOURCES)
-DIST_SOURCES = $(libh5test_fortran_la_SOURCES) $(fflush1_SOURCES) \
- $(fflush2_SOURCES) $(fortranlib_test_SOURCES) \
- $(fortranlib_test_1_8_SOURCES) \
+DIST_SOURCES = $(am__libh5test_fortran_la_SOURCES_DIST) \
+ $(fflush1_SOURCES) $(fflush2_SOURCES) \
+ $(fortranlib_test_SOURCES) $(fortranlib_test_1_8_SOURCES) \
$(am__fortranlib_test_F03_SOURCES_DIST)
am__can_run_installinfo = \
case $$AM_UPDATE_INFO_DIR in \
@@ -565,7 +578,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
@@ -739,7 +751,30 @@ noinst_LTLIBRARIES = libh5test_fortran.la
# Our main targets, the tests themselves
TEST_PROG = fortranlib_test fflush1 fflush2 fortranlib_test_1_8 \
$(am__append_2)
-libh5test_fortran_la_SOURCES = tf.f90 t.c
+
+# tf.f90 depends on either tf_F08.f90 or tf_F03.f90 so they need to be
+# compiled first
+@FORTRAN_2003_CONDITIONAL_F_FALSE@@FORTRAN_HAVE_STORAGE_SIZE_FALSE@libh5test_fortran_la_SOURCES = tf_F90.f90 \
+@FORTRAN_2003_CONDITIONAL_F_FALSE@@FORTRAN_HAVE_STORAGE_SIZE_FALSE@ tf.f90 \
+@FORTRAN_2003_CONDITIONAL_F_FALSE@@FORTRAN_HAVE_STORAGE_SIZE_FALSE@ t.c
+
+# tf.f90 depends on either tf_F08.f90 or tf_F03.f90 so they need to be
+# compiled first
+@FORTRAN_2003_CONDITIONAL_F_TRUE@@FORTRAN_HAVE_STORAGE_SIZE_FALSE@libh5test_fortran_la_SOURCES = tf_F03.f90 \
+@FORTRAN_2003_CONDITIONAL_F_TRUE@@FORTRAN_HAVE_STORAGE_SIZE_FALSE@ tf.f90 \
+@FORTRAN_2003_CONDITIONAL_F_TRUE@@FORTRAN_HAVE_STORAGE_SIZE_FALSE@ t.c
+
+# tf.f90 depends on either tf_F08.f90 or tf_F03.f90 so they need to be
+# compiled first
+@FORTRAN_HAVE_C_SIZEOF_FALSE@@FORTRAN_HAVE_STORAGE_SIZE_TRUE@libh5test_fortran_la_SOURCES = tf_F03.f90 \
+@FORTRAN_HAVE_C_SIZEOF_FALSE@@FORTRAN_HAVE_STORAGE_SIZE_TRUE@ tf.f90 \
+@FORTRAN_HAVE_C_SIZEOF_FALSE@@FORTRAN_HAVE_STORAGE_SIZE_TRUE@ t.c
+
+# tf.f90 depends on either tf_F08.f90 or tf_F03.f90 so they need to be
+# compiled first
+@FORTRAN_HAVE_C_SIZEOF_TRUE@@FORTRAN_HAVE_STORAGE_SIZE_TRUE@libh5test_fortran_la_SOURCES = tf_F08.f90 \
+@FORTRAN_HAVE_C_SIZEOF_TRUE@@FORTRAN_HAVE_STORAGE_SIZE_TRUE@ tf.f90 \
+@FORTRAN_HAVE_C_SIZEOF_TRUE@@FORTRAN_HAVE_STORAGE_SIZE_TRUE@ t.c
# Source files are used for both the library and fortranlib_test.
# Automake will complain about this without the following workaround.
diff --git a/fortran/test/tH5P_F03.f90 b/fortran/test/tH5P_F03.f90
index 6039a52..91d9e3a 100644
--- a/fortran/test/tH5P_F03.f90
+++ b/fortran/test/tH5P_F03.f90
@@ -106,20 +106,12 @@ SUBROUTINE test_create(total_error)
INTEGER(hsize_t), DIMENSION(1:5), PARAMETER :: ch_size= (/1, 1, 1, 4, 1/)
CHARACTER(LEN=14) :: filename ='test_create.h5'
- ! /* compound datatype operations */
- TYPE, BIND(C) :: comp_datatype
- REAL :: a
- INTEGER :: x
- DOUBLE PRECISION :: y
- CHARACTER(LEN=1) :: z
- END TYPE comp_datatype
-
TYPE(comp_datatype), TARGET :: rd_c, fill_ctype
INTEGER :: error
INTEGER(SIZE_T) :: h5off
TYPE(C_PTR) :: f_ptr
LOGICAL :: differ1, differ2
-
+
!/*
! * Create a file.
! */
@@ -136,8 +128,7 @@ SUBROUTINE test_create(total_error)
CALL check("h5pset_chunk_f",error, total_error)
! /* Create a compound datatype */
-
- CALL h5tcreate_f(H5T_COMPOUND_F, INT(SIZEOF(fill_ctype),size_t), comp_type_id, error)
+ CALL h5tcreate_f(H5T_COMPOUND_F, H5_SIZEOF(fill_ctype), comp_type_id, error)
CALL check("h5tcreate_f", error, total_error)
h5off = H5OFFSETOF(C_LOC(fill_ctype), C_LOC(fill_ctype%a))
CALL h5tinsert_f(comp_type_id, "a", h5off , H5T_NATIVE_REAL, error)
@@ -394,6 +385,8 @@ SUBROUTINE test_h5p_file_image(total_error)
TYPE(C_PTR), DIMENSION(1:count) :: f_ptr1
TYPE(C_PTR), DIMENSION(1:1) :: f_ptr2
+ INTEGER(HSIZE_T) :: sizeof_buffer
+
! Initialize file image buffer
DO i = 1, count
buffer(i) = i*10
@@ -412,7 +405,8 @@ SUBROUTINE test_h5p_file_image(total_error)
! Set file image
f_ptr = C_LOC(buffer(1))
- size = SIZEOF(buffer)
+ size = H5_SIZEOF(buffer(1))*count
+
CALL h5pset_file_image_f(fapl_1, f_ptr, size, error)
CALL check("h5pset_file_image_f", error, total_error)
@@ -465,8 +459,8 @@ SUBROUTINE external_test_offset(cleanup,total_error)
INTEGER(hid_t) :: dset=-1 ! dataset
INTEGER(hid_t) :: grp=-1 ! group to emit diagnostics
INTEGER(size_t) :: i, j ! miscellaneous counters
- CHARACTER(LEN=180) :: filename ! file names
- INTEGER, DIMENSION(1:25) :: part ! raw data buffers
+ CHARACTER(LEN=180) :: filename ! file names
+ INTEGER, DIMENSION(1:25) :: part
INTEGER, DIMENSION(1:100), TARGET :: whole ! raw data buffers
INTEGER(hsize_t), DIMENSION(1:1) :: cur_size ! current data space size
INTEGER(hid_t) :: hs_space ! hyperslab data space
@@ -475,6 +469,7 @@ SUBROUTINE external_test_offset(cleanup,total_error)
CHARACTER(LEN=1) :: ichr1 ! character conversion holder
INTEGER :: error ! error status
TYPE(C_PTR) :: f_ptr ! fortran pointer
+ INTEGER(HSIZE_T) :: sizeof_part
CHARACTER(LEN=1,KIND=C_CHAR), DIMENSION(1:30) :: temparray
@@ -503,15 +498,18 @@ SUBROUTINE external_test_offset(cleanup,total_error)
CALL check("h5gcreate_f",error, total_error)
! Create the dataset
+
+ sizeof_part = INT(H5_SIZEOF(part(1))*25, hsize_t)
+
CALL h5pcreate_f(H5P_DATASET_CREATE_F, dcpl, error)
CALL check("h5pcreate_f", error, total_error)
- CALL h5pset_external_f(dcpl, "extern_1a.raw", INT(0,off_t), INT(SIZEOF(part), hsize_t), error)
+ CALL h5pset_external_f(dcpl, "extern_1a.raw", INT(0,off_t), sizeof_part, error)
CALL check("h5pset_external_f",error,total_error)
- CALL h5pset_external_f(dcpl, "extern_2a.raw", INT(10,off_t), INT(SIZEOF(part), hsize_t), error)
+ CALL h5pset_external_f(dcpl, "extern_2a.raw", INT(10,off_t), sizeof_part, error)
CALL check("h5pset_external_f",error,total_error)
- CALL h5pset_external_f(dcpl, "extern_3a.raw", INT(20,off_t), INT(SIZEOF(part), hsize_t), error)
+ CALL h5pset_external_f(dcpl, "extern_3a.raw", INT(20,off_t), sizeof_part, error)
CALL check("h5pset_external_f",error,total_error)
- CALL h5pset_external_f(dcpl, "extern_4a.raw", INT(30,off_t), INT(SIZEOF(part), hsize_t), error)
+ CALL h5pset_external_f(dcpl, "extern_4a.raw", INT(30,off_t), sizeof_part, error)
CALL check("h5pset_external_f",error,total_error)
cur_size(1) = 100
diff --git a/fortran/test/tH5T_F03.f90 b/fortran/test/tH5T_F03.f90
index fc3ebd0..f15424d 100644
--- a/fortran/test/tH5T_F03.f90
+++ b/fortran/test/tH5T_F03.f90
@@ -661,9 +661,6 @@ END SUBROUTINE test_array_compound_atomic
USE ISO_C_BINDING
IMPLICIT NONE
- INTEGER, PARAMETER :: r_k4 = SELECTED_REAL_KIND(5)
- INTEGER, PARAMETER :: r_k8 = SELECTED_REAL_KIND(10)
-
INTEGER, INTENT(INOUT) :: total_error
INTEGER, PARAMETER :: LENGTH = 5
@@ -685,8 +682,8 @@ END SUBROUTINE test_array_compound_atomic
TYPE CmpField_struct
INTEGER, DIMENSION(1:ALEN) :: a
- REAL(KIND=r_k4), DIMENSION(1:ALEN) :: b
- REAL(KIND=r_k8), DIMENSION(1:ALEN) :: c
+ REAL(KIND=sp), DIMENSION(1:ALEN) :: b
+ REAL(KIND=dp), DIMENSION(1:ALEN) :: c
ENDTYPE CmpField_struct
TYPE(CmpField_struct), DIMENSION(1:LENGTH), TARGET :: cf
@@ -702,7 +699,7 @@ END SUBROUTINE test_array_compound_atomic
TYPE(CmpDTSinfo_struct) :: dtsinfo
TYPE fld_t_struct
- REAL(KIND=r_k4), DIMENSION(1:ALEN) :: b
+ REAL(KIND=sp), DIMENSION(1:ALEN) :: b
END TYPE fld_t_struct
INTEGER(SIZE_T) :: type_sizei ! Size of the integer datatype
@@ -741,10 +738,10 @@ END SUBROUTINE test_array_compound_atomic
! -----------------------
CALL h5tget_size_f(H5T_NATIVE_INTEGER, type_sizei, error)
CALL check("h5tget_size_f", error, total_error)
- IF(sizeof(cf(1)%b(1)).EQ.4)THEN
+ IF(h5_sizeof(cf(1)%b(1)).EQ.4_size_t)THEN
CALL h5tget_size_f(H5T_NATIVE_REAL_4, type_sizer, error)
CALL check("h5tget_size_f", error, total_error)
- ELSE IF(sizeof(cf(1)%b(1)).EQ.8)THEN
+ ELSE IF(h5_sizeof(cf(1)%b(1)).EQ.8_size_t)THEN
CALL h5tget_size_f(H5T_NATIVE_REAL_8, type_sizer, error)
CALL check("h5tget_size_f", error, total_error)
ENDIF
diff --git a/fortran/test/tf.f90 b/fortran/test/tf.f90
index 2964840..063e93d 100644
--- a/fortran/test/tf.f90
+++ b/fortran/test/tf.f90
@@ -29,7 +29,9 @@
!*****
MODULE TH5_MISC
- INTEGER, PARAMETER :: dp = SELECTED_REAL_KIND(15, 307)
+ USE TH5_MISC_PROVISIONAL
+
+ IMPLICIT NONE
CONTAINS
diff --git a/fortran/test/tf_F03.f90 b/fortran/test/tf_F03.f90
new file mode 100644
index 0000000..4513783
--- /dev/null
+++ b/fortran/test/tf_F03.f90
@@ -0,0 +1,128 @@
+!****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
diff --git a/fortran/test/tf_F08.f90 b/fortran/test/tf_F08.f90
new file mode 100644
index 0000000..5583f3f
--- /dev/null
+++ b/fortran/test/tf_F08.f90
@@ -0,0 +1,128 @@
+!****h* root/fortran/test/tf_F08.f90
+!
+! NAME
+! tf_F08.f90
+!
+! FUNCTION
+! Contains functions that are part of the F2008 standard and 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
+! This file contains "sizeof" functions that are F2008 standard compliant
+! and replace the non-standard 'SIZEOF' functions found in the file tf_F03.
+! Unfortunity we need to wrap the C_SIZEOF/STORAGE_SIZE functions to handle different
+! data types from the various tests.
+!
+! F08+TS29113 requires C interoperable variable as argument for C_SIZEOF.
+!
+! This file will be build instead of tf_F03.f90 if the intrinsic fortran
+! function C_SIZEOF/STORAGE_SIZE is found during configure.
+!
+!*****
+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_CHR
+ MODULE PROCEDURE H5_SIZEOF_I
+ 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 = C_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=*), INTENT(in) :: a
+
+ H5_SIZEOF_CHR = storage_size(a, c_size_t)/storage_size(c_char_'a',c_size_t)
+
+ 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 = storage_size(a, c_size_t)/storage_size(c_char_'a',c_size_t)
+
+ 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 = storage_size(a, c_size_t)/storage_size(c_char_'a',c_size_t)
+
+ 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 = storage_size(a, c_size_t)/storage_size(c_char_'a',c_size_t)
+
+ END FUNCTION H5_SIZEOF_DP
+
+END MODULE TH5_MISC_PROVISIONAL
diff --git a/fortran/test/tf_F90.f90 b/fortran/test/tf_F90.f90
new file mode 100644
index 0000000..11a047c
--- /dev/null
+++ b/fortran/test/tf_F90.f90
@@ -0,0 +1,33 @@
+!****h* root/fortran/test/tf_F90.f90
+!
+! NAME
+! tf_F90.f90
+!
+! FUNCTION
+! Module for when the compiler is not F2003 or F2008 compliant.
+! Needed by tf.f90 for the test programs.
+!
+! 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. *
+! * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
+!
+!*****
+MODULE TH5_MISC_PROVISIONAL
+ IMPLICIT NONE
+
+ INTEGER, PARAMETER :: sp = KIND(0.0)
+ INTEGER, PARAMETER :: dp = KIND(0.D0)
+
+END MODULE TH5_MISC_PROVISIONAL
diff --git a/fortran/testpar/Makefile.in b/fortran/testpar/Makefile.in
index 989c626..583b6dc 100644
--- a/fortran/testpar/Makefile.in
+++ b/fortran/testpar/Makefile.in
@@ -504,7 +504,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/hl/Makefile.in b/hl/Makefile.in
index 17a1ff0..cda0122 100644
--- a/hl/Makefile.in
+++ b/hl/Makefile.in
@@ -508,7 +508,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/hl/c++/Makefile.in b/hl/c++/Makefile.in
index 4b11ad8..3839814 100644
--- a/hl/c++/Makefile.in
+++ b/hl/c++/Makefile.in
@@ -504,7 +504,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/hl/c++/examples/Makefile.in b/hl/c++/examples/Makefile.in
index 3938a3b..5712043 100644
--- a/hl/c++/examples/Makefile.in
+++ b/hl/c++/examples/Makefile.in
@@ -451,7 +451,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/hl/c++/src/Makefile.in b/hl/c++/src/Makefile.in
index a0b19aa..c0988f5 100644
--- a/hl/c++/src/Makefile.in
+++ b/hl/c++/src/Makefile.in
@@ -510,7 +510,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
@@ -674,7 +673,7 @@ CHECK_CLEANFILES = *.chkexe *.chklog *.clog
# Add libtool shared library version numbers to the HDF5 library
# See libtool versioning documentation online.
LT_VERS_INTERFACE = 6
-LT_VERS_REVISION = 174
+LT_VERS_REVISION = 180
LT_VERS_AGE = 0
# This is our main target
diff --git a/hl/c++/test/Makefile.in b/hl/c++/test/Makefile.in
index cee963a..f6bd246 100644
--- a/hl/c++/test/Makefile.in
+++ b/hl/c++/test/Makefile.in
@@ -507,7 +507,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/hl/examples/Makefile.in b/hl/examples/Makefile.in
index 2bf5764..6bbf493 100644
--- a/hl/examples/Makefile.in
+++ b/hl/examples/Makefile.in
@@ -451,7 +451,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/hl/fortran/Makefile.in b/hl/fortran/Makefile.in
index c2d6610..8fe9e35 100644
--- a/hl/fortran/Makefile.in
+++ b/hl/fortran/Makefile.in
@@ -508,7 +508,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/hl/fortran/examples/Makefile.in b/hl/fortran/examples/Makefile.in
index 1eb9c9d..1051658 100644
--- a/hl/fortran/examples/Makefile.in
+++ b/hl/fortran/examples/Makefile.in
@@ -451,7 +451,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/hl/fortran/src/Makefile.in b/hl/fortran/src/Makefile.in
index 0431cef..db2304c 100644
--- a/hl/fortran/src/Makefile.in
+++ b/hl/fortran/src/Makefile.in
@@ -525,7 +525,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
@@ -689,7 +688,7 @@ CHECK_CLEANFILES = *.chkexe *.chklog *.clog
# Add libtool shared library version numbers to the HDF5 library
# See libtool versioning documentation online.
LT_VERS_INTERFACE = 6
-LT_VERS_REVISION = 174
+LT_VERS_REVISION = 180
LT_VERS_AGE = 0
# Our main target, the high-level fortran library
diff --git a/hl/fortran/test/Makefile.in b/hl/fortran/test/Makefile.in
index e142edf..4a929a6 100644
--- a/hl/fortran/test/Makefile.in
+++ b/hl/fortran/test/Makefile.in
@@ -516,7 +516,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/hl/src/H5LTanalyze.c b/hl/src/H5LTanalyze.c
index 31ec84f..6a151d6 100644
--- a/hl/src/H5LTanalyze.c
+++ b/hl/src/H5LTanalyze.c
@@ -1,31 +1,13 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * 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. *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
+#line 2 "H5LTanalyze.c"
-/*
- * This file was generated by Lex with the command "lex -PH5LTyy
- * -oH5LTanalyze.c H5LTanalyze.l". Do NOT modify it by hand, but in
- * line 52, "#ifdef H5_HAVE_UNISTD_H" should be added if the platform
- * doesn't have the unistd.h header file. Also hdf5.h should be added
- * before adding H5_HAVE_UNISTD_H.
- */
+#line 4 "H5LTanalyze.c"
+
+#define YY_INT_ALIGNED short int
+
+/* A lexical scanner generated by flex */
#define yy_create_buffer H5LTyy_create_buffer
#define yy_delete_buffer H5LTyy_delete_buffer
-#define yy_scan_buffer H5LTyy_scan_buffer
-#define yy_scan_string H5LTyy_scan_string
-#define yy_scan_bytes H5LTyy_scan_bytes
#define yy_flex_debug H5LTyy_flex_debug
#define yy_init_buffer H5LTyy_init_buffer
#define yy_flush_buffer H5LTyy_flush_buffer
@@ -34,78 +16,118 @@
#define yyin H5LTyyin
#define yyleng H5LTyyleng
#define yylex H5LTyylex
+#define yylineno H5LTyylineno
#define yyout H5LTyyout
#define yyrestart H5LTyyrestart
#define yytext H5LTyytext
#define yywrap H5LTyywrap
-
-#line 43 "H5LTanalyze.c"
-/* A lexical scanner generated by flex*/
-
-/* Scanner skeleton version:
- * $Header: /home/daffy/u0/vern/flex/RCS/flex.skl,v 2.91 96/09/10 16:58:48 vern Exp $
- */
+#define yyalloc H5LTyyalloc
+#define yyrealloc H5LTyyrealloc
+#define yyfree H5LTyyfree
#define FLEX_SCANNER
#define YY_FLEX_MAJOR_VERSION 2
#define YY_FLEX_MINOR_VERSION 5
+#define YY_FLEX_SUBMINOR_VERSION 37
+#if YY_FLEX_SUBMINOR_VERSION > 0
+#define FLEX_BETA
+#endif
+/* First, we deal with platform-specific or compiler-specific issues. */
+
+/* begin standard C headers. */
#include <stdio.h>
-#include <hdf5.h>
-#ifdef H5_HAVE_UNISTD_H
-#include <unistd.h>
-#endif
-
-/* cfront 1.2 defines "c_plusplus" instead of "__cplusplus" */
-#ifdef c_plusplus
-#ifndef __cplusplus
-#define __cplusplus
-#endif
+#include <string.h>
+#include <errno.h>
+#include <stdlib.h>
+
+/* end standard C headers. */
+
+/* flex integer type definitions */
+
+#ifndef FLEXINT_H
+#define FLEXINT_H
+
+/* C99 systems have <inttypes.h>. Non-C99 systems may or may not. */
+
+#if defined (__STDC_VERSION__) && __STDC_VERSION__ >= 199901L
+
+/* C99 says to define __STDC_LIMIT_MACROS before including stdint.h,
+ * if you want the limit (max/min) macros for int types.
+ */
+#ifndef __STDC_LIMIT_MACROS
+#define __STDC_LIMIT_MACROS 1
#endif
+#include <inttypes.h>
+typedef int8_t flex_int8_t;
+typedef uint8_t flex_uint8_t;
+typedef int16_t flex_int16_t;
+typedef uint16_t flex_uint16_t;
+typedef int32_t flex_int32_t;
+typedef uint32_t flex_uint32_t;
+#else
+typedef signed char flex_int8_t;
+typedef short int flex_int16_t;
+typedef int flex_int32_t;
+typedef unsigned char flex_uint8_t;
+typedef unsigned short int flex_uint16_t;
+typedef unsigned int flex_uint32_t;
-#ifdef __cplusplus
+/* Limits of integral types. */
+#ifndef INT8_MIN
+#define INT8_MIN (-128)
+#endif
+#ifndef INT16_MIN
+#define INT16_MIN (-32767-1)
+#endif
+#ifndef INT32_MIN
+#define INT32_MIN (-2147483647-1)
+#endif
+#ifndef INT8_MAX
+#define INT8_MAX (127)
+#endif
+#ifndef INT16_MAX
+#define INT16_MAX (32767)
+#endif
+#ifndef INT32_MAX
+#define INT32_MAX (2147483647)
+#endif
+#ifndef UINT8_MAX
+#define UINT8_MAX (255U)
+#endif
+#ifndef UINT16_MAX
+#define UINT16_MAX (65535U)
+#endif
+#ifndef UINT32_MAX
+#define UINT32_MAX (4294967295U)
+#endif
-#include <stdlib.h>
+#endif /* ! C99 */
-/* Use prototypes in function declarations. */
-#define YY_USE_PROTOS
+#endif /* ! FLEXINT_H */
+
+#ifdef __cplusplus
/* The "const" storage-class-modifier is valid. */
#define YY_USE_CONST
#else /* ! __cplusplus */
-#if __STDC__
+/* C99 requires __STDC__ to be defined as 1. */
+#if defined (__STDC__)
-#define YY_USE_PROTOS
#define YY_USE_CONST
-#endif /* __STDC__ */
+#endif /* defined (__STDC__) */
#endif /* ! __cplusplus */
-#ifdef __TURBOC__
- #pragma warn -rch
- #pragma warn -use
-#include <io.h>
-#include <stdlib.h>
-#define YY_USE_CONST
-#define YY_USE_PROTOS
-#endif
-
#ifdef YY_USE_CONST
#define yyconst const
#else
#define yyconst
#endif
-
-#ifdef YY_USE_PROTOS
-#define YY_PROTO(proto) proto
-#else
-#define YY_PROTO(proto) ()
-#endif
-
/* Returned upon end-of-file. */
#define YY_NULL 0
@@ -120,80 +142,70 @@
* but we do it the disgusting crufty way forced on us by the ()-less
* definition of BEGIN.
*/
-#define BEGIN yy_start = 1 + 2 *
+#define BEGIN (yy_start) = 1 + 2 *
/* Translate the current start state into a value that can be later handed
* to BEGIN to return to the state. The YYSTATE alias is for lex
* compatibility.
*/
-#define YY_START ((yy_start - 1) / 2)
+#define YY_START (((yy_start) - 1) / 2)
#define YYSTATE YY_START
/* Action number for EOF rule of a given start state. */
#define YY_STATE_EOF(state) (YY_END_OF_BUFFER + state + 1)
/* Special action meaning "start processing a new file". */
-#define YY_NEW_FILE yyrestart( yyin )
+#define YY_NEW_FILE H5LTyyrestart(H5LTyyin )
#define YY_END_OF_BUFFER_CHAR 0
/* Size of default input buffer. */
+#ifndef YY_BUF_SIZE
#define YY_BUF_SIZE 16384
+#endif
+/* The state buf must be large enough to hold one state per character in the main buffer.
+ */
+#define YY_STATE_BUF_SIZE ((YY_BUF_SIZE + 2) * sizeof(yy_state_type))
+
+#ifndef YY_TYPEDEF_YY_BUFFER_STATE
+#define YY_TYPEDEF_YY_BUFFER_STATE
typedef struct yy_buffer_state *YY_BUFFER_STATE;
+#endif
+
+#ifndef YY_TYPEDEF_YY_SIZE_T
+#define YY_TYPEDEF_YY_SIZE_T
+typedef size_t yy_size_t;
+#endif
+
+extern yy_size_t H5LTyyleng;
-extern int yyleng;
-extern FILE *yyin, *yyout;
+extern FILE *H5LTyyin, *H5LTyyout;
#define EOB_ACT_CONTINUE_SCAN 0
#define EOB_ACT_END_OF_FILE 1
#define EOB_ACT_LAST_MATCH 2
-/* The funky do-while in the following #define is used to turn the definition
- * int a single C statement (which needs a semi-colon terminator). This
- * avoids problems with code like:
- *
- * if ( condition_holds )
- * yyless( 5 );
- * else
- * do_something_else();
- *
- * Prior to using the do-while the compiler would get upset at the
- * "else" because it interpreted the "if" statement as being all
- * done when it reached the ';' after the yyless() call.
- */
-
-/* Return all but the first 'n' matched characters back to the input stream. */
-
+ #define YY_LESS_LINENO(n)
+
+/* Return all but the first "n" matched characters back to the input stream. */
#define yyless(n) \
do \
{ \
- /* Undo effects of setting up yytext. */ \
- *yy_cp = yy_hold_char; \
+ /* Undo effects of setting up H5LTyytext. */ \
+ int yyless_macro_arg = (n); \
+ YY_LESS_LINENO(yyless_macro_arg);\
+ *yy_cp = (yy_hold_char); \
YY_RESTORE_YY_MORE_OFFSET \
- yy_c_buf_p = yy_cp = yy_bp + n - YY_MORE_ADJ; \
- YY_DO_BEFORE_ACTION; /* set up yytext again */ \
+ (yy_c_buf_p) = yy_cp = yy_bp + yyless_macro_arg - YY_MORE_ADJ; \
+ YY_DO_BEFORE_ACTION; /* set up H5LTyytext again */ \
} \
while ( 0 )
-#define unput(c) yyunput( c, yytext_ptr )
-
-/* Some routines like yy_flex_realloc() are emitted as static but are
- not called by all lexers. This generates warnings in some compilers,
- notably GCC. Arrange to suppress these. */
-#ifdef __GNUC__
-#define YY_MAY_BE_UNUSED __attribute__((unused))
-#else
-#define YY_MAY_BE_UNUSED
-#endif
-
-/* The following is because we cannot portably get our hands on size_t
- * (without autoconf's help, which isn't available because we want
- * flex-generated scanners to compile on their own).
- */
-typedef unsigned int yy_size_t;
-
+#define unput(c) yyunput( c, (yytext_ptr) )
+#ifndef YY_STRUCT_YY_BUFFER_STATE
+#define YY_STRUCT_YY_BUFFER_STATE
struct yy_buffer_state
{
FILE *yy_input_file;
@@ -209,7 +221,7 @@ struct yy_buffer_state
/* Number of characters read into yy_ch_buf, not including EOB
* characters.
*/
- int yy_n_chars;
+ yy_size_t yy_n_chars;
/* Whether we "own" the buffer - i.e., we know we created it,
* and can realloc() it to grow it, and should free() it to
@@ -230,12 +242,16 @@ struct yy_buffer_state
*/
int yy_at_bol;
+ int yy_bs_lineno; /**< The line count. */
+ int yy_bs_column; /**< The column count. */
+
/* Whether to try to fill the input buffer when we reach the
* end of it.
*/
int yy_fill_buffer;
int yy_buffer_status;
+
#define YY_BUFFER_NEW 0
#define YY_BUFFER_NORMAL 1
/* When an EOF's been seen but there's still some text to process
@@ -245,101 +261,135 @@ struct yy_buffer_state
* possible backing-up.
*
* When we actually see the EOF, we change the status to "new"
- * (via yyrestart()), so that the user can continue scanning by
- * just pointing yyin at a new input file.
+ * (via H5LTyyrestart()), so that the user can continue scanning by
+ * just pointing H5LTyyin at a new input file.
*/
#define YY_BUFFER_EOF_PENDING 2
+
};
+#endif /* !YY_STRUCT_YY_BUFFER_STATE */
-static YY_BUFFER_STATE yy_current_buffer = 0;
+/* Stack of input buffers. */
+static size_t yy_buffer_stack_top = 0; /**< index of top of stack. */
+static size_t yy_buffer_stack_max = 0; /**< capacity of stack. */
+static YY_BUFFER_STATE * yy_buffer_stack = 0; /**< Stack as an array. */
/* We provide macros for accessing buffer states in case in the
* future we want to put the buffer states in a more general
* "scanner state".
+ *
+ * Returns the top of the stack, or NULL.
*/
-#define YY_CURRENT_BUFFER yy_current_buffer
+#define YY_CURRENT_BUFFER ( (yy_buffer_stack) \
+ ? (yy_buffer_stack)[(yy_buffer_stack_top)] \
+ : NULL)
+/* Same as previous macro, but useful when we know that the buffer stack is not
+ * NULL or when we need an lvalue. For internal use only.
+ */
+#define YY_CURRENT_BUFFER_LVALUE (yy_buffer_stack)[(yy_buffer_stack_top)]
-/* yy_hold_char holds the character lost when yytext is formed. */
+/* yy_hold_char holds the character lost when H5LTyytext is formed. */
static char yy_hold_char;
-
-static int yy_n_chars; /* number of characters read into yy_ch_buf */
-
-
-int yyleng;
+static yy_size_t yy_n_chars; /* number of characters read into yy_ch_buf */
+yy_size_t H5LTyyleng;
/* Points to current character in buffer. */
static char *yy_c_buf_p = (char *) 0;
-static int yy_init = 1; /* whether we need to initialize */
+static int yy_init = 0; /* whether we need to initialize */
static int yy_start = 0; /* start state number */
-/* Flag which is used to allow yywrap()'s to do buffer switches
- * instead of setting up a fresh yyin. A bit of a hack ...
+/* Flag which is used to allow H5LTyywrap()'s to do buffer switches
+ * instead of setting up a fresh H5LTyyin. A bit of a hack ...
*/
static int yy_did_buffer_switch_on_eof;
-void yyrestart YY_PROTO(( FILE *input_file ));
+void H5LTyyrestart (FILE *input_file );
+void H5LTyy_switch_to_buffer (YY_BUFFER_STATE new_buffer );
+YY_BUFFER_STATE H5LTyy_create_buffer (FILE *file,int size );
+void H5LTyy_delete_buffer (YY_BUFFER_STATE b );
+void H5LTyy_flush_buffer (YY_BUFFER_STATE b );
+void H5LTyypush_buffer_state (YY_BUFFER_STATE new_buffer );
+void H5LTyypop_buffer_state (void );
-void yy_switch_to_buffer YY_PROTO(( YY_BUFFER_STATE new_buffer ));
-void yy_load_buffer_state YY_PROTO(( void ));
-YY_BUFFER_STATE yy_create_buffer YY_PROTO(( FILE *file, int size ));
-void yy_delete_buffer YY_PROTO(( YY_BUFFER_STATE b ));
-void yy_init_buffer YY_PROTO(( YY_BUFFER_STATE b, FILE *file ));
-void yy_flush_buffer YY_PROTO(( YY_BUFFER_STATE b ));
-#define YY_FLUSH_BUFFER yy_flush_buffer( yy_current_buffer )
+static void H5LTyyensure_buffer_stack (void );
+static void H5LTyy_load_buffer_state (void );
+static void H5LTyy_init_buffer (YY_BUFFER_STATE b,FILE *file );
-YY_BUFFER_STATE yy_scan_buffer YY_PROTO(( char *base, yy_size_t size ));
-YY_BUFFER_STATE yy_scan_string YY_PROTO(( yyconst char *yy_str ));
-YY_BUFFER_STATE yy_scan_bytes YY_PROTO(( yyconst char *bytes, int len ));
+#define YY_FLUSH_BUFFER H5LTyy_flush_buffer(YY_CURRENT_BUFFER )
-static void *yy_flex_alloc YY_PROTO(( yy_size_t ));
-static void *yy_flex_realloc YY_PROTO(( void *, yy_size_t )) YY_MAY_BE_UNUSED;
-static void yy_flex_free YY_PROTO(( void * ));
+YY_BUFFER_STATE H5LTyy_scan_buffer (char *base,yy_size_t size );
+YY_BUFFER_STATE H5LTyy_scan_string (yyconst char *yy_str );
+YY_BUFFER_STATE H5LTyy_scan_bytes (yyconst char *bytes,yy_size_t len );
-#define yy_new_buffer yy_create_buffer
+void *H5LTyyalloc (yy_size_t );
+void *H5LTyyrealloc (void *,yy_size_t );
+void H5LTyyfree (void * );
+
+#define yy_new_buffer H5LTyy_create_buffer
#define yy_set_interactive(is_interactive) \
{ \
- if ( ! yy_current_buffer ) \
- yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
- yy_current_buffer->yy_is_interactive = is_interactive; \
+ if ( ! YY_CURRENT_BUFFER ){ \
+ H5LTyyensure_buffer_stack (); \
+ YY_CURRENT_BUFFER_LVALUE = \
+ H5LTyy_create_buffer(H5LTyyin,YY_BUF_SIZE ); \
+ } \
+ YY_CURRENT_BUFFER_LVALUE->yy_is_interactive = is_interactive; \
}
#define yy_set_bol(at_bol) \
{ \
- if ( ! yy_current_buffer ) \
- yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE ); \
- yy_current_buffer->yy_at_bol = at_bol; \
+ if ( ! YY_CURRENT_BUFFER ){\
+ H5LTyyensure_buffer_stack (); \
+ YY_CURRENT_BUFFER_LVALUE = \
+ H5LTyy_create_buffer(H5LTyyin,YY_BUF_SIZE ); \
+ } \
+ YY_CURRENT_BUFFER_LVALUE->yy_at_bol = at_bol; \
}
-#define YY_AT_BOL() (yy_current_buffer->yy_at_bol)
+#define YY_AT_BOL() (YY_CURRENT_BUFFER_LVALUE->yy_at_bol)
+/* Begin user sect3 */
-#define YY_USES_REJECT
typedef unsigned char YY_CHAR;
-FILE *yyin = (FILE *) 0, *yyout = (FILE *) 0;
+
+FILE *H5LTyyin = (FILE *) 0, *H5LTyyout = (FILE *) 0;
+
typedef int yy_state_type;
-extern char *yytext;
-#define yytext_ptr yytext
-static yy_state_type yy_get_previous_state YY_PROTO(( void ));
-static yy_state_type yy_try_NUL_trans YY_PROTO(( yy_state_type current_state ));
-static int yy_get_next_buffer YY_PROTO(( void ));
-static void yy_fatal_error YY_PROTO(( yyconst char msg[] ));
+extern int H5LTyylineno;
+
+int H5LTyylineno = 1;
+
+extern char *H5LTyytext;
+#define yytext_ptr H5LTyytext
+
+static yy_state_type yy_get_previous_state (void );
+static yy_state_type yy_try_NUL_trans (yy_state_type current_state );
+static int yy_get_next_buffer (void );
+static void yy_fatal_error (yyconst char msg[] );
/* Done after the current pattern has been matched and before the
- * corresponding action - sets up yytext.
+ * corresponding action - sets up H5LTyytext.
*/
#define YY_DO_BEFORE_ACTION \
- yytext_ptr = yy_bp; \
- yyleng = (int) (yy_cp - yy_bp); \
- yy_hold_char = *yy_cp; \
+ (yytext_ptr) = yy_bp; \
+ H5LTyyleng = (size_t) (yy_cp - yy_bp); \
+ (yy_hold_char) = *yy_cp; \
*yy_cp = '\0'; \
- yy_c_buf_p = yy_cp;
+ (yy_c_buf_p) = yy_cp;
#define YY_NUM_RULES 66
#define YY_END_OF_BUFFER 67
-static yyconst short int yy_acclist[437] =
+/* This struct is not used in this scanner,
+ but its presence is necessary. */
+struct yy_trans_info
+ {
+ flex_int32_t yy_verify;
+ flex_int32_t yy_nxt;
+ };
+static yyconst flex_int16_t yy_acclist[437] =
{ 0,
64, 64, 64, 64, 67, 66, 64, 66, 64, 65,
66, 56, 66, 55, 66, 62, 66, 63, 66, 66,
@@ -391,7 +441,7 @@ static yyconst short int yy_acclist[437] =
57, 21, 57, 34, 34, 57
} ;
-static yyconst short int yy_accept[546] =
+static yyconst flex_int16_t yy_accept[546] =
{ 0,
1, 2, 3, 4, 5, 6, 7, 9, 12, 14,
16, 18, 20, 21, 22, 23, 24, 26, 28, 30,
@@ -455,7 +505,7 @@ static yyconst short int yy_accept[546] =
432, 434, 435, 437, 437
} ;
-static yyconst int yy_ec[256] =
+static yyconst flex_int32_t yy_ec[256] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 2, 3,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -487,7 +537,7 @@ static yyconst int yy_ec[256] =
1, 1, 1, 1, 1
} ;
-static yyconst int yy_meta[42] =
+static yyconst flex_int32_t yy_meta[42] =
{ 0,
1, 1, 1, 2, 3, 3, 3, 3, 3, 3,
3, 3, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -496,7 +546,7 @@ static yyconst int yy_meta[42] =
1
} ;
-static yyconst short int yy_base[547] =
+static yyconst flex_int16_t yy_base[547] =
{ 0,
0, 0, 41, 0, 610, 611, 81, 83, 611, 0,
611, 611, 56, 599, 580, 575, 611, 611, 611, 611,
@@ -560,7 +610,7 @@ static yyconst short int yy_base[547] =
0, 611, 0, 611, 106, 275
} ;
-static yyconst short int yy_def[547] =
+static yyconst flex_int16_t yy_def[547] =
{ 0,
544, 1, 544, 3, 544, 544, 544, 544, 544, 545,
544, 544, 544, 544, 544, 544, 544, 544, 544, 544,
@@ -624,7 +674,7 @@ static yyconst short int yy_def[547] =
546, 544, 546, 0, 544, 544
} ;
-static yyconst short int yy_nxt[653] =
+static yyconst flex_int16_t yy_nxt[653] =
{ 0,
6, 7, 8, 9, 10, 10, 10, 10, 10, 10,
10, 10, 11, 12, 6, 6, 13, 6, 6, 6,
@@ -700,7 +750,7 @@ static yyconst short int yy_nxt[653] =
544, 544
} ;
-static yyconst short int yy_chk[653] =
+static yyconst flex_int16_t yy_chk[653] =
{ 0,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
@@ -776,22 +826,25 @@ static yyconst short int yy_chk[653] =
544, 544
} ;
-static yy_state_type yy_state_buf[YY_BUF_SIZE + 2], *yy_state_ptr;
+extern int H5LTyy_flex_debug;
+int H5LTyy_flex_debug = 0;
+
+static yy_state_type *yy_state_buf=0, *yy_state_ptr=0;
static char *yy_full_match;
static int yy_lp;
#define REJECT \
{ \
-*yy_cp = yy_hold_char; /* undo effects of setting up yytext */ \
-yy_cp = yy_full_match; /* restore poss. backed-over text */ \
-++yy_lp; \
+*yy_cp = (yy_hold_char); /* undo effects of setting up H5LTyytext */ \
+yy_cp = (yy_full_match); /* restore poss. backed-over text */ \
+++(yy_lp); \
goto find_rule; \
}
+
#define yymore() yymore_used_but_not_detected
#define YY_MORE_ADJ 0
#define YY_RESTORE_YY_MORE_OFFSET
-char *yytext;
+char *H5LTyytext;
#line 1 "H5LTanalyze.l"
-#define INITIAL 0
/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
* Copyright by The HDF Group. *
* Copyright by the Board of Trustees of the University of Illinois. *
@@ -858,9 +911,46 @@ extern hbool_t is_opq_tag;
hbool_t first_quote = 1;
+
+#line 916 "H5LTanalyze.c"
+
+#define INITIAL 0
#define TAG_STRING 1
-#line 864 "H5LTanalyze.c"
+#ifndef YY_EXTRA_TYPE
+#define YY_EXTRA_TYPE void *
+#endif
+
+static int yy_init_globals (void );
+
+/* Accessor methods to globals.
+ These are made visible to non-reentrant scanners for convenience. */
+
+int H5LTyylex_destroy (void );
+
+int H5LTyyget_debug (void );
+
+void H5LTyyset_debug (int debug_flag );
+
+YY_EXTRA_TYPE H5LTyyget_extra (void );
+
+void H5LTyyset_extra (YY_EXTRA_TYPE user_defined );
+
+FILE *H5LTyyget_in (void );
+
+void H5LTyyset_in (FILE * in_str );
+
+FILE *H5LTyyget_out (void );
+
+void H5LTyyset_out (FILE * out_str );
+
+yy_size_t H5LTyyget_leng (void );
+
+char *H5LTyyget_text (void );
+
+int H5LTyyget_lineno (void );
+
+void H5LTyyset_lineno (int line_number );
/* Macros after this point can all be overridden by user definitions in
* section 1.
@@ -868,65 +958,30 @@ hbool_t first_quote = 1;
#ifndef YY_SKIP_YYWRAP
#ifdef __cplusplus
-extern "C" int yywrap YY_PROTO(( void ));
+extern "C" int H5LTyywrap (void );
#else
-extern int yywrap YY_PROTO(( void ));
+extern int H5LTyywrap (void );
#endif
#endif
-#ifndef YY_NO_UNPUT
-static void yyunput YY_PROTO(( int c, char *buf_ptr ));
-#endif
-
+ static void yyunput (int c,char *buf_ptr );
+
#ifndef yytext_ptr
-static void yy_flex_strncpy YY_PROTO(( char *, yyconst char *, int ));
+static void yy_flex_strncpy (char *,yyconst char *,int );
#endif
#ifdef YY_NEED_STRLEN
-static int yy_flex_strlen YY_PROTO(( yyconst char * ));
+static int yy_flex_strlen (yyconst char * );
#endif
#ifndef YY_NO_INPUT
+
#ifdef __cplusplus
-static int yyinput YY_PROTO(( void ));
+static int yyinput (void );
#else
-static int input YY_PROTO(( void ));
-#endif
+static int input (void );
#endif
-#if YY_STACK_USED
-static int yy_start_stack_ptr = 0;
-static int yy_start_stack_depth = 0;
-static int *yy_start_stack = 0;
-#ifndef YY_NO_PUSH_STATE
-static void yy_push_state YY_PROTO(( int new_state ));
-#endif
-#ifndef YY_NO_POP_STATE
-static void yy_pop_state YY_PROTO(( void ));
-#endif
-#ifndef YY_NO_TOP_STATE
-static int yy_top_state YY_PROTO(( void ));
-#endif
-
-#else
-#define YY_NO_PUSH_STATE 1
-#define YY_NO_POP_STATE 1
-#define YY_NO_TOP_STATE 1
-#endif
-
-#ifdef YY_MALLOC_DECL
-YY_MALLOC_DECL
-#else
-#if __STDC__
-#ifndef __cplusplus
-#include <stdlib.h>
-#endif
-#else
-/* Just try to get by without declaring the routines. This will fail
- * miserably on non-ANSI systems for which sizeof(size_t) != sizeof(int)
- * or sizeof(void*) != sizeof(int).
- */
-#endif
#endif
/* Amount of stuff to slurp up with each read. */
@@ -935,12 +990,11 @@ YY_MALLOC_DECL
#endif
/* Copy whatever the last rule matched to the standard output. */
-
#ifndef ECHO
/* This used to be an fputs(), but since the string might contain NUL's,
* we now use fwrite().
*/
-#define ECHO (void) fwrite( yytext, yyleng, 1, yyout )
+#define ECHO do { if (fwrite( H5LTyytext, H5LTyyleng, 1, H5LTyyout )) {} } while (0)
#endif
/* Gets input and stuffs it into "buf". number of characters read, or YY_NULL,
@@ -948,21 +1002,35 @@ YY_MALLOC_DECL
*/
#ifndef YY_INPUT
#define YY_INPUT(buf,result,max_size) \
- if ( yy_current_buffer->yy_is_interactive ) \
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_is_interactive ) \
{ \
- int c = '*', n; \
+ int c = '*'; \
+ size_t n; \
for ( n = 0; n < max_size && \
- (c = getc( yyin )) != EOF && c != '\n'; ++n ) \
+ (c = getc( H5LTyyin )) != EOF && c != '\n'; ++n ) \
buf[n] = (char) c; \
if ( c == '\n' ) \
buf[n++] = (char) c; \
- if ( c == EOF && ferror( yyin ) ) \
+ if ( c == EOF && ferror( H5LTyyin ) ) \
YY_FATAL_ERROR( "input in flex scanner failed" ); \
result = n; \
} \
- else if ( ((result = fread( buf, 1, max_size, yyin )) == 0) \
- && ferror( yyin ) ) \
- YY_FATAL_ERROR( "input in flex scanner failed" );
+ else \
+ { \
+ errno=0; \
+ while ( (result = fread(buf, 1, max_size, H5LTyyin))==0 && ferror(H5LTyyin)) \
+ { \
+ if( errno != EINTR) \
+ { \
+ YY_FATAL_ERROR( "input in flex scanner failed" ); \
+ break; \
+ } \
+ errno=0; \
+ clearerr(H5LTyyin); \
+ } \
+ }\
+\
+
#endif
/* No semi-colon after return; correct usage is to write "yyterminate();" -
@@ -983,14 +1051,20 @@ YY_MALLOC_DECL
#define YY_FATAL_ERROR(msg) yy_fatal_error( msg )
#endif
+/* end tables serialization structures and prototypes */
+
/* Default declaration of generated scanner - a define so the user can
* easily add parameters.
*/
#ifndef YY_DECL
-#define YY_DECL int yylex YY_PROTO(( void ))
-#endif
+#define YY_DECL_IS_OURS 1
-/* Code executed at the beginning of each rule, after yytext and yyleng
+extern int H5LTyylex (void);
+
+#define YY_DECL int H5LTyylex (void)
+#endif /* !YY_DECL */
+
+/* Code executed at the beginning of each rule, after H5LTyytext and H5LTyyleng
* have been set up.
*/
#ifndef YY_USER_ACTION
@@ -1005,56 +1079,68 @@ YY_MALLOC_DECL
#define YY_RULE_SETUP \
YY_USER_ACTION
+/** The main scanner function which does all the work.
+ */
YY_DECL
- {
+{
register yy_state_type yy_current_state;
- register char *yy_cp = NULL, *yy_bp = NULL;
+ register char *yy_cp, *yy_bp;
register int yy_act;
-
+
#line 72 "H5LTanalyze.l"
-#line 1018 "H5LTanalyze.c"
+#line 1094 "H5LTanalyze.c"
- if ( yy_init )
+ if ( !(yy_init) )
{
- yy_init = 0;
+ (yy_init) = 1;
#ifdef YY_USER_INIT
YY_USER_INIT;
#endif
- if ( ! yy_start )
- yy_start = 1; /* first start state */
+ /* Create the reject buffer large enough to save one state per allowed character. */
+ if ( ! (yy_state_buf) )
+ (yy_state_buf) = (yy_state_type *)H5LTyyalloc(YY_STATE_BUF_SIZE );
+ if ( ! (yy_state_buf) )
+ YY_FATAL_ERROR( "out of dynamic memory in H5LTyylex()" );
- if ( ! yyin )
- yyin = stdin;
+ if ( ! (yy_start) )
+ (yy_start) = 1; /* first start state */
- if ( ! yyout )
- yyout = stdout;
+ if ( ! H5LTyyin )
+ H5LTyyin = stdin;
- if ( ! yy_current_buffer )
- yy_current_buffer =
- yy_create_buffer( yyin, YY_BUF_SIZE );
+ if ( ! H5LTyyout )
+ H5LTyyout = stdout;
- yy_load_buffer_state();
+ if ( ! YY_CURRENT_BUFFER ) {
+ H5LTyyensure_buffer_stack ();
+ YY_CURRENT_BUFFER_LVALUE =
+ H5LTyy_create_buffer(H5LTyyin,YY_BUF_SIZE );
+ }
+
+ H5LTyy_load_buffer_state( );
}
while ( 1 ) /* loops until end-of-file is reached */
{
- yy_cp = yy_c_buf_p;
+ yy_cp = (yy_c_buf_p);
- /* Support of yytext. */
- *yy_cp = yy_hold_char;
+ /* Support of H5LTyytext. */
+ *yy_cp = (yy_hold_char);
/* yy_bp points to the position in yy_ch_buf of the start of
* the current run.
*/
yy_bp = yy_cp;
- yy_current_state = yy_start;
- yy_state_ptr = yy_state_buf;
- *yy_state_ptr++ = yy_current_state;
+ yy_current_state = (yy_start);
+
+ (yy_state_ptr) = (yy_state_buf);
+ *(yy_state_ptr)++ = yy_current_state;
+
yy_match:
do
{
@@ -1066,36 +1152,34 @@ yy_match:
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
- *yy_state_ptr++ = yy_current_state;
+ *(yy_state_ptr)++ = yy_current_state;
++yy_cp;
}
while ( yy_base[yy_current_state] != 611 );
yy_find_action:
- yy_current_state = *--yy_state_ptr;
- yy_lp = yy_accept[yy_current_state];
+ yy_current_state = *--(yy_state_ptr);
+ (yy_lp) = yy_accept[yy_current_state];
find_rule: /* we branch to this label when backing up */
for ( ; ; ) /* until we find what rule we matched */
{
- if ( yy_lp && yy_lp < yy_accept[yy_current_state + 1] )
+ if ( (yy_lp) && (yy_lp) < yy_accept[yy_current_state + 1] )
{
- yy_act = yy_acclist[yy_lp];
+ yy_act = yy_acclist[(yy_lp)];
{
- yy_full_match = yy_cp;
+ (yy_full_match) = yy_cp;
break;
}
}
--yy_cp;
- yy_current_state = *--yy_state_ptr;
- yy_lp = yy_accept[yy_current_state];
+ yy_current_state = *--(yy_state_ptr);
+ (yy_lp) = yy_accept[yy_current_state];
}
YY_DO_BEFORE_ACTION;
-
do_action: /* This label is used only to access EOF actions. */
-
switch ( yy_act )
{ /* beginning of action switch */
case 1:
@@ -1375,7 +1459,7 @@ YY_RULE_SETUP
if( is_str_size || (is_enum && is_enum_memb) ||
is_opq_size || (asindex>-1 && arr_stack[asindex].is_dim) ||
(csindex>-1 && cmpd_stack[csindex].is_field) ) {
- H5LTyylval.ival = atoi(yytext);
+ H5LTyylval.ival = atoi(H5LTyytext);
return NUMBER;
} else
REJECT;
@@ -1396,13 +1480,14 @@ YY_RULE_SETUP
}
YY_BREAK
case 57:
+/* rule 57 can match eol */
YY_RULE_SETUP
#line 155 "H5LTanalyze.l"
{
#ifdef H5_HAVE_WIN32_API
- H5LTyylval.sval = _strdup(yytext);
+ H5LTyylval.sval = _strdup(H5LTyytext);
#else /* H5_HAVE_WIN32_API */
- H5LTyylval.sval = strdup(yytext);
+ H5LTyylval.sval = strdup(H5LTyytext);
#endif /* H5_HAVE_WIN32_API */
BEGIN INITIAL;
return STRING;
@@ -1439,11 +1524,13 @@ YY_RULE_SETUP
{return token(';');}
YY_BREAK
case 64:
+/* rule 64 can match eol */
YY_RULE_SETUP
#line 171 "H5LTanalyze.l"
;
YY_BREAK
case 65:
+/* rule 65 can match eol */
YY_RULE_SETUP
#line 172 "H5LTanalyze.l"
{ return 0; }
@@ -1453,7 +1540,7 @@ YY_RULE_SETUP
#line 174 "H5LTanalyze.l"
ECHO;
YY_BREAK
-#line 1457 "H5LTanalyze.c"
+#line 1544 "H5LTanalyze.c"
case YY_STATE_EOF(INITIAL):
case YY_STATE_EOF(TAG_STRING):
yyterminate();
@@ -1461,26 +1548,26 @@ ECHO;
case YY_END_OF_BUFFER:
{
/* Amount of text matched not including the EOB char. */
- int yy_amount_of_matched_text = (int) (yy_cp - yytext_ptr) - 1;
+ int yy_amount_of_matched_text = (int) (yy_cp - (yytext_ptr)) - 1;
/* Undo the effects of YY_DO_BEFORE_ACTION. */
- *yy_cp = yy_hold_char;
+ *yy_cp = (yy_hold_char);
YY_RESTORE_YY_MORE_OFFSET
- if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_NEW )
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_NEW )
{
/* We're scanning a new file or input source. It's
* possible that this happened because the user
- * just pointed yyin at a new source and called
- * yylex(). If so, then we have to assure
- * consistency between yy_current_buffer and our
+ * just pointed H5LTyyin at a new source and called
+ * H5LTyylex(). If so, then we have to assure
+ * consistency between YY_CURRENT_BUFFER and our
* globals. Here is the right place to do so, because
* this is the first action (other than possibly a
* back-up) that will match for the new input source.
*/
- yy_n_chars = yy_current_buffer->yy_n_chars;
- yy_current_buffer->yy_input_file = yyin;
- yy_current_buffer->yy_buffer_status = YY_BUFFER_NORMAL;
+ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+ YY_CURRENT_BUFFER_LVALUE->yy_input_file = H5LTyyin;
+ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status = YY_BUFFER_NORMAL;
}
/* Note that here we test for yy_c_buf_p "<=" to the position
@@ -1490,13 +1577,13 @@ ECHO;
* end-of-buffer state). Contrast this with the test
* in input().
*/
- if ( yy_c_buf_p <= &yy_current_buffer->yy_ch_buf[yy_n_chars] )
+ if ( (yy_c_buf_p) <= &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
{ /* This was really a NUL. */
yy_state_type yy_next_state;
- yy_c_buf_p = yytext_ptr + yy_amount_of_matched_text;
+ (yy_c_buf_p) = (yytext_ptr) + yy_amount_of_matched_text;
- yy_current_state = yy_get_previous_state();
+ yy_current_state = yy_get_previous_state( );
/* Okay, we're now positioned to make the NUL
* transition. We couldn't have
@@ -1509,41 +1596,41 @@ ECHO;
yy_next_state = yy_try_NUL_trans( yy_current_state );
- yy_bp = yytext_ptr + YY_MORE_ADJ;
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
if ( yy_next_state )
{
/* Consume the NUL. */
- yy_cp = ++yy_c_buf_p;
+ yy_cp = ++(yy_c_buf_p);
yy_current_state = yy_next_state;
goto yy_match;
}
else
{
- yy_cp = yy_c_buf_p;
+ yy_cp = (yy_c_buf_p);
goto yy_find_action;
}
}
- else switch ( yy_get_next_buffer() )
+ else switch ( yy_get_next_buffer( ) )
{
case EOB_ACT_END_OF_FILE:
{
- yy_did_buffer_switch_on_eof = 0;
+ (yy_did_buffer_switch_on_eof) = 0;
- if ( yywrap() )
+ if ( H5LTyywrap( ) )
{
/* Note: because we've taken care in
* yy_get_next_buffer() to have set up
- * yytext, we can now set up
+ * H5LTyytext, we can now set up
* yy_c_buf_p so that if some total
* hoser (like flex itself) wants to
* call the scanner after we return the
* YY_NULL, it'll still work - another
* YY_NULL will get returned.
*/
- yy_c_buf_p = yytext_ptr + YY_MORE_ADJ;
+ (yy_c_buf_p) = (yytext_ptr) + YY_MORE_ADJ;
yy_act = YY_STATE_EOF(YY_START);
goto do_action;
@@ -1551,30 +1638,30 @@ ECHO;
else
{
- if ( ! yy_did_buffer_switch_on_eof )
+ if ( ! (yy_did_buffer_switch_on_eof) )
YY_NEW_FILE;
}
break;
}
case EOB_ACT_CONTINUE_SCAN:
- yy_c_buf_p =
- yytext_ptr + yy_amount_of_matched_text;
+ (yy_c_buf_p) =
+ (yytext_ptr) + yy_amount_of_matched_text;
- yy_current_state = yy_get_previous_state();
+ yy_current_state = yy_get_previous_state( );
- yy_cp = yy_c_buf_p;
- yy_bp = yytext_ptr + YY_MORE_ADJ;
+ yy_cp = (yy_c_buf_p);
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
goto yy_match;
case EOB_ACT_LAST_MATCH:
- yy_c_buf_p =
- &yy_current_buffer->yy_ch_buf[yy_n_chars];
+ (yy_c_buf_p) =
+ &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)];
- yy_current_state = yy_get_previous_state();
+ yy_current_state = yy_get_previous_state( );
- yy_cp = yy_c_buf_p;
- yy_bp = yytext_ptr + YY_MORE_ADJ;
+ yy_cp = (yy_c_buf_p);
+ yy_bp = (yytext_ptr) + YY_MORE_ADJ;
goto yy_find_action;
}
break;
@@ -1585,8 +1672,7 @@ ECHO;
"fatal flex scanner internal error--no action found" );
} /* end of action switch */
} /* end of scanning one token */
- } /* end of yylex */
-
+} /* end of H5LTyylex */
/* yy_get_next_buffer - try to read in a new buffer
*
@@ -1595,21 +1681,20 @@ ECHO;
* EOB_ACT_CONTINUE_SCAN - continue scanning from current position
* EOB_ACT_END_OF_FILE - end of file
*/
-
-static int yy_get_next_buffer()
- {
- register char *dest = yy_current_buffer->yy_ch_buf;
- register char *source = yytext_ptr;
+static int yy_get_next_buffer (void)
+{
+ register char *dest = YY_CURRENT_BUFFER_LVALUE->yy_ch_buf;
+ register char *source = (yytext_ptr);
register int number_to_move, i;
int ret_val;
- if ( yy_c_buf_p > &yy_current_buffer->yy_ch_buf[yy_n_chars + 1] )
+ if ( (yy_c_buf_p) > &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] )
YY_FATAL_ERROR(
"fatal flex scanner internal error--end of buffer missed" );
- if ( yy_current_buffer->yy_fill_buffer == 0 )
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_fill_buffer == 0 )
{ /* Don't try to fill the buffer, so this is an EOF. */
- if ( yy_c_buf_p - yytext_ptr - YY_MORE_ADJ == 1 )
+ if ( (yy_c_buf_p) - (yytext_ptr) - YY_MORE_ADJ == 1 )
{
/* We matched a single character, the EOB, so
* treat this as a final EOF.
@@ -1629,86 +1714,52 @@ static int yy_get_next_buffer()
/* Try to read more data. */
/* First move last chars to start of buffer. */
- number_to_move = (int) (yy_c_buf_p - yytext_ptr) - 1;
+ number_to_move = (int) ((yy_c_buf_p) - (yytext_ptr)) - 1;
for ( i = 0; i < number_to_move; ++i )
*(dest++) = *(source++);
- if ( yy_current_buffer->yy_buffer_status == YY_BUFFER_EOF_PENDING )
+ if ( YY_CURRENT_BUFFER_LVALUE->yy_buffer_status == YY_BUFFER_EOF_PENDING )
/* don't do the read, it's not guaranteed to return an EOF,
* just force an EOF
*/
- yy_current_buffer->yy_n_chars = yy_n_chars = 0;
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars) = 0;
else
{
- int num_to_read =
- yy_current_buffer->yy_buf_size - number_to_move - 1;
+ yy_size_t num_to_read =
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_size - number_to_move - 1;
while ( num_to_read <= 0 )
{ /* Not enough room in the buffer - grow it. */
-#ifdef YY_USES_REJECT
+
YY_FATAL_ERROR(
"input buffer overflow, can't enlarge buffer because scanner uses REJECT" );
-#else
-
- /* just a shorter name for the current buffer */
- YY_BUFFER_STATE b = yy_current_buffer;
-
- int yy_c_buf_p_offset =
- (int) (yy_c_buf_p - b->yy_ch_buf);
- if ( b->yy_is_our_buffer )
- {
- int new_size = b->yy_buf_size * 2;
-
- if ( new_size <= 0 )
- b->yy_buf_size += b->yy_buf_size / 8;
- else
- b->yy_buf_size *= 2;
-
- b->yy_ch_buf = (char *)
- /* Include room in for 2 EOB chars. */
- yy_flex_realloc( (void *) b->yy_ch_buf,
- b->yy_buf_size + 2 );
- }
- else
- /* Can't grow it, we don't own it. */
- b->yy_ch_buf = 0;
-
- if ( ! b->yy_ch_buf )
- YY_FATAL_ERROR(
- "fatal error - scanner input buffer overflow" );
-
- yy_c_buf_p = &b->yy_ch_buf[yy_c_buf_p_offset];
-
- num_to_read = yy_current_buffer->yy_buf_size -
- number_to_move - 1;
-#endif
}
if ( num_to_read > YY_READ_BUF_SIZE )
num_to_read = YY_READ_BUF_SIZE;
/* Read in more data. */
- YY_INPUT( (&yy_current_buffer->yy_ch_buf[number_to_move]),
- yy_n_chars, num_to_read );
+ YY_INPUT( (&YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move]),
+ (yy_n_chars), num_to_read );
- yy_current_buffer->yy_n_chars = yy_n_chars;
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
}
- if ( yy_n_chars == 0 )
+ if ( (yy_n_chars) == 0 )
{
if ( number_to_move == YY_MORE_ADJ )
{
ret_val = EOB_ACT_END_OF_FILE;
- yyrestart( yyin );
+ H5LTyyrestart(H5LTyyin );
}
else
{
ret_val = EOB_ACT_LAST_MATCH;
- yy_current_buffer->yy_buffer_status =
+ YY_CURRENT_BUFFER_LVALUE->yy_buffer_status =
YY_BUFFER_EOF_PENDING;
}
}
@@ -1716,28 +1767,36 @@ static int yy_get_next_buffer()
else
ret_val = EOB_ACT_CONTINUE_SCAN;
- yy_n_chars += number_to_move;
- yy_current_buffer->yy_ch_buf[yy_n_chars] = YY_END_OF_BUFFER_CHAR;
- yy_current_buffer->yy_ch_buf[yy_n_chars + 1] = YY_END_OF_BUFFER_CHAR;
+ if ((yy_size_t) ((yy_n_chars) + number_to_move) > YY_CURRENT_BUFFER_LVALUE->yy_buf_size) {
+ /* Extend the array by 50%, plus the number we really need. */
+ yy_size_t new_size = (yy_n_chars) + number_to_move + ((yy_n_chars) >> 1);
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf = (char *) H5LTyyrealloc((void *) YY_CURRENT_BUFFER_LVALUE->yy_ch_buf,new_size );
+ if ( ! YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
+ YY_FATAL_ERROR( "out of dynamic memory in yy_get_next_buffer()" );
+ }
- yytext_ptr = &yy_current_buffer->yy_ch_buf[0];
+ (yy_n_chars) += number_to_move;
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] = YY_END_OF_BUFFER_CHAR;
+ YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars) + 1] = YY_END_OF_BUFFER_CHAR;
- return ret_val;
- }
+ (yytext_ptr) = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[0];
+ return ret_val;
+}
/* yy_get_previous_state - get the state just before the EOB char was reached */
-static yy_state_type yy_get_previous_state()
- {
+ static yy_state_type yy_get_previous_state (void)
+{
register yy_state_type yy_current_state;
register char *yy_cp;
+
+ yy_current_state = (yy_start);
- yy_current_state = yy_start;
- yy_state_ptr = yy_state_buf;
- *yy_state_ptr++ = yy_current_state;
+ (yy_state_ptr) = (yy_state_buf);
+ *(yy_state_ptr)++ = yy_current_state;
- for ( yy_cp = yytext_ptr + YY_MORE_ADJ; yy_cp < yy_c_buf_p; ++yy_cp )
+ for ( yy_cp = (yytext_ptr) + YY_MORE_ADJ; yy_cp < (yy_c_buf_p); ++yy_cp )
{
register YY_CHAR yy_c = (*yy_cp ? yy_ec[YY_SC_TO_UI(*yy_cp)] : 1);
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
@@ -1747,28 +1806,21 @@ static yy_state_type yy_get_previous_state()
yy_c = yy_meta[(unsigned int) yy_c];
}
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
- *yy_state_ptr++ = yy_current_state;
+ *(yy_state_ptr)++ = yy_current_state;
}
return yy_current_state;
- }
-
+}
/* yy_try_NUL_trans - try to make a transition on the NUL character
*
* synopsis
* next_state = yy_try_NUL_trans( current_state );
*/
-
-#ifdef YY_USE_PROTOS
-static yy_state_type yy_try_NUL_trans( yy_state_type yy_current_state )
-#else
-static yy_state_type yy_try_NUL_trans( yy_current_state )
-yy_state_type yy_current_state;
-#endif
- {
+ static yy_state_type yy_try_NUL_trans (yy_state_type yy_current_state )
+{
register int yy_is_jam;
-
+
register YY_CHAR yy_c = 1;
while ( yy_chk[yy_base[yy_current_state] + yy_c] != yy_current_state )
{
@@ -1779,84 +1831,76 @@ yy_state_type yy_current_state;
yy_current_state = yy_nxt[yy_base[yy_current_state] + (unsigned int) yy_c];
yy_is_jam = (yy_current_state == 544);
if ( ! yy_is_jam )
- *yy_state_ptr++ = yy_current_state;
-
- return yy_is_jam ? 0 : yy_current_state;
- }
+ *(yy_state_ptr)++ = yy_current_state;
+ return yy_is_jam ? 0 : yy_current_state;
+}
-#ifndef YY_NO_UNPUT
-#ifdef YY_USE_PROTOS
-static void yyunput( int c, register char *yy_bp )
-#else
-static void yyunput( c, yy_bp )
-int c;
-register char *yy_bp;
-#endif
- {
- register char *yy_cp = yy_c_buf_p;
+ static void yyunput (int c, register char * yy_bp )
+{
+ register char *yy_cp;
+
+ yy_cp = (yy_c_buf_p);
- /* undo effects of setting up yytext */
- *yy_cp = yy_hold_char;
+ /* undo effects of setting up H5LTyytext */
+ *yy_cp = (yy_hold_char);
- if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
+ if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
{ /* need to shift things up to make room */
/* +2 for EOB chars. */
- register int number_to_move = yy_n_chars + 2;
- register char *dest = &yy_current_buffer->yy_ch_buf[
- yy_current_buffer->yy_buf_size + 2];
+ register yy_size_t number_to_move = (yy_n_chars) + 2;
+ register char *dest = &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_size + 2];
register char *source =
- &yy_current_buffer->yy_ch_buf[number_to_move];
+ &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[number_to_move];
- while ( source > yy_current_buffer->yy_ch_buf )
+ while ( source > YY_CURRENT_BUFFER_LVALUE->yy_ch_buf )
*--dest = *--source;
yy_cp += (int) (dest - source);
yy_bp += (int) (dest - source);
- yy_current_buffer->yy_n_chars =
- yy_n_chars = yy_current_buffer->yy_buf_size;
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars =
+ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_buf_size;
- if ( yy_cp < yy_current_buffer->yy_ch_buf + 2 )
+ if ( yy_cp < YY_CURRENT_BUFFER_LVALUE->yy_ch_buf + 2 )
YY_FATAL_ERROR( "flex scanner push-back overflow" );
}
*--yy_cp = (char) c;
-
- yytext_ptr = yy_bp;
- yy_hold_char = *yy_cp;
- yy_c_buf_p = yy_cp;
- }
-#endif /* ifndef YY_NO_UNPUT */
-
+ (yytext_ptr) = yy_bp;
+ (yy_hold_char) = *yy_cp;
+ (yy_c_buf_p) = yy_cp;
+}
#ifndef YY_NO_INPUT
#ifdef __cplusplus
-static int yyinput()
+ static int yyinput (void)
#else
-static int input()
+ static int input (void)
#endif
- {
- int c;
- *yy_c_buf_p = yy_hold_char;
+{
+ int c;
+
+ *(yy_c_buf_p) = (yy_hold_char);
- if ( *yy_c_buf_p == YY_END_OF_BUFFER_CHAR )
+ if ( *(yy_c_buf_p) == YY_END_OF_BUFFER_CHAR )
{
/* yy_c_buf_p now points to the character we want to return.
* If this occurs *before* the EOB characters, then it's a
* valid NUL; if not, then we've hit the end of the buffer.
*/
- if ( yy_c_buf_p < &yy_current_buffer->yy_ch_buf[yy_n_chars] )
+ if ( (yy_c_buf_p) < &YY_CURRENT_BUFFER_LVALUE->yy_ch_buf[(yy_n_chars)] )
/* This was really a NUL. */
- *yy_c_buf_p = '\0';
+ *(yy_c_buf_p) = '\0';
else
{ /* need more input */
- int offset = yy_c_buf_p - yytext_ptr;
- ++yy_c_buf_p;
+ yy_size_t offset = (yy_c_buf_p) - (yytext_ptr);
+ ++(yy_c_buf_p);
- switch ( yy_get_next_buffer() )
+ switch ( yy_get_next_buffer( ) )
{
case EOB_ACT_LAST_MATCH:
/* This happens because yy_g_n_b()
@@ -1870,16 +1914,16 @@ static int input()
*/
/* Reset buffer status. */
- yyrestart( yyin );
+ H5LTyyrestart(H5LTyyin );
- /* fall through */
+ /*FALLTHROUGH*/
case EOB_ACT_END_OF_FILE:
{
- if ( yywrap() )
+ if ( H5LTyywrap( ) )
return EOF;
- if ( ! yy_did_buffer_switch_on_eof )
+ if ( ! (yy_did_buffer_switch_on_eof) )
YY_NEW_FILE;
#ifdef __cplusplus
return yyinput();
@@ -1889,171 +1933,165 @@ static int input()
}
case EOB_ACT_CONTINUE_SCAN:
- yy_c_buf_p = yytext_ptr + offset;
+ (yy_c_buf_p) = (yytext_ptr) + offset;
break;
}
}
}
- c = *(unsigned char *) yy_c_buf_p; /* cast for 8-bit char's */
- *yy_c_buf_p = '\0'; /* preserve yytext */
- yy_hold_char = *++yy_c_buf_p;
-
+ c = *(unsigned char *) (yy_c_buf_p); /* cast for 8-bit char's */
+ *(yy_c_buf_p) = '\0'; /* preserve H5LTyytext */
+ (yy_hold_char) = *++(yy_c_buf_p);
return c;
- }
-#endif /* YY_NO_INPUT */
-
-#ifdef YY_USE_PROTOS
-void yyrestart( FILE *input_file )
-#else
-void yyrestart( input_file )
-FILE *input_file;
-#endif
- {
- if ( ! yy_current_buffer )
- yy_current_buffer = yy_create_buffer( yyin, YY_BUF_SIZE );
+}
+#endif /* ifndef YY_NO_INPUT */
- yy_init_buffer( yy_current_buffer, input_file );
- yy_load_buffer_state();
+/** Immediately switch to a different input stream.
+ * @param input_file A readable stream.
+ *
+ * @note This function does not reset the start condition to @c INITIAL .
+ */
+ void H5LTyyrestart (FILE * input_file )
+{
+
+ if ( ! YY_CURRENT_BUFFER ){
+ H5LTyyensure_buffer_stack ();
+ YY_CURRENT_BUFFER_LVALUE =
+ H5LTyy_create_buffer(H5LTyyin,YY_BUF_SIZE );
}
+ H5LTyy_init_buffer(YY_CURRENT_BUFFER,input_file );
+ H5LTyy_load_buffer_state( );
+}
-#ifdef YY_USE_PROTOS
-void yy_switch_to_buffer( YY_BUFFER_STATE new_buffer )
-#else
-void yy_switch_to_buffer( new_buffer )
-YY_BUFFER_STATE new_buffer;
-#endif
- {
- if ( yy_current_buffer == new_buffer )
+/** Switch to a different input buffer.
+ * @param new_buffer The new input buffer.
+ *
+ */
+ void H5LTyy_switch_to_buffer (YY_BUFFER_STATE new_buffer )
+{
+
+ /* TODO. We should be able to replace this entire function body
+ * with
+ * H5LTyypop_buffer_state();
+ * H5LTyypush_buffer_state(new_buffer);
+ */
+ H5LTyyensure_buffer_stack ();
+ if ( YY_CURRENT_BUFFER == new_buffer )
return;
- if ( yy_current_buffer )
+ if ( YY_CURRENT_BUFFER )
{
/* Flush out information for old buffer. */
- *yy_c_buf_p = yy_hold_char;
- yy_current_buffer->yy_buf_pos = yy_c_buf_p;
- yy_current_buffer->yy_n_chars = yy_n_chars;
+ *(yy_c_buf_p) = (yy_hold_char);
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
}
- yy_current_buffer = new_buffer;
- yy_load_buffer_state();
+ YY_CURRENT_BUFFER_LVALUE = new_buffer;
+ H5LTyy_load_buffer_state( );
/* We don't actually know whether we did this switch during
- * EOF (yywrap()) processing, but the only time this flag
- * is looked at is after yywrap() is called, so it's safe
+ * EOF (H5LTyywrap()) processing, but the only time this flag
+ * is looked at is after H5LTyywrap() is called, so it's safe
* to go ahead and always set it.
*/
- yy_did_buffer_switch_on_eof = 1;
- }
-
-
-#ifdef YY_USE_PROTOS
-void yy_load_buffer_state( void )
-#else
-void yy_load_buffer_state()
-#endif
- {
- yy_n_chars = yy_current_buffer->yy_n_chars;
- yytext_ptr = yy_c_buf_p = yy_current_buffer->yy_buf_pos;
- yyin = yy_current_buffer->yy_input_file;
- yy_hold_char = *yy_c_buf_p;
- }
+ (yy_did_buffer_switch_on_eof) = 1;
+}
+static void H5LTyy_load_buffer_state (void)
+{
+ (yy_n_chars) = YY_CURRENT_BUFFER_LVALUE->yy_n_chars;
+ (yytext_ptr) = (yy_c_buf_p) = YY_CURRENT_BUFFER_LVALUE->yy_buf_pos;
+ H5LTyyin = YY_CURRENT_BUFFER_LVALUE->yy_input_file;
+ (yy_hold_char) = *(yy_c_buf_p);
+}
-#ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_create_buffer( FILE *file, int size )
-#else
-YY_BUFFER_STATE yy_create_buffer( file, size )
-FILE *file;
-int size;
-#endif
- {
+/** Allocate and initialize an input buffer state.
+ * @param file A readable stream.
+ * @param size The character buffer size in bytes. When in doubt, use @c YY_BUF_SIZE.
+ *
+ * @return the allocated buffer state.
+ */
+ YY_BUFFER_STATE H5LTyy_create_buffer (FILE * file, int size )
+{
YY_BUFFER_STATE b;
-
- b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
+
+ b = (YY_BUFFER_STATE) H5LTyyalloc(sizeof( struct yy_buffer_state ) );
if ( ! b )
- YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+ YY_FATAL_ERROR( "out of dynamic memory in H5LTyy_create_buffer()" );
b->yy_buf_size = size;
/* yy_ch_buf has to be 2 characters longer than the size given because
* we need to put in 2 end-of-buffer characters.
*/
- b->yy_ch_buf = (char *) yy_flex_alloc( b->yy_buf_size + 2 );
+ b->yy_ch_buf = (char *) H5LTyyalloc(b->yy_buf_size + 2 );
if ( ! b->yy_ch_buf )
- YY_FATAL_ERROR( "out of dynamic memory in yy_create_buffer()" );
+ YY_FATAL_ERROR( "out of dynamic memory in H5LTyy_create_buffer()" );
b->yy_is_our_buffer = 1;
- yy_init_buffer( b, file );
+ H5LTyy_init_buffer(b,file );
return b;
- }
-
+}
-#ifdef YY_USE_PROTOS
-void yy_delete_buffer( YY_BUFFER_STATE b )
-#else
-void yy_delete_buffer( b )
-YY_BUFFER_STATE b;
-#endif
- {
+/** Destroy the buffer.
+ * @param b a buffer created with H5LTyy_create_buffer()
+ *
+ */
+ void H5LTyy_delete_buffer (YY_BUFFER_STATE b )
+{
+
if ( ! b )
return;
- if ( b == yy_current_buffer )
- yy_current_buffer = (YY_BUFFER_STATE) 0;
+ if ( b == YY_CURRENT_BUFFER ) /* Not sure if we should pop here. */
+ YY_CURRENT_BUFFER_LVALUE = (YY_BUFFER_STATE) 0;
if ( b->yy_is_our_buffer )
- yy_flex_free( (void *) b->yy_ch_buf );
-
- yy_flex_free( (void *) b );
- }
-
+ H5LTyyfree((void *) b->yy_ch_buf );
+ H5LTyyfree((void *) b );
+}
-#ifdef YY_USE_PROTOS
-void yy_init_buffer( YY_BUFFER_STATE b, FILE *file )
-#else
-void yy_init_buffer( b, file )
-YY_BUFFER_STATE b;
-FILE *file;
-#endif
-
+/* Initializes or reinitializes a buffer.
+ * This function is sometimes called more than once on the same buffer,
+ * such as during a H5LTyyrestart() or at EOF.
+ */
+ static void H5LTyy_init_buffer (YY_BUFFER_STATE b, FILE * file )
- {
- yy_flush_buffer( b );
+{
+ int oerrno = errno;
+
+ H5LTyy_flush_buffer(b );
b->yy_input_file = file;
b->yy_fill_buffer = 1;
-#if YY_ALWAYS_INTERACTIVE
- b->yy_is_interactive = 1;
-#else
-#if YY_NEVER_INTERACTIVE
- b->yy_is_interactive = 0;
-#else
-#ifdef H5_HAVE_WIN32_API
- b->yy_is_interactive = file ? (_isatty( _fileno(file) ) > 0) : 0;
-#else /* H5_HAVE_WIN32_API */
- b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
-#endif /* H5_HAVE_WIN32_API */
-#endif
-#endif
- }
-
+ /* If b is the current buffer, then H5LTyy_init_buffer was _probably_
+ * called from H5LTyyrestart() or through yy_get_next_buffer.
+ * In that case, we don't want to reset the lineno or column.
+ */
+ if (b != YY_CURRENT_BUFFER){
+ b->yy_bs_lineno = 1;
+ b->yy_bs_column = 0;
+ }
-#ifdef YY_USE_PROTOS
-void yy_flush_buffer( YY_BUFFER_STATE b )
-#else
-void yy_flush_buffer( b )
-YY_BUFFER_STATE b;
-#endif
+ b->yy_is_interactive = file ? (isatty( fileno(file) ) > 0) : 0;
+
+ errno = oerrno;
+}
- {
- if ( ! b )
+/** Discard all buffered characters. On the next scan, YY_INPUT will be called.
+ * @param b the buffer state to be flushed, usually @c YY_CURRENT_BUFFER.
+ *
+ */
+ void H5LTyy_flush_buffer (YY_BUFFER_STATE b )
+{
+ if ( ! b )
return;
b->yy_n_chars = 0;
@@ -2070,31 +2108,127 @@ YY_BUFFER_STATE b;
b->yy_at_bol = 1;
b->yy_buffer_status = YY_BUFFER_NEW;
- if ( b == yy_current_buffer )
- yy_load_buffer_state();
+ if ( b == YY_CURRENT_BUFFER )
+ H5LTyy_load_buffer_state( );
+}
+
+/** Pushes the new state onto the stack. The new state becomes
+ * the current state. This function will allocate the stack
+ * if necessary.
+ * @param new_buffer The new state.
+ *
+ */
+void H5LTyypush_buffer_state (YY_BUFFER_STATE new_buffer )
+{
+ if (new_buffer == NULL)
+ return;
+
+ H5LTyyensure_buffer_stack();
+
+ /* This block is copied from H5LTyy_switch_to_buffer. */
+ if ( YY_CURRENT_BUFFER )
+ {
+ /* Flush out information for old buffer. */
+ *(yy_c_buf_p) = (yy_hold_char);
+ YY_CURRENT_BUFFER_LVALUE->yy_buf_pos = (yy_c_buf_p);
+ YY_CURRENT_BUFFER_LVALUE->yy_n_chars = (yy_n_chars);
+ }
+
+ /* Only push if top exists. Otherwise, replace top. */
+ if (YY_CURRENT_BUFFER)
+ (yy_buffer_stack_top)++;
+ YY_CURRENT_BUFFER_LVALUE = new_buffer;
+
+ /* copied from H5LTyy_switch_to_buffer. */
+ H5LTyy_load_buffer_state( );
+ (yy_did_buffer_switch_on_eof) = 1;
+}
+
+/** Removes and deletes the top of the stack, if present.
+ * The next element becomes the new top.
+ *
+ */
+void H5LTyypop_buffer_state (void)
+{
+ if (!YY_CURRENT_BUFFER)
+ return;
+
+ H5LTyy_delete_buffer(YY_CURRENT_BUFFER );
+ YY_CURRENT_BUFFER_LVALUE = NULL;
+ if ((yy_buffer_stack_top) > 0)
+ --(yy_buffer_stack_top);
+
+ if (YY_CURRENT_BUFFER) {
+ H5LTyy_load_buffer_state( );
+ (yy_did_buffer_switch_on_eof) = 1;
}
+}
+/* Allocates the stack if it does not exist.
+ * Guarantees space for at least one push.
+ */
+static void H5LTyyensure_buffer_stack (void)
+{
+ yy_size_t num_to_alloc;
+
+ if (!(yy_buffer_stack)) {
+
+ /* First allocation is just for 2 elements, since we don't know if this
+ * scanner will even need a stack. We use 2 instead of 1 to avoid an
+ * immediate realloc on the next call.
+ */
+ num_to_alloc = 1;
+ (yy_buffer_stack) = (struct yy_buffer_state**)H5LTyyalloc
+ (num_to_alloc * sizeof(struct yy_buffer_state*)
+ );
+ if ( ! (yy_buffer_stack) )
+ YY_FATAL_ERROR( "out of dynamic memory in H5LTyyensure_buffer_stack()" );
+
+ memset((yy_buffer_stack), 0, num_to_alloc * sizeof(struct yy_buffer_state*));
+
+ (yy_buffer_stack_max) = num_to_alloc;
+ (yy_buffer_stack_top) = 0;
+ return;
+ }
-#ifndef YY_NO_SCAN_BUFFER
-#ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_scan_buffer( char *base, yy_size_t size )
-#else
-YY_BUFFER_STATE yy_scan_buffer( base, size )
-char *base;
-yy_size_t size;
-#endif
- {
- YY_BUFFER_STATE b;
+ if ((yy_buffer_stack_top) >= ((yy_buffer_stack_max)) - 1){
+
+ /* Increase the buffer to prepare for a possible push. */
+ int grow_size = 8 /* arbitrary grow size */;
+
+ num_to_alloc = (yy_buffer_stack_max) + grow_size;
+ (yy_buffer_stack) = (struct yy_buffer_state**)H5LTyyrealloc
+ ((yy_buffer_stack),
+ num_to_alloc * sizeof(struct yy_buffer_state*)
+ );
+ if ( ! (yy_buffer_stack) )
+ YY_FATAL_ERROR( "out of dynamic memory in H5LTyyensure_buffer_stack()" );
+ /* zero only the new slots.*/
+ memset((yy_buffer_stack) + (yy_buffer_stack_max), 0, grow_size * sizeof(struct yy_buffer_state*));
+ (yy_buffer_stack_max) = num_to_alloc;
+ }
+}
+
+/** Setup the input buffer state to scan directly from a user-specified character buffer.
+ * @param base the character buffer
+ * @param size the size in bytes of the character buffer
+ *
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE H5LTyy_scan_buffer (char * base, yy_size_t size )
+{
+ YY_BUFFER_STATE b;
+
if ( size < 2 ||
base[size-2] != YY_END_OF_BUFFER_CHAR ||
base[size-1] != YY_END_OF_BUFFER_CHAR )
/* They forgot to leave room for the EOB's. */
return 0;
- b = (YY_BUFFER_STATE) yy_flex_alloc( sizeof( struct yy_buffer_state ) );
+ b = (YY_BUFFER_STATE) H5LTyyalloc(sizeof( struct yy_buffer_state ) );
if ( ! b )
- YY_FATAL_ERROR( "out of dynamic memory in yy_scan_buffer()" );
+ YY_FATAL_ERROR( "out of dynamic memory in H5LTyy_scan_buffer()" );
b->yy_buf_size = size - 2; /* "- 2" to take care of EOB's */
b->yy_buf_pos = b->yy_ch_buf = base;
@@ -2106,58 +2240,53 @@ yy_size_t size;
b->yy_fill_buffer = 0;
b->yy_buffer_status = YY_BUFFER_NEW;
- yy_switch_to_buffer( b );
+ H5LTyy_switch_to_buffer(b );
return b;
- }
-#endif
-
-
-#ifndef YY_NO_SCAN_STRING
-#ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_scan_string( yyconst char *yy_str )
-#else
-YY_BUFFER_STATE yy_scan_string( yy_str )
-yyconst char *yy_str;
-#endif
- {
- int len;
- for ( len = 0; yy_str[len]; ++len )
- ;
-
- return yy_scan_bytes( yy_str, len );
- }
-#endif
+}
+/** Setup the input buffer state to scan a string. The next call to H5LTyylex() will
+ * scan from a @e copy of @a str.
+ * @param yystr a NUL-terminated string to scan
+ *
+ * @return the newly allocated buffer state object.
+ * @note If you want to scan bytes that may contain NUL values, then use
+ * H5LTyy_scan_bytes() instead.
+ */
+YY_BUFFER_STATE H5LTyy_scan_string (yyconst char * yystr )
+{
+
+ return H5LTyy_scan_bytes(yystr,strlen(yystr) );
+}
-#ifndef YY_NO_SCAN_BYTES
-#ifdef YY_USE_PROTOS
-YY_BUFFER_STATE yy_scan_bytes( yyconst char *bytes, int len )
-#else
-YY_BUFFER_STATE yy_scan_bytes( bytes, len )
-yyconst char *bytes;
-int len;
-#endif
- {
+/** Setup the input buffer state to scan the given bytes. The next call to H5LTyylex() will
+ * scan from a @e copy of @a bytes.
+ * @param yybytes the byte buffer to scan
+ * @param _yybytes_len the number of bytes in the buffer pointed to by @a bytes.
+ *
+ * @return the newly allocated buffer state object.
+ */
+YY_BUFFER_STATE H5LTyy_scan_bytes (yyconst char * yybytes, yy_size_t _yybytes_len )
+{
YY_BUFFER_STATE b;
char *buf;
yy_size_t n;
int i;
-
+
/* Get memory for full buffer, including space for trailing EOB's. */
- n = len + 2;
- buf = (char *) yy_flex_alloc( n );
+ n = _yybytes_len + 2;
+ buf = (char *) H5LTyyalloc(n );
if ( ! buf )
- YY_FATAL_ERROR( "out of dynamic memory in yy_scan_bytes()" );
+ YY_FATAL_ERROR( "out of dynamic memory in H5LTyy_scan_bytes()" );
- for ( i = 0; i < len; ++i )
- buf[i] = bytes[i];
+ for ( i = 0; i < _yybytes_len; ++i )
+ buf[i] = yybytes[i];
- buf[len] = buf[len+1] = YY_END_OF_BUFFER_CHAR;
+ buf[_yybytes_len] = buf[_yybytes_len+1] = YY_END_OF_BUFFER_CHAR;
- b = yy_scan_buffer( buf, n );
+ b = H5LTyy_scan_buffer(buf,n );
if ( ! b )
- YY_FATAL_ERROR( "bad buffer in yy_scan_bytes()" );
+ YY_FATAL_ERROR( "bad buffer in H5LTyy_scan_bytes()" );
/* It's okay to grow etc. this buffer, and we should throw it
* away when we're done.
@@ -2165,148 +2294,204 @@ int len;
b->yy_is_our_buffer = 1;
return b;
- }
+}
+
+#ifndef YY_EXIT_FAILURE
+#define YY_EXIT_FAILURE 2
#endif
+static void yy_fatal_error (yyconst char* msg )
+{
+ (void) fprintf( stderr, "%s\n", msg );
+ exit( YY_EXIT_FAILURE );
+}
-#ifndef YY_NO_PUSH_STATE
-#ifdef YY_USE_PROTOS
-static void yy_push_state( int new_state )
-#else
-static void yy_push_state( new_state )
-int new_state;
-#endif
- {
- if ( yy_start_stack_ptr >= yy_start_stack_depth )
- {
- yy_size_t new_size;
+/* Redefine yyless() so it works in section 3 code. */
- yy_start_stack_depth += YY_START_STACK_INCR;
- new_size = yy_start_stack_depth * sizeof( int );
+#undef yyless
+#define yyless(n) \
+ do \
+ { \
+ /* Undo effects of setting up H5LTyytext. */ \
+ int yyless_macro_arg = (n); \
+ YY_LESS_LINENO(yyless_macro_arg);\
+ H5LTyytext[H5LTyyleng] = (yy_hold_char); \
+ (yy_c_buf_p) = H5LTyytext + yyless_macro_arg; \
+ (yy_hold_char) = *(yy_c_buf_p); \
+ *(yy_c_buf_p) = '\0'; \
+ H5LTyyleng = yyless_macro_arg; \
+ } \
+ while ( 0 )
- if ( ! yy_start_stack )
- yy_start_stack = (int *) yy_flex_alloc( new_size );
+/* Accessor methods (get/set functions) to struct members. */
- else
- yy_start_stack = (int *) yy_flex_realloc(
- (void *) yy_start_stack, new_size );
+/** Get the current line number.
+ *
+ */
+int H5LTyyget_lineno (void)
+{
+
+ return H5LTyylineno;
+}
- if ( ! yy_start_stack )
- YY_FATAL_ERROR(
- "out of memory expanding start-condition stack" );
- }
+/** Get the input stream.
+ *
+ */
+FILE *H5LTyyget_in (void)
+{
+ return H5LTyyin;
+}
- yy_start_stack[yy_start_stack_ptr++] = YY_START;
+/** Get the output stream.
+ *
+ */
+FILE *H5LTyyget_out (void)
+{
+ return H5LTyyout;
+}
- BEGIN(new_state);
- }
-#endif
+/** Get the length of the current token.
+ *
+ */
+yy_size_t H5LTyyget_leng (void)
+{
+ return H5LTyyleng;
+}
+/** Get the current token.
+ *
+ */
-#ifndef YY_NO_POP_STATE
-static void yy_pop_state()
- {
- if ( --yy_start_stack_ptr < 0 )
- YY_FATAL_ERROR( "start-condition stack underflow" );
+char *H5LTyyget_text (void)
+{
+ return H5LTyytext;
+}
- BEGIN(yy_start_stack[yy_start_stack_ptr]);
- }
-#endif
+/** Set the current line number.
+ * @param line_number
+ *
+ */
+void H5LTyyset_lineno (int line_number )
+{
+
+ H5LTyylineno = line_number;
+}
+
+/** Set the input stream. This does not discard the current
+ * input buffer.
+ * @param in_str A readable stream.
+ *
+ * @see H5LTyy_switch_to_buffer
+ */
+void H5LTyyset_in (FILE * in_str )
+{
+ H5LTyyin = in_str ;
+}
+void H5LTyyset_out (FILE * out_str )
+{
+ H5LTyyout = out_str ;
+}
-#ifndef YY_NO_TOP_STATE
-static int yy_top_state()
- {
- return yy_start_stack[yy_start_stack_ptr - 1];
- }
-#endif
+int H5LTyyget_debug (void)
+{
+ return H5LTyy_flex_debug;
+}
-#ifndef YY_EXIT_FAILURE
-#define YY_EXIT_FAILURE 2
-#endif
+void H5LTyyset_debug (int bdebug )
+{
+ H5LTyy_flex_debug = bdebug ;
+}
-#ifdef YY_USE_PROTOS
-static void yy_fatal_error( yyconst char msg[] )
+static int yy_init_globals (void)
+{
+ /* Initialization is the same as for the non-reentrant scanner.
+ * This function is called from H5LTyylex_destroy(), so don't allocate here.
+ */
+
+ (yy_buffer_stack) = 0;
+ (yy_buffer_stack_top) = 0;
+ (yy_buffer_stack_max) = 0;
+ (yy_c_buf_p) = (char *) 0;
+ (yy_init) = 0;
+ (yy_start) = 0;
+
+ (yy_state_buf) = 0;
+ (yy_state_ptr) = 0;
+ (yy_full_match) = 0;
+ (yy_lp) = 0;
+
+/* Defined in main.c */
+#ifdef YY_STDINIT
+ H5LTyyin = stdin;
+ H5LTyyout = stdout;
#else
-static void yy_fatal_error( msg )
-char msg[];
+ H5LTyyin = (FILE *) 0;
+ H5LTyyout = (FILE *) 0;
#endif
- {
- (void) fprintf( stderr, "%s\n", msg );
- exit( YY_EXIT_FAILURE );
- }
+ /* For future reference: Set errno on error, since we are called by
+ * H5LTyylex_init()
+ */
+ return 0;
+}
+/* H5LTyylex_destroy is for both reentrant and non-reentrant scanners. */
+int H5LTyylex_destroy (void)
+{
+
+ /* Pop the buffer stack, destroying each element. */
+ while(YY_CURRENT_BUFFER){
+ H5LTyy_delete_buffer(YY_CURRENT_BUFFER );
+ YY_CURRENT_BUFFER_LVALUE = NULL;
+ H5LTyypop_buffer_state();
+ }
-/* Redefine yyless() so it works in section 3 code. */
+ /* Destroy the stack itself. */
+ H5LTyyfree((yy_buffer_stack) );
+ (yy_buffer_stack) = NULL;
-#undef yyless
-#define yyless(n) \
- do \
- { \
- /* Undo effects of setting up yytext. */ \
- yytext[yyleng] = yy_hold_char; \
- yy_c_buf_p = yytext + n; \
- yy_hold_char = *yy_c_buf_p; \
- *yy_c_buf_p = '\0'; \
- yyleng = n; \
- } \
- while ( 0 )
+ H5LTyyfree ( (yy_state_buf) );
+ (yy_state_buf) = NULL;
+ /* Reset the globals. This is important in a non-reentrant scanner so the next time
+ * H5LTyylex() is called, initialization will occur. */
+ yy_init_globals( );
-/* Internal utility routines. */
+ return 0;
+}
+
+/*
+ * Internal utility routines.
+ */
#ifndef yytext_ptr
-#ifdef YY_USE_PROTOS
-static void yy_flex_strncpy( char *s1, yyconst char *s2, int n )
-#else
-static void yy_flex_strncpy( s1, s2, n )
-char *s1;
-yyconst char *s2;
-int n;
-#endif
- {
+static void yy_flex_strncpy (char* s1, yyconst char * s2, int n )
+{
register int i;
for ( i = 0; i < n; ++i )
s1[i] = s2[i];
- }
+}
#endif
#ifdef YY_NEED_STRLEN
-#ifdef YY_USE_PROTOS
-static int yy_flex_strlen( yyconst char *s )
-#else
-static int yy_flex_strlen( s )
-yyconst char *s;
-#endif
- {
+static int yy_flex_strlen (yyconst char * s )
+{
register int n;
for ( n = 0; s[n]; ++n )
;
return n;
- }
+}
#endif
-
-#ifdef YY_USE_PROTOS
-static void *yy_flex_alloc( yy_size_t size )
-#else
-static void *yy_flex_alloc( size )
-yy_size_t size;
-#endif
- {
+void *H5LTyyalloc (yy_size_t size )
+{
return (void *) malloc( size );
- }
+}
-#ifdef YY_USE_PROTOS
-static void *yy_flex_realloc( void *ptr, yy_size_t size )
-#else
-static void *yy_flex_realloc( ptr, size )
-void *ptr;
-yy_size_t size;
-#endif
- {
+void *H5LTyyrealloc (void * ptr, yy_size_t size )
+{
/* The cast to (char *) in the following accommodates both
* implementations that use char* generic pointers, and those
* that use void* generic pointers. It works with the latter
@@ -2315,27 +2500,18 @@ yy_size_t size;
* as though doing an assignment.
*/
return (void *) realloc( (char *) ptr, size );
- }
+}
-#ifdef YY_USE_PROTOS
-static void yy_flex_free( void *ptr )
-#else
-static void yy_flex_free( ptr )
-void *ptr;
-#endif
- {
- free( ptr );
- }
+void H5LTyyfree (void * ptr )
+{
+ free( (char *) ptr ); /* see H5LTyyrealloc() for (char *) cast */
+}
+
+#define YYTABLES_NAME "yytables"
-#if YY_MAIN
-int main()
- {
- yylex();
- return 0;
- }
-#endif
#line 174 "H5LTanalyze.l"
+
int my_yyinput(char *buf, int max_size)
{
int ret;
@@ -2347,11 +2523,12 @@ int my_yyinput(char *buf, int max_size)
int H5LTyyerror(const char *msg)
{
- printf("ERROR: %s before \"%s\".\n", msg, yytext);
+ printf("ERROR: %s before \"%s\".\n", msg, H5LTyytext);
return 0;
}
-int yywrap()
+int H5LTyywrap()
{
return(1);
}
+
diff --git a/hl/src/H5LTparse.c b/hl/src/H5LTparse.c
index 4527a5f..240a8d3 100644
--- a/hl/src/H5LTparse.c
+++ b/hl/src/H5LTparse.c
@@ -1,63 +1,77 @@
-/* * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * *
- * 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. *
- * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * * */
-
-/* This file was generated by Yacc with the command "yacc -pH5LTyy -o H5LTparse.c -d H5LTparse.y"
- * on jam. Do NOT modify it by hand.
- */
-#ifndef lint
-static char const
-yyrcsid[] = "$FreeBSD: src/usr.bin/yacc/skeleton.c,v 1.28 2000/01/17 02:04:06 bde Exp $";
-#endif
-#include <stdlib.h>
-#define YYBYACC 1
-#define YYMAJOR 1
-#define YYMINOR 9
-#define YYLEX yylex()
-#define YYEMPTY -1
-#define yyclearin (yychar=(YYEMPTY))
-#define yyerrok (yyerrflag=0)
-#define YYRECOVERING() (yyerrflag!=0)
-static int yygrowstack();
-#define yyparse H5LTyyparse
-#define yylex H5LTyylex
-#define yyerror H5LTyyerror
-#define yychar H5LTyychar
-#define yyval H5LTyyval
-#define yylval H5LTyylval
-#define yydebug H5LTyydebug
-#define yynerrs H5LTyynerrs
-#define yyerrflag H5LTyyerrflag
-#define yyss H5LTyyss
-#define yyssp H5LTyyssp
-#define yyvs H5LTyyvs
-#define yyvsp H5LTyyvsp
-#define yylhs H5LTyylhs
-#define yylen H5LTyylen
-#define yydefred H5LTyydefred
-#define yydgoto H5LTyydgoto
-#define yysindex H5LTyysindex
-#define yyrindex H5LTyyrindex
-#define yygindex H5LTyygindex
-#define yytable H5LTyytable
-#define yycheck H5LTyycheck
-#define yyname H5LTyyname
-#define yyrule H5LTyyrule
-#define yysslim H5LTyysslim
-#define yystacksize H5LTyystacksize
-#define YYPREFIX "H5LTyy"
-#line 17 "H5LTparse.y"
+/* A Bison parser, made by GNU Bison 2.7. */
+
+/* Bison implementation for Yacc-like parsers in C
+
+ Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* As a special exception, you may create a larger work that contains
+ part or all of the Bison parser skeleton and distribute that work
+ under terms of your choice, so long as that work isn't itself a
+ parser generator using the skeleton or a modified version thereof
+ as a parser skeleton. Alternatively, if you modify or redistribute
+ the parser skeleton itself, you may (at your option) remove this
+ special exception, which will cause the skeleton and the resulting
+ Bison output files to be licensed under the GNU General Public
+ License without this special exception.
+
+ This special exception was added by the Free Software Foundation in
+ version 2.2 of Bison. */
+
+/* C LALR(1) parser skeleton written by Richard Stallman, by
+ simplifying the original so-called "semantic" parser. */
+
+/* All symbols defined below should begin with yy or YY, to avoid
+ infringing on user name space. This should be done even for local
+ variables, as they might otherwise be expanded by user macros.
+ There are some unavoidable exceptions within include files to
+ define necessary library symbols; they are noted "INFRINGES ON
+ USER NAME SPACE" below. */
+
+/* Identify Bison output. */
+#define YYBISON 1
+
+/* Bison version. */
+#define YYBISON_VERSION "2.7"
+
+/* Skeleton name. */
+#define YYSKELETON_NAME "yacc.c"
+
+/* Pure parsers. */
+#define YYPURE 0
+
+/* Push parsers. */
+#define YYPUSH 0
+
+/* Pull parsers. */
+#define YYPULL 1
+
+
+/* Substitute the variable and function names. */
+#define yyparse H5LTyyparse
+#define yylex H5LTyylex
+#define yyerror H5LTyyerror
+#define yylval H5LTyylval
+#define yychar H5LTyychar
+#define yydebug H5LTyydebug
+#define yynerrs H5LTyynerrs
+
+/* Copy the first part of user declarations. */
+/* Line 371 of yacc.c */
+#line 16 "H5LTparse.y"
+
#include <stdio.h>
#include <string.h>
#include <hdf5.h>
@@ -91,7 +105,7 @@ struct arr_info {
};
/*stack for nested array type*/
struct arr_info arr_stack[STACK_SIZE];
-int asindex = -1; /*pointer to the top of array stack*/
+int asindex = -1; /*pointer to the top of array stack*/
hbool_t is_str_size = 0; /*flag to lexer for string size*/
hbool_t is_str_pad = 0; /*flag to lexer for string padding*/
@@ -99,7 +113,7 @@ H5T_str_t str_pad; /*variable for string padding*/
H5T_cset_t str_cset; /*variable for string character set*/
hbool_t is_variable = 0; /*variable for variable-length string*/
size_t str_size; /*variable for string size*/
-
+
hid_t enum_id; /*type ID*/
hbool_t is_enum = 0; /*flag to lexer for enum type*/
hbool_t is_enum_memb = 0; /*flag to lexer for enum member*/
@@ -108,881 +122,1932 @@ char* enum_memb_symbol; /*enum member symbol string*/
hbool_t is_opq_size = 0; /*flag to lexer for opaque type size*/
hbool_t is_opq_tag = 0; /*flag to lexer for opaque type tag*/
+
+/* Line 371 of yacc.c */
+#line 128 "H5LTparse.c"
+
+# ifndef YY_NULL
+# if defined __cplusplus && 201103L <= __cplusplus
+# define YY_NULL nullptr
+# else
+# define YY_NULL 0
+# endif
+# endif
+
+/* Enabling verbose error messages. */
+#ifdef YYERROR_VERBOSE
+# undef YYERROR_VERBOSE
+# define YYERROR_VERBOSE 1
+#else
+# define YYERROR_VERBOSE 0
+#endif
+
+/* In a future release of Bison, this section will be replaced
+ by #include "H5LTparse.h". */
+#ifndef YY_H5LTYY_H5LTPARSE_H_INCLUDED
+# define YY_H5LTYY_H5LTPARSE_H_INCLUDED
+/* Enabling traces. */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+#if YYDEBUG
+extern int H5LTyydebug;
+#endif
+
+/* Tokens. */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+ /* Put the tokens into the symbol table, so that GDB and other debuggers
+ know about them. */
+ enum yytokentype {
+ H5T_STD_I8BE_TOKEN = 258,
+ H5T_STD_I8LE_TOKEN = 259,
+ H5T_STD_I16BE_TOKEN = 260,
+ H5T_STD_I16LE_TOKEN = 261,
+ H5T_STD_I32BE_TOKEN = 262,
+ H5T_STD_I32LE_TOKEN = 263,
+ H5T_STD_I64BE_TOKEN = 264,
+ H5T_STD_I64LE_TOKEN = 265,
+ H5T_STD_U8BE_TOKEN = 266,
+ H5T_STD_U8LE_TOKEN = 267,
+ H5T_STD_U16BE_TOKEN = 268,
+ H5T_STD_U16LE_TOKEN = 269,
+ H5T_STD_U32BE_TOKEN = 270,
+ H5T_STD_U32LE_TOKEN = 271,
+ H5T_STD_U64BE_TOKEN = 272,
+ H5T_STD_U64LE_TOKEN = 273,
+ H5T_NATIVE_CHAR_TOKEN = 274,
+ H5T_NATIVE_SCHAR_TOKEN = 275,
+ H5T_NATIVE_UCHAR_TOKEN = 276,
+ H5T_NATIVE_SHORT_TOKEN = 277,
+ H5T_NATIVE_USHORT_TOKEN = 278,
+ H5T_NATIVE_INT_TOKEN = 279,
+ H5T_NATIVE_UINT_TOKEN = 280,
+ H5T_NATIVE_LONG_TOKEN = 281,
+ H5T_NATIVE_ULONG_TOKEN = 282,
+ H5T_NATIVE_LLONG_TOKEN = 283,
+ H5T_NATIVE_ULLONG_TOKEN = 284,
+ H5T_IEEE_F32BE_TOKEN = 285,
+ H5T_IEEE_F32LE_TOKEN = 286,
+ H5T_IEEE_F64BE_TOKEN = 287,
+ H5T_IEEE_F64LE_TOKEN = 288,
+ H5T_NATIVE_FLOAT_TOKEN = 289,
+ H5T_NATIVE_DOUBLE_TOKEN = 290,
+ H5T_NATIVE_LDOUBLE_TOKEN = 291,
+ H5T_STRING_TOKEN = 292,
+ STRSIZE_TOKEN = 293,
+ STRPAD_TOKEN = 294,
+ CSET_TOKEN = 295,
+ CTYPE_TOKEN = 296,
+ H5T_VARIABLE_TOKEN = 297,
+ H5T_STR_NULLTERM_TOKEN = 298,
+ H5T_STR_NULLPAD_TOKEN = 299,
+ H5T_STR_SPACEPAD_TOKEN = 300,
+ H5T_CSET_ASCII_TOKEN = 301,
+ H5T_CSET_UTF8_TOKEN = 302,
+ H5T_C_S1_TOKEN = 303,
+ H5T_FORTRAN_S1_TOKEN = 304,
+ H5T_OPAQUE_TOKEN = 305,
+ OPQ_SIZE_TOKEN = 306,
+ OPQ_TAG_TOKEN = 307,
+ H5T_COMPOUND_TOKEN = 308,
+ H5T_ENUM_TOKEN = 309,
+ H5T_ARRAY_TOKEN = 310,
+ H5T_VLEN_TOKEN = 311,
+ STRING = 312,
+ NUMBER = 313
+ };
+#endif
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+{
+/* Line 387 of yacc.c */
#line 68 "H5LTparse.y"
-typedef union {
+
int ival; /*for integer token*/
char *sval; /*for name string*/
+
+
+/* Line 387 of yacc.c */
+#line 235 "H5LTparse.c"
} YYSTYPE;
-#line 117 "H5LTparse.c"
-#define YYERRCODE 256
-#define H5T_STD_I8BE_TOKEN 257
-#define H5T_STD_I8LE_TOKEN 258
-#define H5T_STD_I16BE_TOKEN 259
-#define H5T_STD_I16LE_TOKEN 260
-#define H5T_STD_I32BE_TOKEN 261
-#define H5T_STD_I32LE_TOKEN 262
-#define H5T_STD_I64BE_TOKEN 263
-#define H5T_STD_I64LE_TOKEN 264
-#define H5T_STD_U8BE_TOKEN 265
-#define H5T_STD_U8LE_TOKEN 266
-#define H5T_STD_U16BE_TOKEN 267
-#define H5T_STD_U16LE_TOKEN 268
-#define H5T_STD_U32BE_TOKEN 269
-#define H5T_STD_U32LE_TOKEN 270
-#define H5T_STD_U64BE_TOKEN 271
-#define H5T_STD_U64LE_TOKEN 272
-#define H5T_NATIVE_CHAR_TOKEN 273
-#define H5T_NATIVE_SCHAR_TOKEN 274
-#define H5T_NATIVE_UCHAR_TOKEN 275
-#define H5T_NATIVE_SHORT_TOKEN 276
-#define H5T_NATIVE_USHORT_TOKEN 277
-#define H5T_NATIVE_INT_TOKEN 278
-#define H5T_NATIVE_UINT_TOKEN 279
-#define H5T_NATIVE_LONG_TOKEN 280
-#define H5T_NATIVE_ULONG_TOKEN 281
-#define H5T_NATIVE_LLONG_TOKEN 282
-#define H5T_NATIVE_ULLONG_TOKEN 283
-#define H5T_IEEE_F32BE_TOKEN 284
-#define H5T_IEEE_F32LE_TOKEN 285
-#define H5T_IEEE_F64BE_TOKEN 286
-#define H5T_IEEE_F64LE_TOKEN 287
-#define H5T_NATIVE_FLOAT_TOKEN 288
-#define H5T_NATIVE_DOUBLE_TOKEN 289
-#define H5T_NATIVE_LDOUBLE_TOKEN 290
-#define H5T_STRING_TOKEN 291
-#define STRSIZE_TOKEN 292
-#define STRPAD_TOKEN 293
-#define CSET_TOKEN 294
-#define CTYPE_TOKEN 295
-#define H5T_VARIABLE_TOKEN 296
-#define H5T_STR_NULLTERM_TOKEN 297
-#define H5T_STR_NULLPAD_TOKEN 298
-#define H5T_STR_SPACEPAD_TOKEN 299
-#define H5T_CSET_ASCII_TOKEN 300
-#define H5T_CSET_UTF8_TOKEN 301
-#define H5T_C_S1_TOKEN 302
-#define H5T_FORTRAN_S1_TOKEN 303
-#define H5T_OPAQUE_TOKEN 304
-#define OPQ_SIZE_TOKEN 305
-#define OPQ_TAG_TOKEN 306
-#define H5T_COMPOUND_TOKEN 307
-#define H5T_ENUM_TOKEN 308
-#define H5T_ARRAY_TOKEN 309
-#define H5T_VLEN_TOKEN 310
-#define STRING 311
-#define NUMBER 312
-const short H5LTyylhs[] = { -1,
- 0, 0, 1, 1, 1, 1, 2, 2, 2, 2,
- 2, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 6, 6,
- 6, 6, 6, 6, 6, 6, 6, 6, 7, 7,
- 7, 7, 7, 7, 7, 11, 3, 12, 12, 14,
- 13, 15, 16, 16, 17, 18, 4, 19, 19, 22,
- 23, 20, 21, 5, 25, 26, 27, 29, 10, 24,
- 28, 31, 32, 34, 36, 38, 8, 30, 30, 33,
- 33, 33, 35, 35, 37, 37, 40, 9, 39, 39,
- 44, 41, 42, 43,
+# define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
+extern YYSTYPE H5LTyylval;
+
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int H5LTyyparse (void *YYPARSE_PARAM);
+#else
+int H5LTyyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int H5LTyyparse (void);
+#else
+int H5LTyyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+#endif /* !YY_H5LTYY_H5LTPARSE_H_INCLUDED */
+
+/* Copy the second part of user declarations. */
+
+/* Line 390 of yacc.c */
+#line 263 "H5LTparse.c"
+
+#ifdef short
+# undef short
+#endif
+
+#ifdef YYTYPE_UINT8
+typedef YYTYPE_UINT8 yytype_uint8;
+#else
+typedef unsigned char yytype_uint8;
+#endif
+
+#ifdef YYTYPE_INT8
+typedef YYTYPE_INT8 yytype_int8;
+#elif (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+typedef signed char yytype_int8;
+#else
+typedef short int yytype_int8;
+#endif
+
+#ifdef YYTYPE_UINT16
+typedef YYTYPE_UINT16 yytype_uint16;
+#else
+typedef unsigned short int yytype_uint16;
+#endif
+
+#ifdef YYTYPE_INT16
+typedef YYTYPE_INT16 yytype_int16;
+#else
+typedef short int yytype_int16;
+#endif
+
+#ifndef YYSIZE_T
+# ifdef __SIZE_TYPE__
+# define YYSIZE_T __SIZE_TYPE__
+# elif defined size_t
+# define YYSIZE_T size_t
+# elif ! defined YYSIZE_T && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+# include <stddef.h> /* INFRINGES ON USER NAME SPACE */
+# define YYSIZE_T size_t
+# else
+# define YYSIZE_T unsigned int
+# endif
+#endif
+
+#define YYSIZE_MAXIMUM ((YYSIZE_T) -1)
+
+#ifndef YY_
+# if defined YYENABLE_NLS && YYENABLE_NLS
+# if ENABLE_NLS
+# include <libintl.h> /* INFRINGES ON USER NAME SPACE */
+# define YY_(Msgid) dgettext ("bison-runtime", Msgid)
+# endif
+# endif
+# ifndef YY_
+# define YY_(Msgid) Msgid
+# endif
+#endif
+
+/* Suppress unused-variable warnings by "using" E. */
+#if ! defined lint || defined __GNUC__
+# define YYUSE(E) ((void) (E))
+#else
+# define YYUSE(E) /* empty */
+#endif
+
+/* Identity function, used to suppress warnings about constant conditions. */
+#ifndef lint
+# define YYID(N) (N)
+#else
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static int
+YYID (int yyi)
+#else
+static int
+YYID (yyi)
+ int yyi;
+#endif
+{
+ return yyi;
+}
+#endif
+
+#if ! defined yyoverflow || YYERROR_VERBOSE
+
+/* The parser invokes alloca or malloc; define the necessary symbols. */
+
+# ifdef YYSTACK_USE_ALLOCA
+# if YYSTACK_USE_ALLOCA
+# ifdef __GNUC__
+# define YYSTACK_ALLOC __builtin_alloca
+# elif defined __BUILTIN_VA_ARG_INCR
+# include <alloca.h> /* INFRINGES ON USER NAME SPACE */
+# elif defined _AIX
+# define YYSTACK_ALLOC __alloca
+# elif defined _MSC_VER
+# include <malloc.h> /* INFRINGES ON USER NAME SPACE */
+# define alloca _alloca
+# else
+# define YYSTACK_ALLOC alloca
+# if ! defined _ALLOCA_H && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+ /* Use EXIT_SUCCESS as a witness for stdlib.h. */
+# ifndef EXIT_SUCCESS
+# define EXIT_SUCCESS 0
+# endif
+# endif
+# endif
+# endif
+# endif
+
+# ifdef YYSTACK_ALLOC
+ /* Pacify GCC's `empty if-body' warning. */
+# define YYSTACK_FREE(Ptr) do { /* empty */; } while (YYID (0))
+# ifndef YYSTACK_ALLOC_MAXIMUM
+ /* The OS might guarantee only one guard page at the bottom of the stack,
+ and a page size can be as small as 4096 bytes. So we cannot safely
+ invoke alloca (N) if N exceeds 4096. Use a slightly smaller number
+ to allow for a few compiler-allocated temporary stack slots. */
+# define YYSTACK_ALLOC_MAXIMUM 4032 /* reasonable circa 2006 */
+# endif
+# else
+# define YYSTACK_ALLOC YYMALLOC
+# define YYSTACK_FREE YYFREE
+# ifndef YYSTACK_ALLOC_MAXIMUM
+# define YYSTACK_ALLOC_MAXIMUM YYSIZE_MAXIMUM
+# endif
+# if (defined __cplusplus && ! defined EXIT_SUCCESS \
+ && ! ((defined YYMALLOC || defined malloc) \
+ && (defined YYFREE || defined free)))
+# include <stdlib.h> /* INFRINGES ON USER NAME SPACE */
+# ifndef EXIT_SUCCESS
+# define EXIT_SUCCESS 0
+# endif
+# endif
+# ifndef YYMALLOC
+# define YYMALLOC malloc
+# if ! defined malloc && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+void *malloc (YYSIZE_T); /* INFRINGES ON USER NAME SPACE */
+# endif
+# endif
+# ifndef YYFREE
+# define YYFREE free
+# if ! defined free && ! defined EXIT_SUCCESS && (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+void free (void *); /* INFRINGES ON USER NAME SPACE */
+# endif
+# endif
+# endif
+#endif /* ! defined yyoverflow || YYERROR_VERBOSE */
+
+
+#if (! defined yyoverflow \
+ && (! defined __cplusplus \
+ || (defined YYSTYPE_IS_TRIVIAL && YYSTYPE_IS_TRIVIAL)))
+
+/* A type that is properly aligned for any stack member. */
+union yyalloc
+{
+ yytype_int16 yyss_alloc;
+ YYSTYPE yyvs_alloc;
+};
+
+/* The size of the maximum gap between one aligned stack and the next. */
+# define YYSTACK_GAP_MAXIMUM (sizeof (union yyalloc) - 1)
+
+/* The size of an array large to enough to hold all stacks, each with
+ N elements. */
+# define YYSTACK_BYTES(N) \
+ ((N) * (sizeof (yytype_int16) + sizeof (YYSTYPE)) \
+ + YYSTACK_GAP_MAXIMUM)
+
+# define YYCOPY_NEEDED 1
+
+/* Relocate STACK from its old location to the new one. The
+ local variables YYSIZE and YYSTACKSIZE give the old and new number of
+ elements in the stack, and YYPTR gives the new location of the
+ stack. Advance YYPTR to a properly aligned location for the next
+ stack. */
+# define YYSTACK_RELOCATE(Stack_alloc, Stack) \
+ do \
+ { \
+ YYSIZE_T yynewbytes; \
+ YYCOPY (&yyptr->Stack_alloc, Stack, yysize); \
+ Stack = &yyptr->Stack_alloc; \
+ yynewbytes = yystacksize * sizeof (*Stack) + YYSTACK_GAP_MAXIMUM; \
+ yyptr += yynewbytes / sizeof (*yyptr); \
+ } \
+ while (YYID (0))
+
+#endif
+
+#if defined YYCOPY_NEEDED && YYCOPY_NEEDED
+/* Copy COUNT objects from SRC to DST. The source and destination do
+ not overlap. */
+# ifndef YYCOPY
+# if defined __GNUC__ && 1 < __GNUC__
+# define YYCOPY(Dst, Src, Count) \
+ __builtin_memcpy (Dst, Src, (Count) * sizeof (*(Src)))
+# else
+# define YYCOPY(Dst, Src, Count) \
+ do \
+ { \
+ YYSIZE_T yyi; \
+ for (yyi = 0; yyi < (Count); yyi++) \
+ (Dst)[yyi] = (Src)[yyi]; \
+ } \
+ while (YYID (0))
+# endif
+# endif
+#endif /* !YYCOPY_NEEDED */
+
+/* YYFINAL -- State number of the termination state. */
+#define YYFINAL 58
+/* YYLAST -- Last index in YYTABLE. */
+#define YYLAST 203
+
+/* YYNTOKENS -- Number of terminals. */
+#define YYNTOKENS 66
+/* YYNNTS -- Number of nonterminals. */
+#define YYNNTS 46
+/* YYNRULES -- Number of rules. */
+#define YYNRULES 95
+/* YYNRULES -- Number of states. */
+#define YYNSTATES 143
+
+/* YYTRANSLATE(YYLEX) -- Bison symbol number corresponding to YYLEX. */
+#define YYUNDEFTOK 2
+#define YYMAXUTOK 313
+
+#define YYTRANSLATE(YYX) \
+ ((unsigned int) (YYX) <= YYMAXUTOK ? yytranslate[YYX] : YYUNDEFTOK)
+
+/* YYTRANSLATE[YYLEX] -- Bison symbol number corresponding to YYLEX. */
+static const yytype_uint8 yytranslate[] =
+{
+ 0, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 63, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 64, 65,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 61, 2, 62, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 59, 2, 60, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 2, 2, 2, 2,
+ 2, 2, 2, 2, 2, 2, 1, 2, 3, 4,
+ 5, 6, 7, 8, 9, 10, 11, 12, 13, 14,
+ 15, 16, 17, 18, 19, 20, 21, 22, 23, 24,
+ 25, 26, 27, 28, 29, 30, 31, 32, 33, 34,
+ 35, 36, 37, 38, 39, 40, 41, 42, 43, 44,
+ 45, 46, 47, 48, 49, 50, 51, 52, 53, 54,
+ 55, 56, 57, 58
};
-const short H5LTyylen[] = { 2,
- 0, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
- 1, 1, 1, 1, 1, 0, 5, 0, 2, 0,
- 7, 1, 0, 2, 1, 0, 6, 0, 2, 0,
- 0, 5, 1, 4, 0, 0, 0, 0, 15, 1,
- 1, 0, 0, 0, 0, 0, 20, 1, 1, 1,
- 1, 1, 1, 1, 1, 1, 0, 7, 0, 2,
- 0, 6, 1, 1,
+
+#if YYDEBUG
+/* YYPRHS[YYN] -- Index of the first RHS symbol of rule number YYN in
+ YYRHS. */
+static const yytype_uint8 yyprhs[] =
+{
+ 0, 0, 3, 4, 6, 8, 10, 12, 14, 16,
+ 18, 20, 22, 24, 26, 28, 30, 32, 34, 36,
+ 38, 40, 42, 44, 46, 48, 50, 52, 54, 56,
+ 58, 60, 62, 64, 66, 68, 70, 72, 74, 76,
+ 78, 80, 82, 84, 86, 88, 90, 92, 93, 99,
+ 100, 103, 104, 112, 114, 115, 118, 120, 121, 128,
+ 129, 132, 133, 134, 140, 142, 147, 148, 149, 150,
+ 151, 167, 169, 171, 172, 173, 174, 175, 176, 197,
+ 199, 201, 203, 205, 207, 209, 211, 213, 215, 216,
+ 224, 225, 228, 229, 236, 238
};
-const short H5LTyydefred[] = { 0,
- 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
- 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
- 42, 43, 44, 45, 0, 0, 46, 0, 56, 0,
- 0, 2, 3, 4, 5, 6, 7, 8, 9, 10,
- 11, 0, 0, 0, 0, 0, 0, 72, 65, 48,
- 0, 58, 0, 0, 0, 0, 87, 0, 64, 78,
- 79, 0, 70, 0, 47, 50, 49, 89, 60, 0,
- 59, 73, 66, 0, 0, 0, 57, 0, 0, 0,
- 88, 0, 90, 63, 61, 0, 67, 52, 0, 93,
- 0, 0, 80, 81, 82, 0, 0, 0, 91, 62,
- 74, 0, 0, 0, 0, 0, 71, 0, 55, 54,
- 51, 94, 0, 0, 0, 92, 83, 84, 0, 68,
- 75, 0, 0, 69, 0, 85, 86, 0, 76, 0,
- 77,
+
+/* YYRHS -- A `-1'-separated list of the rules' RHS. */
+static const yytype_int8 yyrhs[] =
+{
+ 67, 0, -1, -1, 68, -1, 69, -1, 72, -1,
+ 80, -1, 87, -1, 70, -1, 71, -1, 95, -1,
+ 105, -1, 88, -1, 3, -1, 4, -1, 5, -1,
+ 6, -1, 7, -1, 8, -1, 9, -1, 10, -1,
+ 11, -1, 12, -1, 13, -1, 14, -1, 15, -1,
+ 16, -1, 17, -1, 18, -1, 19, -1, 20, -1,
+ 21, -1, 22, -1, 23, -1, 24, -1, 25, -1,
+ 26, -1, 27, -1, 28, -1, 29, -1, 30, -1,
+ 31, -1, 32, -1, 33, -1, 34, -1, 35, -1,
+ 36, -1, -1, 53, 73, 59, 74, 60, -1, -1,
+ 74, 75, -1, -1, 68, 76, 63, 77, 63, 78,
+ 65, -1, 57, -1, -1, 64, 79, -1, 58, -1,
+ -1, 55, 81, 59, 82, 68, 60, -1, -1, 82,
+ 83, -1, -1, -1, 61, 84, 86, 85, 62, -1,
+ 58, -1, 56, 59, 68, 60, -1, -1, -1, -1,
+ -1, 50, 59, 51, 89, 93, 65, 90, 52, 91,
+ 63, 94, 63, 65, 92, 60, -1, 58, -1, 57,
+ -1, -1, -1, -1, -1, -1, 37, 59, 38, 96,
+ 101, 65, 97, 39, 102, 65, 98, 40, 103, 65,
+ 99, 41, 104, 65, 100, 60, -1, 42, -1, 58,
+ -1, 43, -1, 44, -1, 45, -1, 46, -1, 47,
+ -1, 48, -1, 49, -1, -1, 54, 59, 70, 65,
+ 106, 107, 60, -1, -1, 107, 108, -1, -1, 63,
+ 110, 63, 109, 111, 65, -1, 57, -1, 58, -1
};
-const short H5LTyydgoto[] = { 41,
- 42, 43, 44, 45, 46, 47, 48, 49, 50, 51,
- 54, 66, 77, 84, 99, 114, 120, 56, 68, 81,
- 95, 86, 102, 74, 65, 89, 107, 118, 132, 72,
- 64, 88, 106, 116, 129, 133, 138, 140, 85, 78,
- 93, 101, 123, 115,
+
+/* YYRLINE[YYN] -- source line where rule number YYN was defined. */
+static const yytype_uint16 yyrline[] =
+{
+ 0, 100, 100, 101, 103, 104, 105, 106, 108, 109,
+ 110, 111, 112, 115, 116, 117, 118, 119, 120, 121,
+ 122, 123, 124, 125, 126, 127, 128, 129, 130, 131,
+ 132, 133, 134, 135, 136, 137, 138, 139, 140, 141,
+ 144, 145, 146, 147, 148, 149, 150, 154, 153, 162,
+ 163, 165, 165, 199, 205, 206, 209, 211, 211, 220,
+ 221, 223, 224, 223, 231, 234, 240, 241, 246, 247,
+ 238, 253, 255, 259, 260, 268, 277, 284, 257, 308,
+ 309, 311, 312, 313, 315, 316, 318, 319, 323, 322,
+ 327, 328, 330, 330, 382, 384
};
-const short H5LTyysindex[] = { -255,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, -82, -79, 0, -78, 0, -76,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, -208, -220, -36, -201, -34, -255, 0, 0, 0,
- 27, 0, -35, -213, -221, -37, 0, -91, 0, 0,
- 0, 34, 0, 35, 0, 0, 0, 0, 0, -30,
- 0, 0, 0, 62, -33, -215, 0, -195, -206, -210,
- 0, -209, 0, 0, 0, -259, 0, 0, 69, 0,
- 70, 12, 0, 0, 0, 47, 73, 50, 0, 0,
- 0, -202, -200, 51, -199, -183, 0, 80, 0, 0,
- 0, 0, 56, -258, 57, 0, 0, 0, 58, 0,
- 0, -7, -176, 0, -252, 0, 0, 61, 0, -4,
- 0,
+#endif
+
+#if YYDEBUG || YYERROR_VERBOSE || 0
+/* YYTNAME[SYMBOL-NUM] -- String name of the symbol SYMBOL-NUM.
+ First, the terminals, then, starting at YYNTOKENS, nonterminals. */
+static const char *const yytname[] =
+{
+ "$end", "error", "$undefined", "H5T_STD_I8BE_TOKEN",
+ "H5T_STD_I8LE_TOKEN", "H5T_STD_I16BE_TOKEN", "H5T_STD_I16LE_TOKEN",
+ "H5T_STD_I32BE_TOKEN", "H5T_STD_I32LE_TOKEN", "H5T_STD_I64BE_TOKEN",
+ "H5T_STD_I64LE_TOKEN", "H5T_STD_U8BE_TOKEN", "H5T_STD_U8LE_TOKEN",
+ "H5T_STD_U16BE_TOKEN", "H5T_STD_U16LE_TOKEN", "H5T_STD_U32BE_TOKEN",
+ "H5T_STD_U32LE_TOKEN", "H5T_STD_U64BE_TOKEN", "H5T_STD_U64LE_TOKEN",
+ "H5T_NATIVE_CHAR_TOKEN", "H5T_NATIVE_SCHAR_TOKEN",
+ "H5T_NATIVE_UCHAR_TOKEN", "H5T_NATIVE_SHORT_TOKEN",
+ "H5T_NATIVE_USHORT_TOKEN", "H5T_NATIVE_INT_TOKEN",
+ "H5T_NATIVE_UINT_TOKEN", "H5T_NATIVE_LONG_TOKEN",
+ "H5T_NATIVE_ULONG_TOKEN", "H5T_NATIVE_LLONG_TOKEN",
+ "H5T_NATIVE_ULLONG_TOKEN", "H5T_IEEE_F32BE_TOKEN",
+ "H5T_IEEE_F32LE_TOKEN", "H5T_IEEE_F64BE_TOKEN", "H5T_IEEE_F64LE_TOKEN",
+ "H5T_NATIVE_FLOAT_TOKEN", "H5T_NATIVE_DOUBLE_TOKEN",
+ "H5T_NATIVE_LDOUBLE_TOKEN", "H5T_STRING_TOKEN", "STRSIZE_TOKEN",
+ "STRPAD_TOKEN", "CSET_TOKEN", "CTYPE_TOKEN", "H5T_VARIABLE_TOKEN",
+ "H5T_STR_NULLTERM_TOKEN", "H5T_STR_NULLPAD_TOKEN",
+ "H5T_STR_SPACEPAD_TOKEN", "H5T_CSET_ASCII_TOKEN", "H5T_CSET_UTF8_TOKEN",
+ "H5T_C_S1_TOKEN", "H5T_FORTRAN_S1_TOKEN", "H5T_OPAQUE_TOKEN",
+ "OPQ_SIZE_TOKEN", "OPQ_TAG_TOKEN", "H5T_COMPOUND_TOKEN",
+ "H5T_ENUM_TOKEN", "H5T_ARRAY_TOKEN", "H5T_VLEN_TOKEN", "STRING",
+ "NUMBER", "'{'", "'}'", "'['", "']'", "'\"'", "':'", "';'", "$accept",
+ "start", "ddl_type", "atomic_type", "integer_type", "fp_type",
+ "compound_type", "$@1", "memb_list", "memb_def", "$@2", "field_name",
+ "field_offset", "offset", "array_type", "$@3", "dim_list", "dim", "$@4",
+ "$@5", "dimsize", "vlen_type", "opaque_type", "$@6", "@7", "$@8", "$@9",
+ "opaque_size", "opaque_tag", "string_type", "$@10", "$@11", "$@12",
+ "$@13", "@14", "strsize", "strpad", "cset", "ctype", "enum_type", "$@15",
+ "enum_list", "enum_def", "$@16", "enum_symbol", "enum_val", YY_NULL
};
-const short H5LTyyrindex[] = { 122,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 64, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0,
+#endif
+
+# ifdef YYPRINT
+/* YYTOKNUM[YYLEX-NUM] -- Internal token number corresponding to
+ token YYLEX-NUM. */
+static const yytype_uint16 yytoknum[] =
+{
+ 0, 256, 257, 258, 259, 260, 261, 262, 263, 264,
+ 265, 266, 267, 268, 269, 270, 271, 272, 273, 274,
+ 275, 276, 277, 278, 279, 280, 281, 282, 283, 284,
+ 285, 286, 287, 288, 289, 290, 291, 292, 293, 294,
+ 295, 296, 297, 298, 299, 300, 301, 302, 303, 304,
+ 305, 306, 307, 308, 309, 310, 311, 312, 313, 123,
+ 125, 91, 93, 34, 58, 59
};
-const short H5LTyygindex[] = { 0,
- -20, 0, 0, 0, 0, 71, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0,
+# endif
+
+/* YYR1[YYN] -- Symbol number of symbol that rule YYN derives. */
+static const yytype_uint8 yyr1[] =
+{
+ 0, 66, 67, 67, 68, 68, 68, 68, 69, 69,
+ 69, 69, 69, 70, 70, 70, 70, 70, 70, 70,
+ 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+ 70, 70, 70, 70, 70, 70, 70, 70, 70, 70,
+ 71, 71, 71, 71, 71, 71, 71, 73, 72, 74,
+ 74, 76, 75, 77, 78, 78, 79, 81, 80, 82,
+ 82, 84, 85, 83, 86, 87, 89, 90, 91, 92,
+ 88, 93, 94, 96, 97, 98, 99, 100, 95, 101,
+ 101, 102, 102, 102, 103, 103, 104, 104, 106, 105,
+ 107, 107, 109, 108, 110, 111
};
-#define YYTABLESIZE 273
-const short H5LTyytable[] = { 79,
- 92, 1, 2, 3, 4, 5, 6, 7, 8, 9,
- 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
- 20, 21, 22, 23, 24, 25, 26, 27, 28, 29,
- 30, 31, 32, 33, 34, 35, 63, 103, 104, 105,
- 52, 127, 128, 53, 55, 76, 57, 80, 36, 136,
- 137, 37, 38, 39, 40, 1, 2, 3, 4, 5,
- 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
- 26, 27, 70, 58, 59, 67, 60, 75, 62, 69,
- 73, 91, 82, 83, 87, 90, 94, 96, 71, 97,
- 98, 100, 108, 109, 110, 111, 112, 113, 117, 121,
- 124, 119, 122, 125, 126, 130, 131, 134, 135, 139,
- 141, 1, 53, 0, 0, 61, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 1, 2, 3, 4, 5,
- 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
- 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
- 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
- 0, 0, 0, 0, 0, 0, 0, 0, 0, 0,
- 0, 0, 36, 0, 0, 37, 38, 39, 40, 1,
- 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
- 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
- 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
- 32, 33, 34, 35, 0, 0, 0, 0, 0, 0,
- 0, 0, 0, 0, 0, 0, 36, 0, 0, 37,
- 38, 39, 40,
+
+/* YYR2[YYN] -- Number of symbols composing right hand side of rule YYN. */
+static const yytype_uint8 yyr2[] =
+{
+ 0, 2, 0, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 1, 1,
+ 1, 1, 1, 1, 1, 1, 1, 0, 5, 0,
+ 2, 0, 7, 1, 0, 2, 1, 0, 6, 0,
+ 2, 0, 0, 5, 1, 4, 0, 0, 0, 0,
+ 15, 1, 1, 0, 0, 0, 0, 0, 20, 1,
+ 1, 1, 1, 1, 1, 1, 1, 1, 0, 7,
+ 0, 2, 0, 6, 1, 1
};
-const short H5LTyycheck[] = { 91,
- 34, 257, 258, 259, 260, 261, 262, 263, 264, 265,
- 266, 267, 268, 269, 270, 271, 272, 273, 274, 275,
- 276, 277, 278, 279, 280, 281, 282, 283, 284, 285,
- 286, 287, 288, 289, 290, 291, 57, 297, 298, 299,
- 123, 300, 301, 123, 123, 66, 123, 68, 304, 302,
- 303, 307, 308, 309, 310, 257, 258, 259, 260, 261,
- 262, 263, 264, 265, 266, 267, 268, 269, 270, 271,
- 272, 273, 274, 275, 276, 277, 278, 279, 280, 281,
- 282, 283, 296, 292, 305, 59, 123, 125, 123, 125,
- 312, 125, 59, 59, 125, 34, 312, 293, 312, 306,
- 311, 311, 34, 34, 93, 59, 34, 58, 311, 59,
- 294, 312, 312, 34, 59, 59, 59, 125, 295, 59,
- 125, 0, 59, -1, -1, 55, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, 257, 258, 259, 260, 261,
- 262, 263, 264, 265, 266, 267, 268, 269, 270, 271,
- 272, 273, 274, 275, 276, 277, 278, 279, 280, 281,
- 282, 283, 284, 285, 286, 287, 288, 289, 290, 291,
- -1, -1, -1, -1, -1, -1, -1, -1, -1, -1,
- -1, -1, 304, -1, -1, 307, 308, 309, 310, 257,
- 258, 259, 260, 261, 262, 263, 264, 265, 266, 267,
- 268, 269, 270, 271, 272, 273, 274, 275, 276, 277,
- 278, 279, 280, 281, 282, 283, 284, 285, 286, 287,
- 288, 289, 290, 291, -1, -1, -1, -1, -1, -1,
- -1, -1, -1, -1, -1, -1, 304, -1, -1, 307,
- 308, 309, 310,
+
+/* YYDEFACT[STATE-NAME] -- Default reduction number in state STATE-NUM.
+ Performed when YYTABLE doesn't specify something else to do. Zero
+ means the default is an error. */
+static const yytype_uint8 yydefact[] =
+{
+ 2, 13, 14, 15, 16, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, 35, 36, 37, 38, 39, 40, 41,
+ 42, 43, 44, 45, 46, 0, 0, 47, 0, 57,
+ 0, 0, 3, 4, 8, 9, 5, 6, 7, 12,
+ 10, 11, 0, 0, 0, 0, 0, 0, 1, 73,
+ 66, 49, 0, 59, 0, 0, 0, 0, 88, 0,
+ 65, 79, 80, 0, 71, 0, 48, 51, 50, 90,
+ 61, 0, 60, 74, 67, 0, 0, 0, 58, 0,
+ 0, 0, 89, 0, 91, 64, 62, 0, 68, 53,
+ 0, 94, 0, 0, 81, 82, 83, 0, 0, 54,
+ 92, 63, 75, 0, 0, 0, 0, 0, 72, 0,
+ 56, 55, 52, 95, 0, 0, 0, 93, 84, 85,
+ 0, 69, 76, 0, 0, 70, 0, 86, 87, 0,
+ 77, 0, 78
};
-#define YYFINAL 41
-#ifndef YYDEBUG
-#define YYDEBUG 0
-#endif
-#define YYMAXTOKEN 312
-#if YYDEBUG
-const char * const H5LTyyname[] = {
-"end-of-file",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-"'\"'",0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"':'","';'",0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'['",0,"']'",0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,"'{'",0,"'}'",0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,
-"H5T_STD_I8BE_TOKEN","H5T_STD_I8LE_TOKEN","H5T_STD_I16BE_TOKEN",
-"H5T_STD_I16LE_TOKEN","H5T_STD_I32BE_TOKEN","H5T_STD_I32LE_TOKEN",
-"H5T_STD_I64BE_TOKEN","H5T_STD_I64LE_TOKEN","H5T_STD_U8BE_TOKEN",
-"H5T_STD_U8LE_TOKEN","H5T_STD_U16BE_TOKEN","H5T_STD_U16LE_TOKEN",
-"H5T_STD_U32BE_TOKEN","H5T_STD_U32LE_TOKEN","H5T_STD_U64BE_TOKEN",
-"H5T_STD_U64LE_TOKEN","H5T_NATIVE_CHAR_TOKEN","H5T_NATIVE_SCHAR_TOKEN",
-"H5T_NATIVE_UCHAR_TOKEN","H5T_NATIVE_SHORT_TOKEN","H5T_NATIVE_USHORT_TOKEN",
-"H5T_NATIVE_INT_TOKEN","H5T_NATIVE_UINT_TOKEN","H5T_NATIVE_LONG_TOKEN",
-"H5T_NATIVE_ULONG_TOKEN","H5T_NATIVE_LLONG_TOKEN","H5T_NATIVE_ULLONG_TOKEN",
-"H5T_IEEE_F32BE_TOKEN","H5T_IEEE_F32LE_TOKEN","H5T_IEEE_F64BE_TOKEN",
-"H5T_IEEE_F64LE_TOKEN","H5T_NATIVE_FLOAT_TOKEN","H5T_NATIVE_DOUBLE_TOKEN",
-"H5T_NATIVE_LDOUBLE_TOKEN","H5T_STRING_TOKEN","STRSIZE_TOKEN","STRPAD_TOKEN",
-"CSET_TOKEN","CTYPE_TOKEN","H5T_VARIABLE_TOKEN","H5T_STR_NULLTERM_TOKEN",
-"H5T_STR_NULLPAD_TOKEN","H5T_STR_SPACEPAD_TOKEN","H5T_CSET_ASCII_TOKEN",
-"H5T_CSET_UTF8_TOKEN","H5T_C_S1_TOKEN","H5T_FORTRAN_S1_TOKEN",
-"H5T_OPAQUE_TOKEN","OPQ_SIZE_TOKEN","OPQ_TAG_TOKEN","H5T_COMPOUND_TOKEN",
-"H5T_ENUM_TOKEN","H5T_ARRAY_TOKEN","H5T_VLEN_TOKEN","STRING","NUMBER",
+
+/* YYDEFGOTO[NTERM-NUM]. */
+static const yytype_int16 yydefgoto[] =
+{
+ -1, 41, 42, 43, 44, 45, 46, 54, 67, 78,
+ 85, 100, 115, 121, 47, 56, 69, 82, 87, 103,
+ 96, 48, 49, 66, 90, 108, 133, 75, 119, 50,
+ 65, 89, 117, 134, 141, 73, 107, 130, 139, 51,
+ 79, 86, 94, 116, 102, 124
};
-const char * const H5LTyyrule[] = {
-"$accept : start",
-"start :",
-"start : ddl_type",
-"ddl_type : atomic_type",
-"ddl_type : compound_type",
-"ddl_type : array_type",
-"ddl_type : vlen_type",
-"atomic_type : integer_type",
-"atomic_type : fp_type",
-"atomic_type : string_type",
-"atomic_type : enum_type",
-"atomic_type : opaque_type",
-"integer_type : H5T_STD_I8BE_TOKEN",
-"integer_type : H5T_STD_I8LE_TOKEN",
-"integer_type : H5T_STD_I16BE_TOKEN",
-"integer_type : H5T_STD_I16LE_TOKEN",
-"integer_type : H5T_STD_I32BE_TOKEN",
-"integer_type : H5T_STD_I32LE_TOKEN",
-"integer_type : H5T_STD_I64BE_TOKEN",
-"integer_type : H5T_STD_I64LE_TOKEN",
-"integer_type : H5T_STD_U8BE_TOKEN",
-"integer_type : H5T_STD_U8LE_TOKEN",
-"integer_type : H5T_STD_U16BE_TOKEN",
-"integer_type : H5T_STD_U16LE_TOKEN",
-"integer_type : H5T_STD_U32BE_TOKEN",
-"integer_type : H5T_STD_U32LE_TOKEN",
-"integer_type : H5T_STD_U64BE_TOKEN",
-"integer_type : H5T_STD_U64LE_TOKEN",
-"integer_type : H5T_NATIVE_CHAR_TOKEN",
-"integer_type : H5T_NATIVE_SCHAR_TOKEN",
-"integer_type : H5T_NATIVE_UCHAR_TOKEN",
-"integer_type : H5T_NATIVE_SHORT_TOKEN",
-"integer_type : H5T_NATIVE_USHORT_TOKEN",
-"integer_type : H5T_NATIVE_INT_TOKEN",
-"integer_type : H5T_NATIVE_UINT_TOKEN",
-"integer_type : H5T_NATIVE_LONG_TOKEN",
-"integer_type : H5T_NATIVE_ULONG_TOKEN",
-"integer_type : H5T_NATIVE_LLONG_TOKEN",
-"integer_type : H5T_NATIVE_ULLONG_TOKEN",
-"fp_type : H5T_IEEE_F32BE_TOKEN",
-"fp_type : H5T_IEEE_F32LE_TOKEN",
-"fp_type : H5T_IEEE_F64BE_TOKEN",
-"fp_type : H5T_IEEE_F64LE_TOKEN",
-"fp_type : H5T_NATIVE_FLOAT_TOKEN",
-"fp_type : H5T_NATIVE_DOUBLE_TOKEN",
-"fp_type : H5T_NATIVE_LDOUBLE_TOKEN",
-"$$1 :",
-"compound_type : H5T_COMPOUND_TOKEN $$1 '{' memb_list '}'",
-"memb_list :",
-"memb_list : memb_list memb_def",
-"$$2 :",
-"memb_def : ddl_type $$2 '\"' field_name '\"' field_offset ';'",
-"field_name : STRING",
-"field_offset :",
-"field_offset : ':' offset",
-"offset : NUMBER",
-"$$3 :",
-"array_type : H5T_ARRAY_TOKEN $$3 '{' dim_list ddl_type '}'",
-"dim_list :",
-"dim_list : dim_list dim",
-"$$4 :",
-"$$5 :",
-"dim : '[' $$4 dimsize $$5 ']'",
-"dimsize : NUMBER",
-"vlen_type : H5T_VLEN_TOKEN '{' ddl_type '}'",
-"$$6 :",
-"$$7 :",
-"$$8 :",
-"$$9 :",
-"opaque_type : H5T_OPAQUE_TOKEN '{' OPQ_SIZE_TOKEN $$6 opaque_size ';' $$7 OPQ_TAG_TOKEN $$8 '\"' opaque_tag '\"' ';' $$9 '}'",
-"opaque_size : NUMBER",
-"opaque_tag : STRING",
-"$$10 :",
-"$$11 :",
-"$$12 :",
-"$$13 :",
-"$$14 :",
-"string_type : H5T_STRING_TOKEN '{' STRSIZE_TOKEN $$10 strsize ';' $$11 STRPAD_TOKEN strpad ';' $$12 CSET_TOKEN cset ';' $$13 CTYPE_TOKEN ctype ';' $$14 '}'",
-"strsize : H5T_VARIABLE_TOKEN",
-"strsize : NUMBER",
-"strpad : H5T_STR_NULLTERM_TOKEN",
-"strpad : H5T_STR_NULLPAD_TOKEN",
-"strpad : H5T_STR_SPACEPAD_TOKEN",
-"cset : H5T_CSET_ASCII_TOKEN",
-"cset : H5T_CSET_UTF8_TOKEN",
-"ctype : H5T_C_S1_TOKEN",
-"ctype : H5T_FORTRAN_S1_TOKEN",
-"$$15 :",
-"enum_type : H5T_ENUM_TOKEN '{' integer_type ';' $$15 enum_list '}'",
-"enum_list :",
-"enum_list : enum_list enum_def",
-"$$16 :",
-"enum_def : '\"' enum_symbol '\"' $$16 enum_val ';'",
-"enum_symbol : STRING",
-"enum_val : NUMBER",
+
+/* YYPACT[STATE-NUM] -- Index in YYTABLE of the portion describing
+ STATE-NUM. */
+#define YYPACT_NINF -25
+static const yytype_int16 yypact[] =
+{
+ 114, -25, -25, -25, -25, -25, -25, -25, -25, -25,
+ -25, -25, -25, -25, -25, -25, -25, -25, -25, -25,
+ -25, -25, -25, -25, -25, -25, -25, -25, -25, -25,
+ -25, -25, -25, -25, -25, -24, -20, -25, -15, -25,
+ -14, 49, -25, -25, -25, -25, -25, -25, -25, -25,
+ -25, -25, 19, 45, 38, 168, 39, 114, -25, -25,
+ -25, -25, 34, -25, 40, -4, 43, 56, -25, -3,
+ -25, -25, -25, 37, -25, 42, -25, -25, -25, -25,
+ -25, 44, -25, -25, -25, 50, -23, 47, -25, 64,
+ 62, 51, -25, 58, -25, -25, -25, -2, -25, -25,
+ 89, -25, 90, 92, -25, -25, -25, 91, 94, 95,
+ -25, -25, -25, 98, 100, 96, 102, 122, -25, 103,
+ -25, -25, -25, -25, 133, 9, 134, -25, -25, -25,
+ 135, -25, -25, 105, 160, -25, 46, -25, -25, 137,
+ -25, 143, -25
+};
+
+/* YYPGOTO[NTERM-NUM]. */
+static const yytype_int8 yypgoto[] =
+{
+ -25, -25, -21, -25, 108, -25, -25, -25, -25, -25,
+ -25, -25, -25, -25, -25, -25, -25, -25, -25, -25,
+ -25, -25, -25, -25, -25, -25, -25, -25, -25, -25,
+ -25, -25, -25, -25, -25, -25, -25, -25, -25, -25,
+ -25, -25, -25, -25, -25, -25
+};
+
+/* YYTABLE[YYPACT[STATE-NUM]]. What to do in state STATE-NUM. If
+ positive, shift that token. If negative, reduce the rule which
+ number is the opposite. If YYTABLE_NINF, syntax error. */
+#define YYTABLE_NINF -1
+static const yytype_uint8 yytable[] =
+{
+ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10,
+ 11, 12, 13, 14, 15, 16, 17, 18, 19, 20,
+ 21, 22, 23, 24, 25, 26, 27, 28, 29, 30,
+ 31, 32, 33, 34, 35, 52, 64, 92, 71, 53,
+ 93, 104, 105, 106, 55, 57, 77, 36, 81, 58,
+ 37, 38, 39, 40, 72, 128, 129, 59, 80, 1,
+ 2, 3, 4, 5, 6, 7, 8, 9, 10, 11,
+ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, 35, 137, 138, 60, 61, 63, 68,
+ 70, 74, 83, 97, 88, 95, 36, 84, 99, 37,
+ 38, 39, 40, 91, 98, 101, 76, 1, 2, 3,
+ 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
+ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
+ 34, 35, 109, 110, 111, 118, 112, 113, 120, 114,
+ 123, 122, 125, 62, 36, 135, 126, 37, 38, 39,
+ 40, 1, 2, 3, 4, 5, 6, 7, 8, 9,
+ 10, 11, 12, 13, 14, 15, 16, 17, 18, 19,
+ 20, 21, 22, 23, 24, 25, 26, 27, 127, 131,
+ 132, 136, 140, 142
+};
+
+#define yypact_value_is_default(Yystate) \
+ (!!((Yystate) == (-25)))
+
+#define yytable_value_is_error(Yytable_value) \
+ YYID (0)
+
+static const yytype_uint8 yycheck[] =
+{
+ 3, 4, 5, 6, 7, 8, 9, 10, 11, 12,
+ 13, 14, 15, 16, 17, 18, 19, 20, 21, 22,
+ 23, 24, 25, 26, 27, 28, 29, 30, 31, 32,
+ 33, 34, 35, 36, 37, 59, 57, 60, 42, 59,
+ 63, 43, 44, 45, 59, 59, 67, 50, 69, 0,
+ 53, 54, 55, 56, 58, 46, 47, 38, 61, 3,
+ 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
+ 14, 15, 16, 17, 18, 19, 20, 21, 22, 23,
+ 24, 25, 26, 27, 28, 29, 30, 31, 32, 33,
+ 34, 35, 36, 37, 48, 49, 51, 59, 59, 65,
+ 60, 58, 65, 39, 60, 58, 50, 65, 57, 53,
+ 54, 55, 56, 63, 52, 57, 60, 3, 4, 5,
+ 6, 7, 8, 9, 10, 11, 12, 13, 14, 15,
+ 16, 17, 18, 19, 20, 21, 22, 23, 24, 25,
+ 26, 27, 28, 29, 30, 31, 32, 33, 34, 35,
+ 36, 37, 63, 63, 62, 57, 65, 63, 58, 64,
+ 58, 65, 40, 55, 50, 60, 63, 53, 54, 55,
+ 56, 3, 4, 5, 6, 7, 8, 9, 10, 11,
+ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 65, 65,
+ 65, 41, 65, 60
+};
+
+/* YYSTOS[STATE-NUM] -- The (internal number of the) accessing
+ symbol of state STATE-NUM. */
+static const yytype_uint8 yystos[] =
+{
+ 0, 3, 4, 5, 6, 7, 8, 9, 10, 11,
+ 12, 13, 14, 15, 16, 17, 18, 19, 20, 21,
+ 22, 23, 24, 25, 26, 27, 28, 29, 30, 31,
+ 32, 33, 34, 35, 36, 37, 50, 53, 54, 55,
+ 56, 67, 68, 69, 70, 71, 72, 80, 87, 88,
+ 95, 105, 59, 59, 73, 59, 81, 59, 0, 38,
+ 51, 59, 70, 59, 68, 96, 89, 74, 65, 82,
+ 60, 42, 58, 101, 58, 93, 60, 68, 75, 106,
+ 61, 68, 83, 65, 65, 76, 107, 84, 60, 97,
+ 90, 63, 60, 63, 108, 58, 86, 39, 52, 57,
+ 77, 57, 110, 85, 43, 44, 45, 102, 91, 63,
+ 63, 62, 65, 63, 64, 78, 109, 98, 57, 94,
+ 58, 79, 65, 58, 111, 40, 63, 65, 46, 47,
+ 103, 65, 65, 92, 99, 60, 41, 48, 49, 104,
+ 65, 100, 60
};
+
+#define yyerrok (yyerrstatus = 0)
+#define yyclearin (yychar = YYEMPTY)
+#define YYEMPTY (-2)
+#define YYEOF 0
+
+#define YYACCEPT goto yyacceptlab
+#define YYABORT goto yyabortlab
+#define YYERROR goto yyerrorlab
+
+
+/* Like YYERROR except do call yyerror. This remains here temporarily
+ to ease the transition to the new meaning of YYERROR, for GCC.
+ Once GCC version 2 has supplanted version 1, this can go. However,
+ YYFAIL appears to be in use. Nevertheless, it is formally deprecated
+ in Bison 2.4.2's NEWS entry, where a plan to phase it out is
+ discussed. */
+
+#define YYFAIL goto yyerrlab
+#if defined YYFAIL
+ /* This is here to suppress warnings from the GCC cpp's
+ -Wunused-macros. Normally we don't worry about that warning, but
+ some users do, and we want to make it easy for users to remove
+ YYFAIL uses, which will produce warnings from Bison 2.5. */
+#endif
+
+#define YYRECOVERING() (!!yyerrstatus)
+
+#define YYBACKUP(Token, Value) \
+do \
+ if (yychar == YYEMPTY) \
+ { \
+ yychar = (Token); \
+ yylval = (Value); \
+ YYPOPSTACK (yylen); \
+ yystate = *yyssp; \
+ goto yybackup; \
+ } \
+ else \
+ { \
+ yyerror (YY_("syntax error: cannot back up")); \
+ YYERROR; \
+ } \
+while (YYID (0))
+
+/* Error token number */
+#define YYTERROR 1
+#define YYERRCODE 256
+
+
+/* This macro is provided for backward compatibility. */
+#ifndef YY_LOCATION_PRINT
+# define YY_LOCATION_PRINT(File, Loc) ((void) 0)
+#endif
+
+
+/* YYLEX -- calling `yylex' with the right arguments. */
+#ifdef YYLEX_PARAM
+# define YYLEX yylex (YYLEX_PARAM)
+#else
+# define YYLEX yylex ()
#endif
+
+/* Enable debugging if requested. */
#if YYDEBUG
-#include <stdio.h>
+
+# ifndef YYFPRINTF
+# include <stdio.h> /* INFRINGES ON USER NAME SPACE */
+# define YYFPRINTF fprintf
+# endif
+
+# define YYDPRINTF(Args) \
+do { \
+ if (yydebug) \
+ YYFPRINTF Args; \
+} while (YYID (0))
+
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location) \
+do { \
+ if (yydebug) \
+ { \
+ YYFPRINTF (stderr, "%s ", Title); \
+ yy_symbol_print (stderr, \
+ Type, Value); \
+ YYFPRINTF (stderr, "\n"); \
+ } \
+} while (YYID (0))
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT. |
+`--------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_value_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
+#else
+static void
+yy_symbol_value_print (yyoutput, yytype, yyvaluep)
+ FILE *yyoutput;
+ int yytype;
+ YYSTYPE const * const yyvaluep;
#endif
-#ifdef YYSTACKSIZE
-#undef YYMAXDEPTH
-#define YYMAXDEPTH YYSTACKSIZE
+{
+ FILE *yyo = yyoutput;
+ YYUSE (yyo);
+ if (!yyvaluep)
+ return;
+# ifdef YYPRINT
+ if (yytype < YYNTOKENS)
+ YYPRINT (yyoutput, yytoknum[yytype], *yyvaluep);
+# else
+ YYUSE (yyoutput);
+# endif
+ switch (yytype)
+ {
+ default:
+ break;
+ }
+}
+
+
+/*--------------------------------.
+| Print this symbol on YYOUTPUT. |
+`--------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_symbol_print (FILE *yyoutput, int yytype, YYSTYPE const * const yyvaluep)
#else
-#ifdef YYMAXDEPTH
-#define YYSTACKSIZE YYMAXDEPTH
+static void
+yy_symbol_print (yyoutput, yytype, yyvaluep)
+ FILE *yyoutput;
+ int yytype;
+ YYSTYPE const * const yyvaluep;
+#endif
+{
+ if (yytype < YYNTOKENS)
+ YYFPRINTF (yyoutput, "token %s (", yytname[yytype]);
+ else
+ YYFPRINTF (yyoutput, "nterm %s (", yytname[yytype]);
+
+ yy_symbol_value_print (yyoutput, yytype, yyvaluep);
+ YYFPRINTF (yyoutput, ")");
+}
+
+/*------------------------------------------------------------------.
+| yy_stack_print -- Print the state stack from its BOTTOM up to its |
+| TOP (included). |
+`------------------------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_stack_print (yytype_int16 *yybottom, yytype_int16 *yytop)
#else
-#define YYSTACKSIZE 10000
-#define YYMAXDEPTH 10000
+static void
+yy_stack_print (yybottom, yytop)
+ yytype_int16 *yybottom;
+ yytype_int16 *yytop;
#endif
+{
+ YYFPRINTF (stderr, "Stack now");
+ for (; yybottom <= yytop; yybottom++)
+ {
+ int yybot = *yybottom;
+ YYFPRINTF (stderr, " %d", yybot);
+ }
+ YYFPRINTF (stderr, "\n");
+}
+
+# define YY_STACK_PRINT(Bottom, Top) \
+do { \
+ if (yydebug) \
+ yy_stack_print ((Bottom), (Top)); \
+} while (YYID (0))
+
+
+/*------------------------------------------------.
+| Report that the YYRULE is going to be reduced. |
+`------------------------------------------------*/
+
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yy_reduce_print (YYSTYPE *yyvsp, int yyrule)
+#else
+static void
+yy_reduce_print (yyvsp, yyrule)
+ YYSTYPE *yyvsp;
+ int yyrule;
#endif
-#define YYINITSTACKSIZE 200
-int yydebug;
-int yynerrs;
-int yyerrflag;
-int yychar;
-short *yyssp;
-YYSTYPE *yyvsp;
-YYSTYPE yyval;
-YYSTYPE yylval;
-short *yyss;
-short *yysslim;
-YYSTYPE *yyvs;
-int yystacksize;
-/* allocate initial stack or double stack size, up to YYMAXDEPTH */
-static int yygrowstack()
{
- int newsize, i;
- short *newss;
- YYSTYPE *newvs;
-
- if ((newsize = yystacksize) == 0)
- newsize = YYINITSTACKSIZE;
- else if (newsize >= YYMAXDEPTH)
- return -1;
- else if ((newsize *= 2) > YYMAXDEPTH)
- newsize = YYMAXDEPTH;
- i = yyssp - yyss;
- newss = yyss ? (short *)realloc(yyss, newsize * sizeof *newss) :
- (short *)malloc(newsize * sizeof *newss);
- if (newss == NULL)
- return -1;
- yyss = newss;
- yyssp = newss + i;
- newvs = yyvs ? (YYSTYPE *)realloc(yyvs, newsize * sizeof *newvs) :
- (YYSTYPE *)malloc(newsize * sizeof *newvs);
- if (newvs == NULL)
- return -1;
- yyvs = newvs;
- yyvsp = newvs + i;
- yystacksize = newsize;
- yysslim = yyss + newsize - 1;
- return 0;
+ int yynrhs = yyr2[yyrule];
+ int yyi;
+ unsigned long int yylno = yyrline[yyrule];
+ YYFPRINTF (stderr, "Reducing stack by rule %d (line %lu):\n",
+ yyrule - 1, yylno);
+ /* The symbols being reduced. */
+ for (yyi = 0; yyi < yynrhs; yyi++)
+ {
+ YYFPRINTF (stderr, " $%d = ", yyi + 1);
+ yy_symbol_print (stderr, yyrhs[yyprhs[yyrule] + yyi],
+ &(yyvsp[(yyi + 1) - (yynrhs)])
+ );
+ YYFPRINTF (stderr, "\n");
+ }
}
-#define YYABORT goto yyabort
-#define YYREJECT goto yyabort
-#define YYACCEPT goto yyaccept
-#define YYERROR goto yyerrlab
-
-#ifndef YYPARSE_PARAM
-#if defined(__cplusplus) || __STDC__
-#define YYPARSE_PARAM_ARG void
-#define YYPARSE_PARAM_DECL
-#else /* ! ANSI-C/C++ */
-#define YYPARSE_PARAM_ARG
-#define YYPARSE_PARAM_DECL
-#endif /* ANSI-C/C++ */
-#else /* YYPARSE_PARAM */
-#ifndef YYPARSE_PARAM_TYPE
-#define YYPARSE_PARAM_TYPE void *
+# define YY_REDUCE_PRINT(Rule) \
+do { \
+ if (yydebug) \
+ yy_reduce_print (yyvsp, Rule); \
+} while (YYID (0))
+
+/* Nonzero means print parse trace. It is left uninitialized so that
+ multiple parsers can coexist. */
+int yydebug;
+#else /* !YYDEBUG */
+# define YYDPRINTF(Args)
+# define YY_SYMBOL_PRINT(Title, Type, Value, Location)
+# define YY_STACK_PRINT(Bottom, Top)
+# define YY_REDUCE_PRINT(Rule)
+#endif /* !YYDEBUG */
+
+
+/* YYINITDEPTH -- initial size of the parser's stacks. */
+#ifndef YYINITDEPTH
+# define YYINITDEPTH 200
#endif
-#if defined(__cplusplus) || __STDC__
-#define YYPARSE_PARAM_ARG YYPARSE_PARAM_TYPE YYPARSE_PARAM
-#define YYPARSE_PARAM_DECL
-#else /* ! ANSI-C/C++ */
-#define YYPARSE_PARAM_ARG YYPARSE_PARAM
-#define YYPARSE_PARAM_DECL YYPARSE_PARAM_TYPE YYPARSE_PARAM;
-#endif /* ANSI-C/C++ */
-#endif /* ! YYPARSE_PARAM */
-int
-yyparse (YYPARSE_PARAM_ARG)
- YYPARSE_PARAM_DECL
+/* YYMAXDEPTH -- maximum size the stacks can grow to (effective only
+ if the built-in stack extension method is used).
+
+ Do not make this value too large; the results are undefined if
+ YYSTACK_ALLOC_MAXIMUM < YYSTACK_BYTES (YYMAXDEPTH)
+ evaluated with infinite-precision integer arithmetic. */
+
+#ifndef YYMAXDEPTH
+# define YYMAXDEPTH 10000
+#endif
+
+
+#if YYERROR_VERBOSE
+
+# ifndef yystrlen
+# if defined __GLIBC__ && defined _STRING_H
+# define yystrlen strlen
+# else
+/* Return the length of YYSTR. */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static YYSIZE_T
+yystrlen (const char *yystr)
+#else
+static YYSIZE_T
+yystrlen (yystr)
+ const char *yystr;
+#endif
{
- register int yym, yyn, yystate;
-#if YYDEBUG
- register const char *yys;
+ YYSIZE_T yylen;
+ for (yylen = 0; yystr[yylen]; yylen++)
+ continue;
+ return yylen;
+}
+# endif
+# endif
- if ((yys = getenv("YYDEBUG")))
+# ifndef yystpcpy
+# if defined __GLIBC__ && defined _STRING_H && defined _GNU_SOURCE
+# define yystpcpy stpcpy
+# else
+/* Copy YYSRC to YYDEST, returning the address of the terminating '\0' in
+ YYDEST. */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static char *
+yystpcpy (char *yydest, const char *yysrc)
+#else
+static char *
+yystpcpy (yydest, yysrc)
+ char *yydest;
+ const char *yysrc;
+#endif
+{
+ char *yyd = yydest;
+ const char *yys = yysrc;
+
+ while ((*yyd++ = *yys++) != '\0')
+ continue;
+
+ return yyd - 1;
+}
+# endif
+# endif
+
+# ifndef yytnamerr
+/* Copy to YYRES the contents of YYSTR after stripping away unnecessary
+ quotes and backslashes, so that it's suitable for yyerror. The
+ heuristic is that double-quoting is unnecessary unless the string
+ contains an apostrophe, a comma, or backslash (other than
+ backslash-backslash). YYSTR is taken from yytname. If YYRES is
+ null, do not copy; instead, return the length of what the result
+ would have been. */
+static YYSIZE_T
+yytnamerr (char *yyres, const char *yystr)
+{
+ if (*yystr == '"')
{
- yyn = *yys;
- if (yyn >= '0' && yyn <= '9')
- yydebug = yyn - '0';
+ YYSIZE_T yyn = 0;
+ char const *yyp = yystr;
+
+ for (;;)
+ switch (*++yyp)
+ {
+ case '\'':
+ case ',':
+ goto do_not_strip_quotes;
+
+ case '\\':
+ if (*++yyp != '\\')
+ goto do_not_strip_quotes;
+ /* Fall through. */
+ default:
+ if (yyres)
+ yyres[yyn] = *yyp;
+ yyn++;
+ break;
+
+ case '"':
+ if (yyres)
+ yyres[yyn] = '\0';
+ return yyn;
+ }
+ do_not_strip_quotes: ;
}
-#endif
- yynerrs = 0;
- yyerrflag = 0;
- yychar = (-1);
+ if (! yyres)
+ return yystrlen (yystr);
+
+ return yystpcpy (yyres, yystr) - yyres;
+}
+# endif
+
+/* Copy into *YYMSG, which is of size *YYMSG_ALLOC, an error message
+ about the unexpected token YYTOKEN for the state stack whose top is
+ YYSSP.
- if (yyss == NULL && yygrowstack()) goto yyoverflow;
- yyssp = yyss;
- yyvsp = yyvs;
- *yyssp = yystate = 0;
+ Return 0 if *YYMSG was successfully written. Return 1 if *YYMSG is
+ not large enough to hold the message. In that case, also set
+ *YYMSG_ALLOC to the required number of bytes. Return 2 if the
+ required number of bytes is too large to store. */
+static int
+yysyntax_error (YYSIZE_T *yymsg_alloc, char **yymsg,
+ yytype_int16 *yyssp, int yytoken)
+{
+ YYSIZE_T yysize0 = yytnamerr (YY_NULL, yytname[yytoken]);
+ YYSIZE_T yysize = yysize0;
+ enum { YYERROR_VERBOSE_ARGS_MAXIMUM = 5 };
+ /* Internationalized format string. */
+ const char *yyformat = YY_NULL;
+ /* Arguments of yyformat. */
+ char const *yyarg[YYERROR_VERBOSE_ARGS_MAXIMUM];
+ /* Number of reported tokens (one for the "unexpected", one per
+ "expected"). */
+ int yycount = 0;
-yyloop:
- if ((yyn = yydefred[yystate])) goto yyreduce;
- if (yychar < 0)
+ /* There are many possibilities here to consider:
+ - Assume YYFAIL is not used. It's too flawed to consider. See
+ <http://lists.gnu.org/archive/html/bison-patches/2009-12/msg00024.html>
+ for details. YYERROR is fine as it does not invoke this
+ function.
+ - If this state is a consistent state with a default action, then
+ the only way this function was invoked is if the default action
+ is an error action. In that case, don't check for expected
+ tokens because there are none.
+ - The only way there can be no lookahead present (in yychar) is if
+ this state is a consistent state with a default action. Thus,
+ detecting the absence of a lookahead is sufficient to determine
+ that there is no unexpected or expected token to report. In that
+ case, just report a simple "syntax error".
+ - Don't assume there isn't a lookahead just because this state is a
+ consistent state with a default action. There might have been a
+ previous inconsistent state, consistent state with a non-default
+ action, or user semantic action that manipulated yychar.
+ - Of course, the expected token list depends on states to have
+ correct lookahead information, and it depends on the parser not
+ to perform extra reductions after fetching a lookahead from the
+ scanner and before detecting a syntax error. Thus, state merging
+ (from LALR or IELR) and default reductions corrupt the expected
+ token list. However, the list is correct for canonical LR with
+ one exception: it will still contain any token that will not be
+ accepted due to an error action in a later state.
+ */
+ if (yytoken != YYEMPTY)
{
- if ((yychar = yylex()) < 0) yychar = 0;
-#if YYDEBUG
- if (yydebug)
+ int yyn = yypact[*yyssp];
+ yyarg[yycount++] = yytname[yytoken];
+ if (!yypact_value_is_default (yyn))
{
- yys = 0;
- if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
- if (!yys) yys = "illegal-symbol";
- printf("%sdebug: state %d, reading %d (%s)\n",
- YYPREFIX, yystate, yychar, yys);
+ /* Start YYX at -YYN if negative to avoid negative indexes in
+ YYCHECK. In other words, skip the first -YYN actions for
+ this state because they are default actions. */
+ int yyxbegin = yyn < 0 ? -yyn : 0;
+ /* Stay within bounds of both yycheck and yytname. */
+ int yychecklim = YYLAST - yyn + 1;
+ int yyxend = yychecklim < YYNTOKENS ? yychecklim : YYNTOKENS;
+ int yyx;
+
+ for (yyx = yyxbegin; yyx < yyxend; ++yyx)
+ if (yycheck[yyx + yyn] == yyx && yyx != YYTERROR
+ && !yytable_value_is_error (yytable[yyx + yyn]))
+ {
+ if (yycount == YYERROR_VERBOSE_ARGS_MAXIMUM)
+ {
+ yycount = 1;
+ yysize = yysize0;
+ break;
+ }
+ yyarg[yycount++] = yytname[yyx];
+ {
+ YYSIZE_T yysize1 = yysize + yytnamerr (YY_NULL, yytname[yyx]);
+ if (! (yysize <= yysize1
+ && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+ return 2;
+ yysize = yysize1;
+ }
+ }
}
-#endif
}
- if ((yyn = yysindex[yystate]) && (yyn += yychar) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+
+ switch (yycount)
{
-#if YYDEBUG
- if (yydebug)
- printf("%sdebug: state %d, shifting to state %d\n",
- YYPREFIX, yystate, yytable[yyn]);
-#endif
- if (yyssp >= yysslim && yygrowstack())
+# define YYCASE_(N, S) \
+ case N: \
+ yyformat = S; \
+ break
+ YYCASE_(0, YY_("syntax error"));
+ YYCASE_(1, YY_("syntax error, unexpected %s"));
+ YYCASE_(2, YY_("syntax error, unexpected %s, expecting %s"));
+ YYCASE_(3, YY_("syntax error, unexpected %s, expecting %s or %s"));
+ YYCASE_(4, YY_("syntax error, unexpected %s, expecting %s or %s or %s"));
+ YYCASE_(5, YY_("syntax error, unexpected %s, expecting %s or %s or %s or %s"));
+# undef YYCASE_
+ }
+
+ {
+ YYSIZE_T yysize1 = yysize + yystrlen (yyformat);
+ if (! (yysize <= yysize1 && yysize1 <= YYSTACK_ALLOC_MAXIMUM))
+ return 2;
+ yysize = yysize1;
+ }
+
+ if (*yymsg_alloc < yysize)
+ {
+ *yymsg_alloc = 2 * yysize;
+ if (! (yysize <= *yymsg_alloc
+ && *yymsg_alloc <= YYSTACK_ALLOC_MAXIMUM))
+ *yymsg_alloc = YYSTACK_ALLOC_MAXIMUM;
+ return 1;
+ }
+
+ /* Avoid sprintf, as that infringes on the user's name space.
+ Don't have undefined behavior even if the translation
+ produced a string with the wrong number of "%s"s. */
+ {
+ char *yyp = *yymsg;
+ int yyi = 0;
+ while ((*yyp = *yyformat) != '\0')
+ if (*yyp == '%' && yyformat[1] == 's' && yyi < yycount)
{
- goto yyoverflow;
+ yyp += yytnamerr (yyp, yyarg[yyi++]);
+ yyformat += 2;
}
- *++yyssp = yystate = yytable[yyn];
- *++yyvsp = yylval;
- yychar = (-1);
- if (yyerrflag > 0) --yyerrflag;
- goto yyloop;
- }
- if ((yyn = yyrindex[yystate]) && (yyn += yychar) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yychar)
+ else
+ {
+ yyp++;
+ yyformat++;
+ }
+ }
+ return 0;
+}
+#endif /* YYERROR_VERBOSE */
+
+/*-----------------------------------------------.
+| Release the memory associated to this symbol. |
+`-----------------------------------------------*/
+
+/*ARGSUSED*/
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+static void
+yydestruct (const char *yymsg, int yytype, YYSTYPE *yyvaluep)
+#else
+static void
+yydestruct (yymsg, yytype, yyvaluep)
+ const char *yymsg;
+ int yytype;
+ YYSTYPE *yyvaluep;
+#endif
+{
+ YYUSE (yyvaluep);
+
+ if (!yymsg)
+ yymsg = "Deleting";
+ YY_SYMBOL_PRINT (yymsg, yytype, yyvaluep, yylocationp);
+
+ switch (yytype)
{
- yyn = yytable[yyn];
- goto yyreduce;
+
+ default:
+ break;
}
- if (yyerrflag) goto yyinrecovery;
-#if defined(lint) || defined(__GNUC__)
- goto yynewerror;
+}
+
+
+
+
+/* The lookahead symbol. */
+int yychar;
+
+
+#ifndef YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+# define YY_IGNORE_MAYBE_UNINITIALIZED_END
#endif
-yynewerror:
- yyerror("syntax error");
-#if defined(lint) || defined(__GNUC__)
- goto yyerrlab;
+#ifndef YY_INITIAL_VALUE
+# define YY_INITIAL_VALUE(Value) /* Nothing. */
#endif
-yyerrlab:
- ++yynerrs;
-yyinrecovery:
- if (yyerrflag < 3)
- {
- yyerrflag = 3;
- for (;;)
- {
- if ((yyn = yysindex[*yyssp]) && (yyn += YYERRCODE) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == YYERRCODE)
- {
-#if YYDEBUG
- if (yydebug)
- printf("%sdebug: state %d, error recovery shifting\
- to state %d\n", YYPREFIX, *yyssp, yytable[yyn]);
+
+/* The semantic value of the lookahead symbol. */
+YYSTYPE yylval YY_INITIAL_VALUE(yyval_default);
+
+/* Number of syntax errors so far. */
+int yynerrs;
+
+
+/*----------.
+| yyparse. |
+`----------*/
+
+#ifdef YYPARSE_PARAM
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void *YYPARSE_PARAM)
+#else
+int
+yyparse (YYPARSE_PARAM)
+ void *YYPARSE_PARAM;
#endif
- if (yyssp >= yysslim && yygrowstack())
- {
- goto yyoverflow;
- }
- *++yyssp = yystate = yytable[yyn];
- *++yyvsp = yylval;
- goto yyloop;
- }
- else
- {
-#if YYDEBUG
- if (yydebug)
- printf("%sdebug: error recovery discarding state %d\n",
- YYPREFIX, *yyssp);
+#else /* ! YYPARSE_PARAM */
+#if (defined __STDC__ || defined __C99__FUNC__ \
+ || defined __cplusplus || defined _MSC_VER)
+int
+yyparse (void)
+#else
+int
+yyparse ()
+
#endif
- if (yyssp <= yyss) goto yyabort;
- --yyssp;
- --yyvsp;
- }
- }
+#endif
+{
+ int yystate;
+ /* Number of tokens to shift before error messages enabled. */
+ int yyerrstatus;
+
+ /* The stacks and their tools:
+ `yyss': related to states.
+ `yyvs': related to semantic values.
+
+ Refer to the stacks through separate pointers, to allow yyoverflow
+ to reallocate them elsewhere. */
+
+ /* The state stack. */
+ yytype_int16 yyssa[YYINITDEPTH];
+ yytype_int16 *yyss;
+ yytype_int16 *yyssp;
+
+ /* The semantic value stack. */
+ YYSTYPE yyvsa[YYINITDEPTH];
+ YYSTYPE *yyvs;
+ YYSTYPE *yyvsp;
+
+ YYSIZE_T yystacksize;
+
+ int yyn;
+ int yyresult;
+ /* Lookahead token as an internal (translated) token number. */
+ int yytoken = 0;
+ /* The variables used to return semantic value and location from the
+ action routines. */
+ YYSTYPE yyval;
+
+#if YYERROR_VERBOSE
+ /* Buffer for error messages, and its allocated size. */
+ char yymsgbuf[128];
+ char *yymsg = yymsgbuf;
+ YYSIZE_T yymsg_alloc = sizeof yymsgbuf;
+#endif
+
+#define YYPOPSTACK(N) (yyvsp -= (N), yyssp -= (N))
+
+ /* The number of symbols on the RHS of the reduced rule.
+ Keep to zero when no symbol should be popped. */
+ int yylen = 0;
+
+ yyssp = yyss = yyssa;
+ yyvsp = yyvs = yyvsa;
+ yystacksize = YYINITDEPTH;
+
+ YYDPRINTF ((stderr, "Starting parse\n"));
+
+ yystate = 0;
+ yyerrstatus = 0;
+ yynerrs = 0;
+ yychar = YYEMPTY; /* Cause a token to be read. */
+ goto yysetstate;
+
+/*------------------------------------------------------------.
+| yynewstate -- Push a new state, which is found in yystate. |
+`------------------------------------------------------------*/
+ yynewstate:
+ /* In all cases, when you get here, the value and location stacks
+ have just been pushed. So pushing a state here evens the stacks. */
+ yyssp++;
+
+ yysetstate:
+ *yyssp = yystate;
+
+ if (yyss + yystacksize - 1 <= yyssp)
+ {
+ /* Get the current used size of the three stacks, in elements. */
+ YYSIZE_T yysize = yyssp - yyss + 1;
+
+#ifdef yyoverflow
+ {
+ /* Give user a chance to reallocate the stack. Use copies of
+ these so that the &'s don't force the real ones into
+ memory. */
+ YYSTYPE *yyvs1 = yyvs;
+ yytype_int16 *yyss1 = yyss;
+
+ /* Each stack pointer address is followed by the size of the
+ data in use in that stack, in bytes. This used to be a
+ conditional around just the two extra args, but that might
+ be undefined if yyoverflow is a macro. */
+ yyoverflow (YY_("memory exhausted"),
+ &yyss1, yysize * sizeof (*yyssp),
+ &yyvs1, yysize * sizeof (*yyvsp),
+ &yystacksize);
+
+ yyss = yyss1;
+ yyvs = yyvs1;
+ }
+#else /* no yyoverflow */
+# ifndef YYSTACK_RELOCATE
+ goto yyexhaustedlab;
+# else
+ /* Extend the stack our own way. */
+ if (YYMAXDEPTH <= yystacksize)
+ goto yyexhaustedlab;
+ yystacksize *= 2;
+ if (YYMAXDEPTH < yystacksize)
+ yystacksize = YYMAXDEPTH;
+
+ {
+ yytype_int16 *yyss1 = yyss;
+ union yyalloc *yyptr =
+ (union yyalloc *) YYSTACK_ALLOC (YYSTACK_BYTES (yystacksize));
+ if (! yyptr)
+ goto yyexhaustedlab;
+ YYSTACK_RELOCATE (yyss_alloc, yyss);
+ YYSTACK_RELOCATE (yyvs_alloc, yyvs);
+# undef YYSTACK_RELOCATE
+ if (yyss1 != yyssa)
+ YYSTACK_FREE (yyss1);
+ }
+# endif
+#endif /* no yyoverflow */
+
+ yyssp = yyss + yysize - 1;
+ yyvsp = yyvs + yysize - 1;
+
+ YYDPRINTF ((stderr, "Stack size increased to %lu\n",
+ (unsigned long int) yystacksize));
+
+ if (yyss + yystacksize - 1 <= yyssp)
+ YYABORT;
}
- else
+
+ YYDPRINTF ((stderr, "Entering state %d\n", yystate));
+
+ if (yystate == YYFINAL)
+ YYACCEPT;
+
+ goto yybackup;
+
+/*-----------.
+| yybackup. |
+`-----------*/
+yybackup:
+
+ /* Do appropriate processing given the current state. Read a
+ lookahead token if we need one and don't already have one. */
+
+ /* First try to decide what to do without reference to lookahead token. */
+ yyn = yypact[yystate];
+ if (yypact_value_is_default (yyn))
+ goto yydefault;
+
+ /* Not known => get a lookahead token if don't already have one. */
+
+ /* YYCHAR is either YYEMPTY or YYEOF or a valid lookahead symbol. */
+ if (yychar == YYEMPTY)
{
- if (yychar == 0) goto yyabort;
-#if YYDEBUG
- if (yydebug)
- {
- yys = 0;
- if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
- if (!yys) yys = "illegal-symbol";
- printf("%sdebug: state %d, error recovery discards token %d (%s)\n",
- YYPREFIX, yystate, yychar, yys);
- }
-#endif
- yychar = (-1);
- goto yyloop;
+ YYDPRINTF ((stderr, "Reading a token: "));
+ yychar = YYLEX;
+ }
+
+ if (yychar <= YYEOF)
+ {
+ yychar = yytoken = YYEOF;
+ YYDPRINTF ((stderr, "Now at end of input.\n"));
+ }
+ else
+ {
+ yytoken = YYTRANSLATE (yychar);
+ YY_SYMBOL_PRINT ("Next token is", yytoken, &yylval, &yylloc);
+ }
+
+ /* If the proper action on seeing token YYTOKEN is to reduce or to
+ detect an error, take that action. */
+ yyn += yytoken;
+ if (yyn < 0 || YYLAST < yyn || yycheck[yyn] != yytoken)
+ goto yydefault;
+ yyn = yytable[yyn];
+ if (yyn <= 0)
+ {
+ if (yytable_value_is_error (yyn))
+ goto yyerrlab;
+ yyn = -yyn;
+ goto yyreduce;
}
+
+ /* Count tokens shifted since error; after three, turn off error
+ status. */
+ if (yyerrstatus)
+ yyerrstatus--;
+
+ /* Shift the lookahead token. */
+ YY_SYMBOL_PRINT ("Shifting", yytoken, &yylval, &yylloc);
+
+ /* Discard the shifted token. */
+ yychar = YYEMPTY;
+
+ yystate = yyn;
+ YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+ *++yyvsp = yylval;
+ YY_IGNORE_MAYBE_UNINITIALIZED_END
+
+ goto yynewstate;
+
+
+/*-----------------------------------------------------------.
+| yydefault -- do the default action for the current state. |
+`-----------------------------------------------------------*/
+yydefault:
+ yyn = yydefact[yystate];
+ if (yyn == 0)
+ goto yyerrlab;
+ goto yyreduce;
+
+
+/*-----------------------------.
+| yyreduce -- Do a reduction. |
+`-----------------------------*/
yyreduce:
-#if YYDEBUG
- if (yydebug)
- printf("%sdebug: state %d, reducing by rule %d (%s)\n",
- YYPREFIX, yystate, yyn, yyrule[yyn]);
-#endif
- yym = yylen[yyn];
- yyval = yyvsp[1-yym];
- switch (yyn)
+ /* yyn is the number of a rule to reduce with. */
+ yylen = yyr2[yyn];
+
+ /* If YYLEN is nonzero, implement the default value of the action:
+ `$$ = $1'.
+
+ Otherwise, the following line sets YYVAL to garbage.
+ This behavior is undocumented and Bison
+ users should not rely upon it. Assigning to YYVAL
+ unconditionally makes the parser a bit smaller, and it avoids a
+ GCC warning that YYVAL may be used uninitialized. */
+ yyval = yyvsp[1-yylen];
+
+
+ YY_REDUCE_PRINT (yyn);
+ switch (yyn)
{
-case 1:
+ case 2:
+/* Line 1807 of yacc.c */
#line 100 "H5LTparse.y"
-{ memset(arr_stack, 0, STACK_SIZE*sizeof(struct arr_info)); /*initialize here?*/ }
-break;
-case 2:
+ { memset(arr_stack, 0, STACK_SIZE*sizeof(struct arr_info)); /*initialize here?*/ }
+ break;
+
+ case 3:
+/* Line 1807 of yacc.c */
#line 101 "H5LTparse.y"
-{ return yyval.ival;}
-break;
-case 12:
+ { return (yyval.ival);}
+ break;
+
+ case 13:
+/* Line 1807 of yacc.c */
#line 115 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_STD_I8BE); }
-break;
-case 13:
+ { (yyval.ival) = H5Tcopy(H5T_STD_I8BE); }
+ break;
+
+ case 14:
+/* Line 1807 of yacc.c */
#line 116 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_STD_I8LE); }
-break;
-case 14:
+ { (yyval.ival) = H5Tcopy(H5T_STD_I8LE); }
+ break;
+
+ case 15:
+/* Line 1807 of yacc.c */
#line 117 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_STD_I16BE); }
-break;
-case 15:
+ { (yyval.ival) = H5Tcopy(H5T_STD_I16BE); }
+ break;
+
+ case 16:
+/* Line 1807 of yacc.c */
#line 118 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_STD_I16LE); }
-break;
-case 16:
+ { (yyval.ival) = H5Tcopy(H5T_STD_I16LE); }
+ break;
+
+ case 17:
+/* Line 1807 of yacc.c */
#line 119 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_STD_I32BE); }
-break;
-case 17:
+ { (yyval.ival) = H5Tcopy(H5T_STD_I32BE); }
+ break;
+
+ case 18:
+/* Line 1807 of yacc.c */
#line 120 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_STD_I32LE); }
-break;
-case 18:
+ { (yyval.ival) = H5Tcopy(H5T_STD_I32LE); }
+ break;
+
+ case 19:
+/* Line 1807 of yacc.c */
#line 121 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_STD_I64BE); }
-break;
-case 19:
+ { (yyval.ival) = H5Tcopy(H5T_STD_I64BE); }
+ break;
+
+ case 20:
+/* Line 1807 of yacc.c */
#line 122 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_STD_I64LE); }
-break;
-case 20:
+ { (yyval.ival) = H5Tcopy(H5T_STD_I64LE); }
+ break;
+
+ case 21:
+/* Line 1807 of yacc.c */
#line 123 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_STD_U8BE); }
-break;
-case 21:
+ { (yyval.ival) = H5Tcopy(H5T_STD_U8BE); }
+ break;
+
+ case 22:
+/* Line 1807 of yacc.c */
#line 124 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_STD_U8LE); }
-break;
-case 22:
+ { (yyval.ival) = H5Tcopy(H5T_STD_U8LE); }
+ break;
+
+ case 23:
+/* Line 1807 of yacc.c */
#line 125 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_STD_U16BE); }
-break;
-case 23:
+ { (yyval.ival) = H5Tcopy(H5T_STD_U16BE); }
+ break;
+
+ case 24:
+/* Line 1807 of yacc.c */
#line 126 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_STD_U16LE); }
-break;
-case 24:
+ { (yyval.ival) = H5Tcopy(H5T_STD_U16LE); }
+ break;
+
+ case 25:
+/* Line 1807 of yacc.c */
#line 127 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_STD_U32BE); }
-break;
-case 25:
+ { (yyval.ival) = H5Tcopy(H5T_STD_U32BE); }
+ break;
+
+ case 26:
+/* Line 1807 of yacc.c */
#line 128 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_STD_U32LE); }
-break;
-case 26:
+ { (yyval.ival) = H5Tcopy(H5T_STD_U32LE); }
+ break;
+
+ case 27:
+/* Line 1807 of yacc.c */
#line 129 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_STD_U64BE); }
-break;
-case 27:
+ { (yyval.ival) = H5Tcopy(H5T_STD_U64BE); }
+ break;
+
+ case 28:
+/* Line 1807 of yacc.c */
#line 130 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_STD_U64LE); }
-break;
-case 28:
+ { (yyval.ival) = H5Tcopy(H5T_STD_U64LE); }
+ break;
+
+ case 29:
+/* Line 1807 of yacc.c */
#line 131 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_NATIVE_CHAR); }
-break;
-case 29:
+ { (yyval.ival) = H5Tcopy(H5T_NATIVE_CHAR); }
+ break;
+
+ case 30:
+/* Line 1807 of yacc.c */
#line 132 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_NATIVE_SCHAR); }
-break;
-case 30:
+ { (yyval.ival) = H5Tcopy(H5T_NATIVE_SCHAR); }
+ break;
+
+ case 31:
+/* Line 1807 of yacc.c */
#line 133 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_NATIVE_UCHAR); }
-break;
-case 31:
+ { (yyval.ival) = H5Tcopy(H5T_NATIVE_UCHAR); }
+ break;
+
+ case 32:
+/* Line 1807 of yacc.c */
#line 134 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_NATIVE_SHORT); }
-break;
-case 32:
+ { (yyval.ival) = H5Tcopy(H5T_NATIVE_SHORT); }
+ break;
+
+ case 33:
+/* Line 1807 of yacc.c */
#line 135 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_NATIVE_USHORT); }
-break;
-case 33:
+ { (yyval.ival) = H5Tcopy(H5T_NATIVE_USHORT); }
+ break;
+
+ case 34:
+/* Line 1807 of yacc.c */
#line 136 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_NATIVE_INT); }
-break;
-case 34:
+ { (yyval.ival) = H5Tcopy(H5T_NATIVE_INT); }
+ break;
+
+ case 35:
+/* Line 1807 of yacc.c */
#line 137 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_NATIVE_UINT); }
-break;
-case 35:
+ { (yyval.ival) = H5Tcopy(H5T_NATIVE_UINT); }
+ break;
+
+ case 36:
+/* Line 1807 of yacc.c */
#line 138 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_NATIVE_LONG); }
-break;
-case 36:
+ { (yyval.ival) = H5Tcopy(H5T_NATIVE_LONG); }
+ break;
+
+ case 37:
+/* Line 1807 of yacc.c */
#line 139 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_NATIVE_ULONG); }
-break;
-case 37:
+ { (yyval.ival) = H5Tcopy(H5T_NATIVE_ULONG); }
+ break;
+
+ case 38:
+/* Line 1807 of yacc.c */
#line 140 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_NATIVE_LLONG); }
-break;
-case 38:
+ { (yyval.ival) = H5Tcopy(H5T_NATIVE_LLONG); }
+ break;
+
+ case 39:
+/* Line 1807 of yacc.c */
#line 141 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_NATIVE_ULLONG); }
-break;
-case 39:
+ { (yyval.ival) = H5Tcopy(H5T_NATIVE_ULLONG); }
+ break;
+
+ case 40:
+/* Line 1807 of yacc.c */
#line 144 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_IEEE_F32BE); }
-break;
-case 40:
+ { (yyval.ival) = H5Tcopy(H5T_IEEE_F32BE); }
+ break;
+
+ case 41:
+/* Line 1807 of yacc.c */
#line 145 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_IEEE_F32LE); }
-break;
-case 41:
+ { (yyval.ival) = H5Tcopy(H5T_IEEE_F32LE); }
+ break;
+
+ case 42:
+/* Line 1807 of yacc.c */
#line 146 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_IEEE_F64BE); }
-break;
-case 42:
+ { (yyval.ival) = H5Tcopy(H5T_IEEE_F64BE); }
+ break;
+
+ case 43:
+/* Line 1807 of yacc.c */
#line 147 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_IEEE_F64LE); }
-break;
-case 43:
+ { (yyval.ival) = H5Tcopy(H5T_IEEE_F64LE); }
+ break;
+
+ case 44:
+/* Line 1807 of yacc.c */
#line 148 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_NATIVE_FLOAT); }
-break;
-case 44:
+ { (yyval.ival) = H5Tcopy(H5T_NATIVE_FLOAT); }
+ break;
+
+ case 45:
+/* Line 1807 of yacc.c */
#line 149 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_NATIVE_DOUBLE); }
-break;
-case 45:
+ { (yyval.ival) = H5Tcopy(H5T_NATIVE_DOUBLE); }
+ break;
+
+ case 46:
+/* Line 1807 of yacc.c */
#line 150 "H5LTparse.y"
-{ yyval.ival = H5Tcopy(H5T_NATIVE_LDOUBLE); }
-break;
-case 46:
+ { (yyval.ival) = H5Tcopy(H5T_NATIVE_LDOUBLE); }
+ break;
+
+ case 47:
+/* Line 1807 of yacc.c */
#line 154 "H5LTparse.y"
-{ csindex++; cmpd_stack[csindex].id = H5Tcreate(H5T_COMPOUND, 1); /*temporarily set size to 1*/ }
-break;
-case 47:
+ { csindex++; cmpd_stack[csindex].id = H5Tcreate(H5T_COMPOUND, 1); /*temporarily set size to 1*/ }
+ break;
+
+ case 48:
+/* Line 1807 of yacc.c */
#line 156 "H5LTparse.y"
-{ yyval.ival = cmpd_stack[csindex].id;
+ { (yyval.ival) = cmpd_stack[csindex].id;
cmpd_stack[csindex].id = 0;
- cmpd_stack[csindex].first_memb = 1;
+ cmpd_stack[csindex].first_memb = 1;
csindex--;
}
-break;
-case 50:
+ break;
+
+ case 51:
+/* Line 1807 of yacc.c */
#line 165 "H5LTparse.y"
-{ cmpd_stack[csindex].is_field = 1; /*notify lexer a compound member is parsed*/ }
-break;
-case 51:
+ { cmpd_stack[csindex].is_field = 1; /*notify lexer a compound member is parsed*/ }
+ break;
+
+ case 52:
+/* Line 1807 of yacc.c */
#line 167 "H5LTparse.y"
-{
+ {
size_t origin_size, new_size;
hid_t dtype_id = cmpd_stack[csindex].id;
/*Adjust size and insert member, consider both member size and offset.*/
if(cmpd_stack[csindex].first_memb) { /*reclaim the size 1 temporarily set*/
- new_size = H5Tget_size(yyvsp[-6].ival) + yyvsp[-1].ival;
+ new_size = H5Tget_size((yyvsp[(1) - (7)].ival)) + (yyvsp[(6) - (7)].ival);
H5Tset_size(dtype_id, new_size);
/*member name is saved in yylval.sval by lexer*/
- H5Tinsert(dtype_id, yyvsp[-3].sval, yyvsp[-1].ival, yyvsp[-6].ival);
+ H5Tinsert(dtype_id, (yyvsp[(4) - (7)].sval), (yyvsp[(6) - (7)].ival), (yyvsp[(1) - (7)].ival));
cmpd_stack[csindex].first_memb = 0;
} else {
origin_size = H5Tget_size(dtype_id);
-
- if(yyvsp[-1].ival == 0) {
- new_size = origin_size + H5Tget_size(yyvsp[-6].ival);
+
+ if((yyvsp[(6) - (7)].ival) == 0) {
+ new_size = origin_size + H5Tget_size((yyvsp[(1) - (7)].ival));
H5Tset_size(dtype_id, new_size);
- H5Tinsert(dtype_id, yyvsp[-3].sval, origin_size, yyvsp[-6].ival);
+ H5Tinsert(dtype_id, (yyvsp[(4) - (7)].sval), origin_size, (yyvsp[(1) - (7)].ival));
} else {
- new_size = yyvsp[-1].ival + H5Tget_size(yyvsp[-6].ival);
+ new_size = (yyvsp[(6) - (7)].ival) + H5Tget_size((yyvsp[(1) - (7)].ival));
H5Tset_size(dtype_id, new_size);
- H5Tinsert(dtype_id, yyvsp[-3].sval, yyvsp[-1].ival, yyvsp[-6].ival);
+ H5Tinsert(dtype_id, (yyvsp[(4) - (7)].sval), (yyvsp[(6) - (7)].ival), (yyvsp[(1) - (7)].ival));
}
}
-
+
cmpd_stack[csindex].is_field = 0;
- H5Tclose(yyvsp[-6].ival);
-
+ H5Tclose((yyvsp[(1) - (7)].ival));
+
new_size = H5Tget_size(dtype_id);
}
-break;
-case 52:
+ break;
+
+ case 53:
+/* Line 1807 of yacc.c */
#line 200 "H5LTparse.y"
-{
- yyval.sval = yylval.sval;
+ {
+ (yyval.sval) = yylval.sval;
}
-break;
-case 53:
+ break;
+
+ case 54:
+/* Line 1807 of yacc.c */
#line 205 "H5LTparse.y"
-{ yyval.ival = 0; }
-break;
-case 54:
+ { (yyval.ival) = 0; }
+ break;
+
+ case 55:
+/* Line 1807 of yacc.c */
#line 207 "H5LTparse.y"
-{ yyval.ival = yylval.ival; }
-break;
-case 56:
+ { (yyval.ival) = yylval.ival; }
+ break;
+
+ case 57:
+/* Line 1807 of yacc.c */
#line 211 "H5LTparse.y"
-{ asindex++; /*pushd onto the stack*/ }
-break;
-case 57:
+ { asindex++; /*pushd onto the stack*/ }
+ break;
+
+ case 58:
+/* Line 1807 of yacc.c */
#line 213 "H5LTparse.y"
-{
- yyval.ival = H5Tarray_create2(yyvsp[-1].ival, arr_stack[asindex].ndims, arr_stack[asindex].dims);
+ {
+ (yyval.ival) = H5Tarray_create2((yyvsp[(5) - (6)].ival), arr_stack[asindex].ndims, arr_stack[asindex].dims);
arr_stack[asindex].ndims = 0;
asindex--;
- H5Tclose(yyvsp[-1].ival);
+ H5Tclose((yyvsp[(5) - (6)].ival));
}
-break;
-case 60:
+ break;
+
+ case 61:
+/* Line 1807 of yacc.c */
#line 223 "H5LTparse.y"
-{ arr_stack[asindex].is_dim = 1; /*notice lexer of dimension size*/ }
-break;
-case 61:
+ { arr_stack[asindex].is_dim = 1; /*notice lexer of dimension size*/ }
+ break;
+
+ case 62:
+/* Line 1807 of yacc.c */
#line 224 "H5LTparse.y"
-{ unsigned ndims = arr_stack[asindex].ndims;
- arr_stack[asindex].dims[ndims] = (hsize_t)yylval.ival;
+ { unsigned ndims = arr_stack[asindex].ndims;
+ arr_stack[asindex].dims[ndims] = (hsize_t)yylval.ival;
arr_stack[asindex].ndims++;
- arr_stack[asindex].is_dim = 0;
+ arr_stack[asindex].is_dim = 0;
}
-break;
-case 64:
+ break;
+
+ case 65:
+/* Line 1807 of yacc.c */
#line 235 "H5LTparse.y"
-{ yyval.ival = H5Tvlen_create(yyvsp[-1].ival); H5Tclose(yyvsp[-1].ival); }
-break;
-case 65:
+ { (yyval.ival) = H5Tvlen_create((yyvsp[(3) - (4)].ival)); H5Tclose((yyvsp[(3) - (4)].ival)); }
+ break;
+
+ case 66:
+/* Line 1807 of yacc.c */
#line 240 "H5LTparse.y"
-{ is_opq_size = 1; }
-break;
-case 66:
+ { is_opq_size = 1; }
+ break;
+
+ case 67:
+/* Line 1807 of yacc.c */
#line 241 "H5LTparse.y"
-{
+ {
size_t size = (size_t)yylval.ival;
- yyval.ival = H5Tcreate(H5T_OPAQUE, size);
- is_opq_size = 0;
+ (yyval.ival) = H5Tcreate(H5T_OPAQUE, size);
+ is_opq_size = 0;
}
-break;
-case 67:
+ break;
+
+ case 68:
+/* Line 1807 of yacc.c */
#line 246 "H5LTparse.y"
-{ is_opq_tag = 1; }
-break;
-case 68:
+ { is_opq_tag = 1; }
+ break;
+
+ case 69:
+/* Line 1807 of yacc.c */
#line 247 "H5LTparse.y"
-{
- H5Tset_tag(yyvsp[-6].ival, yylval.sval);
+ {
+ H5Tset_tag((yyvsp[(7) - (13)].ival), yylval.sval);
is_opq_tag = 0;
}
-break;
-case 69:
+ break;
+
+ case 70:
+/* Line 1807 of yacc.c */
#line 251 "H5LTparse.y"
-{ yyval.ival = yyvsp[-8].ival; }
-break;
-case 72:
+ { (yyval.ival) = (yyvsp[(7) - (15)].ival); }
+ break;
+
+ case 73:
+/* Line 1807 of yacc.c */
#line 259 "H5LTparse.y"
-{ is_str_size = 1; }
-break;
-case 73:
+ { is_str_size = 1; }
+ break;
+
+ case 74:
+/* Line 1807 of yacc.c */
#line 260 "H5LTparse.y"
-{
- if(yyvsp[-1].ival == H5T_VARIABLE_TOKEN)
+ {
+ if((yyvsp[(5) - (6)].ival) == H5T_VARIABLE_TOKEN)
is_variable = 1;
- else
+ else
str_size = yylval.ival;
- is_str_size = 0;
+ is_str_size = 0;
}
-break;
-case 74:
+ break;
+
+ case 75:
+/* Line 1807 of yacc.c */
#line 268 "H5LTparse.y"
-{
- if(yyvsp[-1].ival == H5T_STR_NULLTERM_TOKEN)
+ {
+ if((yyvsp[(9) - (10)].ival) == H5T_STR_NULLTERM_TOKEN)
str_pad = H5T_STR_NULLTERM;
- else if(yyvsp[-1].ival == H5T_STR_NULLPAD_TOKEN)
+ else if((yyvsp[(9) - (10)].ival) == H5T_STR_NULLPAD_TOKEN)
str_pad = H5T_STR_NULLPAD;
- else if(yyvsp[-1].ival == H5T_STR_SPACEPAD_TOKEN)
+ else if((yyvsp[(9) - (10)].ival) == H5T_STR_SPACEPAD_TOKEN)
str_pad = H5T_STR_SPACEPAD;
}
-break;
-case 75:
+ break;
+
+ case 76:
+/* Line 1807 of yacc.c */
#line 277 "H5LTparse.y"
-{
- if(yyvsp[-1].ival == H5T_CSET_ASCII_TOKEN)
+ {
+ if((yyvsp[(13) - (14)].ival) == H5T_CSET_ASCII_TOKEN)
str_cset = H5T_CSET_ASCII;
- else if(yyvsp[-1].ival == H5T_CSET_UTF8_TOKEN)
+ else if((yyvsp[(13) - (14)].ival) == H5T_CSET_UTF8_TOKEN)
str_cset = H5T_CSET_UTF8;
}
-break;
-case 76:
+ break;
+
+ case 77:
+/* Line 1807 of yacc.c */
#line 284 "H5LTparse.y"
-{
- if(yyvsp[-1].ival == H5T_C_S1_TOKEN)
- yyval.ival = H5Tcopy(H5T_C_S1);
- else if(yyvsp[-1].ival == H5T_FORTRAN_S1_TOKEN)
- yyval.ival = H5Tcopy(H5T_FORTRAN_S1);
+ {
+ if((yyvsp[(17) - (18)].ival) == H5T_C_S1_TOKEN)
+ (yyval.ival) = H5Tcopy(H5T_C_S1);
+ else if((yyvsp[(17) - (18)].ival) == H5T_FORTRAN_S1_TOKEN)
+ (yyval.ival) = H5Tcopy(H5T_FORTRAN_S1);
}
-break;
-case 77:
+ break;
+
+ case 78:
+/* Line 1807 of yacc.c */
#line 291 "H5LTparse.y"
-{
- hid_t str_id = yyvsp[-1].ival;
+ {
+ hid_t str_id = (yyvsp[(19) - (20)].ival);
/*set string size*/
if(is_variable) {
@@ -990,57 +2055,79 @@ case 77:
is_variable = 0;
} else
H5Tset_size(str_id, str_size);
-
+
/*set string padding and character set*/
H5Tset_strpad(str_id, str_pad);
H5Tset_cset(str_id, str_cset);
- yyval.ival = str_id;
+ (yyval.ival) = str_id;
}
-break;
-case 78:
+ break;
+
+ case 79:
+/* Line 1807 of yacc.c */
#line 308 "H5LTparse.y"
-{yyval.ival = H5T_VARIABLE_TOKEN;}
-break;
-case 80:
+ {(yyval.ival) = H5T_VARIABLE_TOKEN;}
+ break;
+
+ case 81:
+/* Line 1807 of yacc.c */
#line 311 "H5LTparse.y"
-{yyval.ival = H5T_STR_NULLTERM_TOKEN;}
-break;
-case 81:
+ {(yyval.ival) = H5T_STR_NULLTERM_TOKEN;}
+ break;
+
+ case 82:
+/* Line 1807 of yacc.c */
#line 312 "H5LTparse.y"
-{yyval.ival = H5T_STR_NULLPAD_TOKEN;}
-break;
-case 82:
+ {(yyval.ival) = H5T_STR_NULLPAD_TOKEN;}
+ break;
+
+ case 83:
+/* Line 1807 of yacc.c */
#line 313 "H5LTparse.y"
-{yyval.ival = H5T_STR_SPACEPAD_TOKEN;}
-break;
-case 83:
+ {(yyval.ival) = H5T_STR_SPACEPAD_TOKEN;}
+ break;
+
+ case 84:
+/* Line 1807 of yacc.c */
#line 315 "H5LTparse.y"
-{yyval.ival = H5T_CSET_ASCII_TOKEN;}
-break;
-case 84:
+ {(yyval.ival) = H5T_CSET_ASCII_TOKEN;}
+ break;
+
+ case 85:
+/* Line 1807 of yacc.c */
#line 316 "H5LTparse.y"
-{yyval.ival = H5T_CSET_UTF8_TOKEN;}
-break;
-case 85:
+ {(yyval.ival) = H5T_CSET_UTF8_TOKEN;}
+ break;
+
+ case 86:
+/* Line 1807 of yacc.c */
#line 318 "H5LTparse.y"
-{yyval.ival = H5T_C_S1_TOKEN;}
-break;
-case 86:
+ {(yyval.ival) = H5T_C_S1_TOKEN;}
+ break;
+
+ case 87:
+/* Line 1807 of yacc.c */
#line 319 "H5LTparse.y"
-{yyval.ival = H5T_FORTRAN_S1_TOKEN;}
-break;
-case 87:
+ {(yyval.ival) = H5T_FORTRAN_S1_TOKEN;}
+ break;
+
+ case 88:
+/* Line 1807 of yacc.c */
#line 323 "H5LTparse.y"
-{ is_enum = 1; enum_id = H5Tenum_create(yyvsp[-1].ival); H5Tclose(yyvsp[-1].ival); }
-break;
-case 88:
+ { is_enum = 1; enum_id = H5Tenum_create((yyvsp[(3) - (4)].ival)); H5Tclose((yyvsp[(3) - (4)].ival)); }
+ break;
+
+ case 89:
+/* Line 1807 of yacc.c */
#line 325 "H5LTparse.y"
-{ is_enum = 0; /*reset*/ yyval.ival = enum_id; }
-break;
-case 91:
+ { is_enum = 0; /*reset*/ (yyval.ival) = enum_id; }
+ break;
+
+ case 92:
+/* Line 1807 of yacc.c */
#line 330 "H5LTparse.y"
-{
+ {
is_enum_memb = 1; /*indicate member of enum*/
#ifdef H5_HAVE_WIN32_API
enum_memb_symbol = _strdup(yylval.sval);
@@ -1048,10 +2135,12 @@ case 91:
enum_memb_symbol = strdup(yylval.sval);
#endif /* H5_HAVE_WIN32_API */
}
-break;
-case 92:
+ break;
+
+ case 93:
+/* Line 1807 of yacc.c */
#line 339 "H5LTparse.y"
-{
+ {
char char_val=(char)yylval.ival;
short short_val=(short)yylval.ival;
int int_val=(int)yylval.ival;
@@ -1061,93 +2150,270 @@ case 92:
hid_t native = H5Tget_native_type(super, H5T_DIR_ASCEND);
H5T_order_t super_order = H5Tget_order(super);
H5T_order_t native_order = H5Tget_order(native);
-
+
if(is_enum && is_enum_memb) { /*if it's an enum member*/
/*To handle machines of different endianness*/
if(H5Tequal(native, H5T_NATIVE_SCHAR) || H5Tequal(native, H5T_NATIVE_UCHAR)) {
if(super_order != native_order)
- H5Tconvert(native, super, 1, &char_val, NULL, H5P_DEFAULT);
+ H5Tconvert(native, super, 1, &char_val, NULL, H5P_DEFAULT);
H5Tenum_insert(enum_id, enum_memb_symbol, &char_val);
} else if(H5Tequal(native, H5T_NATIVE_SHORT) || H5Tequal(native, H5T_NATIVE_USHORT)) {
if(super_order != native_order)
- H5Tconvert(native, super, 1, &short_val, NULL, H5P_DEFAULT);
+ H5Tconvert(native, super, 1, &short_val, NULL, H5P_DEFAULT);
H5Tenum_insert(enum_id, enum_memb_symbol, &short_val);
} else if(H5Tequal(native, H5T_NATIVE_INT) || H5Tequal(native, H5T_NATIVE_UINT)) {
if(super_order != native_order)
- H5Tconvert(native, super, 1, &int_val, NULL, H5P_DEFAULT);
+ H5Tconvert(native, super, 1, &int_val, NULL, H5P_DEFAULT);
H5Tenum_insert(enum_id, enum_memb_symbol, &int_val);
} else if(H5Tequal(native, H5T_NATIVE_LONG) || H5Tequal(native, H5T_NATIVE_ULONG)) {
if(super_order != native_order)
- H5Tconvert(native, super, 1, &long_val, NULL, H5P_DEFAULT);
+ H5Tconvert(native, super, 1, &long_val, NULL, H5P_DEFAULT);
H5Tenum_insert(enum_id, enum_memb_symbol, &long_val);
} else if(H5Tequal(native, H5T_NATIVE_LLONG) || H5Tequal(native, H5T_NATIVE_ULLONG)) {
if(super_order != native_order)
- H5Tconvert(native, super, 1, &llong_val, NULL, H5P_DEFAULT);
+ H5Tconvert(native, super, 1, &llong_val, NULL, H5P_DEFAULT);
H5Tenum_insert(enum_id, enum_memb_symbol, &llong_val);
}
- is_enum_memb = 0;
+ is_enum_memb = 0;
if(enum_memb_symbol) free(enum_memb_symbol);
}
H5Tclose(super);
H5Tclose(native);
}
-break;
-#line 1098 "H5LTparse.c"
+ break;
+
+
+/* Line 1807 of yacc.c */
+#line 2190 "H5LTparse.c"
+ default: break;
}
- yyssp -= yym;
- yystate = *yyssp;
- yyvsp -= yym;
- yym = yylhs[yyn];
- if (yystate == 0 && yym == 0)
+ /* User semantic actions sometimes alter yychar, and that requires
+ that yytoken be updated with the new translation. We take the
+ approach of translating immediately before every use of yytoken.
+ One alternative is translating here after every semantic action,
+ but that translation would be missed if the semantic action invokes
+ YYABORT, YYACCEPT, or YYERROR immediately after altering yychar or
+ if it invokes YYBACKUP. In the case of YYABORT or YYACCEPT, an
+ incorrect destructor might then be invoked immediately. In the
+ case of YYERROR or YYBACKUP, subsequent parser actions might lead
+ to an incorrect destructor call or verbose syntax error message
+ before the lookahead is translated. */
+ YY_SYMBOL_PRINT ("-> $$ =", yyr1[yyn], &yyval, &yyloc);
+
+ YYPOPSTACK (yylen);
+ yylen = 0;
+ YY_STACK_PRINT (yyss, yyssp);
+
+ *++yyvsp = yyval;
+
+ /* Now `shift' the result of the reduction. Determine what state
+ that goes to, based on the state we popped back to and the rule
+ number reduced by. */
+
+ yyn = yyr1[yyn];
+
+ yystate = yypgoto[yyn - YYNTOKENS] + *yyssp;
+ if (0 <= yystate && yystate <= YYLAST && yycheck[yystate] == *yyssp)
+ yystate = yytable[yystate];
+ else
+ yystate = yydefgoto[yyn - YYNTOKENS];
+
+ goto yynewstate;
+
+
+/*------------------------------------.
+| yyerrlab -- here on detecting error |
+`------------------------------------*/
+yyerrlab:
+ /* Make sure we have latest lookahead translation. See comments at
+ user semantic actions for why this is necessary. */
+ yytoken = yychar == YYEMPTY ? YYEMPTY : YYTRANSLATE (yychar);
+
+ /* If not already recovering from an error, report this error. */
+ if (!yyerrstatus)
{
-#if YYDEBUG
- if (yydebug)
- printf("%sdebug: after reduction, shifting from state 0 to\
- state %d\n", YYPREFIX, YYFINAL);
-#endif
- yystate = YYFINAL;
- *++yyssp = YYFINAL;
- *++yyvsp = yyval;
- if (yychar < 0)
- {
- if ((yychar = yylex()) < 0) yychar = 0;
-#if YYDEBUG
- if (yydebug)
- {
- yys = 0;
- if (yychar <= YYMAXTOKEN) yys = yyname[yychar];
- if (!yys) yys = "illegal-symbol";
- printf("%sdebug: state %d, reading %d (%s)\n",
- YYPREFIX, YYFINAL, yychar, yys);
- }
+ ++yynerrs;
+#if ! YYERROR_VERBOSE
+ yyerror (YY_("syntax error"));
+#else
+# define YYSYNTAX_ERROR yysyntax_error (&yymsg_alloc, &yymsg, \
+ yyssp, yytoken)
+ {
+ char const *yymsgp = YY_("syntax error");
+ int yysyntax_error_status;
+ yysyntax_error_status = YYSYNTAX_ERROR;
+ if (yysyntax_error_status == 0)
+ yymsgp = yymsg;
+ else if (yysyntax_error_status == 1)
+ {
+ if (yymsg != yymsgbuf)
+ YYSTACK_FREE (yymsg);
+ yymsg = (char *) YYSTACK_ALLOC (yymsg_alloc);
+ if (!yymsg)
+ {
+ yymsg = yymsgbuf;
+ yymsg_alloc = sizeof yymsgbuf;
+ yysyntax_error_status = 2;
+ }
+ else
+ {
+ yysyntax_error_status = YYSYNTAX_ERROR;
+ yymsgp = yymsg;
+ }
+ }
+ yyerror (yymsgp);
+ if (yysyntax_error_status == 2)
+ goto yyexhaustedlab;
+ }
+# undef YYSYNTAX_ERROR
#endif
- }
- if (yychar == 0) goto yyaccept;
- goto yyloop;
}
- if ((yyn = yygindex[yym]) && (yyn += yystate) >= 0 &&
- yyn <= YYTABLESIZE && yycheck[yyn] == yystate)
- yystate = yytable[yyn];
- else
- yystate = yydgoto[yym];
-#if YYDEBUG
- if (yydebug)
- printf("%sdebug: after reduction, shifting from state %d \
-to state %d\n", YYPREFIX, *yyssp, yystate);
+
+
+
+ if (yyerrstatus == 3)
+ {
+ /* If just tried and failed to reuse lookahead token after an
+ error, discard it. */
+
+ if (yychar <= YYEOF)
+ {
+ /* Return failure if at end of input. */
+ if (yychar == YYEOF)
+ YYABORT;
+ }
+ else
+ {
+ yydestruct ("Error: discarding",
+ yytoken, &yylval);
+ yychar = YYEMPTY;
+ }
+ }
+
+ /* Else will try to reuse lookahead token after shifting the error
+ token. */
+ goto yyerrlab1;
+
+
+/*---------------------------------------------------.
+| yyerrorlab -- error raised explicitly by YYERROR. |
+`---------------------------------------------------*/
+yyerrorlab:
+
+ /* Pacify compilers like GCC when the user code never invokes
+ YYERROR and the label yyerrorlab therefore never appears in user
+ code. */
+ if (/*CONSTCOND*/ 0)
+ goto yyerrorlab;
+
+ /* Do not reclaim the symbols of the rule which action triggered
+ this YYERROR. */
+ YYPOPSTACK (yylen);
+ yylen = 0;
+ YY_STACK_PRINT (yyss, yyssp);
+ yystate = *yyssp;
+ goto yyerrlab1;
+
+
+/*-------------------------------------------------------------.
+| yyerrlab1 -- common code for both syntax error and YYERROR. |
+`-------------------------------------------------------------*/
+yyerrlab1:
+ yyerrstatus = 3; /* Each real token shifted decrements this. */
+
+ for (;;)
+ {
+ yyn = yypact[yystate];
+ if (!yypact_value_is_default (yyn))
+ {
+ yyn += YYTERROR;
+ if (0 <= yyn && yyn <= YYLAST && yycheck[yyn] == YYTERROR)
+ {
+ yyn = yytable[yyn];
+ if (0 < yyn)
+ break;
+ }
+ }
+
+ /* Pop the current state because it cannot handle the error token. */
+ if (yyssp == yyss)
+ YYABORT;
+
+
+ yydestruct ("Error: popping",
+ yystos[yystate], yyvsp);
+ YYPOPSTACK (1);
+ yystate = *yyssp;
+ YY_STACK_PRINT (yyss, yyssp);
+ }
+
+ YY_IGNORE_MAYBE_UNINITIALIZED_BEGIN
+ *++yyvsp = yylval;
+ YY_IGNORE_MAYBE_UNINITIALIZED_END
+
+
+ /* Shift the error token. */
+ YY_SYMBOL_PRINT ("Shifting", yystos[yyn], yyvsp, yylsp);
+
+ yystate = yyn;
+ goto yynewstate;
+
+
+/*-------------------------------------.
+| yyacceptlab -- YYACCEPT comes here. |
+`-------------------------------------*/
+yyacceptlab:
+ yyresult = 0;
+ goto yyreturn;
+
+/*-----------------------------------.
+| yyabortlab -- YYABORT comes here. |
+`-----------------------------------*/
+yyabortlab:
+ yyresult = 1;
+ goto yyreturn;
+
+#if !defined yyoverflow || YYERROR_VERBOSE
+/*-------------------------------------------------.
+| yyexhaustedlab -- memory exhaustion comes here. |
+`-------------------------------------------------*/
+yyexhaustedlab:
+ yyerror (YY_("memory exhausted"));
+ yyresult = 2;
+ /* Fall through. */
#endif
- if (yyssp >= yysslim && yygrowstack())
+
+yyreturn:
+ if (yychar != YYEMPTY)
+ {
+ /* Make sure we have latest lookahead translation. See comments at
+ user semantic actions for why this is necessary. */
+ yytoken = YYTRANSLATE (yychar);
+ yydestruct ("Cleanup: discarding lookahead",
+ yytoken, &yylval);
+ }
+ /* Do not reclaim the symbols of the rule which action triggered
+ this YYABORT or YYACCEPT. */
+ YYPOPSTACK (yylen);
+ YY_STACK_PRINT (yyss, yyssp);
+ while (yyssp != yyss)
{
- goto yyoverflow;
+ yydestruct ("Cleanup: popping",
+ yystos[*yyssp], yyvsp);
+ YYPOPSTACK (1);
}
- *++yyssp = yystate;
- *++yyvsp = yyval;
- goto yyloop;
-yyoverflow:
- yyerror("yacc stack overflow");
-yyabort:
- return (1);
-yyaccept:
- return (0);
+#ifndef yyoverflow
+ if (yyss != yyssa)
+ YYSTACK_FREE (yyss);
+#endif
+#if YYERROR_VERBOSE
+ if (yymsg != yymsgbuf)
+ YYSTACK_FREE (yymsg);
+#endif
+ /* Make sure YYID is used. */
+ return YYID (yyresult);
}
+
+
diff --git a/hl/src/H5LTparse.h b/hl/src/H5LTparse.h
index 2dd8057..f40c822 100644
--- a/hl/src/H5LTparse.h
+++ b/hl/src/H5LTparse.h
@@ -1,65 +1,143 @@
-#ifndef YYERRCODE
-#define YYERRCODE 256
+/* A Bison parser, made by GNU Bison 2.7. */
+
+/* Bison interface for Yacc-like parsers in C
+
+ Copyright (C) 1984, 1989-1990, 2000-2012 Free Software Foundation, Inc.
+
+ This program is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ This program is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with this program. If not, see <http://www.gnu.org/licenses/>. */
+
+/* As a special exception, you may create a larger work that contains
+ part or all of the Bison parser skeleton and distribute that work
+ under terms of your choice, so long as that work isn't itself a
+ parser generator using the skeleton or a modified version thereof
+ as a parser skeleton. Alternatively, if you modify or redistribute
+ the parser skeleton itself, you may (at your option) remove this
+ special exception, which will cause the skeleton and the resulting
+ Bison output files to be licensed under the GNU General Public
+ License without this special exception.
+
+ This special exception was added by the Free Software Foundation in
+ version 2.2 of Bison. */
+
+#ifndef YY_H5LTYY_H5LTPARSE_H_INCLUDED
+# define YY_H5LTYY_H5LTPARSE_H_INCLUDED
+/* Enabling traces. */
+#ifndef YYDEBUG
+# define YYDEBUG 0
+#endif
+#if YYDEBUG
+extern int H5LTyydebug;
#endif
-#define H5T_STD_I8BE_TOKEN 257
-#define H5T_STD_I8LE_TOKEN 258
-#define H5T_STD_I16BE_TOKEN 259
-#define H5T_STD_I16LE_TOKEN 260
-#define H5T_STD_I32BE_TOKEN 261
-#define H5T_STD_I32LE_TOKEN 262
-#define H5T_STD_I64BE_TOKEN 263
-#define H5T_STD_I64LE_TOKEN 264
-#define H5T_STD_U8BE_TOKEN 265
-#define H5T_STD_U8LE_TOKEN 266
-#define H5T_STD_U16BE_TOKEN 267
-#define H5T_STD_U16LE_TOKEN 268
-#define H5T_STD_U32BE_TOKEN 269
-#define H5T_STD_U32LE_TOKEN 270
-#define H5T_STD_U64BE_TOKEN 271
-#define H5T_STD_U64LE_TOKEN 272
-#define H5T_NATIVE_CHAR_TOKEN 273
-#define H5T_NATIVE_SCHAR_TOKEN 274
-#define H5T_NATIVE_UCHAR_TOKEN 275
-#define H5T_NATIVE_SHORT_TOKEN 276
-#define H5T_NATIVE_USHORT_TOKEN 277
-#define H5T_NATIVE_INT_TOKEN 278
-#define H5T_NATIVE_UINT_TOKEN 279
-#define H5T_NATIVE_LONG_TOKEN 280
-#define H5T_NATIVE_ULONG_TOKEN 281
-#define H5T_NATIVE_LLONG_TOKEN 282
-#define H5T_NATIVE_ULLONG_TOKEN 283
-#define H5T_IEEE_F32BE_TOKEN 284
-#define H5T_IEEE_F32LE_TOKEN 285
-#define H5T_IEEE_F64BE_TOKEN 286
-#define H5T_IEEE_F64LE_TOKEN 287
-#define H5T_NATIVE_FLOAT_TOKEN 288
-#define H5T_NATIVE_DOUBLE_TOKEN 289
-#define H5T_NATIVE_LDOUBLE_TOKEN 290
-#define H5T_STRING_TOKEN 291
-#define STRSIZE_TOKEN 292
-#define STRPAD_TOKEN 293
-#define CSET_TOKEN 294
-#define CTYPE_TOKEN 295
-#define H5T_VARIABLE_TOKEN 296
-#define H5T_STR_NULLTERM_TOKEN 297
-#define H5T_STR_NULLPAD_TOKEN 298
-#define H5T_STR_SPACEPAD_TOKEN 299
-#define H5T_CSET_ASCII_TOKEN 300
-#define H5T_CSET_UTF8_TOKEN 301
-#define H5T_C_S1_TOKEN 302
-#define H5T_FORTRAN_S1_TOKEN 303
-#define H5T_OPAQUE_TOKEN 304
-#define OPQ_SIZE_TOKEN 305
-#define OPQ_TAG_TOKEN 306
-#define H5T_COMPOUND_TOKEN 307
-#define H5T_ENUM_TOKEN 308
-#define H5T_ARRAY_TOKEN 309
-#define H5T_VLEN_TOKEN 310
-#define STRING 311
-#define NUMBER 312
-typedef union {
+/* Tokens. */
+#ifndef YYTOKENTYPE
+# define YYTOKENTYPE
+ /* Put the tokens into the symbol table, so that GDB and other debuggers
+ know about them. */
+ enum yytokentype {
+ H5T_STD_I8BE_TOKEN = 258,
+ H5T_STD_I8LE_TOKEN = 259,
+ H5T_STD_I16BE_TOKEN = 260,
+ H5T_STD_I16LE_TOKEN = 261,
+ H5T_STD_I32BE_TOKEN = 262,
+ H5T_STD_I32LE_TOKEN = 263,
+ H5T_STD_I64BE_TOKEN = 264,
+ H5T_STD_I64LE_TOKEN = 265,
+ H5T_STD_U8BE_TOKEN = 266,
+ H5T_STD_U8LE_TOKEN = 267,
+ H5T_STD_U16BE_TOKEN = 268,
+ H5T_STD_U16LE_TOKEN = 269,
+ H5T_STD_U32BE_TOKEN = 270,
+ H5T_STD_U32LE_TOKEN = 271,
+ H5T_STD_U64BE_TOKEN = 272,
+ H5T_STD_U64LE_TOKEN = 273,
+ H5T_NATIVE_CHAR_TOKEN = 274,
+ H5T_NATIVE_SCHAR_TOKEN = 275,
+ H5T_NATIVE_UCHAR_TOKEN = 276,
+ H5T_NATIVE_SHORT_TOKEN = 277,
+ H5T_NATIVE_USHORT_TOKEN = 278,
+ H5T_NATIVE_INT_TOKEN = 279,
+ H5T_NATIVE_UINT_TOKEN = 280,
+ H5T_NATIVE_LONG_TOKEN = 281,
+ H5T_NATIVE_ULONG_TOKEN = 282,
+ H5T_NATIVE_LLONG_TOKEN = 283,
+ H5T_NATIVE_ULLONG_TOKEN = 284,
+ H5T_IEEE_F32BE_TOKEN = 285,
+ H5T_IEEE_F32LE_TOKEN = 286,
+ H5T_IEEE_F64BE_TOKEN = 287,
+ H5T_IEEE_F64LE_TOKEN = 288,
+ H5T_NATIVE_FLOAT_TOKEN = 289,
+ H5T_NATIVE_DOUBLE_TOKEN = 290,
+ H5T_NATIVE_LDOUBLE_TOKEN = 291,
+ H5T_STRING_TOKEN = 292,
+ STRSIZE_TOKEN = 293,
+ STRPAD_TOKEN = 294,
+ CSET_TOKEN = 295,
+ CTYPE_TOKEN = 296,
+ H5T_VARIABLE_TOKEN = 297,
+ H5T_STR_NULLTERM_TOKEN = 298,
+ H5T_STR_NULLPAD_TOKEN = 299,
+ H5T_STR_SPACEPAD_TOKEN = 300,
+ H5T_CSET_ASCII_TOKEN = 301,
+ H5T_CSET_UTF8_TOKEN = 302,
+ H5T_C_S1_TOKEN = 303,
+ H5T_FORTRAN_S1_TOKEN = 304,
+ H5T_OPAQUE_TOKEN = 305,
+ OPQ_SIZE_TOKEN = 306,
+ OPQ_TAG_TOKEN = 307,
+ H5T_COMPOUND_TOKEN = 308,
+ H5T_ENUM_TOKEN = 309,
+ H5T_ARRAY_TOKEN = 310,
+ H5T_VLEN_TOKEN = 311,
+ STRING = 312,
+ NUMBER = 313
+ };
+#endif
+
+
+#if ! defined YYSTYPE && ! defined YYSTYPE_IS_DECLARED
+typedef union YYSTYPE
+{
+/* Line 2065 of yacc.c */
+#line 68 "H5LTparse.y"
+
int ival; /*for integer token*/
char *sval; /*for name string*/
+
+
+/* Line 2065 of yacc.c */
+#line 121 "H5LTparse.h"
} YYSTYPE;
+# define YYSTYPE_IS_TRIVIAL 1
+# define yystype YYSTYPE /* obsolescent; will be withdrawn */
+# define YYSTYPE_IS_DECLARED 1
+#endif
+
extern YYSTYPE H5LTyylval;
+
+#ifdef YYPARSE_PARAM
+#if defined __STDC__ || defined __cplusplus
+int H5LTyyparse (void *YYPARSE_PARAM);
+#else
+int H5LTyyparse ();
+#endif
+#else /* ! YYPARSE_PARAM */
+#if defined __STDC__ || defined __cplusplus
+int H5LTyyparse (void);
+#else
+int H5LTyyparse ();
+#endif
+#endif /* ! YYPARSE_PARAM */
+
+#endif /* !YY_H5LTYY_H5LTPARSE_H_INCLUDED */
diff --git a/hl/src/Makefile.in b/hl/src/Makefile.in
index 8481d6f..5de2e11 100644
--- a/hl/src/Makefile.in
+++ b/hl/src/Makefile.in
@@ -506,7 +506,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
@@ -670,7 +669,7 @@ CHECK_CLEANFILES = *.chkexe *.chklog *.clog
# Add libtool shared library version numbers to the HDF5 library
# See libtool versioning documentation online.
LT_VERS_INTERFACE = 6
-LT_VERS_REVISION = 174
+LT_VERS_REVISION = 180
LT_VERS_AGE = 0
# This library is our main target.
diff --git a/hl/test/Makefile.in b/hl/test/Makefile.in
index f7a47d0..23bab97 100644
--- a/hl/test/Makefile.in
+++ b/hl/test/Makefile.in
@@ -557,7 +557,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/hl/test/test_ds.c b/hl/test/test_ds.c
index 57a2b89..77d2b71 100644
--- a/hl/test/test_ds.c
+++ b/hl/test/test_ds.c
@@ -29,8 +29,8 @@ static herr_t op_continue(hid_t did, unsigned dim, hid_t dsid, void *visitor_dat
static herr_t op_stop(hid_t did, unsigned dim, hid_t dsid, void *visitor_data);
/* prototypes */
-static int create_test_file(const char *fileext);
-static int open_test_file(const char *fileext);
+static hid_t create_test_file(const char *fileext);
+static hid_t open_test_file(const char *fileext);
herr_t create_char_dataset(hid_t fid, const char *dsidx, int fulldims);
herr_t create_short_dataset(hid_t fid, const char *dsidx, int fulldims);
herr_t create_int_dataset(hid_t fid, const char *dsidx, int fulldims);
diff --git a/hl/tools/Makefile.in b/hl/tools/Makefile.in
index 6fa815a..c9d408a 100644
--- a/hl/tools/Makefile.in
+++ b/hl/tools/Makefile.in
@@ -505,7 +505,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/hl/tools/gif2h5/Makefile.in b/hl/tools/gif2h5/Makefile.in
index 0652ddb..1c9be68 100644
--- a/hl/tools/gif2h5/Makefile.in
+++ b/hl/tools/gif2h5/Makefile.in
@@ -519,7 +519,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/hl/tools/h5watch/Makefile.in b/hl/tools/h5watch/Makefile.in
index 499804e..6eeb902 100644
--- a/hl/tools/h5watch/Makefile.in
+++ b/hl/tools/h5watch/Makefile.in
@@ -516,7 +516,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/perform/CMakeTests.cmake b/perform/CMakeTests.cmake
index f8a5846..74055d5 100644
--- a/perform/CMakeTests.cmake
+++ b/perform/CMakeTests.cmake
@@ -32,6 +32,7 @@ add_test (
)
add_test (NAME PERFORM_h5perf_serial COMMAND $<TARGET_FILE:h5perf_serial>)
+set_tests_properties (PERFORM_h5perf_serial PROPERTIES TIMEOUT 1800)
if (HDF5_BUILD_PERFORM_STANDALONE)
add_test (NAME PERFORM_h5perf_serial_alone COMMAND $<TARGET_FILE:h5perf_serial_alone>)
diff --git a/perform/Makefile.in b/perform/Makefile.in
index 8698c46..8db63de 100644
--- a/perform/Makefile.in
+++ b/perform/Makefile.in
@@ -546,7 +546,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/release_docs/RELEASE.txt b/release_docs/RELEASE.txt
index 24c3f11..c7ef59c 100644
--- a/release_docs/RELEASE.txt
+++ b/release_docs/RELEASE.txt
@@ -1,4 +1,4 @@
-HDF5 version 1.9.184-swmr0 currently under development
+HDF5 version 1.9.190-swmr0 currently under development
INTRODUCTION
diff --git a/src/H5AC.c b/src/H5AC.c
index 7a5bf60..9dfe581 100644
--- a/src/H5AC.c
+++ b/src/H5AC.c
@@ -2616,6 +2616,137 @@ done:
/*************************************************************************/
+/*************************** Debugging Functions: ************************/
+/*************************************************************************/
+
+/*-------------------------------------------------------------------------
+ *
+ * Function: H5AC_get_entry_ptr_from_addr()
+ *
+ * Purpose: Debugging function that attempts to look up an entry in the
+ * cache by its file address, and if found, returns a pointer
+ * to the entry in *entry_ptr_ptr. If the entry is not in the
+ * cache, *entry_ptr_ptr is set to NULL.
+ *
+ * WARNING: This call should be used only in debugging
+ * routines, and it should be avoided when
+ * possible.
+ *
+ * Further, if we ever multi-thread the cache,
+ * this routine will have to be either discarded
+ * or heavily re-worked.
+ *
+ * Finally, keep in mind that the entry whose
+ * pointer is obtained in this fashion may not
+ * be in a stable state.
+ *
+ * Note that this function is only defined if NDEBUG
+ * is not defined.
+ *
+ * As heavy use of this function is almost certainly a
+ * bad idea, the metadata cache tracks the number of
+ * successful calls to this function, and (if
+ * H5C_DO_SANITY_CHECKS is defined) displays any
+ * non-zero count on cache shutdown.
+ *
+ * This function is just a wrapper that calls the H5C
+ * version of the function.
+ *
+ * Return: FAIL if error is detected, SUCCEED otherwise.
+ *
+ * Programmer: John Mainzer, 5/30/14
+ *
+ * Changes:
+ *
+ * None.
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef NDEBUG
+herr_t
+H5AC_get_entry_ptr_from_addr(const H5F_t *f,
+ haddr_t addr,
+ void ** entry_ptr_ptr)
+{
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI(FAIL)
+
+ if ( H5C_get_entry_ptr_from_addr(f, addr, entry_ptr_ptr) < 0 )
+
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
+ "H5C_get_entry_ptr_from_addr() failed.")
+
+done:
+
+ FUNC_LEAVE_NOAPI(ret_value)
+
+} /* H5AC_get_entry_ptr_from_addr() */
+
+#endif /* NDEBUG */
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Function: H5AC_verify_entry_type()
+ *
+ * Purpose: Debugging function that attempts to look up an entry in the
+ * cache by its file address, and if found, test to see if its
+ * type field contains the expected value.
+ *
+ * If the specified entry is in cache, *in_cache_ptr is set
+ * to TRUE, and *type_ok_ptr is set to TRUE or FALSE
+ * depending on whether the entries type field matches the
+ * expected_type parameter
+ *
+ * If the target entry is not in cache, *in_cache_ptr is
+ * set to FALSE, and *type_ok_ptr is undefined.
+ *
+ * Note that this function is only defined if NDEBUG
+ * is not defined.
+ *
+ * This function is just a wrapper that calls the H5C
+ * version of the function.
+ *
+ * Return: FAIL if error is detected, SUCCEED otherwise.
+ *
+ * Programmer: John Mainzer, 5/30/14
+ *
+ * Changes:
+ *
+ * None.
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef NDEBUG
+herr_t
+H5AC_verify_entry_type(const H5F_t *f,
+ haddr_t addr,
+ const H5AC_class_t * expected_type,
+ hbool_t * in_cache_ptr,
+ hbool_t * type_ok_ptr)
+{
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI(FAIL)
+
+ if ( H5C_verify_entry_type(f, addr, (const H5C_class_t *)expected_type,
+ in_cache_ptr, type_ok_ptr) < 0 )
+
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
+ "H5C_verify_entry_type() failed.")
+
+done:
+
+ FUNC_LEAVE_NOAPI(ret_value)
+
+} /* H5AC_verify_entry_type() */
+
+#endif /* NDEBUG */
+
+
+
+/*************************************************************************/
/**************************** Private Functions: *************************/
/*************************************************************************/
diff --git a/src/H5ACprivate.h b/src/H5ACprivate.h
index bee1b3e..327f1ec 100644
--- a/src/H5ACprivate.h
+++ b/src/H5ACprivate.h
@@ -425,5 +425,17 @@ H5_DLL herr_t H5AC_evict_tagged_metadata(H5F_t * f, haddr_t metadata_tag, hid_t
H5_DLL herr_t H5AC_add_candidate(H5AC_t * cache_ptr, haddr_t addr);
#endif /* H5_HAVE_PARALLEL */
+#ifndef NDEBUG /* debugging functions */
+
+H5_DLL herr_t H5AC_get_entry_ptr_from_addr(const H5F_t *f, haddr_t addr,
+ void ** entry_ptr_ptr);
+
+H5_DLL herr_t H5AC_verify_entry_type(const H5F_t * f, haddr_t addr,
+ const H5AC_class_t * expected_type,
+ hbool_t * in_cache_ptr,
+ hbool_t * type_ok_ptr);
+
+#endif /* NDEBUG */ /* end debugging functions */
+
#endif /* !_H5ACprivate_H */
diff --git a/src/H5C.c b/src/H5C.c
index 2664e56..212952d 100644
--- a/src/H5C.c
+++ b/src/H5C.c
@@ -189,8 +189,8 @@ static herr_t H5C__mark_flush_dep_clean(H5C_cache_entry_t * entry);
#if H5C_DO_EXTREME_SANITY_CHECKS
static herr_t H5C_validate_lru_list(H5C_t * cache_ptr);
-static herr_t H5C_verify_not_in_index(H5C_t * cache_ptr,
- H5C_cache_entry_t * entry_ptr);
+static herr_t H5C_validate_pinned_entry_list(H5C_t * cache_ptr);
+static herr_t H5C_validate_protected_entry_list(H5C_t * cache_ptr);
#endif /* H5C_DO_EXTREME_SANITY_CHECKS */
#ifndef NDEBUG
@@ -1293,6 +1293,10 @@ H5C_create(size_t max_cache_size,
cache_ptr->prefix[0] = '\0'; /* empty string */
+#ifndef NDEBUG
+ cache_ptr->get_entry_ptr_from_addr_counter = 0;
+#endif /* NDEBUG */
+
/* Set return value */
ret_value = cache_ptr;
@@ -1551,6 +1555,23 @@ H5C_dest(H5F_t * f,
cache_ptr->slist_ptr = NULL;
} /* end if */
+ /* Only display count of number of calls to H5C_get_entry_ptr_from_add()
+ * if NDEBUG is undefined, and H5C_DO_SANITY_CHECKS is defined. Need
+ * this as the print statement will upset windows, and we frequently
+ * run debug builds there.
+ *
+ * Note that the count is still kept whenever NDEBUG is undefined, and
+ * is reasonably accessible via debugger.
+ */
+#ifndef NDEBUG
+#if H5C_DO_SANITY_CHECKS
+ if ( cache_ptr->get_entry_ptr_from_addr_counter > 0 )
+ HDfprintf(stdout,
+ "*** %ld calls to H5C_get_entry_ptr_from_add(). ***\n",
+ cache_ptr->get_entry_ptr_from_addr_counter);
+#endif /* H5C_DO_SANITY_CHECKS */
+#endif /* NDEBUG */
+
cache_ptr->magic = 0;
cache_ptr = H5FL_FREE(H5C_t, cache_ptr);
@@ -1607,7 +1628,7 @@ H5C_expunge_entry(H5F_t * f,
if ( H5C_validate_lru_list(cache_ptr) < 0 ) {
HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "LRU sanity check failed.\n");
+ "LRU extreme sanity check failed on entry.\n");
}
#endif /* H5C_DO_EXTREME_SANITY_CHECKS */
@@ -1662,7 +1683,7 @@ done:
if ( H5C_validate_lru_list(cache_ptr) < 0 ) {
HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "LRU sanity check failed.\n");
+ "LRU extreme sanity check failed on exit.\n");
}
#endif /* H5C_DO_EXTREME_SANITY_CHECKS */
@@ -1726,6 +1747,16 @@ H5C_flush_cache(H5F_t *f, hid_t primary_dxpl_id, hid_t secondary_dxpl_id, unsign
HDassert( cache_ptr->magic == H5C__H5C_T_MAGIC );
HDassert( cache_ptr->slist_ptr );
+#if H5C_DO_EXTREME_SANITY_CHECKS
+ if ( ( H5C_validate_protected_entry_list(cache_ptr) < 0 ) ||
+ ( H5C_validate_pinned_entry_list(cache_ptr) < 0 ) ||
+ ( H5C_validate_lru_list(cache_ptr) < 0 ) ) {
+
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
+ "an extreme sanity check failed on entry.\n");
+ }
+#endif /* H5C_DO_EXTREME_SANITY_CHECKS */
+
ignore_protected = ( (flags & H5C__FLUSH_IGNORE_PROTECTED_FLAG) != 0 );
destroy = ( (flags & H5C__FLUSH_INVALIDATE_FLAG) != 0 );
@@ -1970,8 +2001,9 @@ end_of_inner_loop:;
HDassert( (initial_slist_len + cache_ptr->slist_len_increase -
flushed_entries_count) == cache_ptr->slist_len );
- HDassert( (initial_slist_size + cache_ptr->slist_size_increase -
- flushed_entries_size) == cache_ptr->slist_size );
+ HDassert( (initial_slist_size +
+ (size_t)(cache_ptr->slist_size_increase) -
+ flushed_entries_size) == cache_ptr->slist_size );
#endif /* H5C_DO_SANITY_CHECKS */
} /* while */
@@ -2636,17 +2668,15 @@ H5C_insert_entry(H5F_t * f,
HDassert( thing );
#if H5C_DO_EXTREME_SANITY_CHECKS
- if ( H5C_verify_not_in_index(cache_ptr, (H5C_cache_entry_t *)thing) < 0 ) {
+ /* no need to verify that entry is not already in the index as */
+ /* we already make that check below. */
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "thing already in index.\n");
- }
-#endif /* H5C_DO_SANITY_CHECKS */
+ if ( ( H5C_validate_protected_entry_list(cache_ptr) < 0 ) ||
+ ( H5C_validate_pinned_entry_list(cache_ptr) < 0 ) ||
+ ( H5C_validate_lru_list(cache_ptr) < 0 ) ) {
-#if H5C_DO_EXTREME_SANITY_CHECKS
- if ( H5C_validate_lru_list(cache_ptr) < 0 ) {
-
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "LRU sanity check failed.\n");
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
+ "an extreme sanity check failed on entry.\n");
}
#endif /* H5C_DO_EXTREME_SANITY_CHECKS */
@@ -2696,6 +2726,7 @@ H5C_insert_entry(H5F_t * f,
entry_ptr->is_pinned = insert_pinned;
entry_ptr->pinned_from_client = insert_pinned;
+ entry_ptr->pinned_from_cache = FALSE;
entry_ptr->flush_me_last = flush_last;
#ifdef H5_HAVE_PARALLEL
entry_ptr->flush_me_collectively = flush_collectively;
@@ -2866,10 +2897,12 @@ H5C_insert_entry(H5F_t * f,
H5C__UPDATE_RP_FOR_INSERTION(cache_ptr, entry_ptr, FAIL)
#if H5C_DO_EXTREME_SANITY_CHECKS
- if ( H5C_validate_lru_list(cache_ptr) < 0 ) {
+ if ( ( H5C_validate_protected_entry_list(cache_ptr) < 0 ) ||
+ ( H5C_validate_pinned_entry_list(cache_ptr) < 0 ) ||
+ ( H5C_validate_lru_list(cache_ptr) < 0 ) ) {
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "LRU sanity check failed.\n");
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
+ "an extreme sanity check failed just before done.\n");
}
#endif /* H5C_DO_EXTREME_SANITY_CHECKS */
@@ -2885,10 +2918,12 @@ H5C_insert_entry(H5F_t * f,
done:
#if H5C_DO_EXTREME_SANITY_CHECKS
- if ( H5C_validate_lru_list(cache_ptr) < 0 ) {
+ if ( ( H5C_validate_protected_entry_list(cache_ptr) < 0 ) ||
+ ( H5C_validate_pinned_entry_list(cache_ptr) < 0 ) ||
+ ( H5C_validate_lru_list(cache_ptr) < 0 ) ) {
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "LRU sanity check failed.\n");
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
+ "an extreme sanity check failed on exit.\n");
}
#endif /* H5C_DO_EXTREME_SANITY_CHECKS */
@@ -2965,12 +3000,13 @@ H5C_mark_entries_as_clean(H5F_t * f,
HDassert( ce_array_ptr != NULL );
#if H5C_DO_EXTREME_SANITY_CHECKS
- if ( H5C_validate_lru_list(cache_ptr) < 0 ) {
+ if ( ( H5C_validate_protected_entry_list(cache_ptr) < 0 ) ||
+ ( H5C_validate_pinned_entry_list(cache_ptr) < 0 ) ||
+ ( H5C_validate_lru_list(cache_ptr) < 0 ) ) {
- HDassert(0);
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "LRU sanity check failed.\n");
- }
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
+ "an extreme sanity check failed on entry.\n");
+ }
#endif /* H5C_DO_EXTREME_SANITY_CHECKS */
for ( i = 0; i < ce_array_len; i++ )
@@ -2997,11 +3033,12 @@ H5C_mark_entries_as_clean(H5F_t * f,
}
#if H5C_DO_EXTREME_SANITY_CHECKS
- if ( H5C_validate_lru_list(cache_ptr) < 0 ) {
+ if ( ( H5C_validate_protected_entry_list(cache_ptr) < 0 ) ||
+ ( H5C_validate_pinned_entry_list(cache_ptr) < 0 ) ||
+ ( H5C_validate_lru_list(cache_ptr) < 0 ) ) {
- HDassert(0);
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "LRU sanity check failed.\n");
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
+ "an extreme sanity check failed in for loop.\n");
}
#endif /* H5C_DO_EXTREME_SANITY_CHECKS */
#endif /* H5C_DO_SANITY_CHECKS */
@@ -3175,12 +3212,13 @@ H5C_mark_entries_as_clean(H5F_t * f,
done:
#if H5C_DO_EXTREME_SANITY_CHECKS
- if ( H5C_validate_lru_list(cache_ptr) < 0 ) {
+ if ( ( H5C_validate_protected_entry_list(cache_ptr) < 0 ) ||
+ ( H5C_validate_pinned_entry_list(cache_ptr) < 0 ) ||
+ ( H5C_validate_lru_list(cache_ptr) < 0 ) ) {
- HDassert(0);
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "LRU sanity check failed.\n");
- }
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
+ "an extreme sanity check failed on exit.\n");
+ }
#endif /* H5C_DO_EXTREME_SANITY_CHECKS */
FUNC_LEAVE_NOAPI(ret_value)
@@ -3324,11 +3362,13 @@ H5C_move_entry(H5C_t * cache_ptr,
HDassert( H5F_addr_ne(old_addr, new_addr) );
#if H5C_DO_EXTREME_SANITY_CHECKS
- if ( H5C_validate_lru_list(cache_ptr) < 0 ) {
+ if ( ( H5C_validate_protected_entry_list(cache_ptr) < 0 ) ||
+ ( H5C_validate_pinned_entry_list(cache_ptr) < 0 ) ||
+ ( H5C_validate_lru_list(cache_ptr) < 0 ) ) {
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "LRU sanity check failed.\n");
- }
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
+ "an extreme sanity check failed on entry.\n");
+ }
#endif /* H5C_DO_EXTREME_SANITY_CHECKS */
H5C__SEARCH_INDEX(cache_ptr, old_addr, entry_ptr, FAIL)
@@ -3435,17 +3475,18 @@ H5C_move_entry(H5C_t * cache_ptr,
if ( removed_entry_from_slist ) {
- /* we just removed the entry from the slist. Thus we
- * must touch up cache_ptr->slist_len_increase and
- * cache_ptr->slist_size_increase to keep from skewing
- * the sanity checks.
- */
- HDassert( cache_ptr->slist_len_increase > 1 );
- HDassert( cache_ptr->slist_size_increase > entry_ptr->size );
-
- cache_ptr->slist_len_increase -= 1;
- cache_ptr->slist_size_increase -= entry_ptr->size;
- }
+ /* we just removed the entry from the slist. Thus we
+ * must touch up cache_ptr->slist_len_increase and
+ * cache_ptr->slist_size_increase to keep from skewing
+ * the sanity checks.
+ */
+ HDassert( cache_ptr->slist_len_increase > 1 );
+ HDassert( cache_ptr->slist_size_increase >
+ (int64_t)(entry_ptr->size) );
+
+ cache_ptr->slist_len_increase -= 1;
+ cache_ptr->slist_size_increase -= (int64_t)(entry_ptr->size);
+ }
#endif /* H5C_DO_SANITY_CHECKS */
@@ -3458,11 +3499,13 @@ H5C_move_entry(H5C_t * cache_ptr,
done:
#if H5C_DO_EXTREME_SANITY_CHECKS
- if ( H5C_validate_lru_list(cache_ptr) < 0 ) {
+ if ( ( H5C_validate_protected_entry_list(cache_ptr) < 0 ) ||
+ ( H5C_validate_pinned_entry_list(cache_ptr) < 0 ) ||
+ ( H5C_validate_lru_list(cache_ptr) < 0 ) ) {
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "LRU sanity check failed.\n");
- }
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
+ "an extreme sanity check failed on exit.\n");
+ }
#endif /* H5C_DO_EXTREME_SANITY_CHECKS */
FUNC_LEAVE_NOAPI(ret_value)
@@ -3508,6 +3551,15 @@ H5C_resize_entry(void *thing, size_t new_size)
if(!(entry_ptr->is_pinned || entry_ptr->is_protected))
HGOTO_ERROR(H5E_CACHE, H5E_BADTYPE, FAIL, "Entry isn't pinned or protected??")
+#if H5C_DO_EXTREME_SANITY_CHECKS
+ if ( ( H5C_validate_protected_entry_list(cache_ptr) < 0 ) ||
+ ( H5C_validate_pinned_entry_list(cache_ptr) < 0 ) ) {
+
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
+ "an extreme sanity check failed on entry.\n");
+ }
+#endif /* H5C_DO_EXTREME_SANITY_CHECKS */
+
/* update for change in entry size if necessary */
if ( entry_ptr->size != new_size ) {
hbool_t was_clean;
@@ -3587,6 +3639,16 @@ H5C_resize_entry(void *thing, size_t new_size)
} /* end if */
done:
+
+#if H5C_DO_EXTREME_SANITY_CHECKS
+ if ( ( H5C_validate_protected_entry_list(cache_ptr) < 0 ) ||
+ ( H5C_validate_pinned_entry_list(cache_ptr) < 0 ) ) {
+
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
+ "an extreme sanity check failed on exit.\n");
+ }
+#endif /* H5C_DO_EXTREME_SANITY_CHECKS */
+
FUNC_LEAVE_NOAPI(ret_value)
} /* H5C_resize_entry() */
@@ -3601,6 +3663,9 @@ done:
* Programmer: Quincey Koziol
* 3/26/09
*
+ * Changes: Added sanity checks to clarify the circumstances under
+ * which an entry can be pinned. JRM -- 4/27/14
+ *
*-------------------------------------------------------------------------
*/
#ifndef NDEBUG
@@ -3620,6 +3685,7 @@ H5C_pin_entry_from_client(H5C_t UNUSED * cache_ptr,
/* Sanity checks */
HDassert( cache_ptr );
HDassert( entry_ptr );
+ HDassert( entry_ptr->is_protected );
/* Check if the entry is already pinned */
if(entry_ptr->is_pinned) {
@@ -3637,7 +3703,9 @@ H5C_pin_entry_from_client(H5C_t UNUSED * cache_ptr,
entry_ptr->pinned_from_client = TRUE;
done:
+
FUNC_LEAVE_NOAPI(ret_value)
+
} /* H5C_pin_entry_from_client() */
@@ -3652,6 +3720,9 @@ done:
* Programmer: John Mainzer
* 4/26/06
*
+ * Changes: Added extreme sanity checks on entry and exit.
+ * JRM -- 4/26/14
+ *
*-------------------------------------------------------------------------
*/
herr_t
@@ -3670,6 +3741,17 @@ H5C_pin_protected_entry(void *thing)
HDassert(cache_ptr);
HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
+#if H5C_DO_EXTREME_SANITY_CHECKS
+ if ( ( H5C_validate_protected_entry_list(cache_ptr) < 0 ) ||
+ ( H5C_validate_pinned_entry_list(cache_ptr) < 0 ) ||
+ ( H5C_validate_lru_list(cache_ptr) < 0 ) ) {
+
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
+ "an extreme sanity check failed on entry.\n");
+ }
+#endif /* H5C_DO_EXTREME_SANITY_CHECKS */
+
+
/* Only protected entries can be pinned */
if(!entry_ptr->is_protected)
HGOTO_ERROR(H5E_CACHE, H5E_CANTPIN, FAIL, "Entry isn't protected")
@@ -3679,6 +3761,17 @@ H5C_pin_protected_entry(void *thing)
HGOTO_ERROR(H5E_CACHE, H5E_CANTPIN, FAIL, "Can't pin entry by client")
done:
+
+#if H5C_DO_EXTREME_SANITY_CHECKS
+ if ( ( H5C_validate_protected_entry_list(cache_ptr) < 0 ) ||
+ ( H5C_validate_pinned_entry_list(cache_ptr) < 0 ) ||
+ ( H5C_validate_lru_list(cache_ptr) < 0 ) ) {
+
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
+ "an extreme sanity check failed on exit.\n");
+ }
+#endif /* H5C_DO_EXTREME_SANITY_CHECKS */
+
FUNC_LEAVE_NOAPI(ret_value)
} /* H5C_pin_protected_entry() */
@@ -3770,11 +3863,12 @@ H5C_protect(H5F_t * f,
HDassert( H5F_addr_defined(addr) );
#if H5C_DO_EXTREME_SANITY_CHECKS
- if ( H5C_validate_lru_list(cache_ptr) < 0 ) {
+ if ( ( H5C_validate_protected_entry_list(cache_ptr) < 0 ) ||
+ ( H5C_validate_pinned_entry_list(cache_ptr) < 0 ) ||
+ ( H5C_validate_lru_list(cache_ptr) < 0 ) ) {
- HDassert(0);
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, NULL, \
- "LRU sanity check failed.\n");
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
+ "an extreme sanity check failed on entry.\n");
}
#endif /* H5C_DO_EXTREME_SANITY_CHECKS */
@@ -4106,11 +4200,13 @@ H5C_protect(H5F_t * f,
done:
#if H5C_DO_EXTREME_SANITY_CHECKS
- if ( H5C_validate_lru_list(cache_ptr) < 0 ) {
+ if ( ( H5C_validate_protected_entry_list(cache_ptr) < 0 ) ||
+ ( H5C_validate_pinned_entry_list(cache_ptr) < 0 ) ||
+ ( H5C_validate_lru_list(cache_ptr) < 0 ) ) {
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, NULL, \
- "LRU sanity check failed.\n");
- }
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
+ "an extreme sanity check failed on exit.\n");
+ }
#endif /* H5C_DO_EXTREME_SANITY_CHECKS */
FUNC_LEAVE_NOAPI(ret_value)
@@ -5321,7 +5417,9 @@ H5C_unpin_entry_from_client(H5C_t * cache_ptr,
entry_ptr->pinned_from_client = FALSE;
done:
+
FUNC_LEAVE_NOAPI(ret_value)
+
} /* H5C_unpin_entry_from_client() */
@@ -5336,6 +5434,9 @@ done:
* Programmer: John Mainzer
* 3/22/06
*
+ * Changes: Added extreme sanity checks on entry and exit.
+ JRM -- 4/26/14
+ *
*-------------------------------------------------------------------------
*/
herr_t
@@ -5353,12 +5454,35 @@ H5C_unpin_entry(void *_entry_ptr)
HDassert(cache_ptr);
HDassert(cache_ptr->magic == H5C__H5C_T_MAGIC);
+#if H5C_DO_EXTREME_SANITY_CHECKS
+ if ( ( H5C_validate_protected_entry_list(cache_ptr) < 0 ) ||
+ ( H5C_validate_pinned_entry_list(cache_ptr) < 0 ) ||
+ ( H5C_validate_lru_list(cache_ptr) < 0 ) ) {
+
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
+ "an extreme sanity check failed on entry.\n");
+ }
+#endif /* H5C_DO_EXTREME_SANITY_CHECKS */
+
+
/* Unpin the entry */
if(H5C_unpin_entry_from_client(cache_ptr, entry_ptr, TRUE) < 0)
HGOTO_ERROR(H5E_CACHE, H5E_CANTUNPIN, FAIL, "Can't unpin entry from client")
done:
+
+#if H5C_DO_EXTREME_SANITY_CHECKS
+ if ( ( H5C_validate_protected_entry_list(cache_ptr) < 0 ) ||
+ ( H5C_validate_pinned_entry_list(cache_ptr) < 0 ) ||
+ ( H5C_validate_lru_list(cache_ptr) < 0 ) ) {
+
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
+ "an extreme sanity check failed on exit.\n");
+ }
+#endif /* H5C_DO_EXTREME_SANITY_CHECKS */
+
FUNC_LEAVE_NOAPI(ret_value)
+
} /* H5C_unpin_entry() */
@@ -5463,14 +5587,15 @@ H5C_unprotect(H5F_t * f,
was_clean = ! ( entry_ptr->is_dirty );
#if H5C_DO_EXTREME_SANITY_CHECKS
- if ( H5C_validate_lru_list(cache_ptr) < 0 ) {
+ if ( ( H5C_validate_protected_entry_list(cache_ptr) < 0 ) ||
+ ( H5C_validate_pinned_entry_list(cache_ptr) < 0 ) ||
+ ( H5C_validate_lru_list(cache_ptr) < 0 ) ) {
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "LRU sanity check failed.\n");
- }
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
+ "an extreme sanity check failed on entry.\n");
+ }
#endif /* H5C_DO_EXTREME_SANITY_CHECKS */
-
/* if the entry has multiple read only protects, just decrement
* the ro_ref_counter. Don't actually unprotect until the ref count
* drops to zero.
@@ -5728,11 +5853,13 @@ H5C_unprotect(H5F_t * f,
done:
#if H5C_DO_EXTREME_SANITY_CHECKS
- if ( H5C_validate_lru_list(cache_ptr) < 0 ) {
+ if ( ( H5C_validate_protected_entry_list(cache_ptr) < 0 ) ||
+ ( H5C_validate_pinned_entry_list(cache_ptr) < 0 ) ||
+ ( H5C_validate_lru_list(cache_ptr) < 0 ) ) {
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "LRU sanity check failed.\n");
- }
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
+ "an extreme sanity check failed on exit.\n");
+ }
#endif /* H5C_DO_EXTREME_SANITY_CHECKS */
FUNC_LEAVE_NOAPI(ret_value)
@@ -7822,11 +7949,12 @@ H5C_flush_invalidate_cache(H5F_t * f,
if ( node_ptr == NULL ) {
- HDassert( (actual_slist_len + cache_ptr->slist_len) ==
+ HDassert( (actual_slist_len + cache_ptr->slist_len) ==
(initial_slist_len + cache_ptr->slist_len_increase) );
- HDassert( (actual_slist_size + cache_ptr->slist_size) ==
- (initial_slist_size + cache_ptr->slist_size_increase) );
- }
+ HDassert( (actual_slist_size + cache_ptr->slist_size) ==
+ (initial_slist_size +
+ (size_t)(cache_ptr->slist_size_increase)) );
+ }
#endif /* H5C_DO_SANITY_CHECKS */
/* Since we are doing a destroy, we must make a pass through
@@ -8479,6 +8607,8 @@ H5C_flush_single_entry(H5F_t * f,
}
done:
+ HDassert( ( destroy ) ||
+ ( ( entry_ptr ) && ( ! entry_ptr->flush_in_progress ) ) );
FUNC_LEAVE_NOAPI(ret_value)
} /* H5C_flush_single_entry() */
@@ -8972,6 +9102,11 @@ done:
*
* Programmer: John Mainzer, 7/14/05
*
+ * Changes:
+ *
+ * Added code to verify that the LRU contains no pinned
+ * entries. JRM -- 4/25/14
+ *
*-------------------------------------------------------------------------
*/
#if H5C_DO_EXTREME_SANITY_CHECKS
@@ -9051,6 +9186,13 @@ H5C_validate_lru_list(H5C_t * cache_ptr)
HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 6 failed")
}
+ if ( ( entry_ptr->is_pinned ) ||
+ ( entry_ptr->pinned_from_client ) ||
+ ( entry_ptr->pinned_from_cache ) ) {
+
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 7 failed")
+ }
+
len++;
size += entry_ptr->size;
entry_ptr = entry_ptr->next;
@@ -9059,7 +9201,7 @@ H5C_validate_lru_list(H5C_t * cache_ptr)
if ( ( cache_ptr->LRU_list_len != len ) ||
( cache_ptr->LRU_list_size != size ) ) {
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 7 failed")
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 8 failed")
}
done:
@@ -9078,11 +9220,10 @@ done:
/*-------------------------------------------------------------------------
*
- * Function: H5C_verify_not_in_index
+ * Function: H5C_validate_pinned_entry_list
*
- * Purpose: Debugging function that scans the hash table to verify
- * that the specified instance of H5C_cache_entry_t is not
- * present.
+ * Purpose: Debugging function that scans the pinned entry list for
+ * errors.
*
* If an error is detected, the function generates a
* diagnostic and returns FAIL. If no error is detected,
@@ -9090,42 +9231,245 @@ done:
*
* Return: FAIL if error is detected, SUCCEED otherwise.
*
- * Programmer: John Mainzer, 7/14/05
+ * Programmer: John Mainzer, 4/25/14
+ *
+ * Changes:
+ *
+ * None.
*
*-------------------------------------------------------------------------
*/
#if H5C_DO_EXTREME_SANITY_CHECKS
static herr_t
-H5C_verify_not_in_index(H5C_t * cache_ptr,
- H5C_cache_entry_t * entry_ptr)
+H5C_validate_pinned_entry_list(H5C_t * cache_ptr)
{
herr_t ret_value = SUCCEED; /* Return value */
- int32_t i;
- int32_t depth;
- H5C_cache_entry_t * scan_ptr = NULL;
+ int32_t len = 0;
+ size_t size = 0;
+ H5C_cache_entry_t * entry_ptr = NULL;
FUNC_ENTER_NOAPI_NOINIT
- HDassert( cache_ptr != NULL );
+ HDassert( cache_ptr );
HDassert( cache_ptr->magic == H5C__H5C_T_MAGIC );
- HDassert( entry_ptr != NULL );
- for ( i = 0; i < H5C__HASH_TABLE_LEN; i++ )
+ if ( ( ( cache_ptr->pel_head_ptr == NULL )
+ ||
+ ( cache_ptr->pel_tail_ptr == NULL )
+ )
+ &&
+ ( cache_ptr->pel_head_ptr != cache_ptr->pel_tail_ptr )
+ ) {
+
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 1 failed")
+ }
+
+ if ( ( cache_ptr->pel_len < 0 ) || ( cache_ptr->pel_size < 0 ) ) {
+
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 2 failed")
+ }
+
+ if ( ( cache_ptr->pel_len == 1 )
+ &&
+ ( ( cache_ptr->pel_head_ptr != cache_ptr->pel_tail_ptr )
+ ||
+ ( cache_ptr->pel_head_ptr == NULL )
+ ||
+ ( cache_ptr->pel_head_ptr->size != cache_ptr->pel_size )
+ )
+ ) {
+
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 3 failed")
+ }
+
+ if ( ( cache_ptr->pel_len >= 1 )
+ &&
+ ( ( cache_ptr->pel_head_ptr == NULL )
+ ||
+ ( cache_ptr->pel_head_ptr->prev != NULL )
+ ||
+ ( cache_ptr->pel_tail_ptr == NULL )
+ ||
+ ( cache_ptr->pel_tail_ptr->next != NULL )
+ )
+ ) {
+
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 4 failed")
+ }
+
+ entry_ptr = cache_ptr->pel_head_ptr;
+ while ( entry_ptr != NULL )
{
- depth = 0;
- scan_ptr = cache_ptr->index[i];
- while ( scan_ptr != NULL )
- {
- if ( scan_ptr == entry_ptr ) {
+ if ( ( entry_ptr != cache_ptr->pel_head_ptr ) &&
+ ( ( entry_ptr->prev == NULL ) ||
+ ( entry_ptr->prev->next != entry_ptr ) ) ) {
- HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, \
- "Entry already in index.")
- }
- depth++;
- scan_ptr = scan_ptr->ht_next;
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 5 failed")
+ }
+
+ if ( ( entry_ptr != cache_ptr->pel_tail_ptr ) &&
+ ( ( entry_ptr->next == NULL ) ||
+ ( entry_ptr->next->prev != entry_ptr ) ) ) {
+
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 6 failed")
+ }
+
+ if ( ! entry_ptr->is_pinned ) {
+
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 7 failed")
+ }
+
+ if ( ! ( ( entry_ptr->pinned_from_client ) ||
+ ( entry_ptr->pinned_from_cache ) ) ) {
+
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 8 failed")
+ }
+
+ len++;
+ size += entry_ptr->size;
+ entry_ptr = entry_ptr->next;
+ }
+
+ if ( ( cache_ptr->pel_len != len ) ||
+ ( cache_ptr->pel_size != size ) ) {
+
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 9 failed")
+ }
+
+done:
+
+ if ( ret_value != SUCCEED ) {
+
+ HDassert(0);
+ }
+
+ FUNC_LEAVE_NOAPI(ret_value)
+
+} /* H5C_validate_pinned_entry_list() */
+
+#endif /* H5C_DO_EXTREME_SANITY_CHECKS */
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Function: H5C_validate_protected_entry_list
+ *
+ * Purpose: Debugging function that scans the protected entry list for
+ * errors.
+ *
+ * If an error is detected, the function generates a
+ * diagnostic and returns FAIL. If no error is detected,
+ * the function returns SUCCEED.
+ *
+ * Return: FAIL if error is detected, SUCCEED otherwise.
+ *
+ * Programmer: John Mainzer, 4/25/14
+ *
+ * Changes:
+ *
+ * None.
+ *
+ *-------------------------------------------------------------------------
+ */
+#if H5C_DO_EXTREME_SANITY_CHECKS
+
+static herr_t
+H5C_validate_protected_entry_list(H5C_t * cache_ptr)
+{
+ herr_t ret_value = SUCCEED; /* Return value */
+ int32_t len = 0;
+ size_t size = 0;
+ H5C_cache_entry_t * entry_ptr = NULL;
+
+ FUNC_ENTER_NOAPI_NOINIT
+
+ HDassert( cache_ptr );
+ HDassert( cache_ptr->magic == H5C__H5C_T_MAGIC );
+
+ if ( ( ( cache_ptr->pl_head_ptr == NULL )
+ ||
+ ( cache_ptr->pl_tail_ptr == NULL )
+ )
+ &&
+ ( cache_ptr->pl_head_ptr != cache_ptr->pl_tail_ptr )
+ ) {
+
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 1 failed")
+ }
+
+ if ( ( cache_ptr->pl_len < 0 ) || ( cache_ptr->pl_size < 0 ) ) {
+
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 2 failed")
+ }
+
+ if ( ( cache_ptr->pl_len == 1 )
+ &&
+ ( ( cache_ptr->pl_head_ptr != cache_ptr->pl_tail_ptr )
+ ||
+ ( cache_ptr->pl_head_ptr == NULL )
+ ||
+ ( cache_ptr->pl_head_ptr->size != cache_ptr->pl_size )
+ )
+ ) {
+
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 3 failed")
+ }
+
+ if ( ( cache_ptr->pl_len >= 1 )
+ &&
+ ( ( cache_ptr->pl_head_ptr == NULL )
+ ||
+ ( cache_ptr->pl_head_ptr->prev != NULL )
+ ||
+ ( cache_ptr->pl_tail_ptr == NULL )
+ ||
+ ( cache_ptr->pl_tail_ptr->next != NULL )
+ )
+ ) {
+
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 4 failed")
+ }
+
+ entry_ptr = cache_ptr->pl_head_ptr;
+ while ( entry_ptr != NULL )
+ {
+
+ if ( ( entry_ptr != cache_ptr->pl_head_ptr ) &&
+ ( ( entry_ptr->prev == NULL ) ||
+ ( entry_ptr->prev->next != entry_ptr ) ) ) {
+
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 5 failed")
}
+
+ if ( ( entry_ptr != cache_ptr->pl_tail_ptr ) &&
+ ( ( entry_ptr->next == NULL ) ||
+ ( entry_ptr->next->prev != entry_ptr ) ) ) {
+
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 6 failed")
+ }
+
+ if ( ! entry_ptr->is_protected ) {
+
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 7 failed")
+ }
+
+ if ( ( entry_ptr->is_read_only ) &&
+ ( entry_ptr->ro_ref_count <= 0 ) ) {
+
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 8 failed")
+ }
+
+ len++;
+ size += entry_ptr->size;
+ entry_ptr = entry_ptr->next;
+ }
+
+ if ( ( cache_ptr->pl_len != len ) ||
+ ( cache_ptr->pl_size != size ) ) {
+
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Check 9 failed")
}
done:
@@ -9137,13 +9481,195 @@ done:
FUNC_LEAVE_NOAPI(ret_value)
-} /* H5C_verify_not_in_index() */
+} /* H5C_validate_protected_entry_list() */
#endif /* H5C_DO_EXTREME_SANITY_CHECKS */
/*-------------------------------------------------------------------------
*
+ * Function: H5C_get_entry_ptr_from_addr()
+ *
+ * Purpose: Debugging function that attempts to look up an entry in the
+ * cache by its file address, and if found, returns a pointer
+ * to the entry in *entry_ptr_ptr. If the entry is not in the
+ * cache, *entry_ptr_ptr is set to NULL.
+ *
+ * WARNING: This call should be used only in debugging
+ * routines, and it should be avoided when
+ * possible.
+ *
+ * Further, if we ever multi-thread the cache,
+ * this routine will have to be either discarded
+ * or heavily re-worked.
+ *
+ * Finally, keep in mind that the entry whose
+ * pointer is obtained in this fashion may not
+ * be in a stable state.
+ *
+ * Note that this function is only defined if NDEBUG
+ * is not defined.
+ *
+ * As heavy use of this function is almost certainly a
+ * bad idea, the metadata cache tracks the number of
+ * successful calls to this function, and (if
+ * H5C_DO_SANITY_CHECKS is defined) displays any
+ * non-zero count on cache shutdown.
+ *
+ * Return: FAIL if error is detected, SUCCEED otherwise.
+ *
+ * Programmer: John Mainzer, 5/30/14
+ *
+ * Changes:
+ *
+ * None.
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef NDEBUG
+herr_t
+H5C_get_entry_ptr_from_addr(const H5F_t *f,
+ haddr_t addr,
+ void ** entry_ptr_ptr)
+{
+ H5C_t * cache_ptr;
+ H5C_cache_entry_t * entry_ptr = NULL;
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI(FAIL)
+
+ HDassert( f );
+ HDassert( f->shared );
+
+ cache_ptr = f->shared->cache;
+
+ HDassert( cache_ptr != NULL );
+ HDassert( cache_ptr->magic == H5C__H5C_T_MAGIC );
+ HDassert( H5F_addr_defined(addr) );
+ HDassert( entry_ptr_ptr != NULL );
+
+ /* this test duplicates two of the above asserts, but we need an
+ * invocation of HGOTO_ERROR to keep the compiler happy.
+ */
+ if ( ( cache_ptr == NULL ) || ( cache_ptr->magic != H5C__H5C_T_MAGIC ) ) {
+
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Bad cache_ptr on entry.")
+ }
+
+ H5C__SEARCH_INDEX(cache_ptr, addr, entry_ptr, FAIL)
+
+ if ( entry_ptr == NULL ) {
+
+ /* the entry doesn't exist in the cache -- report this
+ * and quit.
+ */
+ *entry_ptr_ptr = NULL;
+
+ } else {
+
+ *entry_ptr_ptr = entry_ptr;
+
+ /* increment call counter */
+ (cache_ptr->get_entry_ptr_from_addr_counter)++;
+ }
+
+done:
+
+ FUNC_LEAVE_NOAPI(ret_value)
+
+} /* H5C_get_entry_ptr_from_addr() */
+
+#endif /* NDEBUG */
+
+
+/*-------------------------------------------------------------------------
+ *
+ * Function: H5C_verify_entry_type()
+ *
+ * Purpose: Debugging function that attempts to look up an entry in the
+ * cache by its file address, and if found, test to see if its
+ * type field contains the expted value.
+ *
+ * If the specified entry is in cache, *in_cache_ptr is set
+ * to TRUE, and *type_ok_ptr is set to TRUE or FALSE
+ * depending on whether the entries type field matches the
+ * expected_type parameter
+ *
+ * If the target entry is not in cache, *in_cache_ptr is
+ * set to FALSE, and *type_ok_ptr is undefined.
+ *
+ * Note that this function is only defined if NDEBUG
+ * is not defined.
+ *
+ * Return: FAIL if error is detected, SUCCEED otherwise.
+ *
+ * Programmer: John Mainzer, 5/30/14
+ *
+ * Changes:
+ *
+ * None.
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef NDEBUG
+herr_t
+H5C_verify_entry_type(const H5F_t *f,
+ haddr_t addr,
+ const H5C_class_t * expected_type,
+ hbool_t * in_cache_ptr,
+ hbool_t * type_ok_ptr)
+{
+ H5C_t * cache_ptr;
+ H5C_cache_entry_t * entry_ptr = NULL;
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI(FAIL)
+
+ HDassert( f );
+ HDassert( f->shared );
+
+ cache_ptr = f->shared->cache;
+
+ HDassert( cache_ptr != NULL );
+ HDassert( cache_ptr->magic == H5C__H5C_T_MAGIC );
+ HDassert( H5F_addr_defined(addr) );
+ HDassert( in_cache_ptr != NULL );
+ HDassert( type_ok_ptr != NULL );
+
+ /* this test duplicates two of the above asserts, but we need an
+ * invocation of HGOTO_ERROR to keep the compiler happy.
+ */
+ if ( ( cache_ptr == NULL ) || ( cache_ptr->magic != H5C__H5C_T_MAGIC ) ) {
+
+ HGOTO_ERROR(H5E_CACHE, H5E_SYSTEM, FAIL, "Bad cache_ptr on entry.")
+ }
+
+ H5C__SEARCH_INDEX(cache_ptr, addr, entry_ptr, FAIL)
+
+ if ( entry_ptr == NULL ) {
+
+ /* the entry doesn't exist in the cache -- report this
+ * and quit.
+ */
+ *in_cache_ptr = FALSE;
+
+ } else {
+
+ *in_cache_ptr = TRUE;
+ *type_ok_ptr = (expected_type == entry_ptr->type);
+ }
+
+done:
+
+ FUNC_LEAVE_NOAPI(ret_value)
+
+} /* H5C_verify_entry_type() */
+
+#endif /* NDEBUG */
+
+
+/*-------------------------------------------------------------------------
+ *
* Function: H5C_ignore_tags
*
* Purpose: Override all assertion frameworks associated with making
diff --git a/src/H5Cpkg.h b/src/H5Cpkg.h
index 57197be..6c65d25 100644
--- a/src/H5Cpkg.h
+++ b/src/H5Cpkg.h
@@ -833,6 +833,11 @@
* field is intended to allow marking of output of with
* the processes mpi rank.
*
+ * get_entry_ptr_from_addr_counter: Counter used to track the number of
+ * times the H5C_get_entry_ptr_from_addr() function has been
+ * called successfully. This field is only defined when
+ * NDEBUG is not #defined.
+ *
****************************************************************************/
#define H5C__HASH_TABLE_LEN (64 * 1024) /* must be a power of 2 */
@@ -994,6 +999,12 @@ struct H5C_t
#endif /* H5C_COLLECT_CACHE_STATS */
char prefix[H5C__PREFIX_LEN];
+
+#ifndef NDEBUG
+
+ int64_t get_entry_ptr_from_addr_counter;
+
+#endif /* NDEBUG */
};
@@ -2188,7 +2199,7 @@ if ( (cache_ptr)->index_size != \
(cache_ptr)->slist_len++; \
(cache_ptr)->slist_size += (entry_ptr)->size; \
(cache_ptr)->slist_len_increase++; \
- (cache_ptr)->slist_size_increase += (entry_ptr)->size; \
+ (cache_ptr)->slist_size_increase += (int64_t)((entry_ptr)->size); \
\
HDassert( (cache_ptr)->slist_len > 0 ); \
HDassert( (cache_ptr)->slist_size > 0 ); \
diff --git a/src/H5Cprivate.h b/src/H5Cprivate.h
index e22c676..d6d16ba 100644
--- a/src/H5Cprivate.h
+++ b/src/H5Cprivate.h
@@ -1239,5 +1239,17 @@ H5_DLL herr_t H5C_ignore_tags(H5C_t * cache_ptr);
H5_DLL void H5C_retag_entries(H5C_t * cache_ptr, haddr_t src_tag, haddr_t dest_tag);
+#ifndef NDEBUG /* debugging functions */
+
+H5_DLL herr_t H5C_get_entry_ptr_from_addr(const H5F_t *f, haddr_t addr,
+ void ** entry_ptr_ptr);
+
+H5_DLL herr_t H5C_verify_entry_type(const H5F_t * f, haddr_t addr,
+ const H5C_class_t * expected_type,
+ hbool_t * in_cache_ptr,
+ hbool_t * type_ok_ptr);
+
+#endif /* NDEBUG */
+
#endif /* !_H5Cprivate_H */
diff --git a/src/H5Dchunk.c b/src/H5Dchunk.c
index ce8ca5a..6d187f2 100644
--- a/src/H5Dchunk.c
+++ b/src/H5Dchunk.c
@@ -779,8 +779,10 @@ H5D__chunk_io_init(const H5D_io_info_t *io_info, const H5D_type_info_t *type_inf
fm->select_chunk = NULL;
if(io_info->using_mpi_vfd) {
H5_CHECK_OVERFLOW(fm->layout->u.chunk.nchunks, hsize_t, size_t);
- if(NULL == (fm->select_chunk = (H5D_chunk_info_t **)H5MM_calloc((size_t)fm->layout->u.chunk.nchunks * sizeof(H5D_chunk_info_t *))))
- HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate chunk info")
+ if(fm->layout->u.chunk.nchunks) {
+ if(NULL == (fm->select_chunk = (H5D_chunk_info_t **)H5MM_calloc((size_t)fm->layout->u.chunk.nchunks * sizeof(H5D_chunk_info_t *))))
+ HGOTO_ERROR(H5E_RESOURCE, H5E_NOSPACE, FAIL, "can't allocate chunk info")
+ }
} /* end if */
#endif /* H5_HAVE_PARALLEL */
diff --git a/src/H5FDmpio.c b/src/H5FDmpio.c
index d4b8fdc..8162ccd 100644
--- a/src/H5FDmpio.c
+++ b/src/H5FDmpio.c
@@ -1004,9 +1004,6 @@ H5FD_mpio_open(const char *name, unsigned flags, hid_t fapl_id,
MPI_Comm comm_dup=MPI_COMM_NULL;
MPI_Info info_dup=MPI_INFO_NULL;
H5FD_t *ret_value; /* Return value */
-#ifndef H5_HAVE_MPI_GET_SIZE
- h5_stat_t stat_buf;
-#endif
FUNC_ENTER_NOAPI_NOINIT
@@ -1081,18 +1078,8 @@ H5FD_mpio_open(const char *name, unsigned flags, hid_t fapl_id,
/* Only processor p0 will get the filesize and broadcast it. */
if (mpi_rank == 0) {
- /* Get current file size. If MPI_File_get_size is disabled in configuration
- * because it doesn't return correct value (SGI Altix Propack 4),
- * use stat to get the file size. */
-#ifdef H5_HAVE_MPI_GET_SIZE
if (MPI_SUCCESS != (mpi_code=MPI_File_get_size(fh, &size)))
HMPI_GOTO_ERROR(NULL, "MPI_File_get_size failed", mpi_code)
-#else
- if((mpi_code=HDstat(name, &stat_buf))<0)
- HMPI_GOTO_ERROR(NULL, "stat failed", mpi_code)
- /* Hopefully this casting is safe */
- size = (MPI_Offset)(stat_buf.st_size);
-#endif
} /* end if */
/* Broadcast file size */
@@ -1989,36 +1976,12 @@ H5FD_mpio_truncate(H5FD_t *_file, hid_t UNUSED dxpl_id, hbool_t UNUSED closing)
int mpi_code; /* mpi return code */
MPI_Offset mpi_off;
-#ifdef H5_MPI_FILE_SET_SIZE_BIG
if(H5FD_mpi_haddr_to_MPIOff(file->eoa, &mpi_off) < 0)
HGOTO_ERROR(H5E_INTERNAL, H5E_BADRANGE, FAIL, "cannot convert from haddr_t to MPI_Offset")
/* Extend the file's size */
if(MPI_SUCCESS != (mpi_code = MPI_File_set_size(file->f, mpi_off)))
HMPI_GOTO_ERROR(FAIL, "MPI_File_set_size failed", mpi_code)
-#else /* H5_MPI_FILE_SET_SIZE_BIG */
- /* Wait until all processes are here before reading/writing the byte at
- * process 0's end of address space. The window for corruption is
- * probably tiny, but does exist...
- */
- if(MPI_SUCCESS != (mpi_code = MPI_Barrier(file->comm)))
- HMPI_GOTO_ERROR(FAIL, "MPI_Barrier failed", mpi_code)
-
- if(0 == file->mpi_rank) {
- uint8_t byte = 0;
- MPI_Status mpi_stat;
-
- /* Portably initialize MPI status variable */
- HDmemset(&mpi_stat, 0, sizeof(MPI_Status));
-
- if(H5FD_mpi_haddr_to_MPIOff(file->eoa-1, &mpi_off) < 0)
- HGOTO_ERROR(H5E_INTERNAL, H5E_BADRANGE, FAIL, "cannot convert from haddr_t to MPI_Offset")
- if(MPI_SUCCESS != (mpi_code = MPI_File_read_at(file->f, mpi_off, &byte, 1, MPI_BYTE, &mpi_stat)))
- HMPI_GOTO_ERROR(FAIL, "MPI_File_read_at failed", mpi_code)
- if(MPI_SUCCESS != (mpi_code = MPI_File_write_at(file->f, mpi_off, &byte, 1, MPI_BYTE, &mpi_stat)))
- HMPI_GOTO_ERROR(FAIL, "MPI_File_write_at failed", mpi_code)
- } /* end if */
-#endif /* H5_MPI_FILE_SET_SIZE_BIG */
/* Don't let any proc return until all have extended the file.
* (Prevents race condition where some processes go ahead and write
diff --git a/src/H5HFcache.c b/src/H5HFcache.c
index 030927d..0f73c68 100644
--- a/src/H5HFcache.c
+++ b/src/H5HFcache.c
@@ -88,14 +88,41 @@ static H5HF_indirect_t *H5HF_cache_iblock_load(H5F_t *f, hid_t dxpl_id, haddr_t
static herr_t H5HF_cache_iblock_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5HF_indirect_t *iblock, unsigned UNUSED * flags_ptr);
static herr_t H5HF_cache_iblock_dest(H5F_t *f, H5HF_indirect_t *iblock);
static herr_t H5HF_cache_iblock_clear(H5F_t *f, H5HF_indirect_t *iblock, hbool_t destroy);
+static herr_t H5HF_cache_iblock_notify(H5C_notify_action_t action, H5HF_indirect_t *iblock);
static herr_t H5HF_cache_iblock_size(const H5F_t *f, const H5HF_indirect_t *iblock, size_t *size_ptr);
static H5HF_direct_t *H5HF_cache_dblock_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *udata);
static herr_t H5HF_cache_dblock_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5HF_direct_t *dblock, unsigned UNUSED * flags_ptr);
static herr_t H5HF_cache_dblock_dest(H5F_t *f, H5HF_direct_t *dblock);
static herr_t H5HF_cache_dblock_clear(H5F_t *f, H5HF_direct_t *dblock, hbool_t destroy);
+static herr_t H5HF_cache_dblock_notify(H5C_notify_action_t action, H5HF_direct_t *dblock);
static herr_t H5HF_cache_dblock_size(const H5F_t *f, const H5HF_direct_t *dblock, size_t *size_ptr);
+/*********************************/
+/* Debugging Function Prototypes */
+/*********************************/
+#ifndef NDEBUG
+static herr_t H5HF_cache_verify_hdr_descendants_clean(H5F_t *f,
+ hid_t dxpl_id,
+ H5HF_hdr_t * hdr,
+ hbool_t *clean_ptr);
+static herr_t H5HF_cache_verify_iblock_descendants_clean(H5F_t *f,
+ hid_t dxpl_id,
+ H5HF_indirect_t * iblock,
+ unsigned * iblock_status_ptr,
+ hbool_t *clean_ptr);
+static herr_t H5HF_cache_verify_iblocks_dblocks_clean(H5F_t *f,
+ H5HF_indirect_t * iblock,
+ hbool_t *clean_ptr,
+ hbool_t *has_dblocks_ptr);
+static herr_t H5HF_cache_verify_descendant_iblocks_clean(H5F_t *f,
+ hid_t dxpl_id,
+ H5HF_indirect_t * iblock,
+ hbool_t *clean_ptr,
+ hbool_t *has_iblocks_ptr);
+#endif /* NDEBUG */
+
+
/*********************/
/* Package Variables */
/*********************/
@@ -118,7 +145,7 @@ const H5AC_class_t H5AC_FHEAP_IBLOCK[1] = {{
(H5AC_flush_func_t)H5HF_cache_iblock_flush,
(H5AC_dest_func_t)H5HF_cache_iblock_dest,
(H5AC_clear_func_t)H5HF_cache_iblock_clear,
- (H5AC_notify_func_t)NULL,
+ (H5AC_notify_func_t)H5HF_cache_iblock_notify,
(H5AC_size_func_t)H5HF_cache_iblock_size,
}};
@@ -129,7 +156,7 @@ const H5AC_class_t H5AC_FHEAP_DBLOCK[1] = {{
(H5AC_flush_func_t)H5HF_cache_dblock_flush,
(H5AC_dest_func_t)H5HF_cache_dblock_dest,
(H5AC_clear_func_t)H5HF_cache_dblock_clear,
- (H5AC_notify_func_t)NULL,
+ (H5AC_notify_func_t)H5HF_cache_dblock_notify,
(H5AC_size_func_t)H5HF_cache_dblock_size,
}};
@@ -471,6 +498,33 @@ H5HF_cache_hdr_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr, H5H
uint8_t heap_flags; /* Status flags for heap */
uint32_t metadata_chksum; /* Computed metadata checksum value */
+#ifndef NDEBUG
+ /* verify that flush dependencies are working correctly. Do this
+ * by verifying that either:
+ *
+ * 1) the header has a root iblock, and that the root iblock and all
+ * of its children are clean, or
+ *
+ * 2) The header has a root dblock, which is clean, or
+ *
+ * 3) The heap is empty, and thus the header has neither a root
+ * iblock no a root dblock. In this case, the flush ordering
+ * constraint is met by default.
+ *
+ * Do this with a call to H5HF_cache_verify_hdr_descendants_clean().
+ */
+ hbool_t descendants_clean = TRUE;
+
+ if ( H5HF_cache_verify_hdr_descendants_clean(f, dxpl_id, hdr,
+ &descendants_clean) < 0 )
+
+ HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, \
+ "can't verify hdr descendants clean.")
+
+ HDassert( descendants_clean );
+
+#endif /* NDEBUG */
+
/* Set the shared heap header's file context for this operation */
hdr->f = f;
@@ -778,6 +832,10 @@ H5HF_cache_iblock_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
/* Address of parent block */
iblock->parent = udata->par_info->iblock;
+ /* this copy of the parent pointer is needed by the notify callback so */
+ /* that it can take down flush dependencies on eviction even if */
+ /* the parent pointer has been nulled out. JRM -- 5/18/14 */
+ iblock->fd_parent = udata->par_info->iblock;
iblock->par_entry = udata->par_info->entry;
if(iblock->parent) {
/* Share parent block */
@@ -927,6 +985,34 @@ H5HF_cache_iblock_flush(H5F_t *f, hid_t dxpl_id, hbool_t destroy, haddr_t addr,
uint32_t metadata_chksum; /* Computed metadata checksum value */
size_t u; /* Local index variable */
+#ifndef NDEBUG
+ /* verify that flush dependencies are working correctly. Do this
+ * by verifying that all children of this iblock are clean.
+ */
+ hbool_t descendants_clean = TRUE;
+ unsigned iblock_status;
+
+ if ( H5AC_get_entry_status(f, iblock->addr, &iblock_status) < 0 )
+
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "can't get iblock status")
+
+ /* since the current iblock is the guest of honor in a flush, we know
+ * that it is locked into the cache for the duration of the call. Hence
+ * there is no need to check to see if it is pinned or protected, or to
+ * protect it if it is not.
+ */
+
+ if ( H5HF_cache_verify_iblock_descendants_clean(f, dxpl_id,
+ iblock, &iblock_status,
+ &descendants_clean) < 0 )
+
+ HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, \
+ "can't verify descendants clean.")
+
+ HDassert(descendants_clean);
+
+#endif /* NDEBUG */
+
/* Get the pointer to the shared heap header */
hdr = iblock->hdr;
@@ -1165,6 +1251,131 @@ done:
/*-------------------------------------------------------------------------
+ * Function: H5HF_cache_iblock_notify
+ *
+ * Purpose: Setup / takedown flush dependencies as indirect blocks
+ * are loaded / inserted and evicted from the metadata cache.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: John Mainzer
+ * 5/17/14
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5HF_cache_iblock_notify(H5C_notify_action_t action, H5HF_indirect_t *iblock)
+{
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI_NOINIT
+
+ /*
+ * Check arguments.
+ */
+ HDassert(iblock);
+ HDassert(iblock->cache_info.magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
+ HDassert(iblock->hdr);
+ if ( action == H5C_NOTIFY_ACTION_BEFORE_EVICT )
+ HDassert((iblock->parent == iblock->fd_parent) ||
+ ((NULL == iblock->parent) && (iblock->fd_parent)));
+ else
+ HDassert(iblock->parent == iblock->fd_parent);
+
+ /* further sanity checks */
+ if ( iblock->parent == NULL ) {
+
+ /* Either this is the root iblock, or the parent pointer is */
+ /* invalid. Since we save a copy of the parent pointer on */
+ /* the insertion event, it doesn't matter if the parent pointer */
+ /* is invalid just before eviction. However, we will not be */
+ /* able to function if it is invalid on the insertion event. */
+ /* Scream and die if this is the case. */
+
+ HDassert((action == H5C_NOTIFY_ACTION_BEFORE_EVICT) ||
+ (iblock->block_off == 0));
+
+ /* pointer from hdr to root iblock will not be set up unless */
+ /* the fractal heap has already pinned the hdr. Do what */
+ /* sanity checking we can. */
+
+ if ( ( iblock->block_off == 0 ) &&
+ ( iblock->hdr->root_iblock_flags & H5HF_ROOT_IBLOCK_PINNED ) )
+ HDassert(iblock->hdr->root_iblock == iblock);
+
+ } else {
+ /* if this is a child iblock, verify that the pointers are */
+ /* either uninitialized or set up correctly. */
+ H5HF_indirect_t *par_iblock = iblock->parent;
+ unsigned indir_idx; /* Index in parent's child iblock pointer array */
+
+ /* Sanity check */
+ HDassert(par_iblock->child_iblocks);
+ HDassert(iblock->par_entry >= (iblock->hdr->man_dtable.max_direct_rows
+ * iblock->hdr->man_dtable.cparam.width));
+
+ /* Compute index in parent's child iblock pointer array */
+ indir_idx = iblock->par_entry -
+ (iblock->hdr->man_dtable.max_direct_rows
+ * iblock->hdr->man_dtable.cparam.width);
+
+ /* The pointer to iblock in the parent may not be set yet -- */
+ /* verify that it is either NULL, or that it has been set to */
+ /* iblock. */
+ HDassert((NULL == par_iblock->child_iblocks[indir_idx]) ||
+ (par_iblock->child_iblocks[indir_idx] == iblock));
+ }
+
+ switch ( action )
+ {
+ case H5C_NOTIFY_ACTION_AFTER_INSERT:
+ if ( iblock->parent ) /* this is a child iblock */
+ {
+ /* create flush dependency with parent iblock */
+ if(H5AC_create_flush_dependency(iblock->parent, iblock) < 0)
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTDEPEND, FAIL, \
+ "unable to create flush dependency")
+ }
+ else /* this is the root iblock */
+ {
+ /* create flush dependency with header */
+ if(H5AC_create_flush_dependency(iblock->hdr, iblock) < 0)
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTDEPEND, FAIL, \
+ "unable to create flush dependency")
+ }
+ break;
+
+ case H5C_NOTIFY_ACTION_BEFORE_EVICT:
+ if ( iblock->fd_parent ) /* this is a child iblock */
+ {
+ /* destroy flush dependency with parent iblock */
+ if(H5AC_destroy_flush_dependency(iblock->fd_parent,
+ iblock) < 0)
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTUNDEPEND, FAIL, \
+ "unable to destroy flush dependency")
+ }
+ else /* this is the root iblock */
+ {
+ /* destroy flush dependency with header */
+ if(H5AC_destroy_flush_dependency(iblock->hdr, iblock) < 0)
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTUNDEPEND, FAIL, \
+ "unable to destroy flush dependency")
+
+ }
+ break;
+
+ default:
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, \
+ "unknown action from metadata cache")
+ break;
+ }
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5HF_cache_iblock_notify() */
+
+
+/*-------------------------------------------------------------------------
* Function: H5HF_cache_iblock_size
*
* Purpose: Compute the size in bytes of a fractal heap indirect block
@@ -1328,6 +1539,7 @@ H5HF_cache_dblock_load(H5F_t *f, hid_t dxpl_id, haddr_t addr, void *_udata)
/* Address of parent block */
dblock->parent = par_info->iblock;
+ dblock->fd_parent = par_info->iblock;
dblock->par_entry = par_info->entry;
if(dblock->parent) {
/* Share parent block */
@@ -1736,6 +1948,89 @@ done:
/*-------------------------------------------------------------------------
+ * Function: H5HF_cache_dblock_notify
+ *
+ * Purpose: Setup / takedown flush dependencies as direct blocks
+ * are loaded / inserted and evicted from the metadata cache.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: John Mainzer
+ * 5/17/14
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+H5HF_cache_dblock_notify(H5C_notify_action_t action, H5HF_direct_t *dblock)
+{
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI_NOINIT
+
+ /*
+ * Check arguments.
+ */
+ HDassert(dblock);
+ HDassert(dblock->cache_info.magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
+ HDassert(dblock->hdr);
+ HDassert((dblock->fd_parent) ||
+ ((dblock->hdr->man_dtable.curr_root_rows == 0) &&
+ (dblock->block_off == (hsize_t)0)));
+
+ switch ( action )
+ {
+ case H5C_NOTIFY_ACTION_AFTER_INSERT:
+ HDassert(dblock->parent == dblock->fd_parent);
+
+ if ( dblock->parent ) /* this is a leaf dblock */
+ {
+ /* create flush dependency with parent iblock */
+ if(H5AC_create_flush_dependency(dblock->parent, dblock) < 0)
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTDEPEND, FAIL, \
+ "unable to create flush dependency")
+ }
+ else /* this is a root dblock */
+ {
+ /* create flush dependency with header */
+ if(H5AC_create_flush_dependency(dblock->hdr, dblock) < 0)
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTDEPEND, FAIL, \
+ "unable to create flush dependency")
+ }
+ break;
+
+ case H5C_NOTIFY_ACTION_BEFORE_EVICT:
+ HDassert((dblock->parent == dblock->fd_parent) ||
+ ((NULL == dblock->parent) && (dblock->fd_parent)));
+ if ( dblock->fd_parent ) /* this is a leaf dblock */
+ {
+ /* destroy flush dependency with parent iblock */
+ if(H5AC_destroy_flush_dependency(dblock->fd_parent,
+ dblock) < 0)
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTUNDEPEND, FAIL, \
+ "unable to destroy flush dependency")
+ }
+ else /* this is a root dblock */
+ {
+ /* destroy flush dependency with header */
+ if(H5AC_destroy_flush_dependency(dblock->hdr, dblock) < 0)
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTUNDEPEND, FAIL, \
+ "unable to destroy flush dependency")
+
+ }
+ break;
+
+ default:
+ HGOTO_ERROR(H5E_ARGS, H5E_BADVALUE, FAIL, \
+ "unknown action from metadata cache")
+ break;
+ }
+
+done:
+ FUNC_LEAVE_NOAPI(ret_value)
+} /* end H5HF_cache_dblock_notify() */
+
+
+/*-------------------------------------------------------------------------
* Function: H5HF_cache_dblock_size
*
* Purpose: Compute the size in bytes of a fractal heap direct block
@@ -1765,3 +2060,818 @@ H5HF_cache_dblock_size(const H5F_t UNUSED *f, const H5HF_direct_t *dblock, size_
FUNC_LEAVE_NOAPI(SUCCEED)
} /* H5HF_cache_dblock_size() */
+
+
+/*------------------------------------------------------------------------
+ * Function: H5HF_cache_verify_hdr_descendants_clean
+ *
+ * Purpose: Sanity checking routine that verifies that all indirect
+ * and direct blocks that are descendants of the supplied
+ * instance of H5HF_hdr_t are clean. Set *clean_ptr to
+ * TRUE if this is the case, and to FALSE otherwise.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: John Mainzer
+ * 5/25/14
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef NDEBUG
+static herr_t
+H5HF_cache_verify_hdr_descendants_clean(H5F_t *f,
+ hid_t dxpl_id,
+ H5HF_hdr_t * hdr,
+ hbool_t *clean_ptr)
+{
+ hbool_t in_cache;
+ hbool_t type_ok;
+ hbool_t root_iblock_in_cache = FALSE;
+ hbool_t unprotect_root_iblock = FALSE;
+ unsigned hdr_status = 0;
+ unsigned root_iblock_status = 0;
+ unsigned root_dblock_status = 0;
+ H5HF_indirect_t * root_iblock = NULL;
+ haddr_t hdr_addr;
+ haddr_t root_iblock_addr = HADDR_UNDEF;
+ haddr_t root_dblock_addr;
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI(FAIL)
+
+ HDassert(f);
+ HDassert(hdr);
+ HDassert(hdr->cache_info.magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
+ HDassert((const H5AC_class_t *)(hdr->cache_info.type) == \
+ &(H5AC_FHEAP_HDR[0]));
+ HDassert(clean_ptr);
+
+ hdr_addr = hdr->cache_info.addr;
+
+ HDassert(hdr_addr == hdr->heap_addr);
+
+ if ( H5AC_get_entry_status(f, hdr_addr, &hdr_status) < 0 )
+
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "can't get hdr status")
+
+ HDassert(hdr_status & H5AC_ES__IN_CACHE);
+
+ /* We have three basic scenarios we have to deal with:
+ *
+ * The first, and most common case, is that there is a root iblock.
+ * In this case we need to verify that the root iblock and all its
+ * children are clean.
+ *
+ * The second, and much less common case, is that in which the
+ * the fractal heap contains only one direct block, which is
+ * pointed to by hdr->man_dtable.table_addr. In this case, all we
+ * need to do is verify that the root direct block is clean.
+ *
+ * Finally, it is possible that the fractal heap is empty, and
+ * has neither a root indirect block nor a root direct block.
+ * In this case, we have nothing to do.
+ */
+
+ /* There are two ways in which we can arrive at the first scenario.
+ *
+ * By far the most common is when hdr->root_iblock contains a pointer
+ * to the root iblock -- in this case the root iblock is almost certainly
+ * pinned, although we can't count on that.
+ *
+ * However, it is also possible that there is a root iblock that
+ * is no longer pointed to by the header. In this case, the on
+ * disk address of the iblock will be in hdr->man_dtable.table_addr
+ * and hdr->man_dtable.curr_root_rows will contain a positive value.
+ *
+ * Since the former case is far and away the most common, we don't
+ * worry too much about efficiency in the second case.
+ */
+
+ if ( ( hdr->root_iblock ) ||
+ ( ( hdr->man_dtable.curr_root_rows > 0 ) &&
+ ( HADDR_UNDEF != hdr->man_dtable.table_addr ) ) ) {
+
+ root_iblock = hdr->root_iblock;
+
+ /* make note of the on disk address of the root iblock */
+
+ if ( root_iblock == NULL ) {
+
+ /* hdr->man_dtable.table_addr must contain address of root
+ * iblock. Check to see if it is in cache. If it is,
+ * protect it and put its address in root_iblock.
+ */
+ root_iblock_addr = hdr->man_dtable.table_addr;
+
+ } else {
+
+ root_iblock_addr = root_iblock->addr;
+ }
+
+ /* get the status of the root iblock */
+ HDassert(root_iblock_addr != HADDR_UNDEF);
+
+ if ( H5AC_get_entry_status(f, root_iblock_addr,
+ &root_iblock_status) < 0 )
+
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, \
+ "can't get root iblock status")
+
+ root_iblock_in_cache = ( (root_iblock_status & H5AC_ES__IN_CACHE) != 0 );
+
+ HDassert(root_iblock_in_cache || (root_iblock == NULL));
+
+ if ( ! root_iblock_in_cache ) { /* we are done */
+
+ *clean_ptr = TRUE;
+
+ } else if ( root_iblock_status & H5AC_ES__IS_DIRTY ) {
+
+ *clean_ptr = FALSE;
+
+ } else { /* must examine children */
+
+ /* At this point, the root iblock may be pinned, protected,
+ * both, or neither, and we may or may not have a pointer
+ * to root iblock in memory.
+ *
+ * Before we call H5HF_cache_verify_iblock_descendants_clean(),
+ * we must ensure that the root iblock is either pinned or
+ * protected or both, and that we have a pointer to it.
+ * Do this as follows:
+ */
+ if ( root_iblock == NULL ) { /* we don't have ptr to root iblock */
+
+ if ( 0 == (root_iblock_status & H5AC_ES__IS_PROTECTED) ) {
+
+ /* just protect the root iblock -- this will give us
+ * the pointer we need to proceed, and ensure that
+ * it is locked into the metadata cache for the
+ * duration.
+ *
+ * Note that the udata is only used in the load callback.
+ * While the fractal heap makes heavy use of the udata
+ * in this case, since we know that the entry is in cache,
+ * we can pass NULL udata.
+ */
+
+ root_iblock = (H5HF_indirect_t *)H5AC_protect(f, dxpl_id,
+ H5AC_FHEAP_IBLOCK,
+ root_iblock_addr,
+ NULL, H5AC_READ);
+
+ if ( NULL == root_iblock )
+
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTPROTECT, FAIL, \
+ "H5AC_protect() faild.")
+
+ unprotect_root_iblock = TRUE;
+
+ } else {
+
+ /* the root iblock is protected, and we have no
+ * legitimate way of getting a pointer to it.
+ *
+ * We square this circle by using the
+ * H5AC_get_entry_ptr_from_addr() to get the needed
+ * pointer.
+ *
+ * WARNING: This call should be used only in debugging
+ * routines, and it should be avoided there when
+ * possible.
+ *
+ * Further, if we ever multi-thread the cache,
+ * this routine will have to be either discarded
+ * or heavily re-worked.
+ *
+ * Finally, keep in mind that the entry whose
+ * pointer is obtained in this fashion may not
+ * be in a stable state.
+ *
+ * Assuming that the flush dependency code is working
+ * as it should, the only reason for the root iblock to
+ * be unpinned is if none of its children are in cache.
+ * This unfortunately means that if it is protected and
+ * not pinned, the fractal heap is in the process of loading
+ * or inserting one of its children. The obvious implication
+ * is that there is a significant chance that the root
+ * iblock is in an unstable state.
+ *
+ * All this suggests that using H5AC_get_entry_ptr_from_addr()
+ * to obtain the pointer to the protected root iblock is
+ * questionable here. However, since this is test/debugging
+ * code, I expect that we will use this approach until it
+ * causes problems, or we think of a better way.
+ */
+ if ( H5AC_get_entry_ptr_from_addr(f, root_iblock_addr,
+ (void **)(&root_iblock)) < 0 )
+
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, \
+ "H5AC_get_entry_ptr_from_addr() failed.")
+
+ HDassert(root_iblock);
+ }
+ } else /* root_iblock != NULL */ {
+
+ /* we have the pointer to the root iblock. Protect it
+ * if it is neither pinned nor protected -- otherwise we
+ * are ready to go.
+ */
+ H5HF_indirect_t * iblock = NULL;
+
+ if ( ( (root_iblock_status & H5AC_ES__IS_PINNED) == 0 ) &&
+ ( (root_iblock_status & H5AC_ES__IS_PROTECTED) == 0 ) ) {
+
+ /* the root iblock is neither pinned nor protected -- hence
+ * we must protect it before we proceed
+ *
+ * Note that the udata is only used in the load callback.
+ * While the fractal heap makes heavy use of the udata
+ * in this case, since we know that the entry is in cache,
+ * we can pass NULL udata.
+ */
+
+ iblock = (H5HF_indirect_t *)H5AC_protect(f, dxpl_id,
+ H5AC_FHEAP_IBLOCK,
+ root_iblock_addr,
+ NULL, H5AC_READ);
+
+ if ( NULL == iblock )
+
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTPROTECT, FAIL, \
+ "H5AC_protect() faild.")
+
+ unprotect_root_iblock = TRUE;
+
+ HDassert(iblock == root_iblock);
+
+ }
+ }
+
+ /* at this point, one way or another, the root iblock is locked
+ * in memory for the duration of the call. Do some sanity checks,
+ * and then call H5HF_cache_verify_iblock_descendants_clean().
+ */
+
+ HDassert(hdr->root_iblock->cache_info.magic == \
+ H5C__H5C_CACHE_ENTRY_T_MAGIC);
+ HDassert((const H5AC_class_t *)(hdr->root_iblock->cache_info.type) \
+ == &(H5AC_FHEAP_IBLOCK[0]));
+
+ if ( H5HF_cache_verify_iblock_descendants_clean(f, dxpl_id,
+ root_iblock, &root_iblock_status,
+ clean_ptr) < 0 )
+
+ HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, \
+ "can't verify root iblock & descendants clean.")
+
+
+ /* unprotect the root indirect block if required */
+ if ( unprotect_root_iblock ) {
+
+ HDassert(root_iblock);
+
+ if ( H5AC_unprotect(f, dxpl_id, H5AC_FHEAP_IBLOCK,
+ root_iblock_addr, root_iblock,
+ H5AC__NO_FLAGS_SET) < 0 )
+
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTUNPROTECT, FAIL, \
+ "H5AC_unprotect() faild.")
+ }
+ }
+ } else if ( ( hdr->man_dtable.curr_root_rows == 0 ) &&
+ ( HADDR_UNDEF != hdr->man_dtable.table_addr ) ) {
+
+ /* this is scenario 2 -- we have a root dblock */
+
+ root_dblock_addr = hdr->man_dtable.table_addr;
+
+ if ( H5AC_get_entry_status(f, root_dblock_addr,
+ &root_dblock_status) < 0 )
+
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, \
+ "can't get root dblock status")
+
+ if ( root_dblock_status & H5AC_ES__IN_CACHE ) {
+
+ if ( H5AC_verify_entry_type(f, root_dblock_addr,
+ &H5AC_FHEAP_DBLOCK[0],
+ &in_cache, &type_ok) < 0 )
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL,
+ "can't check dblock type")
+
+ HDassert(in_cache);
+
+ if ( !type_ok )
+
+ HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, \
+ "root dblock addr doesn't refer to a dblock?!?")
+
+ /* If a root dblock is in cache, it must have a flush
+ * dependency relationship with the header, and it
+ * may not be the parent in any flush dependency
+ * relationship.
+ *
+ * We don't test this fully, but we will verify that
+ * the root iblock is a child in some flush dependency
+ * relationship.
+ */
+ if ( 0 == (root_dblock_status & H5AC_ES__IS_FLUSH_DEP_CHILD) )
+
+ HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, \
+ "root dblock in cache and not a flush dep child.")
+
+ if ( 0 != (root_dblock_status & H5AC_ES__IS_FLUSH_DEP_PARENT) )
+
+ HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, \
+ "root dblock in cache and is a flush dep parent.")
+
+
+ *clean_ptr = ! (root_dblock_status & H5AC_ES__IS_DIRTY);
+
+ } else { /* root dblock not in cache */
+
+ *clean_ptr = TRUE;
+ }
+ } else {
+ /* this is scenario 3 -- the fractal heap is empty, and we
+ * have nothing to do.
+ */
+ *clean_ptr = TRUE;
+ }
+
+done:
+
+ FUNC_LEAVE_NOAPI(ret_value)
+
+} /* H5HF_cache_verify_hdr_descendants_clean() */
+
+#endif /* NDEBUG */
+
+
+/*------------------------------------------------------------------------
+ * Function: H5HF_cache_verify_iblock_descendants_clean
+ *
+ * Purpose: Sanity checking routine that verifies that all indirect
+ * and direct blocks that are decendents of the supplied
+ * instance of H5HF_indirect_t are clean. Set *clean_ptr
+ * to TRUE if this is the case, and to FALSE otherwise.
+ *
+ * In passing, the function also does a cursory check to
+ * spot any obvious errors in the flush dependency setup.
+ * If any problems are found, the function returns failure.
+ * Note that these checks are not exhaustive, thus passing
+ * them does not mean that the flush dependencies are
+ * correct -- only that there is nothing obviously wrong
+ * with them.
+ *
+ * WARNING: At its top level call, this function is
+ * intended to be called from H5HF_cache_iblock_flush(),
+ * and thus presumes that the supplied indirect block
+ * is in cache. Any other use of this function and
+ * its descendants must insure that this assumption is
+ * met.
+ *
+ * Note that this function and
+ * H5HF_cache_verify_descendant_iblocks_clean() are
+ * recursive co-routines.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: John Mainzer
+ * 5/25/14
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef NDEBUG
+static herr_t
+H5HF_cache_verify_iblock_descendants_clean(H5F_t *f,
+ hid_t dxpl_id,
+ H5HF_indirect_t * iblock,
+ unsigned * iblock_status_ptr,
+ hbool_t *clean_ptr)
+{
+ hbool_t has_dblocks = FALSE;
+ hbool_t has_iblocks = FALSE;
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI(FAIL)
+
+ HDassert(f);
+ HDassert(iblock);
+ HDassert(iblock->cache_info.magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
+ HDassert((const H5AC_class_t *)(iblock->cache_info.type) == \
+ &(H5AC_FHEAP_IBLOCK[0]));
+ HDassert(iblock_status_ptr);
+ HDassert(clean_ptr);
+ HDassert(*clean_ptr);
+
+ if ( ( *clean_ptr ) &&
+ ( H5HF_cache_verify_iblocks_dblocks_clean(f, iblock, clean_ptr,
+ &has_dblocks) < 0 ) )
+ HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, "can't verify dblocks clean.")
+
+ if ( ( *clean_ptr ) &&
+ ( H5HF_cache_verify_descendant_iblocks_clean(f, dxpl_id, iblock,
+ clean_ptr, &has_iblocks) < 0 ) )
+ HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, "can't verify iblocks clean.")
+
+ if ( ( NULL == iblock_status_ptr ) &&
+ ( H5AC_get_entry_status(f, iblock->addr, iblock_status_ptr) < 0 ) )
+
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, "can't get iblock status")
+
+ /* verify that flush dependency setup is plausible */
+
+ if ( 0 == (*iblock_status_ptr & H5AC_ES__IS_FLUSH_DEP_CHILD) )
+
+ HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, \
+ "iblock is not a flush dep child.")
+
+ if ( ( ( has_dblocks || has_iblocks ) ) &&
+ ( 0 == (*iblock_status_ptr & H5AC_ES__IS_FLUSH_DEP_PARENT) ) )
+
+ HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, \
+ "iblock has children and is not a flush dep parent.")
+
+ if ( ( ( has_dblocks || has_iblocks ) ) &&
+ ( 0 == (*iblock_status_ptr & H5AC_ES__IS_PINNED) ) )
+
+ HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, \
+ "iblock has children and is not pinned.")
+
+done:
+
+ FUNC_LEAVE_NOAPI(ret_value)
+
+} /* H5HF_cache_verify_iblock_descendants_clean() */
+
+#endif /* NDEBUG */
+
+
+/*------------------------------------------------------------------------
+ * Function: H5HF_cache_verify_iblocks_dblocks_clean
+ *
+ * Purpose: Sanity checking routine that attempts to verify that all
+ * direct blocks pointed to by the supplied indirect block
+ * are either clean, or not in the cache.
+ *
+ * In passing, the function also does a cursory check to
+ * spot any obvious errors in the flush dependency setup.
+ * If any problems are found, the function returns failure.
+ * Note that these checks are not exhaustive, thus passing
+ * them does not mean that the flush dependencies are
+ * correct -- only that there is nothing obviously wrong
+ * with them.
+ *
+ * WARNING: This function presumes that the supplied
+ * iblock is in the cache, and will not be removed
+ * during the call. Caller must ensure that this is
+ * the case before the call.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: John Mainzer
+ * 5/25/14
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef NDEBUG
+static herr_t
+H5HF_cache_verify_iblocks_dblocks_clean(H5F_t *f,
+ H5HF_indirect_t * iblock,
+ hbool_t *clean_ptr,
+ hbool_t *has_dblocks_ptr)
+{
+ hbool_t in_cache;
+ hbool_t type_ok;
+ unsigned i;
+ unsigned num_direct_rows;
+ unsigned max_dblock_index;
+ haddr_t dblock_addr;
+ unsigned dblock_status = 0;
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI(FAIL)
+
+ HDassert(f);
+ HDassert(iblock);
+ HDassert(iblock->cache_info.magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
+ HDassert(iblock->cache_info.type == H5AC_FHEAP_IBLOCK);
+ HDassert(clean_ptr);
+ HDassert(*clean_ptr);
+ HDassert(has_dblocks_ptr);
+
+ i = 0;
+
+ num_direct_rows =
+ MIN(iblock->nrows, iblock->hdr->man_dtable.max_direct_rows);
+
+ HDassert(num_direct_rows <= iblock->nrows );
+
+ max_dblock_index =
+ (num_direct_rows * iblock->hdr->man_dtable.cparam.width) - 1;
+
+ while ( ( *clean_ptr ) && ( i <= max_dblock_index ) ) {
+
+ dblock_addr = iblock->ents[i].addr;
+
+ if ( H5F_addr_defined(dblock_addr) ) {
+
+ if ( H5AC_verify_entry_type(f, dblock_addr, &H5AC_FHEAP_DBLOCK[0],
+ &in_cache, &type_ok) < 0 )
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL,
+ "can't check dblock type")
+
+ if ( in_cache ) { /* dblock is in cache */
+
+ if ( ! type_ok )
+ HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, \
+ "dblock addr doesn't refer to a dblock?!?")
+
+ if ( H5AC_get_entry_status(f, dblock_addr,
+ &dblock_status) < 0 )
+
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL,
+ "can't get dblock status")
+
+ HDassert(dblock_status & H5AC_ES__IN_CACHE );
+
+ *has_dblocks_ptr = TRUE;
+
+ if ( dblock_status & H5AC_ES__IS_DIRTY ) {
+
+ *clean_ptr = FALSE;
+ }
+
+ /* If a child dblock is in cache, it must have a flush
+ * dependency relationship with this iblock, and it
+ * may not be the parent in any flush dependency
+ * relationship.
+ *
+ * We don't test this fully, but we will verify that
+ * the child iblock is a child in some flush dependency
+ * relationship.
+ */
+ if ( 0 == (dblock_status & H5AC_ES__IS_FLUSH_DEP_CHILD) )
+
+ HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, \
+ "dblock in cache and not a flush dep child.")
+
+ if ( 0 != (dblock_status & H5AC_ES__IS_FLUSH_DEP_PARENT) )
+
+ HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, \
+ "dblock in cache and is a flush dep parent.")
+
+ }
+ }
+
+ i++;
+ }
+
+done:
+
+ FUNC_LEAVE_NOAPI(ret_value)
+
+} /* H5HF_cache_verify_iblocks_dblocks_clean() */
+
+#endif /* NDEBUG */
+
+
+/*------------------------------------------------------------------------
+ * Function: H5HF_cache_verify_descendant_iblocks_clean
+ *
+ * Purpose: Sanity checking routine that attempts to verify that all
+ * direct blocks pointed to by the supplied indirect block
+ * are either clean, or not in the cache.
+ *
+ * In passing, the function also does a cursory check to
+ * spot any obvious errors in the flush dependency setup.
+ * If any problems are found, the function returns failure.
+ * Note that these checks are not exhaustive, thus passing
+ * them does not mean that the flush dependencies are
+ * correct -- only that there is nothing obviously wrong
+ * with them.
+ *
+ * WARNING: This function presumes that the supplied
+ * iblock is in the cache, and will not be removed
+ * during the call. Caller must ensure that this is
+ * the case before the call.
+ *
+ * Return: Non-negative on success/Negative on failure
+ *
+ * Programmer: John Mainzer
+ * 5/25/14
+ *
+ *-------------------------------------------------------------------------
+ */
+#ifndef NDEBUG
+static herr_t
+H5HF_cache_verify_descendant_iblocks_clean(H5F_t *f,
+ hid_t dxpl_id,
+ H5HF_indirect_t * iblock,
+ hbool_t *clean_ptr,
+ hbool_t *has_iblocks_ptr)
+{
+ hbool_t unprotect_child_iblock;
+ unsigned i;
+ unsigned first_iblock_index;
+ unsigned last_iblock_index;
+ unsigned num_direct_rows;
+ unsigned child_iblock_status = 0;
+ haddr_t child_iblock_addr;
+ H5HF_indirect_t * child_iblock_ptr;
+ herr_t ret_value = SUCCEED; /* Return value */
+
+ FUNC_ENTER_NOAPI(FAIL)
+
+ HDassert(f);
+ HDassert(iblock);
+ HDassert(iblock->cache_info.magic == H5C__H5C_CACHE_ENTRY_T_MAGIC);
+ HDassert(iblock->cache_info.type == &(H5AC_FHEAP_IBLOCK[0]));
+ HDassert(clean_ptr);
+ HDassert(*clean_ptr);
+ HDassert(has_iblocks_ptr);
+
+ num_direct_rows =
+ MIN(iblock->nrows, iblock->hdr->man_dtable.max_direct_rows);
+
+ HDassert(num_direct_rows <= iblock->nrows );
+
+ first_iblock_index = num_direct_rows * iblock->hdr->man_dtable.cparam.width;
+ last_iblock_index =
+ (iblock->nrows * iblock->hdr->man_dtable.cparam.width) - 1;
+
+ i = first_iblock_index;
+
+ while ( ( *clean_ptr ) && ( i <= last_iblock_index ) ) {
+
+ child_iblock_addr = iblock->ents[i].addr;
+
+ if ( H5F_addr_defined(child_iblock_addr) ) {
+
+ if ( H5AC_get_entry_status(f, child_iblock_addr,
+ &child_iblock_status) < 0 )
+
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, \
+ "can't get iblock status")
+
+ if ( child_iblock_status & H5AC_ES__IN_CACHE ) {
+
+ *has_iblocks_ptr = TRUE;
+
+ if ( child_iblock_status & H5AC_ES__IS_DIRTY ) {
+
+ *clean_ptr = FALSE;
+ }
+
+ /* if the child iblock is in cache and *clean_ptr is TRUE,
+ * we must continue to explore down the fractal heap tree
+ * structure to verify that all descendant blocks are either
+ * clean, or not in the metadata cache. We do this with a
+ * recursive call to
+ * H5HF_cache_verify_iblock_descendants_clean().
+ * However, we can't make this call unless the child iblock
+ * is somehow locked into the cache -- typically via either
+ * pinning or protecting.
+ *
+ * If the child iblock is pinned, we can look up its pointer
+ * on the current iblock's pinned child iblock list, and
+ * and use that pointer in the recursive call.
+ *
+ * If the entry is unprotected and unpinned, we simply
+ * protect it.
+ *
+ * If, however, the the child iblock is already protected,
+ * but not pinned, we have a bit of a problem, as we have
+ * no legitimate way of looking up its pointer in memory.
+ *
+ * To solve this problem, I have added a new metadata cache
+ * call to obtain the pointer.
+ *
+ * WARNING: This call should be used only in debugging
+ * routines, and it should be avoided there when
+ * possible.
+ *
+ * Further, if we ever multi-thread the cache,
+ * this routine will have to be either discarded
+ * or heavily re-worked.
+ *
+ * Finally, keep in mind that the entry whose
+ * pointer is obtained in this fashion may not
+ * be in a stable state.
+ *
+ * Assuming that the flush dependency code is working
+ * as it should, the only reason for the child entry to
+ * be unpinned is if none of its children are in cache.
+ * This unfortunately means that if it is protected and
+ * not pinned, the fractal heap is in the process of loading
+ * or inserting one of its children. The obvious implication
+ * is that there is a significant chance that the child
+ * iblock is in an unstable state.
+ *
+ * All this suggests that using the new call to obtain the
+ * pointer to the protected child iblock is questionable
+ * here. However, since this is test/debugging code, I
+ * expect that we will use this approach until it causes
+ * problems, or we think of a better way.
+ */
+ if ( *clean_ptr ) {
+
+ child_iblock_ptr = NULL;
+ unprotect_child_iblock = FALSE;
+
+ if ( 0 == (child_iblock_status & H5AC_ES__IS_PINNED)) {
+
+ /* child iblock is not pinned */
+
+ if (0 == (child_iblock_status & H5AC_ES__IS_PROTECTED)){
+
+ /* child iblock is unprotected, and unpinned */
+ /* protect it. Note that the udata is only */
+ /* used in the load callback. While the */
+ /* fractal heap makes heavy use of the udata */
+ /* in this case, since we know that the */
+ /* entry is in cache, we can pass NULL udata */
+ child_iblock_ptr = (H5HF_indirect_t *)
+ H5AC_protect(f, dxpl_id, H5AC_FHEAP_IBLOCK,
+ child_iblock_addr,
+ NULL, H5AC_READ);
+
+ if ( NULL == child_iblock_ptr )
+
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTPROTECT, FAIL, \
+ "H5AC_protect() faild.")
+
+ unprotect_child_iblock = TRUE;
+
+ } else {
+
+ /* child iblock is protected -- use */
+ /* H5AC_get_entry_ptr_from_addr() to get a */
+ /* pointer to the entry. This is very slimy -- */
+ /* come up with a better solution. */
+ if ( H5AC_get_entry_ptr_from_addr(f,
+ child_iblock_addr,
+ (void **)(&child_iblock_ptr)) < 0 )
+
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTGET, FAIL, \
+ "H5AC_get_entry_ptr_from_addr() faild.")
+
+ HDassert ( child_iblock_ptr );
+ }
+ } else {
+ /* child iblock is pinned -- look it up in the */
+ /* parent iblocks child_iblocks array. */
+
+ HDassert(iblock->child_iblocks);
+
+ child_iblock_ptr =
+ iblock->child_iblocks[i - first_iblock_index];
+ }
+
+ /* At this point, one way or another we should have
+ * a pointer to the child iblock. Verify that we
+ * that we have the correct one.
+ */
+ HDassert(child_iblock_ptr);
+ HDassert(child_iblock_ptr->cache_info.magic ==
+ H5C__H5C_CACHE_ENTRY_T_MAGIC);
+ HDassert(child_iblock_ptr->cache_info.type ==
+ H5AC_FHEAP_IBLOCK);
+ HDassert(child_iblock_ptr->addr == child_iblock_addr);
+
+ /* now make the recursive call */
+ if ( H5HF_cache_verify_iblock_descendants_clean(f, dxpl_id,
+ child_iblock_ptr, &child_iblock_status,
+ clean_ptr) < 0 )
+
+ HGOTO_ERROR(H5E_HEAP, H5E_SYSTEM, FAIL, \
+ "can't verify child iblock clean.")
+
+ /* if we protected the child iblock, unprotect it now */
+ if ( unprotect_child_iblock ) {
+
+ if ( H5AC_unprotect(f, dxpl_id, H5AC_FHEAP_IBLOCK,
+ child_iblock_addr, child_iblock_ptr,
+ H5AC__NO_FLAGS_SET) < 0 )
+
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTUNPROTECT, FAIL, \
+ "H5AC_unprotect() faild.")
+
+ }
+ }
+ }
+ }
+
+ i++;
+ }
+
+done:
+
+ FUNC_LEAVE_NOAPI(ret_value)
+
+} /* H5HF_cache_verify_descendant_iblocks_clean() */
+
+#endif /* NDEBUG */
+
diff --git a/src/H5HFdblock.c b/src/H5HFdblock.c
index 36a0c6b..02890ab 100644
--- a/src/H5HFdblock.c
+++ b/src/H5HFdblock.c
@@ -161,6 +161,7 @@ HDmemset(dblock->blk, 0, dblock->size);
/* Attach to parent indirect block, if there is one */
dblock->parent = par_iblock;
+ dblock->fd_parent = par_iblock;
if(dblock->parent)
if(H5HF_man_iblock_attach(dblock->parent, par_entry, dblock_addr) < 0)
HGOTO_ERROR(H5E_HEAP, H5E_CANTATTACH, FAIL, "can't attach direct block to parent indirect block")
diff --git a/src/H5HFiblock.c b/src/H5HFiblock.c
index c989bfc..4473803 100644
--- a/src/H5HFiblock.c
+++ b/src/H5HFiblock.c
@@ -438,7 +438,20 @@ H5HF_man_iblock_root_create(H5HF_hdr_t *hdr, hid_t dxpl_id, size_t min_dblock_si
/* Attach direct block to new root indirect block */
dblock->parent = iblock;
+ dblock->fd_parent = iblock;
dblock->par_entry = 0;
+
+ /* destroy flush dependency between direct block and header */
+ if(H5AC_destroy_flush_dependency(dblock->hdr, dblock) < 0)
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTUNDEPEND, FAIL, \
+ "unable to destroy flush dependency")
+
+ /* create flush dependency between direct block and new root indirect block */
+ if(H5AC_create_flush_dependency(dblock->parent, dblock) < 0)
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTDEPEND, FAIL, \
+ "unable to create flush dependency")
+
+
if(H5HF_man_iblock_attach(iblock, 0, hdr->man_dtable.table_addr) < 0)
HGOTO_ERROR(H5E_HEAP, H5E_CANTATTACH, FAIL, "can't attach root direct block to parent indirect block")
@@ -884,6 +897,19 @@ H5HF_man_iblock_root_revert(H5HF_indirect_t *root_iblock, hid_t dxpl_id)
dblock->parent = NULL;
dblock->par_entry = 0;
+ /* destroy flush dependency between old root iblock and new root direct block*/
+ if(H5AC_destroy_flush_dependency(dblock->fd_parent, dblock) < 0)
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTUNDEPEND, FAIL, \
+ "unable to destroy flush dependency")
+
+
+ /* create flush dependency between header and new root direct block */
+ if(H5AC_create_flush_dependency(dblock->hdr, dblock) < 0)
+ HGOTO_ERROR(H5E_HEAP, H5E_CANTDEPEND, FAIL, \
+ "unable to create flush dependency")
+
+ dblock->fd_parent = NULL;
+
/* Point root at direct block */
hdr->man_dtable.curr_root_rows = 0;
hdr->man_dtable.table_addr = dblock_addr;
@@ -1078,6 +1104,12 @@ H5HF_man_iblock_create(H5HF_hdr_t *hdr, hid_t dxpl_id, H5HF_indirect_t *par_iblo
/* Attach to parent indirect block, if there is one */
iblock->parent = par_iblock;
+ iblock->fd_parent = par_iblock; /* this copy of the parent pointer is */
+ /* needed by the notify callback so */
+ /* that it can take down flush */
+ /* dependencies on eviction even if */
+ /* the parent pointer has been nulled */
+ /* out. JRM -- 5/18/14 */
iblock->par_entry = par_entry;
if(iblock->parent) {
/* Attach new block to parent */
diff --git a/src/H5HFpkg.h b/src/H5HFpkg.h
index 64d6fde..b0eba2f 100644
--- a/src/H5HFpkg.h
+++ b/src/H5HFpkg.h
@@ -385,6 +385,13 @@ struct H5HF_indirect_t {
size_t rc; /* Reference count of objects using this block */
H5HF_hdr_t *hdr; /* Shared heap header info */
struct H5HF_indirect_t *parent; /* Shared parent indirect block info */
+ struct H5HF_indirect_t
+ *fd_parent; /* Saved copy of the parent pointer -- this */
+ /* necessary as the parent field is sometimes */
+ /* nulled out before the eviction notify call */
+ /* is made from the metadata cache. Since */
+ /* this call cancels flush dependencies, it */
+ /* needs this information. */
unsigned par_entry; /* Entry in parent's table */
haddr_t addr; /* Address of this indirect block on disk */
size_t size; /* Size of indirect block on disk */
@@ -408,6 +415,12 @@ typedef struct H5HF_direct_t {
/* Internal heap information */
H5HF_hdr_t *hdr; /* Shared heap header info */
H5HF_indirect_t *parent; /* Shared parent indirect block info */
+ H5HF_indirect_t *fd_parent; /* Saved copy of the parent pointer -- this */
+ /* necessary as the parent field is sometimes */
+ /* nulled out before the eviction notify call */
+ /* is made from the metadata cache. Since */
+ /* this call cancels flush dependencies, it */
+ /* needs this information. */
unsigned par_entry; /* Entry in parent's table */
size_t size; /* Size of direct block */
hsize_t file_size; /* Size of direct block in file (only valid when block's space is being freed) */
diff --git a/src/H5Lpublic.h b/src/H5Lpublic.h
index 620d2e9..20b57e5 100644
--- a/src/H5Lpublic.h
+++ b/src/H5Lpublic.h
@@ -101,7 +101,7 @@ typedef herr_t (*H5L_copy_func_t)(const char *new_name, hid_t new_loc,
const void *lnkdata, size_t lnkdata_size);
/* Callback during link traversal */
-typedef herr_t (*H5L_traverse_func_t)(const char *link_name, hid_t cur_group,
+typedef hid_t (*H5L_traverse_func_t)(const char *link_name, hid_t cur_group,
const void *lnkdata, size_t lnkdata_size, hid_t lapl_id);
/* Callback for when the link is deleted */
diff --git a/src/H5Smpio.c b/src/H5Smpio.c
index 284e16f..1644bd3 100644
--- a/src/H5Smpio.c
+++ b/src/H5Smpio.c
@@ -357,8 +357,6 @@ H5S_mpio_permute_type(const H5S_t *space, size_t elmt_size, hsize_t **permute,
MPI_Aint *disp = NULL; /* Datatype displacement for each point*/
H5S_sel_iter_t sel_iter; /* Selection iteration info */
hbool_t sel_iter_init = FALSE; /* Selection iteration info has been initialized */
- hsize_t off[H5D_IO_VECTOR_SIZE]; /* Array to store sequence offsets */
- size_t len[H5D_IO_VECTOR_SIZE]; /* Array to store sequence lengths */
hssize_t snum_points; /* Signed number of elements in selection */
hsize_t num_points; /* Number of points in the selection */
size_t max_elem; /* Maximum number of elements allowed in sequences */
diff --git a/src/H5config.h.in b/src/H5config.h.in
index 82925bf..daf7d0d 100644
--- a/src/H5config.h.in
+++ b/src/H5config.h.in
@@ -253,9 +253,6 @@
/* Define to 1 if you have the <mpe.h> header file. */
#undef HAVE_MPE_H
-/* Define if MPI_File_get_size works correctly */
-#undef HAVE_MPI_GET_SIZE
-
/* Define if `MPI_Comm_c2f' and `MPI_Comm_f2c' exists */
#undef HAVE_MPI_MULTI_LANG_Comm
@@ -479,10 +476,6 @@
/* Define if the metadata trace file code is to be compiled in */
#undef METADATA_TRACE_FILE
-/* Define if your system's `MPI_File_set_size' function works for files over
- 2GB. */
-#undef MPI_FILE_SET_SIZE_BIG
-
/* Define if we can violate pointer alignment restrictions */
#undef NO_ALIGNMENT_RESTRICTIONS
diff --git a/src/H5public.h b/src/H5public.h
index 750e7ee..78ebc96 100644
--- a/src/H5public.h
+++ b/src/H5public.h
@@ -94,10 +94,10 @@ extern "C" {
/* Version numbers */
#define H5_VERS_MAJOR 1 /* For major interface/format changes */
#define H5_VERS_MINOR 9 /* For minor interface/format changes */
-#define H5_VERS_RELEASE 184 /* For tweaks, bug-fixes, or development */
+#define H5_VERS_RELEASE 190 /* For tweaks, bug-fixes, or development */
#define H5_VERS_SUBRELEASE "swmr0" /* For pre-releases like snap0 */
/* Empty string for real releases. */
-#define H5_VERS_INFO "HDF5 library version: 1.9.184-swmr0" /* Full version string */
+#define H5_VERS_INFO "HDF5 library version: 1.9.190-swmr0" /* Full version string */
#define H5check() H5check_version(H5_VERS_MAJOR,H5_VERS_MINOR, \
H5_VERS_RELEASE)
diff --git a/src/Makefile.in b/src/Makefile.in
index f008e2c..68b1aea 100644
--- a/src/Makefile.in
+++ b/src/Makefile.in
@@ -571,7 +571,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
@@ -735,7 +734,7 @@ CHECK_CLEANFILES = *.chkexe *.chklog *.clog
# Add libtool shared library version numbers to the HDF5 library
# See libtool versioning documentation online.
LT_VERS_INTERFACE = 6
-LT_VERS_REVISION = 174
+LT_VERS_REVISION = 180
LT_VERS_AGE = 0
# Our main target, the HDF5 library
diff --git a/test/CMakeTests.cmake b/test/CMakeTests.cmake
index 9deeb04..4198a4f 100644
--- a/test/CMakeTests.cmake
+++ b/test/CMakeTests.cmake
@@ -254,6 +254,9 @@ foreach (test ${H5_TESTS})
endforeach (test ${H5_TESTS})
set_tests_properties (H5TEST-flush2 PROPERTIES DEPENDS H5TEST-flush1)
+set_tests_properties (H5TEST-fheap PROPERTIES TIMEOUT 1800)
+set_tests_properties (H5TEST-testmeta PROPERTIES TIMEOUT 1800)
+set_tests_properties (H5TEST-big PROPERTIES TIMEOUT 1800)
##############################################################################
##############################################################################
@@ -503,6 +506,7 @@ if (HDF5_TEST_VFD)
-D "TEST_FOLDER=${PROJECT_BINARY_DIR}"
-P "${HDF_RESOURCES_DIR}/vfdTest.cmake"
)
+ set_tests_properties (VFD-${vfdname}-fheap PROPERTIES TIMEOUT 1800)
endif (HDF5_TEST_FHEAP_VFD)
ENDMACRO (ADD_VFD_TEST)
diff --git a/test/Makefile.in b/test/Makefile.in
index e976578..2d50c46 100644
--- a/test/Makefile.in
+++ b/test/Makefile.in
@@ -999,7 +999,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/test/dsets.c b/test/dsets.c
index 768b268..d89d434 100644
--- a/test/dsets.c
+++ b/test/dsets.c
@@ -63,6 +63,7 @@ const char *FILENAME[] = {
"partial_chunks", /* 14 */
"layout_extend", /* 15 */
"swmr_fail", /* 16 */
+ "zero_chunk",
NULL
};
#define FILENAME_BUF_SIZE 1024
@@ -10146,6 +10147,80 @@ error:
/*-------------------------------------------------------------------------
+ * Function: test_zero_dim_dset
+ *
+ * Purpose: Tests support for reading a 1D chunled dataset with
+ * dimension size = 0.
+ *
+ * Return: Success: 0
+ * Failure: -1
+ *
+ * Programmer: Mohamad Chaarawi
+ * Wednesdat, July 9, 2014
+ *
+ *-------------------------------------------------------------------------
+ */
+static herr_t
+test_zero_dim_dset(hid_t fapl)
+{
+ char filename[FILENAME_BUF_SIZE];
+ hid_t fid = -1; /* File ID */
+ hid_t dcpl = -1; /* Dataset creation property list ID */
+ hid_t sid = -1; /* Dataspace ID */
+ hid_t dsid = -1; /* Dataset ID */
+ hsize_t dim, chunk_dim; /* Dataset and chunk dimensions */
+ int data[1];
+
+ TESTING("shrinking large chunk");
+
+ h5_fixname(FILENAME[13], fapl, filename, sizeof filename);
+
+ /* Create file */
+ if((fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, fapl)) < 0) FAIL_STACK_ERROR
+
+ /* Create dataset creation property list */
+ if((dcpl = H5Pcreate(H5P_DATASET_CREATE)) < 0) FAIL_STACK_ERROR
+
+ /* Set 1 chunk size */
+ chunk_dim = 1;
+ if(H5Pset_chunk(dcpl, 1, &chunk_dim) < 0) FAIL_STACK_ERROR
+
+ /* Create 1D dataspace with 0 dim size */
+ dim = 0;
+ if((sid = H5Screate_simple(1, &dim, NULL)) < 0) FAIL_STACK_ERROR
+
+ /* Create chunked dataset */
+ if((dsid = H5Dcreate2(fid, "dset", H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT)) < 0)
+ FAIL_STACK_ERROR
+
+ /* write 0 elements from dataset */
+ if(H5Dwrite(dsid, H5T_NATIVE_INT, sid, sid, H5P_DEFAULT, data) < 0) FAIL_STACK_ERROR
+
+ /* Read 0 elements from dataset */
+ if(H5Dread(dsid, H5T_NATIVE_INT, sid, sid, H5P_DEFAULT, data) < 0) FAIL_STACK_ERROR
+
+ /* Close everything */
+ if(H5Sclose(sid) < 0) FAIL_STACK_ERROR
+ if(H5Dclose(dsid) < 0) FAIL_STACK_ERROR
+ if(H5Pclose(dcpl) < 0) FAIL_STACK_ERROR
+ if(H5Fclose(fid) < 0) FAIL_STACK_ERROR
+
+ PASSED();
+
+ return 0;
+
+error:
+ H5E_BEGIN_TRY {
+ H5Pclose(dcpl);
+ H5Dclose(dsid);
+ H5Sclose(sid);
+ H5Fclose(fid);
+ } H5E_END_TRY;
+ return -1;
+} /* end test_zero_dim_dset() */
+
+
+/*-------------------------------------------------------------------------
* Function: test_scatter
*
* Purpose: Tests H5Dscatter with a variety of different selections
@@ -11303,6 +11378,7 @@ main(void)
nerrors += (test_idx_compatible() < 0 ? 1 : 0);
nerrors += (test_unfiltered_edge_chunks(my_fapl) < 0 ? 1 : 0);
nerrors += (test_large_chunk_shrink(my_fapl) < 0 ? 1 : 0);
+ nerrors += (test_zero_dim_dset(my_fapl) < 0 ? 1 : 0);
if(H5Fclose(file) < 0)
goto error;
diff --git a/testpar/Makefile.in b/testpar/Makefile.in
index 5a866fc..6814acb 100644
--- a/testpar/Makefile.in
+++ b/testpar/Makefile.in
@@ -525,7 +525,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/testpar/t_chunk_alloc.c b/testpar/t_chunk_alloc.c
index e8a6ca4..b2ddc23 100644
--- a/testpar/t_chunk_alloc.c
+++ b/testpar/t_chunk_alloc.c
@@ -36,11 +36,7 @@ get_filesize(const char *filename)
int mpierr;
MPI_File fd;
MPI_Offset filesize;
-#ifndef H5_HAVE_MPI_GET_SIZE
- h5_stat_t stat_buf;
-#endif
-#ifdef H5_HAVE_MPI_GET_SIZE
mpierr = MPI_File_open(MPI_COMM_SELF, (char*)filename, MPI_MODE_RDONLY,
MPI_INFO_NULL, &fd);
VRFY((mpierr == MPI_SUCCESS), "");
@@ -50,16 +46,6 @@ get_filesize(const char *filename)
mpierr = MPI_File_close(&fd);
VRFY((mpierr == MPI_SUCCESS), "");
-#else
- /* Some systems (only SGI Altix Propack 4 so far) doesn't return correct
- * file size for MPI_File_get_size. Use stat instead.
- */
- if((mpierr=HDstat(filename, &stat_buf))<0)
- VRFY((mpierr == MPI_SUCCESS), "");
-
- /* Hopefully this casting is safe */
- filesize = (MPI_Offset)(stat_buf.st_size);
-#endif
return(filesize);
}
diff --git a/testpar/t_mdset.c b/testpar/t_mdset.c
index fa1a980..f294b93 100644
--- a/testpar/t_mdset.c
+++ b/testpar/t_mdset.c
@@ -74,6 +74,63 @@ get_size(void)
} /* get_size() */
/*
+ * Example of using PHDF5 to create a zero sized dataset.
+ *
+ */
+void zero_dim_dset(void)
+{
+ int mpi_size, mpi_rank;
+ const char *filename;
+ hid_t fid, plist, dcpl, dsid, sid;
+ hsize_t dim, chunk_dim;
+ herr_t ret;
+ int data[1];
+
+ MPI_Comm_rank(MPI_COMM_WORLD, &mpi_rank);
+ MPI_Comm_size(MPI_COMM_WORLD, &mpi_size);
+
+ filename = GetTestParameters();
+
+ plist = create_faccess_plist(MPI_COMM_WORLD, MPI_INFO_NULL, facc_type);
+ VRFY((plist>=0), "create_faccess_plist succeeded");
+
+ fid = H5Fcreate(filename, H5F_ACC_TRUNC, H5P_DEFAULT, plist);
+ VRFY((fid>=0), "H5Fcreate succeeded");
+ ret = H5Pclose(plist);
+ VRFY((ret>=0), "H5Pclose succeeded");
+
+ dcpl = H5Pcreate(H5P_DATASET_CREATE);
+ VRFY((dcpl>=0), "failed H5Pcreate");
+
+ /* Set 1 chunk size */
+ chunk_dim = 1;
+ ret = H5Pset_chunk(dcpl, 1, &chunk_dim);
+ VRFY((ret>=0), "failed H5Pset_chunk");
+
+ /* Create 1D dataspace with 0 dim size */
+ dim = 0;
+ sid = H5Screate_simple(1, &dim, NULL);
+ VRFY((sid>=0), "failed H5Screate_simple");
+
+ /* Create chunked dataset */
+ dsid = H5Dcreate2(fid, "dset", H5T_NATIVE_INT, sid, H5P_DEFAULT, dcpl, H5P_DEFAULT);
+ VRFY((dsid>=0), "failed H5Dcreate2");
+
+ /* write 0 elements from dataset */
+ ret = H5Dwrite(dsid, H5T_NATIVE_INT, sid, sid, H5P_DEFAULT, data);
+ VRFY((ret>=0), "failed H5Dwrite");
+
+ /* Read 0 elements from dataset */
+ ret = H5Dread(dsid, H5T_NATIVE_INT, sid, sid, H5P_DEFAULT, data);
+ VRFY((ret>=0), "failed H5Dread");
+
+ H5Pclose(dcpl);
+ H5Dclose(dsid);
+ H5Sclose(sid);
+ H5Fclose(fid);
+}
+
+/*
* Example of using PHDF5 to create ndatasets datasets. Each process write
* a slab of array to the file.
*
diff --git a/testpar/t_mpi.c b/testpar/t_mpi.c
index a74aa22..7bd2f58 100644
--- a/testpar/t_mpi.c
+++ b/testpar/t_mpi.c
@@ -206,7 +206,6 @@ test_mpio_gb_file(char *filename)
MPI_Offset mpi_off;
MPI_Offset mpi_off_old;
MPI_Status mpi_stat;
- h5_stat_t stat_buf;
int is_signed, sizeof_mpi_offset;
nerrs = 0;
@@ -380,13 +379,7 @@ test_mpio_gb_file(char *filename)
mrc = MPI_Barrier(MPI_COMM_WORLD);
VRFY((mrc==MPI_SUCCESS), "Sync before leaving test");
- /*
- * Check if MPI_File_get_size works correctly. Some systems (only SGI Altix
- * Propack 4 so far) return wrong file size. It can be avoided by reconfiguring
- * with "--disable-mpi-size".
- */
-#ifdef H5_HAVE_MPI_GET_SIZE
- printf("Test if MPI_File_get_size works correctly with %s\n", filename);
+ printf("Test if MPI_File_get_size works correctly with %s\n", filename);
mrc = MPI_File_open(MPI_COMM_WORLD, filename, MPI_MODE_RDONLY, info, &fh);
VRFY((mrc==MPI_SUCCESS), "");
@@ -394,14 +387,7 @@ test_mpio_gb_file(char *filename)
if (MAINPROCESS){ /* only process 0 needs to check it*/
mrc = MPI_File_get_size(fh, &size);
VRFY((mrc==MPI_SUCCESS), "");
-
- mrc=HDstat(filename, &stat_buf);
- VRFY((mrc==0), "");
-
- /* Hopefully this casting is safe */
- if(size != (MPI_Offset)(stat_buf.st_size)) {
- printf("Warning: MPI_File_get_size doesn't return correct file size. To avoid using it in the library, reconfigure and rebuild the library with --disable-mpi-size.\n");
- }
+ VRFY((size == mpi_off+MB), "MPI_File_get_size doesn't return correct file size.");
}
/* close file and free the communicator */
@@ -414,9 +400,6 @@ test_mpio_gb_file(char *filename)
*/
mrc = MPI_Barrier(MPI_COMM_WORLD);
VRFY((mrc==MPI_SUCCESS), "Sync before leaving test");
-#else
- printf("Skipped testing MPI_File_get_size because it's disabled\n");
-#endif
}
finish:
diff --git a/testpar/testphdf5.c b/testpar/testphdf5.c
index 0b97c03..057ac88 100644
--- a/testpar/testphdf5.c
+++ b/testpar/testphdf5.c
@@ -377,6 +377,9 @@ int main(int argc, char **argv)
"compressed dataset collective read", PARATESTFILE);
#endif /* H5_HAVE_FILTER_DEFLATE */
+ AddTest("zerodsetr", zero_dim_dset, NULL,
+ "zero dim dset", PARATESTFILE);
+
ndsets_params.name = PARATESTFILE;
ndsets_params.count = ndatasets;
AddTest("ndsetw", multiple_dset_write, NULL,
diff --git a/testpar/testphdf5.h b/testpar/testphdf5.h
index f313073..3597b17 100644
--- a/testpar/testphdf5.h
+++ b/testpar/testphdf5.h
@@ -237,6 +237,7 @@ extern int dxfer_coll_type;
/* Test program prototypes */
void test_plist_ed(void);
+void zero_dim_dset(void);
void multiple_dset_write(void);
void multiple_group_write(void);
void multiple_group_read(void);
diff --git a/tools/Makefile.in b/tools/Makefile.in
index c592973..0b0e2d0 100644
--- a/tools/Makefile.in
+++ b/tools/Makefile.in
@@ -505,7 +505,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/tools/h5copy/Makefile.in b/tools/h5copy/Makefile.in
index fef0136..76573a0 100644
--- a/tools/h5copy/Makefile.in
+++ b/tools/h5copy/Makefile.in
@@ -513,7 +513,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/tools/h5diff/Makefile.in b/tools/h5diff/Makefile.in
index 08008d7..6a8d2ac 100644
--- a/tools/h5diff/Makefile.in
+++ b/tools/h5diff/Makefile.in
@@ -520,7 +520,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/tools/h5dump/Makefile.in b/tools/h5dump/Makefile.in
index f479679..8cb1661 100644
--- a/tools/h5dump/Makefile.in
+++ b/tools/h5dump/Makefile.in
@@ -519,7 +519,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/tools/h5import/Makefile.in b/tools/h5import/Makefile.in
index 5cba138..d3b0185 100644
--- a/tools/h5import/Makefile.in
+++ b/tools/h5import/Makefile.in
@@ -513,7 +513,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/tools/h5jam/Makefile.in b/tools/h5jam/Makefile.in
index a50a9c9..d0c8f16 100644
--- a/tools/h5jam/Makefile.in
+++ b/tools/h5jam/Makefile.in
@@ -525,7 +525,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/tools/h5ls/Makefile.in b/tools/h5ls/Makefile.in
index af9d170..2c4fe10 100644
--- a/tools/h5ls/Makefile.in
+++ b/tools/h5ls/Makefile.in
@@ -505,7 +505,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/tools/h5repack/Makefile.in b/tools/h5repack/Makefile.in
index 44ffb9d..50e7341 100644
--- a/tools/h5repack/Makefile.in
+++ b/tools/h5repack/Makefile.in
@@ -537,7 +537,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/tools/h5stat/Makefile.in b/tools/h5stat/Makefile.in
index f0c2674..32b6d4c 100644
--- a/tools/h5stat/Makefile.in
+++ b/tools/h5stat/Makefile.in
@@ -515,7 +515,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/tools/lib/Makefile.in b/tools/lib/Makefile.in
index 5af2dfd..210b6b3 100644
--- a/tools/lib/Makefile.in
+++ b/tools/lib/Makefile.in
@@ -502,7 +502,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/tools/misc/Makefile.in b/tools/misc/Makefile.in
index b0a7822..1160938 100644
--- a/tools/misc/Makefile.in
+++ b/tools/misc/Makefile.in
@@ -540,7 +540,6 @@ MAKEINFO = @MAKEINFO@
MANIFEST_TOOL = @MANIFEST_TOOL@
MKDIR_P = @MKDIR_P@
MPE = @MPE@
-MPI_GET_SIZE = @MPI_GET_SIZE@
NM = @NM@
NMEDIT = @NMEDIT@
OBJDUMP = @OBJDUMP@
diff --git a/vms/src/h5pubconf.h b/vms/src/h5pubconf.h
index ae85dce..cfe8ec5 100644
--- a/vms/src/h5pubconf.h
+++ b/vms/src/h5pubconf.h
@@ -253,9 +253,6 @@
/* Define to 1 if you have the <mpe.h> header file. */
/* #undef H5_HAVE_MPE_H */
-/* Define if MPI_File_get_size works correctly */
-/* #undef H5_HAVE_MPI_GET_SIZE */
-
/* Define if `MPI_Comm_c2f' and `MPI_Comm_f2c' exists */
/* #undef H5_HAVE_MPI_MULTI_LANG_Comm */
@@ -485,10 +482,6 @@
/* Define if the metadata trace file code is to be compiled in */
/* #undef H5_METADATA_TRACE_FILE */
-/* Define if your system's `MPI_File_set_size' function works for files over
- 2GB. */
-/* #undef H5_MPI_FILE_SET_SIZE_BIG */
-
/* Define if we can violate pointer alignment restrictions */
#define H5_NO_ALIGNMENT_RESTRICTIONS 1
@@ -508,7 +501,7 @@
#define H5_PACKAGE_NAME "HDF5"
/* Define to the full name and version of this package. */
-#define H5_PACKAGE_STRING "HDF5 1.9.184-swmr0"
+#define H5_PACKAGE_STRING "HDF5 1.9.190-swmr0"
/* Define to the one symbol short name of this package. */
#define H5_PACKAGE_TARNAME "hdf5"
@@ -517,7 +510,7 @@
#define H5_PACKAGE_URL ""
/* Define to the version of this package. */
-#define H5_PACKAGE_VERSION "1.9.184-swmr0"
+#define H5_PACKAGE_VERSION "1.9.190-swmr0"
/* Width for printf() for type `long long' or `__int64', use `ll' */
#define H5_PRINTF_LL_WIDTH "ll"
@@ -680,7 +673,7 @@
/* #undef H5_USING_MEMCHECKER */
/* Version number of package */
-#define H5_VERSION "1.9.184-swmr0"
+#define H5_VERSION "1.9.190-swmr0"
/* Define if vsnprintf() returns the correct value for formatted strings that
don't fit into size allowed */