aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/resolve.c
diff options
context:
space:
mode:
authorMikael Morin <mikael.morin@tele2.fr>2008-11-16 23:45:10 +0100
committerMikael Morin <mikael@gcc.gnu.org>2008-11-16 22:45:10 +0000
commit2b0bd71482ce011ac9c399534feb9c62a7d75a80 (patch)
tree232858a8b76bd4730269441ec98967c72d4e5605 /gcc/fortran/resolve.c
parentd3ea650c44d79a7ba10ec2964cf2bfd707c7b396 (diff)
downloadgcc-2b0bd71482ce011ac9c399534feb9c62a7d75a80.zip
gcc-2b0bd71482ce011ac9c399534feb9c62a7d75a80.tar.gz
gcc-2b0bd71482ce011ac9c399534feb9c62a7d75a80.tar.bz2
re PR fortran/35681 (wrong result for vector subscripted array expression in MVBITS)
2008-11-16 Mikael Morin <mikael.morin@tele2.fr> PR fortran/35681 * dependency.c (gfc_check_argument_var_dependency): Add elemental check flag. Issue a warning if we find a dependency but don't generate a temporary. Add the case of an elemental function call as actual argument to an elemental procedure. Add the case of an operator expression as actual argument to an elemental procedure. (gfc_check_argument_dependency): Add elemental check flag. Update calls to gfc_check_argument_var_dependency. (gfc_check_fncall_dependency): Add elemental check flag. Update call to gfc_check_argument_dependency. * trans-stmt.c (gfc_trans_call): Make call to gfc_conv_elemental_dependency unconditional, but with a flag whether we should check dependencies between variables. (gfc_conv_elemental_dependency): Add elemental check flag. Update call to gfc_check_fncall_dependency. * trans-expr.c (gfc_trans_arrayfunc_assign): Update call to gfc_check_fncall_dependency. * resolve.c (find_noncopying_intrinsics): Update call to gfc_check_fncall_dependency. * dependency.h (enum gfc_dep_check): New enum. (gfc_check_fncall_dependency): Update prototype. 2008-11-16 Mikael Morin <mikael.morin@tele2.fr> PR fortran/35681 * gfortran.dg/elemental_dependency_1.f90: New test. From-SVN: r141931
Diffstat (limited to 'gcc/fortran/resolve.c')
-rw-r--r--gcc/fortran/resolve.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index aae1ef7..e4766d6 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -1491,7 +1491,8 @@ find_noncopying_intrinsics (gfc_symbol *fnsym, gfc_actual_arglist *actual)
for (ap = actual; ap; ap = ap->next)
if (ap->expr
&& (expr = gfc_get_noncopying_intrinsic_argument (ap->expr))
- && !gfc_check_fncall_dependency (expr, INTENT_IN, fnsym, actual))
+ && !gfc_check_fncall_dependency (expr, INTENT_IN, fnsym, actual,
+ NOT_ELEMENTAL))
ap->expr->inline_noncopying_intrinsic = 1;
}