diff options
author | fxcoudert <fxcoudert@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-08-11 13:50:13 +0000 |
---|---|---|
committer | fxcoudert <fxcoudert@138bc75d-0d04-0410-961f-82ee72b054a4> | 2005-08-11 13:50:13 +0000 |
commit | 64fc3c4c555489736b5a298758e71fa77bc6114f (patch) | |
tree | d2c54ce8afd0ee3ffde950228cb4b59edbde4431 /libgfortran/runtime | |
parent | 930d6081ba8ccd057ebc90ea805e108bb6000690 (diff) | |
download | gcc-64fc3c4c555489736b5a298758e71fa77bc6114f.tar.gz |
PR libfortran/20006
* gfortran.h: Add is_main_program member to symbol_attribute.
* trans-decl: Add a gfor_fndecl_set_std tree.
(gfc_build_builtin_function_decls): Create it.
(gfc_generate_function_code): Add this call at the beginning of
the main program.
* trans.c (gfc_generate_code): Move main_program and attr.
* trans.h: Add declaration for gfor_fndecl_set_std.
* Makefile.am: Add file runtime/compile_options.c.
* Makefile.in: Regenerate.
* libgfortran.h: Create structure compile_options_t. Define the
compile_options variable and GFC_STD_ macros.
* runtime/compile_options.c: New file.
* runtime/error.c (notify_std): New function.
* runtime/main.c (init): Call init_compile_options during
initialization.
* io/format.c: Use the new notify_std function for the $
descriptor extension.
* gfortran.dg/runtime_warning_1.f90: New test.
git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@102990 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'libgfortran/runtime')
-rw-r--r-- | libgfortran/runtime/compile_options.c | 61 | ||||
-rw-r--r-- | libgfortran/runtime/error.c | 26 | ||||
-rw-r--r-- | libgfortran/runtime/main.c | 1 |
3 files changed, 88 insertions, 0 deletions
diff --git a/libgfortran/runtime/compile_options.c b/libgfortran/runtime/compile_options.c new file mode 100644 index 00000000000..5b124199663 --- /dev/null +++ b/libgfortran/runtime/compile_options.c @@ -0,0 +1,61 @@ +/* Handling of compile-time options that influence the library. + Copyright (C) 2005 Free Software Foundation, Inc. + +This file is part of the GNU Fortran 95 runtime library (libgfortran). + +Libgfortran is free software; you can redistribute it and/or modify +it under the terms of the GNU General Public License as published by +the Free Software Foundation; either version 2, or (at your option) +any later version. + +In addition to the permissions in the GNU General Public License, the +Free Software Foundation gives you unlimited permission to link the +compiled version of this file into combinations with other programs, +and to distribute those combinations without any restriction coming +from the use of this file. (The General Public License restrictions +do apply in other respects; for example, they cover modification of +the file, and distribution when not linked into a combine +executable.) + +Libgfortran is distributed in the hope that it will be useful, +but WITHOUT ANY WARRANTY; without even the implied warranty of +MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the +GNU General Public License for more details. + +You should have received a copy of the GNU General Public License +along with libgfortran; see the file COPYING. If not, write to +the Free Software Foundation, 59 Temple Place - Suite 330, +Boston, MA 02111-1307, USA. */ + +#include "config.h" + +#include "libgfortran.h" + + +/* Useful compile-time options will be stored in here. */ +compile_options_t compile_options; + + +/* Prototypes */ +extern void set_std (GFC_INTEGER_4, GFC_INTEGER_4); +export_proto(set_std); + + +void +set_std (GFC_INTEGER_4 warn_std, GFC_INTEGER_4 allow_std) +{ + compile_options.warn_std = warn_std; + compile_options.allow_std = allow_std; +} + + +/* Default values for the compile-time options. Keep in sync with + gcc/fortran/options.c (gfc_init_options). */ +void +init_compile_options (void) +{ + compile_options.warn_std = GFC_STD_F95_OBS | GFC_STD_F95_DEL + | GFC_STD_F2003 | GFC_STD_LEGACY; + compile_options.allow_std = GFC_STD_F95_OBS | GFC_STD_F95_DEL + | GFC_STD_F2003 | GFC_STD_F95 | GFC_STD_F77 | GFC_STD_GNU | GFC_STD_LEGACY; +} diff --git a/libgfortran/runtime/error.c b/libgfortran/runtime/error.c index ff91b96bd3f..b2f29acd851 100644 --- a/libgfortran/runtime/error.c +++ b/libgfortran/runtime/error.c @@ -489,3 +489,29 @@ generate_error (int family, const char *message) runtime_error (message); } + + + +/* Possibly issue a warning/error about use of a nonstandard (or deleted) + feature. An error/warning will be issued if the currently selected + standard does not contain the requested bits. */ + +try +notify_std (int std, const char * message) +{ + int warning; + + warning = compile_options.warn_std & std; + if ((compile_options.allow_std & std) != 0 && !warning) + return SUCCESS; + + show_locus (); + if (!warning) + { + st_printf ("Fortran runtime error: %s\n", message); + sys_exit (2); + } + else + st_printf ("Fortran runtime warning: %s\n", message); + return FAILURE; +} diff --git a/libgfortran/runtime/main.c b/libgfortran/runtime/main.c index d2cedf70371..6801aadc5e1 100644 --- a/libgfortran/runtime/main.c +++ b/libgfortran/runtime/main.c @@ -96,6 +96,7 @@ init (void) init_variables (); init_units (); + init_compile_options (); #ifdef DEBUG /* Check for special command lines. */ |