diff options
author | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2016-01-24 22:18:20 +0000 |
---|---|---|
committer | Jerry DeLisle <jvdelisle@gcc.gnu.org> | 2016-01-24 22:18:20 +0000 |
commit | 1d10121630ae1181611e6fde41ab89c507326564 (patch) | |
tree | c4b2fa7e6c57bcfb7985990569b0be1ef4d640b7 /gcc/fortran | |
parent | a220f43d1154946c71a2208bd13fa10c945fcef5 (diff) | |
download | gcc-1d10121630ae1181611e6fde41ab89c507326564.zip gcc-1d10121630ae1181611e6fde41ab89c507326564.tar.gz gcc-1d10121630ae1181611e6fde41ab89c507326564.tar.bz2 |
[multiple changes]
2016-01-23 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/69397
PR fortran/68442
* interface.c (gfc_arglist_matches_symbol): Replace assert with
a return false if not a procedure.
* resolve.c (resolve_generic_f): Test if we are resolving an
initialization expression and adjust error message accordingly.
2016-01-24 Jerry DeLisle <jvdelisle@gcc.gnu.org>
PR fortran/69397
PR fortran/68442
* gfortran.dg/interface_38.f90: New test.
* gfortran.dg/interface_39.f90: New test.
From-SVN: r232780
Diffstat (limited to 'gcc/fortran')
-rw-r--r-- | gcc/fortran/ChangeLog | 9 | ||||
-rw-r--r-- | gcc/fortran/interface.c | 3 | ||||
-rw-r--r-- | gcc/fortran/resolve.c | 9 |
3 files changed, 18 insertions, 3 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 414991b..5853ddf 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,12 @@ +2016-01-23 Jerry DeLisle <jvdelisle@gcc.gnu.org> + + PR fortran/69397 + PR fortran/68442 + * interface.c (gfc_arglist_matches_symbol): Replace assert with + a return false if not a procedure. + * resolve.c (resolve_generic_f): Test if we are resolving an + initialization expression and adjust error message accordingly. + 2016-01-24 Thomas Koenig <tkoenig@gcc.gnu.org> PR fortran/66094 diff --git a/gcc/fortran/interface.c b/gcc/fortran/interface.c index f5e8d0d..5c66c6e 100644 --- a/gcc/fortran/interface.c +++ b/gcc/fortran/interface.c @@ -3506,7 +3506,8 @@ gfc_arglist_matches_symbol (gfc_actual_arglist** args, gfc_symbol* sym) gfc_formal_arglist *dummy_args; bool r; - gcc_assert (sym->attr.flavor == FL_PROCEDURE); + if (sym->attr.flavor != FL_PROCEDURE) + return false; dummy_args = gfc_sym_get_dummy_args (sym); diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c index 64d59ce..8752fd4 100644 --- a/gcc/fortran/resolve.c +++ b/gcc/fortran/resolve.c @@ -2565,8 +2565,13 @@ generic: that possesses a matching interface. 14.1.2.4 */ if (sym && !intr && !gfc_is_intrinsic (sym, 0, expr->where)) { - gfc_error ("There is no specific function for the generic %qs " - "at %L", expr->symtree->n.sym->name, &expr->where); + if (gfc_init_expr_flag) + gfc_error ("Function %qs in initialization expression at %L " + "must be an intrinsic function", + expr->symtree->n.sym->name, &expr->where); + else + gfc_error ("There is no specific function for the generic %qs " + "at %L", expr->symtree->n.sym->name, &expr->where); return false; } |