diff options
| author | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-11-28 19:43:03 +0000 |
|---|---|---|
| committer | jakub <jakub@138bc75d-0d04-0410-961f-82ee72b054a4> | 2007-11-28 19:43:03 +0000 |
| commit | ceeda7344ece7ee673d89cf7f899c99aaa528d0e (patch) | |
| tree | 983d51c5ea1343eb0959c7bdd9ac398b2bed5efa /gcc/fortran | |
| parent | cfbfdd6655bcd8bd315dd2aae9006812701c4fab (diff) | |
| download | ppe42-gcc-ceeda7344ece7ee673d89cf7f899c99aaa528d0e.tar.gz ppe42-gcc-ceeda7344ece7ee673d89cf7f899c99aaa528d0e.zip | |
* 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.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@130492 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/fortran')
| -rw-r--r-- | gcc/fortran/ChangeLog | 9 | ||||
| -rw-r--r-- | gcc/fortran/trans-expr.c | 5 | ||||
| -rw-r--r-- | 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 <jakub@redhat.com> + + * 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 <jvdelisle@gcc.gnu.org> 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) |

