https://gcc.gnu.org/bugzilla/show_bug.cgi?id=109622

Tobias Burnus <burnus at gcc dot gnu.org> changed:

           What    |Removed                     |Added
----------------------------------------------------------------------------
                 CC|                            |jules at gcc dot gnu.org
            Summary|[13/14 regression] internal |[13/14 regression][OpenACC]
                   |compiler error: in          |internal compiler error: in
                   |omp_group_base, at          |omp_group_base, at
                   |gimplify.cc:9412 if         |gimplify.cc:9412 if
                   |-fopenacc is set.           |-fopenacc is set.

--- Comment #6 from Tobias Burnus <burnus at gcc dot gnu.org> ---
The ICE is in omp_group_base, which was added by Julian
in r13-2661-gb57abd072dd319a72839a49e769bffc244a52bc0 and updated in later
commits.


The debugger shows:

Breakpoint 1, omp_index_mapping_groups_1 (grpmap=0x2d2f960, groups=0x2cc4700,
reindex_sentinel=0x0) at ../../repos/gcc/gcc/gimplify.cc:9426
9426    {
(gdb) n
9431      FOR_EACH_VEC_ELT (*groups, i, grp)
...
9441          tree node = omp_group_base (grp, &chained, &fpp);

for the last grp (i = 1, there are only 2).

9292    omp_group_base (omp_mapping_group *grp, unsigned int *chained,
9293                    tree *firstprivate)
9294    {
9295      tree node = *grp->grp_start;

(gdb) p debug(*grp->grp_start)
map(attach_detach:atransform2->next [bias: 0])

Which fails at 'gcc_unreachable' for 'switch (OMP_CLAUSE_MAP_KIND (node))'.

* * *

I note that
    case GOMP_MAP_ATTACH:
    case GOMP_MAP_DETACH:
are handled but GOMP_MAP_ATTACH_DETACH isn't.


Actually, it is handled but not as separate input but as:

case ....:
      ...
      node = OMP_CLAUSE_CHAIN (node);
        switch (OMP_CLAUSE_MAP_KIND (node))
...
          case GOMP_MAP_ATTACH_DETACH:

 * * *

The original input is ("debug(...)" for i = 0, which shows i=0 and i=1):

map(attach:*atransform2->next [bias: 184]) map(attach_detach:atransform2->next
[bias: 0])

which is fine, but as   FOR_EACH_VEC_ELT (*groups, i, grp) then also processes
i=1 separately, it fails.

Reply via email to