aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/dependency.h
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/dependency.h
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/dependency.h')
-rw-r--r--gcc/fortran/dependency.h13
1 files changed, 12 insertions, 1 deletions
diff --git a/gcc/fortran/dependency.h b/gcc/fortran/dependency.h
index 041b0d5..1920c55 100644
--- a/gcc/fortran/dependency.h
+++ b/gcc/fortran/dependency.h
@@ -19,13 +19,24 @@ You should have received a copy of the GNU General Public License
along with GCC; see the file COPYING3. If not see
<http://www.gnu.org/licenses/>. */
+/****************************** Enums *********************************/
+typedef enum
+{
+ NOT_ELEMENTAL, /* Not elemental case: normal dependency check. */
+ ELEM_CHECK_VARIABLE, /* Test whether variables overlap. */
+ ELEM_DONT_CHECK_VARIABLE /* Test whether variables overlap only if used
+ in an expression. */
+}
+gfc_dep_check;
+/*********************** Functions prototypes **************************/
+
bool gfc_ref_needs_temporary_p (gfc_ref *);
bool gfc_full_array_ref_p (gfc_ref *);
gfc_expr *gfc_get_noncopying_intrinsic_argument (gfc_expr *);
int gfc_check_fncall_dependency (gfc_expr *, sym_intent, gfc_symbol *,
- gfc_actual_arglist *);
+ gfc_actual_arglist *, gfc_dep_check);
int gfc_check_dependency (gfc_expr *, gfc_expr *, bool);
int gfc_is_same_range (gfc_array_ref *, gfc_array_ref *, int, int);
int gfc_expr_is_one (gfc_expr *, int);