Commit 56dfd92c by Mark Eggleston

Fortran : ICE in resolve_fl_procedure PR95708

Now issues an error "Intrinsic procedure 'num_images' not
allowed in PROCEDURE" instead of an ICE.

2020-06-22  Steven G. Kargl  <kargl@gcc.gnu.org>

gcc/fortran/

	PR fortran/95708
	* intrinsic.c (add_functions): Replace CLASS_INQUIRY with
	CLASS_TRANSFORMATIONAL for intrinsic num_images.
	(make_generic): Replace ACTUAL_NO with ACTUAL_YES for
	intrinsic team_number.
	* resolve.c (resolve_fl_procedure): Check pointer ts.u.derived
	exists before using it.

2020-06-22  Mark Eggleston  <markeggleston@gcc.gnu.org>

gcc/testsuite/

	PR fortran/95708
	* gfortran.dg/pr95708.f90: New test.

(cherry picked from commit 647340c92a042e8e6f7d004637f07060dbde49c0)
parent d4cfbaf5
...@@ -2733,8 +2733,8 @@ add_functions (void) ...@@ -2733,8 +2733,8 @@ add_functions (void)
make_generic ("null", GFC_ISYM_NULL, GFC_STD_F95); make_generic ("null", GFC_ISYM_NULL, GFC_STD_F95);
add_sym_2 ("num_images", GFC_ISYM_NUM_IMAGES, CLASS_INQUIRY, ACTUAL_NO, add_sym_2 ("num_images", GFC_ISYM_NUM_IMAGES, CLASS_TRANSFORMATIONAL,
BT_INTEGER, di, GFC_STD_F2008, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F2008,
gfc_check_num_images, gfc_simplify_num_images, NULL, gfc_check_num_images, gfc_simplify_num_images, NULL,
dist, BT_INTEGER, di, OPTIONAL, dist, BT_INTEGER, di, OPTIONAL,
failed, BT_LOGICAL, dl, OPTIONAL); failed, BT_LOGICAL, dl, OPTIONAL);
...@@ -3174,7 +3174,7 @@ add_functions (void) ...@@ -3174,7 +3174,7 @@ add_functions (void)
make_generic ("tanh", GFC_ISYM_TANH, GFC_STD_F77); make_generic ("tanh", GFC_ISYM_TANH, GFC_STD_F77);
add_sym_1 ("team_number", GFC_ISYM_TEAM_NUMBER, CLASS_TRANSFORMATIONAL, add_sym_1 ("team_number", GFC_ISYM_TEAM_NUMBER, CLASS_TRANSFORMATIONAL,
ACTUAL_YES, BT_INTEGER, di, GFC_STD_F2018, ACTUAL_NO, BT_INTEGER, di, GFC_STD_F2018,
gfc_check_team_number, NULL, gfc_resolve_team_number, gfc_check_team_number, NULL, gfc_resolve_team_number,
team, BT_DERIVED, di, OPTIONAL); team, BT_DERIVED, di, OPTIONAL);
......
...@@ -12999,6 +12999,7 @@ resolve_fl_procedure (gfc_symbol *sym, int mp_flag) ...@@ -12999,6 +12999,7 @@ resolve_fl_procedure (gfc_symbol *sym, int mp_flag)
{ {
if (arg->sym if (arg->sym
&& arg->sym->ts.type == BT_DERIVED && arg->sym->ts.type == BT_DERIVED
&& arg->sym->ts.u.derived
&& !arg->sym->ts.u.derived->attr.use_assoc && !arg->sym->ts.u.derived->attr.use_assoc
&& !gfc_check_symbol_access (arg->sym->ts.u.derived) && !gfc_check_symbol_access (arg->sym->ts.u.derived)
&& !gfc_notify_std (GFC_STD_F2003, "%qs is of a PRIVATE type " && !gfc_notify_std (GFC_STD_F2003, "%qs is of a PRIVATE type "
......
! { dg-do compile }
!
program test
procedure(team_num) :: g ! { dg-error "must be explicit" }
end program
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