diff options
author | Mikael Morin <mikael.morin@tele2.fr> | 2008-11-16 23:45:10 +0100 |
---|---|---|
committer | Mikael Morin <mikael@gcc.gnu.org> | 2008-11-16 22:45:10 +0000 |
commit | 2b0bd71482ce011ac9c399534feb9c62a7d75a80 (patch) | |
tree | 232858a8b76bd4730269441ec98967c72d4e5605 /gcc/fortran/dependency.h | |
parent | d3ea650c44d79a7ba10ec2964cf2bfd707c7b396 (diff) | |
download | gcc-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.h | 13 |
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); |