diff options
author | Jakub Jelinek <jakub@redhat.com> | 2006-08-15 16:57:52 +0200 |
---|---|---|
committer | Jakub Jelinek <jakub@gcc.gnu.org> | 2006-08-15 16:57:52 +0200 |
commit | 018b899bc74533a6f22c21b75ad20c572078972e (patch) | |
tree | dda540c4d7ef3ee1d1e4bf33b2957422eae2e9a6 /gcc/omp-low.c | |
parent | d0f53cbc80c79f9a296ca7fb2c9b6c2f5ba9bb44 (diff) | |
download | gcc-018b899bc74533a6f22c21b75ad20c572078972e.tar.gz |
re PR middle-end/28713 (GNU OpenMP produces type mismatches)
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.
From-SVN: r116154
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); } |