diff options
author | Louis Krupp <louis.krupp@zoho.com> | 2017-01-18 21:41:48 +0000 |
---|---|---|
committer | Louis Krupp <lkrupp@gcc.gnu.org> | 2017-01-18 21:41:48 +0000 |
commit | 7bd5dad24907ba68a81365932d442d40460e4ed0 (patch) | |
tree | f3c2d51177dd1d7a3ef318c7e91d16919ecfdf48 /gcc/fortran/trans-expr.c | |
parent | b37589b0c4c23db8e9f1d4825998aea18125435a (diff) | |
download | gcc-7bd5dad24907ba68a81365932d442d40460e4ed0.zip gcc-7bd5dad24907ba68a81365932d442d40460e4ed0.tar.gz gcc-7bd5dad24907ba68a81365932d442d40460e4ed0.tar.bz2 |
re PR fortran/50069 (FORALL fails on a character array)
2017-01-18 Louis Krupp <louis.krupp@zoho.com>
PR fortran/50069
PR fortran/55086
* gfortran.dg/pr50069_1.f90: New test.
* gfortran.dg/pr50069_2.f90: New test.
* gfortran.dg/pr55086_1.f90: New test.
* gfortran.dg/pr55086_1_tfat.f90: New test.
* gfortran.dg/pr55086_2.f90: New test.
* gfortran.dg/pr55086_2_tfat.f90: New test.
* gfortran.dg/pr55086_aliasing_dummy_4_tfat.f90: New test.
2017-01-18 Louis Krupp <louis.krupp@zoho.com>
PR fortran/50069
PR fortran/55086
* trans-expr.c (gfc_conv_variable): Don't treat temporary variables
as function arguments.
* trans-stmt.c (forall_make_variable_temp,
generate_loop_for_temp_to_lhs, gfc_trans_assign_need_temp,
gfc_trans_forall_1): Don't adjust offset of forall temporary
for array sections, make forall temporaries work for substring
expressions, improve test coverage by adding -ftest-forall-temp
option to request usage of temporary array in forall code.
* lang.opt: Add -ftest-forall-temp option.
* invoke.texi: Add -ftest-forall-temp option.
From-SVN: r244601
Diffstat (limited to 'gcc/fortran/trans-expr.c')
-rw-r--r-- | gcc/fortran/trans-expr.c | 6 |
1 files changed, 4 insertions, 2 deletions
diff --git a/gcc/fortran/trans-expr.c b/gcc/fortran/trans-expr.c index ee8e15d..138af56 100644 --- a/gcc/fortran/trans-expr.c +++ b/gcc/fortran/trans-expr.c @@ -2544,8 +2544,10 @@ gfc_conv_variable (gfc_se * se, gfc_expr * expr) if (se_expr) se->expr = se_expr; - /* Procedure actual arguments. */ - else if (sym->attr.flavor == FL_PROCEDURE + /* Procedure actual arguments. Look out for temporary variables + with the same attributes as function values. */ + else if (!sym->attr.temporary + && sym->attr.flavor == FL_PROCEDURE && se->expr != current_function_decl) { if (!sym->attr.dummy && !sym->attr.proc_pointer) |