diff options
author | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-08-15 14:57:52 +0000 |
---|---|---|
committer | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2006-08-15 14:57:52 +0000 |
commit | cc6b725bb8ed2428b3ba6a08020866d45a89dd97 (patch) | |
tree | dda540c4d7ef3ee1d1e4bf33b2957422eae2e9a6 /gcc/omp-low.c | |
parent | 8adefd57068e1ed49f8fc4359052bf9bf6d00ad9 (diff) | |
download | gcc-cc6b725bb8ed2428b3ba6a08020866d45a89dd97.tar.gz |
PR middle-end/28713
* omp-low.c (lower_omp_parallel): Convert t to
receiver_decl's type.
(expand_omp_parallel): STRIP_NOPS from the MODIFY_EXPR
source before comparison.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@116154 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/omp-low.c')
-rw-r--r-- | gcc/omp-low.c | 14 |
1 files changed, 10 insertions, 4 deletions
diff --git a/gcc/omp-low.c b/gcc/omp-low.c index e8e835190e8..b76e00ced11 100644 --- a/gcc/omp-low.c +++ b/gcc/omp-low.c @@ -2475,13 +2475,17 @@ expand_omp_parallel (struct omp_region *region) for (si = bsi_start (entry_succ_bb); ; bsi_next (&si)) { - tree stmt; + tree stmt, arg; gcc_assert (!bsi_end_p (si)); stmt = bsi_stmt (si); - if (TREE_CODE (stmt) == MODIFY_EXPR - && TREE_CODE (TREE_OPERAND (stmt, 1)) == ADDR_EXPR - && TREE_OPERAND (TREE_OPERAND (stmt, 1), 0) + if (TREE_CODE (stmt) != MODIFY_EXPR) + continue; + + arg = TREE_OPERAND (stmt, 1); + STRIP_NOPS (arg); + if (TREE_CODE (arg) == ADDR_EXPR + && TREE_OPERAND (arg, 0) == OMP_PARALLEL_DATA_ARG (entry_stmt)) { if (TREE_OPERAND (stmt, 0) == DECL_ARGUMENTS (child_fn)) @@ -4084,6 +4088,8 @@ lower_omp_parallel (tree *stmt_p, omp_context *ctx) if (ctx->record_type) { t = build_fold_addr_expr (ctx->sender_decl); + /* fixup_child_record_type might have changed receiver_decl's type. */ + t = fold_convert (TREE_TYPE (ctx->receiver_decl), t); t = build2 (MODIFY_EXPR, void_type_node, ctx->receiver_decl, t); append_to_statement_list (t, &new_body); } |