From 1b70aaad4c090c90d69c514138a8c157af930b57 Mon Sep 17 00:00:00 2001 From: "Steven G. Kargl" Date: Thu, 28 Jul 2016 17:48:54 +0000 Subject: re PR fortran/71859 (ICE on same variable/subroutine name (verify_gimple failed)) 2016-07-28 Steven G. Kargl PR fortran/71859 * check.c(numeric_check): Prevent ICE. Issue error for invalid subroutine as an actual argument when numeric argument is expected. 2016-07-28 Steven G. Kargl PR fortran/71859 * gfortran.dg/pr71859.f90: New test. * gfortran.dg/intrinsic_numeric_arg.f: Update error message. * gfortran.dg/coarray_collectives_1.f90: Ditto. From-SVN: r238825 --- gcc/fortran/ChangeLog | 6 ++++++ gcc/fortran/check.c | 9 ++++++++- 2 files changed, 14 insertions(+), 1 deletion(-) (limited to 'gcc/fortran') diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 85f2107..a5c2968 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,4 +1,10 @@ 2016-07-28 Steven G. Kargl + + PR fortran/71859 + * check.c(numeric_check): Prevent ICE. Issue error for invalid + subroutine as an actual argument when numeric argument is expected. + +2016-07-28 Steven G. Kargl Thomas Koenig PR fortran/71883 diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c index 7fc60808..085ac40 100644 --- a/gcc/fortran/check.c +++ b/gcc/fortran/check.c @@ -72,6 +72,11 @@ type_check (gfc_expr *e, int n, bt type) static bool numeric_check (gfc_expr *e, int n) { + /* Users sometime use a subroutine designator as an actual argument to + an intrinsic subprogram that expects an argument with a numeric type. */ + if (e->symtree && e->symtree->n.sym->attr.subroutine) + goto error; + if (gfc_numeric_ts (&e->ts)) return true; @@ -86,7 +91,9 @@ numeric_check (gfc_expr *e, int n) return true; } - gfc_error ("%qs argument of %qs intrinsic at %L must be a numeric type", +error: + + gfc_error ("%qs argument of %qs intrinsic at %L must have a numeric type", gfc_current_intrinsic_arg[n]->name, gfc_current_intrinsic, &e->where); -- cgit v1.1