[PATCH 1/2] OpenMP/Fortran: Map intermediate array descriptor [PR120505]

Tobias Burnus burnus@net-b.de
Mon Feb 16 17:49:04 GMT 2026


Paul-Antoine Arras wrote:
> Please find attached a slightly amended version of the patch with 
> OMP_CLAUSE_MAP_SIZE_NEEDS_ADJUSTMENT defined as a flag rather than a 
> special value.

I misread one part of the patch – but it turned out be helpful,
nonetheless, because the testcase I created fails (see attachment).

With current mainline (w/o offloading configured), the testcase passes
(compiles and runs with host fallback).

However, with the 1/2 patch applied, it segfaults:

libgomp/testsuite/libgomp.fortran/map-subarray-13.f90:41:38:

    41 | !$omp   map(to: chunk%left_rcv_buffer)
       |                                      ^
internal compiler error: Segmentation fault
0x26213cd internal_error(char const*, ...)
         ../../../repos/gcc/gcc/diagnostic-global-context.cc:787
0x123d12f crash_signal
         ../../../repos/gcc/gcc/toplev.cc:325
0xec3ebe omp_build_struct_sibling_lists
         ../../../repos/gcc/gcc/gimplify.cc:13421
0xed14b7 gimplify_adjust_omp_clauses
         ../../../repos/gcc/gcc/gimplify.cc:15660
0xef11be gimplify_omp_target_update
         ../../../repos/gcc/gcc/gimplify.cc:19054


The testcase is a modified version of your testcase, with some additional
layers of allocatables added.

The fail is because struct_node == NULL:

13402         if (c != NULL && OMP_CLAUSE_CODE (c) == OMP_CLAUSE_MAP
13403             && OMP_CLAUSE_MAP_KIND (c) == GOMP_MAP_STRUCT
13404             && OMP_CLAUSE_MAP_KIND (OMP_CLAUSE_CHAIN (c)) == GOMP_MAP_TO_PSET
13405             && OMP_CLAUSE_MAP_KIND (grp->grp_end) == GOMP_MAP_ATTACH_DETACH
13406             && OMP_CLAUSE_MAP_SIZE_NEEDS_ADJUSTMENT (grp->grp_end))
13407           {
...
13420             tree *struct_node = struct_map_to_clause->get (base);
13421             omp_siblist_move_node_after (c, cp, &OMP_CLAUSE_CHAIN (*struct_node));


(gdb) p struct_node
$11 = (tree *) 0x0

(gdb) p debug(c)
  <omp_clause 0x7ffff727a2d0 constant map
     op-0: <nop_expr 0x7ffff728a7a0>
     op-1: <integer_cst 0x7ffff7402df8 0>
     op-2:>
$7 = void

(gdb) p c == *cp
$9 = true


(gdb) p debug(base)
  <indirect_ref 0x7ffff7366a40
     type <array_type 0x7ffff722f0a8
         type <record_type 0x7ffff7223690 tile_type2 BLK
...
     arg:0 <nop_expr 0x7ffff728a7a0
         arg:0 <component_ref 0x7ffff7289b70 type <pointer_type 0x7ffff7424738>
             arg:0 <component_ref 0x7ffff7341210 type <record_type 0x7ffff722f000 array01_tile_type2>
                 arg:0 <var_decl 0x7ffff72324c0 chunk> arg:1 <field_decl 0x7ffff7230140 tiles>

* * *

Testcase attached (modified version of your testcase).

Tobias
-------------- next part --------------
A non-text attachment was scrubbed...
Name: map-subarray-13.f90
Type: text/x-fortran
Size: 1533 bytes
Desc: not available
URL: <https://gcc.gnu.org/pipermail/fortran/attachments/20260216/3d49eb3e/attachment.bin>


More information about the Fortran mailing list