diff options
author | Paul Thomas <pault@gcc.gnu.org> | 2006-12-31 06:55:16 +0000 |
---|---|---|
committer | Paul Thomas <pault@gcc.gnu.org> | 2006-12-31 06:55:16 +0000 |
commit | 7fcafa718da6cb8e072bcadde5eab440df5898d0 (patch) | |
tree | 6103da430695e877961c11f0de7a098d90d6f0c2 /gcc/fortran/interface.c | |
parent | e7e9c63d558d1e7a564d7542038615b980710272 (diff) | |
download | gcc-7fcafa718da6cb8e072bcadde5eab440df5898d0.zip gcc-7fcafa718da6cb8e072bcadde5eab440df5898d0.tar.gz gcc-7fcafa718da6cb8e072bcadde5eab440df5898d0.tar.bz2 |
re PR fortran/23060 (%VAL, %REF and %DESCR constructs not implemented)
2006-12-31 Paul Thomas <pault@gcc.gnu.org>
PR fortran/23060
* intrinsic.c (compare_actual_formal ): Distinguish argument
list functions from keywords.
* intrinsic.c (sort_actual): If formal is NULL, the presence of
an argument list function actual is an error.
* trans-expr.c (conv_arglist_function) : New function to
implement argument list functions %VAL, %REF and %LOC.
(gfc_conv_function_call): Call it.
* resolve.c (resolve_actual_arglist): Add arg ptype and check
argument list functions.
(resolve_function, resolve_call): Set value of ptype before
calls to resolve_actual_arglist.
* primary.c (match_arg_list_function): New function.
(gfc_match_actual_arglist): Call it before trying for a
keyword argument.
2006-12-31 Paul Thomas <pault@gcc.gnu.org>
PR fortran/23060
* gfortran.dg/c_by_val.c: Called by c_by_val_1.f.
* gfortran.dg/c_by_val_1.f: New test.
* gfortran.dg/c_by_val_2.f: New test.
* gfortran.dg/c_by_val_3.f: New test.
From-SVN: r120295
Diffstat (limited to 'gcc/fortran/interface.c')
-rw-r--r-- | gcc/fortran/interface.c | 3 |
1 files changed, 2 insertions, 1 deletions
diff --git a/gcc/fortran/interface.c b/gcc/fortran/interface.c index 67a2064..04618e7 100644 --- a/gcc/fortran/interface.c +++ b/gcc/fortran/interface.c @@ -1293,7 +1293,8 @@ compare_actual_formal (gfc_actual_arglist ** ap, for (a = actual; a; a = a->next, f = f->next) { - if (a->name != NULL) + /* Look for keywords but ignore g77 extensions like %VAL. */ + if (a->name != NULL && a->name[0] != '%') { i = 0; for (f = formal; f; f = f->next, i++) |