http://gcc.gnu.org/bugzilla/show_bug.cgi?id=47569
--- Comment #2 from Tobias Burnus <burnus at gcc dot gnu.org> 2011-02-01 11:33:33 UTC --- A bit unrelated to the reported problem, but I wonder whether the coarray/coindexed part is already correctly checked for: "If the actual argument is a coindexed scalar, the corresponding dummy argument shall be scalar. If the actual argument is a noncoindexed scalar, the corresponding dummy argument shall be scalar unless the actual argument is default character, of type character with the C character kind (15.2.2), or is an element or substring of an element of an array that is not an assumed-shape, pointer, or polymorphic array." (F2008) * * * Draft patch: diff --git a/gcc/fortran/interface.c b/gcc/fortran/interface.c index 1e5df61..28daf8a 100644 --- a/gcc/fortran/interface.c +++ b/gcc/fortran/interface.c @@ -1672,7 +1672,7 @@ compare_parameter (gfc_symbol *formal, gfc_expr *actual, return 1; /* At this point, we are considering a scalar passed to an array. This - is valid (cf. F95 12.4.1.1; F2003 12.4.1.2), + is valid (cf. F95 12.4.1.1 and F2008 12.5.2.4; F2003 12.4.1.2), - if the actual argument is (a substring of) an element of a non-assumed-shape/non-pointer array; - (F2003) if the actual argument is of type character. */ @@ -1686,8 +1686,8 @@ compare_parameter (gfc_symbol *formal, gfc_expr *actual, if (formal->ts.type == BT_CHARACTER && (ref == NULL || (actual->expr_type == EXPR_VARIABLE - && (actual->symtree->n.sym->as->type == AS_ASSUMED_SHAPE - || actual->symtree->n.sym->attr.pointer)))) + && (ref->u.ar.as->type == AS_ASSUMED_SHAPE + || gfc_expr_attr (actual).pointer)))) { if (where && (gfc_option.allow_std & GFC_STD_F2003) == 0) {