diff options
author | Jakub Jelinek <jakub@redhat.com> | 2019-01-24 20:17:13 +0100 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2019-01-24 20:17:13 +0100 |
commit | 3b4218cc9f243cfe796dd933e8d0abd9c610503e (patch) | |
tree | baa0aa52cb31982ee276ae970e04d25830cec389 /gcc/tree-nested.c | |
parent | e21c4491293763b5dc61664b6a2292c3a8fc8ae1 (diff) | |
download | gcc-3b4218cc9f243cfe796dd933e8d0abd9c610503e.zip gcc-3b4218cc9f243cfe796dd933e8d0abd9c610503e.tar.gz gcc-3b4218cc9f243cfe796dd933e8d0abd9c610503e.tar.bz2 |
re PR middle-end/89015 (ICE in lookup_decl_in_outer_ctx, at omp-low.c:3480)
PR middle-end/89015
* tree-nested.c (convert_nonlocal_reference_stmt,
convert_local_reference_stmt, convert_tramp_reference_stmt,
convert_gimple_call) <case GIMPLE_OMP_TEAMS>: Treat
gimple_omp_teams_host teams stmts like GIMPLE_OMP_PARALLEL
or GIMPLE_OMP_TASK.
* gcc.dg/gomp/pr89015.c: New test.
From-SVN: r268246
Diffstat (limited to 'gcc/tree-nested.c')
-rw-r--r-- | gcc/tree-nested.c | 61 |
1 files changed, 44 insertions, 17 deletions
diff --git a/gcc/tree-nested.c b/gcc/tree-nested.c index 504afaf..3fe23cc 100644 --- a/gcc/tree-nested.c +++ b/gcc/tree-nested.c @@ -1497,6 +1497,20 @@ convert_nonlocal_reference_stmt (gimple_stmt_iterator *gsi, bool *handled_ops_p, } break; + case GIMPLE_OMP_TEAMS: + if (!gimple_omp_teams_host (as_a <gomp_teams *> (stmt))) + { + save_suppress = info->suppress_expansion; + convert_nonlocal_omp_clauses (gimple_omp_teams_clauses_ptr (stmt), + wi); + walk_body (convert_nonlocal_reference_stmt, + convert_nonlocal_reference_op, info, + gimple_omp_body_ptr (stmt)); + info->suppress_expansion = save_suppress; + break; + } + /* FALLTHRU */ + case GIMPLE_OMP_PARALLEL: case GIMPLE_OMP_TASK: save_suppress = info->suppress_expansion; @@ -1601,14 +1615,6 @@ convert_nonlocal_reference_stmt (gimple_stmt_iterator *gsi, bool *handled_ops_p, info->suppress_expansion = save_suppress; break; - case GIMPLE_OMP_TEAMS: - save_suppress = info->suppress_expansion; - convert_nonlocal_omp_clauses (gimple_omp_teams_clauses_ptr (stmt), wi); - walk_body (convert_nonlocal_reference_stmt, convert_nonlocal_reference_op, - info, gimple_omp_body_ptr (stmt)); - info->suppress_expansion = save_suppress; - break; - case GIMPLE_OMP_SECTION: case GIMPLE_OMP_MASTER: case GIMPLE_OMP_ORDERED: @@ -2168,6 +2174,18 @@ convert_local_reference_stmt (gimple_stmt_iterator *gsi, bool *handled_ops_p, switch (gimple_code (stmt)) { + case GIMPLE_OMP_TEAMS: + if (!gimple_omp_teams_host (as_a <gomp_teams *> (stmt))) + { + save_suppress = info->suppress_expansion; + convert_local_omp_clauses (gimple_omp_teams_clauses_ptr (stmt), wi); + walk_body (convert_local_reference_stmt, convert_local_reference_op, + info, gimple_omp_body_ptr (stmt)); + info->suppress_expansion = save_suppress; + break; + } + /* FALLTHRU */ + case GIMPLE_OMP_PARALLEL: case GIMPLE_OMP_TASK: save_suppress = info->suppress_expansion; @@ -2299,14 +2317,6 @@ convert_local_reference_stmt (gimple_stmt_iterator *gsi, bool *handled_ops_p, info->static_chain_added |= save_static_chain_added; break; - case GIMPLE_OMP_TEAMS: - save_suppress = info->suppress_expansion; - convert_local_omp_clauses (gimple_omp_teams_clauses_ptr (stmt), wi); - walk_body (convert_local_reference_stmt, convert_local_reference_op, - info, gimple_omp_body_ptr (stmt)); - info->suppress_expansion = save_suppress; - break; - case GIMPLE_OMP_SECTION: case GIMPLE_OMP_MASTER: case GIMPLE_OMP_ORDERED: @@ -2607,6 +2617,14 @@ convert_tramp_reference_stmt (gimple_stmt_iterator *gsi, bool *handled_ops_p, break; } + case GIMPLE_OMP_TEAMS: + if (!gimple_omp_teams_host (as_a <gomp_teams *> (stmt))) + { + *handled_ops_p = false; + return NULL_TREE; + } + goto do_parallel; + case GIMPLE_OMP_TARGET: if (!is_gimple_omp_offloaded (stmt)) { @@ -2616,6 +2634,7 @@ convert_tramp_reference_stmt (gimple_stmt_iterator *gsi, bool *handled_ops_p, /* FALLTHRU */ case GIMPLE_OMP_PARALLEL: case GIMPLE_OMP_TASK: + do_parallel: { tree save_local_var_chain = info->new_local_var_chain; walk_gimple_op (stmt, convert_tramp_reference_op, wi); @@ -2723,6 +2742,15 @@ convert_gimple_call (gimple_stmt_iterator *gsi, bool *handled_ops_p, } break; + case GIMPLE_OMP_TEAMS: + if (!gimple_omp_teams_host (as_a <gomp_teams *> (stmt))) + { + walk_body (convert_gimple_call, NULL, info, + gimple_omp_body_ptr (stmt)); + break; + } + /* FALLTHRU */ + case GIMPLE_OMP_PARALLEL: case GIMPLE_OMP_TASK: save_static_chain_added = info->static_chain_added; @@ -2798,7 +2826,6 @@ convert_gimple_call (gimple_stmt_iterator *gsi, bool *handled_ops_p, case GIMPLE_OMP_SECTIONS: case GIMPLE_OMP_SECTION: case GIMPLE_OMP_SINGLE: - case GIMPLE_OMP_TEAMS: case GIMPLE_OMP_MASTER: case GIMPLE_OMP_TASKGROUP: case GIMPLE_OMP_ORDERED: |