From 36cefd39222098287e7bfbcfca5b2450673432fa Mon Sep 17 00:00:00 2001 From: Jakub Jelinek Date: Wed, 28 Nov 2007 20:43:03 +0100 Subject: [PATCH] re PR fortran/34247 (ICE in omp_add_variable, at gimplify.c:4677) * trans-expr.c (gfc_trans_string_copy): Convert both dest and src to void *. PR fortran/34247 * trans-openmp.c (gfc_omp_privatize_by_reference): For REFERENCE_TYPE pass by reference only PARM_DECLs or non-artificial decls. From-SVN: r130492 --- gcc/fortran/ChangeLog | 9 +++++++++ gcc/fortran/trans-expr.c | 5 ++++- gcc/fortran/trans-openmp.c | 3 ++- 3 files changed, 15 insertions(+), 2 deletions(-) diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 19eba467c66..b117d18ef1b 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,12 @@ +2007-11-28 Jakub Jelinek + + * trans-expr.c (gfc_trans_string_copy): Convert both dest and + src to void *. + + PR fortran/34247 + * trans-openmp.c (gfc_omp_privatize_by_reference): For REFERENCE_TYPE + pass by reference only PARM_DECLs or non-artificial decls. + 2007-11-27 Jerry DeLisle PR fortran/32928 diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index e3e98b9c269..493f73b7df9 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -2708,7 +2708,10 @@ gfc_trans_string_copy (stmtblock_t * block, tree dlength, tree dest, We're now doing it here for better optimization, but the logic is the same. */ - + + dest = fold_convert (pvoid_type_node, dest); + src = fold_convert (pvoid_type_node, src); + /* Truncate string if source is too long. */ cond2 = fold_build2 (GE_EXPR, boolean_type_node, slen, dlen); tmp2 = build_call_expr (built_in_decls[BUILT_IN_MEMMOVE], diff --git a/gcc/fortran/trans-openmp.c b/gcc/fortran/trans-openmp.c index 047c2b82ca5..ea595a0f70f 100644 --- a/gcc/fortran/trans-openmp.c +++ b/gcc/fortran/trans-openmp.c @@ -44,7 +44,8 @@ gfc_omp_privatize_by_reference (const_tree decl) { tree type = TREE_TYPE (decl); - if (TREE_CODE (type) == REFERENCE_TYPE) + if (TREE_CODE (type) == REFERENCE_TYPE + && (!DECL_ARTIFICIAL (decl) || TREE_CODE (decl) == PARM_DECL)) return true; if (TREE_CODE (type) == POINTER_TYPE) -- 2.30.2