Fortran: Fix ICE on invalid in gfc_format_decoder.

PR fortran/104626

gcc/fortran/ChangeLog:

	* symbol.cc (gfc_add_save): Add checks for SAVE attribute
	conflicts and duplicate SAVE attribute.

gcc/testsuite/ChangeLog:

	* gfortran.dg/pr104626.f90: New test.
This commit is contained in:
Steve Kargl 2024-08-01 21:50:49 -07:00 committed by Jerry DeLisle
parent 5a7fd37d28
commit a53c029bf8
2 changed files with 18 additions and 6 deletions

View file

@ -1307,9 +1307,8 @@ gfc_add_save (symbol_attribute *attr, save_state s, const char *name,
if (s == SAVE_EXPLICIT && gfc_pure (NULL))
{
gfc_error
("SAVE attribute at %L cannot be specified in a PURE procedure",
where);
gfc_error ("SAVE attribute at %L cannot be specified in a PURE "
"procedure", where);
return false;
}
@ -1319,10 +1318,15 @@ gfc_add_save (symbol_attribute *attr, save_state s, const char *name,
if (s == SAVE_EXPLICIT && attr->save == SAVE_EXPLICIT
&& (flag_automatic || pedantic))
{
if (!gfc_notify_std (GFC_STD_LEGACY,
"Duplicate SAVE attribute specified at %L",
where))
if (!where)
{
gfc_error ("Duplicate SAVE attribute specified near %C");
return false;
}
if (!gfc_notify_std (GFC_STD_LEGACY, "Duplicate SAVE attribute "
"specified at %L", where))
return false;
}
attr->save = s;

View file

@ -0,0 +1,8 @@
! { dg-do compile }
program p
procedure(g), save :: f ! { dg-error "PROCEDURE attribute conflicts" }
procedure(g), save :: f ! { dg-error "Duplicate SAVE attribute" }
contains
subroutine g
end
end