This is the mail archive of the fortran@gcc.gnu.org mailing list for the GNU Fortran project.
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |
Other format: | [Raw text] |
PR libgfortran/43899 * runtime/error.c (generate_error): New function to generate a run time warning message. Fix some whitespace. * gfortran.map: Add symbol for new function. * libgfortran.h: Add prototype for new function. * io/list_read.c (nml_read_obj): Use new function to warn when a character namelist object is truncated. Only warn if compiled with -fbounds-check.
Index: runtime/error.c =================================================================== --- runtime/error.c (revision 166182) +++ runtime/error.c (working copy) @@ -443,6 +443,22 @@ generate_error (st_parameter_common *cmp, int fami } iexport(generate_error); + +/* generate_error()-- Similar to generate_error but just give a warning. */ + +void +generate_warning (st_parameter_common *cmp, const char *message) +{ + + if (message == NULL) + message = " "; + + show_locus (cmp); + st_printf ("Fortran runtime warning: %s\n", message); +} +iexport(generate_warning); + + /* Whether, for a feature included in a given standard set (GFC_STD_*), we should issue an error or a warning, or be quiet. */ @@ -462,7 +478,6 @@ notification_std (int std) } - /* 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. */ Index: gfortran.map =================================================================== --- gfortran.map (revision 166182) +++ gfortran.map (working copy) @@ -1116,6 +1116,7 @@ GFORTRAN_1.4 { _gfortran_bessel_yn_r10; _gfortran_bessel_yn_r16; _gfortran_error_stop_numeric; + _gfortran_generate_warning; _gfortran_iall_i1; _gfortran_iall_i2; _gfortran_iall_i4; Index: libgfortran.h =================================================================== --- libgfortran.h (revision 166182) +++ libgfortran.h (working copy) @@ -733,6 +733,9 @@ internal_proto(translate_error); extern void generate_error (st_parameter_common *, int, const char *); iexport_proto(generate_error); +extern void generate_warning (st_parameter_common *, const char *); +iexport_proto(generate_warning); + extern try notify_std (st_parameter_common *, int, const char *); internal_proto(notify_std); Index: io/list_read.c =================================================================== --- io/list_read.c (revision 166182) +++ io/list_read.c (working copy) @@ -2586,7 +2586,19 @@ nml_read_obj (st_parameter_dt *dtp, namelist_info break; case BT_CHARACTER: - m = (dlen < dtp->u.p.saved_used) ? dlen : dtp->u.p.saved_used; + if (dlen < dtp->u.p.saved_used) + { + if (compile_options.bounds_check) + { + snprintf (nml_err_msg, nml_err_msg_size, + "Namelist object '%s' truncated on read.", + nl->var_name); + generate_warning (&dtp->common, nml_err_msg); + } + m = dlen; + } + else + m = dtp->u.p.saved_used; pdata = (void*)( pdata + clow - 1 ); memcpy (pdata, dtp->u.p.saved_string, m); if (m < dlen)
Attachment:
namelist_67.f90
Description: Text document
Index Nav: | [Date Index] [Subject Index] [Author Index] [Thread Index] | |
---|---|---|
Message Nav: | [Date Prev] [Date Next] | [Thread Prev] [Thread Next] |