diff options
author | Tobias Burnus <burnus@net-b.de> | 2011-01-25 14:30:32 +0100 |
---|---|---|
committer | Tobias Burnus <burnus@gcc.gnu.org> | 2011-01-25 14:30:32 +0100 |
commit | 315d905fd552d1ace2196310e527407f9b5bdbd8 (patch) | |
tree | 73b33d0e48ad303f479fa34730ef70addcf7d6d7 /gcc/fortran | |
parent | 9ffa621eadf61d2f13af900392d250870519d011 (diff) | |
download | gcc-315d905fd552d1ace2196310e527407f9b5bdbd8.zip gcc-315d905fd552d1ace2196310e527407f9b5bdbd8.tar.gz gcc-315d905fd552d1ace2196310e527407f9b5bdbd8.tar.bz2 |
re PR fortran/47448 (Invalid check for ASSIGNMENT(=))
2011-01-25 Tobias Burnus <burnus@net-b.de>
PR fortran/47448
* interface.c (gfc_check_operator_interface): Fix
defined-assignment check.
2011-01-25 Tobias Burnus <burnus@net-b.de>
PR fortran/47448
* gfortran.dg/redefined_intrinsic_assignment_2.f90: New.
From-SVN: r169228
Diffstat (limited to 'gcc/fortran')
-rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/interface.c | 5 |
2 files changed, 9 insertions, 2 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 489caca..c5ba0e5 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2011-01-25 Tobias Burnus <burnus@net-b.de> + + PR fortran/47448 + * interface.c (gfc_check_operator_interface): Fix + defined-assignment check. + 2011-01-23 Tobias Burnus <burnus@net-b.de> PR fortran/47421 diff --git a/gcc/fortran/interface.c b/gcc/fortran/interface.c index 1febb5d..c5b690e 100644 --- a/gcc/fortran/interface.c +++ b/gcc/fortran/interface.c @@ -654,11 +654,12 @@ gfc_check_operator_interface (gfc_symbol *sym, gfc_intrinsic_op op, /* Allowed are (per F2003, 12.3.2.1.2 Defined assignments): - First argument an array with different rank than second, - - Types and kinds do not conform, and + - First argument is a scalar and second an array, + - Types and kinds do not conform, or - First argument is of derived type. */ if (sym->formal->sym->ts.type != BT_DERIVED && sym->formal->sym->ts.type != BT_CLASS - && (r1 == 0 || r1 == r2) + && (r2 == 0 || r1 == r2) && (sym->formal->sym->ts.type == sym->formal->next->sym->ts.type || (gfc_numeric_ts (&sym->formal->sym->ts) && gfc_numeric_ts (&sym->formal->next->sym->ts)))) |