aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/trans-expr.c
diff options
context:
space:
mode:
authorLouis Krupp <louis.krupp@zoho.com>2017-01-18 21:41:48 +0000
committerLouis Krupp <lkrupp@gcc.gnu.org>2017-01-18 21:41:48 +0000
commit7bd5dad24907ba68a81365932d442d40460e4ed0 (patch)
treef3c2d51177dd1d7a3ef318c7e91d16919ecfdf48 /gcc/fortran/trans-expr.c
parentb37589b0c4c23db8e9f1d4825998aea18125435a (diff)
downloadgcc-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.c6
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)