Commit 1b70aaad by Steven G. Kargl

re PR fortran/71859 (ICE on same variable/subroutine name (verify_gimple failed))

2016-07-28  Steven G. Kargl  <kargl@gcc.gnu.org>

	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  <kargl@gcc.gnu.org>

	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
parent 717a7673
2016-07-28 Steven G. Kargl <kargl@gcc.gnu.org>
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 <kargl@gcc.gnu.org>
Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/71883
......
......@@ -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);
......
2016-07-28 Steven G. Kargl <kargl@gcc.gnu.org>
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.
2016-07-28 Paul Thomas <pault@gcc.gnu.org>
PR fortran/71883
......
......@@ -14,7 +14,7 @@ program test
integer(8) :: i8
character(len=19, kind=4) :: msg4
call co_sum("abc") ! { dg-error "must be a numeric type" }
call co_sum("abc") ! { dg-error "must have a numeric type" }
call co_max(cmplx(1.0,0.0)) ! { dg-error "shall be of type integer, real or character" }
call co_min(cmplx(0.0,1.0)) ! { dg-error "shall be of type integer, real or character" }
......
......@@ -4,6 +4,6 @@
LOGICAL Z
CHARACTER A
REAL R
R = ABS(Z) ! { dg-error " must be a numeric type" }
R = ABS(A) ! { dg-error " must be a numeric type" }
R = ABS(Z) ! { dg-error " must have a numeric type" }
R = ABS(A) ! { dg-error " must have a numeric type" }
END
! { dg-do compile }
program p
call s(1)
x = abs(s) ! { dg-error "must have a numeric type" }
end
subroutine s(n)
print *, n
end
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment