diff options
Diffstat (limited to 'gcc/omp-low.c')
-rw-r--r-- | gcc/omp-low.c | 9 |
1 files changed, 6 insertions, 3 deletions
diff --git a/gcc/omp-low.c b/gcc/omp-low.c index 65f7151..41b4093 100644 --- a/gcc/omp-low.c +++ b/gcc/omp-low.c @@ -3464,6 +3464,9 @@ lower_omp_sections (tree *stmt_p, omp_context *ctx) new_body = alloc_stmt_list (); append_to_statement_list (ilist, &new_body); append_to_statement_list (stmt, &new_body); + /* ??? The OMP_RETURN doesn't logically belong here, but in + expand_omp_sections we expect this marker to be where the + individual sections join after completing the loop. */ append_to_statement_list (region_exit, &new_body); append_to_statement_list (olist, &new_body); append_to_statement_list (dlist, &new_body); @@ -3610,9 +3613,9 @@ lower_omp_single (tree *stmt_p, omp_context *ctx) lower_omp_single_simple (single_stmt, &BIND_EXPR_BODY (bind)); append_to_statement_list (dlist, &BIND_EXPR_BODY (bind)); + maybe_catch_exception (&BIND_EXPR_BODY (bind)); t = make_node (OMP_RETURN_EXPR); append_to_statement_list (t, &BIND_EXPR_BODY (bind)); - maybe_catch_exception (&BIND_EXPR_BODY (bind)); pop_gimplify_context (bind); BIND_EXPR_VARS (bind) = chainon (BIND_EXPR_VARS (bind), ctx->block_vars); @@ -3647,9 +3650,9 @@ lower_omp_master (tree *stmt_p, omp_context *ctx) x = build1 (LABEL_EXPR, void_type_node, lab); gimplify_and_add (x, &BIND_EXPR_BODY (bind)); + maybe_catch_exception (&BIND_EXPR_BODY (bind)); x = make_node (OMP_RETURN_EXPR); append_to_statement_list (x, &BIND_EXPR_BODY (bind)); - maybe_catch_exception (&BIND_EXPR_BODY (bind)); pop_gimplify_context (bind); BIND_EXPR_VARS (bind) = chainon (BIND_EXPR_VARS (bind), ctx->block_vars); @@ -3683,9 +3686,9 @@ lower_omp_ordered (tree *stmt_p, omp_context *ctx) x = built_in_decls[BUILT_IN_GOMP_ORDERED_END]; x = build_function_call_expr (x, NULL); gimplify_and_add (x, &BIND_EXPR_BODY (bind)); + maybe_catch_exception (&BIND_EXPR_BODY (bind)); x = make_node (OMP_RETURN_EXPR); append_to_statement_list (x, &BIND_EXPR_BODY (bind)); - maybe_catch_exception (&BIND_EXPR_BODY (bind)); pop_gimplify_context (bind); BIND_EXPR_VARS (bind) = chainon (BIND_EXPR_VARS (bind), ctx->block_vars); |