aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/interface.c
diff options
context:
space:
mode:
authorSandra Loosemore <sandra@codesourcery.com>2021-09-23 15:00:43 -0700
committerSandra Loosemore <sandra@codesourcery.com>2021-09-24 10:08:18 -0700
commit2364250eccc389a5f9820ac55f8260d34f229e73 (patch)
tree61ff7148a5e188ce4f6a61d9bd7194a5629cd9b3 /gcc/fortran/interface.c
parent34947d4e97ee72b26491cfe5ff4fa8258fadbe95 (diff)
downloadgcc-2364250eccc389a5f9820ac55f8260d34f229e73.zip
gcc-2364250eccc389a5f9820ac55f8260d34f229e73.tar.gz
gcc-2364250eccc389a5f9820ac55f8260d34f229e73.tar.bz2
Fortran: Add missing diagnostic for F2018 C711 (TS29113 C407c)
2021-09-24 Sandra Loosemore <sandra@codesourcery.com> PR fortran/101333 gcc/fortran/ * interface.c (compare_parameter): Enforce F2018 C711. gcc/testsuite/ * gfortran.dg/c-interop/c407c-1.f90: Remove xfails.
Diffstat (limited to 'gcc/fortran/interface.c')
-rw-r--r--gcc/fortran/interface.c15
1 files changed, 15 insertions, 0 deletions
diff --git a/gcc/fortran/interface.c b/gcc/fortran/interface.c
index dae4b95..a2fea0e 100644
--- a/gcc/fortran/interface.c
+++ b/gcc/fortran/interface.c
@@ -2448,6 +2448,21 @@ compare_parameter (gfc_symbol *formal, gfc_expr *actual,
return false;
}
+ /* TS29113 C407c; F2018 C711. */
+ if (actual->ts.type == BT_ASSUMED
+ && symbol_rank (formal) == -1
+ && actual->rank != -1
+ && !(actual->symtree->n.sym->as
+ && actual->symtree->n.sym->as->type == AS_ASSUMED_SHAPE))
+ {
+ if (where)
+ gfc_error ("Assumed-type actual argument at %L corresponding to "
+ "assumed-rank dummy argument %qs must be "
+ "assumed-shape or assumed-rank",
+ &actual->where, formal->name);
+ return false;
+ }
+
/* F2008, 12.5.2.5; IR F08/0073. */
if (formal->ts.type == BT_CLASS && formal->attr.class_ok
&& actual->expr_type != EXPR_NULL