aboutsummaryrefslogtreecommitdiff
path: root/gcc/fortran/resolve.c
diff options
context:
space:
mode:
Diffstat (limited to 'gcc/fortran/resolve.c')
-rw-r--r--gcc/fortran/resolve.c14
1 files changed, 14 insertions, 0 deletions
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index b9653eb..3b6d3a7 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -836,6 +836,7 @@ resolve_actual_arglist (gfc_actual_arglist * arg)
|| sym->attr.intrinsic
|| sym->attr.external)
{
+ int actual_ok;
/* If a procedure is not already determined to be something else
check if it is intrinsic. */
@@ -851,6 +852,19 @@ resolve_actual_arglist (gfc_actual_arglist * arg)
"actual argument", sym->name, &e->where);
}
+ actual_ok = gfc_intrinsic_actual_ok (sym->name, sym->attr.subroutine);
+ if (sym->attr.intrinsic && actual_ok == 0)
+ {
+ gfc_error ("Intrinsic '%s' at %L is not allowed as an "
+ "actual argument", sym->name, &e->where);
+ }
+ else if (sym->attr.intrinsic && actual_ok == 2)
+ /* We need a special case for CHAR, which is the only intrinsic
+ function allowed as actual argument in F2003 and not allowed
+ in F95. */
+ gfc_notify_std (GFC_STD_F2003, "Fortran 2003: CHAR intrinsic "
+ "allowed as actual argument at %L", &e->where);
+
if (sym->attr.contained && !sym->attr.use_assoc
&& sym->ns->proc_name->attr.flavor != FL_MODULE)
{