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:
parent
5a7fd37d28
commit
a53c029bf8
2 changed files with 18 additions and 6 deletions
|
@ -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;
|
||||
|
|
8
gcc/testsuite/gfortran.dg/pr104626.f90
Normal file
8
gcc/testsuite/gfortran.dg/pr104626.f90
Normal 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
|
Loading…
Add table
Reference in a new issue