[mpich2-commits] r3927 - mpich2/trunk/src/mpid/common/datatype/dataloop

goodell at mcs.anl.gov goodell at mcs.anl.gov
Tue Mar 3 15:29:01 CST 2009


Author: goodell
Date: 2009-03-03 15:29:01 -0600 (Tue, 03 Mar 2009)
New Revision: 3927

Modified:
   mpich2/trunk/src/mpid/common/datatype/dataloop/dataloop_create_struct.c
Log:
Fix for zero-length hvector members (ticket #430).

The patch was originally written by Rob Ross.

No reviewer.

Modified: mpich2/trunk/src/mpid/common/datatype/dataloop/dataloop_create_struct.c
===================================================================
--- mpich2/trunk/src/mpid/common/datatype/dataloop/dataloop_create_struct.c	2009-03-03 21:28:58 UTC (rev 3926)
+++ mpich2/trunk/src/mpid/common/datatype/dataloop/dataloop_create_struct.c	2009-03-03 21:29:01 UTC (rev 3927)
@@ -570,24 +570,29 @@
 	{
 	    nr_blks++;
 	}
-	else /* derived type; get a count of contig blocks */
-	{
-	    DLOOP_Count tmp_nr_blks;
+        else /* derived type; get a count of contig blocks */
+        {
+            DLOOP_Count tmp_nr_blks, sz;
 
-	    PREPEND_PREFIX(Segment_init)(NULL,
-					 (DLOOP_Count) blklens[i],
-					 oldtypes[i],
-					 segp,
-					 flag);
-	    bytes = SEGMENT_IGNORE_LAST;
+            DLOOP_Handle_get_size_macro(oldtypes[i], sz);
 
-	    PREPEND_PREFIX(Segment_count_contig_blocks)(segp,
-							0,
-							&bytes,
-							&tmp_nr_blks);
+            /* if the derived type has some data to contribute, add to flattened representation */
+            if ((blklens[i] > 0) && (sz > 0)) {
+                PREPEND_PREFIX(Segment_init)(NULL,
+                                             (DLOOP_Count) blklens[i],
+                                             oldtypes[i],
+                                             segp,
+                                             flag);
+                bytes = SEGMENT_IGNORE_LAST;
 
-	    nr_blks += tmp_nr_blks;
-	}
+                PREPEND_PREFIX(Segment_count_contig_blocks)(segp,
+                                                            0,
+                                                            &bytes,
+                                                            &tmp_nr_blks);
+
+                nr_blks += tmp_nr_blks;
+            }
+        }
     }
 
     nr_blks += 2; /* safety measure */



More information about the mpich2-commits mailing list