aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/resolve.c
diff options
context:
space:
mode:
authorPaul Thomas <pault@gcc.gnu.org>2012-12-02 15:23:30 +0000
committerPaul Thomas <pault@gcc.gnu.org>2012-12-02 15:23:30 +0000
commit474d486a73cc9fb511c489e902b5cea51f1ae640 (patch)
tree42ca63ce0439afa2eedb867b21c53176859b95df /gcc/fortran/resolve.c
parent9b6343a1d47ba8cd7a3cf3a577159dddbb9e81d5 (diff)
downloadgcc-474d486a73cc9fb511c489e902b5cea51f1ae640.zip
gcc-474d486a73cc9fb511c489e902b5cea51f1ae640.tar.gz
gcc-474d486a73cc9fb511c489e902b5cea51f1ae640.tar.bz2
resolve.c (resolve_allocate_deallocate, [...]): Recover revisions 193568 and 193778...
2012-12-02 Paul Thomas <pault@gcc.gnu.org> * resolve.c (resolve_allocate_deallocate, resolve_typebound_intrinsic_op): Recover revisions 193568 and 193778, which were accidentally reverted by the previous patch. From-SVN: r194052
Diffstat (limited to 'gcc/fortran/resolve.c')
-rw-r--r--gcc/fortran/resolve.c18
1 files changed, 13 insertions, 5 deletions
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 92df38c..7d434dd 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -7622,12 +7622,18 @@ resolve_allocate_deallocate (gfc_code *code, const char *fcn)
if (pr->next && qr->next)
{
+ int i;
gfc_array_ref *par = &(pr->u.ar);
gfc_array_ref *qar = &(qr->u.ar);
- if ((par->start[0] != NULL || qar->start[0] != NULL)
- && gfc_dep_compare_expr (par->start[0],
- qar->start[0]) != 0)
- break;
+
+ for (i=0; i<par->dimen; i++)
+ {
+ if ((par->start[i] != NULL
+ || qar->start[i] != NULL)
+ && gfc_dep_compare_expr (par->start[i],
+ qar->start[i]) != 0)
+ goto break_label;
+ }
}
}
else
@@ -7639,6 +7645,8 @@ resolve_allocate_deallocate (gfc_code *code, const char *fcn)
pr = pr->next;
qr = qr->next;
}
+ break_label:
+ ;
}
}
}
@@ -11948,7 +11956,7 @@ resolve_typebound_intrinsic_op (gfc_symbol* derived, gfc_intrinsic_op op,
/* Add target to non-typebound operator list. */
if (!target->specific->deferred && !derived->attr.use_assoc
- && p->access != ACCESS_PRIVATE)
+ && p->access != ACCESS_PRIVATE && derived->ns == gfc_current_ns)
{
gfc_interface *head, *intr;
if (gfc_check_new_interface (derived->ns->op[op], target_proc,