summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorBinh-Minh Ribler <bmribler@hdfgroup.org>2013-03-22 17:56:05 (GMT)
committerBinh-Minh Ribler <bmribler@hdfgroup.org>2013-03-22 17:56:05 (GMT)
commitc8018386da2165a16f5e2d0cb5a391dca07b4ed5 (patch)
treebd9af146bf98c667e9237afc21bb5f108eb81dbc
parent030a17ca60905ef90cabaa147ee84febb064fc42 (diff)
downloadhdf5-c8018386da2165a16f5e2d0cb5a391dca07b4ed5.zip
hdf5-c8018386da2165a16f5e2d0cb5a391dca07b4ed5.tar.gz
hdf5-c8018386da2165a16f5e2d0cb5a391dca07b4ed5.tar.bz2
[svn-r23427] Purpose: Fix bug HDFFV-8067
Description: + The C++ test failed with the new PGI compilers versions 12.4 and 12.5 + An exception thrown by an internal function, which was called by a constructor, was not propagating to the test program during the stack unwinding, so it couldn't be caught by the test and the program terminated. + Various trials and errors indicated that the problem is where an STD string converted to a char* being passed to the internal function, but confirmation has not been found yet. It could be a compiler bug. Solution: + Added a try/catch in the constructor around the internal function and re-throw the exception when it is caught. This is a workaround. + Unrelated minor fixes: removed unused variables and MESSAGE's; commented out tvlstr.cpp/test_read_vl_string_attribute because it may be redundant, and commented out H5Tpkg.h inclusion because TEST_ALIGNMENT is not added yet and probably not necessary in the C++ API. Platforms tested: Linux/32 2.6 (jam) with PGI compilers Linux/32 2.6 (jam) with GNU compilers Linux/64 2.6 (koala)
-rw-r--r--c++/src/H5File.cpp18
-rw-r--r--c++/test/dsets.cpp6
-rw-r--r--c++/test/tattr.cpp2
-rw-r--r--c++/test/tcompound.cpp1
-rw-r--r--c++/test/tfile.cpp12
-rw-r--r--c++/test/tfilter.cpp4
-rw-r--r--c++/test/th5s.cpp1
-rw-r--r--c++/test/tlinks.cpp3
-rw-r--r--c++/test/trefer.cpp2
-rw-r--r--c++/test/ttypes.cpp4
-rw-r--r--c++/test/tvlstr.cpp5
11 files changed, 31 insertions, 27 deletions
diff --git a/c++/src/H5File.cpp b/c++/src/H5File.cpp
index 92c4d32..1f7b6f8 100644
--- a/c++/src/H5File.cpp
+++ b/c++/src/H5File.cpp
@@ -77,11 +77,18 @@ H5File::H5File() : H5Location(), id(0) {}
/// please refer to the \b Special \b case section in the C layer
/// Reference Manual at:
/// http://www.hdfgroup.org/HDF5/doc/RM/RM_H5F.html#File-Create
+// Notes With a PGI compiler (~2012-2013), the exception thrown by p_get_file
+// could not be caught in the applications. Added try block here
+// to catch then re-throw it. -BMR 2013/03/21
// Programmer Binh-Minh Ribler - 2000
//--------------------------------------------------------------------------
H5File::H5File( const char* name, unsigned int flags, const FileCreatPropList& create_plist, const FileAccPropList& access_plist ) : H5Location(0)
{
- p_get_file(name, flags, create_plist, access_plist);
+ try {
+ p_get_file(name, flags, create_plist, access_plist);
+ } catch (FileIException open_file) {
+ throw open_file;
+ }
}
//--------------------------------------------------------------------------
@@ -95,11 +102,18 @@ H5File::H5File( const char* name, unsigned int flags, const FileCreatPropList& c
/// FileCreatPropList::DEFAULT
///\param access_plist - IN: File access property list. Default to
/// FileCreatPropList::DEFAULT
+// Notes With a PGI compiler (~2012-2013), the exception thrown by p_get_file
+// could not be caught in the applications. Added try block here
+// to catch then re-throw it. -BMR 2013/03/21
// Programmer Binh-Minh Ribler - 2000
//--------------------------------------------------------------------------
H5File::H5File( const H5std_string& name, unsigned int flags, const FileCreatPropList& create_plist, const FileAccPropList& access_plist ) : H5Location(0)
{
- p_get_file(name.c_str(), flags, create_plist, access_plist);
+ try {
+ p_get_file(name.c_str(), flags, create_plist, access_plist);
+ } catch (FileIException open_file) {
+ throw open_file;
+ }
}
//--------------------------------------------------------------------------
diff --git a/c++/test/dsets.cpp b/c++/test/dsets.cpp
index e822b36..643762b 100644
--- a/c++/test/dsets.cpp
+++ b/c++/test/dsets.cpp
@@ -285,13 +285,7 @@ test_simple_io( H5File& file)
static herr_t
test_datasize()
{
-
SUBTEST("DataSet::getInMemDataSize()");
-
- int points[100][200];
- int check[100][200];
- int i, j, n;
-
try
{
// Open FILE1.
diff --git a/c++/test/tattr.cpp b/c++/test/tattr.cpp
index 100e725..1a15aea 100644
--- a/c++/test/tattr.cpp
+++ b/c++/test/tattr.cpp
@@ -964,7 +964,6 @@ static void test_attr_mult_read()
static void test_attr_delete()
{
H5std_string attr_name; // Buffer for attribute names
- int ii;
// Output message about test being performed
SUBTEST("Removing Attribute Function");
@@ -1364,7 +1363,6 @@ extern "C"
void test_attr()
{
// Output message about test being performed
- //MESSAGE("Testing Attributes\n");
MESSAGE(5, ("Testing Attributes\n"));
test_attr_basic_write(); // Test basic H5A writing code
diff --git a/c++/test/tcompound.cpp b/c++/test/tcompound.cpp
index fbb1219..28d8a1e 100644
--- a/c++/test/tcompound.cpp
+++ b/c++/test/tcompound.cpp
@@ -749,7 +749,6 @@ extern "C"
void test_compound()
{
// Output message about test being performed
- //MESSAGE("Testing Compound Data Type operations\n");
MESSAGE(5, ("Testing Compound Data Type operations\n"));
test_compound_1(); // various things about compound data types
diff --git a/c++/test/tfile.cpp b/c++/test/tfile.cpp
index ba38d7a..65b8e57 100644
--- a/c++/test/tfile.cpp
+++ b/c++/test/tfile.cpp
@@ -117,16 +117,16 @@ static void test_file_create()
"terminate called without an active exception
Command terminated by signal 6"
Commenting it out until it's fixed LK 20120626.
-#ifndef H5_HAVE_FILE_VERSIONS
+*/
try {
H5File file2 (FILE1, H5F_ACC_TRUNC); // should throw E
+
// Should FAIL but didn't, so throw an invalid action exception
throw InvalidActionException("H5File constructor", "Attempted to create an existing file.");
}
catch( FileIException E ) // catch truncating existing file
{} // do nothing, FAIL expected
-#endif
// Close file1
delete file1;
file1 = NULL;
@@ -144,7 +144,6 @@ static void test_file_create()
// Test create with H5F_ACC_TRUNC. This will truncate the existing file.
file1 = new H5File (FILE1, H5F_ACC_TRUNC);
-#ifndef H5_HAVE_FILE_VERSIONS
// Try to truncate first file again. This should fail because file1
// is the same file and is currently open.
try {
@@ -155,19 +154,17 @@ static void test_file_create()
}
catch( FileIException E ) // catching truncating opened file
{} // do nothing, FAIL expected
-#endif
+
// Try with H5F_ACC_EXCL. This should fail too because the file already
// exists.
try {
-// H5File file3 (FILE1, H5F_ACC_EXCL); // should throw E
+ H5File file3 (FILE1, H5F_ACC_EXCL); // should throw E
// Should FAIL but didn't, so throw an invalid action exception
throw InvalidActionException("H5File constructor", "H5F_ACC_EXCL attempt on an existing file.");
}
catch( FileIException E ) // catching H5F_ACC_EXCL on existing file
{} // do nothing, FAIL expected
-*/
- std::cerr << "SKIPPED for HDFFV-8067" << std::endl;
// Get the file-creation template
FileCreatPropList tmpl1 = file1->getCreatePlist();
@@ -627,7 +624,6 @@ void test_file()
{
// Output message about test being performed
MESSAGE(5, ("Testing File I/O operations\n"));
- //MESSAGE("Testing File I/O operations\n");
test_file_create(); // Test file creation (also creation templates)
test_file_open(); // Test file opening
diff --git a/c++/test/tfilter.cpp b/c++/test/tfilter.cpp
index 0dbdf00..9e60655 100644
--- a/c++/test/tfilter.cpp
+++ b/c++/test/tfilter.cpp
@@ -47,12 +47,14 @@
#define FILTER_CHUNK_DIM2 25
// will do this function later or use it as guideline - BMR - 2007/01/26
+#if 0
static herr_t test_filter_internal(hid_t fid, const char *name, hid_t dcpl,
int if_fletcher32, int corrupted, hsize_t *dset_size)
{
cerr << "do nothing right now" << endl;
return(0);
}
+#endif
/* Temporary filter IDs used for testing */
#define H5Z_FILTER_BOGUS 305
@@ -254,13 +256,11 @@ extern "C"
void test_filters()
{
// Output message about test being performed
- //MESSAGE("Testing Various Filters\n");
MESSAGE(5, ("Testing Various Filters\n"));
hid_t fapl_id;
fapl_id = h5_fileaccess(); // in h5test.c, returns a file access template
- int nerrors=0; // keep track of number of failures occurr
try
{
// Use the file access template id to create a file access prop. list
diff --git a/c++/test/th5s.cpp b/c++/test/th5s.cpp
index 32c40d5..7947a9b 100644
--- a/c++/test/th5s.cpp
+++ b/c++/test/th5s.cpp
@@ -569,7 +569,6 @@ extern "C"
void test_h5s()
{
// Output message about test being performed
- //MESSAGE("Testing Dataspaces\n");
MESSAGE(5, ("Testing Dataspaces\n"));
test_h5s_basic(); // Test basic H5S code
diff --git a/c++/test/tlinks.cpp b/c++/test/tlinks.cpp
index e4e691a..fca5918 100644
--- a/c++/test/tlinks.cpp
+++ b/c++/test/tlinks.cpp
@@ -226,6 +226,7 @@ typedef struct {
hbool_t *visited; /* Pointer to array of "visited link" flags */
} link_iter_info_t;
+#if 0
/* Link visit structs */
typedef struct {
const char *path; /* Path to link */
@@ -374,6 +375,7 @@ typedef struct {
unsigned idx; /* Index in object visit structure */
const obj_visit_t *info; /* Pointer to the object visit structure to use */
} ovisit_ud_t;
+#endif
static const char *FILENAME[] = {
"link0",
@@ -529,7 +531,6 @@ void test_links()
fapl_id = h5_fileaccess();
// Output message about test being performed
- //MESSAGE("Testing Various Links\n");
MESSAGE(5, ("Testing Various Links\n"));
try
{
diff --git a/c++/test/trefer.cpp b/c++/test/trefer.cpp
index 4eb5b21..ce18e58 100644
--- a/c++/test/trefer.cpp
+++ b/c++/test/trefer.cpp
@@ -235,7 +235,6 @@ static void test_reference_obj(void)
verify_val(name_size, DSET1_LEN, "Group::getObjnameByIdx(index,(std::string)buf,buf_len)", __LINE__, __FILE__);
// Test getObjnameByIdx(hsize_t idx, char* name, size_t size)
- char name_C[DSET1_LEN+1];
group.getObjnameByIdx(0, name, name_size+1);
verify_val(name, DSET1_NAME, "Group::getObjnameByIdx(index,(char*)buf,buf_len)", __LINE__, __FILE__);
verify_val(name_size, DSET1_LEN, "Group::getObjnameByIdx(index,(char*)buf,buf_len)", __LINE__, __FILE__);
@@ -345,7 +344,6 @@ extern "C"
void test_reference(void)
{
// Output message about test being performed
- //MESSAGE("Testing References\n");
MESSAGE(5, ("Testing References\n"));
test_reference_obj(); // Test basic object reference functionality
diff --git a/c++/test/ttypes.cpp b/c++/test/ttypes.cpp
index b1baa29..c10cf6d 100644
--- a/c++/test/ttypes.cpp
+++ b/c++/test/ttypes.cpp
@@ -52,6 +52,7 @@
* normally require alignment. When set, all native datatypes must be aligned
* on a byte boundary equal to the data size.
*/
+#if 0
#define TEST_ALIGNMENT
/* Alignment test stuff */
@@ -61,6 +62,9 @@
#endif
#define SET_ALIGNMENT(TYPE,VAL) \
H5T_NATIVE_##TYPE##_ALIGN_g=MAX(H5T_NATIVE_##TYPE##_ALIGN_g, VAL)
+#endif
+ /* #include "H5Tpkg.h"
+ */
const char *FILENAME[] = {
"dtypes1.h5",
diff --git a/c++/test/tvlstr.cpp b/c++/test/tvlstr.cpp
index 73e54e0..89f24f2 100644
--- a/c++/test/tvlstr.cpp
+++ b/c++/test/tvlstr.cpp
@@ -129,7 +129,7 @@ void test_vlstr_free_custom(void *_mem, void *info)
*-------------------------------------------------------------------------
*/
// String for testing datasets
-static char stastring_ds_write[1]={'A'};
+// static char stastring_ds_write[1]={'A'};
// Info for a string dataset
const H5std_string DSET1_NAME("String_ds");
@@ -687,6 +687,7 @@ static void test_vlstring_attribute()
}
} // test_vlstring_attribute()
+#if 0
/*-------------------------------------------------------------------------
* Function: test_read_vl_string_attribute
*
@@ -746,6 +747,7 @@ static void test_read_vl_string_attribute()
issue_fail_msg("test_read_vl_string_attribute()", __LINE__, __FILE__, E.getCDetailMsg());
}
} // test_read_vl_string_attribute
+#endif // 2013: need to verify before adding to test
/*-------------------------------------------------------------------------
* Function: test_vlstring_array_attribute
@@ -957,7 +959,6 @@ extern "C"
void test_vlstrings()
{
// Output message about test being performed
- //MESSAGE("Testing Variable-Length Strings");
MESSAGE(5, ("Testing Variable-Length Strings"));
// These tests use the same file