This is the mail archive of the
fortran@gcc.gnu.org
mailing list for the GNU Fortran project.
Re: Recent VCG changes break gfortran's -std=f95 option
On Tue, Jun 06, 2006 at 08:16:54AM +0200, FX Coudert wrote:
>
> >>Something is marking random_seed as noreturn.
> >
> >As far as I understand, symbols are marked as noreturn by use of
> >TREE_THIS_VOLATILE, which is done on a few selected trees and is
> >also done whenever a symbol has the noreturn attribute. This
> >noreturn attribute can be set to 1 by make_noreturn, but nothing
> >ever sets it to 0, which is probably why we're experiencing this
> >problem.
> >
> >I have to go and not enough time to check it in detail, but perhaps
> >we should change that here:
>
> Index: intrinsic.c
> ===================================================================
> --- intrinsic.c (revision 114340)
> +++ intrinsic.c (working copy)
> @@ -254,6 +254,7 @@
> next_sym->resolve = resolve;
> next_sym->specific = 0;
> next_sym->generic = 0;
> + next_sym->noreturn = 0;
> break;
> default:
This patch is incorrect. The problem is that the make_noreturn()
calls in add_subroutine are attached to the immediately preceding
symbol name that is stuck in the list of intrinsics. In the case
of -std=f95 and random_seed(), the three intervening routine are
GFC_STD_GNU, so the make_noreturn() is applied to the wrong name.
Andrew and FX thanks for pointing me in the right direction.
If no one objects, I'll apply the enclosed patch later today.
2006-06-06 Steven G. Kargl <kargls@comcast.net>
* intrinsic.c (add_subroutine): Make make_noreturn() conditional on
the appropriate symbol name.
--
Steve
Index: intrinsic.c
===================================================================
--- intrinsic.c (revision 114435)
+++ intrinsic.c (working copy)
@@ -2232,7 +2232,8 @@ add_subroutines (void)
add_sym_0s ("abort", 1, GFC_STD_GNU, NULL);
- make_noreturn();
+ if ((gfc_option.allow_std & GFC_STD_GNU) || gfc_option.flag_all_intrinsics)
+ make_noreturn();
add_sym_1s ("cpu_time", 0, 1, BT_UNKNOWN, 0, GFC_STD_F95,
gfc_check_cpu_time, NULL, gfc_resolve_cpu_time,
@@ -2338,7 +2339,8 @@ add_subroutines (void)
gfc_check_exit, NULL, gfc_resolve_exit,
c, BT_INTEGER, di, OPTIONAL);
- make_noreturn();
+ if ((gfc_option.allow_std & GFC_STD_GNU) || gfc_option.flag_all_intrinsics)
+ make_noreturn();
add_sym_3s ("fgetc", 0, 1, BT_UNKNOWN, 0, GFC_STD_GNU,
gfc_check_fgetputc_sub, NULL, gfc_resolve_fgetc_sub,