@@ -70,6 +70,12 @@ static char* caf_array_ref_str[] = {
7070 "CAF_ARR_REF_OPEN_START"
7171};
7272
73+ static char * caf_ref_type_str [] = {
74+ "CAF_REF_COMPONENT" ,
75+ "CAF_REF_ARRAY" ,
76+ "CAF_REF_STATIC_ARRAY" ,
77+ };
78+
7379#ifndef EXTRA_DEBUG_OUTPUT
7480#define dprint (...)
7581#define chk_err (...)
@@ -3973,9 +3979,11 @@ get_for_ref(caf_reference_t *ref, size_t *i, size_t dst_index,
39733979 int ierr ;
39743980
39753981 if (unlikely (ref == NULL ))
3982+ {
39763983 /* May be we should issue an error here, because this case should not
39773984 * occur. */
39783985 return ;
3986+ }
39793987
39803988 dprint ("sr_offset = %zd, sr = %p, desc_offset = %zd, src = %p, "
39813989 "sr_glb = %d, desc_glb = %d\n" ,
@@ -4493,7 +4501,7 @@ PREFIX(get_by_ref) (caf_token_t token, int image_index,
44934501 bool access_data_through_global_win = false;
44944502 /* Set when the remote descriptor is to accessed through the global window. */
44954503 bool access_desc_through_global_win = false;
4496- caf_array_ref_t mode ;
4504+ caf_array_ref_t array_ref ;
44974505
44984506 realloc_needed = realloc_required = dst -> base_addr == NULL ;
44994507
@@ -4597,9 +4605,9 @@ PREFIX(get_by_ref) (caf_token_t token, int image_index,
45974605#endif
45984606 for (i = 0 ; riter -> u .a .mode [i ] != CAF_ARR_REF_NONE ; ++ i )
45994607 {
4600- mode = riter -> u .a .mode [i ];
4601- dprint ("i = %zd, mode = %s\n" , i , caf_array_ref_str [mode ]);
4602- switch (mode )
4608+ array_ref = riter -> u .a .mode [i ];
4609+ dprint ("i = %zd, array_ref = %s\n" , i , caf_array_ref_str [array_ref ]);
4610+ switch (array_ref )
46034611 {
46044612 case CAF_ARR_REF_VECTOR :
46054613 delta = riter -> u .a .dim [i ].v .nvec ;
@@ -4785,9 +4793,9 @@ case kind: \
47854793 case CAF_REF_STATIC_ARRAY :
47864794 for (i = 0 ; riter -> u .a .mode [i ] != CAF_ARR_REF_NONE ; ++ i )
47874795 {
4788- mode = riter -> u .a .mode [i ];
4789- dprint ("i = %zd, mode = %s\n" , i , caf_array_ref_str [mode ]);
4790- switch (mode )
4796+ array_ref = riter -> u .a .mode [i ];
4797+ dprint ("i = %zd, array_ref = %s\n" , i , caf_array_ref_str [array_ref ]);
4798+ switch (array_ref )
47914799 {
47924800 case CAF_ARR_REF_VECTOR :
47934801 delta = riter -> u .a .dim [i ].v .nvec ;
@@ -5097,23 +5105,28 @@ send_for_ref(caf_reference_t *ref, size_t *i, size_t src_index,
50975105 ptrdiff_t extent_dst = 1 , array_offset_dst = 0 , dst_stride , src_stride ;
50985106 size_t next_dst_dim , ref_rank ;
50995107 gfc_max_dim_descriptor_t dst_desc_data ;
5108+ caf_ref_type_t ref_type = ref -> type ;
5109+ caf_array_ref_t array_ref_src = ref -> u .a .mode [src_dim ];
5110+ caf_array_ref_t array_ref_dst = ref -> u .a .mode [dst_dim ];
5111+ size_t src_size = 0 ;
51005112 int ierr ;
51015113
51025114 if (unlikely (ref == NULL ))
5115+ {
51035116 /* May be we should issue an error here, because this case should not
51045117 * occur. */
51055118 return ;
5119+ }
51065120
5107- dprint ("dst_offset = %zd, ds = %p, desc_offset = %zd, dst = %p, "
5108- "src = %p, sr = %p, ds_glb = %d, desc_glb = %d\n" ,
5109- dst_byte_offset , ds , desc_byte_offset ,
5110- dst , src , sr , ds_global , desc_global );
5121+ dprint ("Entering send_for_ref: "
5122+ "dst_offset = %zd, desc_offset = %zd, ds_glb = %d, desc_glb = %d\n" ,
5123+ dst_byte_offset , desc_byte_offset , ds_global , desc_global );
51115124
51125125 if (ref -> next == NULL )
51135126 {
5114- size_t src_size = GFC_DESCRIPTOR_SIZE (src );
5127+ src_size = GFC_DESCRIPTOR_SIZE (src );
51155128
5116- switch (ref -> type )
5129+ switch (ref_type )
51175130 {
51185131 case CAF_REF_COMPONENT :
51195132 dst_byte_offset += ref -> u .c .offset ;
@@ -5165,7 +5178,7 @@ send_for_ref(caf_reference_t *ref, size_t *i, size_t src_index,
51655178 dst_type = ref -> u .a .static_array_type ;
51665179 /* Intentionally fall through. */
51675180 case CAF_REF_ARRAY :
5168- if (ref -> u . a . mode [ src_dim ] == CAF_ARR_REF_NONE )
5181+ if (array_ref_src == CAF_ARR_REF_NONE )
51695182 {
51705183 if (ds_global )
51715184 {
@@ -5201,7 +5214,12 @@ send_for_ref(caf_reference_t *ref, size_t *i, size_t src_index,
52015214 }
52025215 }
52035216
5204- switch (ref -> type )
5217+ dprint ("image_index = %d, num = %zd, src_size = %zd, "
5218+ "src_dim = %zd, dst_dim = %zd, ref_type = %s\n" ,
5219+ image_index , num , src_size , src_dim , dst_dim ,
5220+ caf_ref_type_str [ref_type ]);
5221+
5222+ switch (ref_type )
52055223 {
52065224 case CAF_REF_COMPONENT :
52075225 if (ref -> u .c .caf_token_offset > 0 )
@@ -5239,7 +5257,7 @@ send_for_ref(caf_reference_t *ref, size_t *i, size_t src_index,
52395257 );
52405258 return ;
52415259 case CAF_REF_ARRAY :
5242- if (ref -> u . a . mode [ src_dim ] == CAF_ARR_REF_NONE )
5260+ if (array_ref_src == CAF_ARR_REF_NONE )
52435261 {
52445262 send_for_ref (ref -> next , i , src_index , mpi_token , dst , src , ds , sr ,
52455263 dst_byte_offset , desc_byte_offset , dst_kind , src_kind ,
@@ -5278,7 +5296,9 @@ send_for_ref(caf_reference_t *ref, size_t *i, size_t src_index,
52785296 dst = (gfc_descriptor_t * )& dst_desc_data ;
52795297 }
52805298 else
5299+ {
52815300 dst = mpi_token -> desc ;
5301+ }
52825302 dst_byte_offset = 0 ;
52835303 desc_byte_offset = 0 ;
52845304#ifdef EXTRA_DEBUG_OUTPUT
@@ -5292,7 +5312,10 @@ send_for_ref(caf_reference_t *ref, size_t *i, size_t src_index,
52925312 }
52935313#endif
52945314 }
5295- switch (ref -> u .a .mode [dst_dim ])
5315+ dprint ("array_ref_dst[%zd] = %s := array_ref_src[%zd] = %s\n" ,
5316+ dst_dim , caf_array_ref_str [array_ref_dst ],
5317+ src_dim , caf_array_ref_str [array_ref_src ]);
5318+ switch (array_ref_dst )
52965319 {
52975320 case CAF_ARR_REF_VECTOR :
52985321 extent_dst = GFC_DESCRIPTOR_EXTENT (dst , dst_dim );
@@ -5345,7 +5368,8 @@ case kind: \
53455368 array_offset_dst = 0 ;
53465369 src_stride = (GFC_DESCRIPTOR_RANK (src ) > 0 ) ?
53475370 src -> dim [src_dim ]._stride : 0 ;
5348- dprint ("arr ref full src_stride: %zd\n" , src_stride );
5371+ dprint ("CAF_ARR_REF_FULL: src_stride = %zd, dst_stride = %zd\n" ,
5372+ src_stride , dst_stride );
53495373 for (ptrdiff_t idx = 0 ; idx < extent_dst ;
53505374 ++ idx , array_offset_dst += dst_stride )
53515375 {
@@ -5374,8 +5398,8 @@ case kind: \
53745398 src_stride = (GFC_DESCRIPTOR_RANK (src ) > 0 ) ?
53755399 src -> dim [src_dim ]._stride : 0 ;
53765400 /* Increase the dst_dim only, when the src_extent is greater one
5377- * or src and dst extent are both one. Don't increase when the scalar
5378- * source is not present in the dst. */
5401+ * or src and dst extent are both one. Don't increase when the
5402+ * scalar source is not present in the dst. */
53795403 next_dst_dim = (extent_dst > 1 ) ||
53805404 (GFC_DESCRIPTOR_EXTENT (dst , dst_dim ) == 1 && extent_dst == 1 ) ?
53815405 (dst_dim + 1 ) : dst_dim ;
@@ -5465,7 +5489,7 @@ case kind: \
54655489 }
54665490 return ;
54675491 case CAF_REF_STATIC_ARRAY :
5468- if (ref -> u . a . mode [ dst_dim ] == CAF_ARR_REF_NONE )
5492+ if (array_ref_dst == CAF_ARR_REF_NONE )
54695493 {
54705494 send_for_ref (ref -> next , i , src_index , mpi_token , dst , NULL , ds , sr ,
54715495 dst_byte_offset , desc_byte_offset , dst_kind , src_kind ,
@@ -5476,7 +5500,7 @@ case kind: \
54765500 );
54775501 return ;
54785502 }
5479- switch (ref -> u . a . mode [ dst_dim ] )
5503+ switch (array_ref_dst )
54805504 {
54815505 case CAF_ARR_REF_VECTOR :
54825506 array_offset_dst = 0 ;
@@ -5632,7 +5656,7 @@ PREFIX(send_by_ref) (caf_token_t token, int image_index,
56325656 /* Set when the remote descriptor is to accessed through the global window. */
56335657 bool access_desc_through_global_win = false;
56345658 bool free_temp_src = false;
5635- caf_array_ref_t mode ;
5659+ caf_array_ref_t array_ref ;
56365660
56375661 if (stat )
56385662 * stat = 0 ;
@@ -5738,9 +5762,9 @@ PREFIX(send_by_ref) (caf_token_t token, int image_index,
57385762#endif
57395763 for (i = 0 ; riter -> u .a .mode [i ] != CAF_ARR_REF_NONE ; ++ i )
57405764 {
5741- mode = riter -> u .a .mode [i ];
5742- dprint ("i = %zd, mode = %s\n" , i , caf_array_ref_str [mode ]);
5743- switch (mode )
5765+ array_ref = riter -> u .a .mode [i ];
5766+ dprint ("i = %zd, array_ref = %s\n" , i , caf_array_ref_str [array_ref ]);
5767+ switch (array_ref )
57445768 {
57455769 case CAF_ARR_REF_VECTOR :
57465770 delta = riter -> u .a .dim [i ].v .nvec ;
@@ -5873,9 +5897,9 @@ case kind: \
58735897 case CAF_REF_STATIC_ARRAY :
58745898 for (i = 0 ; riter -> u .a .mode [i ] != CAF_ARR_REF_NONE ; ++ i )
58755899 {
5876- mode = riter -> u .a .mode [i ];
5877- dprint ("i = %zd, mode = %s\n" , i , caf_array_ref_str [mode ]);
5878- switch (mode )
5900+ array_ref = riter -> u .a .mode [i ];
5901+ dprint ("i = %zd, array_ref = %s\n" , i , caf_array_ref_str [array_ref ]);
5902+ switch (array_ref )
58795903 {
58805904 case CAF_ARR_REF_VECTOR :
58815905 delta = riter -> u .a .dim [i ].v .nvec ;
@@ -6092,7 +6116,7 @@ PREFIX(sendget_by_ref) (caf_token_t dst_token, int dst_image_index,
60926116 bool access_data_through_global_win = false;
60936117 /* Set when the remote descriptor is to accessed through the global window. */
60946118 bool access_desc_through_global_win = false;
6095- caf_array_ref_t mode ;
6119+ caf_array_ref_t array_ref ;
60966120#ifndef GCC_GE_8
60976121 int dst_type = -1 , src_type = -1 ;
60986122#endif
@@ -6201,9 +6225,9 @@ PREFIX(sendget_by_ref) (caf_token_t dst_token, int dst_image_index,
62016225#endif
62026226 for (i = 0 ; riter -> u .a .mode [i ] != CAF_ARR_REF_NONE ; ++ i )
62036227 {
6204- mode = riter -> u .a .mode [i ];
6205- dprint ("i = %zd, mode = %s\n" , i , caf_array_ref_str [mode ]);
6206- switch (mode )
6228+ array_ref = riter -> u .a .mode [i ];
6229+ dprint ("i = %zd, array_ref = %s\n" , i , caf_array_ref_str [array_ref ]);
6230+ switch (array_ref )
62076231 {
62086232 case CAF_ARR_REF_VECTOR :
62096233 delta = riter -> u .a .dim [i ].v .nvec ;
@@ -6285,9 +6309,9 @@ case kind: \
62856309 case CAF_REF_STATIC_ARRAY :
62866310 for (i = 0 ; riter -> u .a .mode [i ] != CAF_ARR_REF_NONE ; ++ i )
62876311 {
6288- mode = riter -> u .a .mode [i ];
6289- dprint ("i = %zd, mode = %s\n" , i , caf_array_ref_str [mode ]);
6290- switch (mode )
6312+ array_ref = riter -> u .a .mode [i ];
6313+ dprint ("i = %zd, array_ref = %s\n" , i , caf_array_ref_str [array_ref ]);
6314+ switch (array_ref )
62916315 {
62926316 case CAF_ARR_REF_VECTOR :
62936317 delta = riter -> u .a .dim [i ].v .nvec ;
@@ -6461,7 +6485,7 @@ PREFIX(is_present) (caf_token_t token, int image_index, caf_reference_t *refs)
64616485 size_t i , ref_rank ;
64626486 int ierr ;
64636487 gfc_max_dim_descriptor_t src_desc ;
6464- caf_array_ref_t mode ;
6488+ caf_array_ref_t array_ref ;
64656489
64666490 while (carryOn && riter )
64676491 {
@@ -6489,9 +6513,9 @@ PREFIX(is_present) (caf_token_t token, int image_index, caf_reference_t *refs)
64896513 (gfc_descriptor_t * )(mpi_token -> memptr + local_offset );
64906514 for (i = 0 ; riter -> u .a .mode [i ] != CAF_ARR_REF_NONE ; ++ i )
64916515 {
6492- mode = riter -> u .a .mode [i ];
6493- dprint ("i = %zd, mode = %s\n" , i , caf_array_ref_str [mode ]);
6494- switch (mode )
6516+ array_ref = riter -> u .a .mode [i ];
6517+ dprint ("i = %zd, array_ref = %s\n" , i , caf_array_ref_str [array_ref ]);
6518+ switch (array_ref )
64956519 {
64966520 case CAF_ARR_REF_FULL :
64976521 /* The local_offset stays unchanged when ref'ing the first
@@ -6518,9 +6542,9 @@ PREFIX(is_present) (caf_token_t token, int image_index, caf_reference_t *refs)
65186542 case CAF_REF_STATIC_ARRAY :
65196543 for (i = 0 ; riter -> u .a .mode [i ] != CAF_ARR_REF_NONE ; ++ i )
65206544 {
6521- mode = riter -> u .a .mode [i ];
6522- dprint ("i = %zd, mode = %s\n" , i , caf_array_ref_str [mode ]);
6523- switch (mode )
6545+ array_ref = riter -> u .a .mode [i ];
6546+ dprint ("i = %zd, array_ref = %s\n" , i , caf_array_ref_str [array_ref ]);
6547+ switch (array_ref )
65246548 {
65256549 case CAF_ARR_REF_FULL :
65266550 /* The local_offset stays unchanged when ref'ing the first
@@ -6638,9 +6662,9 @@ PREFIX(is_present) (caf_token_t token, int image_index, caf_reference_t *refs)
66386662
66396663 for (i = 0 ; riter -> u .a .mode [i ] != CAF_ARR_REF_NONE ; ++ i )
66406664 {
6641- mode = riter -> u .a .mode [i ];
6642- dprint ("i = %zd, mode = %s\n" , i , caf_array_ref_str [mode ]);
6643- switch (mode )
6665+ array_ref = riter -> u .a .mode [i ];
6666+ dprint ("i = %zd, array_ref = %s\n" , i , caf_array_ref_str [array_ref ]);
6667+ switch (array_ref )
66446668 {
66456669 case CAF_ARR_REF_FULL :
66466670 /* The local_offset stays unchanged when ref'ing the first
@@ -6668,9 +6692,9 @@ PREFIX(is_present) (caf_token_t token, int image_index, caf_reference_t *refs)
66686692 case CAF_REF_STATIC_ARRAY :
66696693 for (i = 0 ; riter -> u .a .mode [i ] != CAF_ARR_REF_NONE ; ++ i )
66706694 {
6671- mode = riter -> u .a .mode [i ];
6672- dprint ("i = %zd, mode = %s\n" , i , caf_array_ref_str [mode ]);
6673- switch (mode )
6695+ array_ref = riter -> u .a .mode [i ];
6696+ dprint ("i = %zd, array_ref = %s\n" , i , caf_array_ref_str [array_ref ]);
6697+ switch (array_ref )
66746698 {
66756699 case CAF_ARR_REF_FULL :
66766700 /* The memptr stays unchanged when ref'ing the first element
0 commit comments