https://gcc.gnu.org/g:80c03ac8041340b29325f86ed58ea8bd40a55b99

commit r15-205-g80c03ac8041340b29325f86ed58ea8bd40a55b99
Author: Sandra Loosemore <sloosem...@baylibre.com>
Date:   Mon Apr 22 18:24:25 2024 +0000

    OpenMP: Fix for ICE in tree-nested.cc.
    
    Use gimple_omp_target_clauses() instead of gimple_omp_taskreg_clauses()
    when stmt is GIMPLE_OMP_TARGET, to avoid an as_a<> ICE.  The code
    immediately following this is already conditionalized in the same way.
    
    gcc/ChangeLog
            * tree-nested.cc (convert_tramp_reference_stmt): Use the correct
            accessor for GIMPLE_OMP_TARGET clauses.

Diff:
---
 gcc/tree-nested.cc | 8 +++++---
 1 file changed, 5 insertions(+), 3 deletions(-)

diff --git a/gcc/tree-nested.cc b/gcc/tree-nested.cc
index 4e5f3be7676..fc0495d6443 100644
--- a/gcc/tree-nested.cc
+++ b/gcc/tree-nested.cc
@@ -2906,9 +2906,11 @@ convert_tramp_reference_stmt (gimple_stmt_iterator *gsi, 
bool *handled_ops_p,
              continue;
            decl = i ? get_chain_decl (info) : info->frame_decl;
            /* Don't add CHAIN.* or FRAME.* twice.  */
-           for (c = gimple_omp_taskreg_clauses (stmt);
-                c;
-                c = OMP_CLAUSE_CHAIN (c))
+           if (gimple_code (stmt) == GIMPLE_OMP_TARGET)
+             c = gimple_omp_target_clauses (stmt);
+           else
+             c = gimple_omp_taskreg_clauses (stmt);
+           for (; c; c = OMP_CLAUSE_CHAIN (c))
              if ((OMP_CLAUSE_CODE (c) == OMP_CLAUSE_FIRSTPRIVATE
                   || OMP_CLAUSE_CODE (c) == OMP_CLAUSE_SHARED)
                  && OMP_CLAUSE_DECL (c) == decl)

Reply via email to