aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran
diff options
context:
space:
mode:
authorTobias Burnus <burnus@net-b.de>2011-01-25 14:30:32 +0100
committerTobias Burnus <burnus@gcc.gnu.org>2011-01-25 14:30:32 +0100
commit315d905fd552d1ace2196310e527407f9b5bdbd8 (patch)
tree73b33d0e48ad303f479fa34730ef70addcf7d6d7 /gcc/fortran
parent9ffa621eadf61d2f13af900392d250870519d011 (diff)
downloadgcc-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/ChangeLog6
-rw-r--r--gcc/fortran/interface.c5
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))))