From 018b899bc74533a6f22c21b75ad20c572078972e Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Tue, 15 Aug 2006 16:57:52 +0200 Subject: [PATCH] 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 --- gcc/ChangeLog | 6 ++++++ gcc/omp-low.c | 14 ++++++++++---- 2 files changed, 16 insertions(+), 4 deletions(-) diff --git a/gcc/ChangeLog b/gcc/ChangeLog index 1da5d559fb1..033b64bfa24 100644 --- a/gcc/ChangeLog +++ b/gcc/ChangeLog @@ -1,5 +1,11 @@ 2006-08-15 Jakub Jelinek + 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. + PR middle-end/28724 * gimplify.c (gimplify_omp_atomic_pipeline): Convert oldival to itype in assignment to oldival2. 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); }