summaryrefslogtreecommitdiffstats
path: root/contrib/gcc/f
diff options
context:
space:
mode:
authorobrien <obrien@FreeBSD.org>2002-02-01 18:16:02 +0000
committerobrien <obrien@FreeBSD.org>2002-02-01 18:16:02 +0000
commitc9ab9ae440a8066b2c2b85b157b1fdadcf09916a (patch)
tree086d9d6c8fbd4fc8fe4495059332f66bc0f8d12b /contrib/gcc/f
parent2ecfd8bd04b63f335c1ec6295740a4bfd97a4fa6 (diff)
downloadFreeBSD-src-c9ab9ae440a8066b2c2b85b157b1fdadcf09916a.zip
FreeBSD-src-c9ab9ae440a8066b2c2b85b157b1fdadcf09916a.tar.gz
Enlist the FreeBSD-CURRENT users as testers of what is to become Gcc 3.1.0.
These bits are taken from the FSF anoncvs repo on 1-Feb-2002 08:20 PST.
Diffstat (limited to 'contrib/gcc/f')
-rw-r--r--contrib/gcc/f/ChangeLog1547
-rw-r--r--contrib/gcc/f/ChangeLog.04806
-rw-r--r--contrib/gcc/f/Make-lang.in618
-rw-r--r--contrib/gcc/f/RELEASE-PREP2
-rw-r--r--contrib/gcc/f/ansify.c30
-rw-r--r--contrib/gcc/f/bad.c135
-rw-r--r--contrib/gcc/f/bad.def990
-rw-r--r--contrib/gcc/f/bad.h20
-rw-r--r--contrib/gcc/f/bit.c2
-rw-r--r--contrib/gcc/f/bit.h6
-rw-r--r--contrib/gcc/f/bld.c1275
-rw-r--r--contrib/gcc/f/bld.h27
-rw-r--r--contrib/gcc/f/bugs.texi78
-rw-r--r--contrib/gcc/f/com-rt.def434
-rw-r--r--contrib/gcc/f/com.c1996
-rw-r--r--contrib/gcc/f/com.h172
-rw-r--r--contrib/gcc/f/config-lang.in7
-rw-r--r--contrib/gcc/f/data.h6
-rw-r--r--contrib/gcc/f/equiv.c17
-rw-r--r--contrib/gcc/f/equiv.h9
-rw-r--r--contrib/gcc/f/expr.c6
-rw-r--r--contrib/gcc/f/expr.h6
-rw-r--r--contrib/gcc/f/ffe.texi83
-rw-r--r--contrib/gcc/f/fini.c34
-rw-r--r--contrib/gcc/f/g77.texi5305
-rw-r--r--contrib/gcc/f/g77spec.c157
-rw-r--r--contrib/gcc/f/global.c2
-rw-r--r--contrib/gcc/f/global.h13
-rw-r--r--contrib/gcc/f/implic.c2
-rw-r--r--contrib/gcc/f/implic.h6
-rw-r--r--contrib/gcc/f/info-k.def26
-rw-r--r--contrib/gcc/f/info.c17
-rw-r--r--contrib/gcc/f/info.h6
-rw-r--r--contrib/gcc/f/intdoc.c97
-rw-r--r--contrib/gcc/f/intdoc.in4
-rw-r--r--contrib/gcc/f/intdoc.texi4
-rw-r--r--contrib/gcc/f/intrin.c131
-rw-r--r--contrib/gcc/f/intrin.def10
-rw-r--r--contrib/gcc/f/intrin.h10
-rw-r--r--contrib/gcc/f/invoke.texi2191
-rw-r--r--contrib/gcc/f/lab.h6
-rw-r--r--contrib/gcc/f/lang-options.h336
-rw-r--r--contrib/gcc/f/lang-specs.h95
-rw-r--r--contrib/gcc/f/lex.c184
-rw-r--r--contrib/gcc/f/lex.h9
-rw-r--r--contrib/gcc/f/malloc.c5
-rw-r--r--contrib/gcc/f/malloc.h6
-rw-r--r--contrib/gcc/f/name.h6
-rw-r--r--contrib/gcc/f/news.texi899
-rw-r--r--contrib/gcc/f/parse.c48
-rw-r--r--contrib/gcc/f/proj.h57
-rw-r--r--contrib/gcc/f/root.texi36
-rw-r--r--contrib/gcc/f/src.c56
-rw-r--r--contrib/gcc/f/src.h10
-rw-r--r--contrib/gcc/f/st.h6
-rw-r--r--contrib/gcc/f/sta.c8
-rw-r--r--contrib/gcc/f/sta.h6
-rw-r--r--contrib/gcc/f/stb.h6
-rw-r--r--contrib/gcc/f/stc.c48
-rw-r--r--contrib/gcc/f/stc.h6
-rw-r--r--contrib/gcc/f/std.c2477
-rw-r--r--contrib/gcc/f/std.h6
-rw-r--r--contrib/gcc/f/ste.c3444
-rw-r--r--contrib/gcc/f/ste.h12
-rw-r--r--contrib/gcc/f/storag.h6
-rw-r--r--contrib/gcc/f/stp.h6
-rw-r--r--contrib/gcc/f/str.h6
-rw-r--r--contrib/gcc/f/sts.c118
-rw-r--r--contrib/gcc/f/sts.h12
-rw-r--r--contrib/gcc/f/stt.c144
-rw-r--r--contrib/gcc/f/stt.h24
-rw-r--r--contrib/gcc/f/stu.c2
-rw-r--r--contrib/gcc/f/stu.h6
-rw-r--r--contrib/gcc/f/stv.h6
-rw-r--r--contrib/gcc/f/stw.h8
-rw-r--r--contrib/gcc/f/symbol.c229
-rw-r--r--contrib/gcc/f/symbol.h13
-rw-r--r--contrib/gcc/f/target.c20
-rw-r--r--contrib/gcc/f/target.h32
-rw-r--r--contrib/gcc/f/top.c41
-rw-r--r--contrib/gcc/f/top.h14
-rw-r--r--contrib/gcc/f/type.h6
-rw-r--r--contrib/gcc/f/version.c5
-rw-r--r--contrib/gcc/f/version.h8
-rw-r--r--contrib/gcc/f/where.c80
-rw-r--r--contrib/gcc/f/where.h10
86 files changed, 14465 insertions, 14390 deletions
diff --git a/contrib/gcc/f/ChangeLog b/contrib/gcc/f/ChangeLog
index 51c040e..7cec89c 100644
--- a/contrib/gcc/f/ChangeLog
+++ b/contrib/gcc/f/ChangeLog
@@ -1,42 +1,1433 @@
-Fri Mar 16 12:46:19 GMT 2001 Bernd Schmidt (bernds@redhat.com)
+2002-01-31 Joseph S. Myers <jsm28@cam.ac.uk>
- * gcc-2.95.3 Released.
+ * g77spec.c (lang_specific_driver): Follow GNU Coding Standards
+ for --version.
-Mon Mar 13 01:00:55 2000 Toon Moene <toon@moene.indiv.nluug.nl>
+2002-01-30 Richard Henderson <rth@redhat.com>
- * stw.h (struct _ffestw_): Change type of uses_ to int.
+ * ste.c (ffeste_begin_iterdo_): Use expand_exit_loop_top_cond.
+ (ffeste_R819B): Likewise.
+
+2002-01-30 Toon Moene <toon@moene.indiv.nluug.nl>
+
+ * intrin.c (upcasecmp_): New function.
+ (ffeintrin_cmp_name_): Use it to correctly compare name
+ and table entry for bsearch.
+
+2002-01-26 Toon Moene <toon@moene.indiv.nluug.nl>
+
+ * intrin.c (ffeintrin_cmp_name_): Correct comparison
+ for intrinsics in intrinsic table (intrin.def).
+
+2002-01-22 Zack Weinberg <zack@codesourcery.com>
+
+ * bad.c: Include intl.h.
+ (FFEBAD_MSGS1, FFEBAD_MSGS2): Replace by FFEBAD_MSG, SHORT,
+ LONG. Adjust definitions to work with exgettext.
+ (ffebad_start_): Translate all error messages.
+ (ffebad_finish): Mark constant strings for translation.
+ * bad.h: Use FFEBAD_MSG. Adjust prototype of ffebad_start_
+ and definitions of ffebad_start_msg, ffebad_start_msg_lex to
+ work with exgettext.
+ * bad.def: Use FFEBAD_MSG, SHORT, LONG throughout.
+
+ * com.c: Include intl.h.
+ (lang_print_error_function): Always use ffeinfo_kind_message
+ to get the kind label for a non-nested construct. Translate
+ it. Translate constant strings.
+ * info.c (FFEINFO_KIND): Adjust definition to work with exgettext.
+ * info-k.def: Block xgettext from slurping copyright notice
+ into gcc.pot. Adjust strings for their sole use, in com.c.
+
+ * Make-lang.in (f/bad.o, f/com.o): Depend on intl.h.
+
+2002-01-14 David Billinghurst <David.Billinghurst@riotinto.com>
+
+ PR fortran/3807
+ * f/intrin.c (ffeintrin_check_): Allow for case of intrinsic
+ control string have COL-spec an integer > 0.
+
+2002-01-08 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * g77spec.c (lookup_option): Handle -fversion.
+ (lang_specific_driver): Update copyright date in --version output.
+
+Mon Jan 7 00:03:42 2002 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
+
+ * invoke.texi: Markup g77 as @command. Remove reference to
+ http://gcc.gnu.org/thanks.html.
+
+Wed Jan 2 18:13:11 2002 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * com.c (clear_binding_level): Const-ify.
+ (ffecom_arglist_expr_): Likewise.
+ * info.c (ffeinfo_types_): Don't needlessly zero init.
+ * lex.c (ffelex_hash_kludge): Const-ify.
+
+Sun Dec 23 10:45:09 2001 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * com.c (ffecom_gfrt_volatile_, ffecom_gfrt_complex_,
+ ffecom_gfrt_const_, ffecom_gfrt_type_): Const-ify.
+
+Sat Dec 22 16:01:51 2001 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * bld.c (ffebld_arity_op_): Declare array size explicitly.
+ * bld.h (ffebld_arity_op_): Likewise.
+
+2001-12-20 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * config-lang.in (diff_excludes): Remove.
+
+2001-12-17 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * g77.texi, invoke.texi: Update links to GCC manual.
+
+Sun Dec 16 16:08:57 2001 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * news.texi: Fix spelling errors.
+
+Sun Dec 16 10:36:51 2001 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * Make-lang.in (f/version.o): Depend on f/version.h.
+ * version.c: Include ansidecl.h and f/version.h.
+
+Sun Dec 16 08:52:48 2001 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * lex.c (ffelex_backslash_, ffelex_cfebackslash_): Use hex_value.
+ * target.c (ffetarget_integerhex, ffetarget_typeless_hex): Use
+ hex_p/hex_value.
+
+2001-12-14 Roger Sayle <roger@eyesopen.com>
+
+ * com-rt.def: Use __builtin_sqrt instead of __builtin_fsqrt.
+ * com.c (ffecom_init_0): Same, and fixed enumeration usage.
+
+2001-12-10 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * g77.texi: Don't condition menus on @ifinfo.
+
+Wed Dec 5 06:49:21 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * com.c (ffecom_1): Properly handle TREE_READONLY for INDIRECT_REF.
+
+Mon Dec 3 18:56:04 2001 Neil Booth <neil@daikokuya.demon.co.uk>
+
+ * com.c: Remove leading capital from diagnostic messages, as
+ per GNU coding standards.
+ * g77spec.c: Similarly.
+ * lex.c: Similarly.
+
+2001-12-01 Zack Weinberg <zack@codesourcery.com>
+
+ * f/fini.c: Use xmalloc.
+
+Fri Nov 30 20:54:02 2001 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * Make-lang.in: Delete references to proj.[co], proj-h.[co].
+ * proj.c: Delete file.
+
+2001-11-29 Zack Weinberg <zack@codesourcery.com>
+
+ * Make-lang.in (f/fini, f/intdoc): Depend on $(HOST_LIBDEPS)
+ and link with $(HOST_LIBS), not safe-ctype.o.
+
+2001-11-29 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * Make-lang.in (f77.generated-manpages): New target.
+ ($(srcdir)/f/g77.1): Don't check $(GENERATED_MANPAGES). Allow
+ manpage generation to fail.
+ (f77.info): Don't depend on $(srcdir)/f/g77.1.
+ (f77.install-man): Depend on $(GENERATED_MANPAGES) rather than
+ directly on $(srcdir)/g77.1.
+
+2001-11-24 Toon Moene <toon@moene.indiv.nluug.nl>
+
+ PR fortran/3957
+ * lang-specs.h: Correct !pipe conditional in tradcpp0 invocation.
+
+2001-11-21 Toon Moene <toon@moene.indiv.nluug.nl>
+
+ * g77.texi: egcs was not a `@command'.
+ * invoke.texi: Ditto.
+ * news.texi: Substitute `@command' for `@code'
+ and `@option' for `@samp' where appropriate.
+
+2001-11-19 Loren J. Rittle <ljrittle@acm.org>
+
+ * Make-lang.in: Complete ``Build g77.1 in $(srcdir)''.
+
+2001-11-19 Geoffrey Keating <geoffk@redhat.com>
+
+ * g77spec.c (lang_specific_driver) [ENABLE_SHARED_LIBGCC]: Add
+ libgcc_s.so if libf2c is used.
+ * Make-lang.in (g77spec.o): Use DRIVER_DEFINES.
+
+2001-11-19 Toon Moene <toon@moene.indiv.nluug.nl>
+
+ * .cvsignore: Ignore g77.1
+ * g77.texi: Substitute `@command' for `@code'
+ where appropriate.
+ * invoke.texi: Ditto.
+
+2001-11-18 Toon Moene <toon@moene.indiv.nluug.nl>
+
+ * Make-lang.in: Remove all references to LANGUAGES
+ and the stamp files that depend on its value.
+
+Sun Nov 18 11:13:04 2001 Neil Booth <neil@daikokuya.demon.co.uk>
+
+ * com.c (finish_parse): Remove.
+ (ffe_finish): Move body of finish_parse.
+
+Thu Nov 15 10:06:38 2001 Neil Booth <neil@daikokuya.demon.co.uk>
+
+ * com.c (ffecom_init_decl_processing): Renamed from
+ init_decl_processing.
+ (init_parse): Move contents to ffe_init.
+ (ffe_init): Update prototype.
+
+2001-11-14 Toon Moene <toon@moene.indiv.nluug.nl>
+
+ * g77.texi: Update to use `@command', `@option.
+ * invoke.texi: Ditto
+
+2001-11-14 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * Make-lang.in: Change all uses of $(manext) to $(man1ext).
+
+2001-11-14 Toon Moene <toon@moene.indiv.nluug.nl>
+
+ * g77.1: Remove from CVS.
+ * Make-lang.in: Build g77.1 in $(srcdir).
+ Add --section=1 to POD2MAN command line.
+ * invoke.texi: Correct copyright years.
+ Add more sections to man page. Add GFDL.
+
+Fri Nov 9 23:16:45 2001 Neil Booth <neil@daikokuya.demon.co.uk>
+
+ * com.c (ffe_print_identifier): Rename.
+ (LANG_HOOKS_PRINT_IDENTIFIER): Override.
+ (lang_print_xnode, print_lang_decl, print_lang_statistics,
+ print_lang_type, set_yydebug): Remove.
+
+2001-11-09 Zack Weinberg <zack@codesourcery.com>
+
+ * g77spec.c (lang_specific_driver): Adjust behavior of -v and
+ --version for consistency with other front ends. Remove large
+ #if 0 block. Do not add libraries to argv if there are no
+ input files.
+ (add_version_magic): Delete all references and dependent code.
+ * lang-options.h: Delete -fnull-version.
+ * lang-specs.h: Delete f77-version spec.
+
+ * lex.c: Delete logic conditional on ffe_is_null_version() and
+ now-unused label.
+ * top.c: Delete ffe_is_null_version_ variable.
+ (ffe_decode_option): Delete -fnull-version case.
+ * top.h: Delete declaration of ffe_is_null_version_ and
+ ffe_is_null_version(), ffe_set_is_null_version() macros.
+
+Fri Nov 9 07:14:47 2001 Neil Booth <neil@daikokuya.demon.co.uk>
+
+ * com.c (language_string, lang_identify): Remove.
+ (struct lang_hooks): Constify.
+ (LANG_HOOKS_NAME): Override.
+ (init_parse): Update.
+
+2001-11-08 Andreas Franck <afranck@gmx.de>
+
+ * Make-lang.in (G77_INSTALL_NAME, G77_CROSS_NAME): Handle
+ program_transform_name the way suggested by autoconf.
+
+2001-11-08 Toon Moene <toon@moene.indiv.nluug.nl>
+
+ * Make-lang.in: Add rules for building g77.1.
+ * invoke.texi: Add man page stuff. Move indexing
+ from g77.texi to here.
+ * g77.texi: Remove indexing specific to invoke.texi.
+ * news.texi: Document that g77.1 is now a generated
+ file.
+
+Tue Nov 6 21:17:47 2001 Neil Booth <neil@cat.daikokuya.demon.co.uk>
+
+ * com.c: Include langhooks-def.h.
+ * Make-lang.in: Update.
+
+2001-11-04 Toon Moene <toon@moene.indiv.nluug.nl>
+
+ * g77.texi: Split off invoke.texi (preliminary to using it
+ to generate a man page).
+ * Make-lang.in: Reflect in build rules.
+
+Fri Nov 2 10:51:34 2001 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * com.c (ffecom_initialize_char_syntax_, U_CHAR, is_idchar,
+ is_idstart, is_hor_space, is_space, SKIP_WHITE_SPACE,
+ SKIP_ALL_WHITE_SPACE): Delete.
+ (read_filename_string, read_name_map): Don't use is_space or
+ is_hor_space.
+
+2001-10-29 Toon Moene <toon@moene.indiv.nluug.nl>
+
+ * news.texi: Document new ability to compile programs with
+ arrays larger than 512 Mbyte on 32-bit targets.
+
+2001-10-24 Toon Moene <toon@moene.indiv.nluug.nl>
+
+ * com.c (ffecom_check_size_overflow_): Only check for TREE_OVERFLOW.
+
+Tue Oct 23 14:01:27 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * com.c (LANG_HOOKS_GET_ALIAS_SET): New macro.
+ (lang_get_alias_set): Delete.
+
+2001-10-23 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * g77.texi (Sending Patches): Remove.
+
+2001-10-22 Zack Weinberg <zack@codesourcery.com>
+
+ * Make-lang.in (f/intdoc): Depend on safe-ctype.o.
+
+Sun Oct 21 17:28:17 2001 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * bad.c (ffebad_finish): Use safe-ctype macros and/or fold extra
+ calls into fewer ones.
+ * implic.c (ffeimplic_lookup_): Likewise.
+ * intdoc.c (dumpimp): Likewise.
+ * intrin.c (ffeintrin_init_0): Likewise.
+ * lex.c (ffelex_backslash_, ffelex_cfebackslash_, ffelex_hash_):
+ Likewise.
+ * lex.h (ffelex_is_firstnamechar): Likewise.
+ * target.c (ffetarget_integerhex): Likewise.
+
+2001-10-21 Craig Prescott <prescott@phys.ufl.edu>
+
+ * target.h (FFETARGET_32bit_longs): Don't define
+ for 64-bit hppa.
+
+2001-10-17 Richard Henderson <rth@redhat.com>
+
+ * std.c (ffestd_labeldef_format): Fix variable/stmt ordering.
+ (ffestd_R737A): Likewise.
+
+2001-10-17 Richard Henderson <rth@redhat.com>
+
+ * com.h: Remove FFECOM_targetCURRENT, FFECOM_ONEPASS, BUILT_FOR_270,
+ BUILT_FOR_280, FFECOM_GCC_INCLUDE, all derivitive defines, and all
+ related conditional compilation directives.
+ * bad.c, bld.c, bld.h, com.c, equiv.c, equiv.h, global.h, intdoc.c,
+ intrin.c, intrin.h, lex.c, parse.c, sta.c, std.c, ste.c, ste.h, stt.c,
+ stt.h, stw.h, symbol.c, symbol.h, target.h, top.c: Likewise.
+
+2001-10-17 Richard Henderson <rth@redhat.com>
+
+ * Make-lang.in (f/com.o): Depend on langhooks.h.
+ * com.c: Include it.
+ (LANG_HOOKS_INIT, LANG_HOOKS_FINISH): New.
+ (LANG_HOOKS_INIT_OPTIONS, LANG_HOOKS_DECODE_OPTION): New.
+ (lang_hooks): Use LANG_HOOKS_INITIALIZER.
+
+Sun Oct 7 12:27:54 2001 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * bad.c (_ffebad_message_, ffebad_messages_): Const-ify.
+ * bld.c (ffebld_arity_op_): Likewise.
+ * bld.h (ffebld_arity_op_): Likewise.
+ * com.c (ffecom_init_0): Likewise.
+ * intdoc.c (_ffeintrin_name_, _ffeintrin_gen_, _ffeintrin_spec_,
+ _ffeintrin_imp_, names, gens, imps, specs, cc_pair,
+ cc_descriptions, cc_summaries): Likewise.
+ * intrin.c (_ffeintrin_name_, _ffeintrin_gen_, _ffeintrin_spec_,
+ _ffeintrin_imp_, ffeintrin_names_, ffeintrin_gens_,
+ ffeintrin_imps_, ffeintrin_specs_): Likewise.
+
+2001-10-05 Toon Moene <toon@moene.indiv.nluug.nl>
+
+ * news.texi: Document libf2c being built as a shared library.
+ Use of array elements in bounds of adjustable arrays ditto.
+
+2001-10-03 Toon Moene <toon@moene.indiv.nluug.nl>
+
+ * Make-lang.in: Remove reference to FORTRAN_INIT.
+ * g77spec.c: Add reference to FORTRAN_INIT.
+
+2001-09-29 Juergen Pfeifer <juergen.pfeifer@gmx.net>
+
+ Make libf2c a shared library.
+
+ * Make-lang.in: Pass define of frtbegin.o to compilation of g77spec.c.
+ * g77spec.c (lang_specific_driver): Treat linking in of frtbegin.o.
+
+2001-09-28 Robert Anderson <rwa@alumni.princeton.edu>
+
+ * expr.c (ffeexpr_sym_rhs_dimlist_): Allow array elements
+ as bounds of adjustable arrays.
+
+Thu Sep 20 15:05:20 JST 2001 George Helffrich <george@geo.titech.ac.jp>
+
+ * com.c (ffecom_subscript_check_): Loosen subscript checking rules
+ for character strings, to permit substring expressions like
+ string(1:0).
+ * news.texi: Document this as a new feature.
+
+Thu Sep 13 10:33:27 2001 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * bad.c (ffebad_finish): Const-ification and/or static-ization.
+ * intrin.c (ffeintrin_cmp_name_): Likewise.
+ * stc.c (ffestc_R904): Likewise.
+
+Wed Sep 12 12:09:04 2001 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * bld.c (ffebld_op_string_): Const-ification.
+ * com.c (ffecom_gfrt_name_, ffecom_gfrt_argstring_): Likewise.
+ * fini.c (xspaces): Likewise.
+ * global.c (ffeglobal_type_string_): Likewise.
+ * info.c (ffeinfo_basictype_string_, ffeinfo_kind_message_,
+ ffeinfo_kind_string_, ffeinfo_kindtype_string_,
+ ffeinfo_where_string_): Likewise.
+ * lex.c (ffelex_type_string_): Likewise.
+ * malloc.c (malloc_types_): Likewise.
+ * stc.c (ffestc_subr_binsrch_, ffestc_R904, ffestc_R904,
+ ffestc_R907): Likewise.
+ * symbol.c (ffesymbol_state_name_, ffesymbol_attr_name_):
+ Likewise.
+ * version.c (ffe_version_string): Likewise.
+ * version.h (ffe_version_string): Likewise.
+
+2001-09-11 Richard Henderson <rth@redhat.com>
+
+ * parse.c (finput): Mark extern.
+
+2001-09-11 Jakub Jelinek <jakub@redhat.com>
+
+ * com.c (ffe_init_options): Default to -fmerge-all-constants
+ if optimizing.
+
+2000-08-14 Ulrich Weigand <uweigand@de.ibm.com>
+
+ * target.h (FFETARGET_32bit_longs): Don't define
+ for 64-bit S/390.
+
+2001-07-20 Toon Moene <toon@moene.indiv.nluug.nl>
+
+ * com.c (ffecom_expr_intrinsic_):
+ case FFEINTRIN_impIBITS: Remove TREE_SHIFT_FULLWIDTH define.
+ case FFEINTRIN_impISHFT: Ditto. Change LT_EXPR to NE_EXPR.
+ case FFEINTRIN_impISHFTC: Ditto.
+ case FFEINTRIN_impMVBITS: Ditto.
+
+2001-07-19 Jakub Jelinek <jakub@redhat.com>
+
+ * top.c (ffe_decode_option): Disallow lang-independent processing
+ for -ffixed-form.
+
+2001-07-19 Toon Moene <toon@moene.indiv.nluug.nl>
+
+ * f/com.c (ffecom_expr_intrinsic_): Deal (correctly) with
+ {L|R}SHIFT_EXPR not working when shift > size of type.
+
+2001-07-17 Toon Moene <toon@moene.indiv.nluug.nl>
+
+ * com.c (lang_print_error_function): Argument context
+ is unused.
+
+2001-07-14 Tim Josling <tej@melbpc.org.au>
+
+ * com.c (ffecom_overlap_): Remove references to EXPON_EXPR.
+ (ffecom_tree_canonize_ref_): Likewise.
+
+2001-07-10 James Smaby <jsmaby@virgo.umeche.maine.edu>
+
+ * intdoc.in: Fix the definition of COMPLEX ABS.
+ Remove `the' where inappropriate.
+ * intdoc.texi: Rebuilt.
+
+2001-07-04 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * g77.texi: Use gpl.texi and funding.texi. Remove Look and Feel
+ section. Add Funding Free Software to invariant sections.
+ * Make-lang.in ($(srcdir)/f/g77.info, f/g77.dvi): Update
+ dependencies and use doc/include in search path.
+
+2001-06-28 Gabriel Dos Reis <gdr@codesourcery.com>
+
+ * Make-lang.in (f/com.o): Depend on diagnostic.h
+ * com.c: #include diagnostic.h
+ (lang_print_error_function): Take a 'diagnostic_context *'.
+
+Wed Jun 13 11:22:39 2001 Mark Mitchell <mark@codesourcery.com>
+
+ * BUGS: Remove.
+ * NEWS: Likewise.
+
+2001-06-10 Toon Moene <toon@moene.indiv.nluug.nl>
+
+ * g77install.texi: Remove.
+ * Make-lang.in: Remove all mention of g77install.texi.
+ * g77.texi: Add documentation on how to get output always
+ flushed and how to increase the maximum unit number.
+ Remove all mention of g77install.texi.
+ * bugs.texi: Add documentation on how to change the threshold
+ for putting local arrays on the stack.
+
+2001-06-03 Toon Moene <toon@moene.indiv.nluug.nl>
+
+ * root.texi: Fix typo in patches e-mail address.
+
+2001-06-03 Toon Moene <toon@moene.indiv.nluug.nl>
+ Jan van Male <jan.vanmale@fenk.wau.nl>
+
+ * root.texi: Define `help' and `patches' mailing list
+ addresses.
+ * news.texi: Remove `prerelease' from 0.5.26
+ * g77.texi: Use two spaces between command options, eliminate
+ some 'overfull hboxes'. Use help and patches mailing list
+ addresses where appropriate.
+
+2001-06-02 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * g77.texi: Move contents to just after title page.
+
+2001-06-02 Toon Moene <toon@moene.indiv.nluug.nl>
+
+ * com.c (ffecom_init_0): Make CHARACTER*1 unsigned.
+
+2001-05-23 Theodore Papadopoulo <Theodore.Papadopoulo@sophia.inria.fr>
+
+ * Make-lang.in ($(srcdir)/f/g77.info): Added dependencies on
+ fdl.texi.
+ (f/g77.dvi): Use TEXI2DVI instead of custom tex calls. Create the
+ dvi file in the f directory.
+
+2001-05-25 Sam TH <sam@uchicago.edu>
+
+ * bad.h: Fix header include guards.
+ * bit.h bld.h com.h data.h equiv.h expr.h global.h
+ implic.h info.h intrin.h lab.h lex.h malloc.h name.h
+ proj.h src.h st.h sta.h stb.h stc.h std.h ste.h
+ storag.h stp.h str.h sts.h stt.h stu.h stv.h stw.h
+ symbol.h target.h top.h type.h version.h
+ where.h: Likewise.
+
+2001-05-22 Toon Moene <toon@moene.indiv.nluug.nl>
+
+ * g77.texi: Update last-changed date.
+ * news.texi: Update copyright years, last-changed date.
+ * bugs.texi: Update copyright years, last-changed date.
+
+2001-05-22 Toon Moene <toon@moene.indiv.nluug.nl>
+
+ * g77.texi: Update maintenance information for
+ GNU Fortran. Remove all mention of -fdebug-kludge.
+ * news.texi: Make more news in 0.5.26 `user visible
+ changes'. Acknowledge work by important contributors.
+ * bugs.texi: Remove all mention of -fdebug-kludge.
+
+2001-05-20 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * Make-lang.in (f/g77.dvi): Include $(srcdir) in TEXINPUTS.
+
+2001-05-19 Toon Moene <toon@moene.indiv.nluug.nl>
+
+ * Make-lang.in: Have $(MAKEINFO) look into the parent
+ directory for includes.
+ * g77.texi: Use the GFDL.
+
+Sun May 13 12:25:06 2001 Mark Mitchell <mark@codesourcery.com>
+
+ * Make-lang.in: Replace all uses of `touch' with $(STAMP).
+
+Wed May 2 10:20:08 2001 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * com.c: NULL_PTR -> NULL.
+
+Sun Apr 22 20:18:01 2001 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * com.c (ffecom_subscript_check_): Use concat in lieu of
+ xmalloc/sprintf.
+
+2001-04-21 Toon Moene <toon@moene.indiv.nluug.nl>
+
+ * news.texi: Update release information for 0.5.27.
+
+Thu Apr 19 12:49:24 2001 Mark Mitchell <mark@codesourcery.com>
+
+ * top.c (ffe_decode_option): Do not permit language-independent
+ processing for -ffixed-line-length.
+
+Thu Apr 12 17:57:55 2001 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * bad.c (inhibit_warnings): Delete redundant declaration.
+
+ * com.c (skip_redundant_dir_prefix): Likewise.
+
+ * com.h (mark_addressable): Likewise.
+
+2001-04-02 Jakub Jelinek <jakub@redhat.com>
+
+ * lex.c (ffelex_hash_): Avoid eating one whole line after
+ #line.
+
+Mon Apr 2 22:38:09 2001 Toon Moene <toon@moene.indiv.nluug.nl>
+
+ * com.c (duplicate_decls): Fix thinko in lazy DECL_RTL patch
+ of 2001-03-04.
+
+Tue Mar 27 17:40:08 2001 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * Make-lang.in: Depend on $(SYSTEM_H), not system.h.
+
+Mon Mar 26 18:13:30 2001 Mark Mitchell <mark@codesourcery.com>
+
+ * com.c (duplicate_decls): Don't copy DECL_FRAME_SIZE.
+
+Mon Mar 19 15:05:39 2001 Mark Mitchell <mark@codesourcery.com>
+
+ * com.c (builtin_function): Use SET_DECL_ASSEMBLER_NAME.
+
+Wed Mar 14 09:29:27 2001 Mark Mitchell <mark@codesourcery.com>
+
+ * com.c (ffecom_member_phase_2): Use COPY_DECL_RTL,
+ DECL_RTL_SET_P, etc.
+ (duplicate_decls): Likewise.
+ (start_decl): Likewise.
+
+Fri Mar 9 22:52:55 2001 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * fini.c (main): Use really_call_malloc, not malloc.
+
+Thu Mar 8 13:27:47 2001 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * com.c: Don't rely on the POSIX macro to define autoconf stuff.
+
+2001-03-07 Brad Lucier <lucier@math.purdue.edu>
+
+ * g77.texi: Document new options -funsafe-math-optimizations
+ and -fno-trapping-math. Revise documentation for -ffast-math.
+
+2001-03-01 Zack Weinberg <zackw@stanford.edu>
+
+ * proj.h: Delete 'bool' type. Don't include stddef.h here.
+ * com.c: Rename variables named 'true' and/or 'false'.
+ * intdoc.c: Delete 'bool' type.
+
+2001-03-01 Zack Weinberg <zackw@stanford.edu>
+
+ * lang-specs.h: Add zero initializer for cpp_spec field to all
+ array elements.
+
+2001-02-24 Zack Weinberg <zackw@stanford.edu>
+
+ * com.c: Don't define STDC_HEADERS, autoconf handles it.
+
+Fri Feb 23 15:28:39 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * com.c (set_block): Set NAMES and BLOCKS from BLOCK.
+
+2001-02-19 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * version.c, root.texi: Update GCC version number to 3.1. Update
+ G77 version number to 0.5.27.
+ * BUGS, NEWS: Regenerate.
+
+Sun Feb 4 15:52:44 2001 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * com.c (ffecom_init_0): Call fatal_error instead of fatal.
+ * com.c (init_parse): Call fatal_io_error instead of
+ pfatal_with_name.
+ (ffecom_decode_include_option_): Make errors non-fatal.
+ * lex.c (ffelex_cfelex_, ffelex_get_directive_line_): Likewise.
+ (ffelex_hash_): Likewise.
+
+Sat Jan 27 20:52:18 2001 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * Make-lang.in: Remove all dependencies on defaults.h.
+ * com.c: Don't include defaults.h.
+
+2001-01-23 Michael Sokolov <msokolov@ivan.Harhan.ORG>
+
+ * com.c: Don't explicitly include any time headers, the right ones are
+ already included by proj.h.
+
+2001-01-15 Mark Mitchell <mark@codesourcery.com>
+
+ * com.c (ffecom_lookup_label): Set DECL_CONTEXT for FORMAT
+ label to current_function_decl.
+
+Fri Jan 12 17:21:33 2001 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * g77spec.c (lang_specific_driver): Update copyright year to 2001.
+
+Wed Jan 10 14:39:45 2001 Mark Mitchell <mark@codesourcery.com>
+
+ * com.c (ffecom_init_zero_): Remove last argument in call to
+ make_decl_rtl; use make_function_rtl instead of make_decl_rtl.
+ (ffecom_lookup_label_): Likewise.
+ (builtin_function): Likewise.
+ (start_function): Likewise.
+
+Thu Dec 21 21:19:42 2000 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * g77install.texi, g77.texi: Update last-updated dates for
+ installation information and the manual as a whole.
+ * bugs.texi, news.texi: Update copyright years in the comments at
+ the top of the file.
+
+2000-12-21 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * g77install.texi: Adjust wording of an EGCS reference.
-Fri Feb 18 13:36:50 2000 Martin von Loewis <loewis@informatik.hu-berlin.de>
+Thu Dec 21 20:00:48 2000 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * BUGS, NEWS: Regenerate.
+
+2000-12-18 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * com.c [VMS]: Remove definition of BSTRING.
+
+2000-12-18 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * g77.texi: Update GPL copy not to refer to years 19@var{yy}.
+
+2000-12-18 Toon Moene <toon@moene.indiv.nluug.nl>
+
+ * bugs.texi: Correct copyright years.
+ * g77.texi: Likewise.
+ * news.texi: Likewise.
+
+2000-12-18 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * g77install.texi: Remove obsolete parts only used for INSTALL,
+ and DOC-G77 conditionals. Update last-update-install date.
+
+Sat Dec 9 10:20:11 2000 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * .cvsignore: New file; add info files.
+
+2000-12-08 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * Make-lang.in (f77.info): Depend on info files in source
+ directory.
+ (f/g77.info): Build info files in source directory; don't build
+ them unless BUILD_INFO is "info".
+ (f77.install-info): Install info files from source directory.
+
+2000-12-07 Zack Weinberg <zack@wolery.stanford.edu>
+
+ * Make-lang.in: Link f/fini with safe-ctype.o.
+ * bad.c: Don't test ISUPPER(c) || ISLOWER(c) before calling TOUPPER(c).
+ * com.c: Use TOUPPER, not ffesrc_toupper.
+ * fini.c: Don't test ISALPHA(c) before calling TOUPPER(c)/TOLOWER(c).
+ * intrin.c: Don't test IN_CTYPE_DOMAIN(c).
+ * src.c: Delete ffesrc_toupper_ and ffesrc_tolower_ and their
+ initializing code; use TOUPPER and TOLOWER instead of
+ ffesrc_toupper and ffesrc_tolower.
+ * src.h: Don't declare ffesrc_toupper_ or ffesrc_tolower_.
+ Don't define ffesrc_toupper or ffesrc_tolower.
+
+2000-11-28 Richard Henderson <rth@redhat.com>
+
+ * com.c (ffecom_member_phase2_): Set TREE_USED on the debugging decl.
+
+2000-11-26 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * RELEASE-PREP: Remove obsolete EGCS reference.
+ * g77.texi: Adjust reference to EGCS as something current.
+ * lang-options.h (FTNOPT): Remove macro and obsolete comment.
+ Include doc strings directly in option listing instead of through
+ this macro.
+ * root.texi: Remove support for multiple different (FSF and EGCS)
+ distributions of g77.
+ * g77install.texi: Remove conditioned out instructions applying
+ only to obsolete distributions of g77 not as part of GCC. Change
+ "superceded" to the correct spelling "superseded".
+
+Sun Nov 26 19:25:56 2000 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * g77spec.c (lang_specific_driver): Update copyright year to 2000.
+
+Thu Nov 23 02:18:57 2000 J"orn Rennecke <amylaar@redhat.com>
+
+ * Make-lang.in (g77spec.o): Depend on $(CONFIG_H).
+
+2000-11-21 David Billinghurst <David.Billinghurst@riotinto.com)
+
+ * Make-lang.in: Add $(build_exeext) to f/fini target
+
+2000-11-21 Andreas Jaeger <aj@suse.de>
+
+ * g77.texi (Floating-point Exception Handling): Use feenableexcept
+ in example.
+ (Floating-point precision): Change to match above change.
+
+Sun Nov 19 17:29:22 2000 Matthias Klose <doko@marvin.itso-berlin.de>
+
+ * g77.texi (Floating-point precision): Adjust example
+ to work with glibc (>= 2.1).
+
+Sat Nov 18 13:54:49 2000 Matthias Klose <doko@cs.tu-berlin.de>
+
+ * g77.texi (Floating-point Exception Handling): Adjust
+ example to work with glibc (>= 2.1).
+
+2000-11-18 Alexandre Oliva <aoliva@redhat.com>
+
+ * Make-lang.in (INTDOC_DEPS): New macro.
+ (f/intdoc.texi): Depend on $(INTDOC_DEPS). Build f/intdoc.
+ (f/intdoc): Likewise. Add $(build_exeext).
+
+2000-11-17 Zack Weinberg <zack@wolery.stanford.edu>
+
+ * lex.c (ffelex_hash_): Change ggc_alloc_string (var, -1) to
+ ggc_strdup (var).
+
+Thu Nov 16 23:14:07 2000 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * malloc.c (malloc_init): Call xmalloc, not malloc.
+
+2000-11-10 Rodney Brown <RodneyBrown@mynd.com>
+
+ * Make-lang.in: Remove OUTPUT_OPTION from g77version.o target.
+
+2000-11-10 Toon Moene <toon@moene.indiv.nluug.nl>
+
+ * root.texi: Remove non-historical EGCS reference.
+ Set current g77 version to 0.5.26.
+
+2000-11-10 Toon Moene <toon@moene.indiv.nluug.nl>
+
+ * com.c (ffecom_stabilize_aggregate_) case RTL_EXPR: Abort.
+
+2000-11-10 Zack Weinberg <zack@wolery.stanford.edu>
+
+ * Make-lang.in (f/fini.o, f/proj-h.o): Remove pointless sed
+ munging of source file name.
+ ($(srcdir)/f/intdoc.texi): Break up into several rules each of
+ which builds just one thing. Don't mess with $(LANGUAGES).
+ (f/ansify.o, f/intdoc.o): Remove unnecessary rules.
+
+2000-11-05 Toon Moene <toon@moene.indiv.nluug.nl>
+
+ * root.texi, news.texi, g77install.texi, g77.texi, bugs.texi:
+ Remove non-historical references to egcs/EGCS.
+
+2000-11-05 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * Make-lang.in: Remove f77.distdir and f/INSTALL.
+ * INSTALL, install0.texi: Remove.
+
+2000-11-02 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * com.c (open_include_file, ffecom_open_include_): Use strchr ()
+ and strrchr () instead of index () and rindex ().
+
+2000-10-27 Zack Weinberg <zack@wolery.stanford.edu>
+
+ * Make-lang.in: Move all build rules here from Makefile.in,
+ adapt to new context. Wrap all rules that change the current
+ directory in parentheses. Expunge all references to $(P).
+ When one command depends on another and they're run all at
+ once, use && to separate them, not ;. Add OUTPUT_OPTION to
+ all object-file generation rules. Delete obsolete variables.
+
+ * Makefile.in: Delete.
+ * config-lang.in: Delete outputs= line.
+
+Sat Oct 21 18:07:48 2000 Joseph S. Myers <jsm28@cam.ac.uk>
+
+ * Makefile.in, g77spec.c: Remove EGCS references in comments.
+
+Thu Oct 12 22:28:51 2000 Mark Mitchell <mark@codesourcery.com>
+
+ * com.c (ffecom_do_entry_): Don't mess with obstacks.
+ (ffecom_finish_global_): Likewise.
+ (ffecom_finish_symbol_transform_): Likewise.
+ (ffecom_gen_sfuncdef_): Likewise.
+ (ffecom_init_zero_): Likewise.
+ (ffecom_start_progunit_): Likewise.
+ (ffecom_sym_transform_): Likewise.
+ (ffecom_sym_transform_assign_): Likewise.
+ (ffecom_transform_equiv_): Likewise.
+ (ffecom_transform_namelist_): Likewise.
+ (ffecom_vardesc_): Likewise.
+ (ffecom_vardesc_array_): Likewise.
+ (ffecom_vardesc_dims_): Likewise.
+ (ffecom_end_transition): Likewise.
+ (ffecom_make_tempvar): Likewise.
+ (bison_rule_pushlevel_): Likewise.
+ (bison_rule_compstmt_): Likewise.
+ (finish_decl): Likewise.
+ (finish_function): Likewise.
+ (push_parm_decl): Likewise.
+ (start_decl): Likewise.
+ (start_function): Likewise.
+ (ggc_p): Don't define.
+ * std.c (ffestd_stmt_pass_): Likewise.
+ * ste.c (ffeste_end_block_): Likewise.
+ (ffeste_end_stmt_): Likewise.
+ (ffeste_begin_iterdo_): Likewise.
+ (ffeste_io_ialist_): Likewise.
+ (ffeste_io_cilist_): Likewise.
+ (ffeste_io_inlist_): Likewise.
+ (ffeste_io_olist_): Likewise.
+ (ffeste_R810): Likewise.
+ (ffeste_R838): Likewise.
+ (ffeste_R839): Likewise.
+ (ffeste_R842): Likewise.
+ (ffeste_R843): Likewise.
+ (ffeste_R1001): Likewise.
+
+2000-10-05 Richard Henderson <rth@cygnus.com>
+
+ * com.c (finish_function): Don't init can_reach_end.
+
+Sun Oct 1 11:43:44 2000 Mark Mitchell <mark@codesourcery.com>
+
+ * com.c (lang_mark_false_label_stack): Remove.
+
+2000-09-10 Zack Weinberg <zack@wolery.cumb.org>
+
+ * com.c: Include defaults.h.
+ * com.h: Don't define the *_TYPE_SIZE macros.
+ * Makefile.in: Update dependencies.
+
+2000-08-29 Zack Weinberg <zack@wolery.cumb.org>
+
+ * ansify.c: Use #line, not # <number>.
+
+2000-08-24 Greg McGary <greg@mcgary.org>
+
+ * intdoc.c (ARRAY_SIZE): Remove macro.
+ * proj.h (ARRAY_SIZE): Remove macro.
+ * com.c (init_decl_processing): Use ARRAY_SIZE.
+
+2000-08-22 Toon Moene <toon@moene.indiv.nluug.nl>
+
+ * com-rt.def: Adapt macro DEFGFRT to accept CONST boolean.
+ * com.c (macro DEFGFRT): Use CONST boolean.
+ (ffecom_call_binop_): Choose between call by value
+ and call by reference.
+ (ffecom_expr_): Use direct calls to (g)libc functions for
+ POW_DD, LOG10, (float) MOD.
+ (ffecom_make_gfrt_): Add const indication to table of
+ intrinsics.
+ * com.h (macro DEFGFRT): Use CONST boolean.
+ * intrin.def: Adjust DEFIMP definition of LOG10, (float) MOD.
+
+2000-08-21 Nix <nix@esperi.demon.co.uk>
+
+ * lang-specs.h: Do not process -o or run the assembler if
+ -fsyntax-only. Use %j instead of /dev/null.
+
+2000-08-21 Jakub Jelinek <jakub@redhat.com>
+
+ * lang-specs.h: Pass -I* options to f771.
+
+2000-08-19 Toon Moene <toon@moene.indiv.nluug.nl>
+
+ * top.c (ffe_decode_option): Disable -fdebug-kludge
+ and warn about it.
+ * lang-options.h: Document the fact.
+ * g77.texi: Ditto.
+
+2000-08-13 Toon Moene <toon@moene.indiv.nluug.nl>
+
+ * bugs.texi: Describe new ability to emit debug info
+ for EQUIVALENCE members.
+ * news.texi: Ditto.
+
+2000-08-11 G. Helffrich <george@gly.bris.ac.uk>
+ Toon Moene <toon@moene.indiv.nluug.nl>
+
+ * com.c (ffecom_transform_equiv_): Make EQUIVALENCEs addressable
+ so that debug info can be attached to their storage.
+ Unconditionally list the storage set aside for them.
+
+2000-08-07 Toon Moene <toon@moene.indiv.nluug.nl>
+
+ * g77spec.c (lang_specific_driver): Clearer g77 version message.
+
+2000-08-04 Zack Weinberg <zack@wolery.cumb.org>
+
+ * Make-lang.in (f771): Depend on $(BACKEND), not stamp-objlist.
+ * Makefile.in: Add BACKEND; delete OBJS, OBJDEPS.
+ (f771): Link with $(BACKEND).
+
+2000-08-02 Zack Weinberg <zack@wolery.cumb.org>
+
+ * g77spec.c: Adjust type of second argument to
+ lang_specific_driver, and update code as necessary.
+
+ * expr.c (ffeexpr_finished_): Cast signed side of ?:
+ expression to bool.
+
+2000-07-31 Zack Weinberg <zack@wolery.cumb.org>
+
+ * lang-specs.h: Rename cpp to cpp0 and/or tradcpp to tradcpp0.
+
+Thu Jul 27 11:50:08 2000 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * fini.c (main): Avoid automatic aggregate initialization.
+
+ * proj.h: Indent #error directive.
+
+2000-07-26 Toon Moene <toon@moene.indiv.nluug.nl>
+
+ * lang-specs.h: Remove one /dev/null from tradcpp invocation.
+
+Sun Jul 23 15:47:30 2000 Billinghurst, David <David.Billinghurst@riotinto.com>
+
+ * Make-lang.in: Put $(build_exeext) suffix on programs which run
+ on the build machine.
+
+2000-07-22 Toon Moene <toon@moene.indiv.nluug.nl>
+
+ * com.c (ffecom_expr_intrinsic_): case FFEINTRIN_impFGETC_subr,
+ FFEINTRIN_impFPUTC_subr: Check for arg3 being NULL.
+
+2000-07-13 Zack Weinberg <zack@wolery.cumb.org>
+
+ * lang-specs.h: Use the new named specs. Remove unnecessary braces.
+
+2000-07-02 Toon Moene <toon@moene.indiv.nluug.nl>
+
+ * version.c: Bump version number.
+
+2000-06-21 Zack Weinberg <zack@wolery.cumb.org>
+
+ * Make-lang.in (F77_SRCS): Remove all .j files.
+ * Makefile.in (ASSERT_H, CONFIG_H, CONVERT_H, FLAGS_H, GGC_H,
+ GLIMITS_H, HCONFIG_H, INPUT_H, OUTPUT_H, RTL_H, SYSTEM_H,
+ TOPLEV_H, TREE_H): Remove references to .j files.
+ (TCONFIG_H, TM_H): Remove entirely.
+ (deps-kinda): Delete rule.
+ Correct commentary.
+
+ * assert.j, config.j, convert.j. flags.j, ggc.j, glimits.j,
+ hconfig.j, input.j, output.j, rtl.j, system.j, toplev.j,
+ tree.j, tconfig.j, tree.j: Delete.
+
+ * ansify.c, bad.c, bit.c, com.c, com.h, intdoc.c, lex.c,
+ parse.c, proj.c, proj.h, ste.c, target.c, target.h, top.c,
+ where.c, where.h: Include parent-directory headers directly.
+ * lex.c: Don't include tree.h twice.
+
+2000-05-17 H.J. Lu (hjl@gnu.org)
+
+ * Make-lang.in: Use a unique stamp for each target to support
+ parallel make.
+
+Thu Jun 15 14:03:14 2000 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * ste.c (gbe_block): Constify.
+
+2000-06-13 Jakub Jelinek <jakub@redhat.com>
+
+ * com.c (ffecom_transform_common_): Set DECL_USER_ALIGN.
+ (ffecom_transform_equiv_, ffecom_decl_field): Likewise.
+ (ffecom_init_0): Set DECL_USER_ALIGN resp. TYPE_USER_ALIGN.
+ (duplicate_decls): Set DECL_USER_ALIGN.
+
+Sun Jun 11 00:03:00 2000 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * com.c (lang_get_alias_set): Mark parameter with ATTRIBUTE_UNUSED.
+
+2000-06-04 Philipp Thomas <pthomas@suse.de>
+
+ * Makefile.in(INTLLIBS): New macro.
+ (LIBS): Add INTLLIBS.
+ (DEPLIBS): Likewise.
+
+2000-06-02 Richard Henderson <rth@cygnus.com>
+
+ * com.c (lang_get_alias_set): New.
+
+2000-05-28 Toon Moene <toon@moene.indiv.nluug.nl>
+
+ * bugs.texi: Note that debugging information for
+ common block items is emitted now.
+ * news.texi: Ditto.
+
+2000-05-18 Chris Demetriou <cgd@sibyte.com>
+
+ * com.h (FFECOM_f2cINTEGER, FFECOM_f2cLONGINT): Note that
+ these types correspond to built-in types now defined in
+ the C front end (for libf2c).
+
+Wed May 17 17:27:44 2000 Andrew Cagney <cagney@b1.cygnus.com>
+
+ * top.c (ffe_decode_option): Update -Wall unused flags by calling
+ set_Wunused.
+
+2000-05-09 Zack Weinberg <zack@wolery.cumb.org>
+
+ * com.c (ffecom_subscript_check_): Constify array_name
+ parameter. Clean up string bashing.
+ (ffecom_arrayref_, ffecom_char_args_x_): Constify array_name
+ parameter.
+ (ffecom_do_entry_, ffecom_gen_sfuncdef_, ffecom_start_progunit_,
+ ffecom_sym_transform_, ffecom_sym_transform_assign_): Constify
+ local char *.
+ (init_parse): Constify parameter and return value.
+ * lex.c: Include dwarfout.h instead of prototyping dwarfout_*
+ functions here.
+ (ffelex_file_pop_, ffelex_file_push_): Constify filename parameter.
+ (ffelex_hash_, ffelex_include_): Constify local char *.
+ * std.c (ffestd_exec_end): Constify local char *.
+ * where.c (ffewhere_file_new): Constify filename parameter.
+ * where.h: Update prototypes.
+
+2000-05-06 Zack Weinberg <zack@wolery.cumb.org>
+
+ * com.c (ffecom_overlap_): Set source_offset to
+ bitsize_zero_node.
+ (ffecom_tree_canonize_ptr_): Use size_binop. Convert to
+ bitsizetype before multiplying by TYPE_SIZE.
+ (ffecom_tree_canonize_ref_) [case ARRAY_REF]: Break up offset
+ calculation. Convert to bitsizetype before multiplying by
+ TYPE_SIZE.
+
+2000-04-18 Zack Weinberg <zack@wolery.cumb.org>
+
+ * lex.c: Remove references to cccp.c.
+ * g77install.texi: Remove references to cexp.c/cexp.y.
+
+2000-04-15 David Edelsohn <edelsohn@gnu.org>
+
+ * target.h (FFETARGET_32bit_longs): Define for 64-bit PowerPC
+ as well.
+
+Wed Apr 12 15:15:26 2000 Mark Mitchell <mark@codesourcery.com>
+
+ * com.h (FFECOM_f2cINTEGER): Avoid using LONG_TYPE_SIZE as a
+ preprocessor constant.
+ (FFECOM_f2cLOGICAL): Likewise.
+ (FFECOM_f2cLONGINT): Likewise.
+
+Wed Apr 5 17:46:39 2000 Mark Mitchell <mark@codesourcery.com>
+
+ * Makefile.in (GGC_H): Add varray.h.
+
+2000-04-03 Zack Weinberg <zack@wolery.cumb.org>
+
+ * lang-specs.h: Pass -fno-show-column to the preprocessor.
+
+2000-03-28 Franz Sirl <Franz.Sirl-kernel@lauterbach.com>
+
+ * com.c (ffecom_decl_field): Use DECL_ALIGN for a FIELD_DECL.
+ (ffecom_init_0): Likewise.
+
+Sat Mar 25 09:12:10 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * com.c (ffecom_tree_canonize_ptr_): Use bitsize_zero_node.
+ (ffecom_tree_canonize_ref_): Likewise.
+
+Mon Mar 20 15:49:40 2000 Jim Wilson <wilson@cygnus.com>
+
+ * f/target.h (FFETARGET_32bit_longs): New. Define for alpha, sparc64,
+ and ia64.
+ (ffetargetInteger1, ffetargetLogical1, ffetargetReal1, ffetargetReal2,
+ ffetarget_integerdefault_is_magical): Use FFETARGET_32bit_longs.
+
+Fri Mar 10 00:43:55 2000 Jason Merrill <jason@casey.cygnus.com>
+
+ * com.c (ffecom_stabilize_aggregate_): Don't refer to TREE_RAISES.
+
+Mon Mar 6 18:05:19 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * com.c (ffecom_f2c_set_lio_code_): Use compare_tree_int.
+ (ffecom_sym_transform_, ffecom_transform_common_): Likewise.
+ (ffecom_transform_equiv_): Likewise.
+
+Mon Mar 6 13:01:19 2000 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * ansify.c (die_unless): Don't use ANSI string concatenation.
+ (die): Mark with ATTRIBUTE_NORETURN.
+
+Wed Mar 1 00:31:44 2000 Martin von Loewis <loewis@informatik.hu-berlin.de>
+
+ * com.c (current_function_decl): Move to toplev.c.
+
+Sun Feb 27 16:40:33 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * com.c (ffecom_arrayref_): Convert args to size_binop to proper type.
+ (ffecom_tree_canonize_ptr_): Don't use size_binop for non-sizes.
+ (ffecom_tree_canonize_ref_): Likewise.
+ (type_for_mode): Handle TImode.
+ * ste.c (ffeste_io_dofio_, ffeste_io_douio_): Use TYPE_SIZE_UNIT.
+ (ffeste_io_ciclist_): Likewise.
+
+2000-02-23 Zack Weinberg <zack@wolery.cumb.org>
+
+ * com.c (ffecom_type_permanent_copy_): Delete unused function.
+ (finish_decl): Don't change TREE_PERMANENT (DECL_INITIAL (decl)).
+
+Sat Feb 19 18:43:13 2000 Richard Kenner <kenner@vlsi1.ultra.nyu.edu>
+
+ * com.c (ffecom_sym_transform): Use DECL_SIZE_UNIT.
+ (ffecom_transform_common_, ffecom_transform_equiv_): Likewise.
+ (duplicate_decls): Likewise.
+ (ffecom_tree_canonize_ptr_): Delete extra arg to bitsize_int.
+ (finish_decl): Delete -Wlarger-than processing.
+
+Fri Feb 18 13:19:34 2000 Martin von Loewis <loewis@informatik.hu-berlin.de>
* g77spec.c (lang_specific_driver): Use GCCBUGURL.
-Sun Oct 24 23:54:10 PDT 1999 Jeff Law (law@cygnus.com)
+2000-02-17 Andy Vaught <andy@maxwell.la.asu.edu>
- * gcc-2.95.2 Released.
+ * com.c (ffecom_member_phase2_): Re-enable COMMON debug code.
+ (ffecom_finish_symbol_transform_): Likewise.
+ (ffecom_transform_common_): Call ffestorag_set_hook.
-Mon Aug 16 01:29:24 PDT 1999 Jeff Law (law@cygnus.com)
+Wed Feb 16 11:09:38 2000 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
- * gcc-2.95.1 Released.
+ * Make-lang.in (g77spec.o): Depend on $(GCC_H), not gcc.h.
-Thu Aug 5 02:40:42 1999 Jeffrey A Law (law@cygnus.com)
+2000-02-15 Jonathan Larmour <jlarmour@redhat.co.uk>
+
+ * lang-specs.h: Add new __GNUC_PATCHLEVEL__ define to default spec.
+
+Tue Feb 15 11:14:17 2000 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * g77spec.c: Don't declare `version_string'.
+
+Sat Feb 5 23:27:25 2000 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * com.c (mark_tracker_head, mark_binding_level): Protoize.
+
+ * where.c (mark_ffewhere_head): Likewise.
+
+Wed Jan 12 09:32:59 2000 Zack Weinberg <zack@wolery.cumb.org>
+
+ * lang-specs.h: Pass -lang-fortran to preprocessor.
+
+Thu Dec 30 13:14:31 1999 Richard Henderson <rth@cygnus.com>
+
+ * stw.h (struct _ffestw_): Change type of uses_ to int.
+
+Thu Dec 30 11:42:05 1999 Geoff Keating <geoffk@cygnus.com>
+
+ * com.c (ffecom_init_0): Make double_ftype_double,
+ float_ftype_float, ldouble_ftype_ldouble,
+ ffecom_tree_ptr_to_fun_type_void local.
+ (tracker_head): New static variable.
+ (mark_tracker_head): New, marker procedure for tracker_head.
+ (ffecom_save_tree_forever): New procedure.
+ (ffecom_init_zero_): Remove obstack use.
+ (ffecom_make_gfrt_): Remove obstack use.
+ (ffecom_sym_transform_): Remove obstack use, save appropriate trees.
+ (ffecom_transform_common_): Remove obstack use, save appropriate
+ trees.
+ (ffecom_type_namelist_): Remove obstack use, save appropriate
+ trees.
+ (ffecom_type_vardesc_): Remove obstack use, save appropriate trees.
+ (ffecom_lookup_label): Remove obstack use, save appropriate trees.
+ (duplicate_decls): Remove obstack use.
+ (finish_function): push & pop ggc context around
+ rest_of_compilation when building nested function.
+ (mark_binding_level): New function.
+ (init_decl_processing): Mark all the GC roots.
+ (ggc_p): Set to 1.
+ (lang_mark_tree): New function.
+ (lang_mark_false_label_stack): New trivial function.
+ * com.h (ffecom_save_tree_forever): Declare as external.
+ * lex.c (ffelex_hash_): Use GC to allocate the filename string
+ even when ffelex_kludge_flag_.
+ * ste.c (ffeste_io_ialist_): Register a static root.
+ (ffeste_io_inlist_): Likewise.
+ (ffeste_io_icilist_): Likewise.
+ (ffeste_io_cllist_): Likewise.
+ (ffeste_io_cilist_): Likewise.
+ (ffeste_io_olist_): Likewise.
+ * Makefile.in (OBJS): Don't use ggc-callbacks.o.
+ (OBJDEPS): Likewise.
+ (GGC_H): New variable.
+ Update dependencies.
+ * where.c (ffewhere_head): New global.
+ (mark_ffewhere_head): New marker procedure for ffewhere_head.
+ (ffewhere_file_kill): Use GC to do memory management.
+ (ffewhere_file_new): Use GC to do memory management.
+ * ggc.j: New file.
+
+Wed Dec 29 19:29:26 1999 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
+
+ * g77.texi (C Interfacing Tools): Fix an incorrect link.
+
+1999-12-13 Jakub Jelinek <jakub@redhat.com>
+
+ * target.h: Handle sparc64 the same way as alpha.
+
+Sun Nov 28 21:39:05 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * com.c (ffecom_file_, ffecom_file, file_buf,
+ ffecom_open_include_): Constify a char*.
+ (ffecom_possible_partial_overlap_): Mark parameter `expr2' with
+ ATTRIBUTE_UNUSED.
+ (ffecom_init_0): Use a fully prototyped cast in call to bsearch.
+ (lang_print_error_function): ANSI-fy.
+
+ * com.h (ffecom_file): Constify a char*.
+
+ * fini.c (main): Call return, not exit.
+
+ * g77spec.c (lang_specific_driver): Use non-const *in_argv in
+ assignment.
- * g77spec.c: Update URLS and mail addresses.
- * root.texi: Update URLS and mail addresses.
+ * intrin.c (ffeintrin_cmp_name_): Don't needlessly cast away
+ const-ness.
-Wed Jul 28 21:39:31 PDT 1999 Jeff Law (law@cygnus.com)
+Sun Nov 28 21:15:29 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
- * gcc-2.95 Released.
+ * com.c (ffecom_get_invented_identifier): Rewrite to take an ellipses.
- * version.c: No longer a prerelease.
+ (ffecom_char_enhance_arg_, ffecom_do_entry_,
+ ffecom_f2c_make_type_, ffecom_gen_sfuncdef_,
+ ffecom_start_progunit_, ffecom_start_progunit_,
+ ffecom_start_progunit_, ffecom_sym_transform_assign_,
+ ffecom_transform_equiv_, ffecom_transform_namelist_,
+ ffecom_vardesc_, ffecom_vardesc_array_, ffecom_vardesc_dims_,
+ ffecom_end_transition, ffecom_lookup_label, ffecom_temp_label):
+ Adjust accordingly.
-Sat Jul 17 21:57:07 1999 Jeffrey A Law (law@cygnus.com)
+ * com.h (ffecom_get_invented_identifier): Likewise.
- * root.texi: Clear DEVEOPMENT per Craig's instructions.
+ * sts.c (ffests_printf): New function taking ellipses.
+ (ffests_printf_1D, ffests_printf_1U, ffests_printf_1s,
+ ffests_printf_2Us): Delete.
+
+ * sts.h: Likewise.
+
+ * std.c (ffestd_R1001dump_, ffestd_R1001dump_1005_1_,
+ ffestd_R1001dump_1005_2_, ffestd_R1001dump_1005_3_,
+ ffestd_R1001dump_1005_4_, ffestd_R1001dump_1005_5_,
+ ffestd_R1001dump_1010_2_, ffestd_R1001dump_1010_3_,
+ ffestd_R1001dump_1010_4_, ffestd_R1001dump_1010_5_,
+ ffestd_R1001rtexpr_): Call `ffests_printf', not `ffests_printf_*'.
+
+ * ste.c (ffeste_io_ialist_, ffeste_io_cilist_, ffeste_io_cllist_,
+ ffeste_io_icilist_, ffeste_io_inlist_, ffeste_io_olist_): Likewise.
+
+Wed Nov 10 12:43:21 1999 Philippe De Muyter <phdm@macqel.be>
+ Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * proj.h: Test `GCC_VERSION', not `HAVE_GCC_VERSION'.
+
+Tue Oct 26 01:32:19 1999 Mark Mitchell <mark@codesourcery.com>
+
+ * com.c (poplevel): Don't call remember_end_note.
+
+Fri Oct 15 15:18:12 1999 Greg McGary <gkm@gnu.org>
+
+ * top.h (ffe_is_subscript_check_): Remove extern decl.
+ (ffe_is_subscript_check, ffe_set_is_subscript_check): Remove macros.
+ * top.c (ffe_is_subscript_check_): Remove global variable.
+ (ffe_decode_option): Remove "(no-)bounds-check" flag handling.
+ Set flag_bounds_check for "(no-)fortran-bounds-check".
+ * com.c
+ (ffecom_arrayref_): s/ffe_is_subscript_check ()/flag_bounds_check/
+ (ffecom_char_args_x_): Ditto.
+
+Sun Oct 10 08:40:18 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * proj.h: Use HAVE_GCC_VERSION instead of explicitly testing
+ __GNUC__ and __GNUC_MINOR__. Don't define BUILT_WITH_270. Define
+ macro UNUSED in terms of ATTRIBUTE_UNUSED.
+
+Fri Sep 24 10:48:10 1999 Bernd Schmidt <bernds@cygnus.co.uk>
+
+ * com.c (duplicate_decls): Use DECL_BUILT_IN_CLASS rather than
+ DECL_BUILT_IN.
+ (builtin_function): No longer static. New arg CLASS. Arg
+ FUNCTION_CODE now of type int. All callers changed.
+ Set the builtin's DECL_BUILT_IN_CLASS.
+
+Tue Sep 21 09:08:30 1999 Toon Moene <toon@moene.indiv.nluug.nl>
+
+ * g77spec.c (lang_specific_driver): Initialise return value.
+
+Thu Sep 16 18:07:11 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * bad.c (ffebad_finish): Use uppercase ctype macro from system.h.
+
+ * fini.c (main): Likewise.
+
+ * intrin.c (ffeintrin_init_0): Likewise.
+
+ * lex.c (ffelex_hash_): Likewise.
+
+ * src.c (ffesrc_init_1): Likewise.
+
+Tue Sep 14 12:14:28 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * g77spec.c (lang_specific_driver): Remove unnecessary argument in
+ call to function `fatal'.
+
+Sun Sep 12 23:29:47 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * Make-lang.in (g77spec.o): Depend on system.h and gcc.h.
+
+ * g77spec.c: Include gcc.h.
+ (g77_xargv): Constify.
+ (g77_fn): Add parameter prototypes.
+ (lookup_option, append_arg): Add static prototypes.
+ (g77_newargv): Constify.
+ (lookup_option, append_arg, lang_specific_driver): Constify a char*.
+ (lang_specific_driver): All calls to the function pointer
+ parameter now explicitly call `fatal'.
+
+Fri Sep 10 10:32:32 1999 Bernd Schmidt <bernds@cygnus.co.uk>
+
+ * com.h: Delete declarations for all tree nodes now moved to
+ global_trees.
+ * com.c: Delete their definitions.
+ (ffecom_init_0): Call build_common_tree_nodes and
+ build_common_tree_nodes_2 instead of building their nodes here.
+ Override their decisions for complex nodes.
+
+Sat Sep 4 13:46:27 1999 Mark Mitchell <mark@codesourcery.com>
+
+ * Make-lang.in (f771): Depend on ggc-callbacks.o.
+ * Makefile.in (OBJS): Add ggc-callbacks.o.
+ (OBJDEPS): Likewise.
+
+Mon Aug 30 22:05:53 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * com.c (language_string): Constify.
+
+Mon Aug 30 20:29:30 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * Makefile.in (LIBS, LIBDEPS): Link with & depend on libiberty.a.
+ Remove hacks for stuff which now comes from libiberty.
+
+Sun Aug 29 09:47:45 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * com.c (lang_printable_name): Constify a char*.
+
+Wed Aug 25 01:21:06 1999 Rainer Orth <ro@TechFak.Uni-Bielefeld.DE>
+
+ * lang-specs.h: Pass cc1 spec to f771.
+
+Mon Aug 9 19:44:08 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * com.c (lang_print_error_function): Constify a char*.
+ (init_parse): Remove redundant prototype for `print_error_function'.
+ (lang_identify): Constify a char*.
+
+Thu Aug 5 02:40:42 1999 Jeffrey A Law (law@cygnus.com)
+
+ * g77spec.c: Update URLS and mail addresses.
+ * root.texi: Update URLS and mail addresses.
+
+1999-07-25 Richard Henderson <rth@cygnus.com>
+
+ * com.c (ptr_type_node, va_list_type_node): New.
+ (ffecom_init_0): Init and use ptr_type_node.
1999-07-17 Alexandre Oliva <oliva@dcc.unicamp.br>
-
+
* root.texi: Update e-mail addresses to gcc.gnu.org.
- * g77spec.c (lang_specific_driver): Updated URL with bug reporting
+ * g77spec.c (lang_specific_driver): Updated URL with bug reporting
instructions to gcc.gnu.org. Removed e-mail address.
Sat Jul 17 11:28:43 1999 Craig Burley <craig@jcb-sc.com>
@@ -48,11 +1439,9 @@ Thu Jul 8 15:38:50 1999 Craig Burley <craig@jcb-sc.com>
* news.texi: Describe DATE intrinsic fix.
-Tue Jun 29 10:10:25 1999 Craig Burley <craig@jcb-sc.com>
+Mon Jun 28 21:44:19 1999 Craig Burley <craig@jcb-sc.com>
- * bugs.texi: Undo Friday's change, as there's now a fix
- available from netlib.
- * news.texi: Document the fix.
+ * version.c: Denote experimental version.
Mon Jun 28 10:43:11 1999 Craig Burley <craig@jcb-sc.com>
@@ -61,6 +1450,11 @@ Mon Jun 28 10:43:11 1999 Craig Burley <craig@jcb-sc.com>
* version.c: Bump version.
+Mon Jun 28 21:31:35 1999 Craig Burley <craig@jcb-sc.com>
+
+ * bugs.texi, news.texi: Doc upgrade to netlib libf2c as of today.
+ Explain that this fixes the NAMELIST-read bug.
+
Fri Jun 25 11:06:32 1999 Craig Burley <craig@jcb-sc.com>
* bugs.texi: Describe K(5)=10*3 NAMELIST-read bug.
@@ -69,6 +1463,19 @@ Mon Jun 21 12:40:17 1999 Gerald Pfeifer <pfeifer@dbai.tuwien.ac.at>
* g77.texi: Update links.
+Mon Jun 21 05:33:51 1999 Jeffrey A Law (law@cygnus.com)
+
+ * news.texi: Add missing @end ifclear.
+
+Fri Jun 18 11:43:46 1999 Craig Burley <craig@jcb-sc.com>
+
+ * news.texi: Doc TtyNam fix.
+
+Fri Jun 18 11:26:50 1999 Craig Burley <craig@jcb-sc.com>
+
+ * news.texi: New heading for development version.
+ Doc upgrade to netlib libf2c as of today.
+
Wed Jun 16 11:43:02 1999 Craig Burley <craig@jcb-sc.com>
* news.texi: Mention BACKSPACE fix to libg2c.
@@ -465,7 +1872,7 @@ Sun Apr 11 21:33:33 1999 Mumit Khan <khan@xraylith.wisc.edu>
* g77spec.c (lang_specific_driver): Check whether MATH_LIBRARY is
null to decide whether to use it.
-Wed Apr 7 09:47:09 1999 Kaveh R. Ghazi <ghazi@snafu.rutgers.edu>
+Wed Apr 7 09:47:09 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
* ansify.c (die): Specify void argument.
@@ -519,64 +1926,64 @@ Fri Apr 2 12:49:12 1999 Craig Burley <craig@jcb-sc.com>
Tue Mar 30 12:04:11 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
- * sta.c (ffesta_ffebad_1sp, ffesta_ffebad_1st, ffesta_ffebad_2st):
- Const-ify a char*.
+ * sta.c (ffesta_ffebad_1sp, ffesta_ffebad_1st, ffesta_ffebad_2st):
+ Const-ify a char*.
- * sta.h (ffesta_ffebad_1sp, ffesta_ffebad_1st, ffesta_ffebad_2st):
- Likewise.
+ * sta.h (ffesta_ffebad_1sp, ffesta_ffebad_1st, ffesta_ffebad_2st):
+ Likewise.
- * stb.c (ffestb_local_u_): Likewise.
- (ffestb_do, ffestb_dowhile, ffestb_else, ffestb_elsexyz,
- ffestb_else3_, ffestb_endxyz, ffestb_goto, ffestb_let,
- ffestb_type, ffestb_type1_, ffestb_varlist, ffestb_R423B,
- ffestb_R522, ffestb_R528, ffestb_R542, ffestb_R834, ffestb_R835,
- ffestb_R838, ffestb_R841, ffestb_R1102, ffestb_blockdata,
- ffestb_R1212, ffestb_R1228, ffestb_V009, ffestb_module,
- ffestb_R809, ffestb_R810, ffestb_R10014_, ffestb_R10015_,
- ffestb_R10018_, ffestb_R1107, ffestb_R1202, ffestb_R12026_,
- ffestb_S3P4, ffestb_V012, ffestb_V014, ffestb_V025, ffestb_V0255_,
- ffestb_V020, ffestb_dimlist, ffestb_dummy, ffestb_R524,
- ffestb_R547, ffestb_decl_chartype, ffestb_decl_dbltype,
- ffestb_decl_gentype, ffestb_decl_recursive, ffestb_decl_entsp_2_,
- ffestb_decl_func_, ffestb_V003, ffestb_V016, ffestb_V027,
- ffestb_decl_R539): Likewise.
+ * stb.c (ffestb_local_u_): Likewise.
+ (ffestb_do, ffestb_dowhile, ffestb_else, ffestb_elsexyz,
+ ffestb_else3_, ffestb_endxyz, ffestb_goto, ffestb_let,
+ ffestb_type, ffestb_type1_, ffestb_varlist, ffestb_R423B,
+ ffestb_R522, ffestb_R528, ffestb_R542, ffestb_R834, ffestb_R835,
+ ffestb_R838, ffestb_R841, ffestb_R1102, ffestb_blockdata,
+ ffestb_R1212, ffestb_R1228, ffestb_V009, ffestb_module,
+ ffestb_R809, ffestb_R810, ffestb_R10014_, ffestb_R10015_,
+ ffestb_R10018_, ffestb_R1107, ffestb_R1202, ffestb_R12026_,
+ ffestb_S3P4, ffestb_V012, ffestb_V014, ffestb_V025, ffestb_V0255_,
+ ffestb_V020, ffestb_dimlist, ffestb_dummy, ffestb_R524,
+ ffestb_R547, ffestb_decl_chartype, ffestb_decl_dbltype,
+ ffestb_decl_gentype, ffestb_decl_recursive, ffestb_decl_entsp_2_,
+ ffestb_decl_func_, ffestb_V003, ffestb_V016, ffestb_V027,
+ ffestb_decl_R539): Likewise.
- * stb.h (_ffestb_args_): Likewise.
+ * stb.h (_ffestb_args_): Likewise.
- * stc.c (ffestc_subr_binsrch_, ffestc_subr_is_present_,
- ffestc_subr_speccmp_, ffestc_R904, ffestc_R907): Likewise.
+ * stc.c (ffestc_subr_binsrch_, ffestc_subr_is_present_,
+ ffestc_subr_speccmp_, ffestc_R904, ffestc_R907): Likewise.
- * std.c (ffestd_R1001dump_1005_1_, ffestd_R1001dump_1005_2_,
- ffestd_R1001dump_1005_3_, ffestd_R1001dump_1005_4_,
- ffestd_R1001dump_1005_5_, ffestd_R1001dump_1010_1_,
- ffestd_R1001dump_1010_2_, ffestd_R1001dump_1010_3_,
- ffestd_R1001dump_1010_4_, ffestd_R1001dump_1010_5_): Likewise.
+ * std.c (ffestd_R1001dump_1005_1_, ffestd_R1001dump_1005_2_,
+ ffestd_R1001dump_1005_3_, ffestd_R1001dump_1005_4_,
+ ffestd_R1001dump_1005_5_, ffestd_R1001dump_1010_1_,
+ ffestd_R1001dump_1010_2_, ffestd_R1001dump_1010_3_,
+ ffestd_R1001dump_1010_4_, ffestd_R1001dump_1010_5_): Likewise.
- * ste.c (ffeste_begin_iterdo_, ffeste_subr_file_): Likewise.
+ * ste.c (ffeste_begin_iterdo_, ffeste_subr_file_): Likewise.
- * sts.c (ffests_printf_1D, ffests_printf_1U, ffests_printf_1s,
- ffests_printf_2Us, ffests_puts, ffests_puttext): Likewise.
+ * sts.c (ffests_printf_1D, ffests_printf_1U, ffests_printf_1s,
+ ffests_printf_2Us, ffests_puts, ffests_puttext): Likewise.
- * sts.h (ffests_printf_1D, ffests_printf_1U, ffests_printf_1s,
- ffests_printf_2Us, ffests_puts, ffests_puttext): Likewise.
+ * sts.h (ffests_printf_1D, ffests_printf_1U, ffests_printf_1s,
+ ffests_printf_2Us, ffests_puts, ffests_puttext): Likewise.
- * stt.c (ffestt_exprlist_drive, ffestt_implist_drive,
- ffestt_tokenlist_drive): Add prototype arguments.
+ * stt.c (ffestt_exprlist_drive, ffestt_implist_drive,
+ ffestt_tokenlist_drive): Add prototype arguments.
- * stt.h (ffestt_exprlist_drive, ffestt_implist_drive,
- ffestt_tokenlist_drive): Likewise.
+ * stt.h (ffestt_exprlist_drive, ffestt_implist_drive,
+ ffestt_tokenlist_drive): Likewise.
- * stu.c (ffestu_dummies_transition_): Likewise.
- (ffestu_sym_end_transition): Const-ify a char*.
+ * stu.c (ffestu_dummies_transition_): Likewise.
+ (ffestu_sym_end_transition): Const-ify a char*.
- * stw.c (ffestw_display_state, ffestw_new, ffestw_pop): Add
- prototype arguments.
+ * stw.c (ffestw_display_state, ffestw_new, ffestw_pop): Add
+ prototype arguments.
- * stw.h (ffestw_display_state, ffestw_new, ffestw_pop): Likewise.
+ * stw.h (ffestw_display_state, ffestw_new, ffestw_pop): Likewise.
- * version.c (ffe_version_string): Const-ify a char*.
+ * version.c (ffe_version_string): Const-ify a char*.
- * version.h (ffe_version_string): Likewise.
+ * version.h (ffe_version_string): Likewise.
Sat Mar 27 13:00:43 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
@@ -600,7 +2007,7 @@ Sat Mar 27 13:00:43 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
ffecom_get_identifier_, ffecom_decl_field,
ffecom_get_invented_identifier, lang_print_error_function,
skip_redundant_dir_prefix, read_name_map, print_containing_files):
- Const-ify a char*.
+ Const-ify a char*.
(savestring): Remove, use `xstrdup' instead.
* com.h (ffecom_decl_field, ffecom_get_invented_identifier):
@@ -808,7 +2215,7 @@ Wed Mar 3 00:05:52 1999 Craig Burley <craig@jcb-sc.com>
* g77.texi: Clarify/index lack of run-time allocation for
concatenation.
-
+
1999-02-25 Andreas Jaeger <aj@arthur.rhein-neckar.de>
* f/intdoc.in: Add missing `,' after cross references.
@@ -936,7 +2343,7 @@ Sun Jan 31 20:34:29 1999 Zack Weinberg <zack@rabi.columbia.edu>
Tue Jan 5 22:12:41 1999 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
- * Make-lang.in (g77.o): Depend on prefix.h.
+ * Make-lang.in (g77.o): Depend on prefix.h.
Fri Nov 27 13:10:32 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
diff --git a/contrib/gcc/f/ChangeLog.0 b/contrib/gcc/f/ChangeLog.0
new file mode 100644
index 0000000..b74222e
--- /dev/null
+++ b/contrib/gcc/f/ChangeLog.0
@@ -0,0 +1,4806 @@
+Mon Jun 29 09:47:33 1998 Craig Burley <burley@gnu.org>
+
+ Fix 980628-*.f:
+ * bld.h: New `pad' field and accessor macros for
+ ACCTER, ARRTER, and CONTER ops.
+ * bld.c (ffebld_new_accter, ffebld_new_arrter,
+ ffebld_new_conter_with_orig): Initialize `pad' field
+ to zero.
+ * com.c (ffecom_transform_common_): Include initial
+ padding (aka modulo aka offset) in size calculation.
+ Copy initial padding value into FFE initialization expression
+ so the GBE transformation of that expression includes it.
+ Make array low bound 0 instead of 1, for consistency.
+ (ffecom_transform_equiv_): Include initial
+ padding (aka modulo aka offset) in size calculation.
+ Copy initial padding value into FFE initialization expression
+ so the GBE transformation of that expression includes it.
+ Make array low bound 0 instead of 1, for consistency.
+ (ffecom_expr_, case FFEBLD_opACCTER): Delete unused `size'
+ variable.
+ Track destination offset separately, allowing for
+ initial padding.
+ Don't bother setting initial PURPOSE offset if zero.
+ Include initial padding in size calculation.
+ (ffecom_expr_, case FFEBLD_opARRTER): Allow for
+ initial padding.
+ Include initial padding in size calculation.
+ Make array low bound 0 instead of 1, for consistency.
+ (ffecom_finish_global_): Make array low bound 0 instead
+ of 1, for consistency.
+ (ffecom_notify_init_storage): Copy `pad' field from old
+ ACCTER to new ARRTER.
+ (ffecom_notify_init_symbol): Ditto.
+ * data.c (ffedata_gather_): Initialize `pad' field in new
+ ARRTER to 0.
+ (ffedata_value_): Ditto.
+ * equiv.c (ffeequiv_layout_local_): When lowering start
+ of equiv area, extend lowering to maintain needed alignment.
+ * target.c (ffetarget_align): Handle negative offset correctly.
+
+ * global.c (ffeglobal_pad_common): Warn about non-zero
+ padding only the first time its seen.
+ If new padding larger than old, update old.
+ (ffeglobal_save_common): Use correct type for size throughout.
+ * global.h: Use correct type for size throughout.
+ (ffeglobal_common_pad): New macro.
+ (ffeglobal_pad): Delete this unused and broken macro.
+
+Sat Jun 27 12:18:33 1998 Jeffrey A Law (law@cygnus.com)
+
+ * Make-lang.in (g77): Depend on mkstemp.o. Link in mkstemp.o.
+
+Fri Jun 26 11:54:19 1998 Craig Burley <burley@gnu.org>
+
+ * g77spec.c (lang_specific_driver): Put `-lg2c' in
+ front of any `-lm' that is seen.
+
+Wed Jun 24 01:01:23 1998 Jeffrey A Law (law@cygnus.com)
+
+ * g77spec.c (lang_specific_driver): Revert last change.
+
+Mon Jun 22 23:12:05 1998 H.J. Lu (hjl@gnu.org)
+
+ * Make-lang.in (G77STAGESTUFF): Add g77.c.
+
+Fri Jun 19 07:54:40 1998 H.J. Lu (hjl@gnu.org)
+
+ * g77spec.c (lang_specific_driver): Check n_infiles before
+ appending args.
+
+Mon Jun 15 23:39:24 1998 Craig Burley <burley@gnu.org>
+
+ * Make-lang.in (f/g77.info): Use -f when removing
+ pre-existing Info files, if any. (This rm command
+ can go away once makeinfo has been changed to delete
+ .info-N files beyond the last one it creates.)
+
+ * Make-lang.in ($(srcdir)/f/intdoc.texi): Compile
+ using $(INCLUDES) macro to get the new hconfig.h
+ and system.h headers.
+
+Mon Jun 15 22:21:57 1998 Craig Burley <burley@gnu.org>
+
+ Cutover to system.h:
+ * Make-lang.in:
+ * Makefile.in:
+ * ansify.c:
+ * bad.c:
+ * bld.c:
+ * com.c:
+ * com.h:
+ * expr.c:
+ * fini.c:
+ * g77spec.c:
+ * implic.c:
+ * intdoc.c:
+ * intrin.c:
+ * lex.c:
+ * lex.h:
+ * parse.c:
+ * proj.c:
+ * proj.h:
+ * src.c:
+ * src.h:
+ * stb.c:
+ * ste.c:
+ * target.c:
+ * top.c:
+ * system.j: New file.
+
+ Use toplev.h where appropriate:
+ * Make-lang.in:
+ * Makefile.in:
+ * bad.c:
+ * bld.c:
+ * com.c:
+ * lex.c:
+ * ste.c:
+ * top.c:
+ * toplev.j: New file.
+
+ Conditionalize all dumping/reporting routines so they don't
+ get built for gcc/egcs:
+ * bld.c:
+ * bld.h:
+ * com.c:
+ * equiv.c:
+ * equiv.h:
+ * sta.c:
+ * stt.c:
+ * stt.h:
+ * symbol.c:
+ * symbol.h:
+
+ Use hconfig.h instead of config.h where appropriate:
+ * Makefile.in (proj-h.o): Compile with -DUSE_HCONFIG.
+ * fini.c: Define USE_HCONFIG before including proj.h.
+
+ * Makefile.in (deps-kinda): Redirect stderr to stdout,
+ to eliminate diagnostics vis-a-vis g77spec.c.
+
+ * Makefile.in: Regenerate dependencies via deps-kinda.
+
+ * lex.c (ffelex_file_fixed, ffelex_file_free): Eliminate
+ apparently spurious warnings about uninitialized variables
+ `c', `column', and so on.
+
+Sat Jun 13 03:13:18 1998 Craig Burley <burley@gnu.org>
+
+ * g77spec.c (lang_specific_driver): Print out egcs
+ version info first, to be compatible with what some
+ test facilities expect.
+
+Wed Jun 10 13:17:32 1998 Dave Brolley <brolley@cygnus.com>
+
+ * top.h (ffe_decode_option): New argc/argv interface.
+ * top.c (ffe_decode_option): New argc/argv interface.
+ * parse.c (yyparse): New argc/argv interface for ffe_decode_option.
+ * com.c (lang_decode_option): New argc/argv interface.
+
+Sun Jun 7 14:04:34 1998 Richard Henderson <rth@cygnus.com>
+
+ * com.c (lang_init_options): New function.
+ * top.c (ffe_decode_option): Remove all trace of -fset-g77-defaults.
+ Set ffe_is_do_internal_checks_ with -version.
+ * lang-options.h: Likewise.
+ * lang-specs.h: Likewise.
+
+Fri Jun 5 15:53:17 1998 Per Bothner <bothner@cygnus.com>
+
+ * g77spec.c (lang_specific_pre_link, lang_specific_extra_ofiles):
+ Define - update needed by gcc.c change.
+
+Mon Jun 1 19:37:42 1998 Craig Burley <burley@gnu.org>
+
+ * com.c (ffecom_init_0): Fix setup of INTEGER(KIND=7)
+ pointer type.
+ * info.c (ffeinfo_type): Don't crash on null type.
+ * expr.c (ffeexpr_fulfill_call_): Don't special-case
+ %LOC(expr) or LOC(expr).
+ Delete FFEGLOBAL_argsummaryPTR.
+ * global.c, global.h: Delete FFEGLOBAL_argsummaryPTR.
+
+Thu May 28 21:32:18 1998 Craig Burley <burley@gnu.org>
+
+ Restore circa-0.5.22 capabilities of `g77' driver:
+ * Make-lang.in (g77spec.o): Depend on f/version.h.
+ (g77version.o): New rule to compile g77 version info.
+ (g77$(exeext)): Depend on and link in g77version.o.
+ * g77spec.c: Rewrite to be more like 0.5.22 version
+ of g77.c, making filtering of command line smarter
+ so mixed Fortran and C (etc.) can be compiled, verbose
+ version info can be obtained, etc.
+ * lang-specs.h (f77-version): New "language" to support
+ "g77 -v" command under new gcc 2.8 regime.
+ * lex.c (ffelex_file_fixed): If -fnull-version, just
+ substitute a "source file" that prints out version info.
+ * top.c, top.h: Support -fnull-version.
+
+ * lang-specs.h: Use "%O" instead of OO macro to specify
+ object extension. Remove old stringizing cruft.
+
+ * Make-lang.in (g77.c, g77spec.o, g77.o, g77$(exeext),
+ g77-cross$(exeext), f771,
+ $(srcdir)/f/g77.info, $(srcdir)/f/g77.dvi,
+ $(srcdir)/f/intdoc.texi,
+ f77.install-common, f77.install-info, f77.install-man,
+ f77.uninstall, $(G77STAGESTUFF), f77.stage1, f77.stage2,
+ f77.stage3, f77.stage4, f77.distdir): Don't do anything
+ unless user specified "f77" or "F77" in $LANGUAGES either
+ during configuration or explicitly. For convenience of
+ various tests and to work around lack of the assignment
+ "LANGUAGES=$(BOOT_LANGUAGES)" in the "make stage1" command
+ of "make bootstrap" in gcc, use a touch file named "lang-f77"
+ to communicate whether this is the case.
+
+ * Make-lang.in (F77_FLAGS_TO_PASS): Delete this macro,
+ replace with minimal expansion of its former self in
+ each of the two instances where it was used.
+
+ * Makefile.in (HOST_CC): Delete this definition.
+
+ * com.c (index, rindex): Delete these declarations.
+
+ * proj.h: (isascii): Delete this.
+
+ * Make-lang.in (f77.install-common): Warn if `f77-install-ok'
+ flag-file exists, since it no longer triggers any activity.
+
+ Rename libf2c.a and f2c.h to libg2c.a and g2c.h,
+ normalize and simplify g77/libg2c build process:
+ * Make-lang.in: Remove all support for overwriting
+ /usr/bin/f77 etc., or whatever the actual names are
+ via $(prefix) and $(local_prefix). (g++ overwrites
+ /usr/bin/c++, but then it's often the only C++ compiler
+ on the system; f77 often exists on systems that are
+ installing g77.)
+ (f77.realclean): Remove obsolete target.
+ (g77.c, g77$(exeext)): Minor changes to look more like g++'s
+ stuff.
+ (f771): Now built with srcdir=gcc/f, not srcdir=gcc, to be
+ more like g++ and such.
+ (f/Makefile): Removed, as g++ doesn't need this rule.
+ (f77.install-common): No longer install f77, etc.
+ (f77.install-man): No longer install f77.1.
+ (f77.uninstall): No longer uninstall f77, f77.1, etc.
+ (f77.stage1, f77.stage2, f77.stage3, f77.stage4): Do work
+ only if "f77" appears in $(LANGUAGES).
+ (Note: gcc's Makefile.in's bootstrap target should set
+ LANGUAGES=$(BOOT_LANGUAGES) when making the stage1 target.)
+ * Makefile.in: Update vis-a-vis gcc/cp/Makefile.in.
+ (none): Remove.
+ (g77-only): Relocate.
+ (all.indirect, f771, *.o): Now assumes current directory
+ is this dir (gcc/f), not the parent directory.
+ (TAGS): Remove "echo 'parse.y,0' >> TAGS ;" line.
+ * config-lang.in: Delete commented-out code.
+ Fix stagestuff definition. Add more stuff to
+ diff_excludes definition. Don't create any directories.
+ Set outputs to f/Makefile, to get variable substition
+ to happen (what does that really do, anyway?!).
+ * g77spec.c: Rename libf2c to libg2c.
+
+ * com.h: Remove all of the gcc back-end decls,
+ since egcs should have all of them correct.
+
+ * com.c: Include "proj.h" before anything else,
+ as that's how things are supposed to work.
+ * ste.c: Ditto.
+
+ * bad.c: Include "flags.j" here, since some diagnostics
+ check flag_pedantic_errors.
+
+ * Makefile.in (f/*.o): Rebuild dependencies via
+ deps-kinda.
+
+ * output.j: New source file.
+ * Make-lang.in (F77_SRCS): Update accordingly.
+ * Makefile.in (OUTPUT_H): Ditto.
+ (deps-kinda): Ditto.
+ * com.c: Include "output.j" here.
+ * lex.c: Ditto.
+
+Mon May 25 03:34:42 1998 Craig Burley <burley@gnu.org>
+
+ * com.c (ffecom_expr_): Fix D**I and Z**I cases to
+ not convert (DOUBLE PRECISION) D and (DOUBLE COMPLEX) Z
+ to INTEGER. (This is dead code here anyway.)
+
+Sat May 23 06:32:52 1998 Craig Burley <burley@gnu.org>
+
+ * com.c (ffecom_finish_symbol_transform_): Don't transform
+ statement (nested) functions, to avoid gcc compiling them
+ and thus producing linker errors if they refer to undefined
+ external functions. But warn if they're unused and -Wunused.
+ * bad.def (FFEBAD_SFUNC_UNUSED): New diagnostic.
+
+Wed May 20 12:12:55 1998 Craig Burley <burley@gnu.org>
+
+ * Version 0.5.23 released.
+
+Tue May 19 14:52:41 1998 Craig Burley <burley@gnu.org>
+
+ * bad.def (FFEBAD_OPEN_UNSUPPORTED, FFEBAD_INQUIRE_UNSUPPORTED,
+ FFEBAD_READ_UNSUPPORTED, FFEBAD_WRITE_UNSUPPORTED,
+ FFEBAD_QUAD_UNSUPPORTED, FFEBAD_BLOCKDATA_STMT,
+ FFEBAD_TRUNCATING_CHARACTER, FFEBAD_TRUNCATING_HOLLERITH,
+ FFEBAD_TRUNCATING_NUMERIC, FFEBAD_TRUNCATING_TYPELESS,
+ FFEBAD_TYPELESS_OVERFLOW): Change these from warnings
+ to errors.
+
+Tue May 19 14:51:59 1998 Craig Burley <burley@gnu.org>
+
+ * Make-lang.in (f77.install-info, f77.uninstall):
+ Use install-info as appropriate.
+
+Tue May 19 12:56:54 1998 Craig Burley <burley@gnu.org>
+
+ * com.c (ffecom_init_0): Rename xargc to f__xargc,
+ in accord with same-dated change to f/runtime.
+
+Fri May 15 10:52:49 1998 Craig Burley <burley@gnu.org>
+
+ * com.c (ffecom_convert_narrow_, ffecom_convert_widen_):
+ Be even more persnickety in checking for internal bugs.
+ Also, if precision isn't changing, just return the expr.
+
+ * expr.c (ffeexpr_token_number_): Call
+ ffeexpr_make_float_const_ to make an integer.
+ (ffeexpr_make_float_const_): Handle making an integer.
+
+ * intrin.c (ffeintrin_init_0): Distinguish between
+ crashes on bad arg base and kind types.
+
+Fri May 15 01:44:22 1998 Mumit Khan <khan@xraylith.wisc.edu>
+
+ * Make-lang.in (f77.mostlyclean): Add missing exeext.
+
+Thu May 14 13:30:59 1998 Craig Burley <burley@gnu.org>
+
+ * Make-lang.in (f/expr.c): Now depends on f/stamp-str.
+ * expr.c: Use ffestrOther in place of ffeexprDotdot_.
+ * str-ot.fin: Add more keywords for expr.c.
+
+ * intdoc.c (dumpimp): Trivial fix.
+
+ * com.c (ffecom_expr_): Add ltkt variable for clarity.
+
+Wed May 13 13:05:34 1998 Craig Burley <burley@gnu.org>
+
+ * Make-lang.in (G77STAGESTUFF): Add g77.o, g77spec.o,
+ and g77version.o.
+ (f77.clean): Add removal of g77.c, g77.o, g77spec.o,
+ and g77version.o.
+ (f77.distclean): Delete removal of g77.c.
+
+Thu Apr 30 18:59:43 1998 Jim Wilson <wilson@cygnus.com>
+
+ * Make-lang.in (g77.info, g77.dvi, BUGS, INSTALL, NEWS): Put -o
+ option before input file.
+
+Tue Apr 28 09:23:10 1998 Craig Burley <burley@gnu.org>
+
+ Fix 980427-0.f:
+ * global.c (ffeglobal_ref_progunit_): When transitioning
+ from EXT to FUNC, discard hook, since the decl, if any, is
+ probably wrong.
+
+Sun Apr 26 09:05:50 1998 Craig Burley <burley@gnu.org>
+
+ * com.c (ffecom_char_enhance_arg_): Wrap the upper bound
+ (the PARM_DECL specifying the length of the CHARACTER*(*)
+ dummy arg) in a variable_size invocation, to prevent
+ dwarf2out.c crashing when compiling code with -g.
+
+Sat Apr 18 15:26:57 1998 Jim Wilson <wilson@cygnus.com>
+
+ * g77spec.c (lang_specific_driver): New argument in_added_libraries.
+ New local added_libraries. Increment count when add library to
+ arglist.
+
+Sat Apr 18 05:03:21 1998 Craig Burley <burley@gnu.org>
+
+ * com.c (ffecom_check_size_overflow_): Ignore overflow
+ as well if dummy argument.
+
+Fri Apr 17 17:18:04 1998 Craig Burley <burley@gnu.org>
+
+ * version.h: Get rid of the overly large headers
+ here too, as done in version.c.
+
+Tue Apr 14 15:51:37 1998 Dave Brolley <brolley@cygnus.com>
+
+ * com.c (init_parse): Now returns char* containing filename;
+
+Tue Apr 14 14:40:40 1998 Craig Burley <burley@gnu.org>
+
+ * com.c (ffecom_start_progunit_): Mark function decl
+ as used, to avoid spurious warning (-Wunused) for ENTRY.
+
+Tue Apr 14 14:19:34 1998 Craig Burley <burley@gnu.org>
+
+ * sta.c (ffesta_second_): Check for CASE DEFAULT
+ as well as CASE, or it won't be recognized.
+
+Thu Apr 9 00:18:44 1998 Dave Brolley (brolley@cygnus.com)
+
+ * com.c (finput): New variable.
+ (init_parse): Handle !USE_CPPLIB.
+ (finish_parse): New function.
+ (lang_init): No longer declare finput.
+
+Sat Apr 4 17:45:01 1998 Richard Henderson <rth@cygnus.com>
+
+ * com.c (ffecom_expr_): Revert Oct 22 change. Instead take a WIDENP
+ argument so that we can respect the signedness of the original type.
+ (ffecom_init_0): Do sizetype initialization first.
+
+1998-03-28 Dave Love <d.love@dl.ac.uk>
+
+ * Make-lang.in (f771$(exeext)): Fix typo.
+
+1998-03-24 Martin von Loewis <loewis@informatik.hu-berlin.de>
+
+ * com.c (lang_print_xnode): New function.
+
+Mon Mar 23 21:20:35 1998 Craig Burley <burley@gnu.org>
+
+ * version.c: Reduce to a one-line file, like
+ gcc's version.c, since there's really no content
+ there.
+
+Mon Mar 23 11:58:43 1998 Craig Burley <burley@gnu.org>
+
+ * bugs.texi: Various updates.
+
+ * com.c (ffecom_tree_canonize_ptr_): Fix up spacing a bit.
+
+Sun Mar 22 00:50:42 1998 Nick Clifton <nickc@cygnus.com>
+ Geoff Noer <noer@cygnus.com>
+
+ * Makefile.in: Various fixes for building cygwin32 native toolchains.
+ * Make-lang.in: Likewise.
+
+Mon Mar 16 21:20:35 1998 Craig Burley <burley@gnu.org>
+
+ * expr.c (ffeexpr_sym_impdoitem_): Don't blindly
+ reset symbol info after calling ffesymbol_error,
+ to avoid crash.
+
+Mon Mar 16 15:38:50 1998 Craig Burley <burley@gnu.org>
+
+ * Version 0.5.22 released.
+
+Mon Mar 16 14:36:02 1998 Craig Burley <burley@gnu.org>
+
+ Make -g work better for ENTRY:
+ * com.c (ffecom_start_progunit_): Master function
+ for ENTRY-laden procedure is not really invented,
+ so it can be debugged.
+ (ffecom_do_entry_): Push/set/pop lineno for each
+ entry point.
+
+Sun Mar 15 05:48:49 1998 Craig Burley <burley@gnu.org>
+
+ * intrin.def: Fix spelling of mixed-case form
+ of `CPU_Time' (was `Cpu_Time').
+
+Thu Mar 12 13:50:21 1998 Craig Burley <burley@gnu.org>
+
+ * lang-options.h: Sort all -f*-intrinsics-* options,
+ for consistency with other g77 versions.
+
+Thu Mar 12 09:39:40 1998 Manfred Hollstein <manfred@s-direktnet.de>
+
+ * lang-specs.h: Properly put brackets around array elements in initializer.
+
+1998-03-09 Dave Love <d.love@dl.ac.uk>
+
+ * Make-lang.in: Set CONFIG_SITE to a non-existent file since
+ /dev/null loses with bash 2.0/autoconf 2.12. Put
+ F77_FLAGS_TO_PASS before CC.
+
+Sun Mar 8 16:35:34 1998 Craig Burley <burley@gnu.org>
+
+ * intrin.def: Use tabs instead of blanks more
+ consistently (excepting DEFGEN section for now).
+
+Wed Mar 4 17:38:21 1998 Jeffrey A Law (law@cygnus.com)
+
+ * Make-lang.in: Remove more references to libf77.
+
+Tue Mar 3 10:52:35 1998 Manfred Hollstein <manfred@s-direktnet.de>
+
+ * g77.texi: Use @url for citing URLs.
+
+Sat Feb 28 15:24:38 1998 Craig Burley <burley@gnu.org>
+
+ * intrin.def: Make CPU_TIME's arg generic real to be just
+ like SECOND_subr.
+
+Fri Feb 20 12:45:53 1998 Craig Burley <burley@gnu.org>
+
+ * expr.c (ffeexpr_token_arguments_): Make sure
+ outer exprstack isn't null.
+
+1998-02-16 Dave Love <d.love@dl.ac.uk>
+
+ * Makefile.in (f/fini): Don't use -W -Wall with HOST_CC.
+
+Fri Feb 13 00:14:56 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * com.c (type_for_mode): Add explicit braces to avoid ambiguous `else'.
+
+ * expr.c (ffeexpr_type_combine): Likewise.
+ (ffeexpr_reduce_): Likewise.
+ (ffeexpr_declare_parenthesized_): Likewise.
+
+ * src.c (ffesrc_strcmp_1ns2i): Likewise.
+ (ffesrc_strcmp_2c): Likewise.
+ (ffesrc_strncmp_2c): Likewise.
+
+ * stb.c (ffestb_halt1_): Likewise.
+ (ffestb_R90910_): Likewise.
+ (ffestb_R9109_): Likewise.
+
+ * stc.c (ffestc_R544_equiv_): Likewise.
+
+ * std.c (ffestd_subr_copy_easy_): Likewise.
+ (ffestd_R1001dump_): Likewise.
+ (ffestd_R1001dump_1005_1_): Likewise.
+ (ffestd_R1001dump_1005_2_): Likewise.
+ (ffestd_R1001dump_1005_3_): Likewise.
+ (ffestd_R1001dump_1005_4_): Likewise.
+ (ffestd_R1001dump_1005_5_): Likewise.
+ (ffestd_R1001dump_1010_2_): Likewise.
+
+ * ste.c (ffeste_R840): Likewise.
+
+ * sts.c (ffests_puttext): Likewise.
+
+ * symbol.c (ffesymbol_check_token_): Likewise.
+
+ * target.c (ffetarget_real1): Likewise.
+ (ffetarget_real2): Likewise.
+
+Wed Feb 11 01:44:48 1998 Richard Henderson (rth@cygnus.com)
+
+ * com.c (ffecom_ptr_to_expr) [FFEBLD_opARRAYREF]: Do upper - lower
+ in the native type, so as to properly handle negative indices.
+
+Tue Feb 3 20:13:05 1998 Richard Henderson <rth@cygnus.com>
+
+ * config-lang.in: Remove references to runtime/.
+
+Sun Feb 1 12:43:49 1998 J"orn Rennecke <amylaar@cygnus.co.uk>
+
+ * com.c (ffecom_tree_canonize_ptr_): Place bitsizetype typed expr
+ as first agument in MULT_EXPR.
+ Use bitsize_int (0L, 0L) as zero for bitsizes.
+ (ffecom_tree_canonize_ref_):
+ Use bitsize_int (0L, 0L) as zero for bitsizes.
+ (ffecom_init_0): Use set_sizetype.
+
+Sun Feb 1 02:26:58 1998 Richard Henderson <rth@cygnus.com>
+
+ * runtime directory -- moved into "libf2c" in the toplevel
+ directory.
+ * Make-lang.in: Remove all runtime related stuff.
+
+Sun Jan 25 12:32:15 1998 Kaveh R. Ghazi <ghazi@caip.rutgers.edu>
+
+ * Make-lang.in (f77.stage1): Depend on stage1-start so parallel
+ make works better.
+ * (f77.stage2): Likewise for stage2-start.
+ * (f77.stage3): Likewise for stage3-start.
+ * (f77.stage4): Likewise for stage4-start.
+
+Sat Jan 17 21:28:08 1998 Pieter Nagel <pnagel@epiuse.co.za>
+
+ * Makefile.in (FLAGS_TO_PASS): Pass down gcc_include_dir and
+ local_prefix to sub-make invocations.
+
+Tue Jan 13 22:07:54 1998 Jeffrey A Law (law@cygnus.com)
+
+ * lang-options.h: Add missing options.
+
+Sun Jan 11 02:14:47 1998 Craig Burley <burley@gnu.org>
+
+ Support FORMAT(I<1+2>) (constant variable-FORMAT
+ expressions):
+ * bad.def (FFEBAD_FORMAT_VARIABLE): New diagnostic.
+ * std.c (ffestd_R1001rtexpr_): New function.
+ (ffestd_R1001dump_, ffestd_R1001dump_1005_1_,
+ ffestd_R1001dump_1005_2_, ffestd_R1001dump_1005_3_,
+ ffestd_R1001dump_1005_4_, ffestd_R1001dump_1005_5_,
+ ffestd_R1001dump_1010_2_, ffestd_R1001dump_1010_3_,
+ ffestd_R1001dump_1010_4_, ffestd_R1001dump_1010_5_):
+ Use new function instead of ffestd_R1001error_.
+
+ * stb.c (ffestb_R10014_, ffestb_R10016_, ffestb_R10018_,
+ ffestb_R100110_): Restructure `for' loop for style.
+
+ Fix 970626-2.f by not doing most back-end processing
+ when current_function_decl is an ERROR_MARK, and by
+ making that the case when its type would be an ERROR_MARK:
+ * com.c (ffecom_start_progunit_, finish_function,
+ lang_printable_name, start_function,
+ ffecom_finish_symbol_transform_): Test for ERROR_MARK.
+ * std.c (ffestd_stmt_pass_): Don't do any downstream
+ processing if ERROR_MARK.
+
+ * Make-lang.in (f77.install-common): Don't install, and
+ don't uninstall existing, Info files if f/g77.info
+ doesn't exit. (This is a somewhat modified version
+ of an egcs patch on 1998-01-07 12:05:51 by Bruno Haible
+ <bruno@linuix.mathematik.uni-karlsruhe.de>.)
+
+Fri Jan 9 19:09:07 1998 Craig Burley <burley@gnu.org>
+
+ Fix -fpedantic combined with `F()' invocation,
+ also -fugly-comma combined with `IARGC()' invocation:
+ * bad.def (FFEBAD_NULL_ARGUMENT_W): New diagnostic.
+ * expr.c (ffeexpr_finished_): Don't reject null expressions
+ in the argument-expression context -- let outer context
+ handle that.
+ (ffeexpr_token_arguments_): Warn about null expressions
+ here if -fpedantic (as appropriate).
+ Obey -fugly-comma for only external-procedure invocations.
+ * intrin.c (ffeintrin_check_): No longer ignore explicit
+ omitted trailing args.
+
+Tue Dec 23 14:58:04 1997 Craig Burley <burley@gnu.org>
+
+ * intrin.c (ffeintrin_fulfill_generic): Don't generate
+ FFEBAD_INTRINSIC_TYPE for CHARACTER*(*) intrinsic.
+
+ * com.c (ffecom_gfrt_basictype):
+ (ffecom_gfrt_kindtype):
+ (ffecom_make_gfrt_):
+ (FFECOM_rttypeVOIDSTAR_): New return type `void *', for
+ the SIGNAL intrinsic.
+ * com-rt.def (FFECOM_rttypeSIGNAL): Now returns `void *'.
+ * intdoc.c: Replace `p' kind specifier with `7'.
+ * intrin.c (ffeintrin_check_, ffeintrin_init_0): Replace
+ `p' kind specifier with `7'.
+ * intrin.def (FFEINTRIN_impLOC, FFEINTRIN_impSIGNAL_func,
+ FFEINTRIN_impSIGNAL_subr): Replace `p' specifier with `7'.
+ Also, SIGNAL now returns a `void *' status, not `int'.
+
+ Improve run-time diagnostic for "PRINT '(I1', 42":
+ * com.c (ffecom_char_args_x_): Renamed from ffecom_char_args_,
+ which is now a macro (to avoid lots of changes to other code)
+ with new arg, ffecom_char_args_with_null_ being another new
+ macro to call same function with different value for new arg.
+ This function now appends a null byte to opCONTER expression
+ if the new arg is TRUE.
+ (ffecom_arg_ptr_to_expr): Support NULL length pointer.
+ * ste.c (ffeste_io_cilist_):
+ (ffeste_io_icilist_): Pass NULL length ptr for
+ FORMAT expression, so null byte gets appended where
+ feasible.
+ * target.c (ffetarget_character1):
+ (ffetarget_concatenate_character1):
+ (ffetarget_substr_character1):
+ (ffetarget_convert_character1_character1):
+ (ffetarget_convert_character1_hollerith):
+ (ffetarget_convert_character1_integer4):
+ (ffetarget_convert_character1_logical4):
+ (ffetarget_convert_character1_typeless):
+ (ffetarget_hollerith): Append extra phantom null byte as
+ part of FFETARGET-NULL-BYTE kludge.
+
+ * intrin.def (FFEINTRIN_impCPU_TIME): Point to
+ FFECOM_gfrtSECOND as primary run-time routine.
+
+Mon Dec 22 12:41:07 1997 Craig Burley <burley@gnu.org>
+
+ * intrin.c (ffeintrin_init_0): Remove duplicate
+ check for `!'.
+
+Fri Dec 19 00:12:01 1997 Richard Henderson <rth@cygnus.com>
+
+ * com.c (ffecom_sym_transform_): Assumed arrays have no upper bound.
+
+Mon Dec 15 17:35:35 1997 Richard Henderson <rth@cygnus.com>
+
+ * com.c (ffecom_type_vardesc_): Vardesc.dims is a `ftnlen*'.
+
+Sun Dec 14 02:49:58 1997 Craig Burley <burley@gnu.org>
+
+ * intrin.c (ffeintrin_init_0): Fix up indentation a bit.
+ Fix bug that prevented checking of arguments other
+ than the first.
+
+ * intdoc.c: Fix up indentation a bit.
+
+Tue Dec 9 16:20:57 1997 Richard Henderson <rth@cygnus.com>
+
+ * com.c (ffecom_type_vardesc_): Vardesc.dims is a `ftnlen*'.
+
+Tue Dec 2 09:57:16 1997 Jeffrey A Law (law@cygnus.com)
+
+ * Make-lang.in (f77.clean): Remove g77.c.
+
+Mon Dec 1 19:12:36 1997 Craig Burley <burley@gnu.org>
+
+ * intrin.c (ffeintrin_check_): Fix up indentation a bit more.
+
+Mon Dec 1 16:21:08 1997 Craig Burley <burley@gnu.org>
+
+ * com.c (ffecom_arglist_expr_): Crash if non-supplied
+ optional arg isn't passed as an address.
+ Pass null pointer explicitly, instead of via ffecom routine.
+ If incoming argstring is NULL, substitute pointer to "0".
+ Recognize '0' as ending the usual arg stuff, just like '\0'.
+
+Sun Nov 30 22:22:22 1997 Craig Burley <burley@gnu.org>
+
+ * intdoc.c: Minor fix-ups.
+
+ * intrin.c (ffeintrin_check_): Fix up indentation a bit.
+
+ * intrin.def: Fix up spacing a bit.
+
+Tue Nov 25 15:33:28 1997 Jeffrey A Law (law@cygnus.com)
+
+ * Make-lang.in (f77.all.build): Add $(exeext) to binary files.
+ (f77.all.cross, f77.start.encap): Simliarly.
+
+Fri Nov 21 09:35:20 1997 Fred Fish <fnf@cygnus.com>
+
+ * Make-lang.in (stmp-f2c.h): Move inclusion of F77_FLAGS_TO_PASS
+ to before override of CC so that the override works.
+
+Thu Nov 20 00:58:14 1997 H.J. Lu (hjl@gnu.ai.mit.edu)
+
+ * Make-lang.in (f77.install-info): Depend on f77.info.
+
+1997-11-17 Dave Love <d.love@dl.ac.uk>
+
+ * com.c (ffecom_arglist_expr_): Pass null pointers for optional
+ args which aren't supplied.
+
+Sun Nov 16 21:45:43 1997 H.J. Lu (hjl@gnu.ai.mit.edu)
+
+ * Make-lang.in (f77.install-info): Depend on f77.info.
+
+1997-11-14 Dave Love <d.love@dl.ac.uk>
+
+ * intrin.def: Supply gfrt for CPU_TIME. Generalize arg types of
+ INT2, INT8, per doc.
+
+1997-11-06 Dave Love <d.love@dl.ac.uk>
+
+ * intrin.def: Allow non-integer args for INT2 and INT8 (per
+ documentation).
+
+Sun Nov 2 19:49:51 1997 Richard Henderson <rth@cygnus.com>
+
+ * com.c (ffecom_expr_): Only use TREE_TYPE argument for simple
+ arithmetic; convert types as necessary; recurse with target tree type.
+
+Tue Oct 28 02:21:25 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * lang-options.h: Add -fgnu-intrinsics-* and
+ -fbadu77-intrinsics-* options.
+
+Sun Oct 26 02:36:21 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * com.c (lang_print_error_function): Fix to more
+ reliably notice when the diagnosed region changes.
+
+Sat Oct 25 23:43:36 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ Fix 950327-0.f:
+ * sta.c, sta.h (ffesta_outpooldisp): New function.
+ * std.c (ffestd_stmt_pass_): Don't kill NULL pool.
+ (ffestd_R842): If pool already preserved, save NULL
+ for pool, because it should be killed only once.
+
+ * malloc.c [MALLOC_DEBUG]: Put initializer for `name'
+ component in braces, to avoid compiler warning.
+
+Wed Oct 22 11:37:41 1997 Richard Henderson <rth@cygnus.com>
+
+ * com.c (ffecom_expr_): Take an new arg TREE_TYPE that if non-null
+ specifies the type in which to do the calculation. Change all callers.
+ [FFEBLD_opARRAYREF]: Force the index expr to use sizetype.
+
+Thu Oct 16 02:04:08 1997 Paul Koning <pkoning@xedia.com>
+
+ * Make-lang.in (stmp-f2c.h): Don't configure the runtime
+ directory if LANGUAGES does not include f77.
+
+Mon Oct 13 12:12:41 1997 Richard Henderson <rth@cygnus.com>
+
+ * Make-lang.in (g77*): Copied from cp/Make-lang.in g++*.
+ * g77spec.c: New file, mostly copied from g++spec.c
+ * g77.c: Removed.
+
+Fri Oct 10 13:00:48 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * ste.c (ffeste_begin_iterdo_): Fix loop setup so iteration
+ variable is modified only after the #iterations is calculated;
+ otherwise if the iteration variable is aliased to any of the
+ operands in the start, end, or increment expressions, the
+ wrong #iterations might be calculated.
+
+ * com.c (ffecom_save_tree): Fix indentation.
+
+Mon Oct 6 14:15:03 1997 Jeffrey A Law (law@cygnus.com)
+
+ * Make-lang.in (f77.mostlyclean): Clean up stuff in the
+ object tree too.
+ (f77.clean, f77.distclean, f77.maintainer-clean): Likewise.
+
+1997-10-05 Dave Love <d.love@dl.ac.uk>
+
+ * intrin.def: Make SECOND_subr's arg generic real for people
+ porting from Cray and making everything double precision.
+
+Wed Oct 1 01:45:36 1997 Philippe De Muyter <phdm@info.ucl.ac.be>
+
+ * g77.c (pexecute, main): Use unlink, not remove.
+
+Mon Sep 29 16:18:21 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * stu.c (ffestu_list_exec_transition_,
+ ffestu_dummies_transition_): Specify `bool' type for
+ `in_progress' variables.
+
+ * com.h (assemble_string): Declare this routine (instead
+ of #include'ing "output.h" from gcc) to eliminate warnings
+ from lex.c.
+
+Mon Sep 29 10:37:07 1997 Jeffrey A Law (law@cygnus.com)
+
+ * intdoc.c (main): Remove unused attribute for main's arguments.
+
+Sun Sep 28 01:47:17 1997 Jeffrey A Law (law@cygnus.com)
+
+ * Make-lang.in (G77_FLAGS_TO_PASS): Pass down RANLIB, RANLIB_TEST
+ and AR instead of the _FOR_TARGET versions.
+
+Tue Sep 23 00:39:57 1997 Alexandre Oliva <oliva@dcc.unicamp.br>
+
+ * Make-lang.in: install.texi was renamed to g77install.texi
+ * install0.texi: Likewise.
+
+Fri Sep 19 01:12:27 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * expr.c (ffeexpr_reduced_eqop2_):
+ (ffeexpr_reduced_relop2_): Minor fixes to diagnostic code.
+
+ * fini.c (main): Change return type to `int'.
+
+Thu Sep 18 17:31:38 1997 Jeffrey A Law (law@cygnus.com)
+
+ * proj.h (FFEPROJ_BSEARCH): Delete all references.
+ (FFEPROJ_STRTOUL): Likewise.
+ * proj.c (bsearch): Compile this if no bsearch is provided by the
+ host system.
+ (strtoul): Similarly.
+
+ * g77install.texi: Renamed from install.texi
+ * g77.texi: Corresponding changes.
+
+ * fini.c (main): Return type is int.
+
+ * com.c (lang_printable_name): Use verbosity argument.
+
+Thu Sep 18 16:08:40 1997 Jeffrey A Law (law@cygnus.com)
+
+ * Make-lang.in: Fix merge problems.
+
+Wed Sep 17 10:47:08 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * com-rt.def (FFECOM_gfrtDSIGN, FFECOM_gfrtISIGN,
+ FFECOM_gfrtSIGN): Add second argument.
+
+ * expr.c (ffeexpr_cb_comma_c_): Trivial fixes.
+
+Sun Sep 14 21:01:23 1997 Jeffrey A Law (law@cygnus.com)
+
+ * Make-lang.in: Various changes to build info files
+ in the object tree rather than the source tree.
+
+ * proj.h: Include ctype.h.
+
+Sun Sep 14 12:35:20 1997 Fred Fish (fnf@ninemoons.com)
+
+ * proj.h (isascii): Provide a default definition if none is available.
+
+Thu Sep 11 19:26:10 1997 Dave Love <d.love@dl.ac.uk>
+
+ * config-lang.in: Remove the messages about possible build problems.
+
+Wed Sep 10 16:39:47 1997 Jim Wilson <wilson@cygnus.com>
+
+ * Make-lang.in (LN, LN_S): New macros, use where appropriate.
+
+Tue Sep 9 13:20:40 1997 Jim Wilson <wilson@cygnus.com>
+
+ * g77.c (pexecute, doit): Add checks for __CYGWIN32__.
+
+Tue Sep 9 01:59:35 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * Version 0.5.21 released.
+
+Tue Sep 9 00:31:01 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * intdoc.c (dumpem): Put appropriate commentary in
+ output file, so readers know it isn't source.
+
+Wed Aug 27 20:32:03 1997 Jeffrey A Law (law@cygnus.com)
+
+ * top.c (ffe_decode_option): Turn on flag_move_all_moveables
+ and flag_reduce_all_givs.
+
+Wed Aug 27 08:08:25 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * proj.h: Always #include "config.j" first, to pick up
+ gcc's configuration.
+ * com.c: Change bcopy() and bzero() calls to memcpy()
+ and memset() calls, to make more of g77 ANSI C.
+
+1997-08-26 Dave Love <d.love@dl.ac.uk>
+
+ * Make-lang.in ($(srcdir)/f/runtime/configure,
+ $(srcdir)/f/runtime/libU77/configure): Fix for when srcdir isn't
+ relative.
+
+Tue Aug 26 05:59:21 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * ansify.c (main): Make sure readers of stdout know
+ it's derived from stdin; omit comment text; get source
+ line numbers in future stderr output to be correct.
+
+Tue Aug 26 01:36:01 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ Fix 970825-0.f:
+ * stb.c (ffestb_R5284_): Allow OPEN_PAREN after closing
+ SLASH as well as NAME.
+
+Mon Aug 25 23:48:17 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ Changes to allow g77 docs to be built entirely from scratch
+ using any ANSI C compiler, not requiring GNU C:
+ * Make-lang.in ($(srcdir)/f/intdoc.texi): "Pipe" new
+ location of intrinsic documentation data base, f/intdoc.in,
+ through new `ansify' program to append `\n\' to quoted
+ newlines, into f/intdoc.h0. Do appropriate cleanups. Explain.
+ (f77.mostlyclean): Add f/ansify and f/intdoc.h0 to cleanups.
+ * f/ansify.c: New program.
+ * f/intdoc.c: Fix so it conforms to ANSI C.
+ #include f/intdoc.h0 instead of f/intdoc.h.
+ Avoid some warnings.
+ * f/intdoc.h, f/intdoc.in: Rename the former to the latter; no
+ changes made to the content in this patch!
+ * f/intrin.h (ffeintrinFamily): Fix to conform to ANSI C.
+
+Mon Aug 25 23:24:32 1997 H.J. Lu (hjl@gnu.ai.mit.edu)
+
+ * Make-lang.in ($(srcdir)/f/runtime/configure,
+ $(srcdir)/f/runtime/libU77/configure, f77.mostlyclean,
+ f77.clean, f77.distclean, f77.maintainer-clean, f77.realclean):
+ Handle absolute pathname of $(srcdir).
+ (stmp-f2c.h): New.
+ (include/f2c.h, f/runtime/Makefile, f/runtime/libF77/Makefile,
+ f/runtime/libI77/Makefile, f/runtime/libU77/Makefile): Only
+ depend on stmp-f2c.h.
+ (f77.maintainer-clean): Don't make itself.
+
+Sun Aug 24 17:00:27 1997 Jim Wilson <wilson@cygnus.com>
+
+ * Make-lang.in (f77.install-info): Don't cd into srcdir. Add srcdir
+ to filenames. Use sed to extract base filename for install.
+
+Sun Aug 24 06:52:48 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ Fix up g77 compiler data base for libf2c routines:
+ * com-rt.def (FFECOM_gfrtSIGNAL): Change return type to
+ FTNINT to match actual code.
+
+ * com.c (ffecomRttype_): Replace FFECOM_rttypeINT_ with
+ FFECOM_rttypeFTNINT_.
+ Add and fix up comments.
+ (ffecom_make_gfrt_, ffecom_gfrt_basictype,
+ ffecom_gfrt_kindtype): Replace FFECOM_rttypeINT_ with
+ FFECOM_rttypeFTNINT_; add FFECOM_rttypeDOUBLEREAL_.
+
+Thu Aug 21 13:15:29 1997 Jim Wilson <wilson@cygnus.com>
+
+ * Make-lang.in (f77): Delete f77-runtime.
+ (f77.all.build, f77.all.cross, f77.rest.encap): Add f77-runtime.
+
+Wed Aug 20 17:18:40 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * global.c (ffeglobal_ref_progunit_): It's okay to have
+ a different CHARACTER*n length for a reference if the
+ existing length is for another reference, not a definition.
+
+Wed Aug 20 16:36:59 1997 Jim Wilson <wilson@cygnus.com>
+
+ * intdoc.texi: Readd generated file.
+
+Mon Aug 18 14:27:18 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ Fix 970814-0.f:
+ * global.c (ffeglobal_new_progunit_): Distinguish
+ between previously defined, versus inferred, filewide
+ when it comes to diagnostics.
+
+ Fix 970816-1.f:
+ * global.c (ffeglobal_ref_progunit_): Change BDATA into EXT
+ right at the beginning, so EXTERNAL FOO followed later
+ by SUBROUTINE FOO is not diagnosed.
+
+ Fix 970813-0.f:
+ * com-rt.def (FFECOM_gfrtALARM): Returns `integer', not
+ `void'.
+
+Mon Aug 18 09:01:54 1997 Jeffrey A Law (law@cygnus.com)
+
+ * Makefile.in (F77_OBJS): Re-alphabetize.
+ * Make-lang.in (F77_SRCS): Likewise.
+
+Sun Aug 17 08:35:11 1997 Jeffrey A Law (law@cygnus.com)
+
+ * INSTALL: Rebuilt.
+ * install.texi: Remove "Object File Differences" section. Remove
+ all references to zzz.o failing comparison tests.
+ * version.c, version.h: Renamed from zzz.c and zzz.h. Remove
+ date and time stamps so a 3 stage build reports no differences.
+ * Make-lang.in: Corresponding changes.
+ * Makefile.in: Likewise.
+ * g77.c, parse.c: Likewise.
+
+ * intdoc.texi: Remove generated file from distribution.
+
+Sun Aug 17 03:32:44 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ Fix up problems when virtual memory exhausted:
+ * malloc.c (malloc_new_): Use gcc's xmalloc(), so we
+ print a nicer message when malloc returns no memory.
+ (malloc_resize_): Ditto for xrealloc().
+
+ * Make-lang.in, Makefile.in: Comment out lines containing
+ just formfeeds.
+
+Sat Aug 16 19:41:33 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * com.c (ffecom_make_gfrt_): For rttypeREAL_F2C_, return
+ double_type_node; for rttypeREAL_GNU_, return
+ _real_type_node.
+
+1997-08-13 Dave Love <d.love@dl.ac.uk>
+
+ * config-lang.in (diff_excludes): Add some hints about known
+ problematic platforms.
+
+1997-08-13 Dave Love <d.love@dl.ac.uk>
+
+ * intdoc.h: Document `alarm'.
+
+Tue Aug 12 10:23:02 1997 Jeffrey A Law (law@cygnus.com)
+
+ * config-lang.in: Don't demand the backend patch.
+ * com.c (lang_printable_name): Second argument is now an int. Don't
+ store into the value of the second argument.
+ * top.c (ffe_decode_option): Temporarily disable setting
+ of "Toon" loop options until we figure out how to address
+ them.
+
+Mon Aug 11 23:18:35 1997 Jeffrey A Law (law@cygnus.com)
+
+ * g77-0.5.21-19970811 Imported.
+ This file describes changes to the front end necessary to make
+ it work with egcs.
+
+Mon Aug 11 21:19:22 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * Make-lang.in ($(RUNTIMESTAGESTUFF)): Add
+ f/runtime/stamp-lib.
+
+Mon Aug 11 01:52:03 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * com.c (ffecom_build_complex_constant_): Go with the
+ new build_complex() approach used in gcc-2.8.
+
+ * com.c (ffecom_sym_transform_): Don't set
+ DECL_IN_SYSTEM_HEADER for a tree node that isn't
+ a VAR_DECL, which happens when var is in common!
+
+ * com.c (ffecom_expr_intrinsic_) (case FFEINTRIN_impALARM):
+ No need to test codegen_imp -- there's only one valid here.
+
+ * intrin.def (FFEINTRIN_impALARM): Specify `Status' argument
+ as write-only.
+
+Fri Aug 8 05:40:23 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ Substantial changes to accommodate distinctions among
+ run-time routines that support intrinsics, and between
+ routines that compute and return the same type vs. those
+ that compute one type and return another (or `void'):
+ * com-rt.def: Specify new return type REAL_F2C_ instead
+ of many DOUBLE_, COMPLEX_F2C_ instead of COMPLEX_, and
+ so on.
+ Clear up the *BES* routines "once and for all".
+ * com.c: New return types.
+ (ffecom_convert_narrow_, ffecom_convert_widen_):
+ New functions that are "safe" variants of convert(),
+ to catch errors that ffecom_expr_intrinsic_() now
+ no longer catches.
+ (ffecom_arglist_expr_): Ensure arguments are not
+ converted to narrower types.
+ (ffecom_call_): Ensure return value is not converted
+ to a wider type.
+ (ffecom_char_args_): Use new ffeintrin_gfrt_direct()
+ routine.
+ (ffecom_expr_intrinsic_): Simplify how run-time
+ routine is selected (via `gfrt' only now; lose the
+ redundant `ix' variable).
+ Eliminate the `library' label; any code that doesn't
+ return directly just `break's out now with `gfrt'
+ set appropriately.
+ Set `gfrt' to default choice initially, either a
+ fast direct form or, if not available, a slower
+ indirect-callable form.
+ (ffecom_make_gfrt_): No longer need to do special
+ check for complex; it's built into the new return-type
+ regime.
+ (ffecom_ptr_to_expr): Use new ffeintrin_gfrt_indirect()
+ routine.
+ * intrin.c, intrin.h: `gfrt' field replaced with three fields,
+ so it is easier to provide faster direct-callable and
+ GNU-convention indirect-callable routines in the future.
+ DEFIMP macro adjusted accordingly, along with all its uses.
+ (ffeintrin_gfrt_direct): New function.
+ (ffeintrin_gfrt_indirect): Ditto.
+ (ffeintrin_is_actualarg): If `-fno-f2c' is in effect,
+ require a GNU-callable version of intrinsic instead of
+ an f2c-callable version, so indirect calling is still checked.
+ * intrin.def: Replace one GFRT field with the three new fields,
+ as appropriate for each DEFIMP intrinsic.
+
+ * com.c (ffecom_stabilize_aggregate_,
+ ffecom_convert_to_complex_): Make these `static'.
+
+Thu Aug 7 11:24:34 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ Provide means for front end to determine actual
+ "standard" return type for an intrinsic if it is
+ passed as an actual argument:
+ * com.h, com.c (ffecom_gfrt_basictype,
+ ffecom_gfrt_kindtype): New functions.
+ (ffecom_gfrt_kind_type_): Replaced with new function.
+ All callers updated.
+ (ffecom_make_gfrt_): No longer need do anything
+ with kind type.
+
+ * intrin.c (ffeintrin_basictype, ffeintrin_kindtype):
+ Now returns correct type info for specific intrinsic
+ (based on type of run-time-library implementation).
+
+Wed Aug 6 23:08:46 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * global.c (ffeglobal_ref_progunit_): Don't reset
+ number of arguments just due to new type info,
+ so useful warnings can be issued.
+
+1997-08-06 Dave Love <d.love@dl.ac.uk>
+
+ * intrin.def: Fix IDATE_vxt argument order.
+ * intdoc.h: Likewise.
+
+Thu Jul 31 22:22:03 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * global.c (ffeglobal_proc_ref_arg): If REF/DESCR
+ disagreement, DESCR is CHARACTER, and types disagree,
+ pretend the argsummary agrees so the message ends up
+ being about type disagreement.
+ (ffeglobal_proc_def_arg): Ditto.
+
+ * expr.c (ffeexpr_token_first_rhs_3_): Set info for LABTOK
+ to NONE of everything, to avoid misdiagnosing filewide
+ usage of alternate returns.
+
+Sun Jul 20 23:07:47 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * com.c (ffecom_sym_transform_): If type gets set
+ to error_mark_node, just return that for transformed symbol.
+ (ffecom_member_phase2_): If type gets set to error_mark_node,
+ just return.
+ (ffecom_check_size_overflow_): Add `dummy' argument to
+ flag that type is for a dummy, update all callers.
+
+Sun Jul 13 17:40:53 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ Fix 970712-1.f:
+ * where.c (ffewhere_set_from_track): If start point
+ is too large, just use initial start point. 0.6 should
+ fix all this properly.
+
+ Fix 970712-2.f:
+ * com.c (ffecom_sym_transform_): Preserve error_mark_node for type.
+ (ffecom_type_localvar_): Ditto.
+ (ffecom_sym_transform_): If type is error_mark_node,
+ don't error-check decl size, because back end responds by
+ setting that to an integer 0 instead of error_mark_node.
+ (ffecom_transform_common_): Same as earlier fix to _transform_
+ in that size is checked by dividing BITS_PER_UNIT instead of
+ multiplying.
+ (ffecom_transform_equiv_): Ditto.
+
+ Fix 970712-3.f:
+ * stb.c (ffestb_R10014_): Fix flaky fall-through in error
+ test for FFELEX_typeCONCAT by just replicating the code,
+ and do FFELEX_typeCOLONCOLON while at it.
+
+1997-07-07 Dave Love <d.love@dl.ac.uk>
+
+ * intdoc.h: Add various missing pieces; correct GMTIME, LTIME
+ result ordering.
+
+ * intrin.def, com-rt.def: Add alarm.
+
+ * com.c (ffecom_expr_intrinsic_): Add case for alarm.
+
+Thu Jun 26 04:19:40 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ Fix 970302-3.f:
+ * com.c (ffecom_sym_transform_): For sanity-check compare
+ of gbe size of local variable to g77 expectation,
+ use varasm.c/assemble_variable technique of dividing
+ BITS_PER_UNIT out of gbe info instead of multiplying
+ g77 info up, to avoid crash when size in bytes is very
+ large, and overflows an `int' or similar when multiplied.
+
+ Fix 970626-2.f:
+ * com.c (ffecom_finish_symbol_transform_): Don't bother
+ transforming a dummy argument, to avoid a crash.
+ * ste.c (ffeste_R1227): Don't return a value if the
+ result decl, or its type, is error_mark_node.
+
+ Fix 970626-4.f:
+ * lex.c (ffelex_splice_tokens): `-fdollar-ok' is
+ irrelevant to whether a DOLLAR token should be made
+ from an initial character of `$'.
+
+ Fix 970626-6.f:
+ * stb.c (ffestb_do3_): DO iteration variable is an
+ lhs, not rhs, expression.
+
+ Fix 970626-7.f and 970626-8.f:
+ * expr.c (ffeexpr_cb_comma_i_1_): Set IMPDO expression
+ to have clean info, because undefined rank, for example,
+ caused crash on mangled source on UltraSPARC but not
+ on Alpha for a series of weird reasons.
+ (ffeexpr_cb_close_paren_): If not CLOSE_PAREN, push
+ opANY expression onto stack instead of attempting
+ to mimic what program might have wanted.
+ (ffeexpr_cb_close_paren_): Don't wrap opPAREN around
+ opIMPDO, just warn that it's gratuitous.
+ * bad.def (FFEBAD_IMPDO_PAREN): New warning.
+
+ Fix 970626-9.f:
+ * expr.c (ffeexpr_declare_parenthesized_): Must shut down
+ parsing in kindANY case, otherwise the parsing engine might
+ decide there's an ambiguity.
+ (ffeexpr_token_name_rhs_): Eliminate parentypeSUBROUTINE_
+ case, so we crash right away if it comes through.
+ * st.c, st.h, sta.c, sta.h (ffest_shutdown, ffesta_shutdown):
+ New functions.
+
+Tue Jun 24 19:47:29 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * com.c (ffecom_check_size_overflow_): New function
+ catches some cases of the size of a type getting
+ too large. varasm.c must catch the rest.
+ (ffecom_sym_transform_): Use new function.
+ (ffecom_type_localvar_): Ditto.
+
+Mon Jun 23 01:09:28 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * global.c (ffeglobal_proc_def_arg): Fix comparison
+ of argno to #args.
+ (ffeglobal_proc_ref_arg): Ditto.
+
+ * lang-options.h, top.c: Rename `-fdebug' to `-fxyzzy',
+ since it's an unsupported internals option and some
+ poor user might guess that it does something.
+
+ * bad.def: Make a warning for each filewide diagnostic.
+ Put all filewides together.
+ * com.c (ffecom_sym_transform_): Don't substitute
+ known global tree for global entities when `-fno-globals'.
+ * global.c (ffeglobal_new_progunit_): Don't produce
+ fatal diagnostics about globals when `-fno-globals'.
+ Instead, produce equivalent warning when `-Wglobals'.
+ (ffeglobal_proc_ref_arg): Ditto.
+ (ffeglobal_proc_ref_nargs): Ditto.
+ (ffeglobal_ref_progunit_): Ditto.
+ * lang-options.h, top.c, top.h: New `-fno-globals' option.
+
+Sat Jun 21 12:32:54 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * expr.c (ffeexpr_fulfill_call_): Set array variable
+ to avoid warning about uninitialized variable.
+
+ * Make-lang.in: Get rid of any setting of HOST_* macros,
+ since these will break gcc's build!
+ * makefile: New file to make building derived files
+ easier.
+
+Thu Jun 19 18:19:28 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * g77.c (main): Install Emilio Lopes' patch to support
+ Ratfor, and to fix the printing of the version string
+ to go to stderr, not stdout.
+ * lang-specs.h: Install Emilio Lopes' patch to support
+ Ratfor, and patch the result to support picking up
+ `*f771' from the `specs' file.
+
+Thu Jun 12 14:36:25 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * storag.c (ffestorag_update_init, ffestorag_update_save):
+ Also update parent, in case equivalence processing
+ has already eliminated pointers to it via the
+ local equivalence info.
+
+Tue Jun 10 14:08:26 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * intdoc.c: Add cross-reference to end of description
+ of any generic intrinsic pointing to other intrinsics
+ with the same name.
+
+ Warn about explicit type declaration for intrinsic
+ that disagrees with invocation:
+ * expr.c (ffeexpr_paren_rhs_let_): Preserve type info
+ for intrinsic functions.
+ (ffeexpr_token_funsubstr_): Ditto.
+ * intrin.c (ffeintrin_fulfill_generic): Warn if type
+ info of fulfilled intrinsic invocation disagrees with
+ explicit type info given symbol.
+ (ffeintrin_fulfill_specific): Ditto.
+ * stc.c (ffestc_R1208_item): Preserve type info
+ for intrinsics.
+ (ffestc_R501_item): Ditto.
+
+Mon Jun 9 17:45:44 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * com.c (ffecom_expr_intrinsic_): Fix several of the
+ libU77/libF77-unix handlers to properly convert their
+ arguments.
+
+ * com-rt.def (FFECOM_gfrtFSTAT): Append missing "i" to
+ arg string.
+
+Fri Jun 6 14:37:30 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * com.c (ffecom_expr_intrinsic_): Have a case statement
+ for every intrinsic implementation, so missing ones
+ are caught via gcc warnings.
+ Don't call ffeintrin_codegen_imp anymore.
+ * intrin.c (ffeintrin_fulfill_generic): Remove cg_imp
+ stuff from here.
+ (ffeintrin_codegen_imp): Delete this function.
+ * intrin.def, intrin.h: Remove DEFIMQ stuff from here
+ as well.
+
+Thu Jun 5 13:03:07 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * top.c (ffe_decode_option): New -fbadu77-intrinsics-*
+ options.
+ * top.h: Ditto.
+ * intrin.h: New BADU77 family.
+ * intrin.c (ffeintrin_state_family): Ditto.
+
+ Implement new scheme to track intrinsic names vs. forms:
+ * intrin.c (ffeintrin_fulfill_generic),
+ (ffeintrin_fulfill_specific), (ffeintrin_is_intrinsic),
+ intrin.def: The documented name is now either in the
+ generic info or, if no generic, in the specific info.
+ For a generic, the specific info contains merely the
+ distinguishing form (usually "function" or "subroutine"),
+ used for diagnostics about ambiguous references and
+ in the documentation.
+
+ * intrin.def: Clean up formatting of DEFNAME block.
+ Convert many libU77 intrinsics into generics that
+ support both subroutine and function forms.
+ Put the function forms of side-effect routines into
+ the new BADU77 family.
+ Make MCLOCK and TIME return INTEGER*4 again, and add
+ INTEGER*8 equivalents called MCLOCK8 and TIME8.
+ Fix up more status return values to be written and
+ insist on them being I1 as well.
+ * com.c (ffecom_expr_intrinsic_): Lots of changes to
+ support new libU77 intrinsic interfaces.
+
+Mon Jun 2 00:37:53 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * com.c (ffecom_init_0): Pointer type is now INTEGER(KIND=7),
+ not INTEGER(KIND=0), since we want to reserve KIND=0 for
+ future use.
+
+Thu May 29 14:30:33 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ Fix bugs preventing CTIME(I*4) from working correctly:
+ * com.c (ffecom_char_args_): For FUNCREF case, process
+ args to intrinsic just as they would be in
+ ffecom_expr_intrinsic_.
+ * com-rt.def (FFECOM_gfrtCTIME, FFECOM_gfrtTTYNAM): Fix
+ argument decls to specify `&'.
+
+Wed May 28 22:19:49 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ Fix gratuitous warnings exposed by dophot aka 970528-1:
+ * global.c (ffeglobal_proc_def_arg, ffeglobal_proc_ref_arg):
+ Support distinct function/subroutine arguments instead of
+ just procedures.
+ * global.h: Ditto.
+ * expr.c (ffeexpr_fulfill_call_): A SYMTER with kindNONE
+ also is a procedure (either function or subroutine).
+
+Mon May 26 20:25:31 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * bad.def: Have several lexer diagnostics refer to
+ documentation for people who need more info on what Fortran
+ source code is supposed to look like.
+
+ * expr.c (ffeexpr_reduced_bool1_), bad.def: New diagnostics
+ specific to .NOT. now mention only one operand instead
+ of two.
+
+ * g77.c: Recognize -fsyntax-only, similar to -c etc.
+ (lookup_option): Fix bug that prevented non-`--' options
+ from being recognized.
+
+Sun May 25 04:29:04 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * intrin.def (FFEINTRIN_impCTIME): Accept `I*' expression
+ for STime instead of requiring `I2'.
+
+Tue May 20 16:14:40 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * symbol.c (ffesymbol_reference): All references to
+ standard intrinsics are considered explicit, so as
+ to avoid generating basically useless warnings.
+ * intrin.c, intrin.h (ffeintrin_is_standard): Returns TRUE
+ if intrinsic is standard.
+
+Sun May 18 21:14:59 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * com-rt.def: Changed all external names of the
+ form `"\([a-z0-9]*\)_' to `"G77_\1_0"' so as to
+ allow any name valid as an intrinsic to be used
+ as such and as a user-defined external procedure
+ name or common block as well.
+
+Thu May 8 13:07:10 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * expr.c (ffeexpr_cb_end_notloc_): For %VAL, %REF, and
+ %DESCR, copy arg info into new node.
+
+Mon May 5 14:42:17 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ From Uwe F. Mayer <mayer@math.Vanderbilt.Edu>:
+ * Make-lang.in (g77-cross): Fix typo in g77.c path.
+
+ From Brian McIlwrath <bkm@star.rl.ac.uk>:
+ * lang-specs.h: Have g77 pick up options from a section
+ labeled `*f771' of the `specs' file.
+
+Sat May 3 02:46:08 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * intrin.def (FFEINTRIN_defSIGNAL): Add optional `Status'
+ argument that com.c already expects (per Dave Love).
+
+ More changes to support better tracking of (filewide)
+ globals, in particular, the arguments to procedures:
+ * bad.def (FFEBAD_FILEWIDE_NARGS, FFEBAD_FILEWIDE_NARGS_W,
+ FFEBAD_FILEWIDE_ARG, FFEBAD_FILEWIDE_ARG_W): New diagnostics.
+ * expr.c (ffebad_fulfill_call_): Provide info on each
+ argument to ffeglobal.
+ * global.c, global.h (ffeglobal_proc_def_arg,
+ ffeglobal_proc_def_nargs, ffeglobal_proc_ref_arg,
+ ffeglobal_proc_ref_args): New functions.
+ (ffeglobalArgSummary, ffeglobalArgInfo_): New types.
+
+Tue Apr 29 18:35:41 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ More changes to support better tracking of (filewide)
+ globals:
+ * expr.c (ffeexpr_fulfill_call_): New function.
+ (ffeexpr_token_name_lhs_): Call after building procedure
+ reference expression. Also leave info field for ANY-ized
+ expression alone.
+ (ffeexpr_token_arguments_): Ditto.
+
+Mon Apr 28 20:04:18 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ Changes to support better tracking of (filewide)
+ globals, mainly to avoid crashes due to inlining:
+ * bad.def: Go back to quoting intrinsic names,
+ (FFEBAD_FILEWIDE_DISAGREEMENT, FFEBAD_FILEWIDE_TIFF,
+ FFEBAD_FILEWIDE_TYPE_MISMATCH): New diagnostics.
+ (FFEBAD_INTRINSIC_EXPIMP, FFEBAD_INTRINSIC_GLOBAL): Reword
+ for clarity.
+ * com.c (ffecom_do_entry_, ffecom_start_progunit_,
+ ffecom_sym_transform_): Accommodate new FFEGLOBAL_typeEXT
+ possibility.
+ * expr.c (ffeexpr_sym_lhs_call_, ffeexpr_sym_lhs_extfunc_,
+ ffeexpr_sym_rhs_actualarg_, ffeexpr_declare_parenthesized_,
+ ffeexpr_paren_rhs_let_, ffeexpr_token_funsubstr_):
+ Fill in real kind info instead of leaving NONE where
+ appropriate.
+ Register references to intrinsics and globals with ffesymbol
+ using new ffesymbol_reference function instead of
+ ffesymbol_globalize.
+ * global.c (ffeglobal_type_string_): New array for
+ new diagnostics.
+ * global.h, global.c:
+ Replace ->init mechanism with ->tick mechanism.
+ Move other common-related members into a substructure of
+ a union, so the proc substructure can be introduced
+ to include members related to externals other than commons.
+ Don't complain about ANY-ized globals; ANY-ize globals
+ once they're complained about, in any case where code
+ generation could become a problem.
+ Handle global entries that have NONE type (seen as
+ intrinsics), EXT type (seen as EXTERNAL), and so on.
+ Keep track of kind and type of externals, both via
+ definition and via reference.
+ Diagnose disagreements about kind or type of externals
+ (such as functions).
+ (ffeglobal_ref_intrinsic, ffeglobal_ref_progunit_): New
+ functions.
+ * stc.c (ffestc_R1207_item, ffestc_R1208_item,
+ ffestc_R1219, ffestc_R1226):
+ Call ffesymbol_reference, not ffesymbol_globalize.
+ * stu.c (ffestu_sym_end_transition,
+ ffestu_sym_exec_transition):
+ Call ffesymbol_reference, not ffesymbol_globalize.
+ * symbol.c (ffesymbol_globalize): Removed...
+ (ffesymbol_reference): ...to this new function,
+ which more generally registers references to symbols,
+ globalizes globals, and calls on the ffeglobal module
+ to check globals filewide.
+
+ * global.h, global.c: Rename some macros and functions
+ to more clearly distinguish common from other globals.
+ All callers changed.
+
+ * com.c (ffecom_sym_transform_): Trees describing
+ filewide globals must be allocated on permanent obstack.
+
+ * expr.c (ffeexpr_token_name_lhs_): Don't generate
+ gratuitous diagnostics for FFEINFO_whereANY case.
+
+Thu Apr 17 03:27:18 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * global.c: Add support for flagging intrinsic/global
+ confusion via warnings.
+ * bad.def (FFEBAD_INTRINSIC_EXPIMP,
+ FFEBAD_INTRINSIC_GLOBAL): New diagnostics.
+ * expr.c (ffeexpr_token_funsubstr_): Ditto.
+ (ffeexpr_sym_lhs_call_): Ditto.
+ (ffeexpr_paren_rhs_let_): Ditto.
+ * stc.c (ffestc_R1208_item): Ditto.
+
+Wed Apr 16 22:40:56 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * expr.c (ffeexpr_declare_parenthesized_): INCLUDE
+ context can't be an intrinsic invocation either.
+
+Fri Mar 28 10:43:28 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * expr.c (ffeexpr_token_arguments_): Make sure top of
+ exprstack is operand before dereferencing operand field.
+
+ * lex.c (ffelex_prepare_eos_): Fill up truncated
+ hollerith token, so crash on null ->text field doesn't
+ happen later.
+
+ * stb.c (ffestb_R10014_): If NAMES isn't recognized (or
+ the recognized part is followed in the token by a
+ non-digit), don't try and collect digits, as there
+ might be more than FFEWHERE_indexMAX letters to skip
+ past to do so -- and the code is diagnosed anyway.
+
+Thu Mar 27 00:02:48 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * com.c (ffecom_sym_transform_): Force local
+ adjustable array onto stack.
+
+ * stc.c (ffestc_R547_item_object): Don't actually put
+ the symbol in COMMON if the symbol has already been
+ EQUIVALENCE'd to a different COMMON area.
+
+ * equiv.c (ffeequiv_add): Don't actually do anything
+ if there's a disagreement over which COMMON area is
+ involved.
+
+Tue Mar 25 03:35:19 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * com.c (ffecom_transform_common_): If no explicit init
+ of COMMON area, don't actually init it even though
+ storage area suggests it.
+
+Mon Mar 24 12:10:08 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * lex.c (ffelex_image_char_): Avoid overflowing the
+ column counter itself, as well as the card image.
+
+ * where.c (ffewhere_line_new): Cast ffelex_line_length()
+ to (size_t) so 255 doesn't overflow to 0!
+
+ * stc.c (ffestc_labeldef_notloop_begin_): Don't gratuitously
+ terminate loop before processing statement, so block
+ doesn't disappear out from under EXIT/CYCLE processing.
+ (ffestc_labeldef_notloop_): Has old code from above
+ function, instead of just calling it.
+
+ * expr.c (ffeexpr_cb_comma_i_4_): Don't skip over
+ arbitrary token (such as EOS).
+
+ * com.c (ffecom_init_zero_): Handle RECORD_TYPE and
+ UNION_TYPE so -fno-zeros works with -femulated-complex.
+
+1997-03-12 Dave Love <d.love@dl.ac.uk>
+
+ * intrin.def: New intrinsics INT2, INT8, CPU_TIME. Fix AND, OR,
+ XOR. [Integrated by burley, AND/OR/XOR already fixed, INT8
+ implementation changed/fixed.]
+
+Wed Mar 12 10:40:08 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * Make-lang.in ($(srcdir)/f/intdoc.texi): Simplify rules
+ so building f/intdoc is not always necessary; remove
+ f/intdoc after running it if it is built.
+
+Tue Mar 11 23:42:00 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * intrin.def (FFEINTRIN_impAND, FFEINTRIN_impOR,
+ FFEINTRIN_impXOR): Use the IAND, IOR, and IEOR implementations
+ of these, instead of crashing in ffecom_expr_intrinsic_
+ or adding case labels there.
+
+Mon Mar 10 22:51:23 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * intdoc.c: Fix so any C compiler can compile this.
+
+Fri Feb 28 13:16:50 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * Version 0.5.20 released.
+
+Fri Feb 28 01:45:25 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * Make-lang.in (RUNTIMESTAGESTUFF, LIBU77STAGESTUFF):
+ Move some files incorrectly in the former to the latter,
+ and add another file or two to the latter.
+
+ New meanings for (KIND=n), and new denotations in the
+ little language describing intrinsics:
+ * com.c (ffecom_init_0): Assign new meanings.
+ * intdoc.c: Document new meanings.
+ Support the new denotations.
+ * intrin.c: Employ new meanings, mapping them to internal
+ values (which are the same as they ever were for now).
+ Support the new denotations.
+ * intrin.def: Switch DEFIMP table to the new denotations.
+
+ * intrin.c (ffeintrin_check_): Fix bug that was leaving
+ LOC() and %LOC() returning INTEGER*4 on systems where
+ it should return INTEGER*8.
+
+ * type.c: Canonicalize function definitions, for etags
+ and such.
+
+Wed Feb 26 20:43:03 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * com.c (ffecom_init_0): Choose INTEGER(KIND=n) types,
+ where n is 2, 3, and 4, according to the new docs
+ instead of according to the old C correspondences
+ (which seem less useful at this point).
+
+ * equiv.c (ffeequiv_destroy_): New function.
+ (ffeequiv_layout_local_): Use this new function
+ whenever the laying out of a local equivalence chain
+ is aborted for any reason.
+ Otherwise ensure that symbols no longer reference
+ the stale ffeequiv entries that result when they
+ are killed off in this procedure.
+ Also, the rooted symbol is one that has storage,
+ it really is irrelevant whether it has an equiv entry
+ at this point (though the code to remove the equiv
+ entry was put in at the end, just in case).
+ (ffeequiv_kill): When doing internal checks, make
+ sure the victim isn't named by any symbols it points
+ to. Not as complete a check as looking through the
+ entire symbol table (which does matter, since some
+ code in equiv.c used to remove symbols from the lists
+ for an ffeequiv victim but not remove that victim as the
+ symbol's equiv info), but this check did find some
+ real bugs in the code (that were fixed).
+
+Mon Feb 24 16:42:13 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * com.c (ffecom_expr_intrinsic_): Fix a couple of
+ warnings about uninitialized variables.
+ * intrin.c (ffeintrin_check_): Ditto, but there were
+ a couple of _real_ uninitialized-variable _bugs_ here!
+ (ffeintrin_fulfill_specific): Ditto, no real bug here.
+
+Sun Feb 23 15:01:20 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ Clean up diagnostics (especially about intrinsics):
+ * bad.def (FFEBAD_UNIMPL_STMT): Remove.
+ (FFEBAD_INTRINSIC_*, FFEBAD_NEED_INTRINSIC): Clean these
+ up so they're friendlier.
+ (FFEBAD_INTRINSIC_CMPAMBIG): New.
+ * intrin.c (ffeintrin_fulfill_generic,
+ ffeintrin_fulfill_specific, ffeintrin_is_intrinsic):
+ Always choose
+ generic or specific name text (which is for doc purposes
+ anyway) over implementation name text (which is for
+ internal use).
+ * intrin.def: Use more descriptive name texts for generics
+ and specifics in cases where the names themselves are not
+ enough (e.g. IDATE, which has two forms).
+
+ Fix some intrinsic mappings:
+ * intrin.def (FFEINTRIN_specIDINT, FFEINTRIN_specAND,
+ FFEINTRIN_specDFLOAT, FFEINTRIN_specDREAL, FFEINTRIN_specOR,
+ FFEINTRIN_specXOR): Now have their own implementations,
+ instead of borrowing from others.
+ (FFEINTRIN_specAJMAX0, FFEINTRIN_specAJMIN0, FFEINTRIN_specBJTEST,
+ FFEINTRIN_specDFLOTJ, FFEINTRIN_specFLOATJ, FFEINTRIN_specJIABS,
+ FFEINTRIN_specJIAND, FFEINTRIN_specJIBCLR, FFEINTRIN_specJIBITS,
+ FFEINTRIN_specJIBSET, FFEINTRIN_specJIDIM, FFEINTRIN_specJIDINT,
+ FFEINTRIN_specJIDNNT, FFEINTRIN_specJIEOR, FFEINTRIN_specJIFIX,
+ FFEINTRIN_specJINT, FFEINTRIN_specJIOR, FFEINTRIN_specJISHFT,
+ FFEINTRIN_specJISHFTC, FFEINTRIN_specJISIN, FFEINTRIN_specJMAX0,
+ FFEINTRIN_specJMAX1, FFEINTRIN_specJMIN0, FFEINTRIN_specJMIN1,
+ FFEINTRIN_specJMOD, FFEINTRIN_specJNINT, FFEINTRIN_specJNOT,):
+ Turn these implementations off, since it's not clear
+ just what types they expect in the context of portable Fortran.
+ (DFLOAT): Now in FVZ family, since f2c supports them
+
+ Support intrinsic inquiry functions (BIT_SIZE, LEN):
+ * intrin.c: Allow `i' in <arg_extra>.
+ * intrin.def (FFEINTRIN_impBIT_SIZE, FFEINTRIN_impLEN):
+ Mark args with `i'.
+
+Sat Feb 22 13:34:09 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ Only warn, don't error, for reference to unimplemented
+ intrinsic:
+ * bad.def (FFEBAD_INTRINSIC_UNIMPLW): Warning version
+ of _UNIMPL.
+ * intrin.c (ffeintrin_is_intrinsic): Use new warning
+ version of _UNIMPL (FFEBAD_INTRINSIC_UNIMPLW).
+
+ Complain about REAL(Z) and AIMAG(Z) (Z is DOUBLE COMPLEX):
+ * bad.def (FFEBAD_INTRINSIC_CMPAMBIG): New diagnostic.
+ * expr.c: Needed #include "intrin.h" anyway.
+ (ffeexpr_token_intrincheck_): New function handles delayed
+ diagnostic for "REAL(REAL(expr)" if next token isn't ")".
+ (ffeexpr_token_arguments_): Do most of the actual checking here.
+ * intrin.h, intrin.c (ffeintrin_fulfill_specific): New
+ argument, check_intrin, to tell caller that intrin is REAL(Z)
+ or AIMAG(Z). All callers updated, mostly to pass NULL in
+ for this.
+ (ffeintrin_check_): Also has new arg check_intrin for same
+ purpose. All callers updated the same way.
+ * intrin.def (FFEINTRIN_impAIMAG): Change return type
+ from "R0" to "RC", to accommodate f2c (and perhaps other
+ non-F90 F77 compilers).
+ * top.h, top.c: New option -fugly-complex.
+
+ New GNU intrinsics REALPART, IMAGPART, and COMPLEX:
+ * com.c (ffecom_expr_intrinsic_): Implement impCOMPLEX
+ and impREALPART here. (specIMAGPART => specAIMAG.)
+ * intrin.def: Add the intrinsics here.
+
+ Rename implementations of VXTIDATE and VXTTIME to IDATEVXT
+ and TIMEVXT, so they sort more consistently:
+ * com.c (ffecom_expr_intrinsic_):
+ * intrin.def:
+
+ Delete intrinsic group `dcp', add `gnu', etc.:
+ * intrin.c (ffeintrin_state_family): FFEINTRIN_familyGNU
+ replaces FFEINTRIN_familyDCP, and gets state from `gnu'
+ group.
+ Get rid of FFEINTRIN_familyF2Z, nobody needs it.
+ Move FFEINTRIN_specDCMPLX from DCP family to FVZ family,
+ as f2c has it.
+ Move FFEINTRIN_specDFLOAT from F2C family to FVZ family.
+ (FFEINTRIN_specZABS, FFEINTRIN_specZCOS, FFEINTRIN_specZEXP,
+ FFEINTRIN_specZLOG, FFEINTRIN_specZSIN, FFEINTRIN_specZSQRT):
+ Move these from F2Z family to F2C family.
+ * intrin.h (FFEINTRIN_familyF2Z, FFEINTRIN_familyDCP): Remove.
+ (FFEINTRIN_familyGNU): Add.
+ * top.h, top.c: Replace `dcp' with `gnu'.
+
+ * com.c (ffecom_expr_intrinsic_): Clean up by collecting
+ simple conversions into one nice, conceptual place.
+ Fix up some intrinsic subroutines (MVBITS, KILL, UMASK) to
+ properly push and pop call temps, to avoid wasting temp
+ registers.
+
+ * g77.c (doit): Toon says variables should be defined
+ before being referenced. Spoilsport.
+
+ * intrin.c (ffeintrin_check_): Now Dave's worried about
+ warnings about uninitialized variables. Okay, so for
+ basic return values 'g' and 's', they _were_
+ uninitialized -- is determinism really _that_ useful?
+
+ * intrin.def (FFEINTRIN_impFGETC): Fix STATUS argument
+ so that it is INTENT(OUT) instead of INTENT(IN).
+
+1997-02-21 Dave Love <d.love@dl.ac.uk>
+
+ * intrin.def, com.c: Support Sun-type `short' and `long'
+ intrinsics. Perhaps should also do Microcruft-style `int2'.
+
+Thu Feb 20 15:16:53 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * com.c (ffecom_expr_intrinsic_): Clean up indentation.
+ Support SECONDSUBR intrinsic implementation.
+ Rename SECOND to SECONDFUNC for direct support via library.
+
+ * g77.c: Fix to return proper status value to shell,
+ by obtaining it from processes it spawns.
+
+ * intdoc.c: Fix minor typo.
+
+ * intrin.def: Turn SECOND into generic that maps into
+ function and subroutine forms.
+
+ * intrin.def: Make FLOAT and SNGL into specific intrinsics.
+
+ * intrin.def, intrin.h: Change the way DEFGEN and DEFSPEC
+ macros work, to save on verbage.
+
+Mon Feb 17 02:08:04 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ New subsystem to automatically generate documentation
+ on intrinsics:
+ * Make-lang.in ($(srcdir)/f/g77.info,
+ $(srcdir)/f/g77.dvi): Move g77 doc rules around.
+ Add to g77 doc rules the new subsystem.
+ (f77.mostlyclean, f77.maintainer-clean): Also clean up
+ after new doc subsystem.
+ * intdoc.c, intdoc.h: New doc subsystem code.
+ * intrin.h [FFEINTRIN_DOC]: When 1, don't pull in
+ stuff not needed by doc subsystem.
+
+ Improve on intrinsics mechanism to both be more
+ self-documenting and to catch more user errors:
+ * intrin.c (ffeintrin_check_): Recognize new arg-len
+ and arg-rank information, and check it.
+ Move goto and signal indicators to the basic type.
+ Permit reference to arbitrary argument number, not
+ just first argument (for BESJN and BESYN).
+ (ffeintrin_init_0): Check and accept new notations.
+ * intrin.c, intrin.def: Value in COL now identifies
+ arguments starting with number 0 being the first.
+
+ Some minor intrinsics cleanups (resulting from doc work):
+ * com.c (ffecom_expr_intrinsic_): Implement FLUSH
+ directly once again, handle its optional argument,
+ so it need not be a generic (awkward to handle in docs).
+ * intrin.def (BESJ0, BESJ1, BESJN, BESY0, BESY1, BESYN,
+ CHDIR, CHMOD, CTIME, DBESJ0, DBESJ1, DBESJN, DBESY0,
+ DBESY1, DBESYN, DDIM, ETIME, FGETC, FNUM, FPUTC, FSTAT,
+ GERROR, GETCWD, GETGID, GETLOG, GETPID, GETUID, GMTIME,
+ HOSTNM, IDATE, IERRNO, IIDINT, IRAND, ISATTY, ITIME, JIDINT,
+ LNBLNK, LSTAT, LTIME, MCLOCK, PERROR, SRAND, SYMLNK, TTYNAM,
+ UMASK): Change capitalization of initcaps (official) name
+ to be consistent with Burley's somewhat arbitrary rules.
+ (BESJN, BESYN): These have return arguments of same type
+ as their _second_ argument.
+ (FLUSH): Now a specific, not generic, intrinsic, with one
+ optional argument.
+ (FLUSH1): Eliminated.
+ Add arg-len and arg-rank info to several intrinsics.
+ (ITIME): Change argument type from REAL to INTEGER.
+
+Tue Feb 11 14:04:42 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * Make-lang.in (f771): Invocation of Makefile now done
+ with $(srcdir)=gcc to go along with $(VPATH)=gcc.
+ ($(srcdir)/f/runtime/configure,
+ $(srcdir)/f/runtime/libU77/configure): Break these out
+ so spurious triggers of this rule don't happen (as when
+ configure.in is more recent than libU77/configure).
+ (f77.rebuilt): Distinguish source versus build files,
+ so this target can be invoked from build directory and
+ still work.
+ * Makefile.in: This now expects $(srcdir) to be the gcc
+ source directory, not gcc/f, to agree with $(VPATH).
+ Accordingly, $(INCLUDES) has been fixed, various cruft
+ removed, the removal of f771 has been fixed to remove
+ the _real_ f771 (not the one in gcc's parent directory),
+ and so on.
+
+ * lex.c: Part of ffelex_finish_statement_() now done
+ by new function ffelex_prepare_eos_(), so that, in one
+ popular case, the EOS can be prepared while the pointer
+ is at the end of the non-continued line instead of the
+ end of the line that marks no continuation. This improves
+ the appearance of diagnostics substantially.
+
+Mon Feb 10 12:44:06 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * Make-lang.in: runtime Makefile's, and include/f2c.h,
+ also depend on f/runtime/configure and f/runtime/libU77/configure.
+
+ Fix various libU77 routines:
+ * com-rt.def (FFECOM_gfrtCTIME, FFECOM_gfrtMCLOCK,
+ FFECOM_gfrtTIME): These now use INTEGER*8 for time values,
+ for compatibility with systems like Alpha.
+ (FFECOM_gfrtSYSTEM_CLOCK, FFECOM_gfrtTTYNAM): Delete incorrect
+ trailing underscore in routine names.
+ * intrin.c, intrin.def: Support INTEGER*8 return values and
+ arguments ('4'). Change FFEINTRIN_impCTIME, FFEINTRIN_impMCLOCK,
+ and FFEINTRIN_impTIME accordingly.
+ (ffeintrin_is_intrinsic): Don't give caller a clue about
+ form of intrinsic -- shouldn't be needed at this point.
+
+ Cope with generic intrinsics that are subroutines and functions:
+ * com.c (ffecom_finish_symbol_transform_, ffecom_expr_transform_):
+ Don't transform an intrinsic that is not known to be a subroutine
+ or a function. (Maybe someday have to avoid transforming
+ any intrinsic with an undecided or unknown implementation.)
+ * expr.c (ffeexpr_declare_unadorned_,
+ ffeexpr_declare_parenthesized_): Ok to invoke generic
+ intrinsic that has at least one subroutine form as a
+ subroutine.
+ Ok to pass intrinsic as actual arg if it has a known specific
+ intrinsic form that is valid as actual arg.
+ (ffeexpr_declare_parenthesized_): An unknown kind of
+ intrinsic has a paren_type chosen based on context.
+ (ffeexpr_token_arguments_): Build funcref/subrref based
+ on context, not on kind of procedure being called.
+ * intrin.h, intrin.c (ffeintrin_is_intrinsic): Undo changes of
+ Tue Feb 4 23:12:04 1997 by me, change all callers to leave
+ intrinsics as FFEINFO_kindNONE at this point. (Some callers
+ also had unused variables deleted as a result.)
+
+ Enable all intrinsic groups (especially f90 and vxt):
+ * target.h (FFETARGET_defaultSTATE_DCP, FFETARGET_defaultSTATE_F2C,
+ FFETARGET_defaultSTATE_F90, FFETARGET_defaultSTATE_MIL,
+ FFETARGET_defaultSTATE_UNIX, FFETARGET_defaultSTATE_VXT):
+ Delete these macros, let top.c set them directly.
+ * top.c (ffeintrinsic_state_dcp_, ffe_intrinsic_state_f2c_,
+ ffe_intrinsic_state_f90_, ffe_intrinsic_state_mil_,
+ ffe_intrinsic_state_unix_, ffe_intrinsic_state_vxt_):
+ Enable all these directly.
+
+Sat Feb 8 03:21:50 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * g77.c: Incorporate recent changes to ../gcc.c.
+ For version magic (e.g. `g77 -v'), instead of compiling
+ /dev/null, write, compile, run, and then delete a small
+ program that prints the version numbers of the three
+ components of libf2c (libF77, libI77, and libU77),
+ so we get this info with bug reports.
+ Also, this change reduces the chances of accidentally
+ linking to an old (complex-alias-problem) libf2c.
+ Fix `-L' so the argument is expected in `-Larg'.
+
+ * com.h (FFECOM_f2cLONGINT): For INTEGER*8 support in f2c.h,
+ dynamically determine proper type here, instead of
+ assuming `long long int' is correct.
+
+Tue Feb 4 23:12:04 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ Add libU77 library from Dave Love <d.love@dl.ac.uk>:
+ * Make-lang.in (f77-runtime): Depend on new Makefile.
+ (f/runtime/libU77/Makefile): New rule.
+ Also configure libU77.
+ ($(srcdir)/f/runtime/configure: Use Makefile.in,
+ so configuration doesn't have to have happened.
+ (f77.mostlyclean, f77.clean, f77.distclean,
+ f77.maintainer-clean): Some fixups here, but more work
+ needed.
+ (RUNTIMESTAGESTUFF): Add libU77's config.status.
+ (LIBU77STAGESTUFF, f77.stage1, f77.stage2, f77.stage3,
+ f77.stage4): New macro, appropriate uses added.
+ * com-rt.def: Add libU77 procedures.
+ * com.c (ffecom_f2c_ptr_to_integer_type_node,
+ ffecom_f2c_ptr_to_real_type_node): New type nodes.
+ (FFECOM_rttypeCHARACTER_): New type of run-time function.
+ (ffecom_char_args_): Handle CHARACTER*n intrinsics
+ where n != 1 here, instead of in ffecom_expr_intrinsic_.
+ (ffecom_expr_intrinsic_): New code to handle new
+ intrinsics.
+ In particular, change how FFEINTRIN_impFLUSH is handled.
+ (ffecom_make_gfrt_): Handle new type of run-time function.
+ (ffecom_init_0): Initialize new type nodes.
+ * config-lang.in: New libU77 directory.
+ * intrin.h, intrin.c (ffeintrin_is_intrinsic): Handle
+ potential generic for subroutine _and_ function
+ specifics via two new arguments. All callers changed.
+ Properly ignore deleted/disabled intrinsics in resolving
+ generics.
+ (ffeintrin_check_, ffeintrin_init_0): Handle CHARACTER intrinsics of (*)
+ length.
+ * intrin.def: Permission granted by FSF to place this in
+ public domain, which will allow it to serve as source
+ for both g77 program and its documentation.
+ Add libU77 intrinsics.
+ (FLUSH): Now a generic, not specific, intrinsic.
+ (DEFIMP): Now support return modifier for CHARACTER intrinsics.
+
+ * com-rt.def (FFECOM_gfrtDIM, FFECOM_gfrtERF,
+ FFECOM_gfrtERFC, FFECOM_gfrtEXP, FFECOM_gfrtSIGN,
+ FFECOM_gfrtSIN, FFECOM_gfrtSINH, FFECOM_gfrtTAN,
+ FFECOM_gfrtTANH, FFECOM_gfrtPOW_RI): Change "&r" to "&f".
+
+Sat Feb 1 12:15:09 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * Version 0.5.19.1 released.
+
+ * com.c (ffecom_expr_, ffecom_expr_intrinsic_,
+ ffecom_tree_divide_): FFECOM_gfrtPOW_ZI,
+ FFECOM_gfrtCONJG, FFECOM_gfrtDCONJG,
+ FFECOM_gfrtCCOS, FFECOM_gfrtCDCOS,
+ FFECOM_gfrtCLOG, FFECOM_gfrtCDLOG,
+ FFECOM_gfrtCSIN, FFECOM_gfrtCDSIN,
+ FFECOM_gfrtCSQRT, FFECOM_gfrtCDSQRT,
+ FFECOM_gfrtDIV_CC, FFECOM_gfrtDIV_ZZ: These all require
+ result to _not_ overlap one or more inputs.
+
+Sat Feb 1 00:25:55 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * com.c (ffecom_init_0): Do internal checks only if
+ -fset-g77-defaults not specified.
+
+ Fix %LOC(), LOC() to return sufficiently wide type:
+ * com.h, com.c (ffecom_pointer_kind_, ffecom_label_kind_,
+ ffecom_pointer_kind(), ffecom_label_kind()): New globals
+ and accessor macros hold kind for integer pointers on target
+ machine.
+ (ffecom_init_0): Determine narrowest INTEGER type that
+ can hold a pointer (usually INTEGER*4 or INTEGER*8),
+ store it in ffecom_pointer_kind_, etc.
+ * expr.c (ffeexpr_cb_end_loc_): Use right type for %LOC().
+ * intrin.c (ffeintrin_check_, ffeintrin_init_0): Support
+ new 'p' kind for type of intrinsic.
+ * intrin.def (FFEINTRIN_impLOC): Returns "Ip" instead of "I1",
+ so LOC() type is correct for target machine.
+
+ Support -fugly-assign:
+ * lang-options.h, top.h, top.c (ffe_decode_option):
+ Accept -fugly-assign and -fno-ugly-assign.
+ * com.c (ffecom_expr_): Handle -fugly-assign.
+ * expr.c (ffeexpr_finished_): Check right type for ASSIGN
+ contexts.
+
+Fri Jan 31 14:30:00 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ Remove last vestiges of -fvxt-not-f90:
+ * stb.c (ffestb_R10012_, ffestb_R10014_, ffestb_V0201_):
+ top.c, top.h:
+
+Fri Jan 31 02:13:54 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * top.c (ffe_decode_option): Warn if -fugly is specified,
+ it'll go away soon.
+
+ * symbol.h: No need to #include "bad.h".
+
+ Reorganize features from -fvxt-not-f90 to -fvxt:
+ * lang-options.h, top.h, top.c:
+ Accept -fvxt and -fno-vxt, but not -fvxt-not-f90 or -ff90-not-vxt.
+ Warn if the latter two are used.
+ * expr.c (ffeexpr_nil_rhs_): Double-quote means octal constant.
+ (ffeexpr_token_rhs_): Double-quote means octal constant.
+ * target.h (FFETARGET_defaultIS_VXT_NOT_90): Delete macro
+ definition, no longer needed.
+
+ Make some -ff90 features the default:
+ * data.c (ffedata_value): DATA implies SAVE.
+ * src.h (ffesrc_is_name_noninit): Underscores always okay.
+
+ Fix up some more #error directives by quoting their text:
+ * bld.c (ffebld_constant_is_zero):
+ * target.h:
+
+Sat Jan 18 18:22:09 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * g77.c (lookup_option, main): Recognize `-Xlinker',
+ `-Wl,', `-l', `-L', `--library-directory', `-o',
+ `--output'.
+ (lookup_option): Don't depend on SWITCH_TAKES_ARG
+ being correct, it might or might not have `-x' in
+ it depending on host.
+ Return NULL argument if it would be an empty string.
+ (main): If no input files (by gcc.c's definition)
+ but `-o' or `--output' specified, produce diagnostic
+ to avoid overwriting output via gcc.
+ Recognize C++ `+e' options.
+ Treat -L as another non-magical option (like -B).
+ Don't append_arg `-x' twice.
+
+Fri Jan 10 23:36:00 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * top.c [BUILT_FOR_270] (ffe_decode_option): Make
+ -fargument-noalias-global the default.
+
+Fri Jan 10 07:42:27 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ Enable inlining of previously-compiled program units:
+ * com.c (ffecom_do_entry_, ffecom_start_progunit_):
+ Register new public function in ffeglobal database.
+ (ffecom_sym_transform_): Any GLOBAL or potentially GLOBAL
+ symbol should be looked up in ffeglobal database and
+ that tree node used, if found. That way, gcc knows
+ the references are to those earlier definitions, so it
+ can emit shorter branches/calls, inline, etc.
+ (ffecom_transform_common_): Minor change for clarity.
+ * expr.c (ffeexpr_sym-lhs_call_, ffeexpr_sym_lhs_extfunc_,
+ ffeexpr_sym_rhs_actualarg_, ffeexpr_paren_rhs_let_,
+ ffeexpr_token_funsubstr_): Globalize symbol as needed.
+ * global.c (ffeglobal_promoted): New function to look up
+ existing local symbol in ffeglobal database.
+ * global.h: Declare new function.
+ * name.h (ffename_token): New macro, plus alphabetize.
+ * stc.c (ffestc_R1207_item): Globalize EXTERNAL symbol.
+ * stu.c (ffestu_sym_end_transition, ffestu_sym_exec_transition):
+ Globalize symbol as needed.
+ * symbol.h, symbol.c (ffesymbol_globalize): New function.
+
+Thu Jan 9 14:20:00 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * ste.c (ffeste_R809): Produce a diagnostic for SELECT CASE
+ on CHARACTER type, instead of crashing.
+
+Thu Jan 9 00:52:45 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * stc.c (ffestc_order_entry_, ffestc_order_format_,
+ ffestc_R1226): Allow ENTRY and FORMAT before IMPLICIT
+ NONE, by having them transition only to state 1 instead
+ of state 2 (which is disallowed by IMPLICIT NONE).
+
+Mon Jan 6 22:44:53 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ Fix AXP bug found by Rick Niles (961201-1.f):
+ * com.c (ffecom_init_0): Undo my 1996-05-14 change, as
+ it is incorrect and prevented easily finding this bug.
+ * target.h [__alpha__] (ffetargetReal1, ffetargetReal2):
+ Use int instead of long.
+ (ffetarget_cvt_r1_to_rv_, ffetarget_cvt_rv_to_r1_,
+ ffetarget_cvt_r2_to_rv_, ffetarget_cvt_rv_to_r2_):
+ New functions that intercede for callers of
+ REAL_VALUE_(TO|UNTO)_TARGET_(SINGLE|DOUBLE).
+ All callers changed, and damaging casts to (long *) removed.
+
+Sun Jan 5 03:26:11 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * Make-lang.in (g77, g77-cross): Depend on both g77.c and
+ zzz.c, in $(srcdir)/f/.
+
+ Better design for -fugly-assumed:
+ * stc.c (ffestc_R501_item, ffestc_R524_item,
+ ffestc_R547_item_object): Pass new is_ugly_assumed flag.
+ * stt.c, stt.h (ffestt_dimlist_as_expr,
+ ffestt_dimlist_type): New is_ugly_assumed flag now
+ controls whether "1" is treated as "*".
+ Don't treat "2-1" or other collapsed constants as "*".
+
+Sat Jan 4 15:26:22 1997 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * stb.c (ffestb_R10012_): Don't confirm on FORMAT(A,)
+ or even FORMAT(A,,B), as R1229 only warns about the
+ former currently, and this seems reasonable.
+
+ Improvements to diagnostics:
+ * sta.c (ffesta_second_): Don't add any ffestb parsers
+ unless they're specifically called for.
+ Set up ffesta_tokens[0] before calling ffestc_exec_transition,
+ else stale info might get used.
+ (ffesta_save_): Do a better job picking which parser to run
+ after running all parsers with no confirmed possibles.
+ (FFESTA_maxPOSSIBLES_): Decrease from 100 now that so few
+ possibles are ever on the list at a given time.
+ (struct _ffesta_possible): Add named attribute.
+ (ffesta_add_possible_exec_, ffesta_add_possible_nonexec_):
+ Make these into macros that call a single function that now
+ sets the named attribute.
+ (ffesta_add_possible_unnamed_exec_,
+ ffeseta_add_possible_unnamed_nonexec_): New macros.
+ (ffesta_second_): Designate unnamed possibles as
+ appropriate.
+ * stb.c (ffestb_R1229, ffestb_R12291_): Use more general
+ diagnostic, so things like "POINTER (FOO, BAR)" are
+ diagnosed as unrecognized statements, not invalid statement
+ functions.
+ * stb.h, stb.c (ffestb_unimplemented): Remove function.
+
+1996-12-30 Dave Love <d.love@dl.ac.uk>
+
+ * com.c: #include libU77/config.h
+ (ffecom_f2c_ptr_to_integer_type_node,
+ ffecom_f2c_ptr_to_integer_type_node): New variables.
+ (ffecom_init_0): Use them.
+ (ffecom_expr_intrinsic_): Many news cases for libU77 intrinsics.
+
+ * com-rt.def: New definitions for libU77.
+ * intrin.def: Likewise. Also correct ftell arg spec.
+
+ * Makefile.in (f/runtime/libU77/config.h): New target for com.c
+ dependency.
+ * Make-lang.in (f771): Depend on f/runtime/Makefile for the above.
+
+Sat Dec 28 12:28:29 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * stt.c (ffestt_dimlist_type): Treat ([...,]1) in dimlist
+ as ([...,]*) if -fugly-assumed, so assumed-size array
+ detected early enough.
+
+Thu Dec 19 14:01:57 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * target.h (FFETARGET_REAL_VALUE_FROM_INT_): Conditionalize
+ definition on BUILT_FOR_280, not BUILT_WITH_280, since
+ the name of the macro was (properly) changed since 0.5.19.
+
+ Fix warnings/errors resulting from ffetargetOffset becoming
+ `long long int' instead of `unsigned long' as of 0.5.19,
+ while ffebitCount remains `unsigned long':
+ * bld.c (ffebld_constantarray_dump): Avoid warnings by
+ using loop var of appropriate type, and using casts.
+ * com.c (ffecom_expr_): Use right type for loop var.
+ (ffecom_sym_transform_, ffecom_transform_equiv_):
+ Cast to right type in assertions.
+ * data.c (ffedata_gather_, ffedata_value_): Cast to right
+ type in assertions and comparisons.
+
+Wed Dec 18 12:07:11 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ Patch from Alexandre Oliva <oliva@dcc.unicamp.br>:
+ * Makefile.in (all.indirect): Don't pass -bbigtoc option
+ to GNU ld.
+
+ Cope with new versions of gcc:
+ * com.h (BUILT_FOR_280): New macro.
+ * com.c (ffecom_ptr_to_expr): Conditionalize test of
+ OFFSET_REF.
+ (ffecom_build_complex_constant_): Conditionalize calling
+ sequence for build_complex.
+
+Sat Dec 7 07:15:17 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * Version 0.5.19 released.
+
+Fri Dec 6 12:23:55 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * g77.c: Default to assuming "f77" is in $LANGUAGES, since
+ the LANGUAGE_F77 macro isn't defined by anyone anymore (but
+ might as well leave the no-f77 code in just in case).
+ * Make-lang.in (g77, g77-cross): Don't define LANGUAGE_F77
+ anymore.
+
+1996-12-06 Dave Love <d.love@dl.ac.uk>
+
+ * Make-lang.in (g77, g77-cross): Revert to building `g77' or not
+ conditional on `f77' in LANGUAGES.
+
+Wed Dec 4 13:08:44 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * Make-lang.in (g77, g77-cross): No libs or lib dependencies
+ in case where "f77" is not in $LANGUAGES.
+
+ * lex.c (ffelex_image_char_, ffelex_file_fixed,
+ ffelex_file_free): Fixes to properly handle lines with
+ null character, and too-long lines as well.
+
+ * lex.c: Call ffebad_start_msg_lex instead of
+ ffebad_start_msg throughout.
+
+Sun Dec 1 21:19:55 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ Fix-up for 1996-11-25 changes:
+ * com.c (ffecom_member_phase2_): Subtract out 0 offset for
+ elegance and consistency with EQUIVALENCE aggregates.
+ (ffecom_sym_transform_): Ditto for LOCAL/COMMON, and
+ ensure we get the same parent storage area.
+ * data.c (ffedata_gather_, ffedata_value_): Subtract out
+ aggregate offset.
+
+Wed Nov 27 13:55:57 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * proj.h: Quote the text of the #error message, to avoid
+ strange-looking diagnostics from non-gcc ANSI compilers.
+
+ * top.c: Make -fno-debug-kludge the default.
+
+Mon Nov 25 20:13:45 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ Provide more info on EQUIVALENCE mismatches:
+ * bad.def (FFEBAD_EQUIV_MISMATCH): More detailed message.
+ * equiv.c (ffeequiv_layout_local_, ffeequiv_layout_cblock):
+ More details for FFEBAD_EQUIV_MISMATCH.
+
+ Fix problem with EQUIVALENCE handling:
+ * equiv.c (ffeequiv_layout_local_): Redesign algorithm --
+ old one was broken, resulting in rejection of good code.
+ (ffeequiv_offset_): Add argument, change callers.
+ Clean up the code, fix up the (probably unused) negative-value
+ case for SYMTER.
+ * com.c (ffecom_sym_transform_): For local EQUIVALENCE
+ member, subtract out aggregate offset (which is <= 0).
+
+Thu Nov 21 12:44:56 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ Change type of ffetargetOffset from `unsigned long' to `long long':
+ * bld.c (ffebld_constantarray_dump): Change printf formats.
+ * storag.c (ffestorag_dump): Ditto.
+ * symbol.c (ffesymbol_report): Ditto.
+ * target.h (ffetargetOffset_f): Ditto and change type itself.
+
+ Handle situation where list of languages does not include f77:
+ * Make-lang.in: Define LANGUAGE_F77 to 1 only if `f77' is in
+ the $LANGUAGES macro for the build.
+ * g77.c: Compile to a (nearly) no-op program if LANGUAGE_F77
+ is not defined to 1.
+
+ Fixes to delay confirmation of READ, WRITE, and GOTO statements
+ so the corresponding assignments to same-named CHAR*(*) arrays
+ work:
+ * stb.c (ffestb_R90915_, ffestb_91014_): New functions.
+ (ffestb_goto3_, ffestb_goto5_): Move confirmation from 3 to 5
+ for the OPEN_PAREN case.
+ (ffestb_R9091_, ffestb_R9094_, ffestb_R90913_, ffestb_R90914_,
+ ffestb_R91012_, ffestb_R91013_): Use new functions, and confirm
+ except for the OPEN_PAREN case.
+
+ Fixes to not confirm declarations with an open paren where
+ an equal sign or other assignment-like token might be, so the
+ corresponding assignments to same-named CHAR*(*) arrays work:
+ (ffestb_decl_entsp_5_): Move assertion so we crash on that first,
+ if it turns out to be wrong, before the less-debuggable crash
+ on mistaken confirmation.
+ (ffestb_decl_entsp_6_, ffestb_decl_entsp_7_, ffestb_decl_entsp_8_):
+ Include OPEN_PAREN in list of assignment-only tokens.
+
+ Fix more diagnosed-crash bugs:
+ * stu.c (ffestu_sym_end_transition): ANY-ize an adjustable array
+ with bad dimension expressions even if still stateUNCERTAIN.
+ (ffestu_symter_end_transition_, ffestu_symter_exec_transition_):
+ Return TRUE for opANY as well.
+ For code elegance, move opSYMTER case into first switch.
+
+1996-11-17 Dave Love <d.love@dl.ac.uk>
+
+ * lex.c: Fix last change.
+
+1996-11-14 Dave Love <d.love@dl.ac.uk>
+
+ * Make-lang.in, config-lang.in: Remove the (broken) libU77 stuff,
+ pending 0.5.20.
+
+Thu Nov 14 15:40:59 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * bad.def (FFEBAD_UNIMPL_STMT): Explain that invalid
+ intrinsic references can trigger this message, too.
+
+1996-11-12 Dave Love <d.love@dl.ac.uk>
+
+ * lex.c: Declare dwarfout routines.
+
+ * config-lang.in: Sink grep o/p.
+
+Mon Nov 11 14:21:13 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * g77.c (main): Might as well print version number
+ for --verbose as well.
+
+Thu Nov 7 18:41:41 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * expr.c, lang-options.h, target.h, top.c, top.h: Split out
+ remaining -fugly stuff into -fugly-logint and -fugly-comma,
+ leaving -fugly as simply a `macro' that expands into other
+ options, and eliminate defaults for some of the ugly stuff
+ in target.h.
+
+ * Make-lang.in (gcc-cross): Compile zzz.c, not version.o (!),
+ in to get version info for this target.
+
+ * config-lang.in: Test for GBE patch application based
+ on whether 2.6.x or 2.7.x GBE is detected.
+
+Wed Nov 6 14:19:45 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * Make-lang.in (g77): Compile zzz.c in to get version info.
+ * g77.c: Add support for --help and --version.
+
+ * g77.c (lookup_option): Short-circuit long-winded tests
+ when second char is not hyphen, just to save a spot of time.
+
+Sat Nov 2 13:50:31 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * intrin.def: Add FTELL and FSEEK intrinsics, plus new
+ `g' codes for alternate-return (GOTO) arguments.
+ * intrin.c (ffeintrin_check_): Support `g' codes.
+ * com-rt.def: Add ftell_() and fseek_() to database.
+ * com.c (ffecom_expr_intrinsic_): Ditto. Also, let each
+ subroutine intrinsic decide for itself what to do with
+ tree_type, the default being NULL_TREE once again (so
+ ffecom_call_ doesn't think it's supposed to cast the
+ function call to the type in the fall-through case).
+
+ * ste.c (ffeste_R909_finish): Don't special-case list-directed
+ I/O, now that libf2c can return non-zero status codes.
+ (ffeste_R910_finish): Ditto.
+ (ffeste_io_call_): Simplify logic.
+ (ffeste_io_impdo_):
+ (ffeste_subr_beru_):
+ (ffeste_R904):
+ (ffeste_R907):
+ (ffeste_R909_start):
+ (ffeste_R909_item):
+ (ffeste_R909_finish):
+ (ffeste_R910_start):
+ (ffeste_R910_item):
+ (ffeste_R910_finish):
+ (ffeste_R911_start):
+ (ffeste_R923A): Ditto all the above.
+
+Thu Oct 31 20:56:28 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * config-lang.in, Make-lang.in: Rename flag file
+ build-u77 to build-libu77, for consistency with
+ install-libf2c and such.
+
+ * config-lang.in: Don't complain about failure to patch
+ if pre-2.7.0 gcc is involved (since our patch for that
+ doesn't add support for tooning).
+
+Sat Oct 26 05:56:51 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * bad.def (FFEBAD_TYPELESS_TOO_LARGE): Remove this
+ unused and redundant diagnostic.
+
+Sat Oct 26 00:45:42 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * target.c (ffetarget_integerhex): Fix dumb bug.
+
+1996-10-20 Dave Love <d.love@dl.ac.uk>
+
+ * gbe/2.7.2.1.diff: New file.
+
+ * Makefile.in (F771_LDFLAGS): Add -bbigtoc for AIX4.1 up, suggested by
+ endo@material.tohoku.ac.jp [among others!].
+
+Sat Oct 19 03:11:14 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * bad.def, bld.c, bld.h, expr.c, lang-options.h, target.c,
+ target.h, top.c, top.h (ffebld_constant_new_integerbinary,
+ ffebld_constant_new_integerhex, ffebld_constant_new_integeroctal,
+ ffeexpr_token_name_apos_name_, ffetarget_integerbinary,
+ ffetarget_integerhex, ffetarget_integeroctal): Support
+ new -fno-typeless-boz option with new functions, mods to
+ existing octal-handling functions, new macros, new error
+ messages, and so on.
+
+ * com.c, lang-options.h, top.c, top.h (ffecom_notify_primary_entry):
+ Print program unit name on stderr if -fno-silent (new option).
+
+ * lang-options.h, top.c, top.h, stt.c (ffestt_dimlist_as_expr):
+ Treat ([...,]1) in dimlist as ([...,]*) if -fugly-assumed
+ (new option).
+
+ * lang-options.h: Comment out options duplicated in gcc/toplev.c,
+ because, somehow, having them commented in and building on my
+ DEC Alpha results in a cc1 that always segfaults, and gdb that
+ also segfaults whenever it debugs it up to init_lex() calling
+ xmalloc() or so.
+
+Thu Oct 17 00:39:27 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * stb.c (ffestb_R10013_): Don't change meaning of .sign until
+ after previous meaning/value used to set sign of value
+ (960507-1.f).
+
+Sun Oct 13 22:15:23 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * top.c (ffe_decode_option): Don't set back-end flags
+ that are nonexistent prior to gcc 2.7.0.
+
+Sun Oct 13 12:48:45 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * com.c (convert): Don't convert emulated complex expr to
+ real (via REALPART_EXPR) if the target type is (emulated)
+ complex.
+
+Wed Oct 2 21:57:12 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * com.c (ffecom_debug_kludge_): Set DECL_IN_SYSTEM_HEADER so
+ -Wunused doesn't complain about these manufactured decls.
+ (ffecom_expr_): Ditto, for original (non-ASSIGN'ed) variable.
+ (ffecom_transform_equiv_): Clear DECL_IGNORED_P for aggregate
+ area so it shows up as a debug-accessible symbol.
+ (pushdecl): Default for "invented" identifiers (a g77-specific
+ concept for now) is that they are artificial, in system header,
+ ignored for debugging purposes, used, and (for types) suppressed.
+ This ought to be overkill.
+
+Fri Sep 27 23:13:07 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * ste.c (ffeste_begin_iterdo_, ffeste_end_iterdo_): Support
+ one-trip DO loops (F66-style).
+ * lang-options.h, top.c, top.h (-fonetrip): New option.
+
+Thu Sep 26 00:18:40 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * com.c (ffecom_debug_kludge_): New function.
+ (ffecom_sym_transform_): Use new function for COMMON and EQUIVALENCE
+ members.
+
+ * lang-options.h, top.c, top.h (-fno-debug-kludge):
+ New option.
+
+1996-09-24 Dave Love <d.love@dl.ac.uk>
+
+ * Make-lang.in (include/f2c.h):
+ Remove dependencies on xmake_file and tmake_file.
+ They expand inconsistently in 2.8 c.f. 2.7; $(GCC_PARTS) depends on
+ them anyhow.
+
+1996-09-22 Dave Love <d.love@dl.ac.uk>
+
+ * config-lang.in: Add --enable-libu77 option handling.
+
+ * Make-lang.in:
+ Conditionally add --enable-libu77 when running runtime configure.
+ Define LIBU77STAGESTUFF and use it in relevant rules.
+
+1996-08-21 Dave Love <d.love@dl.ac.uk>
+
+ * Make-lang.in (f77-runtime):
+ `stmp-hdrs' should have been `stmp-headers'.
+
+1996-08-20 Dave Love <d.love@dl.ac.uk>
+
+ * Make-lang.in (f77-runtime):
+ Depend on stmp-hdrs, not stmp-int-hdrs, since libF77
+ needs float.h.
+
+Sat Jun 22 18:17:11 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * com.c (ffecom_tree_divide_): Fix RECORD_TYPE case to
+ look at type of first field, properly, to determine
+ whether to call c_div or z_div.
+
+Tue Jun 4 04:27:18 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * com.c (ffecom_build_complex_constant_): Explicitly specify
+ TREE_PURPOSE.
+ (ffecom_expr_): Fix thinko.
+ (ffecom_2): For COMPLEX_EXPR, explicitly specify TREE_PURPOSE.
+
+Mon May 27 16:23:43 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ Changes to optionally avoid gcc's back-end complex support:
+ * com.c (ffecom_stabilize_aggregate_): New function.
+ (ffecom_convert_to_complex_): New function.
+ (ffecom_make_complex_type_): New function.
+ (ffecom_build_complex_constant_): New function.
+ (ffecom_expr_): For opCONVERT of non-COMPLEX to COMPLEX,
+ don't bother explicitly converting to the subtype first,
+ because gcc does that anyway, and more code would have
+ to be added to find the subtype for the emulated-complex
+ case.
+ (ffecom_f2c_make_type_): Use ffecom_make_complex_type_
+ instead of make_node etc. to make a complex type.
+ (ffecom_1, ffecom_2): Translate operations on COMPLEX operands
+ to appropriate operations when emulating complex.
+ (ffecom_constantunion): Use ffecom_build_complex_constant_
+ instead of build_complex to build a complex constant.
+ (ffecom_init_0): Change point at which types are laid out
+ for improved consistency.
+ Use ffecom_make_complex_type_ instead of make_node etc.
+ to make a complex type.
+ Always calculate storage sizes from TYPE_SIZE, never TYPE_PRECISION.
+ (convert): Use e, not expr, since we've copied into that anyway.
+ For RECORD_TYPE cases, do emulated-complex conversions.
+ (ffecom_f2c_set_lio_code_): Always calculate storage sizes
+ from TYPE_SIZE, never TYPE_PRECISION.
+ (ffecom_tree_divide_): Allow RECORD_TYPE to also be handled
+ by run-time library.
+ (ffecom_expr_intrinsic_): Handle possible RECORD_TYPE as argument
+ to AIMAG intrinsic.
+
+ * top.h, top.c, lang-options.h: Support new -f(no-)emulate-complex option.
+
+ * com.c (ffecom_sym_transform_): Clarify and fix typos in comments.
+
+Mon May 20 02:06:27 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * target.h: Use new REAL_VALUE_UNTO_TARGET_* macros instead
+ of REAL_VALUE_FROM_TARGET_DOUBLE and _SINGLE.
+ Explicitly use long instead of HOST_WIDE_INT for emulation
+ of ffetargetReal1 and ffetargetReal2.
+
+1996-05-20 Dave Love <d.love@dl.ac.uk>
+
+ * config-lang.in:
+ Test for patch being applied with flag_move_all_movables in toplev.c.
+
+ * install.texi (Patching GNU Fortran):
+ Mention overriding X_CFLAGS rather than
+ editing proj.h on SunOS4.
+
+ * Make-lang.in (F77_FLAGS_TO_PASS):
+ Add X_CFLAGS (convenient for SunOS4 kluge, in
+ particular).
+ (f77.{,mostly,dist}clean): Reorder things, in particular not to delete
+ Makefiles too early.
+
+ * g77.c (DEFAULT_SWITCH_TAKES_ARG): Define a la gcc.c in the
+ current GCC snapshot.
+
+Tue May 14 00:24:07 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ Changes for DEC Alpha AXP support:
+ * com.c (ffecom_init_0): REAL_ARITHMETIC means internal
+ REAL/DOUBLE PRECISION might well have a different size
+ than the compiled type, so don't crash if this is the
+ case.
+ * target.h: Use `int' for ffetargetInteger1,
+ ffetargetLogical1, and magical tests. Set _f format
+ strings accordingly.
+
+Tue Apr 16 14:08:28 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * top.c (ffe_decode_option): -Wall no longer implies
+ -Wsurprising.
+
+Sat Apr 13 14:50:06 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * com.c (ffecom_char_args_): If item is error_mark_node,
+ set *length that way, too.
+
+ * com.c (ffecom_expr_power_integer_): If either operand
+ is error_mark_node, return that.
+
+ * com.c (ffecom_intrinsic_len_): If item is error_mark_node,
+ return that for length.
+
+ * expr.c (ffeexpr_declare_unadorned_,
+ ffeexpr_declare_parenthesized_): Instead of crashing
+ on unexpected contexts, produce a diagnostic.
+
+ * intrin.c (ffeintrin_check_), intrin.def (impSIGNAL):
+ Allow procedure as second arg to SIGNAL intrinsic.
+
+ * stu.c (ffestu_symter_end_transition_): New function.
+ (ffestu_symter_exec_transition_): Return bool arg.
+ Always transition symbol (don't inhibit when !whereNONE).
+ (ffestu_sym_end_transition): If DUMMY/LOCAL arg has any
+ opANY exprs in its dimlist, diagnose it so it doesn't
+ make it through to later stages that try to deal with
+ dimlist stuff.
+ (ffestu_sym_exec_transition): If sym has any opANY exprs
+ in its dimlist, diagnose it so it becomes opANY itself.
+
+ * symbol.c (ffesymbol_error): If token arg is NULL,
+ just ANY-ize the symbol -- don't produce diagnostic.
+
+Mon Apr 1 10:14:02 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * Version 0.5.18 released.
+
+Mon Mar 25 20:52:24 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * com.c (ffecom_expr_power_integer_): Don't generate code
+ that compares COMPLEX (or, as it happens, REAL) via "LT_EXPR",
+ since the back end crashes on that. (This code would never
+ be executed anyway, but the test that avoids it has now been
+ translated to control whether the code gets generated at all.)
+ Fixes 960323-3.f.
+
+ * com.c (ffecom_type_localvar_): Handle variable-sized
+ dimension bounds expressions here, so they get calculated
+ and saved on procedure entry. Fixes 960323-4.f.
+
+ * com.c (ffecom_notify_init_symbol): Symbol has no init
+ info at all if only zeros have been used to initialize it.
+ Fixes 960324-0.f.
+
+ * expr.c, expr.h (ffeexpr_type_combine): Renamed from
+ ffeexpr_type_combine_ and now a public procedure; last arg now
+ a token, instead of an internal structure used to extract a token.
+ Now allows the outputs to be aliased with the inputs.
+ Now allows a NULL token to mean "don't report error".
+ (ffeexpr_reduced_bool2_, ffeexpr_reduced_eqop2_,
+ ffeexpr_reduced_math2_, ffeexpr_reduced_power_,
+ ffeexpr_reduced_relop2_): Handle new calling sequence for
+ ffeexpr_type_combine.
+ * (ffeexpr_convert): Don't put an opCONVERT node
+ in just because the size is unknown; all downstream code
+ should be able to deal without it being there anyway, and
+ getting rid of it allows new intrinsic code to more easily
+ combine types and such without generating bad code.
+ * info.c, info.h (ffeinfo_kindtype_max): Rewrite to do
+ proper comparison of size of types, not just comparison
+ of their internal kind numbers (so I2.eq.I1 doesn't promote
+ I1 to I2, rather the other way around).
+ * intrin.c (ffeintrin_check_): Combine types of arguments
+ in COL a la expression handling, for greater flexibility
+ and permissiveness (though, someday, -fpedantic should
+ report use of this kind of thing).
+ Make sure Hollerith/typeless where CHARACTER expected is
+ rejected. This all fixes 960323-2.f.
+
+ * ste.c (ffeste_begin_iterdo_): Fix some more type conversions
+ so INTEGER*2-laden DO loops don't crash at compile time on
+ certain machines. Believed to fix 960323-1.f.
+
+ * stu.c (ffestu_sym_end_transition): Certainly reject
+ whereDUMMY not in any dummy list, whether stateUNCERTAIN
+ or stateUNDERSTOOD. Fixes 960323-0.f.
+
+Tue Mar 19 13:12:40 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * data.c (ffedata_value): Fix crash on opANY, and simplify
+ the code at the same time.
+
+ * Make-lang.in (f77-runtime): Also depends on lib[FI]77/Makefile...
+ (include/f2c.h...): ...which in turn depend on */Makefile.in.
+ (f77.rebuilt): Rebuild runtime stuff too.
+
+ * intrin.c (ffeintrin_check_): Accommodate TYPELESS/HOLLERITH
+ types, convert args as necessary, etc.
+
+ * expr.c (ffeexpr_convert): Fix test for TYPELESS/HOLLERITH
+ to obey the docs; crash if no source token when error.
+ (ffeexpr_collapse_convert): Crash if no token when error.
+
+Mon Mar 18 15:51:30 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * com.c (ffecom_init_zero_): Renamed from
+ ffecom_init_local_zero_; now handles top-level
+ (COMMON) initializations too.
+
+ * bld.c (ffebld_constant_is_zero):
+ * com.c (ffecom_symbol_transform_, ffecom_sym_transform_assign_,
+ ffecom_transform_common_, ffecom_transform_equiv_):
+ * data.c:
+ * equiv.c:
+ * equiv.h:
+ * lang-options.h:
+ * stc.c:
+ * storag.c:
+ * storag.h:
+ * symbol.c:
+ * symbol.h:
+ * target.c:
+ * target.h:
+ * top.c:
+ * top.h: All of this is mostly housekeeping-type changes
+ to support -f(no-)zeros, i.e. not always stuff zero
+ values into the initializer fields of symbol/storage objects,
+ but still track that they have been given initial values.
+
+ * bad.def: Fix wording for DATA-related diagnostics.
+
+ * com.c (ffecom_sym_transform_assign_): Don't check
+ any EQUIVALENCE stuff for local ASSIGN, the check was
+ bad (crashing), and it's not necessary, anyway.
+
+ * com.c (ffecom_expr_intrinsic_): For MAX and MIN,
+ ignore null arguments as far arg[123], and fix handling
+ of ANY arguments. (New intrinsic support now allows
+ spurious trailing null arguments.)
+
+ * com.c (ffecom_init_0): Add HOLLERITH (unsigned)
+ equivalents for INTEGER*2, *4, and *8, so shift intrinsics
+ and other things that need unsigned versions of signed
+ types work.
+
+Sat Mar 16 12:11:40 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * storag.c (ffestorag_exec_layout): Treat adjustable
+ local array like dummy -- don't create storage object.
+ * com.c (ffecom_sym_transform_): Allow for NULL storage
+ object in LOCAL case (adjustable array).
+
+Fri Mar 15 13:09:41 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * com.c (ffecom_sym_transform_): Allow local symbols
+ with nonconstant sizes (adjustable local arrays).
+ (ffecom_type_localvar_): Allow dimensions with nonconstant
+ component (adjustable local arrays).
+ * expr.c: Various minor changes to handle adjustable
+ local arrays (a new case of stateUNCERTAIN).
+ * stu.c (ffestu_sym_end_transition,
+ ffestu_sym_exec_transition): Ditto.
+ * symbol.def: Update docs to reflect these changes.
+
+ * com.c (ffecom_expr_): Reduce space/time needed for
+ opACCTER case by handling it here instead of converting
+ it to opARRTER earlier on.
+ (ffecom_notify_init_storage): Don't convert ACCTER to ARRTER.
+ (ffecom_notify_init_symbol): Ditto.
+
+ * com.c (ffecom_init_0): Crash and burn if any of the types'
+ sizes, according to the GBE, disagrees with the sizes of
+ the FFE's internal implementation. This might catch
+ Alpha/SGI bugs earlier.
+
+Fri Mar 15 01:09:41 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * com-rt.def, com.c, com.h: Changes for rewrite of intrinsic
+ handling.
+ * com.c (ffecom_arglist_expr_): New function.
+ (ffecom_widest_expr_type_): New function.
+ (ffecom_expr_intrinsic_): Reorganize, some rewriting.
+ (ffecom_f2c_make_type_): Layout complex types.
+ (ffecom_gfrt_args_): New function.
+ (ffecom_list_expr): Trivial change for consistency.
+
+ * expr.c (ffeexpr_token_name_rhs_): Go back to getting
+ type from specific, not implementation, info.
+ (ffeexpr_token_funsubstr_): Set intrinsic implementation too!
+ * intrin.c: Major rewrite of most portions.
+ * intrin.def: Major rearchitecting of tables.
+ * intrin.h (ffeintrin_basictype, ffeintrin_kindtype):
+ Now (once again) take ffeintrinSpec as arg, not ffeintrinImp;
+ for now, these return NONE, since they're not really needed
+ and adding the necessary info to the tables is not trivial.
+ (ffeintrin_codegen_imp): New function.
+ * stc.c (ffestc_R1208_item): Change way ffeintrin funcs called,
+ back to original per above; but comment out the code anyway.
+
+ * intrin.c (ffe_init_0): Do internal checks only if
+ -fset-g77-defaults not specified.
+
+ * lang-options.h: Add -fset-g77-defaults option.
+ * lang-specs.h: Always pass -fset-g77-defaults.
+ * top.c, top.h: New option.
+
+Sat Mar 9 17:49:50 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * Make-lang.in (stmp-int-hdrs): Use --no-validate when
+ generating the f77.rebuilt files (BUGS, INSTALL, NEWS)
+ so cross-references can work properly in g77.info
+ without a lot of hassle. Users can probably deal with
+ the way they end up looking in the f77.rebuilt files.
+
+ * bld.c (ffebld_constant_new_integer4_val): INTEGER*8
+ support -- new function.
+ (ffebld_constant_new_logical4_val): New function.
+ * com.c (ffecom_f2c_longint_type_node): New type.
+ (FFECOM_rttypeLONGINT_): New return type code.
+ (ffecom_expr_): Add code to invoke pow_qq instead
+ of pow_ii for INTEGER4 (INTEGER*8) case.
+ If ffecom_expr_power_integer_ returns NULL_TREE, just do
+ the usual work.
+ (ffecom_make_gfrt_): Handle new type.
+ (ffecom_expr_power_integer_): Let caller do the work if in
+ dummy-transforming case, since
+ caller now knows about INTEGER*8 and such, by returning
+ NULL_TREE.
+ * expr.c (ffeexpr_reduced_power_): Complain about non-INTEGER
+ raised to INTEGER4 (INTEGER*8) power.
+
+ * target.c (ffetarget_power_integerdefault_integerdefault):
+ Fix any**negative.
+ * com.c (ffecom_expr_power_integer_): Fix (-1)**(-8) and similar
+ to ABS() the integral result if the exponent is negative
+ and even.
+
+ * ste.c (ffeste_begin_iterdo_): Clean up a type ref.
+ Always convert iteration count to _default_ INTEGER.
+
+ * sta.c (ffesta_second_): Add BYTE and WORD type/stmts;
+ changes by Scott Snyder <snyder@d0sgif.fnal.gov>.
+ * stb.c (ffestb_decl_recursive): Ditto.
+ (ffestb_decl_recursive): Ditto.
+ (ffestb_decl_entsp_2_): Ditto.
+ (ffestb_decl_entsp_3_): Ditto.
+ (ffestb_decl_funcname_2_): Ditto.
+ (ffestb_decl_R539): Ditto.
+ (ffestb_decl_R5395_): Ditto.
+ * stc.c (ffestc_establish_declstmt_): Ditto.
+ * std.c (ffestd_R539item): Ditto.
+ (ffestd_R1219): Ditto.
+ * stp.h: Ditto.
+ * str-1t.fin: Ditto.
+ * str-2t.fin: Ditto.
+
+ * expr.c (ffeexpr_finished_): For DO loops, allow
+ any INTEGER type; convert LOGICAL (assuming -fugly)
+ to corresponding INTEGER type instead of always default
+ INTEGER; let later phases do conversion of DO start,
+ end, incr vars for implied-DO; change checks for non-integral
+ DO vars to be -Wsurprising warnings.
+ * ste.c (ffeste_io_impdo_): Convert start, end, and incr
+ to type of DO variable.
+
+ * com.c (ffecom_init_0): Add new types for [IL][234],
+ much of which was done by Scott Snyder <snyder@d0sgif.fnal.gov>.
+ * target.c: Ditto.
+ * target.h: Ditto.
+
+Wed Mar 6 14:08:45 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * top.c (ffe_init_gbe_): Make -frerun-loop-opt the default.
+
+Mon Mar 4 12:27:00 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * expr.c (ffeexpr_exprstack_push_unary_): Really warn only
+ about two successive _arithmetic_ operators.
+
+ * stc.c (ffestc_R522item_object): Allow SAVE of (understood)
+ local entity.
+
+ * top.c (ffe_decode_option): New -f(no-)second-underscore options.
+ * top.h: New options.
+ * com.c (ffecom_get_external_identifier_, ffecom_get_identifier_):
+ New options.
+
+ * Make-lang.in (f77.maintainer-clean): Clean f/BUGS, f/INSTALL,
+ f/NEWS.
+ ($(srcdir)/f/BUGS, $(srcdir)/f/INSTALL, $(srcdir)/f/NEWS):
+ New rules.
+ ($(srcdir)/f/g77.info, $(srcdir)/f/g77.dvi): Depend on
+ f/bugs.texi and f/news.texi.
+ (f77.install-man): Install f77 man pages (if enabled).
+ (f77.uninstall): Uninstall info docs, f77 man pages (if enabled).
+
+ * top.c (ffe_init_gbe_): New function.
+ (ffe_decode_option, ffe_file): Call ffe_init_gbe_ to
+ set defaults for gcc options.
+
+Sat Jan 20 13:57:19 1996 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * com.c (ffecom_get_identifier_): Eliminate needless
+ comparison of results of strchr.
+
+Tue Dec 26 11:41:56 1995 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * Make-lang.in: Add rules for new files g77.texi, g77.info,
+ and g77.dvi.
+ Reorganize the *clean rules to more closely parallel gcc's.
+
+ * config-lang.in: Exclude g77.info from diffs.
+
+Sun Dec 10 02:29:13 1995 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * expr.c (ffeexpr_declare_unadorned_,
+ ffeexpr_declare_parenthesized_): Break out handling of
+ contextDATAIMPDO[INDEX,CTRL] so it's independent of symbol state.
+ Don't exec-transition these here (let ffeexpr_sym_impdoitem_
+ handle that when appropriate). Don't "declare" them twice.
+
+Tue Dec 5 06:48:26 1995 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * stc.c (ffestc_promote_sfdummy_): Allow whereNONE parent
+ symbol, since it is not necessarily known whether it will
+ become LOCAL or DUMMY.
+
+Mon Dec 4 03:46:55 1995 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * lex.c (ffelex_display_token, ffelex_type_string_): Resurrect
+ these from their old versions and update them for possible invocation
+ from debugger.
+ * lex.h (ffelex_display_token): Declare this in case anyone
+ else wants to call it.
+
+ * lex.c (ffelex_total_tokens_): Have this reflect actual allocated
+ tokens, no longer include outstanding "uses" of tokens.
+
+ * malloc.c, malloc.h (MALLOC_DEBUG): New macro to control
+ checking of whether callers follow rules, now defaults to 0
+ for "no checking" to improve compile times.
+
+ * malloc.c (malloc_pool_kill): Fix bug that could prevent
+ subpool from actually being killed (wasn't setting its use
+ count to 1).
+
+ * proj.h, *.c (dmpout): Replace all occurrences of `stdout'
+ and some of `stderr' with `dmpout', so where to dump debugging
+ output can be easily controlled during build; add default
+ for `dmpout' of `stderr' to proj.h.
+
+Sun Dec 3 00:56:29 1995 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * com.c (ffecom_return_expr): Eliminate attempt at warning
+ about unset return values, since the back end does this better,
+ with better wording, and is not triggered by clearly working
+ (but spaghetti) code as easily as this test.
+
+Sat Dec 2 08:28:56 1995 Craig Burley <burley@gnu.ai.mit.edu>
+
+ * target.c (ffetarget_power_*_integerdefault): Raising 0 to
+ integer constant power should not be an error condition;
+ if so, other code should catch 0 to any power, etc.
+
+ * bad.def (FFEBAD_BAD_POWER): 0**integer now a warning instead
+ of an error.
+
+Fri Dec 1 00:12:03 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * bad.def: Clarify diagnostic regarding complex constant elements.
+ * expr.c (ffeexpr_cb_comma_c_): Capitalize real/imaginary
+ for clarified diagnostic.
+
+ * com.c (ffecom_close_include_): Close the file!
+
+ * lex.c (ffelex_file_fixed): Update line info if the line
+ has any content, not just if it finishes a previous line
+ or has a label.
+ (ffelex_file_free): Clarify switch statement code.
+
+Sat Nov 18 19:37:22 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * Version 0.5.17 released.
+
+Fri Nov 17 14:27:24 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * Make-lang.in: Fix typo in comment.
+
+ * Makefile.in (f/fini.o, f/proj-h.o): Don't use `$<' since
+ not all makes support it (e.g. NeXT make), use explicit
+ source name instead (with $(srcdir) and munging).
+ (ASSERT_H): assert.h lives in source dir, not build dir.
+
+Thu Nov 16 12:47:50 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * com.c (ffecom_init_0): Fix dumb bug in code to produce
+ warning message about non-32-bit-systems.
+
+ * stc.c (ffestc_R501_item): Parenthesize test to make
+ warning go away (and perhaps fix bug).
+
+Thu Nov 16 03:43:33 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * g77.c: Upgrade to 2.7.0's gcc.c.
+ Fix -v to pass a temp name instead of "/dev/null" for "-o".
+
+Fri Nov 10 19:16:05 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * ste.c (ffeste_begin_iterdo_): Add Toon's change to
+ make loops faster on some machines (implement termination
+ condition as "--i >= 0" instead of "i-- > 0").
+
+Thu Nov 2 03:58:17 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * Make-lang.in: Remove unnecessary $(exeext) a la cp/Make-lang.in.
+
+ * com.c (ffecom_expr_): Restore old strategy for assignp variant
+ of opSYMTER case...always return the ASSIGN version of var.
+ That way, `-O -Wuninitialized' will catch "I=3;GOTO I;END"
+ (though the diagnostic will refer to `__g77_ASSIGN_i').
+
+ * com.c (ffecom_expr_power_integer_): For constant rhs case,
+ wrap every new eval of lhs in save_expr() so it is clear to
+ back end that MULT_EXPR(lhs,lhs) has identical operands,
+ otherwise for an rhs like 32767 it generates around 65K pseudo
+ registers, with which stupid_life_analysis cannot cope
+ (due to reg_renumber in regs.h being `short *' instead of
+ `int *').
+
+ * com.c (ffecom_expr_): Speed up implementation of LOGICAL
+ versions of opNOT, opAND, opOR, opXOR/opNEQV, and opEQV by
+ assuming the values actually are kosher LOGICAL bit patterns.
+ Also simplify code that implements some of the INTEGER versions
+ of these.
+
+ * com.c (skip_redundant_dir_prefix, read_name_map,
+ ffecom_open_include_, signed_type, unsigned_type): Fold in
+ changes to cccp.c made from 2.7.0 through ss-950826.
+
+ * equiv.c (ffeequiv_layout_local_): Kill the equiv list
+ if no syms in list.
+
+ * expr.c (ffeexpr_reduced_eqop2_): Issue specific diagnostic
+ regarding usage of .EQV./.NEQV. in preference to .EQ./.NE..
+
+ * intrin.c: Add ERF and ERFC as generic intrinsics.
+ intrin.def: Same.
+
+ * sta.c (ffesta_save_, ffesta_second_): Whoever calls
+ ffestd_exec_begin must also set ffesta_seen_first_exec = TRUE,
+ and anytime stc sees an exec transition, it must do both.
+ stc.c (ffestc_eof): Same.
+
+ * stc.c (ffestc_promote_sfdummy_): If failed implicit typing
+ or CHARACTER*(*) arg, after calling ffesymbol_error, don't
+ reset info to ENTITY/DUMMY, because ffecom_sym_transform_
+ doesn't expect such a thing with ANY/ANY type.
+
+ * target.h (*logical*): Change some of these so they parallel
+ changes in com.c, e.g. for _eqv_, use (l)==(r) instead of
+ !!(l)==!!(r), to get a more faithful result.
+
+Fri Oct 27 07:06:59 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * com.c (ffecom_sym_transform_): Simplify code for local
+ EQUIVALENCE case.
+
+ * expr.c (ffeexpr_exprstack_push_unary_): Warn about two
+ successive operators.
+ (ffeexpr_exprstack_push_binary_): Warn about "surprising"
+ operator precedence, as in "-2**2".
+
+ * lang-options.h: Add -W(no-)surprising options.
+
+ * parse.c (yyparse): Don't reset -fpedantic if not -pedantic.
+
+ * top.c (ffe_decode_option): Support new -Wsurprising option.
+ * top.h: Ditto.
+
+Mon Oct 23 09:14:15 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * com.c (ffecom_finish_symbol_transform_): Don't transform
+ NONE/NONE (CHARACTER*(*)) vars, as these don't mean anything
+ in debugging terms, and can't be turned into anything
+ in the back end (so ffecom_sym_transform_ crashes on them).
+
+ * com.c (ffecom_expr_): Change strategy for assignp variant
+ of opSYMTER case...always return the original var unless
+ it is not wide enough.
+
+ * ste.c (ffeste_io_cilist_): Clarify diagnostic for ASSIGN
+ involving too-narrow variable. This shouldn't happen, though.
+ (ffeste_io_icilist_): Ditto.
+ (ffeste_R838): Ditto.
+ (ffeste_R839): Ditto.
+
+Thu Oct 19 03:21:20 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * com.c (ffecom_sym_transform_assign_): Set TREE_STATIC
+ using the same decision-making process as used for their twin
+ variables, so ASSIGN can last across RETURN/CALL as appropriate.
+
+Fri Sep 22 20:21:18 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * Makefile.in: fini is a host program, so it needs a host-compiled
+ version of proj.o, named proj-h.o. f/fini, f/fini.o, and
+ f/proj-h.o targets updated accordingly.
+
+ * com.c (__eprintf): New function.
+
+Wed Sep 20 02:26:36 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * lang-options.h: Add omitted -funix-intrinsics-* options.
+
+ * malloc.c (malloc_find_inpool_): Check for infinite
+ loop, crash if detected (user reports encountering
+ them in some large programs, this might help track
+ down the bugs).
+
+Thu Sep 7 13:00:32 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * com.c (lang_print_error_function): Don't dereference null
+ pointer when outside any program unit.
+ (ffecom_let_char_, ffecom_arg_ptr_to_expr): If catlist
+ item or length ever error_mark_node, don't continue processing,
+ since back-end functions like build_pointer_type crash on
+ error_mark_node's (due to pushing bad obstacks, etc.).
+
+Wed Aug 30 15:58:35 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * Version 0.5.16 released.
+
+Mon Aug 28 12:24:20 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * bad.c (ffebad_finish): Fix botched message when no places
+ are printed (due to unknown line info, etc.).
+
+ * std.c (ffestd_subr_labels_): Do a better job finding
+ line info in the case of typeANY and diagnostics.
+
+Fri Aug 25 15:19:29 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * com.c (DECL_ARTIFICIAL): Surround all references to this
+ macro with #if !BUILT_FOR_270 and #endif.
+ (init_lex): Surround print_error_function decl with
+ #if !BUILT_FOR_270 and #endif.
+ (lang_init): Call new ffelex_hash_kludge function to solve
+ problem with preprocessed files that have INCLUDE statements.
+
+ * lex.c (ffelex_getc_): New function.
+ (ffelex_cfelex_): Use ffelex_getc_ instead of getc in any
+ paths of code that can be affected by ffelex_hash_kludge.
+ Don't make an EOF token for unrecognized token; set token
+ to NULL instead, to avoid problems when not initialized.
+ (ffelex_hash_): Use ffelex_getc_ instead of getc in any
+ paths of code that can be affected by ffelex_hash_kludge.
+ Test token returned by ffelex_cfelex_ for NULL, meaning
+ unrecognized token.
+ Get rid of useless used_up variable.
+ Don't do ffewhere stuff or kill any tokens if in
+ ffelex_hash_kludge.
+ (ffelex_file_fixed, ffelex_file_free): Use ffelex_getc_
+ instead of getc in any paths of code that can be affected
+ by ffelex_hash_kludge.
+ (ffelex_hash_kludge): New function.
+
+ * lex.h (ffelex_hash_kludge): New function.
+
+Wed Aug 23 15:17:40 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * com.c: Implement -f(no-)underscoring options by always
+ compiling in code to do it, and having that code inhibit
+ itself when -fno-underscoring is in effect. This option
+ overrides -f(no-)f2c for this purpose; -f(no-)f2c returns
+ to it's <=0.5.15 behavior of affecting only how code
+ is generated, not how/whether names are mangled.
+
+ * target.h: Redo specification of appending underscores so
+ the macros are named "_default" instead of "_is" and the
+ two-underscore macro defaults to 1.
+
+ * top.c, top.h (underscoring): Add appropriate stuff
+ for the -f(no-)underscoring options.
+
+Tue Aug 22 10:25:01 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * bad.c (ffebad_finish): Call report_error_function (in toplev.c)
+ to better identify location of problem.
+ Say "(continued):" instead of "(continued:)" for consistency.
+
+ * com.c (ffecom_gen_sfuncdef_): Set and reset new
+ ffecom_nested_entry_ variable to hold ffesymbol being compiled.
+ (lang_print_error_function): New function from toplev.c.
+ Use ffecom_nested_entry_ to help determine which name
+ and kind-string to print.
+ (ffecom_expr_intrinsic_): Handle EXIT and FLUSH invocations
+ with different calling sequences than library functions.
+ Have SIGNAL and SYSTEM push and pop calltemps, and convert
+ their return values to the destination type (just in case).
+ (FFECOM_rttypeINT_): New return type for `int', in case
+ gcc/f/runtime/libF77/system_.c(system_) is really supposed
+ to return `int' instead of `ftnint'.
+
+ * com.h (report_error_function): Declare this.
+
+ * equiv.c (ffeequiv_layout_local_): Don't forget to consider
+ root variable itself as possible "first rooted variable",
+ else might never set symbol and then crash later.
+
+ * intrin.c (ffeintrin_check_exit_): Change to allow no args
+ and rename to ffeintrin_check_int_1_o_ for `optional'.
+ #define ffeintrin_check_exit_ and _flush_ to this new
+ function, so intrin.def can refer to the appropriate names.
+
+ * intrin.def (FFEINTRIN_impFLUSH): Validate using
+ ffeintrin_check_flush_ so passing an INTEGER arg is allowed.
+
+ * lex.c (ffelex_file_push_, ffelex_file_pop_): New functions
+ to manage input_file_stack in gbe.
+ (ffelex_hash_): Call new functions (instead of doing code).
+ (ffelex_include_): Call new functions to update stack for
+ INCLUDE (_hash_ handles cpp output of #include).
+
+Mon Aug 21 08:09:04 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * Makefile.in: Put `-W' in front of every `-Wall', since
+ 2.7.0 requires that to engage `-Wunused' for parameters.
+
+ * com.c: Mark all parameters as artificial, so
+ `-W -Wunused' doesn't complain about unused ones (since
+ there's no way right not to individually specify attributes
+ like `unused').
+
+ * proj.h: Don't #define UNUSED if already defined, regardless
+ of host compiler.
+
+Sun Aug 20 16:03:56 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * gbe/2.7.0.diff: Regenerate.
+
+ * lang-options.h, lang-specs.h: If not __STDC__ (ANSI C),
+ avoid doing anything, especially the stringizing in -specs.h.
+
+Thu Aug 17 03:36:12 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * lang-specs.h: Remove useless optional settings of -traditional,
+ since -traditional is always set anyway.
+
+Wed Aug 16 16:56:46 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * Make-lang.in (F2C_INSTALL_FLAG, F2CLIBOK): More
+ control over whether to install f2c-related stuff.
+ (install-f2c-*): New targets to install f2c-related
+ stuff in system, not just gcc, directories.
+
+ * com.c: Change calls to ffecom_get_invented_identifier
+ to use generally more predictable names.
+ Change calls to build_range_type to ensure consistency
+ of types of operands.
+ (ffecom_get_external_identifier_): Change to accept
+ symbol info, not just text, so it can use f2c flag for
+ symbol to decide whether to append underscore(s).
+ (ffecom_get_identifier_): Don't change names if f2c flag
+ off for compilation.
+ (ffecom_type_permanent_copy_): Use same type for new max as
+ used for min.
+ (ffecom_notify_init_storage): Offline fixups for stand-alone.
+
+ * data.c (ffedata_gather): Explicitly test for common block,
+ since it's no longer always the case that a local EQUIVALENCE
+ group has no symbol ptr (it now can, if a user-predictable
+ "rooted" symbol has been identified).
+
+ * equiv.c: Add some debugging stuff.
+ (ffeequiv_layout_local_): Set symbol ptr with user-predictable
+ "rooted" symbol, for giving the invented aggregate a
+ predictable name.
+
+ * g77.c (append_arg): Allow for 20 extra args instead of 10.
+ (main): For version-only case, add `-fnull-version' and, unless
+ explicitly omitted, `-lf2c -lm'.
+
+ * lang-options.h: New "-fnull-version" option.
+
+ * lang-specs.h: Support ".fpp" suffix for preprocessed source
+ (useful for OS/2, MS-DOS, other case-insensitive systems).
+
+ * stc.c (ffestc_R544_equiv_): Swap way lists are merged so this
+ is consistent with the order in which lists are built, making
+ user predictability of invented aggregate name much higher.
+
+ * storag.c, storag.h (FFESTORAG_typeDUMMY): Delete this enum.
+
+ * top.c: Accept, but otherwise ignore, `-fnull-version'.
+
+Tue Aug 15 07:01:07 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * DOC, INSTALL, PROJECTS: Extensive improvements to documentation.
+
+Sun Aug 13 01:55:18 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * INSTALL (f77-install-ok): Document the use of this file.
+
+ * Make-lang.in (F77_INSTALL_FLAG): New flag to control
+ whether to install an `f77' command (based on whether
+ a file named `f77-install-ok' exists in the source or
+ build directory) to replace the broken attempt to use
+ comment lines to avoid installing `f77' (broken in the
+ sense that it prevented installation of `g77').
+
+Mon Aug 7 06:14:26 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * DOC: Add new sections for g77 & gcc compiler options,
+ source code form, and types, sizes and precisions.
+ Remove lots of old "delta-version" info, or at least
+ summarize it.
+
+ * INSTALL: Add info here that used to be in DOC.
+ Other changes.
+
+ * g77.c (lookup_option, main): Check for --print-* options,
+ so we avoid adding version-determining stuff.
+
+Wed Jul 26 15:51:03 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * Make-lang.in, Makefile.in (input.j, INPUT_H): New file.
+ Update dependencies accordingly.
+
+ * bad.c (ffebad_here): Okay to use unknown line/col.
+
+ * compilers.h (@f77-cpp-input): Remove -P option now that
+ # directives are handled by f771. Update other options
+ to be more consistent with @c in gcc/gcc.c. Don't run f771
+ if -E specified, etc., a la @c.
+ (@f77): Don't run f771 if -E specified, etc., a la @c.
+
+ * config-lang.in: Avoid use of word "guaranteed".
+
+ * input.j: New file to wrap around gcc/input.h.
+
+ * lex.j: Add support for parsing # directives output by cpp.
+ (ffelex_cfebackslash_): New function.
+ (ffelex_cfelex_): New function.
+ (ffelex_get_directive_line_): New function.
+ (ffelex_hash_): New function.
+ (ffelex_include_): Change to not use ffewhere_file_(begin|end).
+ Also fix bug in pointing to next line (for diagnostics, &c)
+ following successful INCLUDE.
+ (ffelex_next_line_): New function that does chunk of code
+ seen in several places elsewhere in the lexers.
+ (ffelex_file_fixed): Delay finishing statement until source
+ line is registered with ffewhere, so INCLUDE processing
+ picks up the info correctly.
+ Okay to kill or use unknown line/col objects now.
+ Handle HASH (#) lines.
+ Reorder tests for insubstantial lines to put most frequent
+ occurrences at top, for possible minor speedup.
+ Some general consolidation of code.
+ (ffelex_file_free): Handle HASH (#) lines.
+ Okay to kill or use unknown line/col objects now.
+ Some general consolidation of code.
+ (ffelex_init_1): Detect HASH (#) lines.
+ (ffelex_set_expecting_hollerith): Okay to kill or use unknown
+ line/col objects now.
+
+ * lex.h (FFELEX_typeHASH): New enum.
+
+ * options-lang.h (-fident, -fno-ident): New options.
+
+ * stw.c (ffestw_update): Okay to kill unknown line/col objects
+ now.
+
+ * target.h (FFETARGET_okREALQUAD, FFETARGET_okCOMPLEXDOUBLE,
+ FFETARGET_okCOMPLEXQUAD): #define these appropriately.
+
+ * top.c: Include flag.j wrapper, not flags.h directly.
+ (ffe_is_ident_): New flag.
+ (ffe_decode_option): Handle -fident and -fno-ident.
+ (ffe_file): Replace obsolete ffewhere_file_(begin|end) with
+ ffewhere_file_set.
+
+ * top.h (ffe_is_ident_, ffe_is_ident, ffe_set_is_ident):
+ New flag and access functions.
+
+ * where.c, where.h: Remove all tracking of parent file.
+ (ffewhere_file_begin, ffewhere_file_end): Delete these.
+ (ffewhere_line_use): Make it work with unknown line object.
+
+Mon Jul 17 03:04:09 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * com.c (ffecom_sym_transform_): Set DECL_IN_SYSTEM_HEADER
+ flag for any local vars used as stmtfunc dummies or DATA
+ implied-DO iter vars, so no -Wunused warnings are produced
+ for them (a la f2c).
+ (ffecom_init_0): Do "extern int xargc;" for IARGC() intrinsic.
+ Warn if target machine not 32 bits, since g77 isn't yet
+ working on them at all well.
+
+ * expr.c (ffeexpr_sym_lhs_call_, ffeexpr_sym_lhs_data_,
+ ffeexpr_sym_lhs_extfunc_, ffeexpr_sym_rhs_actualarg_,
+ ffeexpr_sym_rhs_let_, ffeexpr_paren_rhs_let_): Don't
+ gratuitously set attr bits that don't apply just
+ to avoid null set meaning error; instead, use explicit
+ error flag, and allow null attr set, to
+ fix certain bugs discovered by looking at this code.
+
+ * g77.c: Major changes to improve support for gcc long options,
+ to make `g77 -v' report more useful info, and so on.
+
+Mon Jul 3 14:49:16 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * DOC, com.c, intrin.h, intrin.c, intrin.def, target.h, top.c,
+ top.h: Add new `unix' group of intrinsics, which includes the
+ newly added ERF, ERFC, EXIT, plus even newer ABORT, DERF, DERFC,
+ FLUSH, GETARG, GETENV, SIGNAL, and SYSTEM.
+
+Tue Jun 27 23:01:05 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * bld.c, bld.h (ffebld_constant_pool,
+ ffebld_constant_character_pool): Use a single macro (the
+ former) to access the pool for allocating constants, instead
+ of latter in public and FFEBLD_CONSTANT_POOL_ internally
+ in bld.c (which was the only one that was correct before
+ these changes). Add verification of integrity of certain
+ heap-allocated areas.
+
+ * com.c (ffecom_overlap_, ffecom_args_overlap_,
+ ffecom_tree_canonize_ptr_, ffecom_tree_canonize_ref_): New
+ functions to optimize calling COMPLEX and, someday, CHARACTER
+ functions requiring additional argument to be passed.
+ (ffecom_call_, ffecom_call_binop_, ffecom_expr_,
+ ffecom_expr_intrinsic_): Change calling
+ sequences to include more info on possible destination.
+ (ffecom_expr_intrinsic_): Add ERF(), ERFC(), and EXIT()
+ intrinsic code.
+ (ffecom_sym_transform_): For assumed-size arrays, set high
+ bound to highest possible value instead of low bound, to
+ improve validity of overlap checking.
+ (duplicate_decls): If olddecl and newdecl are the same,
+ don't do any munging, just return affirmative.
+
+ * expr.c: Change ffecom_constant_character_pool() to
+ ffecom_constant_pool().
+
+ * info.c (ffeinfo_new): Compile this version if not being
+ compiled by GNU C.
+
+ * info.h (ffeinfo_new): Don't define macro if not being
+ compiled by GNU C.
+
+ * intrin.c, intrin.def: Add ERF(), ERFC(), and EXIT() intrinsics.
+ (ffeintrin_check_exit_): New for EXIT() subroutine intrinsic.
+
+ * malloc.c, malloc.h (malloc_verify_*): New functions to verify
+ integrity of heap-storage areas.
+
+ * stc.c (ffestc_R834, ffestc_R835): Handle possibility that
+ an enclosing DO won't have a construct name even when the
+ CYCLE/EXIT does (i.e. without dereferencing NULL).
+
+ * target.c, target.h (ffetarget_verify_character1): New function
+ to verify integrity of heap storage used to hold character constant.
+
+Thu Jun 22 15:36:39 1995 Howard Gordon (flash@super.org)
+
+ * stp.h (ffestpVxtcodeIx): Fix typo in typedef for this.
+
+Mon May 29 15:22:31 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * *: Make all sorts of changes to accommodate upcoming gcc-2.7.0.
+ I didn't keep track of them, nor just when I made them, nor
+ when I (much later, probably in early August 1995) modified
+ them so they could properly handle both 2.7.0 and 2.6.x.
+
+ * com.c (ffecom_expr_power_integer_): Don't expand_start_stmt_expr
+ if transforming dummy args, because the back end cannot handle
+ that (it's rejected by the gcc front end), just generate
+ call to run-time library.
+ Back out changes in 0.5.15 because more temporaries might be
+ needed anyway (for COMPLEX**INTEGER).
+ (ffecom_push_tempvar): Remove inhibitor.
+ Around start_decl and finish_decl (in particular, arround
+ expand_decl, which is called by them), push NULL_TREE into
+ sequence_rtl_expr, an external published by gcc/function.c.
+ This makes sure the temporary is truly in the function's
+ context, not the inner context of a statement-valued expression.
+ (I think the back end is inconsistent here, but am not
+ interested in convincing the gbe maintainers about this now.)
+ (pushdecl): Make sure that when pushing PARM_DECLs, nothing
+ other than them are pushed, as happened for 0.5.15 and which,
+ if done for other reasons not fixed here, might well indicate
+ some other problem -- so crash if it happens.
+
+ * equiv.c (ffeequiv_layout_local_): If the local equiv group
+ has a non-nil COMMON field, it should mean that an error has
+ occurred and been reported, so just trash the local equiv
+ group and do nothing.
+
+ * stc.c (ffestc_promote_sfdummy_): Set sfdummy arg state to
+ UNDERSTOOD so above checking for duplicate args actually
+ works, and so we don't crash later in pushdecl.
+
+ * ste.c (ffeste_R1001): Set initial value only for VAR_DECLs,
+ not for, e.g., LABEL_DECLs, which the FORMAT label can be
+ if it was previously treated as an executable label.
+
+Sat May 20 01:53:53 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * com.c (ffecom_sym_transform_): For adjustable arrays,
+ pass high bound through variable_size in case its primaries
+ are changed (dumb0.f, and this might also improve
+ performance so it approaches f2c|gcc).
+
+Fri May 19 11:00:36 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * Version 0.5.15 released.
+
+ * com.c (ffecom_expr_power_integer_): Push temp vars
+ before expanding a statement expression, since that seems
+ to cause temp vars to be "forgotten" after the end of the
+ expansion in the back end. Disallow more temp-var
+ pushing during such an expansion, just in case.
+ (ffecom_push_tempvar): Crash if a new variable needs to be
+ pushed but cannot be at this point (should never happen).
+
+Wed May 17 12:26:16 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * expr.c (ffeexpr_collapse_convert): Add code to convert
+ LOGICAL to CHARACTER. Reject conversion of REAL or COMPLEX
+ to CHARACTER entirely, as it cannot be supported with all
+ configurations.
+
+ * target.h, target.c (ffetarget_convert_character1_logical1):
+ New function.
+
+Sun May 14 00:00:09 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * com.c (ffecom_do_entry_, ffecom_gen_sfuncdef_,
+ ffecom_start_progunit_, ffecom_sym_transform_,
+ ffecom_init_0, start_function): Changes to have REAL
+ external functions return same type as DOUBLE PRECISION
+ external functions when -ff2c is in force; while at it,
+ some code cleanups done.
+
+ * stc.c (ffestc_R547_item_object): Disallow array declarator
+ if one already exists for symbol.
+
+ * ste.c (ffeste_R1227): Convert result variable to type
+ of function result as seen by back end (e.g. for when REAL
+ external function actually returns result as double).
+
+ * target.h (FFETARGET_defaultFIXED_LINE_LENGTH): New
+ macro for default for -ffixed-line-length-N option.
+
+ * top.c (ffe_fixed_line_length_): Initialize this to new
+ target.h macro instead of constant 72.
+
+Tue May 9 01:20:03 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * lex.c (ffelex_send_token_): If sending CHARACTER token with
+ null text field, put a single '\0' in it and set length/size
+ fields to 0 (to fix 950508-0.f).
+ (ffelex_image_char_): When setting ffelex_bad_line_ to TRUE,
+ always "close" card image by appending a null char and setting
+ ffelex_card_length_. As part of this, append useful text
+ to identify the two kinds of problems that involve this.
+ (ffelex_file_fixed): Reset ffelex_bad_line_ to FALSE after
+ seeing a line with invalid first character (fixes 950508-1.f).
+ If final nontab column is zero, assume tab seen in line.
+ (ffelex_card_image_): Always make this array 8 characters
+ longer than reflected by ffelex_card_size_.
+ (ffelex_init_1): Get final nontab column info from top instead
+ of assuming 72.
+
+ * options-lang.h: Add -ffixed-line-length- prefix.
+
+ * top.h: Add ffe_fixed_line_length() and _set_ version, plus
+ corresponding extern.
+
+ * top.c: Handle -ffixed-line-length- option prefix.
+
+Fri Apr 28 05:40:25 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * Version 0.5.14 released.
+
+ * Make-lang.in: Add assert.j.
+
+ * Makefile.in: Add assert.j.
+
+ * assert.j: New file.
+
+Thu Apr 27 16:24:22 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * bad.h (ffebad_severity): New function.
+
+ * bad.c (ffebad_severity): New function.
+
+ * bad.def (FFEBAD_OPEN_INCLUDE): Change severity from SEVERE
+ to FATAL, since processing continues, and that seems fine.
+
+ * com.c: Add facility to handle -I.
+ (ffecom_file, ffecom_close_include, ffecom_open_include,
+ ffecom_decode_include_option): New global functions for -I.
+ (ffecom_file_, ffecom_initialize_char_syntax_,
+ ffecom_close_include_, ffecom_decode_include_option_,
+ ffecom_open_include_, append_include_chain, open_include_file,
+ print_containing_files, read_filename_string, file_name_map,
+ savestring): New internal functions for -I.
+
+ * compilers.h: Pass -I flag(s) to f771 (via "%{I*}").
+
+ * lex.c (ffelex_include_): Call ffecom_close_include
+ to close include file, for its tracking needs for -I,
+ instead of using fclose.
+
+ * options-lang.h: Add -I prefix.
+
+ * parse.c (yyparse): Call ffecom_file for main input file,
+ so -I handling works (diagnostics).
+
+ * std.c (ffestd_S3P4): Have ffecom_open_include handle
+ opening and diagnosing errors with INCLUDE files.
+
+ * ste.c (ffeste_begin_iterdo_): Use correct algorithm for
+ calculating # of iterations -- mathematically similar but
+ computationally different algorithm was not handling cases
+ like "DO I=6,5,2" correctly, because (5-6)/2+1 => 1, not 0.
+
+ * top.c (ffe_decode_option): Allow -I, restructure a bit
+ for clarity and, maybe, speed.
+
+Mon Apr 17 13:31:11 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * g77.c: Remove -lc, turns out not all systems has it, but
+ leave other changes in for clarity of code.
+
+Sun Apr 16 21:50:33 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * com.c (ffecom_expr_): Implement ARRAY_EXPR as INDIRECT_REF
+ of appropriate PLUS_EXPRs of ptr_to_expr of array, to see
+ if this generates better code. (Conditional on
+ FFECOM_FASTER_ARRAY_REFS.)
+
+Sun Apr 16 00:22:48 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * Make-lang.in (F77_SRCS): Remove g77.c, since it doesn't
+ contribute to building f771.
+
+ * Makefile.in (dircheck): Remove/replace with f/Makefile, because
+ phony targets that are referenced in other real targets get run
+ when those targets are specified, which is a waste of time (e.g.
+ when rebuilding and only g77.c has changed, f771 was being linked
+ anyway).
+
+ * g77.c: Include -lc between -lf2c and -lm throughout.
+
+ * implic.c (ffeimplic_establish_symbol): If -Wimplicit, warn if
+ implicit type given to symbol.
+
+ * lex.c (ffelex_include_): Don't gratuitously increment line
+ number here.
+
+ * top.h, top.c (ffe_is_warn_implicit_): New global variable and
+ related access macros.
+ (ffe_decode_option): Handle -W options, including -Wall and
+ -Wimplicit.
+
+ * where.c (ffewhere_line_new): Don't muck with root line (was
+ crashing on null input since lexer changes over the past week
+ or so).
+
+Thu Apr 13 16:48:30 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * com.c (ffecom_init_0): Register built-in functions for cos,
+ sin, and sqrt.
+ (ffecom_tree_fun_type_double): New variable.
+ (ffecom_expr_intrinsic_): Update f2c input and output files
+ to latest version of f2c (no important g77-related changes
+ noted, just bug fixes to f2c and such).
+ (builtin_function): New function from c-decl.c.
+
+ * com-rt.def: Refer to built-in functions for cos, sin, and sqrt.
+
+Thu Apr 13 10:25:09 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * com.c (ffecom_expr_intrinsic_): Convert 0. to appropriate
+ type to keep DCMPLX(I) from crashing the compiler.
+ (ffecom_expr_): Don't convert result from ffecom_tree_divide_.
+ (ffecom_tree_divide_): Add tree_type argument, have all callers
+ pass one, and don't convert right-hand operand to it (this is
+ to make this new function work as much like the old in-line
+ code used in ffecom_expr_ as possible).
+
+ * lex.c: Maintain lineno and input_filename the way the gcc
+ lexer does.
+
+ * std.c (ffestd_exec_end): Save and restore lineno and
+ input_filename around the second pass, which sets them
+ appropriately for each saved statement.
+
+Wed Apr 12 09:44:45 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * com.c (ffecom_expr_power_integer_): New function.
+ (ffecom_expr_): Call new function for power op with integer second
+ argument, for generating better code. Also replace divide
+ code with call to new ffecom_tree_divide_ function.
+ Canonicalize calls to ffecom_truth_value(_invert).
+ (ffecom_tree_divide_): New function.
+
+Wed Apr 5 14:15:44 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * lex.c: Change to allocate text for tokens only when actually
+ needed, which should speed compilation up somewhat.
+ Change to allow INCLUDE at any point where a statement
+ can end, i.e. in ffelex_finish_statement_ or when a SEMICOLON
+ token is sent.
+ Remove some old, obsolete code.
+ Clean up layout of entire file to improve formatting,
+ readability, etc.
+ (ffelex_set_expecting_hollerith): Remove include argument.
+
+Fri Mar 31 23:19:08 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * bad.h, bad.c (ffebad_start_msg, ffebad_start_msg_lex):
+ New functions to generate arbitrary messages.
+ (FFEBAD_severityPEDANTIC): New severity, to correspond
+ to toplev's pedwarn() function.
+
+ * lex.c (ffelex_backslash_): New function to implement
+ backslash processing.
+ (ffelex_file_fixed, ffelex_file_free): Implement new
+ backslash processing.
+
+ * std.c (ffestd_R1001dump_): Don't assume CHARACTER and
+ HOLLERITH tokens stop at '\0' characters, now that backslash
+ processing is supported -- use their advertised lengths instead,
+ and double up the '\002' character for libf2c.
+
+Mon Mar 27 17:10:33 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * com.c (ffecom_init_local_zero_): Implement -finit-local-zero.
+ (ffecom_sym_transform_): Same.
+ (ffecom_transform_equiv_): Same.
+
+ * options-lang.h: Add -f(no-)(init-local-zero,backslash,ugly-init).
+
+ * stb.c (ffestb_V020): Reject "TYPEblah(...", which might be
+ an array assignment.
+
+ * target.h, top.h, top.c: Implement -finit-local-zero.
+
+Fri Mar 24 19:56:22 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * Make-lang.in, Makefile.in: Remove conf-proj(.in) and
+ proj.h(.in) rules, plus related config.log, config.cache,
+ and config.status stuff.
+
+ * com.c (ffecom_init_0): Change messages when atof(), bsearch(),
+ or strtoul() do not work as expected in the start-up test.
+
+ * conf-proj, conf-proj.in: Delete.
+
+ * lex.c (ffelex_file_fixed): Allow f2c's '&' in column 1
+ to mean continuation line.
+
+ * options-lang.h: New file, #include'd by ../toplev.c.
+
+ * proj.h.in: Rename back to proj.h.
+
+ * proj.h (LAME_ASSERT): Remove.
+ (LAME_STDIO): Remove.
+ (NO_STDDEF): Remove.
+ (NO_STDLIB): Remove.
+ (NO_BSEARCH): Remove auto detection, rename to !FFEPROJ_BSEARCH.
+ (NO_STRTOUL): Remove auto detection, rename to !FFEPROJ_STRTOUL.
+ (USE_HOST_LIMITS): Remove (maybe still needed by stand-alone?).
+ (STR, STRX): Do only ANSI C definitions.
+
+Mon Mar 13 10:46:13 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * BUGS: Add item about g77 requiring gcc to compile it.
+
+ * NEWS: New file listing user-visible changes in the release.
+
+ * PROJECTS: Update to include a new item or two, and modify
+ or delete items that are addressed in this or previous releases.
+
+ * bad.c (ffebad_finish): Don't crash if missing string &c,
+ just substitute obviously distressed string "[REPORT BUG!!]"
+ for cases where the message/caller are fudgy.
+
+ * bad.def: Clean up error messages in a major way, add new ones
+ for use by changes in target.c.
+
+ * com.c (ffecom_expr_): Handle opANY in opCONVERT.
+ (ffecom_let_char_): Disregard destinations with ERROR_MARK.
+ (ffecom_1, ffecom_1_fn, ffecom_2, ffecom_2s, ffecom_3,
+ ffecom_3s, &c): Check all inputs for error_mark_node.
+ (ffecom_start_progunit_): Don't transform all symbols
+ in BLOCK DATA, since it never executes, and it is silly
+ to, e.g., generate all the structures for NAMELIST.
+ (ffecom_char_length_expr_): Rename to ffecom_intrinsic_len_.
+ (ffecom_intrinsic_ichar_): New function to handle ICHAR of
+ arbitrary expression with possible 0-length operands.
+ (ffecom_expr_intrinsic_): Use ffecom_intrinsic_char_.
+ For MVBITS, set tree_type to void_type_node.
+ (ffecom_start_progunit_): Name master function for entry points
+ after primary entry point so users can easily guess it while
+ debugging.
+ (ffecom_arg_ptr_to_expr): Change treatment of Hollerith,
+ Typeless, and %DESCR.
+ (ffecom_expr_): Change treatment of Hollerith.
+
+ * data.c (ffedata_gather_): Handle opANY in opCONVERT.
+
+ * expr.c (ffeexpr_token_apostrophe_): Issue FFEBAD_NULL_CHAR_CONST
+ warning as necessary.
+ (ffeexpr_token_name_rhs_): Set context for args to intrinsic
+ so that assignment-like concatenation is allowed for ICHAR(),
+ IACHAR(), and LEN() intrinsics.
+ (ffeexpr_reduced_*_): Say "an array" instead of "an entity" in
+ diagnostics, since it's more informative.
+ (ffeexpr_finished_): For many contexts, check for null expression
+ and array before trying to do a conversion, to avoid redundant
+ diagnostics.
+
+ * g77.1: Fix typo for preprocessed suffix (.F, not .f).
+
+ * global.c (ffeglobal_init_common): Warn if initializing
+ blank common.
+ (ffeglobal_pad_common): Enable code to warn if initial
+ padding needed.
+ (ffeglobal_size_common): Complain if enlarging already-
+ initialized common, since it won't work right anyway.
+
+ * intrin.c: Add IMAG() intrinsic.
+ (ffeintrin_check_loc_): Allow opSUBSTR in LOC().
+
+ * intrin.def: Add IMAG() intrinsic.
+
+ * lex.c: Don't report FFEBAD_NULL_CHAR_CONST errors.
+
+ * sta.c, sta.h, stb.c: Changes to clean up error messages (see
+ bad.def).
+
+ * stb.c (ffestb_R100113_): Issue FFEBAD_NULL_CHAR_CONST
+ warning as necessary.
+
+ * stc.c (ffestc_shriek_do_): Don't try to reference doref_line
+ stuff in ANY case, since it won't be valid.
+ (ffestc_R1227): Allow RETURN in main program unit, with
+ appropriate warnings/errors.
+ (ffestc_subr_format_): Array of any type is a CHAREXPR (F77 C5).
+
+ * ste.c (ffeste_begin_doiter_): Couple of fixes to accurately
+ determine if loop never executes.
+
+ * target.c (ffetarget_convert_*_hollerith_): Append spaces,
+ not zeros, to follow F77 Appendix C, and to warn when
+ truncation of non-blanks done.
+ (ffetarget_convert_*_typeless): Rewrite to do typeless
+ conversions properly, and warn when truncation done.
+ (ffetarget_print_binary, ffetarget_print_octal,
+ ffetarget_print_hex): Rewrite to use new implementation of
+ typeless.
+ (ffetarget_typeless_*): Rewrite to use new implementation
+ of typeless, and to warn about overflow.
+
+ * target.h (ffetargetTypeless): New implementation of
+ this type.
+
+ * type.h, type.c (ffetype_size_typeless): Remove (incorrect)
+ implementation of this function and its extern.
+
+Sun Mar 5 18:46:42 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * BUGS: Clarify that constant handling would also fix lack of
+ adequate IEEE-754/854 support to some degree, and typeless
+ and non-decimal constants.
+
+ * com.c (ffecom_type_permanent_copy_): Comment out to avoid
+ warnings.
+ (duplicate_decls): New function a la gcc/c-decl.c.
+ (pushdecl): Use duplicate_decls to decide whether to return
+ existing decl or new one, instead of always returning existing
+ decl.
+ (ffecom_expr_): opPERCENT_LOC now supports CHARACTER arguments.
+ (ffecom_init_0): Give f2c I/O code 0 for basictypeANY/kindtypeANY.
+ (ffecom_sym_transform_): For adjustable arrays, pass low bound
+ through variable_size in case its primaries are changed (950302-1.f).
+
+ * com.h: More decls that belong in tree.h &c.
+
+ * data.c (ffedata_eval_integer1_): Fix opPAREN case to not
+ treat value of expression as an error code.
+
+ * expr.c (ffeexpr_finished_): Allow opSUBSTR in contextLOC case.
+
+ * proj.c: Add "const" as appropriate.
+
+Mon Feb 27 10:04:03 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * bad.def (FFEBAD_BAD_SUBSTR): Fix bad grammar in message.
+
+Fri Feb 24 16:21:31 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * Version 0.5.13 released.
+
+ * INSTALL: Warn that f/zzz.o will compare differently between
+ stages, since it puts the __TIME__ macro into a string.
+
+ * com.c (ffecom_sym_transform_): Transform kindFUNCTION/whereDUMMY
+ to pointer-to-function, not function.
+ (ffecom_expr_): Use ffecom_arg_ptr_to_expr instead of
+ ffecom_char_args_ to handle comparison between CHARACTER
+ types, so either operand can be a CONCATENATE.
+ (ffecom_transform_common_): Set size of initialized common area
+ to global (largest-known) size, even though size of init might
+ be smaller.
+
+ * equiv.c (ffeequiv_offset_): Check symbol info for ANY.
+
+ * expr.c (ffeexpr_find_close_paren_, ffeexpr_nil_*): New functions
+ to handle following the contour of a rejected expression, so
+ statements like "PRINT(I,I,I)=0" don't cause the PRINT statement
+ code to get the second passed back to it as if there was a
+ missing close-paren before it, the comma causing the PRINT code
+ to confirm the statement, resulting in an ambiguity vis-a-vis
+ the let statement code.
+ Use the new ffecom_find_close_paren_ handler when an expected
+ close-paren is missing.
+ (ffeexpr_isdigits_): New function, use in all places that
+ currently use isdigit in repetitive code.
+ (ffeexpr_collapse_symter): Collapse to ANY if init-expr is ANY,
+ so as to avoid having symbol get "transformed" if used to
+ dimension an array.
+ (ffeexpr_token_real_, ffeexpr_token_number_real_): Don't issue
+ diagnostic about exponent, since it'll be passed along the
+ handler path, resulting in a diagnostic anyway.
+ (ffeexpr_token_apos_char_): Use consistent handler path
+ regardless of whether diagnostics inhibited.
+ (ffeexpr_token_name_apos_name_): Skip past closing quote/apos
+ even if not a match or other diagnostic issued.
+ (ffeexpr_sym_impdoitem_): Exec-transition local SEEN symbol.
+
+ * lex.c (ffelex_image_char_): Set ffelex_saw_tab_ if TAB
+ seen, not if anything other than TAB seen!
+
+ * stc.c (ffestc_R537_item): If source is ANY but dest isn't,
+ set dest symbol's init expr to ANY.
+ (ffestc_R501_attrib, ffestc_R522, ffestc_R522start): Complain
+ about conflict between "SAVE" by itself and other uses of
+ SAVE only in pedantic mode.
+
+ * ste.c (ffeste_R1212): Fix loop over labels to always
+ increment caseno, to avoid pushcase returning 2 for duplicate
+ values when one of the labels is invalid.
+
+Thu Feb 23 12:42:04 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * Version 0.5.12 released.
+
+ * Make-lang.in (f77.install-common): Add "else true;" before outer
+ "fi" per Makefile.in patch.
+
+ * Makefile.in (dircheck): Add "else true;" before "fi" per
+ patch from chs1pm@surrey.ac.uk.
+
+ * com.c (ffecom_push_tempvar): If type desired is ERROR_MARK,
+ return error_mark_node, to avoid crash that results from
+ making a VAR_DECL with error_mark_node as its type.
+
+ * ste.c (ffeste_begin_iterdo_): Convert itercount to INTEGER
+ anytime calculation of number of iterations ends up with type
+ other than INTEGER (e.g. DOUBLE PRECISION, REAL).
+
+Thu Feb 23 02:48:38 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * Version 0.5.11 released.
+
+ * DOC: Explain -fugly-args.
+
+ * bad.def (FFEBAD_ACTUALARG): Explain -fugly-args and how to
+ rewrite code to not require it.
+
+ * com.c (ffecom_vardesc_): Handle negative type code, just in
+ case.
+ (ffecom_arg_ptr_to_expr): Let ffecom_expr handle hollerith
+ and typeless constants (move code to ffecom_constantunion).
+ (ffecom_constantunion): Handle hollerith and typeless constants.
+
+ * expr.c (ffecom_finished_): Check -fugly-args in actual-arg
+ context where hollerith/typeless provided.
+
+ * intrin.def (FFEINTRIN_genDFLOAT): Add FFEINTRIN_specDFLOAT.
+ (FFEINTRIN_specDFLOAT): Add as f2c intrinsic.
+
+ * target.h (ffetarget_convert_real[12]_integer,
+ ffetarget_convert_complex[12]_integer): Pass -1 for high integer
+ value if low part is negative.
+ (FFETARGET_defaultIS_UGLY_ARGS): New macro.
+
+ * top.c (ffe_is_ugly_args_): New variable.
+ (ffe_decode_option): Handle -fugly-args and -fno-ugly-args.
+
+ * top.h (ffe_is_ugly_args_, ffe_is_ugly_args(),
+ ffe_set_is_ugly_args()): New variable and macros.
+
+Thu Feb 23 02:48:38 1995 Pedro A M Vazquez (vazquez@iqm.unicamp.br)
+
+ * g77.c (sys_errlist): Use const for __FreeBSD__ systems
+ as well.
+
+Wed Feb 22 13:33:43 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * Version 0.5.10 released.
+
+ * CREDITS: Add Rick Niles.
+
+ * INSTALL: Note how to get around lack of makeinfo.
+
+ * Make-lang.in (f/proj.h): Remove # comment.
+
+ * Makefile.in (f/proj.h): Remove # comment.
+
+ * com.c (ffecom_expr_): Simplify opFUNCREF/opSUBRREF conversion.
+ (ffecom_sym_transform_): For whereGLOBAL and whereDUMMY
+ kindFUNCTION, use ffecom_tree_fun_type[][] only for non-constant
+ (non-statement-function) f2c functions.
+ (ffecom_init_0): ffecom_tree_fun_type[][] and _ptr_to_*_* are
+ really f2c-interface arrays, so use base type void for COMPLEX
+ (like CHARACTER).
+
+Tue Feb 21 19:01:18 1995 Dave Love <d.love@dl.ac.uk>
+
+ * Make-lang.in (f77.install-common): Expurgate the test for and
+ possible installation of f2c in line with elsewhere. Seems to have
+ been missing a semicolon anyhow!
+
+Tue Feb 21 11:45:25 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * Version 0.5.9 released.
+
+ * Make-lang.in (f/proj.h): touch file to register update,
+ because the previous commands won't necessarily modify it.
+
+ * Makefile.in (f/proj.h): touch file to register update,
+ because the previous commands won't necessarily modify it.
+
+ * Makefile.in (f/str-*.h, f/str-*.j): Explicitly specify
+ output file names, so these targets go in build, not source,
+ directory.
+
+ * bits.c, bits.h: Switch to valid ANSI C replacement for
+ ARRAY_ZERO.
+
+ * com.c (ffecom_expr_): Add assignp arg to support ASSIGN better.
+ If assignp is TRUE, use different tree for FFEBLD_opSYMTER case.
+ (ffecom_sym_transform_assign_): New function.
+ (ffecom_expr_assign): New function.
+ (ffecom_expr_assign_w): New function.
+
+ * com.c (ffecom_f2c_make_type_): Do make_signed_type instead
+ of make_unsigned_type throughout.
+
+ * com.c (ffecom_finish_symbol_transform_): Expand scope of
+ commented-out code to probably produce faster compiler code.
+
+ * com.c (ffecom_gen_sfuncdef_): Push/pop calltemps so
+ COMPLEX works right.
+ Remove obsolete comment.
+
+ * com.c (ffecom_start_progunit_): If non-multi alt-entry
+ COMPLEX function, primary (static) entry point returns result
+ directory, not via extra arg -- to agree with ffecom_return_expr
+ and others.
+ Pretransform all symbols so statement functions are defined
+ before any code emitted.
+
+ * com.c (ffecom_finish_progunit): Don't posttransform all
+ symbols here -- pretransform them instead.
+
+ * com.c (ffecom_init_0): Don't warn about possible ASSIGN
+ crash, as this shouldn't happen now.
+
+ * com.c (ffecom_push_tempvar): Fix to handle temp vars
+ pushed while context is a statement (nested) function, and
+ add appropriate commentary.
+
+ * com.c (ffecom_return_expr): Check TREE_USED to determine
+ where return value is unset.
+
+ * com.h (struct _ffecom_symbol_): Add note about length_tree
+ now being used to keep tree for ASSIGN version of symbol.
+
+ * com.h (ffecom_expr_assign, ffecom_expr_assign_rw): New decls.
+ (error): Add this prototype for back-end function.
+
+ * fini.c (main): Grab input, output, and include names
+ directly off the command line instead of making the latter
+ two out of the first.
+
+ * lex.c: Improve tab handling for both fixed and free source
+ forms, and ignore carriage-returns on input, while generally
+ improving the code. ffelex_handle_tab_ has been renamed and
+ reinvented as ffelex_image_char_, among other things.
+
+ * malloc.c, malloc.h: Switch to valid ANSI C replacement for
+ ARRAY_ZERO, and kill the full number of bytes in pools and
+ areas.
+
+ * proj.h.in (ARRAY_ZERO, ARRAY_ZERO_SIZE): Remove.
+
+ * ste.c (ffeste_io_cilist_, ffeste_io_icilist_, ffeste_R838,
+ ffeste_R839): Issue diagnostic if a too-narrow variable used in an
+ ASSIGN context despite changes to this code and code in com.c.
+
+ * where.c, where.h: Switch to valid ANSI C replacement for
+ ARRAY_ZERO.
+
+Fri Feb 17 03:35:19 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * Version 0.5.8 released.
+
+ * INSTALL: In quick-build case, list g77 target first so g77
+ gets installed. Also, explain that gcc gets built and installed
+ as well, even though this isn't really what we want (and maybe
+ we'll find a way around this someday).
+
+Fri Feb 17 02:35:41 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * Version 0.5.7 released.
+
+ * Makefile.in (CONFIG_H, HCONFIG_H, TCONFIG_H, TM_H): Remove
+ ../ prefix in front of .h files, since they're in the cd.
+
+Fri Feb 17 01:50:48 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * Version 0.5.6 released.
+
+Thu Feb 16 20:26:54 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * ../README.g77: Remove description of g77 as "not-yet-published".
+
+ * CREDITS: More changes.
+
+ * Make-lang.in (G77STAGESTUFF): Remove cktyps stuff.
+
+ * Makefile.in (CONFIG_H, HCONFIG_H, TCONFIG_H, TM_H): Don't
+ prefix gcc dir with $(srcdir) since these don't live there,
+ they are created in the build dir by gcc's configure. Add
+ a note explaining what these macros are about.
+ Update dependencies via deps-kinda.
+
+ * README.NEXTSTEP: Credit Toon, and per his request, add his
+ email address.
+
+ * com.h (FFECOM_DETERMINE_TYPES): #include "config.j".
+
+ * config.j, convert.j, flags.j, hconfig.j, rtl.j, tconfig.j,
+ tm.j, tree.j: Don't #include if already done.
+
+ * convert.j: #include "tree.j" first, as convert.h clearly depends
+ on trees being defined.
+
+ * rtl.j: #include "config.j" first, since there's some stuff
+ in rtl.h that assumes it has been #included.
+
+ * tree.j: #include "config.j" first, or real.h makes inconsistent
+ decision about return type of ereal_atof, leading to bugs, and
+ because tree.h/real.h assume config.h already included.
+
+Wed Feb 15 14:40:20 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * Version 0.5.5 released.
+
+ * Copyright notices updated to be FSF-style.
+
+ * INSTALL: Some more clarification regarding building just f77.
+
+ * Make-lang.in (F77_SRCS): Update wrt changing some .h to .j.
+ (install-libf77): Fix typo in new parenthetical note.
+
+ * Makefile.in (f/*.o): Update.
+ (CONFIG_H, CONVERT_H, FLAGS_H, GLIMITS_H, HCONFIG_H, RTL_H,
+ TCONFIG_H, TM_H, TREE_H): Update/new symbols.
+ (deps-kinda): More fixes wrt changing some .h to .j.
+ Document and explain this rule a bit better.
+ Accommodate changes in output of gcc -MM.
+
+ * *.h, *.c: Change #include's so proj.h not assumed to #include
+ malloc.h or config.h (now config.j), and so new .j files are
+ used instead of old .h ones.
+
+ * com.c (ffecom_init_0): Use FLOAT_TYPE_SIZE for f2c's
+ TYLONG/TYLOGICAL type codes, to get g77 working on Alpha.
+
+ * com.h: Make all f2c-related integral types "int", not "long
+ int".
+
+ * config.j, convert.j, flags.j, glimits.j, hconfig.j, rtl.j,
+ tconfig.j, tm.j, tree.j: New files wrapping around gbe
+ .h files.
+
+ * config.h, convert.h, flags.h, glimits.h, hconfig.h, rtl.h,
+ tconfig.h, tm.h, tree.h: Deleted so new .j files
+ can #include the gbe files directly, instead of using "../",
+ and thus do better with various kinds of builds.
+
+ * proj.h: Delete unused NO_STDDEF and related stuff.
+
+Tue Feb 14 08:28:08 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * BUGS: Remove item #12, cross-compiling & autoconf scripts
+ reportedly expected to work properly (according to d.love).
+
+ * INSTALL: Add explanation of d.love's patch to config-lang.in.
+ Add explanation of how to install just g77 when gcc already installed.
+ Add note about usability of "-Wall". Add note about bug-
+ reporting.
+
+ * Make-lang.in ($(srcdir)/f/conf-proj): Add comment about why
+ conf-proj.out.
+ (install-libf77): Echo parenthetical note to user about how to do
+ just the (aborted) libf2c installation.
+ (deps-kinda): Update to work with new configuration/build stuff.
+
+ * bad.c (ffebad_finish): Put capitalized "warning:" &c message
+ as prefix on any diagnostic without pointers into source.
+
+ * bad.def (FFEBAD_TOO_BIG_INIT): Add this warning message.
+
+ * config-lang.in: Add Dave Love's patch to catch case where
+ back-end patches not applied and abort configuration.
+
+ * data.c (ffedata_gather_, ffedata_value_): Warn when about
+ to initialize a large aggregate area, due to design flaw resulting
+ in too much time/space used to handle such cases.
+ Use COMMON area name, and first notice of symbol, for multiple-
+ initialization diagnostic, instead of member symbol and unknown
+ location.
+ (FFEDATA_sizeTOO_BIG_INIT_): New macro per above.
+
+Mon Feb 13 13:54:26 1995 Dave Love <d.love@dl.ac.uk>
+
+ * Make-lang.in (F77_SRCS): Use $(srcdir)/f/proj.h.in, not
+ $(srcdir)/f/proj.h for build outside srcdir.
+
+Sun Feb 12 13:37:11 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * ../README.g77: Clarify procedures for unpacking, add asterisks
+ to mark important things the user must do.
+
+ * Fix dates in/add dates to ../README.g77, BUGS, CREDITS, DOC,
+ INSTALL, PROJECTS, README.
+
+Sun Feb 12 00:26:10 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * Version 0.5.4 released.
+
+ * Make-lang.in (f/proj.h): Reproduce this rule here from
+ Makefile.in.
+ ($(srcdir)/f/conf-proj): Put autoconf's stdout in temp file
+ conf-proj.out, then mv to conf-proj only if successful, so
+ conf-proj not touched if autoconf not installed.
+
+ * Makefile.in ($(srcdir)/conf-proj): See Make-lang.in's similar
+ rule.
+
+Sat Feb 11 20:56:02 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * BUGS: Clarify some bugs.
+
+ * DOC: Many improvements and fixes.
+
+ * README: Move bulk of text, edited, to ../README.g77, and
+ replace with pointer to that file.
+
+ * com.c (ffecom_init_0): Comment out warning about sizeof(ftnlen)
+ as per ste.c change. Add text about ASSIGN to help user understand
+ what is being warned about.
+
+ * conf-proj.in: Fix typos in comments.
+
+ * proj.h.in: Add ARRAY_ZERO_SIZE to parallel malloc.h's version,
+ in case it proves to be needed.
+
+ * ste.c: Comment out assertions requiring sizeof(ftnlen) >=
+ sizeof(char *), in the hopes that overflow will never happen.
+ (ffeste_R838): Change assertion to fatal() with at least
+ partially helpful message.
+
+Sat Feb 11 12:38:00 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * com.c (ffecom_vardesc_): Crash if typecode is -1.
+
+ * ste.c (ffeste_io_dolio_): Crash if typecode is -1.
+
+Sat Feb 11 09:51:57 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * ste.c: In I/O code tests for item arrayness, sort of revert
+ to much earlier code that tests original exp, but also check
+ in newer way just in case. Newer way alone treated FOO(1:40)
+ as an array, not sure why older way alone didn't work, but I
+ think maybe it was when diagnosed code was involved, and
+ since there are now checks for error_mark_node, maybe the old
+ way alone would work. But better to be safe; both original
+ ffebld exp _and_ the transformed tree must indicate an array
+ for the size-determination code to be used, else just 1/2 elements
+ assumed. And this text is for EMACS: (foo at bar).
+
+Fri Feb 10 11:05:50 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * ste.c: In many cases, surround statement-expansion code
+ with ffecom_push_calltemps () and ffecom_pop_calltemps ()
+ so COMPLEX-returning functions can have temporaries pushed
+ in "auto-pop" mode and have them auto-popped at the end of
+ the statement.
+
+Wed Feb 8 14:35:10 1995 Dave Love <d.love@dl.ac.uk>
+
+ * runtime/f2c.h.in (ftnlen, ftnint): Make same size as integer.
+
+ * runtime/libI77/err.c (f_init): Thinko in MISSING_FILE_ELEMS
+ conditional.
+ * runtime/libI77/wrtfmt.c (mv_cur): Likewise.
+ * runtime/libI77/wsfe.c (x_putc): Likewise.
+
+ * runtime/libF77/signal_.c (signal_): Return 0 (this is a
+ subroutine).
+
+ * Makefile.in (f/proj.h): Depend on com.h.
+ * Make-lang.in (include/f2c.h): Likewise (and proj.h).
+ (install-libf77): Also install f2c.h.
+
+ * runtime/libI77/Makefile.in (*.o): Add f2c.h dependency.
+ * runtime/libF77/Makefile.in: Likewise.
+
+Wed Feb 8 13:56:47 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * stc.c (ffestc_R501_item): Don't reset kind/where to NONE when
+ setting basictype/kindtype info for symbol, or especially
+ its function/result twin, because kind/where might not be NONE.
+
+Tue Feb 7 14:47:26 1995 Dave Love <d.love@dl.ac.uk>
+
+ * Make-lang.in (include/f2c.h:): Set shell variable src more
+ robustly (independent of whether srcdir is relative or absolute).
+ * Makefile.in (f/proj.h:): Likewise.
+
+ * conf-proj.in: Check need for LAME_ASSERT. Fix indentation in
+ check for LAME_STDIO (cosmetic only with ANSI C).
+
+ * com.h: Extra ...SIZE stuff taken from com.c.
+
+ * com.c (FFECOM_DETERMINE_TYPES): Define before including com.h.
+ (BITS_PER_WORD etc.) Remove and use conditional definitions to com.h.
+
+ * runtime/configure.in: #define FFECOM_DETERMINE_TYPES for com.h in
+ f2c type determination.
+
+ * tm.h: Remove (at least pro tem) because of relative path and use
+ top-level one.
+
+ * Make-lang.in (include/f2c.h:): Set shell variable src more
+ robustly (independent of whether srcdir is relative or absolute).
+ * Makefile.in (f/proj.h:): Likewise.
+
+Mon Feb 6 19:58:32 1995 Dave Love <d.love@dl.ac.uk>
+
+ * g77.c (append_arg): Use K&R declaration for, e.g. SunOS4 build.
+
+Fri Feb 3 20:33:14 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * g77.c (main): Treat -l like filename in terms of -x handling.
+ Rewrite arglist mechanism for ease of maintenance.
+ Make sure every -lf2c is followed by -lm and vice versa.
+
+ * Make-lang.in: Put complete list of sources in F77_SRCS def
+ so changing a .h file, for example, causes rebuild.
+
+ * Makefile.in: Change test for nextstep to m68k-next-nextstep* so
+ all versions of nextstep on m68k get the necessary flag.
+
+Fri Feb 3 19:10:32 1995 Dave Love <d.love@dl.ac.uk>
+
+ * INSTALL: Note about possible conflict with existing libf2c.a and
+ f2c.h.
+
+ * Make-lang.in (f77.distclean): Tidy and move deletion of
+ f/config.cache to mostlyclean.
+ (install-libf77): Test for $(libdir)/libf2c.* and barf if found
+ unless F2CLIBOK defined.
+
+ * runtime/Makefile.in (all): Change path to include directory (and
+ elsewhere).
+ (INCLUDES): Remove (unused/misleading).
+ (distclean): Include f2c.h.
+ (clean): Include config.cache.
+
+ * runtime/libF77/Makefile.in (.SUFFIXES): Correct typo.
+ (ALL_CFLAGS) Fix up include search path to find f2c.h in top level
+ includes always.
+ (all): Depend on f2c.h.
+ * runtime/libI77/Makefile.in (.SUFFIXES): Likewise.
+
+Thu Feb 2 17:17:06 1995 Dave Love <d.love@dl.ac.uk>
+
+ * INSTALL: Note about --srcdir and GNU make.
+
+ * runtime/f2c.h.in (Pad_UDread, ALWAYS_FLUSH): Reomve the #defines
+ per below.
+
+ * runtime/configure.in (Pad_UDread, ALWAYS_FLUSH): Define these
+ here, not in f2c.h as they'r eonly relevant for building.
+ * runtime/configure: Regenerated.
+
+ * config-lang.in: Warn about using GNU make outside source tree
+ since I can't get Irix5 or SunOS4 makes to work in this case.
+
+ * Makefile.in (VPATH): Don't set it here.
+ (srcdir): Make it the normal `.' (overridden) at top level.
+ (all.indirect): New dependency `dircheck'.
+ (f771): Likewise
+ (dircheck): New target for foolproofing.
+ (f/proj.h:): Change finding source.
+ (CONFIG_H): Don't use this as the relative path in the include loses
+ f builddir != srcdir.
+
+ * config.h: Remove per CONFIG_H change above.
+
+ * Make-lang.in (F77_FLAGS_TO_PASS): Remove GCC_FOR_TARGET.
+ (f771:): Pass VPATH, srcdir to sub-make.
+ (f/Makefile:): New target.
+ (stmp-int-hdrs): new variable for cheating build.
+ (f77-runtime:): Alter GCC_FOR_TARGET treatment.
+ (include/f2c.h f/runtime/Makefile:) Likewise.
+ (f77-runtime-unsafe:): New (cheating) target.
+
+Thu Feb 2 12:09:51 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * BUGS: Update regarding losing EQUIVALENCE members in -g, and
+ regarding RS/6000 problems in the back end.
+
+ * CREDITS: Make some changes as requested.
+
+ * com.c (ffecom_member_trunk_): Remove unused static variable.
+ (ffecom_finish_symbol_transform_): Improve comments.
+ (ffecom_let_char_): Fix size of temp address-type var.
+ (ffecom_member_phase2_): Try fixing problem fixed by change
+ to ffecom_transform_equiv_ (f_m_p2_ function currently not used).
+ (ffecom_transform_equiv_): Remove def of unused static variable.
+ Comment-out use of ffecom_member_phase2_, until problems with
+ back end fixed.
+ (ffecom_push_tempvar): Fix assertion to not crash okay code.
+
+ * com.h: Remove old, commented-out code.
+ Add prototype for warning() in back end.
+
+ * ste.c (ffeste_io_dofio_, ffeste_io_dolio_, ffeste_io_douio_,
+ ffeste_io_icilist_): Check correct type of variable for arrayness.
+
+Sun Jan 29 14:41:42 1995 Dave Love <d.love@dl.ac.uk>
+
+ * BUGS: Remove references to my configure bugs; add another.
+
+ * runtime/Makefile.in (AR_FLAGS): Provide default value.
+
+ * runtime/f2c.h.in (integer, logical): Take typedefs from
+ F2C_INTEGER configuration parameter again.
+ (NON_UNIX_STDIO): don't define it.
+
+ * runtime/configure.in: Bring type checks for f2c.h in line with
+ com.h.
+ (MISSING_FILE_ELEMS): New variable to determine whether the relevant
+ elements of the FILE struct exist, independent of NON_UNIX_STDIO.
+ * runtime/libI77/{err,wrtfmt,wsfe}.c (MISSING_FILE_ELEMS): Use new
+ parameter.
+
+ * config-lang.in: Comment out more of f2c rules (c.f. Make-lang.in).
+ (This stuff is relevant iff you gave configure --enable-f2c.)
+ Create f/runtime directory tree iff not building in source
+ directory.
+
+ * Makefile.in (srcdir): Append slash so we get the right value when
+ not building in the source directory. This is a consequence of not
+ building the `f' sources in `f'.
+ (VPATH): Override configure's value for reasons above.
+ (f/proj.h f/conf-proj): New rules to build proj.h by
+ autoconfiguration.
+
+ * proj.h: Rename to proj.h.in for autoconfiguration.
+ * proj.h.in: New as above.
+ * conf-proj conf-proj.in: New files for autoconfiguration.
+
+ * Make-lang.in (include/f2c.h f/runtime/Makefile:): Change the order
+ of setting the sh variables so that the right GCC_FOR_TARGET is
+ used.
+ (f77.*clean:) Add products of new configuration files and make sure
+ all the *clean targets do something (unlike the ones in
+ cp/Make-lange.in).
+
+ * com.h (FFECOM_f2cINTEGER, FFECOM_f2cLOGICAL): Define as long or
+ int appropriately to ensure sizeof(real) == sizeof(integer).
+
+ * PROJECTS: Library section.
+
+ * runtime/libI77/endfile.c: Don't #include sys/types.h conditional
+ on NON_UNIX_STDIO since rawio.h needs size_t.
+ * runtime/libI77/uio.c: #include <sys/types.h> for size_t if not
+ KR_headers.
+
+Wed Jan 25 03:31:51 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * Version 0.5.3 released.
+
+ * INSTALL: Revise.
+
+ * Make-lang.in: Comment out rules for building f2c itself (f/f2c/).
+
+ * README: Revise.
+
+ * com.c (ffecom_init_0): Warn if ftnlen or INTEGER not big enough
+ to hold a char *.
+
+ * gbe/2.6.2.diff: Update.
+
+Mon Jan 23 17:10:49 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * TODO: Remove.
+ BUGS: New file.
+ PROJECTS: New file.
+ CREDITS: New file.
+
+ * cktyps*: Remove.
+ Make-lang.in: Remove cktyps stuff.
+ Makefile.in: Remove cktyps stuff.
+
+ * DOC: Add info on changes for 0.5.3.
+
+ * bad.c: Put "warning:" &c on diagnostic messages.
+ Don't output informational messages if warnings disabled.
+
+Thu Jan 19 12:38:13 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * g77.c: Avoid putting out useless "-xnone -xf77" pairs so
+ larger command lines can be accommodated.
+ Recognize both `-xlang' and `-x lang'.
+ Recognize `-xnone' and `-x none' to mean what it does, instead
+ of treating "none" as any other language.
+ Some minor, slight improvements in the way args are handled
+ (hopefully for clearer, more maintainable code), including
+ consistency checks on arg count just in case.
+
+Wed Jan 18 16:41:57 1995 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * DOC: Explain -fautomatic better.
+
+ * INSTALL: Describe libf2c.a better.
+
+ * Make-lang.in, Makefile.in: Build f771 &c with gcc/ as cd instead
+ of gcc/f/ so debugging info is better (source file tracking).
+ Add new source file type.c.
+
+ * Makefile.in: For nextstep3, link f771 with -segaddr __DATA
+ 6000000. Fix typo. Change deps-kinda target to handle building
+ from gcc/. Update dependencies.
+
+ * bld-op.def, bld.h, bld.c: Remove opBACKEND and all related
+ stuff.
+ Remove consistency tests that cause compiler warnings.
+
+ * cktyps.c: Remove all typing checking.
+
+ * com-rt.def: Change all rttypeFLOAT_ intrinsics to rttypeDOUBLE_,
+ to precisely match how they're declared in libf2c.
+
+ * com.h, com.c: Revise to more elegantly track related stuff
+ in the version of f2c.h used to build libf2c.
+
+ * com.c: Increase FFECOM_sizeMAXSTACKITEM, and if 0 or undefined
+ when checked to determine where to put entity, treat as infinite.
+ Rewrite temporary mechanism to be based on trees instead of
+ ffeinfo stuff, and make it much simpler. Change interface
+ accordingly.
+ Fixes to better track types of things, make appropriate
+ conversions, etc. E.g. when making an arg for a libf2c
+ function, make sure it's of the right type (such as ftnlen).
+ Delete opBACKEND transformation code.
+ (ffecom_init_0): Smoother initialization of types, especially
+ paying attention to using consistent rules for making INTEGER,
+ REAL, DOUBLE PRECISION, etc., and for deciding their "*N"
+ and kind values that will work across all g77 platforms.
+ No longer require per-target configuration info in target.h
+ or config/*/*; use new type module to store size, alignment.
+ (ffecom_member_phase2): Declare COMMON/EQUIVALENCE group members
+ so debugger sees them.
+ (ffecom_finish_progunit): Transform all symbols in program unit,
+ so -g will show they all exist.
+
+ * expr.c (ffeexpr_collapse_substr): Handle strange substring
+ range values.
+
+ * info.h, info.c: Provide connection to new type module.
+ Remove tests that yield compiler warnings.
+
+ * intrin.c (ffeintrin_is_intrinsic): Properly handle deleted
+ intrinsic.
+
+ * lex.c (ffelex_file_fixed): Remove redundant/buggy code.
+
+ * stc.c (ffestc_kindtype_kind_, ffestc_kindtype_star_): Replace
+ boring switch stmt with simple call to new type module. This
+ sort of thing is a reason to get up in the morning.
+
+ * ste.c: Update to handle new interface for
+ ffecom_push/pop_tempvar.
+ Fixes to better track types of things.
+ Fixes to not crash for certain diagnosed constructs.
+ (ffeste_begin_iterdo_): Check only constants for overflow to avoid
+ spurious diagnostics.
+ Don't convert larger integer (say, INTEGER*8) to canonical integer
+ for iteration count.
+
+ * stw.h: Track DO iteration count temporary variable.
+
+ * symbol.c: Remove consistency tests that cause compiler warnings.
+
+ * target.c (ffetarget_aggregate_info): Replace big switch with
+ little call to new type module.
+ (ffetarget_layout): Remove consistency tests that cause
+ compiler warnings.
+ (ffetarget_convert_character1_typeless): Pick up length of
+ typeless type from new type module.
+
+ * target.h: Crash build if target float bit pattern cannot be
+ precisely determined.
+ Remove all the type cruft now determined by ffecom_init_0
+ at invocation time and maintained in new type module.
+ Put casts on second arg of all REAL_VALUE_TO_TARGET_DOUBLE
+ uses so compiler warnings avoided (requires target float bit
+ pattern to be precisely determined, hence code to crash build).
+
+ * top.c: Add inits/terminates for new type module.
+
+ * type.h, type.c: New module.
+
+ * gbe/2.6.2.diff: Remove all patches to files in gcc/config/
+ directory and its subdirectories.
+
+Mon Jan 9 19:23:25 1995 Dave Love <d.love@dl.ac.uk>
+
+ * com.h (FFECOM_F2C_INTEGER_TYPE_NODE): Define and use instead of
+ long_integer_type_node where appropriate.
+
+Tue Jan 3 14:56:18 1995 Dave Love <d.love@dl.ac.uk>
+
+ * com.h: Make ffecom_f2c_logical_type_node long, consistent with
+ integer.
+
+Fri Dec 2 20:07:37 1994 Dave Love <d.love@dl.ac.uk>
+
+ * config-lang.in (stagestuff): Add f2c conditionally.
+ * Make-lang.in: Add f2c and related targets.
+ * f2c: Add the directory.
+
+Fri Nov 25 22:17:26 1994 Dave Love <d.love@dl.ac.uk>
+
+ * Makefile.in (FLAGS_TO_PASS): pass $(CROSS)
+ * Make-lang.in: more changes to runtime targets
+
+Thu Nov 24 18:03:21 1994 Dave Love <d.love@dl.ac.uk>
+
+ * Makefile.in (FLAGS_TO_PASS): define for sub-makes
+
+ * g77.c (main): change f77-cpp-output to f77-cpp-input (.F files)
+
+Wed Nov 23 15:22:53 1994 Dave Love <d.love@dl.ac.uk>
+
+ * bad.c (ffebad_finish): kluge to fool emacs19 into finding errors:
+ add trailing space to <file>:<line>:
+
+Tue Nov 22 11:30:50 1994 Dave Love <d.love@dl.ac.uk>
+
+ * runtime/libF77/signal_.c (RETSIGTYPE): added
+
+Mon Nov 21 13:04:13 1994 Dave Love <d.love@dl.ac.uk>
+
+ * Makefile.in (compiler): add runtime
+
+ * config-lang.in (stagestuff): add libf2c.a to stagestuff
+
+ * Make-lang.in:
+ G77STAGESTUFF <- MORESTAGESTUFF
+ f77-runtime: new target, plus supporting ones
+
+ * runtime: add the directory, containing libI77, libF77 and autoconf
+ stuff
+
+ * g++.1: remove
+
+ * g77.1: minor fixes
+
+Thu Nov 17 15:18:05 1994 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * Version 0.5.2 released.
+
+ * bad.def: Modify wording of FFEBAD_UNIMPL_STMT to indicate
+ that it covers a wide array of possible problems (that, someday,
+ should be handled via separate diagnostics).
+
+ * lex.c: Allow $ in identifiers if -fdollar-ok.
+ * top.c: Support -fdollar-ok.
+ * top.h: Support -fdollar-ok.
+ * target.h: Support -fdollar-ok.
+ * DOC: Describe -fdollar-ok.
+
+ * std.c (ffestd_R1229_finish): Fix bug so stand-alone build works.
+ * ste.c (ffeste_R819A): Fix bug so stand-alone build works.
+
+ * Make: Improvements for stand-alone build.
+
+ * Makefile.in: Fix copyright text at top of file.
+
+ * LINK, SRCS, UNLINK: Removed. Not particularly useful now that
+ g77 sources live in their own subdirectory.
+
+ * g77.c (main): Cast arg to bzero to avoid warning. (This is
+ identical to Kenner's fix to cp/g++.c.)
+
+ * gbe/: New subdirectory, to contain .diff files for various
+ versions of the GNU CC back end.
+
+ * gbe/README: New file.
+ * gbe/2.6.2.diff: New file.
+
+Tue Nov 8 10:23:10 1994 Dave Love <d.love@dl.ac.uk>
+
+ * Make-lang.in: don't install as f77 as well as g77 to avoid
+ confusion with system's compiler (especially while testing)
+
+ * g77.c (main): use -lf2c and -lm; fix sense of test for .f/.F files
+
+Fri Oct 28 09:45:00 1994 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * Version 0.5.1 released.
+
+ * gcc.c: Invoke f771 instead of f-771.
+
+Fri Oct 28 02:00:44 1994 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * Version 0.5.0 released.
+
+Fri Oct 14 15:03:35 1994 Craig Burley (burley@gnu.ai.mit.edu)
+
+ * Makefile.in: Handle the Fortran-77 front-end in a subdirectory.
+ * f-*: Move Fortran-77 front-end to f/*.
+
+Local Variables:
+add-log-time-format: current-time-string
+End:
diff --git a/contrib/gcc/f/Make-lang.in b/contrib/gcc/f/Make-lang.in
index a531abb..f9744d7 100644
--- a/contrib/gcc/f/Make-lang.in
+++ b/contrib/gcc/f/Make-lang.in
@@ -1,5 +1,5 @@
# Top level makefile fragment for GNU Fortran. -*-makefile-*-
-# Copyright (C) 1995-1998 Free Software Foundation, Inc.
+# Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001 Free Software Foundation, Inc.
#This file is part of GNU Fortran.
@@ -24,7 +24,7 @@
# foo.all.build, foo.all.cross, foo.start.encap, foo.rest.encap,
# foo.info, foo.dvi,
# foo.install-normal, foo.install-common, foo.install-info, foo.install-man,
-# foo.uninstall, foo.distdir,
+# foo.uninstall,
# foo.mostlyclean, foo.clean, foo.distclean, foo.extraclean,
# foo.maintainer-clean, foo.stage1, foo.stage2, foo.stage3, foo.stage4
#
@@ -39,10 +39,16 @@
# $(srcdir) must be set to the gcc/ source directory (not gcc/f/).
#
# Actual name to use when installing a native compiler.
-G77_INSTALL_NAME = `t='$(program_transform_name)'; echo g77 | sed $$t`
+G77_INSTALL_NAME = `echo g77|sed '$(program_transform_name)'`
# Actual name to use when installing a cross-compiler.
-G77_CROSS_NAME = `t='$(program_transform_cross_name)'; echo g77 | sed $$t`
+G77_CROSS_NAME = `echo g77|sed '$(program_transform_cross_name)'`
+
+# Some versions of `touch' (such as the version on Solaris 2.8)
+# do not correctly set the timestamp due to buggy versions of `utime'
+# in the kernel. So, we use `echo' instead.
+STAMP = echo timestamp >
+
#
# Define the names for selecting f77 in LANGUAGES.
# Note that it would be nice to move the dependency on g77
@@ -56,156 +62,80 @@ F77 f77: f771$(exeext)
f77.install-normal \
f77.install-common f77.install-info f77.install-man \
f77.uninstall f77.mostlyclean f77.clean f77.distclean \
- f77.extraclean f77.maintainer-clean f77.distdir f77.rebuilt \
+ f77.extraclean f77.maintainer-clean f77.rebuilt \
f77.stage1 f77.stage2 f77.stage3 f77.stage4
-g77spec.o: $(srcdir)/f/g77spec.c $(srcdir)/f/version.h
- case "$(LANGUAGES)" in \
- *[fF]77*) touch lang-f77;; \
- *) rm -f lang-f77;; \
- esac
- if [ -f lang-f77 ]; then \
- $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) $(srcdir)/f/g77spec.c; \
- else true; fi
+g77spec.o: $(srcdir)/f/g77spec.c $(srcdir)/f/version.h $(SYSTEM_H) $(GCC_H) \
+ $(CONFIG_H)
+ (SHLIB_LINK='$(SHLIB_LINK)' \
+ SHLIB_MULTILIB='$(SHLIB_MULTILIB)'; \
+ $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(DRIVER_DEFINES) \
+ $(INCLUDES) $(srcdir)/f/g77spec.c)
g77version.o: $(srcdir)/f/version.c
- case "$(LANGUAGES)" in \
- *[fF]77*) touch lang-f77;; \
- *) rm -f lang-f77;; \
- esac
- if [ -f lang-f77 ]; then \
- $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -o g77version.o \
- $(srcdir)/f/version.c; \
- else true; fi
+ $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) -o g77version.o \
+ $(srcdir)/f/version.c
# Create the compiler driver for g77.
g77$(exeext): gcc.o g77spec.o g77version.o version.o prefix.o intl.o \
$(LIBDEPS) $(EXTRA_GCC_OBJS)
- if [ -f lang-f77 ]; then \
- $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ gcc.o g77spec.o g77version.o \
- version.o prefix.o intl.o $(EXTRA_GCC_OBJS) $(LIBS); \
- else true; fi
+ $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ gcc.o g77spec.o g77version.o \
+ version.o prefix.o intl.o $(EXTRA_GCC_OBJS) $(LIBS)
# Create a version of the g77 driver which calls the cross-compiler.
g77-cross$(exeext): g77$(exeext)
- if [ -f lang-f77 ]; then \
- rm -f g77-cross$(exeext); \
- cp g77$(exeext) g77-cross$(exeext); \
- else true; fi
+ rm -f g77-cross$(exeext); \
+ cp g77$(exeext) g77-cross$(exeext)
+
+# The compiler itself.
+
+F77_OBJS = f/bad.o f/bit.o f/bld.o f/com.o f/data.o f/equiv.o f/expr.o \
+ f/global.o f/implic.o f/info.o f/intrin.o f/lab.o f/lex.o f/malloc.o \
+ f/name.o f/parse.o f/src.o f/st.o f/sta.o f/stb.o f/stc.o \
+ f/std.o f/ste.o f/storag.o f/stp.o f/str.o f/sts.o f/stt.o f/stu.o \
+ f/stv.o f/stw.o f/symbol.o f/target.o f/top.o f/type.o f/version.o f/where.o
+
+# Use loose warnings for this front end.
+f-warn =
+
+f771$(exeext): $(F77_OBJS) $(BACKEND) $(LIBDEPS)
+ rm -f f771$(exeext)
+ $(CC) $(ALL_CFLAGS) $(LDFLAGS) -o $@ $(F77_OBJS) $(BACKEND) $(LIBS)
+
+# Keyword tables.
+f/stamp-str: f/str-1t.h f/str-1t.j f/str-2t.h f/str-2t.j \
+ f/str-fo.h f/str-fo.j f/str-io.h f/str-io.j f/str-nq.h f/str-nq.j \
+ f/str-op.h f/str-op.j f/str-ot.h f/str-ot.j
+ $(STAMP) f/stamp-str
+
+f/str-1t.h f/str-1t.j: f/fini$(build_exeext) f/str-1t.fin
+ ./f/fini$(build_exeext) $(srcdir)/f/str-1t.fin f/str-1t.j f/str-1t.h
+
+f/str-2t.h f/str-2t.j: f/fini$(build_exeext) f/str-2t.fin
+ ./f/fini$(build_exeext) $(srcdir)/f/str-2t.fin f/str-2t.j f/str-2t.h
+
+f/str-fo.h f/str-fo.j: f/fini$(build_exeext) f/str-fo.fin
+ ./f/fini$(build_exeext) $(srcdir)/f/str-fo.fin f/str-fo.j f/str-fo.h
+
+f/str-io.h f/str-io.j: f/fini$(build_exeext) f/str-io.fin
+ ./f/fini$(build_exeext) $(srcdir)/f/str-io.fin f/str-io.j f/str-io.h
+
+f/str-nq.h f/str-nq.j: f/fini$(build_exeext) f/str-nq.fin
+ ./f/fini$(build_exeext) $(srcdir)/f/str-nq.fin f/str-nq.j f/str-nq.h
+
+f/str-op.h f/str-op.j: f/fini$(build_exeext) f/str-op.fin
+ ./f/fini$(build_exeext) $(srcdir)/f/str-op.fin f/str-op.j f/str-op.h
+
+f/str-ot.h f/str-ot.j: f/fini$(build_exeext) f/str-ot.fin
+ ./f/fini$(build_exeext) $(srcdir)/f/str-ot.fin f/str-ot.j f/str-ot.h
+
+f/fini$(build_exeext): f/fini.o $(HOST_LIBDEPS)
+ $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o f/fini$(build_exeext) \
+ f/fini.o $(HOST_LIBS)
-F77_SRCS = \
- $(srcdir)/f/assert.j \
- $(srcdir)/f/bad.c \
- $(srcdir)/f/bad.def \
- $(srcdir)/f/bad.h \
- $(srcdir)/f/bit.c \
- $(srcdir)/f/bit.h \
- $(srcdir)/f/bld-op.def \
- $(srcdir)/f/bld.c \
- $(srcdir)/f/bld.h \
- $(srcdir)/f/com-rt.def \
- $(srcdir)/f/com.c \
- $(srcdir)/f/com.h \
- $(srcdir)/f/config.j \
- $(srcdir)/f/convert.j \
- $(srcdir)/f/data.c \
- $(srcdir)/f/data.h \
- $(srcdir)/f/equiv.c \
- $(srcdir)/f/equiv.h \
- $(srcdir)/f/expr.c \
- $(srcdir)/f/expr.h \
- $(srcdir)/f/fini.c \
- $(srcdir)/f/flags.j \
- $(srcdir)/f/glimits.j \
- $(srcdir)/f/global.c \
- $(srcdir)/f/global.h \
- $(srcdir)/f/hconfig.j \
- $(srcdir)/f/implic.c \
- $(srcdir)/f/implic.h \
- $(srcdir)/f/input.j \
- $(srcdir)/f/info-b.def \
- $(srcdir)/f/info-k.def \
- $(srcdir)/f/info-w.def \
- $(srcdir)/f/info.c \
- $(srcdir)/f/info.h \
- $(srcdir)/f/intrin.c \
- $(srcdir)/f/intrin.def \
- $(srcdir)/f/intrin.h \
- $(srcdir)/f/lab.c \
- $(srcdir)/f/lab.h \
- $(srcdir)/f/lex.c \
- $(srcdir)/f/lex.h \
- $(srcdir)/f/malloc.c \
- $(srcdir)/f/malloc.h \
- $(srcdir)/f/name.c \
- $(srcdir)/f/name.h \
- $(srcdir)/f/output.j \
- $(srcdir)/f/parse.c \
- $(srcdir)/f/proj.c \
- $(srcdir)/f/proj.h \
- $(srcdir)/f/rtl.j \
- $(srcdir)/f/src.c \
- $(srcdir)/f/src.h \
- $(srcdir)/f/st.c \
- $(srcdir)/f/st.h \
- $(srcdir)/f/sta.c \
- $(srcdir)/f/sta.h \
- $(srcdir)/f/stb.c \
- $(srcdir)/f/stb.h \
- $(srcdir)/f/stc.c \
- $(srcdir)/f/stc.h \
- $(srcdir)/f/std.c \
- $(srcdir)/f/std.h \
- $(srcdir)/f/ste.c \
- $(srcdir)/f/ste.h \
- $(srcdir)/f/storag.c \
- $(srcdir)/f/storag.h \
- $(srcdir)/f/stp.c \
- $(srcdir)/f/stp.h \
- $(srcdir)/f/str-1t.fin \
- $(srcdir)/f/str-2t.fin \
- $(srcdir)/f/str-fo.fin \
- $(srcdir)/f/str-io.fin \
- $(srcdir)/f/str-nq.fin \
- $(srcdir)/f/str-op.fin \
- $(srcdir)/f/str-ot.fin \
- $(srcdir)/f/str.c \
- $(srcdir)/f/str.h \
- $(srcdir)/f/sts.c \
- $(srcdir)/f/sts.h \
- $(srcdir)/f/stt.c \
- $(srcdir)/f/stt.h \
- $(srcdir)/f/stu.c \
- $(srcdir)/f/stu.h \
- $(srcdir)/f/stv.c \
- $(srcdir)/f/stv.h \
- $(srcdir)/f/stw.c \
- $(srcdir)/f/stw.h \
- $(srcdir)/f/symbol.c \
- $(srcdir)/f/symbol.def \
- $(srcdir)/f/symbol.h \
- $(srcdir)/f/system.j \
- $(srcdir)/f/target.c \
- $(srcdir)/f/target.h \
- $(srcdir)/f/tconfig.j \
- $(srcdir)/f/tm.j \
- $(srcdir)/f/top.c \
- $(srcdir)/f/top.h \
- $(srcdir)/f/toplev.j \
- $(srcdir)/f/tree.j \
- $(srcdir)/f/type.c \
- $(srcdir)/f/type.h \
- $(srcdir)/f/version.c \
- $(srcdir)/f/version.h \
- $(srcdir)/f/where.c \
- $(srcdir)/f/where.h
-
-f771$(exeext): $(P) $(F77_SRCS) $(LIBDEPS) stamp-objlist
- touch lang-f77
- cd f; $(MAKE) $(FLAGS_TO_PASS) \
- HOST_CC="`case '$(HOST_CC)' in stage*) echo '$(HOST_CC)' | sed -e 's|stage|../stage|g';; *) echo '$(HOST_CC)';; esac`" \
- HOST_CFLAGS="$(HOST_CFLAGS)" HOST_CPPFLAGS="$(HOST_CPPFLAGS)" \
- ../f771$(exeext)
+f/fini.o:
+ $(HOST_CC) $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) \
+ -c $(srcdir)/f/fini.c $(OUTPUT_OPTION)
#
# Build hooks:
@@ -215,41 +145,37 @@ f77.all.cross: g77-cross$(exeext)
f77.start.encap: g77$(exeext)
f77.rest.encap:
-f77.info: f/g77.info
+f77.info: $(srcdir)/f/g77.info
f77.dvi: f/g77.dvi
+f77.generated-manpages: $(srcdir)/f/g77.1
# g77 documentation.
-f/g77.info: $(srcdir)/f/g77.texi $(srcdir)/f/bugs.texi \
- $(srcdir)/f/ffe.texi \
- $(srcdir)/f/g77install.texi $(srcdir)/f/news.texi \
- $(srcdir)/f/intdoc.texi $(srcdir)/f/root.texi
- case "$(LANGUAGES)" in \
- *[fF]77*) touch lang-f77;; \
- *) rm -f lang-f77;; \
- esac
- if [ -f lang-f77 ]; then \
+$(srcdir)/f/g77.info: $(srcdir)/f/g77.texi $(srcdir)/f/bugs.texi \
+ $(srcdir)/f/ffe.texi $(srcdir)/f/invoke.texi \
+ $(srcdir)/f/news.texi $(srcdir)/f/intdoc.texi \
+ $(srcdir)/f/root.texi $(srcdir)/doc/include/fdl.texi \
+ $(srcdir)/doc/include/gpl.texi \
+ $(srcdir)/doc/include/funding.texi
+ if [ x$(BUILD_INFO) = xinfo ]; then \
rm -f $(srcdir)/f/g77.info-*; \
- $(MAKEINFO) -I$(srcdir)/f -o f/g77.info $(srcdir)/f/g77.texi; \
+ cd $(srcdir)/f && $(MAKEINFO) -I../doc/include -o g77.info g77.texi; \
else true; fi
f/g77.dvi: $(srcdir)/f/g77.texi $(srcdir)/f/bugs.texi \
- $(srcdir)/f/ffe.texi \
- $(srcdir)/f/g77install.texi $(srcdir)/f/news.texi \
- $(srcdir)/f/intdoc.texi $(srcdir)/f/root.texi
- case "$(LANGUAGES)" in \
- *[fF]77*) touch lang-f77;; \
- *) rm -f lang-f77;; \
- esac
-# `tex2dvi' was used below, but the Texinfo 3.12 one won't work properly
-# with the include files from $(srcdir). This use of TEXINPUTS may not
-# be universally valid. `$(TEX)' should be used if it gets defined in
-# gcc/Makefile.in.
- if [ -f lang-f77 ]; then \
- TEXINPUTS=$(srcdir)/f:$$TEXINPUTS tex $(srcdir)/f/g77.texi; \
- texindex g77.??; \
- TEXINPUTS=$(srcdir)/f:$$TEXINPUTS tex $(srcdir)/f/g77.texi; \
- mv g77.dvi f; \
- else true; fi
+ $(srcdir)/f/ffe.texi $(srcdir)/f/invoke.texi \
+ $(srcdir)/f/news.texi $(srcdir)/f/intdoc.texi \
+ $(srcdir)/f/root.texi $(srcdir)/doc/include/fdl.texi \
+ $(srcdir)/doc/include/gpl.texi \
+ $(srcdir)/doc/include/funding.texi
+ s=`cd $(srcdir); pwd`; export s; \
+ cd f && $(TEXI2DVI) -I $$s/doc/include $$s/f/g77.texi
+
+$(srcdir)/f/g77.1: $(srcdir)/f/invoke.texi
+ -$(TEXI2POD) < $(srcdir)/f/invoke.texi > f/g77.pod; \
+ ($(POD2MAN) --section=1 f/g77.pod > f/g77.1.T$$$$ && \
+ mv -f f/g77.1.T$$$$ $(srcdir)/f/g77.1) || \
+ (rm -f f/g77.1.T$$$$ && exit 1); \
+ rm -f f/g77.pod; \
# This dance is all about producing accurate documentation for g77's
# intrinsics with minimum fuss. f/ansify appends "\n\" to C strings
@@ -270,34 +196,43 @@ f/g77.dvi: $(srcdir)/f/g77.texi $(srcdir)/f/bugs.texi \
# itself, which uses f/intrin.def; in fact, many bugs in f/intrin.def have
# been found only upon reading the documentation that was automatically
# produced from it.
-$(srcdir)/f/intdoc.texi: f/intdoc.c f/intdoc.in f/ansify.c f/intrin.def f/intrin.h
- case "$(LANGUAGES)" in \
- *[fF]77*) touch lang-f77;; \
- *) rm -f lang-f77;; \
- esac
- if [ -f lang-f77 ]; then \
+
+# If the documentation files depended on executables in the build
+# tree, there'd be no way to ship a source tree with the documentation
+# already generated such that `make' wouldn't attempt to rebuilt it.
+# So, we punt and arrange for the documentation files to depend on the
+# dependencies of the executables, not on the executables themselves.
+# But then, we have to build the executables explicitly in their build
+# rules.
+
+INTDOC_DEPS = $(srcdir)/f/intdoc.c $(srcdir)/f/intrin.h $(srcdir)/f/intrin.def
+
+$(srcdir)/f/intdoc.texi: $(INTDOC_DEPS) $(srcdir)/f/intdoc.in
+ $(MAKE) f/intdoc$(build_exeext)
+ f/intdoc$(build_exeext) > $(srcdir)/f/intdoc.texi
+
+f/intdoc$(build_exeext): $(INTDOC_DEPS) f/intdoc.h0 hconfig.h $(SYSTEM_H) \
+ $(HOST_LIBDEPS)
$(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) $(INCLUDES) \
- `echo $(srcdir)/f/ansify.c | sed 's,^\./,,'` -o f/ansify; \
- f/ansify < $(srcdir)/f/intdoc.in > f/intdoc.h0 $(srcdir)/f/intdoc.in; \
- $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) $(INCLUDES) -I./f \
- `echo $(srcdir)/f/intdoc.c | sed 's,^\./,,'` -o f/intdoc; \
- f/intdoc > $(srcdir)/f/intdoc.texi; \
- rm f/intdoc f/ansify f/intdoc.h0; \
- else true; fi
+ $(srcdir)/f/intdoc.c $(HOST_LIBS) -o f/intdoc$(build_exeext)
+
+f/intdoc.h0: f/intdoc.in f/ansify$(build_exeext)
+ f/ansify$(build_exeext) $(srcdir)/f/intdoc.in \
+ < $(srcdir)/f/intdoc.in > f/intdoc.h0
+
+f/ansify$(build_exeext): f/ansify.c hconfig.h $(SYSTEM_H)
+ $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) $(INCLUDES) \
+ $(srcdir)/f/ansify.c -o f/ansify$(build_exeext)
$(srcdir)/f/BUGS: f/bugs0.texi f/bugs.texi f/root.texi
cd $(srcdir)/f; $(MAKEINFO) -D BUGSONLY --no-header --no-split \
--no-validate -o BUGS bugs0.texi
-$(srcdir)/f/INSTALL: f/install0.texi f/g77install.texi f/root.texi
- cd $(srcdir)/f; $(MAKEINFO) -D INSTALLONLY --no-header --no-split \
- --no-validate -o INSTALL install0.texi
-
$(srcdir)/f/NEWS: f/news0.texi f/news.texi f/root.texi
cd $(srcdir)/f; $(MAKEINFO) -D NEWSONLY --no-header --no-split \
--no-validate -o NEWS news0.texi
-f77.rebuilt: f/g77.info $(srcdir)/f/BUGS $(srcdir)/f/INSTALL \
+f77.rebuilt: f/g77.info $(srcdir)/f/BUGS \
$(srcdir)/f/NEWS
#
@@ -308,14 +243,8 @@ f77.install-normal:
# Install the driver program as $(target)-g77
# and also as either g77 (if native) or $(tooldir)/bin/g77.
-# Make sure `installdirs' target (from gcc Makefile) has been
-# run, since we use libsubdir to store our `flag' file, lang-f77.
f77.install-common: installdirs
- case "$(LANGUAGES)" in \
- *[fF]77*) touch $(libsubdir)/lang-f77;; \
- *) rm -f $(libsubdir)/lang-f77;; \
- esac
- -if [ -f $(libsubdir)/lang-f77 -a -f f771$(exeext) ] ; then \
+ -if [ -f f771$(exeext) ] ; then \
if [ -f g77-cross$(exeext) ] ; then \
rm -f $(bindir)/$(G77_CROSS_NAME)$(exeext); \
$(INSTALL_PROGRAM) g77-cross$(exeext) $(bindir)/$(G77_CROSS_NAME)$(exeext); \
@@ -328,81 +257,55 @@ f77.install-common: installdirs
else true; fi
@if [ -f f77-install-ok -o -f $(srcdir)/f77-install-ok ]; then \
echo ''; \
- echo 'Warning: egcs no longer installs an f77 command.'; \
+ echo 'Warning: gcc no longer installs an f77 command.'; \
echo ' You must do so yourself. For more information,'; \
- echo ' read "Distributing Binaries" in the egcs g77 docs.'; \
+ echo ' read "Distributing Binaries" in the g77 docs.'; \
echo ' (To turn off this warning, delete the file'; \
echo ' f77-install-ok in the source or build directory.)'; \
echo ''; \
else true; fi
- rm -f $(libsubdir)/lang-f77
# $(INSTALL_DATA) might be a relative pathname, so we can't cd into srcdir
# to do the install. The sed rule was copied from stmp-int-hdrs.
-# Make sure `installdirs' target (from gcc Makefile) has been
-# run, since we use libsubdir to store our `flag' file, lang-f77.
f77.install-info: f77.info installdirs
- case "$(LANGUAGES)" in \
- *[fF]77*) touch $(libsubdir)/lang-f77;; \
- *) rm -f $(libsubdir)/lang-f77;; \
- esac
- if [ -f $(libsubdir)/lang-f77 -a -f f/g77.info ] ; then \
+ if [ -f $(srcdir)/f/g77.info ] ; then \
rm -f $(infodir)/g77.info*; \
- for f in f/g77.info*; do \
+ for f in $(srcdir)/f/g77.info*; do \
realfile=`echo $$f | sed -e 's|.*/\([^/]*\)$$|\1|'`; \
$(INSTALL_DATA) $$f $(infodir)/$$realfile; \
done; \
chmod a-x $(infodir)/g77.info*; \
else true; fi
- @if [ -f $(libsubdir)/lang-f77 -a -f $(srcdir)/f/g77.info ] ; then \
+ @if [ -f $(srcdir)/f/g77.info ] ; then \
if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \
echo " install-info --info-dir=$(infodir) $(infodir)/g77.info"; \
install-info --info-dir=$(infodir) $(infodir)/g77.info || : ; \
else : ; fi; \
else : ; fi
- rm -f $(libsubdir)/lang-f77
-
-# Make sure `installdirs' target (from gcc Makefile) has been
-# run, since we use libsubdir to store our `flag' file, lang-f77.
-f77.install-man: $(srcdir)/f/g77.1 installdirs
- case "$(LANGUAGES)" in \
- *[fF]77*) touch $(libsubdir)/lang-f77;; \
- *) rm -f $(libsubdir)/lang-f77;; \
- esac
- -if [ -f $(libsubdir)/lang-f77 -a -f f771$(exeext) ] ; then \
+
+f77.install-man: $(GENERATED_MANPAGES) installdirs
+ -if [ -f f771$(exeext) ] ; then \
if [ -f g77-cross$(exeext) ] ; then \
- rm -f $(man1dir)/$(G77_CROSS_NAME)$(manext); \
- $(INSTALL_DATA) $(srcdir)/f/g77.1 $(man1dir)/$(G77_CROSS_NAME)$(manext); \
- chmod a-x $(man1dir)/$(G77_CROSS_NAME)$(manext); \
+ rm -f $(man1dir)/$(G77_CROSS_NAME)$(man1ext); \
+ $(INSTALL_DATA) $(srcdir)/f/g77.1 $(man1dir)/$(G77_CROSS_NAME)$(man1ext); \
+ chmod a-x $(man1dir)/$(G77_CROSS_NAME)$(man1ext); \
else \
- rm -f $(man1dir)/$(G77_INSTALL_NAME)$(manext); \
- $(INSTALL_DATA) $(srcdir)/f/g77.1 $(man1dir)/$(G77_INSTALL_NAME)$(manext); \
- chmod a-x $(man1dir)/$(G77_INSTALL_NAME)$(manext); \
+ rm -f $(man1dir)/$(G77_INSTALL_NAME)$(man1ext); \
+ $(INSTALL_DATA) $(srcdir)/f/g77.1 $(man1dir)/$(G77_INSTALL_NAME)$(man1ext); \
+ chmod a-x $(man1dir)/$(G77_INSTALL_NAME)$(man1ext); \
fi; \
else true; fi
- rm -f $(libsubdir)/lang-f77
-# Make sure `installdirs' target (from gcc Makefile) has been
-# run, since we use libsubdir to store our `flag' file, lang-f77.
f77.uninstall: installdirs
- case "$(LANGUAGES)" in \
- *[fF]77*) touch $(libsubdir)/lang-f77;; \
- *) rm -f $(libsubdir)/lang-f77;; \
- esac
- @if [ -f $(libsubdir)/lang-f77 ] ; then \
- if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \
- echo " install-info --delete --info-dir=$(infodir) $(infodir)/g77.info"; \
- install-info --delete --info-dir=$(infodir) $(infodir)/g77.info || : ; \
- else : ; fi; \
+ if $(SHELL) -c 'install-info --version | sed 1q | fgrep -s -v -i debian' >/dev/null 2>&1; then \
+ echo " install-info --delete --info-dir=$(infodir) $(infodir)/g77.info"; \
+ install-info --delete --info-dir=$(infodir) $(infodir)/g77.info || : ; \
else : ; fi
- -if [ -f $(libsubdir)/lang-f77 ]; then \
- rm -rf $(bindir)/$(G77_INSTALL_NAME)$(exeext); \
- rm -rf $(bindir)/$(G77_CROSS_NAME)$(exeext); \
- rm -rf $(man1dir)/$(G77_INSTALL_NAME)$(manext); \
- rm -rf $(man1dir)/$(G77_CROSS_NAME)$(manext); \
- rm -rf $(infodir)/g77.info*; \
- fi
- rm -f $(libsubdir)/lang-f77
+ rm -rf $(bindir)/$(G77_INSTALL_NAME)$(exeext); \
+ rm -rf $(bindir)/$(G77_CROSS_NAME)$(exeext); \
+ rm -rf $(man1dir)/$(G77_INSTALL_NAME)$(man1ext); \
+ rm -rf $(man1dir)/$(G77_CROSS_NAME)$(man1ext); \
+ rm -rf $(infodir)/g77.info*
#
# Clean hooks:
# A lot of the ancillary files are deleted by the main makefile.
@@ -410,54 +313,215 @@ f77.uninstall: installdirs
f77.mostlyclean:
-rm -f f/*$(objext)
- -rm -f f/fini f/stamp-str f/str-*.h f/str-*.j
- -rm -f f/intdoc f/ansify f/intdoc.h0
+ -rm -f f/fini$(build_exeext) f/stamp-str f/str-*.h f/str-*.j
+ -rm -f f/intdoc$(build_exeext) f/ansify$(build_exeext) f/intdoc.h0
-rm -f g77.aux g77.cps g77.ky g77.toc g77.vr g77.fn g77.kys \
g77.pg g77.tp g77.vrs g77.cp g77.fns g77.log g77.pgs g77.tps
f77.clean:
-rm -f g77spec.o g77version.o
f77.distclean:
- -rm -f lang-f77 f/Makefile
+ -rm -f f/Makefile
f77.extraclean:
f77.maintainer-clean:
- -rm -f f/g77.info* f/g77.*aux f/TAGS f/BUGS f/INSTALL f/NEWS f/intdoc.texi
+ -rm -f f/g77.info* f/g77.*aux f/TAGS f/BUGS f/NEWS f/intdoc.texi
#
# Stage hooks:
# The main makefile has already created stage?/f.
-G77STAGESTUFF = f/*$(objext) f/fini f/stamp-str f/str-*.h f/str-*.j \
- lang-f77 g77spec.o g77version.o
+G77STAGESTUFF = f/*$(objext) f/fini$(build_exeext) f/stamp-str \
+ f/str-*.h f/str-*.j g77spec.o g77version.o
f77.stage1: stage1-start
- -if [ -f lang-f77 ]; then \
- mv -f $(G77STAGESTUFF) stage1/f; \
- fi
+ -mv -f $(G77STAGESTUFF) stage1/f
+
f77.stage2: stage2-start
- -if [ -f lang-f77 ]; then \
- mv -f $(G77STAGESTUFF) stage2/f; \
- fi
+ -mv -f $(G77STAGESTUFF) stage2/f
+
f77.stage3: stage3-start
- -if [ -f lang-f77 ]; then \
- mv -f $(G77STAGESTUFF) stage3/f; \
- fi
+ -mv -f $(G77STAGESTUFF) stage3/f
+
f77.stage4: stage4-start
- -if [ -f lang-f77 ]; then \
- mv -f $(G77STAGESTUFF) stage4/f; \
- fi
+ -mv -f $(G77STAGESTUFF) stage4/f
+
#
-# Maintenance hooks:
-
-# This target creates the files that can be rebuilt, but go in the
-# distribution anyway. It then copies the files to the distdir directory.
-f77.distdir: f77.rebuilt
- case "$(LANGUAGES)" in \
- *[fF]77*) touch lang-f77;; \
- *) rm -f lang-f77;; \
- esac
- -if [ -f lang-f77 ]; then \
- mkdir tmp/f; \
- cd f; \
- for file in *[0-9a-zA-Z+]; do \
- $(LN_S) $$file ../tmp/f; \
- done; \
- fi
+# .o: .h dependencies.
+
+f/bad.o: f/bad.c f/proj.h $(CONFIG_H) $(SYSTEM_H) f/bad.h f/bad.def f/where.h \
+ glimits.h f/top.h f/malloc.h flags.h f/com.h f/com-rt.def $(TREE_H) f/bld.h \
+ f/bld-op.def f/bit.h f/info.h f/info-b.def f/info-k.def f/info-w.def \
+ f/target.h f/lex.h f/type.h f/intrin.h f/intrin.def f/lab.h f/symbol.h \
+ f/symbol.def f/equiv.h f/storag.h f/global.h f/name.h toplev.h intl.h
+f/bit.o: f/bit.c f/proj.h $(CONFIG_H) $(SYSTEM_H) glimits.h f/bit.h \
+ f/malloc.h
+f/bld.o: f/bld.c f/proj.h $(CONFIG_H) $(SYSTEM_H) f/bld.h f/bld-op.def f/bit.h \
+ f/malloc.h f/com.h f/com-rt.def $(TREE_H) f/info.h f/info-b.def f/info-k.def \
+ f/info-w.def f/target.h f/bad.h f/bad.def f/where.h glimits.h f/top.h f/lex.h \
+ f/type.h f/lab.h f/storag.h f/symbol.h f/symbol.def f/equiv.h f/global.h \
+ f/name.h f/intrin.h f/intrin.def
+f/com.o: f/com.c f/proj.h $(CONFIG_H) $(SYSTEM_H) flags.h $(RTL_H) $(TREE_H) \
+ output.h convert.h f/com.h f/com-rt.def f/bld.h f/bld-op.def f/bit.h \
+ f/malloc.h f/info.h f/info-b.def f/info-k.def f/info-w.def f/target.h f/bad.h \
+ f/bad.def f/where.h glimits.h f/top.h f/lex.h f/type.h f/intrin.h \
+ f/intrin.def f/lab.h f/symbol.h f/symbol.def f/equiv.h f/storag.h f/global.h \
+ f/name.h f/expr.h f/implic.h f/src.h f/st.h $(GGC_H) toplev.h diagnostic.h \
+ langhooks.h langhooks-def.h intl.h
+f/data.o: f/data.c f/proj.h $(CONFIG_H) $(SYSTEM_H) f/data.h f/bld.h f/bld-op.def \
+ f/bit.h f/malloc.h f/com.h f/com-rt.def $(TREE_H) f/info.h f/info-b.def \
+ f/info-k.def f/info-w.def f/target.h f/bad.h f/bad.def f/where.h glimits.h \
+ f/top.h f/lex.h f/type.h f/lab.h f/storag.h f/symbol.h f/symbol.def f/equiv.h \
+ f/global.h f/name.h f/intrin.h f/intrin.def f/expr.h f/st.h
+f/equiv.o: f/equiv.c f/proj.h $(CONFIG_H) $(SYSTEM_H) f/equiv.h f/bld.h \
+ f/bld-op.def f/bit.h f/malloc.h f/com.h f/com-rt.def $(TREE_H) f/info.h \
+ f/info-b.def f/info-k.def f/info-w.def f/target.h f/bad.h f/bad.def f/where.h \
+ glimits.h f/top.h f/lex.h f/type.h f/lab.h f/storag.h f/symbol.h f/symbol.def \
+ f/global.h f/name.h f/intrin.h f/intrin.def f/data.h
+f/expr.o: f/expr.c f/proj.h $(CONFIG_H) $(SYSTEM_H) f/expr.h f/bld.h f/bld-op.def \
+ f/bit.h f/malloc.h f/com.h f/com-rt.def $(TREE_H) f/info.h f/info-b.def \
+ f/info-k.def f/info-w.def f/target.h f/bad.h f/bad.def f/where.h glimits.h \
+ f/top.h f/lex.h f/type.h f/lab.h f/storag.h f/symbol.h f/symbol.def f/equiv.h \
+ f/global.h f/name.h f/intrin.h f/intrin.def f/implic.h f/src.h f/st.h \
+ f/stamp-str
+f/fini.o: f/fini.c f/proj.h hconfig.h $(SYSTEM_H) f/malloc.h
+f/global.o: f/global.c f/proj.h $(CONFIG_H) $(SYSTEM_H) f/global.h f/info.h \
+ f/info-b.def f/info-k.def f/info-w.def f/target.h $(TREE_H) f/bad.h f/bad.def \
+ f/where.h glimits.h f/top.h f/malloc.h f/lex.h f/type.h f/name.h f/symbol.h \
+ f/symbol.def f/bld.h f/bld-op.def f/bit.h f/com.h f/com-rt.def f/lab.h \
+ f/storag.h f/intrin.h f/intrin.def f/equiv.h
+f/implic.o: f/implic.c f/proj.h $(CONFIG_H) $(SYSTEM_H) f/implic.h f/info.h \
+ f/info-b.def f/info-k.def f/info-w.def f/target.h $(TREE_H) f/bad.h f/bad.def \
+ f/where.h glimits.h f/top.h f/malloc.h f/lex.h f/type.h f/symbol.h \
+ f/symbol.def f/bld.h f/bld-op.def f/bit.h f/com.h f/com-rt.def f/lab.h \
+ f/storag.h f/intrin.h f/intrin.def f/equiv.h f/global.h f/name.h f/src.h
+f/info.o: f/info.c f/proj.h $(CONFIG_H) $(SYSTEM_H) f/info.h f/info-b.def \
+ f/info-k.def f/info-w.def f/target.h $(TREE_H) f/bad.h f/bad.def f/where.h \
+ glimits.h f/top.h f/malloc.h f/lex.h f/type.h
+f/intrin.o: f/intrin.c f/proj.h $(CONFIG_H) $(SYSTEM_H) f/intrin.h \
+ f/intrin.def f/bld.h f/bld-op.def f/bit.h f/malloc.h f/com.h f/com-rt.def \
+ $(TREE_H) f/info.h f/info-b.def f/info-k.def f/info-w.def f/target.h f/bad.h \
+ f/bad.def f/where.h glimits.h f/top.h f/lex.h f/type.h f/lab.h f/storag.h \
+ f/symbol.h f/symbol.def f/equiv.h f/global.h f/name.h f/expr.h f/src.h
+f/lab.o: f/lab.c f/proj.h $(CONFIG_H) $(SYSTEM_H) f/lab.h f/com.h f/com-rt.def \
+ $(TREE_H) f/bld.h f/bld-op.def f/bit.h f/malloc.h f/info.h f/info-b.def \
+ f/info-k.def f/info-w.def f/target.h f/bad.h f/bad.def f/where.h glimits.h \
+ f/top.h f/lex.h f/type.h f/intrin.h f/intrin.def f/symbol.h f/symbol.def \
+ f/equiv.h f/storag.h f/global.h f/name.h
+f/lex.o: f/lex.c f/proj.h $(CONFIG_H) $(SYSTEM_H) f/top.h f/malloc.h f/where.h \
+ glimits.h f/bad.h f/bad.def f/com.h f/com-rt.def $(TREE_H) f/bld.h \
+ f/bld-op.def f/bit.h f/info.h f/info-b.def f/info-k.def f/info-w.def \
+ f/target.h f/lex.h f/type.h f/intrin.h f/intrin.def f/lab.h f/symbol.h \
+ f/symbol.def f/equiv.h f/storag.h f/global.h f/name.h f/src.h flags.h \
+ debug.h input.h toplev.h output.h $(GGC_H)
+f/malloc.o: f/malloc.c f/proj.h $(CONFIG_H) $(SYSTEM_H) f/malloc.h
+f/name.o: f/name.c f/proj.h $(CONFIG_H) $(SYSTEM_H) f/bad.h f/bad.def f/where.h \
+ glimits.h f/top.h f/malloc.h f/name.h f/global.h f/info.h f/info-b.def \
+ f/info-k.def f/info-w.def f/target.h $(TREE_H) f/lex.h f/type.h f/symbol.h \
+ f/symbol.def f/bld.h f/bld-op.def f/bit.h f/com.h f/com-rt.def f/lab.h \
+ f/storag.h f/intrin.h f/intrin.def f/equiv.h f/src.h
+f/parse.o: f/parse.c f/proj.h $(CONFIG_H) $(SYSTEM_H) f/top.h f/malloc.h \
+ f/where.h glimits.h f/com.h f/com-rt.def $(TREE_H) f/bld.h f/bld-op.def \
+ f/bit.h f/info.h f/info-b.def f/info-k.def f/info-w.def f/target.h f/bad.h \
+ f/bad.def f/lex.h f/type.h f/intrin.h f/intrin.def f/lab.h f/symbol.h \
+ f/symbol.def f/equiv.h f/storag.h f/global.h f/name.h f/version.h flags.h
+f/src.o: f/src.c f/proj.h $(CONFIG_H) $(SYSTEM_H) f/src.h f/bad.h f/bad.def \
+ f/where.h glimits.h f/top.h f/malloc.h
+f/st.o: f/st.c f/proj.h $(CONFIG_H) $(SYSTEM_H) f/st.h f/bad.h f/bad.def \
+ f/where.h glimits.h f/top.h f/malloc.h f/lex.h f/symbol.h f/symbol.def \
+ f/bld.h f/bld-op.def f/bit.h f/com.h f/com-rt.def $(TREE_H) f/info.h \
+ f/info-b.def f/info-k.def f/info-w.def f/target.h f/type.h f/lab.h \
+ f/storag.h f/intrin.h f/intrin.def f/equiv.h f/global.h f/name.h f/sta.h \
+ f/stamp-str f/stb.h f/expr.h f/stp.h f/stt.h f/stc.h f/std.h \
+ f/stv.h f/stw.h f/ste.h f/sts.h f/stu.h
+f/sta.o: f/sta.c f/proj.h $(CONFIG_H) $(SYSTEM_H) f/sta.h f/bad.h f/bad.def \
+ f/where.h glimits.h f/top.h f/malloc.h f/lex.h f/stamp-str f/symbol.h \
+ f/symbol.def f/bld.h f/bld-op.def f/bit.h f/com.h f/com-rt.def $(TREE_H) \
+ f/info.h f/info-b.def f/info-k.def f/info-w.def f/target.h f/type.h f/lab.h \
+ f/storag.h f/intrin.h f/intrin.def f/equiv.h f/global.h f/name.h f/implic.h \
+ f/stb.h f/expr.h f/stp.h f/stt.h f/stc.h f/std.h f/stv.h f/stw.h
+f/stb.o: f/stb.c f/proj.h $(CONFIG_H) $(SYSTEM_H) f/stb.h f/bad.h f/bad.def \
+ f/where.h glimits.h f/top.h f/malloc.h f/expr.h f/bld.h f/bld-op.def f/bit.h \
+ f/com.h f/com-rt.def $(TREE_H) f/info.h f/info-b.def f/info-k.def \
+ f/info-w.def f/target.h f/lex.h f/type.h f/lab.h f/storag.h f/symbol.h \
+ f/symbol.def f/equiv.h f/global.h f/name.h f/intrin.h f/intrin.def f/stp.h \
+ f/stt.h f/stamp-str f/src.h f/sta.h f/stc.h
+f/stc.o: f/stc.c f/proj.h $(CONFIG_H) $(SYSTEM_H) f/stc.h f/bad.h f/bad.def \
+ f/where.h glimits.h f/top.h f/malloc.h f/bld.h f/bld-op.def f/bit.h f/com.h \
+ f/com-rt.def $(TREE_H) f/info.h f/info-b.def f/info-k.def f/info-w.def \
+ f/target.h f/lex.h f/type.h f/lab.h f/storag.h f/symbol.h f/symbol.def \
+ f/equiv.h f/global.h f/name.h f/intrin.h f/intrin.def f/expr.h f/stp.h \
+ f/stt.h f/stamp-str f/data.h f/implic.h f/src.h f/sta.h f/std.h f/stv.h f/stw.h
+f/std.o: f/std.c f/proj.h $(CONFIG_H) $(SYSTEM_H) f/std.h f/bld.h f/bld-op.def \
+ f/bit.h f/malloc.h f/com.h f/com-rt.def $(TREE_H) f/info.h f/info-b.def \
+ f/info-k.def f/info-w.def f/target.h f/bad.h f/bad.def f/where.h glimits.h \
+ f/top.h f/lex.h f/type.h f/lab.h f/storag.h f/symbol.h f/symbol.def f/equiv.h \
+ f/global.h f/name.h f/intrin.h f/intrin.def f/stp.h f/stt.h f/stamp-str \
+ f/stv.h f/stw.h f/sta.h f/ste.h f/sts.h
+f/ste.o: f/ste.c f/proj.h $(CONFIG_H) $(SYSTEM_H) $(RTL_H) toplev.h f/ste.h \
+ f/bld.h f/bld-op.def f/bit.h f/malloc.h f/com.h f/com-rt.def $(TREE_H) \
+ f/info.h f/info-b.def f/info-k.def f/info-w.def f/target.h f/bad.h f/bad.def \
+ f/where.h glimits.h f/top.h f/lex.h f/type.h f/lab.h f/storag.h f/symbol.h \
+ f/symbol.def f/equiv.h f/global.h f/name.h f/intrin.h f/intrin.def f/stp.h \
+ f/stt.h f/stamp-str f/sts.h f/stv.h f/stw.h f/expr.h f/sta.h $(GGC_H)
+f/storag.o: f/storag.c f/proj.h $(CONFIG_H) $(SYSTEM_H) f/storag.h f/bld.h \
+ f/bld-op.def f/bit.h f/malloc.h f/com.h f/com-rt.def $(TREE_H) \
+ f/info.h f/info-b.def f/info-k.def f/info-w.def f/target.h f/bad.h \
+ f/bad.def f/where.h glimits.h f/top.h f/lex.h f/type.h f/lab.h \
+ f/symbol.h f/symbol.def f/equiv.h f/global.h f/name.h f/intrin.h \
+ f/intrin.def f/data.h
+f/stp.o: f/stp.c f/proj.h $(CONFIG_H) $(SYSTEM_H) f/stp.h f/bld.h f/bld-op.def \
+ f/bit.h f/malloc.h f/com.h f/com-rt.def $(TREE_H) f/info.h \
+ f/info-b.def f/info-k.def f/info-w.def f/target.h f/bad.h f/bad.def \
+ f/where.h glimits.h f/top.h f/lex.h f/type.h f/lab.h f/storag.h \
+ f/symbol.h f/symbol.def f/equiv.h f/global.h f/name.h f/intrin.h \
+ f/intrin.def f/stt.h
+f/str.o: f/str.c f/proj.h $(CONFIG_H) $(SYSTEM_H) f/src.h f/bad.h f/bad.def \
+ f/where.h glimits.h f/top.h f/malloc.h f/stamp-str f/lex.h
+f/sts.o: f/sts.c f/proj.h $(CONFIG_H) $(SYSTEM_H) f/sts.h f/malloc.h f/com.h \
+ f/com-rt.def $(TREE_H) f/bld.h f/bld-op.def f/bit.h f/info.h \
+ f/info-b.def f/info-k.def f/info-w.def f/target.h f/bad.h f/bad.def \
+ f/where.h glimits.h f/top.h f/lex.h f/type.h f/intrin.h f/intrin.def \
+ f/lab.h f/symbol.h f/symbol.def f/equiv.h f/storag.h f/global.h \
+ f/name.h
+f/stt.o: f/stt.c f/proj.h $(CONFIG_H) $(SYSTEM_H) f/stt.h f/top.h f/malloc.h \
+ f/where.h glimits.h f/bld.h f/bld-op.def f/bit.h f/com.h f/com-rt.def \
+ $(TREE_H) f/info.h f/info-b.def f/info-k.def f/info-w.def f/target.h \
+ f/bad.h f/bad.def f/lex.h f/type.h f/lab.h f/storag.h f/symbol.h \
+ f/symbol.def f/equiv.h f/global.h f/name.h f/intrin.h f/intrin.def \
+ f/stp.h f/expr.h f/sta.h f/stamp-str
+f/stu.o: f/stu.c f/proj.h $(CONFIG_H) $(SYSTEM_H) f/bld.h f/bld-op.def f/bit.h \
+ f/malloc.h f/com.h f/com-rt.def $(TREE_H) f/info.h f/info-b.def \
+ f/info-k.def f/info-w.def f/target.h f/bad.h f/bad.def f/where.h \
+ glimits.h f/top.h f/lex.h f/type.h f/lab.h f/storag.h f/symbol.h \
+ f/symbol.def f/equiv.h f/global.h f/name.h f/intrin.h f/intrin.def \
+ f/implic.h f/stu.h f/sta.h f/stamp-str
+f/stv.o: f/stv.c f/proj.h $(CONFIG_H) $(SYSTEM_H) f/stv.h f/lab.h f/com.h \
+ f/com-rt.def $(TREE_H) f/bld.h f/bld-op.def f/bit.h f/malloc.h \
+ f/info.h f/info-b.def f/info-k.def f/info-w.def f/target.h f/bad.h \
+ f/bad.def f/where.h glimits.h f/top.h f/lex.h f/type.h f/intrin.h \
+ f/intrin.def f/symbol.h f/symbol.def f/equiv.h f/storag.h f/global.h \
+ f/name.h
+f/stw.o: f/stw.c f/proj.h $(CONFIG_H) $(SYSTEM_H) f/stw.h f/bld.h f/bld-op.def \
+ f/bit.h f/malloc.h f/com.h f/com-rt.def $(TREE_H) f/info.h \
+ f/info-b.def f/info-k.def f/info-w.def f/target.h f/bad.h f/bad.def \
+ f/where.h glimits.h f/top.h f/lex.h f/type.h f/lab.h f/storag.h \
+ f/symbol.h f/symbol.def f/equiv.h f/global.h f/name.h f/intrin.h \
+ f/intrin.def f/stv.h f/sta.h f/stamp-str
+f/symbol.o: f/symbol.c f/proj.h $(CONFIG_H) $(SYSTEM_H) f/symbol.h \
+ f/symbol.def f/bld.h f/bld-op.def f/bit.h f/malloc.h f/com.h \
+ f/com-rt.def $(TREE_H) f/info.h f/info-b.def f/info-k.def \
+ f/info-w.def f/target.h f/bad.h f/bad.def f/where.h glimits.h f/top.h \
+ f/lex.h f/type.h f/lab.h f/storag.h f/intrin.h f/intrin.def f/equiv.h \
+ f/global.h f/name.h f/src.h f/st.h
+f/target.o: f/target.c f/proj.h $(CONFIG_H) $(SYSTEM_H) glimits.h f/target.h \
+ $(TREE_H) f/bad.h f/bad.def f/where.h f/top.h f/malloc.h f/info.h \
+ f/info-b.def f/info-k.def f/info-w.def f/type.h f/lex.h
+f/top.o: f/top.c f/proj.h $(CONFIG_H) $(SYSTEM_H) f/top.h f/malloc.h f/where.h \
+ glimits.h f/bad.h f/bad.def f/bit.h f/bld.h f/bld-op.def f/com.h \
+ f/com-rt.def $(TREE_H) f/info.h f/info-b.def f/info-k.def \
+ f/info-w.def f/target.h f/lex.h f/type.h f/lab.h f/storag.h \
+ f/symbol.h f/symbol.def f/equiv.h f/global.h f/name.h f/intrin.h \
+ f/intrin.def f/data.h f/expr.h f/implic.h f/src.h f/st.h flags.h \
+ toplev.h
+f/type.o: f/type.c f/proj.h $(CONFIG_H) $(SYSTEM_H) f/type.h f/malloc.h
+f/version.o: f/version.c f/version.h
+f/where.o: f/where.c f/proj.h $(CONFIG_H) $(SYSTEM_H) f/where.h glimits.h f/top.h \
+ f/malloc.h f/lex.h $(GGC_H)
diff --git a/contrib/gcc/f/RELEASE-PREP b/contrib/gcc/f/RELEASE-PREP
index 7069ea5..71eebf6 100644
--- a/contrib/gcc/f/RELEASE-PREP
+++ b/contrib/gcc/f/RELEASE-PREP
@@ -1,5 +1,5 @@
1999-03-13 RELEASE-PREP
-Things to do to prepare a g77 release (FSF, egcs, whatever).
+Things to do to prepare a g77 release.
- Update root.texi: clear DEVELOPMENT flag, set version info.
diff --git a/contrib/gcc/f/ansify.c b/contrib/gcc/f/ansify.c
index 6c6d01f..ec99107 100644
--- a/contrib/gcc/f/ansify.c
+++ b/contrib/gcc/f/ansify.c
@@ -19,38 +19,18 @@ along with GNU Fortran; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA. */
-/* From f/proj.h, which uses #error -- not all C compilers
- support that, and we want *this* program to be compilable
- by pretty much any C compiler. */
-#include "hconfig.j"
-#include "system.j"
-#include "assert.j"
-#if HAVE_STDDEF_H
-#include <stddef.h>
-#endif
-
-typedef enum
- {
-#if !defined(false) || !defined(true)
- false = 0, true = 1,
-#endif
-#if !defined(FALSE) || !defined(TRUE)
- FALSE = 0, TRUE = 1,
-#endif
- Doggone_Trailing_Comma_Dont_Work = 1
- } bool;
-
-#define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0]))
+#include "hconfig.h"
+#include "system.h"
#define die_unless(c) \
do if (!(c)) \
{ \
- fprintf (stderr, "%s:%lu: " #c "\n", argv[1], lineno); \
+ fprintf (stderr, "%s:%lu: %s\n", argv[1], lineno, #c); \
die (); \
} \
while(0)
-static void
+static void ATTRIBUTE_NORETURN
die (void)
{
exit (1);
@@ -67,7 +47,7 @@ main(int argc, char **argv)
printf ("\
/* This file is automatically generated from `%s',\n\
which you should modify instead. */\n\
-# 1 \"%s\"\n\
+#line 1 \"%s\"\n\
",
argv[1], argv[1]);
diff --git a/contrib/gcc/f/bad.c b/contrib/gcc/f/bad.c
index 704fa12..4de713c 100644
--- a/contrib/gcc/f/bad.c
+++ b/contrib/gcc/f/bad.c
@@ -1,5 +1,5 @@
/* bad.c -- Implementation File (module.c template V1.0)
- Copyright (C) 1995 Free Software Foundation, Inc.
+ Copyright (C) 1995, 2002 Free Software Foundation, Inc.
Contributed by James Craig Burley.
This file is part of GNU Fortran.
@@ -38,10 +38,11 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "proj.h"
#include "bad.h"
-#include "flags.j"
+#include "flags.h"
#include "com.h"
-#include "toplev.j"
+#include "toplev.h"
#include "where.h"
+#include "intl.h"
/* Externals defined here. */
@@ -61,24 +62,27 @@ bool ffebad_is_inhibited_ = FALSE;
struct _ffebad_message_
{
- ffebadSeverity severity;
- const char *message;
+ const ffebadSeverity severity;
+ const char *const message;
};
/* Static objects accessed by functions in this module. */
-static struct _ffebad_message_ ffebad_messages_[]
+static const struct _ffebad_message_ ffebad_messages_[]
=
{
-#define FFEBAD_MSGS1(KWD,SEV,MSG) { SEV, MSG },
+#define FFEBAD_MSG(kwd,sev,msgid) { sev, msgid },
#if FFEBAD_LONG_MSGS_ == 0
-#define FFEBAD_MSGS2(KWD,SEV,LMSG,SMSG) { SEV, SMSG },
+#define LONG(m)
+#define SHORT(m) m
#else
-#define FFEBAD_MSGS2(KWD,SEV,LMSG,SMSG) { SEV, LMSG },
+#define LONG(m) m
+#define SHORT(m)
#endif
#include "bad.def"
-#undef FFEBAD_MSGS1
-#undef FFEBAD_MSGS2
+#undef FFEBAD_MSG
+#undef LONG
+#undef SHORT
};
static struct
@@ -161,7 +165,7 @@ ffebad_severity (ffebad errnum)
bool
ffebad_start_ (bool lex_override, ffebad errnum, ffebadSeverity sev,
- const char *message)
+ const char *msgid)
{
unsigned char i;
@@ -174,54 +178,48 @@ ffebad_start_ (bool lex_override, ffebad errnum, ffebadSeverity sev,
if (errnum != FFEBAD)
{
ffebad_severity_ = ffebad_messages_[errnum].severity;
- ffebad_message_ = ffebad_messages_[errnum].message;
+ ffebad_message_ = gettext (ffebad_messages_[errnum].message);
}
else
{
ffebad_severity_ = sev;
- ffebad_message_ = message;
+ ffebad_message_ = gettext (msgid);
}
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
- {
- extern int inhibit_warnings; /* From toplev.c. */
-
- switch (ffebad_severity_)
- { /* Tell toplev.c about this message. */
- case FFEBAD_severityINFORMATIONAL:
- case FFEBAD_severityTRIVIAL:
- if (inhibit_warnings)
- { /* User wants no warnings. */
- ffebad_is_temp_inhibited_ = TRUE;
- return FALSE;
- }
- /* Fall through. */
- case FFEBAD_severityWARNING:
- case FFEBAD_severityPECULIAR:
- case FFEBAD_severityPEDANTIC:
- if ((ffebad_severity_ != FFEBAD_severityPEDANTIC)
- || !flag_pedantic_errors)
- {
- if (count_error (1) == 0)
- { /* User wants no warnings. */
- ffebad_is_temp_inhibited_ = TRUE;
- return FALSE;
- }
- break;
- }
- /* Fall through (PEDANTIC && flag_pedantic_errors). */
- case FFEBAD_severityFATAL:
- case FFEBAD_severityWEIRD:
- case FFEBAD_severitySEVERE:
- case FFEBAD_severityDISASTER:
- count_error (0);
- break;
+ switch (ffebad_severity_)
+ { /* Tell toplev.c about this message. */
+ case FFEBAD_severityINFORMATIONAL:
+ case FFEBAD_severityTRIVIAL:
+ if (inhibit_warnings)
+ { /* User wants no warnings. */
+ ffebad_is_temp_inhibited_ = TRUE;
+ return FALSE;
+ }
+ /* Fall through. */
+ case FFEBAD_severityWARNING:
+ case FFEBAD_severityPECULIAR:
+ case FFEBAD_severityPEDANTIC:
+ if ((ffebad_severity_ != FFEBAD_severityPEDANTIC)
+ || !flag_pedantic_errors)
+ {
+ if (count_error (1) == 0)
+ { /* User wants no warnings. */
+ ffebad_is_temp_inhibited_ = TRUE;
+ return FALSE;
+ }
+ break;
+ }
+ /* Fall through (PEDANTIC && flag_pedantic_errors). */
+ case FFEBAD_severityFATAL:
+ case FFEBAD_severityWEIRD:
+ case FFEBAD_severitySEVERE:
+ case FFEBAD_severityDISASTER:
+ count_error (0);
+ break;
- default:
- break;
- }
- }
-#endif /* FFECOM_targetCURRENT == FFECOM_targetGCC */
+ default:
+ break;
+ }
ffebad_is_temp_inhibited_ = FALSE;
ffebad_errnum_ = errnum;
@@ -351,7 +349,7 @@ void
ffebad_finish ()
{
#define MAX_SPACES 132
- static const char *spaces
+ static const char *const spaces
= "...>\
\040\040\040\040\040\040\040\040\040\040\040\040\040\040\040\040\
\040\040\040\040\040\040\040\040\040\040\040\040\040\040\040\040\
@@ -385,15 +383,15 @@ ffebad_finish ()
switch (ffebad_severity_)
{
case FFEBAD_severityINFORMATIONAL:
- s = "note:";
+ s = _("note:");
break;
case FFEBAD_severityWARNING:
- s = "warning:";
+ s = _("warning:");
break;
case FFEBAD_severitySEVERE:
- s = "fatal:";
+ s = _("fatal:");
break;
default:
@@ -422,27 +420,20 @@ ffebad_finish ()
{
if (bi != 0)
fputc ('\n', stderr);
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
report_error_function (fn);
-#endif /* FFECOM_targetCURRENT == FFECOM_targetGCC */
fprintf (stderr,
-#if 0
- "Line %" ffewhereLineNumber_f "u of %s:\n %s\n %s%c",
- rn, fn,
-#else
/* the trailing space on the <file>:<line>: line
fools emacs19 compilation mode into finding the
report */
"%s:%" ffewhereLineNumber_f "u: %s\n %s\n %s%c",
fn, rn,
-#endif
s,
ffewhere_line_content (l),
&spaces[cn > MAX_SPACES ? 0 : MAX_SPACES - cn + 4],
pointer);
last_line_num = ln;
last_col_num = cn;
- s = "(continued):";
+ s = _("(continued):");
}
else
{
@@ -457,11 +448,11 @@ ffebad_finish ()
if (ffebad_places_ == 0)
{
/* Didn't output "warning:" string, capitalize it for message. */
- if ((s[0] != '\0') && ISALPHA (s[0]) && ISLOWER (s[0]))
+ if (s[0] != '\0')
{
char c;
- c = toupper (s[0]);
+ c = TOUPPER (s[0]);
fprintf (stderr, "%c%s ", c, &s[1]);
}
else if (s[0] != '\0')
@@ -486,20 +477,20 @@ ffebad_finish ()
if (c == '%')
{
c = ffebad_message_[++i];
- if (ISALPHA (c) && ISUPPER (c))
+ if (ISUPPER (c))
{
index = c - 'A';
if ((index < 0) || (index >= FFEBAD_MAX_))
{
- bufi = ffebad_bufputs_ (buf, bufi, "[REPORT BUG!!] %");
+ bufi = ffebad_bufputs_ (buf, bufi, _("[REPORT BUG!!] %"));
bufi = ffebad_bufputc_ (buf, bufi, c);
}
else
{
s = ffebad_string_[index];
if (s == NULL)
- bufi = ffebad_bufputs_ (buf, bufi, "[REPORT BUG!!]");
+ bufi = ffebad_bufputs_ (buf, bufi, _("[REPORT BUG!!]"));
else
bufi = ffebad_bufputs_ (buf, bufi, s);
}
@@ -510,7 +501,7 @@ ffebad_finish ()
if ((index < 0) || (index >= FFEBAD_MAX_))
{
- bufi = ffebad_bufputs_ (buf, bufi, "[REPORT BUG!!] %");
+ bufi = ffebad_bufputs_ (buf, bufi, _("[REPORT BUG!!] %"));
bufi = ffebad_bufputc_ (buf, bufi, c);
}
else
@@ -531,7 +522,7 @@ ffebad_finish ()
bufi = ffebad_bufputc_ (buf, bufi, '%');
else
{
- bufi = ffebad_bufputs_ (buf, bufi, "[REPORT BUG!!]");
+ bufi = ffebad_bufputs_ (buf, bufi, _("[REPORT BUG!!]"));
bufi = ffebad_bufputc_ (buf, bufi, '%');
bufi = ffebad_bufputc_ (buf, bufi, c);
}
diff --git a/contrib/gcc/f/bad.def b/contrib/gcc/f/bad.def
index 4c7bfe4..165a5a3 100644
--- a/contrib/gcc/f/bad.def
+++ b/contrib/gcc/f/bad.def
@@ -1,5 +1,5 @@
/* bad.def -- Public #include File (module.h template V1.0)
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1996, 1997, 2002 Free Software Foundation, Inc.
Contributed by James Craig Burley.
This file is part of GNU Fortran.
@@ -34,675 +34,675 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#define SEVERE FFEBAD_severitySEVERE
#define DISASTER FFEBAD_severityDISASTER
-FFEBAD_MSGS1 (FFEBAD_MISSING_FIRST_BINARY_OPERAND, FATAL,
+FFEBAD_MSG (FFEBAD_MISSING_FIRST_BINARY_OPERAND, FATAL,
"Missing first operand for binary operator at %0")
-FFEBAD_MSGS1 (FFEBAD_NULL_CHAR_CONST, WARN,
+FFEBAD_MSG (FFEBAD_NULL_CHAR_CONST, WARN,
"Zero-length character constant at %0")
-FFEBAD_MSGS1 (FFEBAD_INVALID_TOKEN_IN_EXPRESSION, FATAL,
+FFEBAD_MSG (FFEBAD_INVALID_TOKEN_IN_EXPRESSION, FATAL,
"Invalid token at %0 in expression or subexpression at %1")
-FFEBAD_MSGS1 (FFEBAD_MISSING_OPERAND_FOR_OPERATOR, FATAL,
+FFEBAD_MSG (FFEBAD_MISSING_OPERAND_FOR_OPERATOR, FATAL,
"Missing operand for operator at %1 at end of expression at %0")
-FFEBAD_MSGS1 (FFEBAD_LABEL_ALREADY_DEFINED, FATAL,
+FFEBAD_MSG (FFEBAD_LABEL_ALREADY_DEFINED, FATAL,
"Label %A already defined at %1 when redefined at %0")
-FFEBAD_MSGS1 (FFEBAD_UNRECOGNIZED_CHARACTER, FATAL,
+FFEBAD_MSG (FFEBAD_UNRECOGNIZED_CHARACTER, FATAL,
"Unrecognized character at %0 [info -f g77 M LEX]")
-FFEBAD_MSGS1 (FFEBAD_LABEL_WITHOUT_STMT, WARN,
+FFEBAD_MSG (FFEBAD_LABEL_WITHOUT_STMT, WARN,
"Label definition %A at %0 on empty statement (as of %1)")
-FFEBAD_MSGS2 (FFEBAD_EXTRA_LABEL_DEF, FATAL,
-"Extra label definition %A at %0 -- perhaps previous label definition %B at %1 should have CONTINUE statement?",
-"Extra label definition %A at %0 following label definition %B at %1")
-FFEBAD_MSGS1 (FFEBAD_FIRST_CHAR_INVALID, FATAL,
+FFEBAD_MSG (FFEBAD_EXTRA_LABEL_DEF, FATAL,
+LONG("Extra label definition %A at %0 -- perhaps previous label definition %B at %1 should have CONTINUE statement?")
+SHORT("Extra label definition %A at %0 following label definition %B at %1"))
+FFEBAD_MSG (FFEBAD_FIRST_CHAR_INVALID, FATAL,
"Invalid first character at %0 [info -f g77 M LEX]")
-FFEBAD_MSGS1 (FFEBAD_LINE_TOO_LONG, FATAL,
+FFEBAD_MSG (FFEBAD_LINE_TOO_LONG, FATAL,
"Line too long as of %0 [info -f g77 M LEX]")
-FFEBAD_MSGS1 (FFEBAD_LABEL_FIELD_NOT_NUMERIC, FATAL,
+FFEBAD_MSG (FFEBAD_LABEL_FIELD_NOT_NUMERIC, FATAL,
"Non-numeric character at %0 in label field [info -f g77 M LEX]")
-FFEBAD_MSGS1 (FFEBAD_LABEL_NUMBER_INVALID, FATAL,
+FFEBAD_MSG (FFEBAD_LABEL_NUMBER_INVALID, FATAL,
"Label number at %0 not in range 1-99999")
-FFEBAD_MSGS1 (FFEBAD_NON_ANSI_COMMENT, WARN,
+FFEBAD_MSG (FFEBAD_NON_ANSI_COMMENT, WARN,
"At %0, '!' and '/*' are not valid comment delimiters")
-FFEBAD_MSGS1 (FFEBAD_NON_ANSI_CONTINUATION_COLUMN, WARN,
+FFEBAD_MSG (FFEBAD_NON_ANSI_CONTINUATION_COLUMN, WARN,
"Continuation indicator at %0 must appear in column 6 [info -f g77 M LEX]")
-FFEBAD_MSGS1 (FFEBAD_LABEL_ON_CONTINUATION, FATAL,
+FFEBAD_MSG (FFEBAD_LABEL_ON_CONTINUATION, FATAL,
"Label at %0 invalid with continuation line indicator at %1 [info -f g77 M LEX]")
-FFEBAD_MSGS2 (FFEBAD_INVALID_CONTINUATION, FATAL,
-"Continuation indicator at %0 invalid on first non-comment line of file or following END or INCLUDE [info -f g77 M LEX]",
-"Continuation indicator at %0 invalid here [info -f g77 M LEX]")
-FFEBAD_MSGS1 (FFEBAD_NO_CLOSING_APOSTROPHE, FATAL,
+FFEBAD_MSG (FFEBAD_INVALID_CONTINUATION, FATAL,
+LONG("Continuation indicator at %0 invalid on first non-comment line of file or following END or INCLUDE [info -f g77 M LEX]")
+SHORT("Continuation indicator at %0 invalid here [info -f g77 M LEX]"))
+FFEBAD_MSG (FFEBAD_NO_CLOSING_APOSTROPHE, FATAL,
"Character constant at %0 has no closing apostrophe at %1")
-FFEBAD_MSGS1 (FFEBAD_NOT_ENOUGH_HOLLERITH_CHARS, FATAL,
+FFEBAD_MSG (FFEBAD_NOT_ENOUGH_HOLLERITH_CHARS, FATAL,
"Hollerith constant at %0 specified %A more characters than are present as of %1")
-FFEBAD_MSGS1 (FFEBAD_MISSING_CLOSE_PAREN, FATAL,
+FFEBAD_MSG (FFEBAD_MISSING_CLOSE_PAREN, FATAL,
"Missing close parenthese at %0 needed to match open parenthese at %1")
-FFEBAD_MSGS1 (FFEBAD_INTEGER_TOO_LARGE, FATAL,
+FFEBAD_MSG (FFEBAD_INTEGER_TOO_LARGE, FATAL,
"Integer at %0 too large")
-FFEBAD_MSGS2 (FFEBAD_BAD_MAGICAL, WARN,
-"Integer at %0 too large except as negative number (preceded by unary minus sign)",
-"Non-negative integer at %0 too large")
-FFEBAD_MSGS2 (FFEBAD_BAD_MAGICAL_PRECEDENCE, WARN,
-"Integer at %0 too large; even though preceded by unary minus sign at %1, subsequent operator at %2 has precedence over unary minus -- enclose unary minus sign and integer in parentheses to force precedence",
-"Integer at %0 too large (%2 has precedence over %1)")
-FFEBAD_MSGS2 (FFEBAD_BAD_MAGICAL_BINARY, WARN,
-"Integer at %0 too large; even though preceded by minus sign at %1, because minus sign is a binary, not unary, operator -- insert plus sign before minus sign to change it to a unary minus sign",
-"Integer at %0 too large (needs unary, not binary, minus at %1)")
-FFEBAD_MSGS2 (FFEBAD_BAD_MAGICAL_PRECEDENCE_BINARY, WARN,
-"Integer at %0 too large; even though preceded by minus sign at %1, subsequent operator at %2 has precedence over minus, and that minus sign should be a unary minus rather than a binary minus -- insert plus sign before minus sign to change it to a unary minus sign, and enclose unary minus sign and integer in parentheses to force precedence",
-"Integer at %0 too large (%2 has precedence over %1, which needs to be unary, not binary, minus)")
-FFEBAD_MSGS1 (FFEBAD_IGNORING_PERIOD, FATAL,
+FFEBAD_MSG (FFEBAD_BAD_MAGICAL, WARN,
+LONG("Integer at %0 too large except as negative number (preceded by unary minus sign)")
+SHORT("Non-negative integer at %0 too large"))
+FFEBAD_MSG (FFEBAD_BAD_MAGICAL_PRECEDENCE, WARN,
+LONG("Integer at %0 too large; even though preceded by unary minus sign at %1, subsequent operator at %2 has precedence over unary minus -- enclose unary minus sign and integer in parentheses to force precedence")
+SHORT("Integer at %0 too large (%2 has precedence over %1)"))
+FFEBAD_MSG (FFEBAD_BAD_MAGICAL_BINARY, WARN,
+LONG("Integer at %0 too large; even though preceded by minus sign at %1, because minus sign is a binary, not unary, operator -- insert plus sign before minus sign to change it to a unary minus sign")
+SHORT("Integer at %0 too large (needs unary, not binary, minus at %1)"))
+FFEBAD_MSG (FFEBAD_BAD_MAGICAL_PRECEDENCE_BINARY, WARN,
+LONG("Integer at %0 too large; even though preceded by minus sign at %1, subsequent operator at %2 has precedence over minus, and that minus sign should be a unary minus rather than a binary minus -- insert plus sign before minus sign to change it to a unary minus sign, and enclose unary minus sign and integer in parentheses to force precedence")
+SHORT("Integer at %0 too large (%2 has precedence over %1, which needs to be unary, not binary, minus)"))
+FFEBAD_MSG (FFEBAD_IGNORING_PERIOD, FATAL,
"Period at %0 not followed by digits for floating-point number or by `NOT.', `TRUE.', or `FALSE.'")
-FFEBAD_MSGS1 (FFEBAD_INSERTING_PERIOD, FATAL,
+FFEBAD_MSG (FFEBAD_INSERTING_PERIOD, FATAL,
"Missing close-period between `.%A' at %0 and %1")
-FFEBAD_MSGS1 (FFEBAD_INVALID_EXPONENT, FATAL,
+FFEBAD_MSG (FFEBAD_INVALID_EXPONENT, FATAL,
"Invalid exponent at %0 for real constant at %1; nondigit `%A' in exponent field")
-FFEBAD_MSGS1 (FFEBAD_MISSING_EXPONENT_VALUE, FATAL,
+FFEBAD_MSG (FFEBAD_MISSING_EXPONENT_VALUE, FATAL,
"Missing value at %1 for real-number exponent at %0")
-FFEBAD_MSGS1 (FFEBAD_MISSING_BINARY_OPERATOR, FATAL,
+FFEBAD_MSG (FFEBAD_MISSING_BINARY_OPERATOR, FATAL,
"Expected binary operator between expressions at %0 and at %1")
-FFEBAD_MSGS2 (FFEBAD_INVALID_DOTDOT, FATAL,
-"Period at %0 not followed by valid keyword forming a valid binary operator; `.%A.' is not a valid binary operator",
-"`.%A.' at %0 not a binary operator")
-FFEBAD_MSGS2 (FFEBAD_QUOTE_MISSES_DIGITS, FATAL,
-"Double-quote at %0 not followed by a string of valid octal digits at %1",
-"Invalid octal constant at %0")
-FFEBAD_MSGS2 (FFEBAD_INVALID_BINARY_DIGIT, FATAL,
-"Invalid binary digit(s) found in string of digits at %0",
-"Invalid binary constant at %0")
-FFEBAD_MSGS2 (FFEBAD_INVALID_HEX_DIGIT, FATAL,
-"Invalid hexadecimal digit(s) found in string of digits at %0",
-"Invalid hexadecimal constant at %0")
-FFEBAD_MSGS2 (FFEBAD_INVALID_OCTAL_DIGIT, FATAL,
-"Invalid octal digit(s) found in string of digits at %0",
-"Invalid octal constant at %0")
-FFEBAD_MSGS2 (FFEBAD_INVALID_RADIX_SPECIFIER, FATAL,
-"Invalid radix specifier `%A' at %0 for typeless constant at %1",
-"Invalid typeless constant at %1")
-FFEBAD_MSGS2 (FFEBAD_INVALID_TYPELESS_BINARY_DIGIT, FATAL,
-"Invalid binary digit(s) found in string of digits at %0",
-"Invalid binary constant at %0")
-FFEBAD_MSGS2 (FFEBAD_INVALID_TYPELESS_OCTAL_DIGIT, FATAL,
-"Invalid octal digit(s) found in string of digits at %0",
-"Invalid octal constant at %0")
-FFEBAD_MSGS2 (FFEBAD_INVALID_TYPELESS_HEX_DIGIT, FATAL,
-"Invalid hexadecimal digit(s) found in string of digits at %0",
-"Invalid hexadecimal constant at %0")
-FFEBAD_MSGS2 (FFEBAD_INVALID_COMPLEX_PART, FATAL,
-"%A part of complex constant at %0 must be a real or integer constant -- otherwise use CMPLX() or COMPLEX() in place of ()",
-"%A part of complex constant at %0 not a real or integer constant")
-FFEBAD_MSGS2 (FFEBAD_INVALID_PERCENT, FATAL,
-"Invalid keyword `%%%A' at %0 in this context",
-"Invalid keyword `%%%A' at %0")
-FFEBAD_MSGS2 (FFEBAD_NULL_EXPRESSION, FATAL,
-"Null expression between %0 and %1 invalid in this context",
-"Invalid null expression between %0 and %1")
-FFEBAD_MSGS2 (FFEBAD_CONCAT_ARGS_TYPE, FATAL,
-"Concatenation operator at %0 must operate on two subexpressions of character type, but neither subexpression at %1 or %2 is of character type",
-"Invalid operands at %1 and %2 for concatenation operator at %0")
-FFEBAD_MSGS2 (FFEBAD_CONCAT_ARG_TYPE, FATAL,
-"Concatenation operator at %0 must operate on two subexpressions of character type, but the subexpression at %1 is not of character type",
-"Invalid operand at %1 for concatenation operator at %0")
-FFEBAD_MSGS2 (FFEBAD_CONCAT_ARG_KIND, FATAL,
-"Concatenation operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning character scalars, or a combination of both -- but the subexpression at %1 is %A",
-"Invalid operand (is %A) at %1 for concatenation operator at %0")
-FFEBAD_MSGS2 (FFEBAD_MATH_ARGS_TYPE, FATAL,
-"Arithmetic operator at %0 must operate on two subexpressions of arithmetic type, but neither subexpression at %1 or %2 is of arithmetic type",
-"Invalid operands at %1 and %2 for arithmetic operator at %0")
-FFEBAD_MSGS2 (FFEBAD_MATH_ARG_TYPE, FATAL,
-"Arithmetic operator at %0 must operate on two subexpressions of arithmetic type, but the subexpression at %1 is not of arithmetic type",
-"Invalid operand at %1 for arithmetic operator at %0")
-FFEBAD_MSGS2 (FFEBAD_MATH_ARG_KIND, FATAL,
-"Arithmetic operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning arithmetic scalars, or a combination of both -- but the subexpression at %1 is %A",
-"Invalid operand (is %A) at %1 for arithmetic operator at %0")
-FFEBAD_MSGS2 (FFEBAD_NO_CLOSING_QUOTE, FATAL,
-"Character constant at %0 has no closing quote at %1 [info -f g77 M LEX]",
-"Unterminated character constant at %0 [info -f g77 M LEX]")
-FFEBAD_MSGS2 (FFEBAD_BAD_CHAR_CONTINUE, FATAL,
-"Continuation line at %0 must have initial `&' since it continues a character context [info -f g77 M LEX]",
-"Missing initial `&' on continuation line at %0 [info -f g77 M LEX]")
-FFEBAD_MSGS2 (FFEBAD_BAD_LEXTOK_CONTINUE, FATAL,
-"Continuation line at %0 must have initial `&' since it continues a split lexical token [info -f g77 M LEX]",
-"Missing initial `&' on continuation line at %0 [info -f g77 M LEX]")
-FFEBAD_MSGS2 (FFEBAD_BAD_FREE_CONTINUE, FATAL,
-"Continuation line at %0 invalid because it consists only of a single `&' as the only nonblank character",
-"Invalid continuation line at %0")
-FFEBAD_MSGS2 (FFEBAD_STMT_BEGINS_BAD, FATAL,
-"Statement at %0 begins with invalid token [info -f g77 M LEX]",
-"Invalid statement at %0 [info -f g77 M LEX]")
-FFEBAD_MSGS1 (FFEBAD_SEMICOLON, FATAL,
+FFEBAD_MSG (FFEBAD_INVALID_DOTDOT, FATAL,
+LONG("Period at %0 not followed by valid keyword forming a valid binary operator; `.%A.' is not a valid binary operator")
+SHORT("`.%A.' at %0 not a binary operator"))
+FFEBAD_MSG (FFEBAD_QUOTE_MISSES_DIGITS, FATAL,
+LONG("Double-quote at %0 not followed by a string of valid octal digits at %1")
+SHORT("Invalid octal constant at %0"))
+FFEBAD_MSG (FFEBAD_INVALID_BINARY_DIGIT, FATAL,
+LONG("Invalid binary digit(s) found in string of digits at %0")
+SHORT("Invalid binary constant at %0"))
+FFEBAD_MSG (FFEBAD_INVALID_HEX_DIGIT, FATAL,
+LONG("Invalid hexadecimal digit(s) found in string of digits at %0")
+SHORT("Invalid hexadecimal constant at %0"))
+FFEBAD_MSG (FFEBAD_INVALID_OCTAL_DIGIT, FATAL,
+LONG("Invalid octal digit(s) found in string of digits at %0")
+SHORT("Invalid octal constant at %0"))
+FFEBAD_MSG (FFEBAD_INVALID_RADIX_SPECIFIER, FATAL,
+LONG("Invalid radix specifier `%A' at %0 for typeless constant at %1")
+SHORT("Invalid typeless constant at %1"))
+FFEBAD_MSG (FFEBAD_INVALID_TYPELESS_BINARY_DIGIT, FATAL,
+LONG("Invalid binary digit(s) found in string of digits at %0")
+SHORT("Invalid binary constant at %0"))
+FFEBAD_MSG (FFEBAD_INVALID_TYPELESS_OCTAL_DIGIT, FATAL,
+LONG("Invalid octal digit(s) found in string of digits at %0")
+SHORT("Invalid octal constant at %0"))
+FFEBAD_MSG (FFEBAD_INVALID_TYPELESS_HEX_DIGIT, FATAL,
+LONG("Invalid hexadecimal digit(s) found in string of digits at %0")
+SHORT("Invalid hexadecimal constant at %0"))
+FFEBAD_MSG (FFEBAD_INVALID_COMPLEX_PART, FATAL,
+LONG("%A part of complex constant at %0 must be a real or integer constant -- otherwise use CMPLX() or COMPLEX() in place of ()")
+SHORT("%A part of complex constant at %0 not a real or integer constant"))
+FFEBAD_MSG (FFEBAD_INVALID_PERCENT, FATAL,
+LONG("Invalid keyword `%%%A' at %0 in this context")
+SHORT("Invalid keyword `%%%A' at %0"))
+FFEBAD_MSG (FFEBAD_NULL_EXPRESSION, FATAL,
+LONG("Null expression between %0 and %1 invalid in this context")
+SHORT("Invalid null expression between %0 and %1"))
+FFEBAD_MSG (FFEBAD_CONCAT_ARGS_TYPE, FATAL,
+LONG("Concatenation operator at %0 must operate on two subexpressions of character type, but neither subexpression at %1 or %2 is of character type")
+SHORT("Invalid operands at %1 and %2 for concatenation operator at %0"))
+FFEBAD_MSG (FFEBAD_CONCAT_ARG_TYPE, FATAL,
+LONG("Concatenation operator at %0 must operate on two subexpressions of character type, but the subexpression at %1 is not of character type")
+SHORT("Invalid operand at %1 for concatenation operator at %0"))
+FFEBAD_MSG (FFEBAD_CONCAT_ARG_KIND, FATAL,
+LONG("Concatenation operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning character scalars, or a combination of both -- but the subexpression at %1 is %A")
+SHORT("Invalid operand (is %A) at %1 for concatenation operator at %0"))
+FFEBAD_MSG (FFEBAD_MATH_ARGS_TYPE, FATAL,
+LONG("Arithmetic operator at %0 must operate on two subexpressions of arithmetic type, but neither subexpression at %1 or %2 is of arithmetic type")
+SHORT("Invalid operands at %1 and %2 for arithmetic operator at %0"))
+FFEBAD_MSG (FFEBAD_MATH_ARG_TYPE, FATAL,
+LONG("Arithmetic operator at %0 must operate on two subexpressions of arithmetic type, but the subexpression at %1 is not of arithmetic type")
+SHORT("Invalid operand at %1 for arithmetic operator at %0"))
+FFEBAD_MSG (FFEBAD_MATH_ARG_KIND, FATAL,
+LONG("Arithmetic operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning arithmetic scalars, or a combination of both -- but the subexpression at %1 is %A")
+SHORT("Invalid operand (is %A) at %1 for arithmetic operator at %0"))
+FFEBAD_MSG (FFEBAD_NO_CLOSING_QUOTE, FATAL,
+LONG("Character constant at %0 has no closing quote at %1 [info -f g77 M LEX]")
+SHORT("Unterminated character constant at %0 [info -f g77 M LEX]"))
+FFEBAD_MSG (FFEBAD_BAD_CHAR_CONTINUE, FATAL,
+LONG("Continuation line at %0 must have initial `&' since it continues a character context [info -f g77 M LEX]")
+SHORT("Missing initial `&' on continuation line at %0 [info -f g77 M LEX]"))
+FFEBAD_MSG (FFEBAD_BAD_LEXTOK_CONTINUE, FATAL,
+LONG("Continuation line at %0 must have initial `&' since it continues a split lexical token [info -f g77 M LEX]")
+SHORT("Missing initial `&' on continuation line at %0 [info -f g77 M LEX]"))
+FFEBAD_MSG (FFEBAD_BAD_FREE_CONTINUE, FATAL,
+LONG("Continuation line at %0 invalid because it consists only of a single `&' as the only nonblank character")
+SHORT("Invalid continuation line at %0"))
+FFEBAD_MSG (FFEBAD_STMT_BEGINS_BAD, FATAL,
+LONG("Statement at %0 begins with invalid token [info -f g77 M LEX]")
+SHORT("Invalid statement at %0 [info -f g77 M LEX]"))
+FFEBAD_MSG (FFEBAD_SEMICOLON, FATAL,
"Semicolon at %0 is an invalid token")
-FFEBAD_MSGS2 (FFEBAD_UNREC_STMT, FATAL,
-"Unrecognized statement name at %0 and invalid form for assignment or statement-function definition at %1",
-"Invalid statement at %0")
-FFEBAD_MSGS2 (FFEBAD_INVALID_STMT_FORM, FATAL,
-"Invalid form for %A statement at %0",
-"Invalid %A statement at %0")
-FFEBAD_MSGS2 (FFEBAD_INVALID_HOLL_IN_STMT, FATAL,
-"Invalid use of hollerith constant in statement at %0 -- enclose the constant in parentheses (for example, change BACKSPACE 2HAB to BACKSPACE (2HAB))",
-"Enclose hollerith constant in statement at %0 in parentheses")
-FFEBAD_MSGS1 (FFEBAD_FORMAT_EXTRA_COMMA, FATAL,
+FFEBAD_MSG (FFEBAD_UNREC_STMT, FATAL,
+LONG("Unrecognized statement name at %0 and invalid form for assignment or statement-function definition at %1")
+SHORT("Invalid statement at %0"))
+FFEBAD_MSG (FFEBAD_INVALID_STMT_FORM, FATAL,
+LONG("Invalid form for %A statement at %0")
+SHORT("Invalid %A statement at %0"))
+FFEBAD_MSG (FFEBAD_INVALID_HOLL_IN_STMT, FATAL,
+LONG("Invalid use of hollerith constant in statement at %0 -- enclose the constant in parentheses (for example, change BACKSPACE 2HAB to BACKSPACE (2HAB))")
+SHORT("Enclose hollerith constant in statement at %0 in parentheses"))
+FFEBAD_MSG (FFEBAD_FORMAT_EXTRA_COMMA, FATAL,
"Extraneous comma in FORMAT statement at %0")
-FFEBAD_MSGS1 (FFEBAD_FORMAT_MISSING_COMMA, WARN,
+FFEBAD_MSG (FFEBAD_FORMAT_MISSING_COMMA, WARN,
"Missing comma in FORMAT statement at %0")
-FFEBAD_MSGS1 (FFEBAD_FORMAT_SPURIOUS_SIGN, FATAL,
+FFEBAD_MSG (FFEBAD_FORMAT_SPURIOUS_SIGN, FATAL,
"Spurious sign in FORMAT statement at %0")
-FFEBAD_MSGS1 (FFEBAD_FORMAT_SPURIOUS_NUMBER, FATAL,
+FFEBAD_MSG (FFEBAD_FORMAT_SPURIOUS_NUMBER, FATAL,
"Spurious number in FORMAT statement at %0")
-FFEBAD_MSGS1 (FFEBAD_FORMAT_TEXT_IN_NUMBER, FATAL,
+FFEBAD_MSG (FFEBAD_FORMAT_TEXT_IN_NUMBER, FATAL,
"Spurious text trailing number in FORMAT statement at %0")
-FFEBAD_MSGS2 (FFEBAD_FORMAT_P_NOCOMMA, FATAL,
-"nP control edit descriptor not followed by comma but followed by edit descriptor at %0 other than D, E, EN, F, or G",
-"Invalid edit descriptor at %0 following nP control edit descriptor")
-FFEBAD_MSGS1 (FFEBAD_FORMAT_BAD_SPEC, FATAL,
+FFEBAD_MSG (FFEBAD_FORMAT_P_NOCOMMA, FATAL,
+LONG("nP control edit descriptor not followed by comma but followed by edit descriptor at %0 other than D, E, EN, F, or G")
+SHORT("Invalid edit descriptor at %0 following nP control edit descriptor"))
+FFEBAD_MSG (FFEBAD_FORMAT_BAD_SPEC, FATAL,
"Unrecognized FORMAT specifier at %0")
-FFEBAD_MSGS2 (FFEBAD_FORMAT_BAD_I_SPEC, FATAL,
-"Invalid I specifier in FORMAT statement at %0 -- correct form: [r]Iw.[m]",
-"Invalid I specifier in FORMAT statement at %0")
-FFEBAD_MSGS2 (FFEBAD_FORMAT_BAD_B_SPEC, FATAL,
-"Invalid B specifier in FORMAT statement at %0 -- correct form: [r]Bw.[m]",
-"Invalid B specifier in FORMAT statement at %0")
-FFEBAD_MSGS2 (FFEBAD_FORMAT_BAD_O_SPEC, FATAL,
-"Invalid O specifier in FORMAT statement at %0 -- correct form: [r]Ow.[m]",
-"Invalid O specifier in FORMAT statement at %0")
-FFEBAD_MSGS2 (FFEBAD_FORMAT_BAD_Z_SPEC, FATAL,
-"Invalid Z specifier in FORMAT statement at %0 -- correct form: [r]Zw.[m]",
-"Invalid Z specifier in FORMAT statement at %0")
-FFEBAD_MSGS2 (FFEBAD_FORMAT_BAD_F_SPEC, FATAL,
-"Invalid F specifier in FORMAT statement at %0 -- correct form: [r]Fw.d",
-"Invalid F specifier in FORMAT statement at %0")
-FFEBAD_MSGS2 (FFEBAD_FORMAT_BAD_E_SPEC, FATAL,
-"Invalid E specifier in FORMAT statement at %0 -- correct form: [r]Ew.d[Ee]",
-"Invalid E specifier in FORMAT statement at %0")
-FFEBAD_MSGS2 (FFEBAD_FORMAT_BAD_EN_SPEC, FATAL,
-"Invalid EN specifier in FORMAT statement at %0 -- correct form: [r]ENw.d[Ee]",
-"Invalid EN specifier in FORMAT statement at %0")
-FFEBAD_MSGS2 (FFEBAD_FORMAT_BAD_G_SPEC, FATAL,
-"Invalid G specifier in FORMAT statement at %0 -- correct form: [r]Gw.d[Ee]",
-"Invalid G specifier in FORMAT statement at %0")
-FFEBAD_MSGS2 (FFEBAD_FORMAT_BAD_L_SPEC, FATAL,
-"Invalid L specifier in FORMAT statement at %0 -- correct form: [r]Lw",
-"Invalid L specifier in FORMAT statement at %0")
-FFEBAD_MSGS2 (FFEBAD_FORMAT_BAD_A_SPEC, FATAL,
-"Invalid A specifier in FORMAT statement at %0 -- correct form: [r]A[w]",
-"Invalid A specifier in FORMAT statement at %0")
-FFEBAD_MSGS2 (FFEBAD_FORMAT_BAD_D_SPEC, FATAL,
-"Invalid D specifier in FORMAT statement at %0 -- correct form: [r]Dw.d",
-"Invalid D specifier in FORMAT statement at %0")
-FFEBAD_MSGS2 (FFEBAD_FORMAT_BAD_Q_SPEC, FATAL,
-"Invalid Q specifier in FORMAT statement at %0 -- correct form: Q",
-"Invalid Q specifier in FORMAT statement at %0")
-FFEBAD_MSGS2 (FFEBAD_FORMAT_BAD_DOLLAR_SPEC, FATAL,
-"Invalid $ specifier in FORMAT statement at %0 -- correct form: $",
-"Invalid $ specifier in FORMAT statement at %0")
-FFEBAD_MSGS2 (FFEBAD_FORMAT_BAD_P_SPEC, FATAL,
-"Invalid P specifier in FORMAT statement at %0 -- correct form: kP",
-"Invalid P specifier in FORMAT statement at %0")
-FFEBAD_MSGS2 (FFEBAD_FORMAT_BAD_T_SPEC, FATAL,
-"Invalid T specifier in FORMAT statement at %0 -- correct form: Tn",
-"Invalid T specifier in FORMAT statement at %0")
-FFEBAD_MSGS2 (FFEBAD_FORMAT_BAD_TL_SPEC, FATAL,
-"Invalid TL specifier in FORMAT statement at %0 -- correct form: TLn",
-"Invalid TL specifier in FORMAT statement at %0")
-FFEBAD_MSGS2 (FFEBAD_FORMAT_BAD_TR_SPEC, FATAL,
-"Invalid TR specifier in FORMAT statement at %0 -- correct form: TRn",
-"Invalid TR specifier in FORMAT statement at %0")
-FFEBAD_MSGS2 (FFEBAD_FORMAT_BAD_X_SPEC, FATAL,
-"Invalid X specifier in FORMAT statement at %0 -- correct form: nX",
-"Invalid X specifier in FORMAT statement at %0")
-FFEBAD_MSGS2 (FFEBAD_FORMAT_BAD_S_SPEC, FATAL,
-"Invalid S specifier in FORMAT statement at %0 -- correct form: S",
-"Invalid S specifier in FORMAT statement at %0")
-FFEBAD_MSGS2 (FFEBAD_FORMAT_BAD_SP_SPEC, FATAL,
-"Invalid SP specifier in FORMAT statement at %0 -- correct form: SP",
-"Invalid SP specifier in FORMAT statement at %0")
-FFEBAD_MSGS2 (FFEBAD_FORMAT_BAD_SS_SPEC, FATAL,
-"Invalid SS specifier in FORMAT statement at %0 -- correct form: SS",
-"Invalid SS specifier in FORMAT statement at %0")
-FFEBAD_MSGS2 (FFEBAD_FORMAT_BAD_BN_SPEC, FATAL,
-"Invalid BN specifier in FORMAT statement at %0 -- correct form: BN",
-"Invalid BN specifier in FORMAT statement at %0")
-FFEBAD_MSGS2 (FFEBAD_FORMAT_BAD_BZ_SPEC, FATAL,
-"Invalid BZ specifier in FORMAT statement at %0 -- correct form: BZ",
-"Invalid BZ specifier in FORMAT statement at %0")
-FFEBAD_MSGS2 (FFEBAD_FORMAT_BAD_COLON_SPEC, FATAL,
-"Invalid : specifier in FORMAT statement at %0 -- correct form: :",
-"Invalid : specifier in FORMAT statement at %0")
-FFEBAD_MSGS2 (FFEBAD_FORMAT_BAD_H_SPEC, FATAL,
-"Invalid H specifier in FORMAT statement at %0 -- correct form: nHcharacters !where n is an unsigned decimal constant, and characters !contains exactly n characters (including spaces)",
-"Invalid H specifier in FORMAT statement at %0")
-FFEBAD_MSGS1 (FFEBAD_FORMAT_MISSING_PAREN, FATAL,
+FFEBAD_MSG (FFEBAD_FORMAT_BAD_I_SPEC, FATAL,
+LONG("Invalid I specifier in FORMAT statement at %0 -- correct form: [r]Iw.[m]")
+SHORT("Invalid I specifier in FORMAT statement at %0"))
+FFEBAD_MSG (FFEBAD_FORMAT_BAD_B_SPEC, FATAL,
+LONG("Invalid B specifier in FORMAT statement at %0 -- correct form: [r]Bw.[m]")
+SHORT("Invalid B specifier in FORMAT statement at %0"))
+FFEBAD_MSG (FFEBAD_FORMAT_BAD_O_SPEC, FATAL,
+LONG("Invalid O specifier in FORMAT statement at %0 -- correct form: [r]Ow.[m]")
+SHORT("Invalid O specifier in FORMAT statement at %0"))
+FFEBAD_MSG (FFEBAD_FORMAT_BAD_Z_SPEC, FATAL,
+LONG("Invalid Z specifier in FORMAT statement at %0 -- correct form: [r]Zw.[m]")
+SHORT("Invalid Z specifier in FORMAT statement at %0"))
+FFEBAD_MSG (FFEBAD_FORMAT_BAD_F_SPEC, FATAL,
+LONG("Invalid F specifier in FORMAT statement at %0 -- correct form: [r]Fw.d")
+SHORT("Invalid F specifier in FORMAT statement at %0"))
+FFEBAD_MSG (FFEBAD_FORMAT_BAD_E_SPEC, FATAL,
+LONG("Invalid E specifier in FORMAT statement at %0 -- correct form: [r]Ew.d[Ee]")
+SHORT("Invalid E specifier in FORMAT statement at %0"))
+FFEBAD_MSG (FFEBAD_FORMAT_BAD_EN_SPEC, FATAL,
+LONG("Invalid EN specifier in FORMAT statement at %0 -- correct form: [r]ENw.d[Ee]")
+SHORT("Invalid EN specifier in FORMAT statement at %0"))
+FFEBAD_MSG (FFEBAD_FORMAT_BAD_G_SPEC, FATAL,
+LONG("Invalid G specifier in FORMAT statement at %0 -- correct form: [r]Gw.d[Ee]")
+SHORT("Invalid G specifier in FORMAT statement at %0"))
+FFEBAD_MSG (FFEBAD_FORMAT_BAD_L_SPEC, FATAL,
+LONG("Invalid L specifier in FORMAT statement at %0 -- correct form: [r]Lw")
+SHORT("Invalid L specifier in FORMAT statement at %0"))
+FFEBAD_MSG (FFEBAD_FORMAT_BAD_A_SPEC, FATAL,
+LONG("Invalid A specifier in FORMAT statement at %0 -- correct form: [r]A[w]")
+SHORT("Invalid A specifier in FORMAT statement at %0"))
+FFEBAD_MSG (FFEBAD_FORMAT_BAD_D_SPEC, FATAL,
+LONG("Invalid D specifier in FORMAT statement at %0 -- correct form: [r]Dw.d")
+SHORT("Invalid D specifier in FORMAT statement at %0"))
+FFEBAD_MSG (FFEBAD_FORMAT_BAD_Q_SPEC, FATAL,
+LONG("Invalid Q specifier in FORMAT statement at %0 -- correct form: Q")
+SHORT("Invalid Q specifier in FORMAT statement at %0"))
+FFEBAD_MSG (FFEBAD_FORMAT_BAD_DOLLAR_SPEC, FATAL,
+LONG("Invalid $ specifier in FORMAT statement at %0 -- correct form: $")
+SHORT("Invalid $ specifier in FORMAT statement at %0"))
+FFEBAD_MSG (FFEBAD_FORMAT_BAD_P_SPEC, FATAL,
+LONG("Invalid P specifier in FORMAT statement at %0 -- correct form: kP")
+SHORT("Invalid P specifier in FORMAT statement at %0"))
+FFEBAD_MSG (FFEBAD_FORMAT_BAD_T_SPEC, FATAL,
+LONG("Invalid T specifier in FORMAT statement at %0 -- correct form: Tn")
+SHORT("Invalid T specifier in FORMAT statement at %0"))
+FFEBAD_MSG (FFEBAD_FORMAT_BAD_TL_SPEC, FATAL,
+LONG("Invalid TL specifier in FORMAT statement at %0 -- correct form: TLn")
+SHORT("Invalid TL specifier in FORMAT statement at %0"))
+FFEBAD_MSG (FFEBAD_FORMAT_BAD_TR_SPEC, FATAL,
+LONG("Invalid TR specifier in FORMAT statement at %0 -- correct form: TRn")
+SHORT("Invalid TR specifier in FORMAT statement at %0"))
+FFEBAD_MSG (FFEBAD_FORMAT_BAD_X_SPEC, FATAL,
+LONG("Invalid X specifier in FORMAT statement at %0 -- correct form: nX")
+SHORT("Invalid X specifier in FORMAT statement at %0"))
+FFEBAD_MSG (FFEBAD_FORMAT_BAD_S_SPEC, FATAL,
+LONG("Invalid S specifier in FORMAT statement at %0 -- correct form: S")
+SHORT("Invalid S specifier in FORMAT statement at %0"))
+FFEBAD_MSG (FFEBAD_FORMAT_BAD_SP_SPEC, FATAL,
+LONG("Invalid SP specifier in FORMAT statement at %0 -- correct form: SP")
+SHORT("Invalid SP specifier in FORMAT statement at %0"))
+FFEBAD_MSG (FFEBAD_FORMAT_BAD_SS_SPEC, FATAL,
+LONG("Invalid SS specifier in FORMAT statement at %0 -- correct form: SS")
+SHORT("Invalid SS specifier in FORMAT statement at %0"))
+FFEBAD_MSG (FFEBAD_FORMAT_BAD_BN_SPEC, FATAL,
+LONG("Invalid BN specifier in FORMAT statement at %0 -- correct form: BN")
+SHORT("Invalid BN specifier in FORMAT statement at %0"))
+FFEBAD_MSG (FFEBAD_FORMAT_BAD_BZ_SPEC, FATAL,
+LONG("Invalid BZ specifier in FORMAT statement at %0 -- correct form: BZ")
+SHORT("Invalid BZ specifier in FORMAT statement at %0"))
+FFEBAD_MSG (FFEBAD_FORMAT_BAD_COLON_SPEC, FATAL,
+LONG("Invalid : specifier in FORMAT statement at %0 -- correct form: :")
+SHORT("Invalid : specifier in FORMAT statement at %0"))
+FFEBAD_MSG (FFEBAD_FORMAT_BAD_H_SPEC, FATAL,
+LONG("Invalid H specifier in FORMAT statement at %0 -- correct form: nHcharacters !where n is an unsigned decimal constant, and characters !contains exactly n characters (including spaces)")
+SHORT("Invalid H specifier in FORMAT statement at %0"))
+FFEBAD_MSG (FFEBAD_FORMAT_MISSING_PAREN, FATAL,
"Missing close-parenthese(s) in FORMAT statement at %0")
-FFEBAD_MSGS1 (FFEBAD_FORMAT_MISSING_DOT, FATAL,
+FFEBAD_MSG (FFEBAD_FORMAT_MISSING_DOT, FATAL,
"Missing number following period in FORMAT statement at %0")
-FFEBAD_MSGS1 (FFEBAD_FORMAT_MISSING_EXP, FATAL,
+FFEBAD_MSG (FFEBAD_FORMAT_MISSING_EXP, FATAL,
"Missing number following `E' in FORMAT statement at %0")
-FFEBAD_MSGS2 (FFEBAD_FORMAT_EXPR_TOKEN, FATAL,
-"Invalid token with FORMAT run-time expression at %0 -- use the traditional operators .LT., .LE., .GT., .GE., .EQ., and .NE. in place of the newer tokens <, <=, >, >=, ==, and !=, because > ends an expression within a FORMAT statement",
-"Invalid token with FORMAT run-time expression at %0")
-FFEBAD_MSGS1 (FFEBAD_TRAILING_COMMA, WARN,
+FFEBAD_MSG (FFEBAD_FORMAT_EXPR_TOKEN, FATAL,
+LONG("Invalid token with FORMAT run-time expression at %0 -- use the traditional operators .LT., .LE., .GT., .GE., .EQ., and .NE. in place of the newer tokens <, <=, >, >=, ==, and !=, because > ends an expression within a FORMAT statement")
+SHORT("Invalid token with FORMAT run-time expression at %0"))
+FFEBAD_MSG (FFEBAD_TRAILING_COMMA, WARN,
"Spurious trailing comma preceding terminator at %0")
-FFEBAD_MSGS1 (FFEBAD_INTERFACE_ASSIGNMENT, WARN,
+FFEBAD_MSG (FFEBAD_INTERFACE_ASSIGNMENT, WARN,
"At %0, specify OPERATOR instead of ASSIGNMENT for INTERFACE statement not specifying the assignment operator (=)")
-FFEBAD_MSGS1 (FFEBAD_INTERFACE_OPERATOR, WARN,
+FFEBAD_MSG (FFEBAD_INTERFACE_OPERATOR, WARN,
"At %0, specify ASSIGNMENT instead of OPERATOR for INTERFACE statement specifying the assignment operator (=)")
-FFEBAD_MSGS2 (FFEBAD_INTERFACE_NONLETTER, FATAL,
-"Defined operator at %0 contains a nonletter -- must contain only letters A-Z (or a-z)",
-"Nonletter in defined operator at %0")
-FFEBAD_MSGS2 (FFEBAD_INVALID_TYPEDECL_ATTR, FATAL,
-"Invalid type-declaration attribute at %0 -- must be one of: DIMENSION(array-spec), EXTERNAL, INTRINSIC, PARAMETER, or SAVE",
-"Invalid type-declaration attribute at %0")
-FFEBAD_MSGS1 (FFEBAD_INVALID_TYPEDECL_INIT, FATAL,
+FFEBAD_MSG (FFEBAD_INTERFACE_NONLETTER, FATAL,
+LONG("Defined operator at %0 contains a nonletter -- must contain only letters A-Z (or a-z)")
+SHORT("Nonletter in defined operator at %0"))
+FFEBAD_MSG (FFEBAD_INVALID_TYPEDECL_ATTR, FATAL,
+LONG("Invalid type-declaration attribute at %0 -- must be one of: DIMENSION(array-spec), EXTERNAL, INTRINSIC, PARAMETER, or SAVE")
+SHORT("Invalid type-declaration attribute at %0"))
+FFEBAD_MSG (FFEBAD_INVALID_TYPEDECL_INIT, FATAL,
"Cannot specify =initialization-expr at %0 unless `::' appears before list of objects")
-FFEBAD_MSGS1 (FFEBAD_LABEL_USE_DEF, FATAL,
+FFEBAD_MSG (FFEBAD_LABEL_USE_DEF, FATAL,
"Reference to label at %1 inconsistent with its definition at %0")
-FFEBAD_MSGS1 (FFEBAD_LABEL_USE_USE, FATAL,
+FFEBAD_MSG (FFEBAD_LABEL_USE_USE, FATAL,
"Reference to label at %1 inconsistent with earlier reference at %0")
-FFEBAD_MSGS1 (FFEBAD_LABEL_DEF_DO, FATAL,
+FFEBAD_MSG (FFEBAD_LABEL_DEF_DO, FATAL,
"DO-statement reference to label at %1 follows its definition at %0")
-FFEBAD_MSGS1 (FFEBAD_LABEL_BLOCK, WARN,
+FFEBAD_MSG (FFEBAD_LABEL_BLOCK, WARN,
"Reference to label at %1 is outside block containing definition at %0")
-FFEBAD_MSGS1 (FFEBAD_LABEL_DO_BLOCK_DO, FATAL,
+FFEBAD_MSG (FFEBAD_LABEL_DO_BLOCK_DO, FATAL,
"DO-statement references to label at %0 and %2 separated by unterminated block starting at %1")
-FFEBAD_MSGS1 (FFEBAD_LABEL_DO_BLOCK_END, FATAL,
+FFEBAD_MSG (FFEBAD_LABEL_DO_BLOCK_END, FATAL,
"DO-statement reference to label at %0 and label definition at %2 separated by unterminated block starting at %1")
-FFEBAD_MSGS1 (FFEBAD_INVALID_LABEL_DEF, FATAL,
+FFEBAD_MSG (FFEBAD_INVALID_LABEL_DEF, FATAL,
"Label definition at %0 invalid on this kind of statement")
-FFEBAD_MSGS1 (FFEBAD_ORDER_1, FATAL,
+FFEBAD_MSG (FFEBAD_ORDER_1, FATAL,
"Statement at %0 invalid in this context")
-FFEBAD_MSGS1 (FFEBAD_ORDER_2, FATAL,
+FFEBAD_MSG (FFEBAD_ORDER_2, FATAL,
"Statement at %0 invalid in context established by statement at %1")
-FFEBAD_MSGS1 (FFEBAD_CONSTRUCT_NAMED, FATAL,
+FFEBAD_MSG (FFEBAD_CONSTRUCT_NAMED, FATAL,
"Statement at %0 must specify construct name specified at %1")
-FFEBAD_MSGS1 (FFEBAD_CONSTRUCT_NOT_NAMED, FATAL,
+FFEBAD_MSG (FFEBAD_CONSTRUCT_NOT_NAMED, FATAL,
"Construct name at %0 superfluous, no construct name specified at %1")
-FFEBAD_MSGS1 (FFEBAD_CONSTRUCT_WRONG_NAME, FATAL,
+FFEBAD_MSG (FFEBAD_CONSTRUCT_WRONG_NAME, FATAL,
"Construct name at %0 not the same as construct name at %1")
-FFEBAD_MSGS1 (FFEBAD_CONSTRUCT_NO_DO_NAME, FATAL,
+FFEBAD_MSG (FFEBAD_CONSTRUCT_NO_DO_NAME, FATAL,
"Construct name at %0 does not match construct name for any containing DO constructs")
-FFEBAD_MSGS1 (FFEBAD_DO_HAD_LABEL, FATAL,
+FFEBAD_MSG (FFEBAD_DO_HAD_LABEL, FATAL,
"Label definition missing at %0 for DO construct specifying label at %1")
-FFEBAD_MSGS1 (FFEBAD_AFTER_ELSE, FATAL,
+FFEBAD_MSG (FFEBAD_AFTER_ELSE, FATAL,
"Statement at %0 follows ELSE block for IF construct at %1")
-FFEBAD_MSGS1 (FFEBAD_FORMAT_NO_LABEL_DEF, FATAL,
+FFEBAD_MSG (FFEBAD_FORMAT_NO_LABEL_DEF, FATAL,
"No label definition for FORMAT statement at %0")
-FFEBAD_MSGS1 (FFEBAD_SECOND_ELSE_WHERE, FATAL,
+FFEBAD_MSG (FFEBAD_SECOND_ELSE_WHERE, FATAL,
"Second occurrence of ELSE WHERE at %0 within WHERE at %1")
-FFEBAD_MSGS1 (FFEBAD_END_WO, WARN,
+FFEBAD_MSG (FFEBAD_END_WO, WARN,
"END statement at %0 missing `%A' keyword required for internal or module procedure(s) bounded by %1")
-FFEBAD_MSGS1 (FFEBAD_INVALID_MODULE_PROCEDURE, FATAL,
+FFEBAD_MSG (FFEBAD_INVALID_MODULE_PROCEDURE, FATAL,
"MODULE PROCEDURE statement at %0 disallowed because INTERFACE at %1 specifies no generic name, operator, or assignment")
-FFEBAD_MSGS1 (FFEBAD_BLOCKDATA_NOT_NAMED, FATAL,
+FFEBAD_MSG (FFEBAD_BLOCKDATA_NOT_NAMED, FATAL,
"BLOCK DATA name at %0 superfluous, no name specified at %1")
-FFEBAD_MSGS1 (FFEBAD_PROGRAM_NOT_NAMED, FATAL,
+FFEBAD_MSG (FFEBAD_PROGRAM_NOT_NAMED, FATAL,
"Program name at %0 superfluous, no PROGRAM statement specified at %1")
-FFEBAD_MSGS1 (FFEBAD_UNIT_WRONG_NAME, FATAL,
+FFEBAD_MSG (FFEBAD_UNIT_WRONG_NAME, FATAL,
"Program unit name at %0 not the same as name at %1")
-FFEBAD_MSGS1 (FFEBAD_TYPE_WRONG_NAME, FATAL,
+FFEBAD_MSG (FFEBAD_TYPE_WRONG_NAME, FATAL,
"Type name at %0 not the same as name at %1")
-FFEBAD_MSGS1 (FFEBAD_EOF_BEFORE_BLOCK_END, FATAL,
+FFEBAD_MSG (FFEBAD_EOF_BEFORE_BLOCK_END, FATAL,
"End of source file before end of block started at %0")
-FFEBAD_MSGS1 (FFEBAD_UNDEF_LABEL, FATAL,
+FFEBAD_MSG (FFEBAD_UNDEF_LABEL, FATAL,
"Undefined label, first referenced at %0")
-FFEBAD_MSGS1 (FFEBAD_CONFLICTING_SAVES, WARN,
+FFEBAD_MSG (FFEBAD_CONFLICTING_SAVES, WARN,
"SAVE statement or attribute at %1 cannot be specified along with SAVE statement or attribute at %0")
-FFEBAD_MSGS1 (FFEBAD_CONFLICTING_ACCESSES, FATAL,
+FFEBAD_MSG (FFEBAD_CONFLICTING_ACCESSES, FATAL,
"PUBLIC or PRIVATE statement at %1 cannot be specified along with PUBLIC or PRIVATE statement at %0")
-FFEBAD_MSGS1 (FFEBAD_RETURN_IN_MAIN, WARN,
+FFEBAD_MSG (FFEBAD_RETURN_IN_MAIN, WARN,
"RETURN statement at %0 invalid within a main program unit")
-FFEBAD_MSGS1 (FFEBAD_ALTRETURN_IN_PROGRAM, FATAL,
+FFEBAD_MSG (FFEBAD_ALTRETURN_IN_PROGRAM, FATAL,
"Alternate return specifier at %0 invalid within a main program unit")
-FFEBAD_MSGS1 (FFEBAD_ALTRETURN_IN_FUNCTION, FATAL,
+FFEBAD_MSG (FFEBAD_ALTRETURN_IN_FUNCTION, FATAL,
"Alternate return specifier at %0 invalid within a function")
-FFEBAD_MSGS1 (FFEBAD_DERIVTYP_ACCESS, FATAL,
+FFEBAD_MSG (FFEBAD_DERIVTYP_ACCESS, FATAL,
"Access specifier or PRIVATE statement at %0 invalid for derived-type definition within other than the specification part of a module")
-FFEBAD_MSGS1 (FFEBAD_DERIVTYP_ACCESS_FIRST, FATAL,
+FFEBAD_MSG (FFEBAD_DERIVTYP_ACCESS_FIRST, FATAL,
"Access specifier at %0 must immediately follow derived-type statement at %1 with no intervening statements")
-FFEBAD_MSGS1 (FFEBAD_DERIVTYP_NO_COMPONENTS, FATAL,
+FFEBAD_MSG (FFEBAD_DERIVTYP_NO_COMPONENTS, FATAL,
"No components specified as of %0 for derived-type definition beginning at %1")
-FFEBAD_MSGS1 (FFEBAD_STRUCT_NO_COMPONENTS, FATAL,
+FFEBAD_MSG (FFEBAD_STRUCT_NO_COMPONENTS, FATAL,
"No components specified as of %0 for structure definition beginning at %1")
-FFEBAD_MSGS1 (FFEBAD_STRUCT_MISSING_NAME, FATAL,
+FFEBAD_MSG (FFEBAD_STRUCT_MISSING_NAME, FATAL,
"Missing structure name for outer structure definition at %0")
-FFEBAD_MSGS1 (FFEBAD_STRUCT_IGNORING_FIELD, FATAL,
+FFEBAD_MSG (FFEBAD_STRUCT_IGNORING_FIELD, FATAL,
"Field names at %0 for outer structure definition -- specify them in a subsequent RECORD statement instead")
-FFEBAD_MSGS1 (FFEBAD_STRUCT_MISSING_FIELD, FATAL,
+FFEBAD_MSG (FFEBAD_STRUCT_MISSING_FIELD, FATAL,
"Missing field name(s) for structure definition at %0 within structure definition at %1")
-FFEBAD_MSGS1 (FFEBAD_MAP_NO_COMPONENTS, FATAL,
+FFEBAD_MSG (FFEBAD_MAP_NO_COMPONENTS, FATAL,
"No components specified as of %0 for map beginning at %1")
-FFEBAD_MSGS1 (FFEBAD_UNION_NO_TWO_MAPS, FATAL,
+FFEBAD_MSG (FFEBAD_UNION_NO_TWO_MAPS, FATAL,
"Zero or one maps specified as of %0 for union beginning at %1 -- at least two are required")
-FFEBAD_MSGS1 (FFEBAD_MISSING_SPECIFIER, FATAL,
+FFEBAD_MSG (FFEBAD_MISSING_SPECIFIER, FATAL,
"Missing %A specifier in statement at %0")
-FFEBAD_MSGS1 (FFEBAD_NAMELIST_ITEMS, FATAL,
+FFEBAD_MSG (FFEBAD_NAMELIST_ITEMS, FATAL,
"Items in I/O list starting at %0 invalid for namelist-directed I/O")
-FFEBAD_MSGS1 (FFEBAD_CONFLICTING_SPECS, FATAL,
+FFEBAD_MSG (FFEBAD_CONFLICTING_SPECS, FATAL,
"Conflicting I/O control specifications at %0 and %1")
-FFEBAD_MSGS1 (FFEBAD_NO_UNIT_SPEC, FATAL,
+FFEBAD_MSG (FFEBAD_NO_UNIT_SPEC, FATAL,
"No UNIT= specifier in I/O control list at %0")
-FFEBAD_MSGS1 (FFEBAD_MISSING_ADVANCE_SPEC, FATAL,
+FFEBAD_MSG (FFEBAD_MISSING_ADVANCE_SPEC, FATAL,
"Specification at %0 requires ADVANCE=`NO' specification in same I/O control list")
-FFEBAD_MSGS1 (FFEBAD_MISSING_FORMAT_SPEC, FATAL,
+FFEBAD_MSG (FFEBAD_MISSING_FORMAT_SPEC, FATAL,
"Specification at %0 requires explicit FMT= specification in same I/O control list")
-FFEBAD_MSGS2 (FFEBAD_SPEC_VALUE, FATAL,
-"Unrecognized value for character constant at %0 -- expecting %A",
-"Unrecognized value for character constant at %0")
-FFEBAD_MSGS1 (FFEBAD_CASE_SECOND_DEFAULT, FATAL,
+FFEBAD_MSG (FFEBAD_SPEC_VALUE, FATAL,
+LONG("Unrecognized value for character constant at %0 -- expecting %A")
+SHORT("Unrecognized value for character constant at %0"))
+FFEBAD_MSG (FFEBAD_CASE_SECOND_DEFAULT, FATAL,
"Second occurrence of CASE DEFAULT at %0 within SELECT CASE at %1")
-FFEBAD_MSGS1 (FFEBAD_CASE_DUPLICATE, FATAL,
+FFEBAD_MSG (FFEBAD_CASE_DUPLICATE, FATAL,
"Duplicate or overlapping case values/ranges at %0 and %1")
-FFEBAD_MSGS1 (FFEBAD_CASE_TYPE_DISAGREE, FATAL,
+FFEBAD_MSG (FFEBAD_CASE_TYPE_DISAGREE, FATAL,
"Type and/or kind-type parameter disagreement between CASE value or value within range at %0 and SELECT CASE at %1")
-FFEBAD_MSGS1 (FFEBAD_CASE_LOGICAL_RANGE, FATAL,
+FFEBAD_MSG (FFEBAD_CASE_LOGICAL_RANGE, FATAL,
"Range specification at %0 invalid for CASE statement within logical-type SELECT CASE statement")
-FFEBAD_MSGS2 (FFEBAD_CASE_BAD_RANGE, FATAL,
-"Range specification at %0 invalid -- at least one expression must be specified, or use CASE DEFAULT",
-"Range specification at %0 invalid")
-FFEBAD_MSGS2 (FFEBAD_CASE_RANGE_USELESS, INFORM,
-"Range specification at %0 useless; first expression greater than second expression in range, so range can never be matched by any selection expression",
-"Useless range at %0")
-FFEBAD_MSGS1 (FFEBAD_F90, FATAL,
+FFEBAD_MSG (FFEBAD_CASE_BAD_RANGE, FATAL,
+LONG("Range specification at %0 invalid -- at least one expression must be specified, or use CASE DEFAULT")
+SHORT("Range specification at %0 invalid"))
+FFEBAD_MSG (FFEBAD_CASE_RANGE_USELESS, INFORM,
+LONG("Range specification at %0 useless; first expression greater than second expression in range, so range can never be matched by any selection expression")
+SHORT("Useless range at %0"))
+FFEBAD_MSG (FFEBAD_F90, FATAL,
"Fortran 90 feature at %0 unsupported")
-FFEBAD_MSGS2 (FFEBAD_KINDTYPE, FATAL,
-"Invalid kind at %0 for type at %1 -- unsupported or not permitted",
-"Invalid kind at %0 for type at %1")
-FFEBAD_MSGS2 (FFEBAD_BAD_IMPLICIT, FATAL,
-"Cannot establish implicit type for initial letter `%A' at %0 -- already explicitly established or used to set implicit type of some name, or backwards order of letters in letter range",
-"Cannot establish implicit type for initial letter `%A' at %0")
-FFEBAD_MSGS1 (FFEBAD_SYMERR, FATAL,
+FFEBAD_MSG (FFEBAD_KINDTYPE, FATAL,
+LONG("Invalid kind at %0 for type at %1 -- unsupported or not permitted")
+SHORT("Invalid kind at %0 for type at %1"))
+FFEBAD_MSG (FFEBAD_BAD_IMPLICIT, FATAL,
+LONG("Cannot establish implicit type for initial letter `%A' at %0 -- already explicitly established or used to set implicit type of some name, or backwards order of letters in letter range")
+SHORT("Cannot establish implicit type for initial letter `%A' at %0"))
+FFEBAD_MSG (FFEBAD_SYMERR, FATAL,
"Invalid declaration of or reference to symbol `%A' at %0 [initially seen at %1]")
-FFEBAD_MSGS2 (FFEBAD_LABEL_WRONG_PLACE, FATAL,
-"Label definition %A (at %0) invalid -- must be in columns 1-5",
-"Invalid label definition %A (at %0)")
-FFEBAD_MSGS1 (FFEBAD_NULL_ELEMENT, FATAL,
+FFEBAD_MSG (FFEBAD_LABEL_WRONG_PLACE, FATAL,
+LONG("Label definition %A (at %0) invalid -- must be in columns 1-5")
+SHORT("Invalid label definition %A (at %0)"))
+FFEBAD_MSG (FFEBAD_NULL_ELEMENT, FATAL,
"Null element at %0 for array reference at %1")
-FFEBAD_MSGS1 (FFEBAD_TOO_FEW_ELEMENTS, FATAL,
+FFEBAD_MSG (FFEBAD_TOO_FEW_ELEMENTS, FATAL,
"Too few elements (%A missing) as of %0 for array reference at %1")
-FFEBAD_MSGS1 (FFEBAD_TOO_MANY_ELEMENTS, FATAL,
+FFEBAD_MSG (FFEBAD_TOO_MANY_ELEMENTS, FATAL,
"Too many elements as of %0 for array reference at %1")
-FFEBAD_MSGS1 (FFEBAD_MISSING_COLON_IN_SUBSTR, FATAL,
+FFEBAD_MSG (FFEBAD_MISSING_COLON_IN_SUBSTR, FATAL,
"Missing colon as of %0 in substring reference for %1")
-FFEBAD_MSGS1 (FFEBAD_BAD_SUBSTR, FATAL,
+FFEBAD_MSG (FFEBAD_BAD_SUBSTR, FATAL,
"Invalid use at %0 of substring operator on %1")
-FFEBAD_MSGS1 (FFEBAD_RANGE_SUBSTR, WARN,
+FFEBAD_MSG (FFEBAD_RANGE_SUBSTR, WARN,
"Substring begin/end point at %0 out of defined range")
-FFEBAD_MSGS1 (FFEBAD_RANGE_ARRAY, WARN,
+FFEBAD_MSG (FFEBAD_RANGE_ARRAY, WARN,
"Array element value at %0 out of defined range")
-FFEBAD_MSGS1 (FFEBAD_EXPR_WRONG, FATAL,
+FFEBAD_MSG (FFEBAD_EXPR_WRONG, FATAL,
"Expression at %0 has incorrect data type or rank for its context")
-FFEBAD_MSGS1 (FFEBAD_DIV_BY_ZERO, WARN,
+FFEBAD_MSG (FFEBAD_DIV_BY_ZERO, WARN,
"Division by 0 (zero) at %0 (IEEE not yet supported)")
-FFEBAD_MSGS1 (FFEBAD_DO_STEP_ZERO, FATAL,
+FFEBAD_MSG (FFEBAD_DO_STEP_ZERO, FATAL,
"%A step count known to be 0 (zero) at %0")
-FFEBAD_MSGS1 (FFEBAD_DO_END_OVERFLOW, WARN,
+FFEBAD_MSG (FFEBAD_DO_END_OVERFLOW, WARN,
"%A end value plus step count known to overflow at %0")
-FFEBAD_MSGS1 (FFEBAD_DO_IMP_OVERFLOW, WARN,
+FFEBAD_MSG (FFEBAD_DO_IMP_OVERFLOW, WARN,
"%A begin, end, and step-count values known to result in implementation-dependent behavior due to overflow(s) in intermediate calculations at %0")
-FFEBAD_MSGS1 (FFEBAD_DO_NULL, WARN,
+FFEBAD_MSG (FFEBAD_DO_NULL, WARN,
"%A begin, end, and step-count values known to result in no iterations at %0")
-FFEBAD_MSGS1 (FFEBAD_BAD_TYPES, FATAL,
+FFEBAD_MSG (FFEBAD_BAD_TYPES, FATAL,
"Type disagreement between expressions at %0 and %1")
-FFEBAD_MSGS2 (FFEBAD_FORMAT_EXPR_SPEC, FATAL,
-"Run-time expression at %0 in FORMAT statement that does not follow the first executable statement in the program unit -- move the statement",
-"FORMAT at %0 with run-time expression must follow first executable statement")
-FFEBAD_MSGS2 (FFEBAD_BAD_IMPDO, FATAL,
-"Unexpected token at %0 in implied-DO construct at %1 -- form of implied-DO is `(item-list,do-var=start,end[,incr])'",
-"Unexpected token at %0 in implied-DO construct at %1")
-FFEBAD_MSGS1 (FFEBAD_BAD_IMPDCL, FATAL,
+FFEBAD_MSG (FFEBAD_FORMAT_EXPR_SPEC, FATAL,
+LONG("Run-time expression at %0 in FORMAT statement that does not follow the first executable statement in the program unit -- move the statement")
+SHORT("FORMAT at %0 with run-time expression must follow first executable statement"))
+FFEBAD_MSG (FFEBAD_BAD_IMPDO, FATAL,
+LONG("Unexpected token at %0 in implied-DO construct at %1 -- form of implied-DO is `(item-list,do-var=start,end[,incr])'")
+SHORT("Unexpected token at %0 in implied-DO construct at %1"))
+FFEBAD_MSG (FFEBAD_BAD_IMPDCL, FATAL,
"No specification for implied-DO iterator `%A' at %0")
-FFEBAD_MSGS1 (FFEBAD_IMPDO_PAREN, WARN,
+FFEBAD_MSG (FFEBAD_IMPDO_PAREN, WARN,
"Gratuitous parentheses surround implied-DO construct at %0")
-FFEBAD_MSGS1 (FFEBAD_ZERO_SIZE, FATAL,
+FFEBAD_MSG (FFEBAD_ZERO_SIZE, FATAL,
"Zero-size specification invalid at %0")
-FFEBAD_MSGS1 (FFEBAD_ZERO_ARRAY, FATAL,
+FFEBAD_MSG (FFEBAD_ZERO_ARRAY, FATAL,
"Zero-size array at %0")
-FFEBAD_MSGS1 (FFEBAD_BAD_COMPLEX, FATAL,
+FFEBAD_MSG (FFEBAD_BAD_COMPLEX, FATAL,
"Target machine does not support complex entity of kind specified at %0")
-FFEBAD_MSGS1 (FFEBAD_BAD_DBLCMPLX, FATAL,
+FFEBAD_MSG (FFEBAD_BAD_DBLCMPLX, FATAL,
"Target machine does not support DOUBLE COMPLEX, specified at %0")
-FFEBAD_MSGS1 (FFEBAD_BAD_POWER, WARN,
+FFEBAD_MSG (FFEBAD_BAD_POWER, WARN,
"Attempt to raise constant zero to a power at %0")
-FFEBAD_MSGS2 (FFEBAD_BOOL_ARGS_TYPE, FATAL,
-"Boolean/logical operator at %0 must operate on two subexpressions of logical type, but neither subexpression at %1 or %2 is of logical type",
-"Invalid operands at %1 and %2 for boolean operator at %0")
-FFEBAD_MSGS2 (FFEBAD_BOOL_ARG_TYPE, FATAL,
-"Boolean/logical operator at %0 must operate on two subexpressions of logical type, but the subexpression at %1 is not of logical type",
-"Invalid operand at %1 for boolean operator at %0")
-FFEBAD_MSGS2 (FFEBAD_BOOL_ARG_KIND, FATAL,
-"Boolean/logical operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning logical scalars, or a combination of both -- but the subexpression at %1 is %A",
-"Invalid operand (is %A) at %1 for boolean operator at %0")
-FFEBAD_MSGS2 (FFEBAD_NOT_ARG_TYPE, FATAL,
-".NOT. operator at %0 must operate on subexpression of logical type, but the subexpression at %1 is not of logical type",
-"Invalid operand at %1 for .NOT. operator at %0")
-FFEBAD_MSGS2 (FFEBAD_NOT_ARG_KIND, FATAL,
-".NOT. operator at %0 must operate on scalar subexpressions -- but the subexpression at %1 is %A",
-"Invalid operand (is %A) at %1 for .NOT. operator at %0")
-FFEBAD_MSGS2 (FFEBAD_EQOP_ARGS_TYPE, FATAL,
-"Equality operator at %0 must operate on two subexpressions of arithmetic or character type, but neither subexpression at %1 or %2 is of arithmetic or character type",
-"Invalid operands at %1 and %2 for equality operator at %0")
-FFEBAD_MSGS2 (FFEBAD_EQOP_ARG_TYPE, FATAL,
-"Equality operator at %0 must operate on two subexpressions of arithmetic or character type, but the subexpression at %1 is not of arithmetic or character type",
-"Invalid operand at %1 for equality operator at %0")
-FFEBAD_MSGS2 (FFEBAD_EQOP_ARG_KIND, FATAL,
-"Equality operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning arithmetic or character scalars, or a combination of both -- but the subexpression at %1 is %A",
-"Invalid operand (is %A) at %1 for equality operator at %0")
-FFEBAD_MSGS2 (FFEBAD_RELOP_ARGS_TYPE, FATAL,
-"Relational operator at %0 must operate on two subexpressions of integer, real, or character type, but neither subexpression at %1 or %2 is of integer, real, or character type",
-"Invalid operands at %1 and %2 for relational operator at %0")
-FFEBAD_MSGS2 (FFEBAD_RELOP_ARG_TYPE, FATAL,
-"Relational operator at %0 must operate on two subexpressions of integer, real, or character type, but the subexpression at %1 is not of integer, real, or character type",
-"Invalid operand at %1 for relational operator at %0")
-FFEBAD_MSGS2 (FFEBAD_RELOP_ARG_KIND, FATAL,
-"Relational operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning integer, real, or character scalars, or a combination of both -- but the subexpression at %1 is %A",
-"Invalid operand (is %A) at %1 for relational operator at %0")
-FFEBAD_MSGS2 (FFEBAD_INTRINSIC_REF, FATAL,
-"Reference to intrinsic `%A' at %0 invalid -- one or more arguments have incorrect type",
-"Invalid reference to intrinsic `%A' at %0")
-FFEBAD_MSGS2 (FFEBAD_INTRINSIC_TOOFEW, FATAL,
-"Too few arguments passed to intrinsic `%A' at %0",
-"Too few arguments for intrinsic `%A' at %0")
-FFEBAD_MSGS2 (FFEBAD_INTRINSIC_TOOMANY, FATAL,
-"Too many arguments passed to intrinsic `%A' at %0",
-"Too many arguments for intrinsic `%A' at %0")
-FFEBAD_MSGS2 (FFEBAD_INTRINSIC_DISABLED, FATAL,
-"Reference to disabled intrinsic `%A' at %0",
-"Disabled intrinsic `%A' at %0")
-FFEBAD_MSGS2 (FFEBAD_INTRINSIC_IS_SUBR, FATAL,
-"Reference to intrinsic subroutine `%A' as if it were a function at %0",
-"Function reference to intrinsic subroutine `%A' at %0")
-FFEBAD_MSGS2 (FFEBAD_INTRINSIC_IS_FUNC, FATAL,
-"Reference to intrinsic function `%A' as if it were a subroutine at %0",
-"Subroutine reference to intrinsic function `%A' at %0")
-FFEBAD_MSGS2 (FFEBAD_INTRINSIC_UNIMPL, FATAL,
-"Reference to unimplemented intrinsic `%A' at %0 -- use EXTERNAL to reference user-written procedure with this name",
-"Unimplemented intrinsic `%A' at %0")
-FFEBAD_MSGS2 (FFEBAD_INTRINSIC_UNIMPLW, WARN,
-"Reference to unimplemented intrinsic `%A' at %0 (assumed EXTERNAL)",
-"Unimplemented intrinsic `%A' at %0 (assumed EXTERNAL)")
-FFEBAD_MSGS1 (FFEBAD_INTRINSIC_AMBIG, FATAL,
+FFEBAD_MSG (FFEBAD_BOOL_ARGS_TYPE, FATAL,
+LONG("Boolean/logical operator at %0 must operate on two subexpressions of logical type, but neither subexpression at %1 or %2 is of logical type")
+SHORT("Invalid operands at %1 and %2 for boolean operator at %0"))
+FFEBAD_MSG (FFEBAD_BOOL_ARG_TYPE, FATAL,
+LONG("Boolean/logical operator at %0 must operate on two subexpressions of logical type, but the subexpression at %1 is not of logical type")
+SHORT("Invalid operand at %1 for boolean operator at %0"))
+FFEBAD_MSG (FFEBAD_BOOL_ARG_KIND, FATAL,
+LONG("Boolean/logical operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning logical scalars, or a combination of both -- but the subexpression at %1 is %A")
+SHORT("Invalid operand (is %A) at %1 for boolean operator at %0"))
+FFEBAD_MSG (FFEBAD_NOT_ARG_TYPE, FATAL,
+LONG(".NOT. operator at %0 must operate on subexpression of logical type, but the subexpression at %1 is not of logical type")
+SHORT("Invalid operand at %1 for .NOT. operator at %0"))
+FFEBAD_MSG (FFEBAD_NOT_ARG_KIND, FATAL,
+LONG(".NOT. operator at %0 must operate on scalar subexpressions -- but the subexpression at %1 is %A")
+SHORT("Invalid operand (is %A) at %1 for .NOT. operator at %0"))
+FFEBAD_MSG (FFEBAD_EQOP_ARGS_TYPE, FATAL,
+LONG("Equality operator at %0 must operate on two subexpressions of arithmetic or character type, but neither subexpression at %1 or %2 is of arithmetic or character type")
+SHORT("Invalid operands at %1 and %2 for equality operator at %0"))
+FFEBAD_MSG (FFEBAD_EQOP_ARG_TYPE, FATAL,
+LONG("Equality operator at %0 must operate on two subexpressions of arithmetic or character type, but the subexpression at %1 is not of arithmetic or character type")
+SHORT("Invalid operand at %1 for equality operator at %0"))
+FFEBAD_MSG (FFEBAD_EQOP_ARG_KIND, FATAL,
+LONG("Equality operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning arithmetic or character scalars, or a combination of both -- but the subexpression at %1 is %A")
+SHORT("Invalid operand (is %A) at %1 for equality operator at %0"))
+FFEBAD_MSG (FFEBAD_RELOP_ARGS_TYPE, FATAL,
+LONG("Relational operator at %0 must operate on two subexpressions of integer, real, or character type, but neither subexpression at %1 or %2 is of integer, real, or character type")
+SHORT("Invalid operands at %1 and %2 for relational operator at %0"))
+FFEBAD_MSG (FFEBAD_RELOP_ARG_TYPE, FATAL,
+LONG("Relational operator at %0 must operate on two subexpressions of integer, real, or character type, but the subexpression at %1 is not of integer, real, or character type")
+SHORT("Invalid operand at %1 for relational operator at %0"))
+FFEBAD_MSG (FFEBAD_RELOP_ARG_KIND, FATAL,
+LONG("Relational operator at %0 must operate on two scalar (not array) subexpressions, two function invocations returning integer, real, or character scalars, or a combination of both -- but the subexpression at %1 is %A")
+SHORT("Invalid operand (is %A) at %1 for relational operator at %0"))
+FFEBAD_MSG (FFEBAD_INTRINSIC_REF, FATAL,
+LONG("Reference to intrinsic `%A' at %0 invalid -- one or more arguments have incorrect type")
+SHORT("Invalid reference to intrinsic `%A' at %0"))
+FFEBAD_MSG (FFEBAD_INTRINSIC_TOOFEW, FATAL,
+LONG("Too few arguments passed to intrinsic `%A' at %0")
+SHORT("Too few arguments for intrinsic `%A' at %0"))
+FFEBAD_MSG (FFEBAD_INTRINSIC_TOOMANY, FATAL,
+LONG("Too many arguments passed to intrinsic `%A' at %0")
+SHORT("Too many arguments for intrinsic `%A' at %0"))
+FFEBAD_MSG (FFEBAD_INTRINSIC_DISABLED, FATAL,
+LONG("Reference to disabled intrinsic `%A' at %0")
+SHORT("Disabled intrinsic `%A' at %0"))
+FFEBAD_MSG (FFEBAD_INTRINSIC_IS_SUBR, FATAL,
+LONG("Reference to intrinsic subroutine `%A' as if it were a function at %0")
+SHORT("Function reference to intrinsic subroutine `%A' at %0"))
+FFEBAD_MSG (FFEBAD_INTRINSIC_IS_FUNC, FATAL,
+LONG("Reference to intrinsic function `%A' as if it were a subroutine at %0")
+SHORT("Subroutine reference to intrinsic function `%A' at %0"))
+FFEBAD_MSG (FFEBAD_INTRINSIC_UNIMPL, FATAL,
+LONG("Reference to unimplemented intrinsic `%A' at %0 -- use EXTERNAL to reference user-written procedure with this name")
+SHORT("Unimplemented intrinsic `%A' at %0"))
+FFEBAD_MSG (FFEBAD_INTRINSIC_UNIMPLW, WARN,
+LONG("Reference to unimplemented intrinsic `%A' at %0 (assumed EXTERNAL)")
+SHORT("Unimplemented intrinsic `%A' at %0 (assumed EXTERNAL)"))
+FFEBAD_MSG (FFEBAD_INTRINSIC_AMBIG, FATAL,
"Reference to generic intrinsic `%A' at %0 could be to form %B or %C")
-FFEBAD_MSGS1 (FFEBAD_INTRINSIC_CMPAMBIG, FATAL,
+FFEBAD_MSG (FFEBAD_INTRINSIC_CMPAMBIG, FATAL,
"Ambiguous use of intrinsic `%A' at %0 [info -f g77 M CMPAMBIG]")
-FFEBAD_MSGS1 (FFEBAD_INTRINSIC_EXPIMP, WARN,
+FFEBAD_MSG (FFEBAD_INTRINSIC_EXPIMP, WARN,
"Intrinsic `%A' referenced %Bly at %0, %Cly at %1 [info -f g77 M EXPIMP]")
-FFEBAD_MSGS1 (FFEBAD_INTRINSIC_GLOBAL, WARN,
+FFEBAD_MSG (FFEBAD_INTRINSIC_GLOBAL, WARN,
"Same name `%A' used for %B at %0 and %C at %1 [info -f g77 M INTGLOB]")
-FFEBAD_MSGS1 (FFEBAD_INTRINSIC_TYPE, WARN,
+FFEBAD_MSG (FFEBAD_INTRINSIC_TYPE, WARN,
"Explicit type declaration for intrinsic `%A' disagrees with invocation at %0")
-FFEBAD_MSGS1 (FFEBAD_OPEN_INCLUDE, FATAL,
+FFEBAD_MSG (FFEBAD_OPEN_INCLUDE, FATAL,
"Unable to open INCLUDE file `%A' at %0")
-FFEBAD_MSGS2 (FFEBAD_DOITER, FATAL,
-"Attempt to modify variable `%A' at %0 while it serves as DO-loop iterator at %1",
-"Modification of DO-loop iterator `%A' at %0")
-FFEBAD_MSGS2 (FFEBAD_DOITER_IMPDO, FATAL,
-"Attempt to modify variable `%A' via item #%B in list at %0 while it serves as implied-DO iterator at %1",
-"Modification of DO-loop iterator `%A' at %0")
-FFEBAD_MSGS2 (FFEBAD_TOO_MANY_DIMS, FATAL,
-"Array has too many dimensions, as of dimension specifier at %0",
-"Too many dimensions at %0")
-FFEBAD_MSGS1 (FFEBAD_NULL_ARGUMENT, FATAL,
+FFEBAD_MSG (FFEBAD_DOITER, FATAL,
+LONG("Attempt to modify variable `%A' at %0 while it serves as DO-loop iterator at %1")
+SHORT("Modification of DO-loop iterator `%A' at %0"))
+FFEBAD_MSG (FFEBAD_DOITER_IMPDO, FATAL,
+LONG("Attempt to modify variable `%A' via item #%B in list at %0 while it serves as implied-DO iterator at %1")
+SHORT("Modification of DO-loop iterator `%A' at %0"))
+FFEBAD_MSG (FFEBAD_TOO_MANY_DIMS, FATAL,
+LONG("Array has too many dimensions, as of dimension specifier at %0")
+SHORT("Too many dimensions at %0"))
+FFEBAD_MSG (FFEBAD_NULL_ARGUMENT, FATAL,
"Null argument at %0 for statement function reference at %1")
-FFEBAD_MSGS1 (FFEBAD_NULL_ARGUMENT_W, WARN,
+FFEBAD_MSG (FFEBAD_NULL_ARGUMENT_W, WARN,
"Null argument at %0 for procedure invocation at %1")
-FFEBAD_MSGS1 (FFEBAD_TOO_FEW_ARGUMENTS, FATAL,
+FFEBAD_MSG (FFEBAD_TOO_FEW_ARGUMENTS, FATAL,
"%A too few arguments (starting with dummy argument `%B') as of %0 for statement function reference at %1")
-FFEBAD_MSGS1 (FFEBAD_TOO_MANY_ARGUMENTS, FATAL,
+FFEBAD_MSG (FFEBAD_TOO_MANY_ARGUMENTS, FATAL,
"%A too many arguments as of %0 for statement function reference at %1")
-FFEBAD_MSGS1 (FFEBAD_ARRAY_AS_SFARG, FATAL,
+FFEBAD_MSG (FFEBAD_ARRAY_AS_SFARG, FATAL,
"Array supplied at %1 for dummy argument `%A' in statement function reference at %0")
-FFEBAD_MSGS1 (FFEBAD_FORMAT_UNSUPPORTED, FATAL,
+FFEBAD_MSG (FFEBAD_FORMAT_UNSUPPORTED, FATAL,
"Unsupported FORMAT specifier at %0")
-FFEBAD_MSGS1 (FFEBAD_FORMAT_VARIABLE, FATAL,
+FFEBAD_MSG (FFEBAD_FORMAT_VARIABLE, FATAL,
"Variable-expression FORMAT specifier at %0 -- unsupported")
-FFEBAD_MSGS2 (FFEBAD_OPEN_UNSUPPORTED, FATAL,
-"Unsupported OPEN control item at %0 -- ACTION=, ASSOCIATEVARIABLE=, BLOCKSIZE=, BUFFERCOUNT=, CARRIAGECONTROL=, DEFAULTFILE=, DELIM=, DISPOSE=, EXTENDSIZE=, INITIALSIZE=, KEY=, MAXREC=, NOSPANBLOCKS, ORGANIZATION=, PAD=, POSITION=, READONLY=, RECORDTYPE=, SHARED=, and USEROPEN= are not supported",
-"Unsupported OPEN control item at %0")
-FFEBAD_MSGS2 (FFEBAD_INQUIRE_UNSUPPORTED, FATAL,
-"Unsupported INQUIRE control item at %0 -- ACTION=, CARRIAGECONTROL=, DEFAULTFILE=, DELIM=, KEYED=, ORGANIZATION=, PAD=, POSITION=, READ=, READWRITE=, RECORDTYPE=, and WRITE= are not supported",
-"Unsupported INQUIRE control item at %0")
-FFEBAD_MSGS2 (FFEBAD_READ_UNSUPPORTED, FATAL,
-"Unsupported READ control item at %0 -- ADVANCE=, EOR=, KEYEQ=, KEYGE=, KEYGT=, KEYID=, NULLS=, and SIZE= are not supported",
-"Unsupported READ control item at %0")
-FFEBAD_MSGS2 (FFEBAD_WRITE_UNSUPPORTED, FATAL,
-"Unsupported WRITE control item at %0 -- ADVANCE= and EOR= are not supported",
-"Unsupported WRITE control item at %0")
-FFEBAD_MSGS1 (FFEBAD_VXT_UNSUPPORTED, FATAL,
+FFEBAD_MSG (FFEBAD_OPEN_UNSUPPORTED, FATAL,
+LONG("Unsupported OPEN control item at %0 -- ACTION=, ASSOCIATEVARIABLE=, BLOCKSIZE=, BUFFERCOUNT=, CARRIAGECONTROL=, DEFAULTFILE=, DELIM=, DISPOSE=, EXTENDSIZE=, INITIALSIZE=, KEY=, MAXREC=, NOSPANBLOCKS, ORGANIZATION=, PAD=, POSITION=, READONLY=, RECORDTYPE=, SHARED=, and USEROPEN= are not supported")
+SHORT("Unsupported OPEN control item at %0"))
+FFEBAD_MSG (FFEBAD_INQUIRE_UNSUPPORTED, FATAL,
+LONG("Unsupported INQUIRE control item at %0 -- ACTION=, CARRIAGECONTROL=, DEFAULTFILE=, DELIM=, KEYED=, ORGANIZATION=, PAD=, POSITION=, READ=, READWRITE=, RECORDTYPE=, and WRITE= are not supported")
+SHORT("Unsupported INQUIRE control item at %0"))
+FFEBAD_MSG (FFEBAD_READ_UNSUPPORTED, FATAL,
+LONG("Unsupported READ control item at %0 -- ADVANCE=, EOR=, KEYEQ=, KEYGE=, KEYGT=, KEYID=, NULLS=, and SIZE= are not supported")
+SHORT("Unsupported READ control item at %0"))
+FFEBAD_MSG (FFEBAD_WRITE_UNSUPPORTED, FATAL,
+LONG("Unsupported WRITE control item at %0 -- ADVANCE= and EOR= are not supported")
+SHORT("Unsupported WRITE control item at %0"))
+FFEBAD_MSG (FFEBAD_VXT_UNSUPPORTED, FATAL,
"Unsupported VXT statement at %0")
-FFEBAD_MSGS1 (FFEBAD_DATA_REINIT, FATAL,
+FFEBAD_MSG (FFEBAD_DATA_REINIT, FATAL,
"Attempt to specify second initial value for `%A' at %0")
-FFEBAD_MSGS1 (FFEBAD_DATA_TOOFEW, FATAL,
+FFEBAD_MSG (FFEBAD_DATA_TOOFEW, FATAL,
"Too few initial values in list of initializers for `%A' at %0")
-FFEBAD_MSGS1 (FFEBAD_DATA_TOOMANY, FATAL,
+FFEBAD_MSG (FFEBAD_DATA_TOOMANY, FATAL,
"Too many initial values in list of initializers starting at %0")
-FFEBAD_MSGS1 (FFEBAD_DATA_RANGE, FATAL,
+FFEBAD_MSG (FFEBAD_DATA_RANGE, FATAL,
"Array or substring specification for `%A' out of range in statement at %0")
-FFEBAD_MSGS1 (FFEBAD_DATA_SUBSCRIPT, FATAL,
+FFEBAD_MSG (FFEBAD_DATA_SUBSCRIPT, FATAL,
"Array subscript #%B out of range for initialization of `%A' in statement at %0")
-FFEBAD_MSGS1 (FFEBAD_DATA_ZERO, FATAL,
+FFEBAD_MSG (FFEBAD_DATA_ZERO, FATAL,
"Implied do-loop step count of 0 (zero) for iteration variable `%A' in statement at %0")
-FFEBAD_MSGS1 (FFEBAD_DATA_EMPTY, FATAL,
+FFEBAD_MSG (FFEBAD_DATA_EMPTY, FATAL,
"Implied do-loop iteration count of 0 (zero) for iteration variable `%A' in statement at %0")
-FFEBAD_MSGS1 (FFEBAD_DATA_EVAL, FATAL,
+FFEBAD_MSG (FFEBAD_DATA_EVAL, FATAL,
"Not an integer constant expression in implied do-loop in statement at %0")
-FFEBAD_MSGS1 (FFEBAD_DATA_MULTIPLE, FATAL,
+FFEBAD_MSG (FFEBAD_DATA_MULTIPLE, FATAL,
"Attempt to specify second initial value for element of `%A' at %0")
-FFEBAD_MSGS1 (FFEBAD_EQUIV_COMMON, FATAL,
+FFEBAD_MSG (FFEBAD_EQUIV_COMMON, FATAL,
"Attempt to EQUIVALENCE common areas `%A' and `%B' at %0")
-FFEBAD_MSGS1 (FFEBAD_EQUIV_ALIGN, FATAL,
+FFEBAD_MSG (FFEBAD_EQUIV_ALIGN, FATAL,
"Can't place `%A' as directed by EQUIVALENCE due to alignment restrictions")
-FFEBAD_MSGS1 (FFEBAD_EQUIV_MISMATCH, FATAL,
+FFEBAD_MSG (FFEBAD_EQUIV_MISMATCH, FATAL,
"Mismatched EQUIVALENCE requirements for placement of `%A' at both %C and %D bytes offset from `%B'")
-FFEBAD_MSGS1 (FFEBAD_EQUIV_RANGE, FATAL,
+FFEBAD_MSG (FFEBAD_EQUIV_RANGE, FATAL,
"Array or substring specification for `%A' out of range in EQUIVALENCE statement")
-FFEBAD_MSGS1 (FFEBAD_EQUIV_SUBSTR, FATAL,
+FFEBAD_MSG (FFEBAD_EQUIV_SUBSTR, FATAL,
"Substring of non-CHARACTER entity `%A' in EQUIVALENCE statement")
-FFEBAD_MSGS1 (FFEBAD_EQUIV_ARRAY, FATAL,
+FFEBAD_MSG (FFEBAD_EQUIV_ARRAY, FATAL,
"Array reference to scalar variable `%A' in EQUIVALENCE statement")
-FFEBAD_MSGS1 (FFEBAD_EQUIV_SUBSCRIPT, WARN,
+FFEBAD_MSG (FFEBAD_EQUIV_SUBSCRIPT, WARN,
"Array subscript #%B out of range for EQUIVALENCE of `%A'")
-FFEBAD_MSGS2 (FFEBAD_COMMON_PAD, WARN,
-"Padding of %A %D required before `%B' in common block `%C' at %0 -- consider reordering members, largest-type-size first",
-"Padding of %A %D required before `%B' in common block `%C' at %0")
-FFEBAD_MSGS1 (FFEBAD_COMMON_NEG, FATAL,
+FFEBAD_MSG (FFEBAD_COMMON_PAD, WARN,
+LONG("Padding of %A %D required before `%B' in common block `%C' at %0 -- consider reordering members, largest-type-size first")
+SHORT("Padding of %A %D required before `%B' in common block `%C' at %0"))
+FFEBAD_MSG (FFEBAD_COMMON_NEG, FATAL,
"Attempt to extend COMMON area beyond its starting point via EQUIVALENCE of `%A'")
-FFEBAD_MSGS1 (FFEBAD_EQUIV_FEW, FATAL,
+FFEBAD_MSG (FFEBAD_EQUIV_FEW, FATAL,
"Too few elements in reference to array `%A' in EQUIVALENCE statement")
-FFEBAD_MSGS1 (FFEBAD_EQUIV_MANY, FATAL,
+FFEBAD_MSG (FFEBAD_EQUIV_MANY, FATAL,
"Too many elements in reference to array `%A' in EQUIVALENCE statement")
-FFEBAD_MSGS1 (FFEBAD_MIXED_TYPES, WARN,
+FFEBAD_MSG (FFEBAD_MIXED_TYPES, WARN,
"Mixed CHARACTER and non-CHARACTER types via COMMON/EQUIVALENCE -- for example, `%A' and `%B'")
-FFEBAD_MSGS2 (FFEBAD_IMPLICIT_ADJLEN, FATAL,
-"Invalid length specification at %0 for IMPLICIT statement -- must be integer constant expression",
-"Invalid length specification at %0")
-FFEBAD_MSGS2 (FFEBAD_ENTRY_CONFLICTS, FATAL,
-"Type of ENTRY point at %0 to function conflicts with type(s) of previous entrypoint(s) -- must all be identical-length CHARACTER or none be CHARACTER type",
-"Type of ENTRY point at %0 to function conflicts with type(s) of previous entrypoint(s)")
-FFEBAD_MSGS1 (FFEBAD_RETURN_VALUE_UNSET, WARN,
+FFEBAD_MSG (FFEBAD_IMPLICIT_ADJLEN, FATAL,
+LONG("Invalid length specification at %0 for IMPLICIT statement -- must be integer constant expression")
+SHORT("Invalid length specification at %0"))
+FFEBAD_MSG (FFEBAD_ENTRY_CONFLICTS, FATAL,
+LONG("Type of ENTRY point at %0 to function conflicts with type(s) of previous entrypoint(s) -- must all be identical-length CHARACTER or none be CHARACTER type")
+SHORT("Type of ENTRY point at %0 to function conflicts with type(s) of previous entrypoint(s)"))
+FFEBAD_MSG (FFEBAD_RETURN_VALUE_UNSET, WARN,
"Return value `%A' for FUNCTION at %0 not referenced in subprogram")
-FFEBAD_MSGS2 (FFEBAD_COMMON_ALREADY_INIT, FATAL,
-"Common block `%A' initialized at %0 already initialized at %1 -- only one program unit may specify initial values for a particular common block",
-"Common block `%A' initialized at %0 already initialized at %1")
-FFEBAD_MSGS2 (FFEBAD_COMMON_INIT_PAD, WARN,
-"Initial padding for common block `%A' is %B %C at %0 -- consider reordering members, largest-type-size first",
-"Initial padding for common block `%A' is %B %C at %0")
-FFEBAD_MSGS2 (FFEBAD_COMMON_DIFF_PAD, FATAL,
-"Initial padding for common block `%A' is %B %D at %0 but %C %E at %1 -- consider reordering members, largest-type-size first",
-"Initial padding for common block `%A' is %B %D at %0 but %C %E at %1")
-FFEBAD_MSGS1 (FFEBAD_COMMON_DIFF_SAVE, WARN,
+FFEBAD_MSG (FFEBAD_COMMON_ALREADY_INIT, FATAL,
+LONG("Common block `%A' initialized at %0 already initialized at %1 -- only one program unit may specify initial values for a particular common block")
+SHORT("Common block `%A' initialized at %0 already initialized at %1"))
+FFEBAD_MSG (FFEBAD_COMMON_INIT_PAD, WARN,
+LONG("Initial padding for common block `%A' is %B %C at %0 -- consider reordering members, largest-type-size first")
+SHORT("Initial padding for common block `%A' is %B %C at %0"))
+FFEBAD_MSG (FFEBAD_COMMON_DIFF_PAD, FATAL,
+LONG("Initial padding for common block `%A' is %B %D at %0 but %C %E at %1 -- consider reordering members, largest-type-size first")
+SHORT("Initial padding for common block `%A' is %B %D at %0 but %C %E at %1"))
+FFEBAD_MSG (FFEBAD_COMMON_DIFF_SAVE, WARN,
"Common block `%A' is SAVEd, explicitly or implicitly, at %0 but not SAVEd at %1")
-FFEBAD_MSGS1 (FFEBAD_COMMON_DIFF_SIZE, WARN,
+FFEBAD_MSG (FFEBAD_COMMON_DIFF_SIZE, WARN,
"Common block `%A' is %B %D in length at %0 but %C %E at %1")
-FFEBAD_MSGS2 (FFEBAD_COMMON_ENLARGED, FATAL,
-"Common block `%A' is initialized to %B %D long at %0 but enlarged to %C %E at %1 -- use consistent definitions or reorder program units in source file",
-"Common block `%A' is initialized to %B %D long at %0 but enlarged to %C %E at %1")
-FFEBAD_MSGS1 (FFEBAD_COMMON_BLANK_INIT, WARN,
+FFEBAD_MSG (FFEBAD_COMMON_ENLARGED, FATAL,
+LONG("Common block `%A' is initialized to %B %D long at %0 but enlarged to %C %E at %1 -- use consistent definitions or reorder program units in source file")
+SHORT("Common block `%A' is initialized to %B %D long at %0 but enlarged to %C %E at %1"))
+FFEBAD_MSG (FFEBAD_COMMON_BLANK_INIT, WARN,
"Blank common initialized at %0")
-FFEBAD_MSGS1 (FFEBAD_NEED_INTRINSIC, WARN,
+FFEBAD_MSG (FFEBAD_NEED_INTRINSIC, WARN,
"Intrinsic `%A' is passed as actual argument at %0 but not explicitly declared INTRINSIC")
-FFEBAD_MSGS1 (FFEBAD_NEED_EXTERNAL, WARN,
+FFEBAD_MSG (FFEBAD_NEED_EXTERNAL, WARN,
"External procedure `%A' is passed as actual argument at %0 but not explicitly declared EXTERNAL")
-FFEBAD_MSGS1 (FFEBAD_SYMBOL_UPPER_CASE, WARN,
+FFEBAD_MSG (FFEBAD_SYMBOL_UPPER_CASE, WARN,
"Character `%A' (for example) is upper-case in symbol name at %0")
-FFEBAD_MSGS1 (FFEBAD_SYMBOL_LOWER_CASE, WARN,
+FFEBAD_MSG (FFEBAD_SYMBOL_LOWER_CASE, WARN,
"Character `%A' (for example) is lower-case in symbol name at %0")
-FFEBAD_MSGS1 (FFEBAD_SYMBOL_NOLOWER_INITCAP, WARN,
+FFEBAD_MSG (FFEBAD_SYMBOL_NOLOWER_INITCAP, WARN,
"Character `%A' not followed at some point by lower-case character in symbol name at %0")
-FFEBAD_MSGS1 (FFEBAD_SYMBOL_LOWER_INITCAP, WARN,
+FFEBAD_MSG (FFEBAD_SYMBOL_LOWER_INITCAP, WARN,
"Initial character `%A' is lower-case in symbol name at %0")
-FFEBAD_MSGS2 (FFEBAD_DO_REAL, WARN,
-"DO-variable `%A' is type REAL or DOUBLE PRECISION at %0 -- unexpected behavior likely",
-"DO-variable `%A' is type REAL or DOUBLE PRECISION at %0")
-FFEBAD_MSGS1 (FFEBAD_NAMELIST_CASE, WARN,
+FFEBAD_MSG (FFEBAD_DO_REAL, WARN,
+LONG("DO-variable `%A' is type REAL or DOUBLE PRECISION at %0 -- unexpected behavior likely")
+SHORT("DO-variable `%A' is type REAL or DOUBLE PRECISION at %0"))
+FFEBAD_MSG (FFEBAD_NAMELIST_CASE, WARN,
"NAMELIST not adequately supported by run-time library for source files with case preserved")
-FFEBAD_MSGS1 (FFEBAD_NESTED_PERCENT, WARN,
+FFEBAD_MSG (FFEBAD_NESTED_PERCENT, WARN,
"Nested %% construct (%%VAL, %%REF, or %%DESCR) at %0")
-FFEBAD_MSGS2 (FFEBAD_ACTUALARG, WARN,
-"Invalid actual argument at %0 -- replace hollerith constants with %%REF('string') and typeless constants with INTEGER constant equivalents, or use -fugly-args or -fugly",
-"Invalid actual argument at %0")
-FFEBAD_MSGS2 (FFEBAD_QUAD_UNSUPPORTED, FATAL,
-"Quadruple-precision floating-point unsupported -- treating constant at %0 as double-precision",
-"Quadruple-precision floating-point unsupported")
-FFEBAD_MSGS2 (FFEBAD_TOO_BIG_INIT, WARN,
-"Initialization of large (%B-unit) aggregate area `%A' at %0 currently very slow and takes lots of memory during g77 compile -- to be improved in 0.6",
-"This could take a while (initializing `%A' at %0)...")
-FFEBAD_MSGS1 (FFEBAD_BLOCKDATA_STMT, FATAL,
+FFEBAD_MSG (FFEBAD_ACTUALARG, WARN,
+LONG("Invalid actual argument at %0 -- replace hollerith constants with %%REF('string') and typeless constants with INTEGER constant equivalents, or use -fugly-args or -fugly")
+SHORT("Invalid actual argument at %0"))
+FFEBAD_MSG (FFEBAD_QUAD_UNSUPPORTED, FATAL,
+LONG("Quadruple-precision floating-point unsupported -- treating constant at %0 as double-precision")
+SHORT("Quadruple-precision floating-point unsupported"))
+FFEBAD_MSG (FFEBAD_TOO_BIG_INIT, WARN,
+LONG("Initialization of large (%B-unit) aggregate area `%A' at %0 currently very slow and takes lots of memory during g77 compile -- to be improved in 0.6")
+SHORT("This could take a while (initializing `%A' at %0)..."))
+FFEBAD_MSG (FFEBAD_BLOCKDATA_STMT, FATAL,
"Statement at %0 invalid in BLOCK DATA program unit at %1")
-FFEBAD_MSGS1 (FFEBAD_TRUNCATING_CHARACTER, FATAL,
+FFEBAD_MSG (FFEBAD_TRUNCATING_CHARACTER, FATAL,
"Truncating characters on right side of character constant at %0")
-FFEBAD_MSGS1 (FFEBAD_TRUNCATING_HOLLERITH, FATAL,
+FFEBAD_MSG (FFEBAD_TRUNCATING_HOLLERITH, FATAL,
"Truncating characters on right side of hollerith constant at %0")
-FFEBAD_MSGS1 (FFEBAD_TRUNCATING_NUMERIC, FATAL,
+FFEBAD_MSG (FFEBAD_TRUNCATING_NUMERIC, FATAL,
"Truncating non-zero data on left side of numeric constant at %0")
-FFEBAD_MSGS1 (FFEBAD_TRUNCATING_TYPELESS, FATAL,
+FFEBAD_MSG (FFEBAD_TRUNCATING_TYPELESS, FATAL,
"Truncating non-zero data on left side of typeless constant at %0")
-FFEBAD_MSGS1 (FFEBAD_TYPELESS_OVERFLOW, FATAL,
+FFEBAD_MSG (FFEBAD_TYPELESS_OVERFLOW, FATAL,
"Typeless constant at %0 too large")
-FFEBAD_MSGS1 (FFEBAD_AMPERSAND, WARN,
+FFEBAD_MSG (FFEBAD_AMPERSAND, WARN,
"First-column ampersand continuation at %0")
-FFEBAD_MSGS1 (FFEBAD_FILEWIDE_ALREADY_SEEN, FATAL,
+FFEBAD_MSG (FFEBAD_FILEWIDE_ALREADY_SEEN, FATAL,
"Global name `%A' defined at %0 already defined at %1 [info -f g77 M GLOBALS]")
-FFEBAD_MSGS1 (FFEBAD_FILEWIDE_ALREADY_SEEN_W, WARN,
+FFEBAD_MSG (FFEBAD_FILEWIDE_ALREADY_SEEN_W, WARN,
"Global name `%A' defined at %0 already defined at %1 [info -f g77 M GLOBALS]")
-FFEBAD_MSGS1 (FFEBAD_FILEWIDE_DISAGREEMENT, FATAL,
+FFEBAD_MSG (FFEBAD_FILEWIDE_DISAGREEMENT, FATAL,
"Global name `%A' is %B at %0 but is %C at %1 [info -f g77 M GLOBALS]")
-FFEBAD_MSGS1 (FFEBAD_FILEWIDE_DISAGREEMENT_W, WARN,
+FFEBAD_MSG (FFEBAD_FILEWIDE_DISAGREEMENT_W, WARN,
"Global name `%A' is %B at %0 but is %C at %1 [info -f g77 M GLOBALS]")
-FFEBAD_MSGS1 (FFEBAD_FILEWIDE_TYPE_MISMATCH, FATAL,
+FFEBAD_MSG (FFEBAD_FILEWIDE_TYPE_MISMATCH, FATAL,
"Global name `%A' at %0 has different type at %1 [info -f g77 M GLOBALS]")
-FFEBAD_MSGS1 (FFEBAD_FILEWIDE_TYPE_MISMATCH_W, WARN,
+FFEBAD_MSG (FFEBAD_FILEWIDE_TYPE_MISMATCH_W, WARN,
"Global name `%A' at %0 has different type at %1 [info -f g77 M GLOBALS]")
-FFEBAD_MSGS1 (FFEBAD_FILEWIDE_NARGS, FATAL,
+FFEBAD_MSG (FFEBAD_FILEWIDE_NARGS, FATAL,
"Too %B arguments passed to `%A' at %0 versus definition at %1 [info -f g77 M GLOBALS]")
-FFEBAD_MSGS1 (FFEBAD_FILEWIDE_NARGS_W, WARN,
+FFEBAD_MSG (FFEBAD_FILEWIDE_NARGS_W, WARN,
"Too %B arguments for `%A' at %0 versus invocation at %1 [info -f g77 M GLOBALS]")
-FFEBAD_MSGS1 (FFEBAD_FILEWIDE_ARG, FATAL,
+FFEBAD_MSG (FFEBAD_FILEWIDE_ARG, FATAL,
"Argument #%B of `%A' is %C at %0 but is %D at %1 [info -f g77 M GLOBALS]")
-FFEBAD_MSGS1 (FFEBAD_FILEWIDE_ARG_W, WARN,
+FFEBAD_MSG (FFEBAD_FILEWIDE_ARG_W, WARN,
"Argument #%B of `%A' is %C at %0 but is %D at %1 [info -f g77 M GLOBALS]")
-FFEBAD_MSGS1 (FFEBAD_ARRAY_LARGE, FATAL,
+FFEBAD_MSG (FFEBAD_ARRAY_LARGE, FATAL,
"Array `%A' at %0 is too large to handle")
-FFEBAD_MSGS1 (FFEBAD_SFUNC_UNUSED, WARN,
+FFEBAD_MSG (FFEBAD_SFUNC_UNUSED, WARN,
"Statement function `%A' defined at %0 is not used")
-FFEBAD_MSGS1 (FFEBAD_INTRINSIC_Y2KBAD, WARN,
+FFEBAD_MSG (FFEBAD_INTRINSIC_Y2KBAD, WARN,
"Intrinsic `%A', invoked at %0, known to be non-Y2K-compliant [info -f g77 M Y2KBAD]")
-FFEBAD_MSGS1 (FFEBAD_NOCANDO, DISASTER,
+FFEBAD_MSG (FFEBAD_NOCANDO, DISASTER,
"Internal compiler error -- cannot perform operation")
#undef INFORM
diff --git a/contrib/gcc/f/bad.h b/contrib/gcc/f/bad.h
index 7340223..bd7581e 100644
--- a/contrib/gcc/f/bad.h
+++ b/contrib/gcc/f/bad.h
@@ -1,5 +1,5 @@
/* bad.h -- Public #include File (module.h template V1.0)
- Copyright (C) 1995 Free Software Foundation, Inc.
+ Copyright (C) 1995, 2002 Free Software Foundation, Inc.
Contributed by James Craig Burley.
This file is part of GNU Fortran.
@@ -27,18 +27,16 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* Allow multiple inclusion to work. */
-#ifndef _H_f_bad
-#define _H_f_bad
+#ifndef GCC_F_BAD_H
+#define GCC_F_BAD_H
/* Simple definitions and enumerations. */
typedef enum
{
-#define FFEBAD_MSGS1(KWD,SEV,MSG) KWD,
-#define FFEBAD_MSGS2(KWD,SEV,LMSG,SMSG) KWD,
+#define FFEBAD_MSG(KWD,SEV,MSG) KWD,
#include "bad.def"
-#undef FFEBAD_MSGS1
-#undef FFEBAD_MSGS2
+#undef FFEBAD_MSG
FFEBAD
} ffebad;
@@ -82,7 +80,7 @@ void ffebad_init_0 (void);
bool ffebad_is_fatal (ffebad errnum);
ffebadSeverity ffebad_severity (ffebad errnum);
bool ffebad_start_ (bool lex_override, ffebad errnum, ffebadSeverity sev,
- const char *message);
+ const char *msgid);
void ffebad_string (const char *string);
/* Define macros. */
@@ -95,8 +93,8 @@ void ffebad_string (const char *string);
#define ffebad_set_inhibit(f) (ffebad_is_inhibited_ = (f))
#define ffebad_start(e) ffebad_start_ (FALSE, (e), FFEBAD_severity, NULL)
#define ffebad_start_lex(e) ffebad_start_ (TRUE, (e), FFEBAD_severity, NULL)
-#define ffebad_start_msg(m,s) ffebad_start_ (FALSE, FFEBAD, (s), (m))
-#define ffebad_start_msg_lex(m,s) ffebad_start_ (TRUE, FFEBAD, (s), (m))
+#define ffebad_start_msg(msgid,s) ffebad_start_ (FALSE, FFEBAD, (s), (msgid))
+#define ffebad_start_msg_lex(msgid,s) ffebad_start_ (TRUE, FFEBAD, (s), (msgid))
#define ffebad_terminate_0()
#define ffebad_terminate_1()
#define ffebad_terminate_2()
@@ -105,4 +103,4 @@ void ffebad_string (const char *string);
/* End of #include file. */
-#endif
+#endif /* ! GCC_F_BAD_H */
diff --git a/contrib/gcc/f/bit.c b/contrib/gcc/f/bit.c
index 5f581a0..70d7833 100644
--- a/contrib/gcc/f/bit.c
+++ b/contrib/gcc/f/bit.c
@@ -31,7 +31,7 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* Include files. */
#include "proj.h"
-#include "glimits.j"
+#include "glimits.h"
#include "bit.h"
#include "malloc.h"
diff --git a/contrib/gcc/f/bit.h b/contrib/gcc/f/bit.h
index a2acc25..6b559ef 100644
--- a/contrib/gcc/f/bit.h
+++ b/contrib/gcc/f/bit.h
@@ -27,8 +27,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* Allow multiple inclusion to work. */
-#ifndef _H_f_bit
-#define _H_f_bit
+#ifndef GCC_F_BIT_H
+#define GCC_F_BIT_H
/* Simple definitions and enumerations. */
@@ -81,4 +81,4 @@ void ffebit_test (ffebit b, ffebitCount offset, bool *value, ffebitCount *length
/* End of #include file. */
-#endif
+#endif /* ! GCC_F_BIT_H */
diff --git a/contrib/gcc/f/bld.c b/contrib/gcc/f/bld.c
index 15cadf1..9161419 100644
--- a/contrib/gcc/f/bld.c
+++ b/contrib/gcc/f/bld.c
@@ -46,7 +46,7 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* Externals defined here. */
-ffebldArity ffebld_arity_op_[]
+const ffebldArity ffebld_arity_op_[(int) FFEBLD_op]
=
{
#define FFEBLD_OP(KWD,NAME,ARITY) ARITY,
@@ -203,7 +203,7 @@ static ffebldConstant ffebld_constant_hollerith_;
static ffebldConstant ffebld_constant_typeless_[FFEBLD_constTYPELESS_LAST
- FFEBLD_constTYPELESS_FIRST + 1];
-static const char *ffebld_op_string_[]
+static const char *const ffebld_op_string_[]
=
{
#define FFEBLD_OP(KWD,NAME,ARITY) NAME,
@@ -438,433 +438,6 @@ ffebld_constant_cmp (ffebldConstant c1, ffebldConstant c2)
}
}
-/* ffebld_constant_dump -- Display summary of constant's contents
-
- ffebldConstant c;
- ffebld_constant_dump(c);
-
- Displays the constant in summary form. */
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-void
-ffebld_constant_dump (ffebldConstant c)
-{
- switch (ffebld_constant_type (c))
- {
-#if FFETARGET_okINTEGER1
- case FFEBLD_constINTEGER1:
- ffebld_dump_prefix (dmpout, FFEINFO_basictypeINTEGER,
- FFEINFO_kindtypeINTEGER1);
- ffebld_constantunion_dump (ffebld_constant_union (c),
- FFEINFO_basictypeINTEGER, FFEINFO_kindtypeINTEGER1);
- break;
-#endif
-
-#if FFETARGET_okINTEGER2
- case FFEBLD_constINTEGER2:
- ffebld_dump_prefix (dmpout, FFEINFO_basictypeINTEGER,
- FFEINFO_kindtypeINTEGER2);
- ffebld_constantunion_dump (ffebld_constant_union (c),
- FFEINFO_basictypeINTEGER, FFEINFO_kindtypeINTEGER2);
- break;
-#endif
-
-#if FFETARGET_okINTEGER3
- case FFEBLD_constINTEGER3:
- ffebld_dump_prefix (dmpout, FFEINFO_basictypeINTEGER,
- FFEINFO_kindtypeINTEGER3);
- ffebld_constantunion_dump (ffebld_constant_union (c),
- FFEINFO_basictypeINTEGER, FFEINFO_kindtypeINTEGER3);
- break;
-#endif
-
-#if FFETARGET_okINTEGER4
- case FFEBLD_constINTEGER4:
- ffebld_dump_prefix (dmpout, FFEINFO_basictypeINTEGER,
- FFEINFO_kindtypeINTEGER4);
- ffebld_constantunion_dump (ffebld_constant_union (c),
- FFEINFO_basictypeINTEGER, FFEINFO_kindtypeINTEGER4);
- break;
-#endif
-
-#if FFETARGET_okINTEGER5
- case FFEBLD_constINTEGER5:
- ffebld_dump_prefix (dmpout, FFEINFO_basictypeINTEGER,
- FFEINFO_kindtypeINTEGER5);
- ffebld_constantunion_dump (ffebld_constant_union (c),
- FFEINFO_basictypeINTEGER, FFEINFO_kindtypeINTEGER5);
- break;
-#endif
-
-#if FFETARGET_okINTEGER6
- case FFEBLD_constINTEGER6:
- ffebld_dump_prefix (dmpout, FFEINFO_basictypeINTEGER,
- FFEINFO_kindtypeINTEGER6);
- ffebld_constantunion_dump (ffebld_constant_union (c),
- FFEINFO_basictypeINTEGER, FFEINFO_kindtypeINTEGER6);
- break;
-#endif
-
-#if FFETARGET_okINTEGER7
- case FFEBLD_constINTEGER7:
- ffebld_dump_prefix (dmpout, FFEINFO_basictypeINTEGER,
- FFEINFO_kindtypeINTEGER7);
- ffebld_constantunion_dump (ffebld_constant_union (c),
- FFEINFO_basictypeINTEGER, FFEINFO_kindtypeINTEGER7);
- break;
-#endif
-
-#if FFETARGET_okINTEGER8
- case FFEBLD_constINTEGER8:
- ffebld_dump_prefix (dmpout, FFEINFO_basictypeINTEGER,
- FFEINFO_kindtypeINTEGER8);
- ffebld_constantunion_dump (ffebld_constant_union (c),
- FFEINFO_basictypeINTEGER, FFEINFO_kindtypeINTEGER8);
- break;
-#endif
-
-#if FFETARGET_okLOGICAL1
- case FFEBLD_constLOGICAL1:
- ffebld_dump_prefix (dmpout, FFEINFO_basictypeLOGICAL,
- FFEINFO_kindtypeLOGICAL1);
- ffebld_constantunion_dump (ffebld_constant_union (c),
- FFEINFO_basictypeLOGICAL, FFEINFO_kindtypeLOGICAL1);
- break;
-#endif
-
-#if FFETARGET_okLOGICAL2
- case FFEBLD_constLOGICAL2:
- ffebld_dump_prefix (dmpout, FFEINFO_basictypeLOGICAL,
- FFEINFO_kindtypeLOGICAL2);
- ffebld_constantunion_dump (ffebld_constant_union (c),
- FFEINFO_basictypeLOGICAL, FFEINFO_kindtypeLOGICAL2);
- break;
-#endif
-
-#if FFETARGET_okLOGICAL3
- case FFEBLD_constLOGICAL3:
- ffebld_dump_prefix (dmpout, FFEINFO_basictypeLOGICAL,
- FFEINFO_kindtypeLOGICAL3);
- ffebld_constantunion_dump (ffebld_constant_union (c),
- FFEINFO_basictypeLOGICAL, FFEINFO_kindtypeLOGICAL3);
- break;
-#endif
-
-#if FFETARGET_okLOGICAL4
- case FFEBLD_constLOGICAL4:
- ffebld_dump_prefix (dmpout, FFEINFO_basictypeLOGICAL,
- FFEINFO_kindtypeLOGICAL4);
- ffebld_constantunion_dump (ffebld_constant_union (c),
- FFEINFO_basictypeLOGICAL, FFEINFO_kindtypeLOGICAL4);
- break;
-#endif
-
-#if FFETARGET_okLOGICAL5
- case FFEBLD_constLOGICAL5:
- ffebld_dump_prefix (dmpout, FFEINFO_basictypeLOGICAL,
- FFEINFO_kindtypeLOGICAL5);
- ffebld_constantunion_dump (ffebld_constant_union (c),
- FFEINFO_basictypeLOGICAL, FFEINFO_kindtypeLOGICAL5);
- break;
-#endif
-
-#if FFETARGET_okLOGICAL6
- case FFEBLD_constLOGICAL6:
- ffebld_dump_prefix (dmpout, FFEINFO_basictypeLOGICAL,
- FFEINFO_kindtypeLOGICAL6);
- ffebld_constantunion_dump (ffebld_constant_union (c),
- FFEINFO_basictypeLOGICAL, FFEINFO_kindtypeLOGICAL6);
- break;
-#endif
-
-#if FFETARGET_okLOGICAL7
- case FFEBLD_constLOGICAL7:
- ffebld_dump_prefix (dmpout, FFEINFO_basictypeLOGICAL,
- FFEINFO_kindtypeLOGICAL7);
- ffebld_constantunion_dump (ffebld_constant_union (c),
- FFEINFO_basictypeLOGICAL, FFEINFO_kindtypeLOGICAL7);
- break;
-#endif
-
-#if FFETARGET_okLOGICAL8
- case FFEBLD_constLOGICAL8:
- ffebld_dump_prefix (dmpout, FFEINFO_basictypeLOGICAL,
- FFEINFO_kindtypeLOGICAL8);
- ffebld_constantunion_dump (ffebld_constant_union (c),
- FFEINFO_basictypeLOGICAL, FFEINFO_kindtypeLOGICAL8);
- break;
-#endif
-
-#if FFETARGET_okREAL1
- case FFEBLD_constREAL1:
- ffebld_dump_prefix (dmpout, FFEINFO_basictypeREAL,
- FFEINFO_kindtypeREAL1);
- ffebld_constantunion_dump (ffebld_constant_union (c),
- FFEINFO_basictypeREAL, FFEINFO_kindtypeREAL1);
- break;
-#endif
-
-#if FFETARGET_okREAL2
- case FFEBLD_constREAL2:
- ffebld_dump_prefix (dmpout, FFEINFO_basictypeREAL,
- FFEINFO_kindtypeREAL2);
- ffebld_constantunion_dump (ffebld_constant_union (c),
- FFEINFO_basictypeREAL, FFEINFO_kindtypeREAL2);
- break;
-#endif
-
-#if FFETARGET_okREAL3
- case FFEBLD_constREAL3:
- ffebld_dump_prefix (dmpout, FFEINFO_basictypeREAL,
- FFEINFO_kindtypeREAL3);
- ffebld_constantunion_dump (ffebld_constant_union (c),
- FFEINFO_basictypeREAL, FFEINFO_kindtypeREAL3);
- break;
-#endif
-
-#if FFETARGET_okREAL4
- case FFEBLD_constREAL4:
- ffebld_dump_prefix (dmpout, FFEINFO_basictypeREAL,
- FFEINFO_kindtypeREAL4);
- ffebld_constantunion_dump (ffebld_constant_union (c),
- FFEINFO_basictypeREAL, FFEINFO_kindtypeREAL4);
- break;
-#endif
-
-#if FFETARGET_okREAL5
- case FFEBLD_constREAL5:
- ffebld_dump_prefix (dmpout, FFEINFO_basictypeREAL,
- FFEINFO_kindtypeREAL5);
- ffebld_constantunion_dump (ffebld_constant_union (c),
- FFEINFO_basictypeREAL, FFEINFO_kindtypeREAL5);
- break;
-#endif
-
-#if FFETARGET_okREAL6
- case FFEBLD_constREAL6:
- ffebld_dump_prefix (dmpout, FFEINFO_basictypeREAL,
- FFEINFO_kindtypeREAL6);
- ffebld_constantunion_dump (ffebld_constant_union (c),
- FFEINFO_basictypeREAL, FFEINFO_kindtypeREAL6);
- break;
-#endif
-
-#if FFETARGET_okREAL7
- case FFEBLD_constREAL7:
- ffebld_dump_prefix (dmpout, FFEINFO_basictypeREAL,
- FFEINFO_kindtypeREAL7);
- ffebld_constantunion_dump (ffebld_constant_union (c),
- FFEINFO_basictypeREAL, FFEINFO_kindtypeREAL7);
- break;
-#endif
-
-#if FFETARGET_okREAL8
- case FFEBLD_constREAL8:
- ffebld_dump_prefix (dmpout, FFEINFO_basictypeREAL,
- FFEINFO_kindtypeREAL8);
- ffebld_constantunion_dump (ffebld_constant_union (c),
- FFEINFO_basictypeREAL, FFEINFO_kindtypeREAL8);
- break;
-#endif
-
-#if FFETARGET_okCOMPLEX1
- case FFEBLD_constCOMPLEX1:
- ffebld_dump_prefix (dmpout, FFEINFO_basictypeCOMPLEX,
- FFEINFO_kindtypeREAL1);
- ffebld_constantunion_dump (ffebld_constant_union (c),
- FFEINFO_basictypeCOMPLEX, FFEINFO_kindtypeREAL1);
- break;
-#endif
-
-#if FFETARGET_okCOMPLEX2
- case FFEBLD_constCOMPLEX2:
- ffebld_dump_prefix (dmpout, FFEINFO_basictypeCOMPLEX,
- FFEINFO_kindtypeREAL2);
- ffebld_constantunion_dump (ffebld_constant_union (c),
- FFEINFO_basictypeCOMPLEX, FFEINFO_kindtypeREAL2);
- break;
-#endif
-
-#if FFETARGET_okCOMPLEX3
- case FFEBLD_constCOMPLEX3:
- ffebld_dump_prefix (dmpout, FFEINFO_basictypeCOMPLEX,
- FFEINFO_kindtypeREAL3);
- ffebld_constantunion_dump (ffebld_constant_union (c),
- FFEINFO_basictypeCOMPLEX, FFEINFO_kindtypeREAL3);
- break;
-#endif
-
-#if FFETARGET_okCOMPLEX4
- case FFEBLD_constCOMPLEX4:
- ffebld_dump_prefix (dmpout, FFEINFO_basictypeCOMPLEX,
- FFEINFO_kindtypeREAL4);
- ffebld_constantunion_dump (ffebld_constant_union (c),
- FFEINFO_basictypeCOMPLEX, FFEINFO_kindtypeREAL4);
- break;
-#endif
-
-#if FFETARGET_okCOMPLEX5
- case FFEBLD_constCOMPLEX5:
- ffebld_dump_prefix (dmpout, FFEINFO_basictypeCOMPLEX,
- FFEINFO_kindtypeREAL5);
- ffebld_constantunion_dump (ffebld_constant_union (c),
- FFEINFO_basictypeCOMPLEX, FFEINFO_kindtypeREAL5);
- break;
-#endif
-
-#if FFETARGET_okCOMPLEX6
- case FFEBLD_constCOMPLEX6:
- ffebld_dump_prefix (dmpout, FFEINFO_basictypeCOMPLEX,
- FFEINFO_kindtypeREAL6);
- ffebld_constantunion_dump (ffebld_constant_union (c),
- FFEINFO_basictypeCOMPLEX, FFEINFO_kindtypeREAL6);
- break;
-#endif
-
-#if FFETARGET_okCOMPLEX7
- case FFEBLD_constCOMPLEX7:
- ffebld_dump_prefix (dmpout, FFEINFO_basictypeCOMPLEX,
- FFEINFO_kindtypeREAL7);
- ffebld_constantunion_dump (ffebld_constant_union (c),
- FFEINFO_basictypeCOMPLEX, FFEINFO_kindtypeREAL7);
- break;
-#endif
-
-#if FFETARGET_okCOMPLEX8
- case FFEBLD_constCOMPLEX8:
- ffebld_dump_prefix (dmpout, FFEINFO_basictypeCOMPLEX,
- FFEINFO_kindtypeREAL8);
- ffebld_constantunion_dump (ffebld_constant_union (c),
- FFEINFO_basictypeCOMPLEX, FFEINFO_kindtypeREAL8);
- break;
-#endif
-
-#if FFETARGET_okCHARACTER1
- case FFEBLD_constCHARACTER1:
- ffebld_dump_prefix (dmpout, FFEINFO_basictypeCHARACTER,
- FFEINFO_kindtypeCHARACTER1);
- ffebld_constantunion_dump (ffebld_constant_union (c),
- FFEINFO_basictypeCHARACTER, FFEINFO_kindtypeCHARACTER1);
- break;
-#endif
-
-#if FFETARGET_okCHARACTER2
- case FFEBLD_constCHARACTER2:
- ffebld_dump_prefix (dmpout, FFEINFO_basictypeCHARACTER,
- FFEINFO_kindtypeCHARACTER2);
- ffebld_constantunion_dump (ffebld_constant_union (c),
- FFEINFO_basictypeCHARACTER, FFEINFO_kindtypeCHARACTER2);
- break;
-#endif
-
-#if FFETARGET_okCHARACTER3
- case FFEBLD_constCHARACTER3:
- ffebld_dump_prefix (dmpout, FFEINFO_basictypeCHARACTER,
- FFEINFO_kindtypeCHARACTER3);
- ffebld_constantunion_dump (ffebld_constant_union (c),
- FFEINFO_basictypeCHARACTER, FFEINFO_kindtypeCHARACTER3);
- break;
-#endif
-
-#if FFETARGET_okCHARACTER4
- case FFEBLD_constCHARACTER4:
- ffebld_dump_prefix (dmpout, FFEINFO_basictypeCHARACTER,
- FFEINFO_kindtypeCHARACTER4);
- ffebld_constantunion_dump (ffebld_constant_union (c),
- FFEINFO_basictypeCHARACTER, FFEINFO_kindtypeCHARACTER4);
- break;
-#endif
-
-#if FFETARGET_okCHARACTER5
- case FFEBLD_constCHARACTER5:
- ffebld_dump_prefix (dmpout, FFEINFO_basictypeCHARACTER,
- FFEINFO_kindtypeCHARACTER5);
- ffebld_constantunion_dump (ffebld_constant_union (c),
- FFEINFO_basictypeCHARACTER, FFEINFO_kindtypeCHARACTER5);
- break;
-#endif
-
-#if FFETARGET_okCHARACTER6
- case FFEBLD_constCHARACTER6:
- ffebld_dump_prefix (dmpout, FFEINFO_basictypeCHARACTER,
- FFEINFO_kindtypeCHARACTER6);
- ffebld_constantunion_dump (ffebld_constant_union (c),
- FFEINFO_basictypeCHARACTER, FFEINFO_kindtypeCHARACTER6);
- break;
-#endif
-
-#if FFETARGET_okCHARACTER7
- case FFEBLD_constCHARACTER7:
- ffebld_dump_prefix (dmpout, FFEINFO_basictypeCHARACTER,
- FFEINFO_kindtypeCHARACTER7);
- ffebld_constantunion_dump (ffebld_constant_union (c),
- FFEINFO_basictypeCHARACTER, FFEINFO_kindtypeCHARACTER7);
- break;
-#endif
-
-#if FFETARGET_okCHARACTER8
- case FFEBLD_constCHARACTER8:
- ffebld_dump_prefix (dmpout, FFEINFO_basictypeCHARACTER,
- FFEINFO_kindtypeCHARACTER8);
- ffebld_constantunion_dump (ffebld_constant_union (c),
- FFEINFO_basictypeCHARACTER, FFEINFO_kindtypeCHARACTER8);
- break;
-#endif
-
- case FFEBLD_constHOLLERITH:
- fprintf (dmpout, "H%" ffetargetHollerithSize_f "u/",
- ffebld_constant_hollerith (c).length);
- ffetarget_print_hollerith (dmpout, ffebld_constant_hollerith (c));
- break;
-
- case FFEBLD_constBINARY_MIL:
- fprintf (dmpout, "BM/");
- ffetarget_print_binarymil (dmpout, ffebld_constant_typeless (c));
- break;
-
- case FFEBLD_constBINARY_VXT:
- fprintf (dmpout, "BV/");
- ffetarget_print_binaryvxt (dmpout, ffebld_constant_typeless (c));
- break;
-
- case FFEBLD_constOCTAL_MIL:
- fprintf (dmpout, "OM/");
- ffetarget_print_octalmil (dmpout, ffebld_constant_typeless (c));
- break;
-
- case FFEBLD_constOCTAL_VXT:
- fprintf (dmpout, "OV/");
- ffetarget_print_octalvxt (dmpout, ffebld_constant_typeless (c));
- break;
-
- case FFEBLD_constHEX_X_MIL:
- fprintf (dmpout, "XM/");
- ffetarget_print_hexxmil (dmpout, ffebld_constant_typeless (c));
- break;
-
- case FFEBLD_constHEX_X_VXT:
- fprintf (dmpout, "XV/");
- ffetarget_print_hexxvxt (dmpout, ffebld_constant_typeless (c));
- break;
-
- case FFEBLD_constHEX_Z_MIL:
- fprintf (dmpout, "ZM/");
- ffetarget_print_hexzmil (dmpout, ffebld_constant_typeless (c));
- break;
-
- case FFEBLD_constHEX_Z_VXT:
- fprintf (dmpout, "ZV/");
- ffetarget_print_hexzvxt (dmpout, ffebld_constant_typeless (c));
- break;
-
- default:
- assert ("bad constant type" == NULL);
- fprintf (dmpout, "?/?");
- break;
- }
-}
-#endif
-
/* ffebld_constant_is_magical -- Determine if integer is "magical"
ffebldConstant c;
@@ -1991,76 +1564,6 @@ ffebld_constant_new_typeless_val (ffebldConst type, ffetargetTypeless val)
return nc;
}
-/* ffebld_constantarray_dump -- Display summary of array's contents
-
- ffebldConstantArray a;
- ffeinfoBasictype bt;
- ffeinfoKindtype kt;
- ffetargetOffset size;
- ffebld_constant_dump(a,bt,kt,size,NULL);
-
- Displays the constant array in summary form. The fifth argument, if
- supplied, is an ffebit object that is consulted as to whether the
- constant at a particular offset is valid. */
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-void
-ffebld_constantarray_dump (ffebldConstantArray array, ffeinfoBasictype bt,
- ffeinfoKindtype kt, ffetargetOffset size, ffebit bits)
-{
- ffetargetOffset i;
- ffebitCount j;
-
- ffebld_dump_prefix (dmpout, bt, kt);
-
- fprintf (dmpout, "\\(");
-
- if (bits == NULL)
- {
- for (i = 0; i < size; ++i)
- {
- ffebld_constantunion_dump (ffebld_constantarray_get (array, bt, kt, i), bt,
- kt);
- if (i != size - 1)
- fputc (',', dmpout);
- }
- }
- else
- {
- bool value;
- ffebitCount length;
- ffetargetOffset offset = 0;
-
- do
- {
- ffebit_test (bits, offset, &value, &length);
- if (value && (length != 0))
- {
- if (length == 1)
- fprintf (dmpout, "[%" ffetargetOffset_f "d]:", offset);
- else
- fprintf (dmpout,
- "[%" ffetargetOffset_f "u..%" ffetargetOffset_f "d]:",
- offset, offset + (ffetargetOffset) length - 1);
- for (j = 0; j < length; ++j, ++offset)
- {
- ffebld_constantunion_dump (ffebld_constantarray_get (array, bt, kt,
- offset), bt, kt);
- if (j != length - 1)
- fputc (',', dmpout);
- }
- fprintf (dmpout, ";");
- }
- else
- offset += length;
- }
- while (length != 0);
- }
- fprintf (dmpout, "\\)");
-
-}
-#endif
-
/* ffebld_constantarray_get -- Get a value from an array of constants
See prototype. */
@@ -4408,780 +3911,6 @@ ffebld_constantarray_put (ffebldConstantArray array, ffeinfoBasictype bt,
}
}
-/* ffebld_constantunion_dump -- Dump a constant
-
- See prototype. */
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-void
-ffebld_constantunion_dump (ffebldConstantUnion u, ffeinfoBasictype bt,
- ffeinfoKindtype kt)
-{
- switch (bt)
- {
- case FFEINFO_basictypeINTEGER:
- switch (kt)
- {
-#if FFETARGET_okINTEGER1
- case FFEINFO_kindtypeINTEGER1:
- ffetarget_print_integer1 (dmpout, u.integer1);
- break;
-#endif
-
-#if FFETARGET_okINTEGER2
- case FFEINFO_kindtypeINTEGER2:
- ffetarget_print_integer2 (dmpout, u.integer2);
- break;
-#endif
-
-#if FFETARGET_okINTEGER3
- case FFEINFO_kindtypeINTEGER3:
- ffetarget_print_integer3 (dmpout, u.integer3);
- break;
-#endif
-
-#if FFETARGET_okINTEGER4
- case FFEINFO_kindtypeINTEGER4:
- ffetarget_print_integer4 (dmpout, u.integer4);
- break;
-#endif
-
-#if FFETARGET_okINTEGER5
- case FFEINFO_kindtypeINTEGER5:
- ffetarget_print_integer5 (dmpout, u.integer5);
- break;
-#endif
-
-#if FFETARGET_okINTEGER6
- case FFEINFO_kindtypeINTEGER6:
- ffetarget_print_integer6 (dmpout, u.integer6);
- break;
-#endif
-
-#if FFETARGET_okINTEGER7
- case FFEINFO_kindtypeINTEGER7:
- ffetarget_print_integer7 (dmpout, u.integer7);
- break;
-#endif
-
-#if FFETARGET_okINTEGER8
- case FFEINFO_kindtypeINTEGER8:
- ffetarget_print_integer8 (dmpout, u.integer8);
- break;
-#endif
-
- default:
- assert ("bad INTEGER kindtype" == NULL);
- break;
- }
- break;
-
- case FFEINFO_basictypeLOGICAL:
- switch (kt)
- {
-#if FFETARGET_okLOGICAL1
- case FFEINFO_kindtypeLOGICAL1:
- ffetarget_print_logical1 (dmpout, u.logical1);
- break;
-#endif
-
-#if FFETARGET_okLOGICAL2
- case FFEINFO_kindtypeLOGICAL2:
- ffetarget_print_logical2 (dmpout, u.logical2);
- break;
-#endif
-
-#if FFETARGET_okLOGICAL3
- case FFEINFO_kindtypeLOGICAL3:
- ffetarget_print_logical3 (dmpout, u.logical3);
- break;
-#endif
-
-#if FFETARGET_okLOGICAL4
- case FFEINFO_kindtypeLOGICAL4:
- ffetarget_print_logical4 (dmpout, u.logical4);
- break;
-#endif
-
-#if FFETARGET_okLOGICAL5
- case FFEINFO_kindtypeLOGICAL5:
- ffetarget_print_logical5 (dmpout, u.logical5);
- break;
-#endif
-
-#if FFETARGET_okLOGICAL6
- case FFEINFO_kindtypeLOGICAL6:
- ffetarget_print_logical6 (dmpout, u.logical6);
- break;
-#endif
-
-#if FFETARGET_okLOGICAL7
- case FFEINFO_kindtypeLOGICAL7:
- ffetarget_print_logical7 (dmpout, u.logical7);
- break;
-#endif
-
-#if FFETARGET_okLOGICAL8
- case FFEINFO_kindtypeLOGICAL8:
- ffetarget_print_logical8 (dmpout, u.logical8);
- break;
-#endif
-
- default:
- assert ("bad LOGICAL kindtype" == NULL);
- break;
- }
- break;
-
- case FFEINFO_basictypeREAL:
- switch (kt)
- {
-#if FFETARGET_okREAL1
- case FFEINFO_kindtypeREAL1:
- ffetarget_print_real1 (dmpout, u.real1);
- break;
-#endif
-
-#if FFETARGET_okREAL2
- case FFEINFO_kindtypeREAL2:
- ffetarget_print_real2 (dmpout, u.real2);
- break;
-#endif
-
-#if FFETARGET_okREAL3
- case FFEINFO_kindtypeREAL3:
- ffetarget_print_real3 (dmpout, u.real3);
- break;
-#endif
-
-#if FFETARGET_okREAL4
- case FFEINFO_kindtypeREAL4:
- ffetarget_print_real4 (dmpout, u.real4);
- break;
-#endif
-
-#if FFETARGET_okREAL5
- case FFEINFO_kindtypeREAL5:
- ffetarget_print_real5 (dmpout, u.real5);
- break;
-#endif
-
-#if FFETARGET_okREAL6
- case FFEINFO_kindtypeREAL6:
- ffetarget_print_real6 (dmpout, u.real6);
- break;
-#endif
-
-#if FFETARGET_okREAL7
- case FFEINFO_kindtypeREAL7:
- ffetarget_print_real7 (dmpout, u.real7);
- break;
-#endif
-
-#if FFETARGET_okREAL8
- case FFEINFO_kindtypeREAL8:
- ffetarget_print_real8 (dmpout, u.real8);
- break;
-#endif
-
- default:
- assert ("bad REAL kindtype" == NULL);
- break;
- }
- break;
-
- case FFEINFO_basictypeCOMPLEX:
- switch (kt)
- {
-#if FFETARGET_okCOMPLEX1
- case FFEINFO_kindtypeREAL1:
- fprintf (dmpout, "(");
- ffetarget_print_real1 (dmpout, u.complex1.real);
- fprintf (dmpout, ",");
- ffetarget_print_real1 (dmpout, u.complex1.imaginary);
- fprintf (dmpout, ")");
- break;
-#endif
-
-#if FFETARGET_okCOMPLEX2
- case FFEINFO_kindtypeREAL2:
- fprintf (dmpout, "(");
- ffetarget_print_real2 (dmpout, u.complex2.real);
- fprintf (dmpout, ",");
- ffetarget_print_real2 (dmpout, u.complex2.imaginary);
- fprintf (dmpout, ")");
- break;
-#endif
-
-#if FFETARGET_okCOMPLEX3
- case FFEINFO_kindtypeREAL3:
- fprintf (dmpout, "(");
- ffetarget_print_real3 (dmpout, u.complex3.real);
- fprintf (dmpout, ",");
- ffetarget_print_real3 (dmpout, u.complex3.imaginary);
- fprintf (dmpout, ")");
- break;
-#endif
-
-#if FFETARGET_okCOMPLEX4
- case FFEINFO_kindtypeREAL4:
- fprintf (dmpout, "(");
- ffetarget_print_real4 (dmpout, u.complex4.real);
- fprintf (dmpout, ",");
- ffetarget_print_real4 (dmpout, u.complex4.imaginary);
- fprintf (dmpout, ")");
- break;
-#endif
-
-#if FFETARGET_okCOMPLEX5
- case FFEINFO_kindtypeREAL5:
- fprintf (dmpout, "(");
- ffetarget_print_real5 (dmpout, u.complex5.real);
- fprintf (dmpout, ",");
- ffetarget_print_real5 (dmpout, u.complex5.imaginary);
- fprintf (dmpout, ")");
- break;
-#endif
-
-#if FFETARGET_okCOMPLEX6
- case FFEINFO_kindtypeREAL6:
- fprintf (dmpout, "(");
- ffetarget_print_real6 (dmpout, u.complex6.real);
- fprintf (dmpout, ",");
- ffetarget_print_real6 (dmpout, u.complex6.imaginary);
- fprintf (dmpout, ")");
- break;
-#endif
-
-#if FFETARGET_okCOMPLEX7
- case FFEINFO_kindtypeREAL7:
- fprintf (dmpout, "(");
- ffetarget_print_real7 (dmpout, u.complex7.real);
- fprintf (dmpout, ",");
- ffetarget_print_real7 (dmpout, u.complex7.imaginary);
- fprintf (dmpout, ")");
- break;
-#endif
-
-#if FFETARGET_okCOMPLEX8
- case FFEINFO_kindtypeREAL8:
- fprintf (dmpout, "(");
- ffetarget_print_real8 (dmpout, u.complex8.real);
- fprintf (dmpout, ",");
- ffetarget_print_real8 (dmpout, u.complex8.imaginary);
- fprintf (dmpout, ")");
- break;
-#endif
-
- default:
- assert ("bad COMPLEX kindtype" == NULL);
- break;
- }
- break;
-
- case FFEINFO_basictypeCHARACTER:
- switch (kt)
- {
-#if FFETARGET_okCHARACTER1
- case FFEINFO_kindtypeCHARACTER1:
- ffetarget_print_character1 (dmpout, u.character1);
- break;
-#endif
-
-#if FFETARGET_okCHARACTER2
- case FFEINFO_kindtypeCHARACTER2:
- ffetarget_print_character2 (dmpout, u.character2);
- break;
-#endif
-
-#if FFETARGET_okCHARACTER3
- case FFEINFO_kindtypeCHARACTER3:
- ffetarget_print_character3 (dmpout, u.character3);
- break;
-#endif
-
-#if FFETARGET_okCHARACTER4
- case FFEINFO_kindtypeCHARACTER4:
- ffetarget_print_character4 (dmpout, u.character4);
- break;
-#endif
-
-#if FFETARGET_okCHARACTER5
- case FFEINFO_kindtypeCHARACTER5:
- ffetarget_print_character5 (dmpout, u.character5);
- break;
-#endif
-
-#if FFETARGET_okCHARACTER6
- case FFEINFO_kindtypeCHARACTER6:
- ffetarget_print_character6 (dmpout, u.character6);
- break;
-#endif
-
-#if FFETARGET_okCHARACTER7
- case FFEINFO_kindtypeCHARACTER7:
- ffetarget_print_character7 (dmpout, u.character7);
- break;
-#endif
-
-#if FFETARGET_okCHARACTER8
- case FFEINFO_kindtypeCHARACTER8:
- ffetarget_print_character8 (dmpout, u.character8);
- break;
-#endif
-
- default:
- assert ("bad CHARACTER kindtype" == NULL);
- break;
- }
- break;
-
- default:
- assert ("bad basictype" == NULL);
- break;
- }
-}
-#endif
-
-/* ffebld_dump -- Dump expression tree in concise form
-
- ffebld b;
- ffebld_dump(b); */
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-void
-ffebld_dump (ffebld b)
-{
- ffeinfoKind k;
- ffeinfoWhere w;
-
- if (b == NULL)
- {
- fprintf (dmpout, "(null)");
- return;
- }
-
- switch (ffebld_op (b))
- {
- case FFEBLD_opITEM:
- fputs ("[", dmpout);
- while (b != NULL)
- {
- ffebld_dump (ffebld_head (b));
- if ((b = ffebld_trail (b)) != NULL)
- fputs (",", dmpout);
- }
- fputs ("]", dmpout);
- return;
-
- case FFEBLD_opSTAR:
- case FFEBLD_opBOUNDS:
- case FFEBLD_opREPEAT:
- case FFEBLD_opLABTER:
- case FFEBLD_opLABTOK:
- case FFEBLD_opIMPDO:
- fputs (ffebld_op_string (ffebld_op (b)), dmpout);
- break;
-
- default:
- if (ffeinfo_size (ffebld_info (b)) != FFETARGET_charactersizeNONE)
- fprintf (dmpout, "%s%d%s%s*%" ffetargetCharacterSize_f "u",
- ffebld_op_string (ffebld_op (b)),
- (int) ffeinfo_rank (ffebld_info (b)),
- ffeinfo_basictype_string (ffeinfo_basictype (ffebld_info (b))),
- ffeinfo_kindtype_string (ffeinfo_kindtype (ffebld_info (b))),
- ffeinfo_size (ffebld_info (b)));
- else
- fprintf (dmpout, "%s%d%s%s", ffebld_op_string (ffebld_op (b)),
- (int) ffeinfo_rank (ffebld_info (b)),
- ffeinfo_basictype_string (ffeinfo_basictype (ffebld_info (b))),
- ffeinfo_kindtype_string (ffeinfo_kindtype (ffebld_info (b))));
- if ((k = ffeinfo_kind (ffebld_info (b))) != FFEINFO_kindNONE)
- fprintf (dmpout, "/%s", ffeinfo_kind_string (k));
- if ((w = ffeinfo_where (ffebld_info (b))) != FFEINFO_whereNONE)
- fprintf (dmpout, "@%s", ffeinfo_where_string (w));
- break;
- }
-
- switch (ffebld_arity (b))
- {
- case 2:
- fputs ("(", dmpout);
- ffebld_dump (ffebld_left (b));
- fputs (",", dmpout);
- ffebld_dump (ffebld_right (b));
- fputs (")", dmpout);
- break;
-
- case 1:
- fputs ("(", dmpout);
- ffebld_dump (ffebld_left (b));
- fputs (")", dmpout);
- break;
-
- default:
- switch (ffebld_op (b))
- {
- case FFEBLD_opCONTER:
- fprintf (dmpout, "<");
- ffebld_constant_dump (b->u.conter.expr);
- fprintf (dmpout, ">");
- break;
-
- case FFEBLD_opACCTER:
- fprintf (dmpout, "<");
- ffebld_constantarray_dump (b->u.accter.array,
- ffeinfo_basictype (ffebld_info (b)),
- ffeinfo_kindtype (ffebld_info (b)),
- ffebit_size (b->u.accter.bits), b->u.accter.bits);
- fprintf (dmpout, ">");
- break;
-
- case FFEBLD_opARRTER:
- fprintf (dmpout, "<");
- ffebld_constantarray_dump (b->u.arrter.array,
- ffeinfo_basictype (ffebld_info (b)),
- ffeinfo_kindtype (ffebld_info (b)),
- b->u.arrter.size, NULL);
- fprintf (dmpout, ">");
- break;
-
- case FFEBLD_opLABTER:
- if (b->u.labter == NULL)
- fprintf (dmpout, "<>");
- else
- fprintf (dmpout, "<%" ffelabValue_f "u>", ffelab_value (b->u.labter));
- break;
-
- case FFEBLD_opLABTOK:
- fprintf (dmpout, "<%s>", ffelex_token_text (b->u.labtok));
- break;
-
- case FFEBLD_opSYMTER:
- fprintf (dmpout, "<");
- ffesymbol_dump (b->u.symter.symbol);
- if ((b->u.symter.generic != FFEINTRIN_genNONE)
- || (b->u.symter.specific != FFEINTRIN_specNONE))
- fprintf (dmpout, "{%s:%s:%s}",
- ffeintrin_name_generic (b->u.symter.generic),
- ffeintrin_name_specific (b->u.symter.specific),
- ffeintrin_name_implementation (b->u.symter.implementation));
- if (b->u.symter.do_iter)
- fprintf (dmpout, "{/do-iter}");
- fprintf (dmpout, ">");
- break;
-
- default:
- break;
- }
- }
-}
-#endif
-
-/* ffebld_dump_prefix -- Dump the prefix for a constant of a given type
-
- ffebld_dump_prefix(dmpout,FFEINFO_basictypeINTEGER,
- FFEINFO_kindtypeINTEGER1); */
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-void
-ffebld_dump_prefix (FILE *out, ffeinfoBasictype bt, ffeinfoKindtype kt)
-{
- switch (bt)
- {
- case FFEINFO_basictypeINTEGER:
- switch (kt)
- {
-#if FFETARGET_okINTEGER1
- case FFEINFO_kindtypeINTEGER1:
- fprintf (out, "I" STRX (FFETARGET_kindINTEGER1) "/");
- break;
-#endif
-
-#if FFETARGET_okINTEGER2
- case FFEINFO_kindtypeINTEGER2:
- fprintf (out, "I" STRX (FFETARGET_kindINTEGER2) "/");
- break;
-#endif
-
-#if FFETARGET_okINTEGER3
- case FFEINFO_kindtypeINTEGER3:
- fprintf (out, "I" STRX (FFETARGET_kindINTEGER3) "/");
- break;
-#endif
-
-#if FFETARGET_okINTEGER4
- case FFEINFO_kindtypeINTEGER4:
- fprintf (out, "I" STRX (FFETARGET_kindINTEGER4) "/");
- break;
-#endif
-
-#if FFETARGET_okINTEGER5
- case FFEINFO_kindtypeINTEGER5:
- fprintf (out, "I" STRX (FFETARGET_kindINTEGER5) "/");
- break;
-#endif
-
-#if FFETARGET_okINTEGER6
- case FFEINFO_kindtypeINTEGER6:
- fprintf (out, "I" STRX (FFETARGET_kindINTEGER6) "/");
- break;
-#endif
-
-#if FFETARGET_okINTEGER7
- case FFEINFO_kindtypeINTEGER7:
- fprintf (out, "I" STRX (FFETARGET_kindINTEGER7) "/");
- break;
-#endif
-
-#if FFETARGET_okINTEGER8
- case FFEINFO_kindtypeINTEGER8:
- fprintf (out, "I" STRX (FFETARGET_kindINTEGER8) "/");
- break;
-#endif
-
- default:
- assert ("bad INTEGER kindtype" == NULL);
- break;
- }
- break;
-
- case FFEINFO_basictypeLOGICAL:
- switch (kt)
- {
-#if FFETARGET_okLOGICAL1
- case FFEINFO_kindtypeLOGICAL1:
- fprintf (out, "L" STRX (FFETARGET_kindLOGICAL1) "/");
- break;
-#endif
-
-#if FFETARGET_okLOGICAL2
- case FFEINFO_kindtypeLOGICAL2:
- fprintf (out, "L" STRX (FFETARGET_kindLOGICAL2) "/");
- break;
-#endif
-
-#if FFETARGET_okLOGICAL3
- case FFEINFO_kindtypeLOGICAL3:
- fprintf (out, "L" STRX (FFETARGET_kindLOGICAL3) "/");
- break;
-#endif
-
-#if FFETARGET_okLOGICAL4
- case FFEINFO_kindtypeLOGICAL4:
- fprintf (out, "L" STRX (FFETARGET_kindLOGICAL4) "/");
- break;
-#endif
-
-#if FFETARGET_okLOGICAL5
- case FFEINFO_kindtypeLOGICAL5:
- fprintf (out, "L" STRX (FFETARGET_kindLOGICAL5) "/");
- break;
-#endif
-
-#if FFETARGET_okLOGICAL6
- case FFEINFO_kindtypeLOGICAL6:
- fprintf (out, "L" STRX (FFETARGET_kindLOGICAL6) "/");
- break;
-#endif
-
-#if FFETARGET_okLOGICAL7
- case FFEINFO_kindtypeLOGICAL7:
- fprintf (out, "L" STRX (FFETARGET_kindLOGICAL7) "/");
- break;
-#endif
-
-#if FFETARGET_okLOGICAL8
- case FFEINFO_kindtypeLOGICAL8:
- fprintf (out, "L" STRX (FFETARGET_kindLOGICAL8) "/");
- break;
-#endif
-
- default:
- assert ("bad LOGICAL kindtype" == NULL);
- break;
- }
- break;
-
- case FFEINFO_basictypeREAL:
- switch (kt)
- {
-#if FFETARGET_okREAL1
- case FFEINFO_kindtypeREAL1:
- fprintf (out, "R" STRX (FFETARGET_kindREAL1) "/");
- break;
-#endif
-
-#if FFETARGET_okREAL2
- case FFEINFO_kindtypeREAL2:
- fprintf (out, "R" STRX (FFETARGET_kindREAL2) "/");
- break;
-#endif
-
-#if FFETARGET_okREAL3
- case FFEINFO_kindtypeREAL3:
- fprintf (out, "R" STRX (FFETARGET_kindREAL3) "/");
- break;
-#endif
-
-#if FFETARGET_okREAL4
- case FFEINFO_kindtypeREAL4:
- fprintf (out, "R" STRX (FFETARGET_kindREAL4) "/");
- break;
-#endif
-
-#if FFETARGET_okREAL5
- case FFEINFO_kindtypeREAL5:
- fprintf (out, "R" STRX (FFETARGET_kindREAL5) "/");
- break;
-#endif
-
-#if FFETARGET_okREAL6
- case FFEINFO_kindtypeREAL6:
- fprintf (out, "R" STRX (FFETARGET_kindREAL6) "/");
- break;
-#endif
-
-#if FFETARGET_okREAL7
- case FFEINFO_kindtypeREAL7:
- fprintf (out, "R" STRX (FFETARGET_kindREAL7) "/");
- break;
-#endif
-
-#if FFETARGET_okREAL8
- case FFEINFO_kindtypeREAL8:
- fprintf (out, "R" STRX (FFETARGET_kindREAL8) "/");
- break;
-#endif
-
- default:
- assert ("bad REAL kindtype" == NULL);
- break;
- }
- break;
-
- case FFEINFO_basictypeCOMPLEX:
- switch (kt)
- {
-#if FFETARGET_okCOMPLEX1
- case FFEINFO_kindtypeREAL1:
- fprintf (out, "C" STRX (FFETARGET_kindCOMPLEX1) "/");
- break;
-#endif
-
-#if FFETARGET_okCOMPLEX2
- case FFEINFO_kindtypeREAL2:
- fprintf (out, "C" STRX (FFETARGET_kindCOMPLEX2) "/");
- break;
-#endif
-
-#if FFETARGET_okCOMPLEX3
- case FFEINFO_kindtypeREAL3:
- fprintf (out, "C" STRX (FFETARGET_kindCOMPLEX3) "/");
- break;
-#endif
-
-#if FFETARGET_okCOMPLEX4
- case FFEINFO_kindtypeREAL4:
- fprintf (out, "C" STRX (FFETARGET_kindCOMPLEX4) "/");
- break;
-#endif
-
-#if FFETARGET_okCOMPLEX5
- case FFEINFO_kindtypeREAL5:
- fprintf (out, "C" STRX (FFETARGET_kindCOMPLEX5) "/");
- break;
-#endif
-
-#if FFETARGET_okCOMPLEX6
- case FFEINFO_kindtypeREAL6:
- fprintf (out, "C" STRX (FFETARGET_kindCOMPLEX6) "/");
- break;
-#endif
-
-#if FFETARGET_okCOMPLEX7
- case FFEINFO_kindtypeREAL7:
- fprintf (out, "C" STRX (FFETARGET_kindCOMPLEX7) "/");
- break;
-#endif
-
-#if FFETARGET_okCOMPLEX8
- case FFEINFO_kindtypeREAL8:
- fprintf (out, "C" STRX (FFETARGET_kindCOMPLEX8) "/");
- break;
-#endif
-
- default:
- assert ("bad COMPLEX kindtype" == NULL);
- break;
- }
- break;
-
- case FFEINFO_basictypeCHARACTER:
- switch (kt)
- {
-#if FFETARGET_okCHARACTER1
- case FFEINFO_kindtypeCHARACTER1:
- fprintf (out, "A" STRX (FFETARGET_kindCHARACTER1) "/");
- break;
-#endif
-
-#if FFETARGET_okCHARACTER2
- case FFEINFO_kindtypeCHARACTER2:
- fprintf (out, "A" STRX (FFETARGET_kindCHARACTER2) "/");
- break;
-#endif
-
-#if FFETARGET_okCHARACTER3
- case FFEINFO_kindtypeCHARACTER3:
- fprintf (out, "A" STRX (FFETARGET_kindCHARACTER3) "/");
- break;
-#endif
-
-#if FFETARGET_okCHARACTER4
- case FFEINFO_kindtypeCHARACTER4:
- fprintf (out, "A" STRX (FFETARGET_kindCHARACTER4) "/");
- break;
-#endif
-
-#if FFETARGET_okCHARACTER5
- case FFEINFO_kindtypeCHARACTER5:
- fprintf (out, "A" STRX (FFETARGET_kindCHARACTER5) "/");
- break;
-#endif
-
-#if FFETARGET_okCHARACTER6
- case FFEINFO_kindtypeCHARACTER6:
- fprintf (out, "A" STRX (FFETARGET_kindCHARACTER6) "/");
- break;
-#endif
-
-#if FFETARGET_okCHARACTER7
- case FFEINFO_kindtypeCHARACTER7:
- fprintf (out, "A" STRX (FFETARGET_kindCHARACTER7) "/");
- break;
-#endif
-
-#if FFETARGET_okCHARACTER8
- case FFEINFO_kindtypeCHARACTER8:
- fprintf (out, "A" STRX (FFETARGET_kindCHARACTER8) "/");
- break;
-#endif
-
- default:
- assert ("bad CHARACTER kindtype" == NULL);
- break;
- }
- break;
-
- default:
- assert ("bad basictype" == NULL);
- fprintf (out, "?/?");
- break;
- }
-}
-#endif
-
/* ffebld_init_0 -- Initialize the module
ffebld_init_0(); */
diff --git a/contrib/gcc/f/bld.h b/contrib/gcc/f/bld.h
index ddbd448..e7285e6 100644
--- a/contrib/gcc/f/bld.h
+++ b/contrib/gcc/f/bld.h
@@ -27,8 +27,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* Allow multiple inclusion to work. */
-#ifndef _H_f_bld
-#define _H_f_bld
+#ifndef GCC_F_BLD_H
+#define GCC_F_BLD_H
/* Simple definitions and enumerations. */
@@ -124,13 +124,7 @@ typedef struct _ffebld_pool_stack_ *ffebldPoolstack_;
#define FFEBLD_whereconstPROGUNIT_ 1
#define FFEBLD_whereconstFILE_ 2
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-#define FFEBLD_whereconstCURRENT_ FFEBLD_whereconstPROGUNIT_
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
#define FFEBLD_whereconstCURRENT_ FFEBLD_whereconstFILE_
-#else
-#error
-#endif
/* Structure definitions. */
@@ -480,15 +474,12 @@ struct _ffebld_pool_stack_
/* Global objects accessed by users of this module. */
-extern ffebldArity ffebld_arity_op_[];
+extern const ffebldArity ffebld_arity_op_[(int) FFEBLD_op];
extern struct _ffebld_pool_stack_ ffebld_pool_stack_;
/* Declare functions with prototypes. */
int ffebld_constant_cmp (ffebldConstant c1, ffebldConstant c2);
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-void ffebld_constant_dump (ffebldConstant c);
-#endif
bool ffebld_constant_is_magical (ffebldConstant c);
bool ffebld_constant_is_zero (ffebldConstant c);
#if FFETARGET_okCHARACTER1
@@ -691,10 +682,6 @@ ffebldConstant ffebld_constant_new_typeless_ov (ffelexToken t);
ffebldConstant ffebld_constant_new_typeless_val (ffebldConst type,
ffetargetTypeless val);
ffebldConstant ffebld_constant_negated (ffebldConstant c);
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-void ffebld_constantarray_dump (ffebldConstantArray array, ffeinfoBasictype bt,
- ffeinfoKindtype kt, ffetargetOffset size, ffebit bits);
-#endif
ffebldConstantUnion ffebld_constantarray_get (ffebldConstantArray array,
ffeinfoBasictype bt, ffeinfoKindtype kt, ffetargetOffset offset);
void ffebld_constantarray_kill (ffebldConstantArray array, ffeinfoBasictype bt,
@@ -711,12 +698,6 @@ void ffebld_constantarray_preparray (void **aptr, void **cptr, size_t *size,
ffeinfoBasictype cbt, ffeinfoKindtype ckt);
void ffebld_constantarray_put (ffebldConstantArray array, ffeinfoBasictype bt,
ffeinfoKindtype kt, ffetargetOffset offset, ffebldConstantUnion constant);
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-void ffebld_constantunion_dump (ffebldConstantUnion u, ffeinfoBasictype bt,
- ffeinfoKindtype kt);
-void ffebld_dump (ffebld b);
-void ffebld_dump_prefix (FILE *out, ffeinfoBasictype bt, ffeinfoKindtype kt);
-#endif
void ffebld_init_0 (void);
void ffebld_init_1 (void);
void ffebld_init_2 (void);
@@ -1036,4 +1017,4 @@ ffetargetCharacterSize ffebld_size_max (ffebld b);
/* End of #include file. */
-#endif
+#endif /* ! GCC_F_BLD_H */
diff --git a/contrib/gcc/f/bugs.texi b/contrib/gcc/f/bugs.texi
index 3f4cd90..382ed08 100644
--- a/contrib/gcc/f/bugs.texi
+++ b/contrib/gcc/f/bugs.texi
@@ -1,4 +1,4 @@
-@c Copyright (C) 1995-1999 Free Software Foundation, Inc.
+@c Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
@c This is part of the G77 manual.
@c For copying conditions, see the file g77.texi.
@@ -7,9 +7,9 @@
@c Keep this the same as the dates above, since it's used
@c in the standalone derivations of this file (e.g. BUGS).
-@set copyrights-bugs 1995-1999
+@set copyrights-bugs 1995,1996,1997,1998,1999,2000,2001
-@set last-update-bugs 1999-06-29
+@set last-update-bugs 2001-06-10
@include root.texi
@@ -77,23 +77,11 @@ most consistent with the @code{g77} product in that version.
An online, ``live'' version of this document
(derived directly from the mainline, development version
-of @code{g77} within @code{egcs})
+of @code{g77} within @code{gcc})
is available via
@uref{http://www.gnu.org/software/gcc/onlinedocs/g77_bugs.html}.
Follow the ``Known Bugs'' link.
-@ifset DOC-G77
-For information on bugs that might afflict people who
-configure, port, build, and install @code{g77},
-see @ref{Problems Installing}.
-@end ifset
-
-@ifset DOC-BUGS
-For information on bugs that might afflict people who
-configure, port, build, and install @code{g77},
-see "Problems Installing" in @file{@value{path-g77}/INSTALL}.
-@end ifset
-
The following information was last updated on @value{last-update-bugs}:
@itemize @bullet
@@ -167,30 +155,40 @@ improvements to the compiler.)
Note that @code{g77} does display a warning message to
notify the user before the compiler appears to hang.
@ifset DOC-G77
-@xref{Large Initialization,,Initialization of Large Aggregate Areas},
-for information on how to change the point at which
-@code{g77} decides to issue this warning.
-@end ifset
-
-@cindex debugging
-@cindex common blocks
-@cindex equivalence areas
-@cindex local equivalence areas
-@item
-@code{g77} doesn't emit variable and array members of common blocks for use
-with a debugger (the @samp{-g} command-line option).
-The code is present to do this, but doesn't work with at least
-one debug format---perhaps it works with others.
-And it turns out there's a similar bug for
-local equivalence areas, so that has been disabled as well.
-
-As of Version 0.5.19, a temporary kludge solution is provided whereby
-some rudimentary information on a member is written as a string that
-is the member's value as a character string.
-
-@ifset DOC-G77
-@xref{Code Gen Options,,Options for Code Generation Conventions},
-for information on the @samp{-fdebug-kludge} option.
+A warning message is issued when @code{g77} sees code that provides
+initial values (e.g. via @code{DATA}) to an aggregate area (@code{COMMON}
+or @code{EQUIVALENCE}, or even a large enough array or @code{CHARACTER}
+variable)
+that is large enough to increase @code{g77}'s compile time by roughly
+a factor of 10.
+
+This size currently is quite small, since @code{g77}
+currently has a known bug requiring too much memory
+and time to handle such cases.
+In @file{@value{path-g77}/data.c}, the macro
+@code{FFEDATA_sizeTOO_BIG_INIT_} is defined
+to the minimum size for the warning to appear.
+The size is specified in storage units,
+which can be bytes, words, or whatever, on a case-by-case basis.
+
+After changing this macro definition, you must
+(of course) rebuild and reinstall @code{g77} for
+the change to take effect.
+
+Note that, as of version 0.5.18, improvements have
+reduced the scope of the problem for @emph{sparse}
+initialization of large arrays, especially those
+with large, contiguous uninitialized areas.
+However, the warning is issued at a point prior to
+when @code{g77} knows whether the initialization is sparse,
+and delaying the warning could mean it is produced
+too late to be helpful.
+
+Therefore, the macro definition should not be adjusted to
+reflect sparse cases.
+Instead, adjust it to generate the warning when densely
+initialized arrays begin to cause responses noticeably slower
+than linear performance would suggest.
@end ifset
@cindex code, displaying main source
diff --git a/contrib/gcc/f/com-rt.def b/contrib/gcc/f/com-rt.def
index cb3a5f1..43344d9 100644
--- a/contrib/gcc/f/com-rt.def
+++ b/contrib/gcc/f/com-rt.def
@@ -1,5 +1,5 @@
/* com-rt.def -- Public #include File (module.h template V1.0)
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
Contributed by James Craig Burley.
This file is part of GNU Fortran.
@@ -25,7 +25,7 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
Modifications:
*/
-/* DEFGFRT(CODE,NAME,TYPE,VOLATILE,COMPLEX):
+/* DEFGFRT(CODE,NAME,TYPE,VOLATILE,COMPLEX,CONST):
CODE -- the #define name to use to refer to the function in g77 code
@@ -59,225 +59,231 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
COMPLEX -- TRUE if the return value is COMPLEX or DOUBLE COMPLEX and
thus might need to be returned as ptr-to-1st-arg
+ CONST -- TRUE if the function is const
+ (does not have side effects and only depends on its arguments).
+
*/
-DEFGFRT (FFECOM_gfrtCAT, "s_cat", FFECOM_rttypeVOID_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtCMP, "s_cmp", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtCOPY, "s_copy", FFECOM_rttypeVOID_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtPAUSE, "s_paus", FFECOM_rttypeVOID_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtSTOP, "s_stop", FFECOM_rttypeVOID_, 0, TRUE, FALSE)
-DEFGFRT (FFECOM_gfrtRANGE, "s_rnge", FFECOM_rttypeINTEGER_, 0, TRUE, FALSE)
+DEFGFRT (FFECOM_gfrtCAT, "s_cat", FFECOM_rttypeVOID_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtCMP, "s_cmp", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtCOPY, "s_copy", FFECOM_rttypeVOID_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtPAUSE, "s_paus", FFECOM_rttypeVOID_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtSTOP, "s_stop", FFECOM_rttypeVOID_, 0, TRUE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtRANGE, "s_rnge", FFECOM_rttypeINTEGER_, 0, TRUE, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtSRDUE, "s_rdue", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtERDUE, "e_rdue", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtSRSUE, "s_rsue", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtERSUE, "e_rsue", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtSRDFE, "s_rdfe", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtERDFE, "e_rdfe", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtSRSFI, "s_rsfi", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtERSFI, "e_rsfi", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtSRSFE, "s_rsfe", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtERSFE, "e_rsfe", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtSRSLI, "s_rsli", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtERSLI, "e_rsli", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtSRSLE, "s_rsle", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtERSLE, "e_rsle", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtSRSNE, "s_rsne", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtSRDUE, "s_rdue", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtERDUE, "e_rdue", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtSRSUE, "s_rsue", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtERSUE, "e_rsue", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtSRDFE, "s_rdfe", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtERDFE, "e_rdfe", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtSRSFI, "s_rsfi", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtERSFI, "e_rsfi", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtSRSFE, "s_rsfe", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtERSFE, "e_rsfe", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtSRSLI, "s_rsli", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtERSLI, "e_rsli", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtSRSLE, "s_rsle", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtERSLE, "e_rsle", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtSRSNE, "s_rsne", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtSWDUE, "s_wdue", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtEWDUE, "e_wdue", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtSWSUE, "s_wsue", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtEWSUE, "e_wsue", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtSWDFE, "s_wdfe", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtEWDFE, "e_wdfe", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtSWSFI, "s_wsfi", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtEWSFI, "e_wsfi", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtSWSFE, "s_wsfe", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtEWSFE, "e_wsfe", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtSWSLI, "s_wsli", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtEWSLI, "e_wsli", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtSWSLE, "s_wsle", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtEWSLE, "e_wsle", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtSWSNE, "s_wsne", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtSWDUE, "s_wdue", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtEWDUE, "e_wdue", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtSWSUE, "s_wsue", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtEWSUE, "e_wsue", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtSWDFE, "s_wdfe", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtEWDFE, "e_wdfe", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtSWSFI, "s_wsfi", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtEWSFI, "e_wsfi", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtSWSFE, "s_wsfe", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtEWSFE, "e_wsfe", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtSWSLI, "s_wsli", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtEWSLI, "e_wsli", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtSWSLE, "s_wsle", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtEWSLE, "e_wsle", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtSWSNE, "s_wsne", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtDOFIO, "do_fio", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtDOLIO, "do_lio", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtDOUIO, "do_uio", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtDOFIO, "do_fio", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtDOLIO, "do_lio", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtDOUIO, "do_uio", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtFOPEN, "f_open", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtFCLOS, "f_clos", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtFINQU, "f_inqu", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtFOPEN, "f_open", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtFCLOS, "f_clos", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtFINQU, "f_inqu", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtFBACK, "f_back", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtFEND, "f_end", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtFREW, "f_rew", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtFBACK, "f_back", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtFEND, "f_end", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtFREW, "f_rew", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtABORT, "G77_abort_0", FFECOM_rttypeVOID_, 0, TRUE, FALSE)
-DEFGFRT (FFECOM_gfrtABS, "r_abs", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtACCESS, "G77_access_0", FFECOM_rttypeINTEGER_, "&a&a", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtACOS, "r_acos", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtAIMAG, "r_imag", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtAINT, "r_int", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtALARM, "G77_alarm_0", FFECOM_rttypeINTEGER_, "&i0", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtALOG, "r_log", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtALOG10, "r_lg10", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtAMOD, "r_mod", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtANINT, "r_nint", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtASIN, "r_asin", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtATAN, "r_atan", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtATAN2, "r_atn2", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtCABS, "c_abs", FFECOM_rttypeREAL_F2C_, "&c", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtCCOS, "c_cos", FFECOM_rttypeCOMPLEX_F2C_, "&c", FALSE, TRUE)
-DEFGFRT (FFECOM_gfrtCEXP, "c_exp", FFECOM_rttypeCOMPLEX_F2C_, "&c", FALSE, TRUE)
-DEFGFRT (FFECOM_gfrtCHDIR, "G77_chdir_0", FFECOM_rttypeINTEGER_, "&a", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtCLOG, "c_log", FFECOM_rttypeCOMPLEX_F2C_, "&c", FALSE, TRUE)
-DEFGFRT (FFECOM_gfrtCHMOD, "G77_chmod_0", FFECOM_rttypeINTEGER_, "&a&a", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtCONJG, "r_cnjg", FFECOM_rttypeCOMPLEX_F2C_, "&c", FALSE, TRUE)
-DEFGFRT (FFECOM_gfrtCOS, "r_cos", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtCOSH, "r_cosh", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtCSIN, "c_sin", FFECOM_rttypeCOMPLEX_F2C_, "&c", FALSE, TRUE)
-DEFGFRT (FFECOM_gfrtCSQRT, "c_sqrt", FFECOM_rttypeCOMPLEX_F2C_, "&c", FALSE, TRUE)
-DEFGFRT (FFECOM_gfrtCTIME, "G77_ctime_0", FFECOM_rttypeCHARACTER_, "&j", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtDABS, "d_abs", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtDACOS, "d_acos", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtDASIN, "d_asin", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtDATAN, "d_atan", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtDATAN2, "d_atn2", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtDATE, "G77_date_y2kbug_0", FFECOM_rttypeVOID_, "&a", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtDATE_AND_TIME, "G77_date_and_time_0", FFECOM_rttypeVOID_, "&a&a&a&i", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtL_BESJ0, "j0", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtL_BESJ1, "j1", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtL_BESJN, "jn", FFECOM_rttypeDOUBLE_, "id", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtL_BESY0, "y0", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtL_BESY1, "y1", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtL_BESYN, "yn", FFECOM_rttypeDOUBLE_, "id", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtDCOS, "d_cos", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtDCOSH, "d_cosh", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtDDIM, "d_dim", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtDERF, "G77_derf_0", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtDERFC, "G77_derfc_0", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtDEXP, "d_exp", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtDIM, "r_dim", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtDINT, "d_int", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtDLOG, "d_log", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtDLOG10, "d_lg10", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtDMOD, "d_mod", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtDNINT, "d_nint", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtDPROD, "d_prod", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtDSIGN, "d_sign", FFECOM_rttypeDOUBLE_, "&d&d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtDSIN, "d_sin", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtDSINH, "d_sinh", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtDSQRT, "d_sqrt", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtDTAN, "d_tan", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtDTANH, "d_tanh", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtDTIME, "G77_dtime_0", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtERF, "G77_erf_0", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtERFC, "G77_erfc_0", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtETIME, "G77_etime_0", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtEXIT, "G77_exit_0", FFECOM_rttypeVOID_, "&i", TRUE, FALSE)
-DEFGFRT (FFECOM_gfrtEXP, "r_exp", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtFDATE, "G77_fdate_0", FFECOM_rttypeCHARACTER_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtFGET, "G77_fget_0", FFECOM_rttypeINTEGER_, "&a", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtFGETC, "G77_fgetc_0", FFECOM_rttypeINTEGER_, "&i&a", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtFLUSH, "G77_flush_0", FFECOM_rttypeVOID_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtFLUSH1, "G77_flush1_0", FFECOM_rttypeVOID_, "&i", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtFNUM, "G77_fnum_0", FFECOM_rttypeINTEGER_, "&i", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtFPUT, "G77_fput_0", FFECOM_rttypeINTEGER_, "&a", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtFPUTC, "G77_fputc_0", FFECOM_rttypeINTEGER_, "&i&a", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtFSTAT, "G77_fstat_0", FFECOM_rttypeINTEGER_, "&i&i", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtFTELL, "G77_ftell_0", FFECOM_rttypeINTEGER_, "&i", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtFSEEK, "G77_fseek_0", FFECOM_rttypeINTEGER_, "&i&i&i", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtGERROR, "G77_gerror_0", FFECOM_rttypeVOID_, "&a", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtGETARG, "G77_getarg_0", FFECOM_rttypeVOID_, "&i&a", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtGETCWD, "G77_getcwd_0", FFECOM_rttypeINTEGER_, "&a", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtGETGID, "G77_getgid_0", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtGETLOG, "G77_getlog_0", FFECOM_rttypeVOID_, "&a", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtGETPID, "G77_getpid_0", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtGETUID, "G77_getuid_0", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtGETENV, "G77_getenv_0", FFECOM_rttypeVOID_, "&a&a", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtGMTIME, "G77_gmtime_0", FFECOM_rttypeVOID_, "&i&i", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtHOSTNM, "G77_hostnm_0", FFECOM_rttypeINTEGER_, "&a", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtIABS, "i_abs", FFECOM_rttypeINTEGER_, "&i", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtIARGC, "G77_iargc_0", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtIDATE, "G77_idate_0", FFECOM_rttypeVOID_, "&i", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtIDIM, "i_dim", FFECOM_rttypeINTEGER_, "&i", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtIDNINT, "i_dnnt", FFECOM_rttypeINTEGER_, "&i", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtIERRNO, "G77_ierrno_0", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtINDEX, "i_indx", FFECOM_rttypeINTEGER_, "&a&a", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtIRAND, "G77_irand_0", FFECOM_rttypeINTEGER_, "&i", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtISIGN, "i_sign", FFECOM_rttypeINTEGER_, "&i&i", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtISATTY, "G77_isatty_0", FFECOM_rttypeINTEGER_, "&i", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtITIME, "G77_itime_0", FFECOM_rttypeVOID_, "&i", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtKILL, "G77_kill_0", FFECOM_rttypeINTEGER_, "&i&i", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtLEN, "i_len", FFECOM_rttypeINTEGER_, "&a", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtLGE, "l_ge", FFECOM_rttypeLOGICAL_, "&a", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtLGT, "l_gt", FFECOM_rttypeLOGICAL_, "&a", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtLINK, "G77_link_0", FFECOM_rttypeINTEGER_, "&a&a", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtLLE, "l_le", FFECOM_rttypeLOGICAL_, "&a", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtLLT, "l_lt", FFECOM_rttypeLOGICAL_, "&a", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtLNBLNK, "G77_lnblnk_0", FFECOM_rttypeINTEGER_, "&a", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtLSTAT, "G77_lstat_0", FFECOM_rttypeINTEGER_, "&a&i", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtLTIME, "G77_ltime_0", FFECOM_rttypeVOID_, "&i&i", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtMCLOCK, "G77_mclock_0", FFECOM_rttypeLONGINT_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtMOD, "i_mod", FFECOM_rttypeINTEGER_, "&i", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtNINT, "i_nint", FFECOM_rttypeINTEGER_, "&i", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtPERROR, "G77_perror_0", FFECOM_rttypeVOID_, "&a", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtRAND, "G77_rand_0", FFECOM_rttypeREAL_F2C_, "&i", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtRENAME, "G77_rename_0", FFECOM_rttypeINTEGER_, "&a&a", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtSECNDS, "G77_secnds_0", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtSECOND, "G77_second_0", FFECOM_rttypeREAL_F2C_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtSIGN, "r_sign", FFECOM_rttypeREAL_F2C_, "&f&f", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtL_SIGNAL, "G77_signal_0", FFECOM_rttypeVOIDSTAR_, "&i0", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtSIN, "r_sin", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtSINH, "r_sinh", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtSLEEP, "G77_sleep_0", FFECOM_rttypeVOID_, "&i", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtSQRT, "r_sqrt", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtSRAND, "G77_srand_0", FFECOM_rttypeVOID_, "&i", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtSTAT, "G77_stat_0", FFECOM_rttypeINTEGER_, "&a&i", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtSYMLNK, "G77_symlnk_0", FFECOM_rttypeINTEGER_, "&a&a", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtSYSTEM, "G77_system_0", FFECOM_rttypeINTEGER_, "&a", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtSYSTEM_CLOCK, "G77_system_clock_0", FFECOM_rttypeVOID_, "&i&i&i", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtTAN, "r_tan", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtTANH, "r_tanh", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtTIME, "G77_time_0", FFECOM_rttypeLONGINT_, 0, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtTTYNAM, "G77_ttynam_0", FFECOM_rttypeCHARACTER_, "&i", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtUNLINK, "G77_unlink_0", FFECOM_rttypeINTEGER_, "&a", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtUMASK, "G77_umask_0", FFECOM_rttypeINTEGER_, "&i", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtVXTIDATE, "G77_vxtidate_y2kbug_0", FFECOM_rttypeVOID_, "&i&i&i", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtVXTTIME, "G77_vxttime_0", FFECOM_rttypeVOID_, "&a", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtCDABS, "z_abs", FFECOM_rttypeDOUBLE_, "&e", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtCDCOS, "z_cos", FFECOM_rttypeDBLCMPLX_F2C_, "&e", FALSE, TRUE)
-DEFGFRT (FFECOM_gfrtCDEXP, "z_exp", FFECOM_rttypeDBLCMPLX_F2C_, "&e", FALSE, TRUE)
-DEFGFRT (FFECOM_gfrtCDLOG, "z_log", FFECOM_rttypeDBLCMPLX_F2C_, "&e", FALSE, TRUE)
-DEFGFRT (FFECOM_gfrtDCONJG, "d_cnjg", FFECOM_rttypeDBLCMPLX_F2C_, "&e", FALSE, TRUE)
-DEFGFRT (FFECOM_gfrtCDSIN, "z_sin", FFECOM_rttypeDBLCMPLX_F2C_, "&e", FALSE, TRUE)
-DEFGFRT (FFECOM_gfrtCDSQRT, "z_sqrt", FFECOM_rttypeDBLCMPLX_F2C_, "&e", FALSE, TRUE)
-DEFGFRT (FFECOM_gfrtDIMAG, "d_imag", FFECOM_rttypeDOUBLE_, "&e", FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtABORT, "G77_abort_0", FFECOM_rttypeVOID_, 0, TRUE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtABS, "r_abs", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtACCESS, "G77_access_0", FFECOM_rttypeINTEGER_, "&a&a", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtACOS, "r_acos", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtAIMAG, "r_imag", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtAINT, "r_int", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtALARM, "G77_alarm_0", FFECOM_rttypeINTEGER_, "&i0", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtALOG, "r_log", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtALOG10, "r_lg10", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtAMOD, "r_mod", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtANINT, "r_nint", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtASIN, "r_asin", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtATAN, "r_atan", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtATAN2, "r_atn2", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtCABS, "c_abs", FFECOM_rttypeREAL_F2C_, "&c", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtCCOS, "c_cos", FFECOM_rttypeCOMPLEX_F2C_, "&c", FALSE, TRUE, FALSE)
+DEFGFRT (FFECOM_gfrtCEXP, "c_exp", FFECOM_rttypeCOMPLEX_F2C_, "&c", FALSE, TRUE, FALSE)
+DEFGFRT (FFECOM_gfrtCHDIR, "G77_chdir_0", FFECOM_rttypeINTEGER_, "&a", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtCLOG, "c_log", FFECOM_rttypeCOMPLEX_F2C_, "&c", FALSE, TRUE, FALSE)
+DEFGFRT (FFECOM_gfrtCHMOD, "G77_chmod_0", FFECOM_rttypeINTEGER_, "&a&a", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtCONJG, "r_cnjg", FFECOM_rttypeCOMPLEX_F2C_, "&c", FALSE, TRUE, FALSE)
+DEFGFRT (FFECOM_gfrtCOS, "r_cos", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtCOSH, "r_cosh", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtCSIN, "c_sin", FFECOM_rttypeCOMPLEX_F2C_, "&c", FALSE, TRUE, FALSE)
+DEFGFRT (FFECOM_gfrtCSQRT, "c_sqrt", FFECOM_rttypeCOMPLEX_F2C_, "&c", FALSE, TRUE, FALSE)
+DEFGFRT (FFECOM_gfrtCTIME, "G77_ctime_0", FFECOM_rttypeCHARACTER_, "&j", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtDABS, "d_abs", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtDACOS, "d_acos", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtDASIN, "d_asin", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtDATAN, "d_atan", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtDATAN2, "d_atn2", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtDATE, "G77_date_y2kbug_0", FFECOM_rttypeVOID_, "&a", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtDATE_AND_TIME, "G77_date_and_time_0", FFECOM_rttypeVOID_, "&a&a&a&i", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtL_BESJ0, "j0", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE, TRUE)
+DEFGFRT (FFECOM_gfrtL_BESJ1, "j1", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE, TRUE)
+DEFGFRT (FFECOM_gfrtL_BESJN, "jn", FFECOM_rttypeDOUBLE_, "id", FALSE, FALSE, TRUE)
+DEFGFRT (FFECOM_gfrtL_BESY0, "y0", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE, TRUE)
+DEFGFRT (FFECOM_gfrtL_BESY1, "y1", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE, TRUE)
+DEFGFRT (FFECOM_gfrtL_BESYN, "yn", FFECOM_rttypeDOUBLE_, "id", FALSE, FALSE, TRUE)
+DEFGFRT (FFECOM_gfrtDCOS, "d_cos", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtDCOSH, "d_cosh", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtDDIM, "d_dim", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtDERF, "G77_derf_0", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtDERFC, "G77_derfc_0", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtDEXP, "d_exp", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtDIM, "r_dim", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtDINT, "d_int", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtDLOG, "d_log", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtDLOG10, "d_lg10", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtDMOD, "d_mod", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtDNINT, "d_nint", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtDPROD, "d_prod", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtDSIGN, "d_sign", FFECOM_rttypeDOUBLE_, "&d&d", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtDSIN, "d_sin", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtDSINH, "d_sinh", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtDSQRT, "d_sqrt", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtDTAN, "d_tan", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtDTANH, "d_tanh", FFECOM_rttypeDOUBLE_, "&d", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtDTIME, "G77_dtime_0", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtERF, "G77_erf_0", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtERFC, "G77_erfc_0", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtETIME, "G77_etime_0", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtEXIT, "G77_exit_0", FFECOM_rttypeVOID_, "&i", TRUE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtEXP, "r_exp", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtFDATE, "G77_fdate_0", FFECOM_rttypeCHARACTER_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtFGET, "G77_fget_0", FFECOM_rttypeINTEGER_, "&a", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtFGETC, "G77_fgetc_0", FFECOM_rttypeINTEGER_, "&i&a", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtFLUSH, "G77_flush_0", FFECOM_rttypeVOID_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtFLUSH1, "G77_flush1_0", FFECOM_rttypeVOID_, "&i", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtFNUM, "G77_fnum_0", FFECOM_rttypeINTEGER_, "&i", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtFPUT, "G77_fput_0", FFECOM_rttypeINTEGER_, "&a", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtFPUTC, "G77_fputc_0", FFECOM_rttypeINTEGER_, "&i&a", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtFSTAT, "G77_fstat_0", FFECOM_rttypeINTEGER_, "&i&i", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtFTELL, "G77_ftell_0", FFECOM_rttypeINTEGER_, "&i", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtFSEEK, "G77_fseek_0", FFECOM_rttypeINTEGER_, "&i&i&i", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtGERROR, "G77_gerror_0", FFECOM_rttypeVOID_, "&a", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtGETARG, "G77_getarg_0", FFECOM_rttypeVOID_, "&i&a", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtGETCWD, "G77_getcwd_0", FFECOM_rttypeINTEGER_, "&a", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtGETGID, "G77_getgid_0", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtGETLOG, "G77_getlog_0", FFECOM_rttypeVOID_, "&a", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtGETPID, "G77_getpid_0", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtGETUID, "G77_getuid_0", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtGETENV, "G77_getenv_0", FFECOM_rttypeVOID_, "&a&a", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtGMTIME, "G77_gmtime_0", FFECOM_rttypeVOID_, "&i&i", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtHOSTNM, "G77_hostnm_0", FFECOM_rttypeINTEGER_, "&a", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtIABS, "i_abs", FFECOM_rttypeINTEGER_, "&i", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtIARGC, "G77_iargc_0", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtIDATE, "G77_idate_0", FFECOM_rttypeVOID_, "&i", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtIDIM, "i_dim", FFECOM_rttypeINTEGER_, "&i", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtIDNINT, "i_dnnt", FFECOM_rttypeINTEGER_, "&i", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtIERRNO, "G77_ierrno_0", FFECOM_rttypeINTEGER_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtINDEX, "i_indx", FFECOM_rttypeINTEGER_, "&a&a", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtIRAND, "G77_irand_0", FFECOM_rttypeINTEGER_, "&i", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtISIGN, "i_sign", FFECOM_rttypeINTEGER_, "&i&i", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtISATTY, "G77_isatty_0", FFECOM_rttypeINTEGER_, "&i", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtITIME, "G77_itime_0", FFECOM_rttypeVOID_, "&i", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtKILL, "G77_kill_0", FFECOM_rttypeINTEGER_, "&i&i", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtLEN, "i_len", FFECOM_rttypeINTEGER_, "&a", FALSE, FALSE, TRUE)
+DEFGFRT (FFECOM_gfrtLGE, "l_ge", FFECOM_rttypeLOGICAL_, "&a", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtLGT, "l_gt", FFECOM_rttypeLOGICAL_, "&a", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtLINK, "G77_link_0", FFECOM_rttypeINTEGER_, "&a&a", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtLLE, "l_le", FFECOM_rttypeLOGICAL_, "&a", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtLLT, "l_lt", FFECOM_rttypeLOGICAL_, "&a", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtLNBLNK, "G77_lnblnk_0", FFECOM_rttypeINTEGER_, "&a", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtLSTAT, "G77_lstat_0", FFECOM_rttypeINTEGER_, "&a&i", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtLTIME, "G77_ltime_0", FFECOM_rttypeVOID_, "&i&i", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtMCLOCK, "G77_mclock_0", FFECOM_rttypeLONGINT_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtMOD, "i_mod", FFECOM_rttypeINTEGER_, "&i", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtNINT, "i_nint", FFECOM_rttypeINTEGER_, "&i", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtPERROR, "G77_perror_0", FFECOM_rttypeVOID_, "&a", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtRAND, "G77_rand_0", FFECOM_rttypeREAL_F2C_, "&i", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtRENAME, "G77_rename_0", FFECOM_rttypeINTEGER_, "&a&a", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtSECNDS, "G77_secnds_0", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtSECOND, "G77_second_0", FFECOM_rttypeREAL_F2C_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtSIGN, "r_sign", FFECOM_rttypeREAL_F2C_, "&f&f", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtL_SIGNAL, "G77_signal_0", FFECOM_rttypeVOIDSTAR_, "&i0", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtSIN, "r_sin", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtSINH, "r_sinh", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtSLEEP, "G77_sleep_0", FFECOM_rttypeVOID_, "&i", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtSQRT, "r_sqrt", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtSRAND, "G77_srand_0", FFECOM_rttypeVOID_, "&i", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtSTAT, "G77_stat_0", FFECOM_rttypeINTEGER_, "&a&i", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtSYMLNK, "G77_symlnk_0", FFECOM_rttypeINTEGER_, "&a&a", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtSYSTEM, "G77_system_0", FFECOM_rttypeINTEGER_, "&a", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtSYSTEM_CLOCK, "G77_system_clock_0", FFECOM_rttypeVOID_, "&i&i&i", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtTAN, "r_tan", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtTANH, "r_tanh", FFECOM_rttypeREAL_F2C_, "&f", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtTIME, "G77_time_0", FFECOM_rttypeLONGINT_, 0, FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtTTYNAM, "G77_ttynam_0", FFECOM_rttypeCHARACTER_, "&i", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtUNLINK, "G77_unlink_0", FFECOM_rttypeINTEGER_, "&a", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtUMASK, "G77_umask_0", FFECOM_rttypeINTEGER_, "&i", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtVXTIDATE, "G77_vxtidate_y2kbug_0", FFECOM_rttypeVOID_, "&i&i&i", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtVXTTIME, "G77_vxttime_0", FFECOM_rttypeVOID_, "&a", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtCDABS, "z_abs", FFECOM_rttypeDOUBLE_, "&e", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtCDCOS, "z_cos", FFECOM_rttypeDBLCMPLX_F2C_, "&e", FALSE, TRUE, FALSE)
+DEFGFRT (FFECOM_gfrtCDEXP, "z_exp", FFECOM_rttypeDBLCMPLX_F2C_, "&e", FALSE, TRUE, FALSE)
+DEFGFRT (FFECOM_gfrtCDLOG, "z_log", FFECOM_rttypeDBLCMPLX_F2C_, "&e", FALSE, TRUE, FALSE)
+DEFGFRT (FFECOM_gfrtDCONJG, "d_cnjg", FFECOM_rttypeDBLCMPLX_F2C_, "&e", FALSE, TRUE, FALSE)
+DEFGFRT (FFECOM_gfrtCDSIN, "z_sin", FFECOM_rttypeDBLCMPLX_F2C_, "&e", FALSE, TRUE, FALSE)
+DEFGFRT (FFECOM_gfrtCDSQRT, "z_sqrt", FFECOM_rttypeDBLCMPLX_F2C_, "&e", FALSE, TRUE, FALSE)
+DEFGFRT (FFECOM_gfrtDIMAG, "d_imag", FFECOM_rttypeDOUBLE_, "&e", FALSE, FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtL_ACOS, "acos", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtL_ASIN, "asin", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtL_ATAN, "atan", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtL_ATAN2, "atan2", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtL_COS, "__builtin_cos", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtL_COSH, "cosh", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtL_ERF, "erf", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtL_ERFC, "erfc", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtL_EXP, "exp", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtL_FLOOR, "floor", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtL_LOG, "log", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtL_SIN, "__builtin_sin", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtL_SINH, "sinh", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtL_SQRT, "__builtin_fsqrt", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtL_TAN, "tan", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtL_TANH, "tanh", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtL_ACOS, "acos", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE, TRUE)
+DEFGFRT (FFECOM_gfrtL_ASIN, "asin", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE, TRUE)
+DEFGFRT (FFECOM_gfrtL_ATAN, "atan", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE, TRUE)
+DEFGFRT (FFECOM_gfrtL_ATAN2, "atan2", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE, TRUE)
+DEFGFRT (FFECOM_gfrtL_COS, "__builtin_cos", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE, TRUE)
+DEFGFRT (FFECOM_gfrtL_COSH, "cosh", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE, TRUE)
+DEFGFRT (FFECOM_gfrtL_ERF, "erf", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE, TRUE)
+DEFGFRT (FFECOM_gfrtL_ERFC, "erfc", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE, TRUE)
+DEFGFRT (FFECOM_gfrtL_EXP, "exp", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE, TRUE)
+DEFGFRT (FFECOM_gfrtL_FLOOR, "floor", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE, TRUE)
+DEFGFRT (FFECOM_gfrtL_FMOD, "fmod", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE, TRUE)
+DEFGFRT (FFECOM_gfrtL_LOG, "log", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE, TRUE)
+DEFGFRT (FFECOM_gfrtL_LOG10, "log10", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE, TRUE)
+DEFGFRT (FFECOM_gfrtL_POW, "pow", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE, TRUE)
+DEFGFRT (FFECOM_gfrtL_SIN, "__builtin_sin", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE, TRUE)
+DEFGFRT (FFECOM_gfrtL_SINH, "sinh", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE, TRUE)
+DEFGFRT (FFECOM_gfrtL_SQRT, "__builtin_sqrt", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE, TRUE)
+DEFGFRT (FFECOM_gfrtL_TAN, "tan", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE, TRUE)
+DEFGFRT (FFECOM_gfrtL_TANH, "tanh", FFECOM_rttypeDOUBLE_, "d", FALSE, FALSE, TRUE)
-DEFGFRT (FFECOM_gfrtPOW_CI, "pow_ci", FFECOM_rttypeCOMPLEX_F2C_, "&c&i", FALSE, TRUE)
-DEFGFRT (FFECOM_gfrtPOW_DD, "pow_dd", FFECOM_rttypeDOUBLE_, "&d&d", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtPOW_DI, "pow_di", FFECOM_rttypeDOUBLE_, "&d&i", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtPOW_II, "pow_ii", FFECOM_rttypeINTEGER_, "&i", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtPOW_QQ, "pow_qq", FFECOM_rttypeLONGINT_, "&j&j", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtPOW_RI, "pow_ri", FFECOM_rttypeREAL_F2C_, "&f&i", FALSE, FALSE)
-DEFGFRT (FFECOM_gfrtPOW_ZI, "pow_zi", FFECOM_rttypeDBLCMPLX_F2C_, "&e&i", FALSE, TRUE)
-DEFGFRT (FFECOM_gfrtPOW_ZZ, "pow_zz", FFECOM_rttypeDBLCMPLX_F2C_, "&e&e", FALSE, TRUE)
-DEFGFRT (FFECOM_gfrtDIV_CC, "c_div", FFECOM_rttypeCOMPLEX_F2C_, "&c", FALSE, TRUE)
-DEFGFRT (FFECOM_gfrtDIV_ZZ, "z_div", FFECOM_rttypeDBLCMPLX_F2C_, "&e", FALSE, TRUE)
+DEFGFRT (FFECOM_gfrtPOW_CI, "pow_ci", FFECOM_rttypeCOMPLEX_F2C_, "&c&i", FALSE, TRUE, FALSE)
+DEFGFRT (FFECOM_gfrtPOW_DD, "pow_dd", FFECOM_rttypeDOUBLE_, "&d&d", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtPOW_DI, "pow_di", FFECOM_rttypeDOUBLE_, "&d&i", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtPOW_II, "pow_ii", FFECOM_rttypeINTEGER_, "&i", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtPOW_QQ, "pow_qq", FFECOM_rttypeLONGINT_, "&j&j", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtPOW_RI, "pow_ri", FFECOM_rttypeREAL_F2C_, "&f&i", FALSE, FALSE, FALSE)
+DEFGFRT (FFECOM_gfrtPOW_ZI, "pow_zi", FFECOM_rttypeDBLCMPLX_F2C_, "&e&i", FALSE, TRUE, FALSE)
+DEFGFRT (FFECOM_gfrtPOW_ZZ, "pow_zz", FFECOM_rttypeDBLCMPLX_F2C_, "&e&e", FALSE, TRUE, FALSE)
+DEFGFRT (FFECOM_gfrtDIV_CC, "c_div", FFECOM_rttypeCOMPLEX_F2C_, "&c", FALSE, TRUE, FALSE)
+DEFGFRT (FFECOM_gfrtDIV_ZZ, "z_div", FFECOM_rttypeDBLCMPLX_F2C_, "&e", FALSE, TRUE, FALSE)
diff --git a/contrib/gcc/f/com.c b/contrib/gcc/f/com.c
index c326fed..979d735 100644
--- a/contrib/gcc/f/com.c
+++ b/contrib/gcc/f/com.c
@@ -1,5 +1,6 @@
/* com.c -- Implementation File (module.c template V1.0)
- Copyright (C) 1995-1998 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001
+ Free Software Foundation, Inc.
Contributed by James Craig Burley.
This file is part of GNU Fortran.
@@ -53,8 +54,6 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
when it comes to building decls:
Internal Function (one we define, not just declare as extern):
- int yes;
- yes = suspend_momentary ();
if (is_nested) push_f_function_context ();
start_function (get_identifier ("function_name"), function_type,
is_nested, is_public);
@@ -65,13 +64,10 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
ffecom_end_compstmt ();
finish_function (is_nested);
if (is_nested) pop_f_function_context ();
- if (is_nested) resume_momentary (yes);
Everything Else:
- int yes;
tree d;
tree init;
- yes = suspend_momentary ();
// fill in external, public, static, &c for decl, and
// set DECL_INITIAL to error_mark_node if going to initialize
// set is_top_level TRUE only if not at top level and decl
@@ -79,86 +75,23 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
d = start_decl (decl, is_top_level);
init = ...; // if have initializer
finish_decl (d, init, is_top_level);
- resume_momentary (yes);
*/
/* Include files. */
#include "proj.h"
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
-#include "flags.j"
-#include "rtl.j"
-#include "toplev.j"
-#include "tree.j"
-#include "output.j" /* Must follow tree.j so TREE_CODE is defined! */
-#include "convert.j"
-#endif /* FFECOM_targetCURRENT == FFECOM_targetGCC */
-
-#define FFECOM_GCC_INCLUDE 1 /* Enable -I. */
-
-/* BEGIN stuff from gcc/cccp.c. */
-
-/* The following symbols should be autoconfigured:
- HAVE_FCNTL_H
- HAVE_STDLIB_H
- HAVE_SYS_TIME_H
- HAVE_UNISTD_H
- STDC_HEADERS
- TIME_WITH_SYS_TIME
- In the mean time, we'll get by with approximations based
- on existing GCC configuration symbols. */
-
-#ifdef POSIX
-# ifndef HAVE_STDLIB_H
-# define HAVE_STDLIB_H 1
-# endif
-# ifndef HAVE_UNISTD_H
-# define HAVE_UNISTD_H 1
-# endif
-# ifndef STDC_HEADERS
-# define STDC_HEADERS 1
-# endif
-#endif /* defined (POSIX) */
-
-#if defined (POSIX) || (defined (USG) && !defined (VMS))
-# ifndef HAVE_FCNTL_H
-# define HAVE_FCNTL_H 1
-# endif
-#endif
-
-#ifndef RLIMIT_STACK
-# include <time.h>
-#else
-# if TIME_WITH_SYS_TIME
-# include <sys/time.h>
-# include <time.h>
-# else
-# if HAVE_SYS_TIME_H
-# include <sys/time.h>
-# else
-# include <time.h>
-# endif
-# endif
-# include <sys/resource.h>
-#endif
-
-#if HAVE_FCNTL_H
-# include <fcntl.h>
-#endif
-
-/* This defines "errno" properly for VMS, and gives us EACCES. */
-#include <errno.h>
-
-#if HAVE_STDLIB_H
-# include <stdlib.h>
-#else
-char *getenv ();
-#endif
-
-#if HAVE_UNISTD_H
-# include <unistd.h>
-#endif
+#include "flags.h"
+#include "rtl.h"
+#include "toplev.h"
+#include "tree.h"
+#include "output.h" /* Must follow tree.h so TREE_CODE is defined! */
+#include "convert.h"
+#include "ggc.h"
+#include "diagnostic.h"
+#include "intl.h"
+#include "langhooks.h"
+#include "langhooks-def.h"
/* VMS-specific definitions */
#ifdef VMS
@@ -183,17 +116,8 @@ static void hack_vms_include_specification ();
typedef struct { unsigned :16, :16, :16; } vms_ino_t;
#define ino_t vms_ino_t
#define INCLUDE_LEN_FUDGE 10 /* leave room for VMS syntax conversion */
-#ifdef __GNUC__
-#define BSTRING /* VMS/GCC supplies the bstring routines */
-#endif /* __GNUC__ */
#endif /* VMS */
-#ifndef O_RDONLY
-#define O_RDONLY 0
-#endif
-
-/* END stuff from gcc/cccp.c. */
-
#define FFECOM_DETERMINE_TYPES 1 /* for com.h */
#include "com.h"
#include "bad.h"
@@ -213,27 +137,6 @@ typedef struct { unsigned :16, :16, :16; } vms_ino_t;
/* Externals defined here. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
-
-/* tree.h declares a bunch of stuff that it expects the front end to
- define. Here are the definitions, which in the C front end are
- found in the file c-decl.c. */
-
-tree integer_zero_node;
-tree integer_one_node;
-tree null_pointer_node;
-tree error_mark_node;
-tree void_type_node;
-tree integer_type_node;
-tree unsigned_type_node;
-tree char_type_node;
-tree current_function_decl;
-
-/* ~~gcc/tree.h *should* declare this, because toplev.c and dwarfout.c
- reference it. */
-
-char *language_string = "GNU F77";
-
/* Stream for reading from the input file. */
FILE *finput;
@@ -244,38 +147,14 @@ FILE *finput;
"static") are those that ste.c and such might use (directly
or by using com macros that reference them in their definitions). */
-static tree short_integer_type_node;
-tree long_integer_type_node;
-static tree long_long_integer_type_node;
-
-static tree short_unsigned_type_node;
-static tree long_unsigned_type_node;
-static tree long_long_unsigned_type_node;
-
-static tree unsigned_char_type_node;
-static tree signed_char_type_node;
-
-static tree float_type_node;
-static tree double_type_node;
-static tree complex_float_type_node;
-tree complex_double_type_node;
-static tree long_double_type_node;
-static tree complex_integer_type_node;
-static tree complex_long_double_type_node;
-
tree string_type_node;
-static tree double_ftype_double;
-static tree float_ftype_float;
-static tree ldouble_ftype_ldouble;
-
/* The rest of these are inventions for g77, though there might be
similar things in the C front end. As they are found, these
inventions should be renamed to be canonical. Note that only
the ones currently required to be global are so. */
static tree ffecom_tree_fun_type_void;
-static tree ffecom_tree_ptr_to_fun_type_void;
tree ffecom_integer_type_node; /* Abbrev for _tree_type[blah][blah]. */
tree ffecom_integer_zero_node; /* Like *_*_* with g77's integer type. */
@@ -325,7 +204,6 @@ tree ffecom_f2c_ftnlen_two_node;
tree ffecom_f2c_ptr_to_ftnlen_type_node;
tree ffecom_f2c_ftnint_type_node;
tree ffecom_f2c_ptr_to_ftnint_type_node;
-#endif /* FFECOM_targetCURRENT == FFECOM_targetGCC */
/* Simple definitions and enumerations. */
@@ -365,16 +243,13 @@ typedef enum
/* Internal typedefs. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
typedef struct _ffecom_concat_list_ ffecomConcatList_;
-#endif /* FFECOM_targetCURRENT == FFECOM_targetGCC */
/* Private include files. */
/* Internal structure definitions. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
struct _ffecom_concat_list_
{
ffebld *exprs;
@@ -383,11 +258,10 @@ struct _ffecom_concat_list_
ffetargetCharacterSize minlen;
ffetargetCharacterSize maxlen;
};
-#endif /* FFECOM_targetCURRENT == FFECOM_targetGCC */
/* Static functions (internal). */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
+static void ffecom_init_decl_processing PARAMS ((void));
static tree ffecom_arglist_expr_ (const char *argstring, ffebld args);
static tree ffecom_widest_expr_type_ (ffebld list);
static bool ffecom_overlap_ (tree dest_decl, tree dest_offset,
@@ -407,7 +281,7 @@ static tree ffecom_call_binop_ (tree fn, ffeinfoKindtype kt,
ffebld left, ffebld right,
tree dest_tree, ffebld dest,
bool *dest_used, tree callee_commons,
- bool scalar_args, tree hook);
+ bool scalar_args, bool ref, tree hook);
static void ffecom_char_args_x_ (tree *xitem, tree *length,
ffebld expr, bool with_null);
static tree ffecom_check_size_overflow_ (ffesymbol s, tree type, bool dummy);
@@ -452,9 +326,7 @@ static void ffecom_let_char_ (tree dest_tree,
ffebld source);
static void ffecom_make_gfrt_ (ffecomGfrt ix);
static void ffecom_member_phase1_ (ffestorag mst, ffestorag st);
-#ifdef SOMEONE_GETS_DEBUG_SUPPORT_WORKING
static void ffecom_member_phase2_ (ffestorag mst, ffestorag st);
-#endif
static void ffecom_prepare_let_char_ (ffetargetCharacterSize dest_size,
ffebld source);
static void ffecom_push_dummy_decls_ (ffebld dumlist,
@@ -476,31 +348,23 @@ static tree ffecom_type_localvar_ (ffesymbol s,
ffeinfoBasictype bt,
ffeinfoKindtype kt);
static tree ffecom_type_namelist_ (void);
-#if 0
-static tree ffecom_type_permanent_copy_ (tree t);
-#endif
static tree ffecom_type_vardesc_ (void);
static tree ffecom_vardesc_ (ffebld expr);
static tree ffecom_vardesc_array_ (ffesymbol s);
static tree ffecom_vardesc_dims_ (ffesymbol s);
static tree ffecom_convert_narrow_ (tree type, tree expr);
static tree ffecom_convert_widen_ (tree type, tree expr);
-#endif /* FFECOM_targetCURRENT == FFECOM_targetGCC */
/* These are static functions that parallel those found in the C front
end and thus have the same names. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree bison_rule_compstmt_ (void);
static void bison_rule_pushlevel_ (void);
-static tree builtin_function (const char *name, tree type,
- enum built_in_function function_code,
- const char *library_name);
static void delete_block (tree block);
static int duplicate_decls (tree newdecl, tree olddecl);
static void finish_decl (tree decl, tree init, bool is_top_level);
static void finish_function (int nested);
-static char *lang_printable_name (tree decl, int v);
+static const char *lang_printable_name (tree decl, int v);
static tree lookup_name_current_level (tree name);
static struct binding_level *make_binding_level (void);
static void pop_f_function_context (void);
@@ -512,15 +376,11 @@ static tree storedecls (tree decls);
static void store_parm_decls (int is_main_program);
static tree start_decl (tree decl, bool is_top_level);
static void start_function (tree name, tree type, int nested, int public);
-#endif /* FFECOM_targetCURRENT == FFECOM_targetGCC */
-#if FFECOM_GCC_INCLUDE
-static void ffecom_file_ (char *name);
-static void ffecom_initialize_char_syntax_ (void);
+static void ffecom_file_ (const char *name);
static void ffecom_close_include_ (FILE *f);
static int ffecom_decode_include_option_ (char *spec);
static FILE *ffecom_open_include_ (char *name, ffewhereLine l,
ffewhereColumn c);
-#endif /* FFECOM_GCC_INCLUDE */
/* Static objects accessed by functions in this module. */
@@ -528,7 +388,6 @@ static ffesymbol ffecom_primary_entry_ = NULL;
static ffesymbol ffecom_nested_entry_ = NULL;
static ffeinfoKind ffecom_primary_entry_kind_;
static bool ffecom_primary_entry_is_proc_;
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree ffecom_outer_function_decl_;
static tree ffecom_previous_function_decl_;
static tree ffecom_which_entrypoint_decl_;
@@ -562,66 +421,74 @@ static int ffecom_typesize_integer1_;
static tree ffecom_gfrt_[FFECOM_gfrt]
=
{
-#define DEFGFRT(CODE,NAME,TYPE,ARGS,VOLATILE,COMPLEX) NULL_TREE,
+#define DEFGFRT(CODE,NAME,TYPE,ARGS,VOLATILE,COMPLEX,CONST) NULL_TREE,
#include "com-rt.def"
#undef DEFGFRT
};
/* Holds the external names of the functions. */
-static const char *ffecom_gfrt_name_[FFECOM_gfrt]
+static const char *const ffecom_gfrt_name_[FFECOM_gfrt]
=
{
-#define DEFGFRT(CODE,NAME,TYPE,ARGS,VOLATILE,COMPLEX) NAME,
+#define DEFGFRT(CODE,NAME,TYPE,ARGS,VOLATILE,COMPLEX,CONST) NAME,
#include "com-rt.def"
#undef DEFGFRT
};
/* Whether the function returns. */
-static bool ffecom_gfrt_volatile_[FFECOM_gfrt]
+static const bool ffecom_gfrt_volatile_[FFECOM_gfrt]
=
{
-#define DEFGFRT(CODE,NAME,TYPE,ARGS,VOLATILE,COMPLEX) VOLATILE,
+#define DEFGFRT(CODE,NAME,TYPE,ARGS,VOLATILE,COMPLEX,CONST) VOLATILE,
#include "com-rt.def"
#undef DEFGFRT
};
/* Whether the function returns type complex. */
-static bool ffecom_gfrt_complex_[FFECOM_gfrt]
+static const bool ffecom_gfrt_complex_[FFECOM_gfrt]
=
{
-#define DEFGFRT(CODE,NAME,TYPE,ARGS,VOLATILE,COMPLEX) COMPLEX,
+#define DEFGFRT(CODE,NAME,TYPE,ARGS,VOLATILE,COMPLEX,CONST) COMPLEX,
+#include "com-rt.def"
+#undef DEFGFRT
+};
+
+/* Whether the function is const
+ (i.e., has no side effects and only depends on its arguments). */
+
+static const bool ffecom_gfrt_const_[FFECOM_gfrt]
+=
+{
+#define DEFGFRT(CODE,NAME,TYPE,ARGS,VOLATILE,COMPLEX,CONST) CONST,
#include "com-rt.def"
#undef DEFGFRT
};
/* Type code for the function return value. */
-static ffecomRttype_ ffecom_gfrt_type_[FFECOM_gfrt]
+static const ffecomRttype_ ffecom_gfrt_type_[FFECOM_gfrt]
=
{
-#define DEFGFRT(CODE,NAME,TYPE,ARGS,VOLATILE,COMPLEX) TYPE,
+#define DEFGFRT(CODE,NAME,TYPE,ARGS,VOLATILE,COMPLEX,CONST) TYPE,
#include "com-rt.def"
#undef DEFGFRT
};
/* String of codes for the function's arguments. */
-static const char *ffecom_gfrt_argstring_[FFECOM_gfrt]
+static const char *const ffecom_gfrt_argstring_[FFECOM_gfrt]
=
{
-#define DEFGFRT(CODE,NAME,TYPE,ARGS,VOLATILE,COMPLEX) ARGS,
+#define DEFGFRT(CODE,NAME,TYPE,ARGS,VOLATILE,COMPLEX,CONST) ARGS,
#include "com-rt.def"
#undef DEFGFRT
};
-#endif /* FFECOM_targetCURRENT == FFECOM_targetGCC */
/* Internal macros. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
-
/* We let tm.h override the types used here, to handle trivial differences
such as the choice of unsigned int or long unsigned int for size_t.
When machines start needing nontrivial differences in the size type,
@@ -697,7 +564,7 @@ static struct binding_level *global_binding_level;
/* Binding level structures are initialized by copying this one. */
-static struct binding_level clear_binding_level
+static const struct binding_level clear_binding_level
=
{NULL, NULL, NULL, NULL_BINDING_LEVEL, 0};
@@ -743,8 +610,6 @@ static tree named_labels;
/* A list of LABEL_DECLs from outer contexts that are currently shadowed. */
static tree shadowed_labels;
-
-#endif /* FFECOM_targetCURRENT == FFECOM_targetGCC */
/* Return the subscript expression, modified to do range-checking.
@@ -756,7 +621,7 @@ static tree shadowed_labels;
static tree
ffecom_subscript_check_ (tree array, tree element, int dim, int total_dims,
- char *array_name)
+ const char *array_name)
{
tree low = TYPE_MIN_VALUE (TYPE_DOMAIN (array));
tree high = TYPE_MAX_VALUE (TYPE_DOMAIN (array));
@@ -781,16 +646,46 @@ ffecom_subscript_check_ (tree array, tree element, int dim, int total_dims,
}
element = ffecom_save_tree (element);
- cond = ffecom_2 (LE_EXPR, integer_type_node,
- low,
- element);
- if (high)
+ if (total_dims == 0)
+ {
+ /* Special handling for substring range checks. Fortran allows the
+ end subscript < begin subscript, which means that expressions like
+ string(1:0) are valid (and yield a null string). In view of this,
+ enforce two simpler conditions:
+ 1) element<=high for end-substring;
+ 2) element>=low for start-substring.
+ Run-time character movement will enforce remaining conditions.
+
+ More complicated checks would be better, but present structure only
+ provides one index element at a time, so it is not possible to
+ enforce a check of both i and j in string(i:j). If it were, the
+ complete set of rules would read,
+ if ( ((j<i) && ((low<=i<=high) || (low<=j<=high))) ||
+ ((low<=i<=high) && (low<=j<=high)) )
+ ok ;
+ else
+ range error ;
+ */
+ if (dim)
+ cond = ffecom_2 (LE_EXPR, integer_type_node, element, high);
+ else
+ cond = ffecom_2 (LE_EXPR, integer_type_node, low, element);
+ }
+ else
{
- cond = ffecom_2 (TRUTH_ANDIF_EXPR, integer_type_node,
- cond,
- ffecom_2 (LE_EXPR, integer_type_node,
- element,
- high));
+ /* Array reference substring range checking. */
+
+ cond = ffecom_2 (LE_EXPR, integer_type_node,
+ low,
+ element);
+ if (high)
+ {
+ cond = ffecom_2 (TRUTH_ANDIF_EXPR, integer_type_node,
+ cond,
+ ffecom_2 (LE_EXPR, integer_type_node,
+ element,
+ high));
+ }
}
{
@@ -805,32 +700,29 @@ ffecom_subscript_check_ (tree array, tree element, int dim, int total_dims,
switch (total_dims)
{
case 0:
- var = xmalloc (strlen (array_name) + 20);
- sprintf (&var[0], "%s[%s-substring]",
- array_name,
- dim ? "end" : "start");
+ var = concat (array_name, "[", (dim ? "end" : "start"),
+ "-substring]", NULL);
len = strlen (var) + 1;
+ arg1 = build_string (len, var);
+ free (var);
break;
case 1:
len = strlen (array_name) + 1;
- var = array_name;
+ arg1 = build_string (len, array_name);
break;
default:
var = xmalloc (strlen (array_name) + 40);
- sprintf (&var[0], "%s[subscript-%d-of-%d]",
+ sprintf (var, "%s[subscript-%d-of-%d]",
array_name,
dim + 1, total_dims);
len = strlen (var) + 1;
+ arg1 = build_string (len, var);
+ free (var);
break;
}
- arg1 = build_string (len, var);
-
- if (total_dims != 1)
- free (var);
-
TREE_TYPE (arg1)
= build_type_variant (build_array_type (char_type_node,
build_range_type
@@ -852,13 +744,10 @@ ffecom_subscript_check_ (tree array, tree element, int dim, int total_dims,
convert (TREE_TYPE (element),
integer_one_node)));
- proc = xmalloc ((len = strlen (input_filename)
- + IDENTIFIER_LENGTH (DECL_NAME (current_function_decl))
- + 2));
-
- sprintf (&proc[0], "%s/%s",
- input_filename,
- IDENTIFIER_POINTER (DECL_NAME (current_function_decl)));
+ proc = concat (input_filename, "/",
+ IDENTIFIER_POINTER (DECL_NAME (current_function_decl)),
+ NULL);
+ len = strlen (proc) + 1;
arg3 = build_string (len, proc);
free (proc);
@@ -921,7 +810,7 @@ ffecom_arrayref_ (tree item, ffebld expr, int want_ptr)
tree element;
tree tree_type;
tree tree_type_x;
- char *array_name;
+ const char *array_name;
ffetype type;
ffebld list;
@@ -982,7 +871,7 @@ ffecom_arrayref_ (tree item, ffebld expr, int want_ptr)
{
min = TYPE_MIN_VALUE (TYPE_DOMAIN (array));
element = ffecom_expr_ (dims[i], NULL, NULL, NULL, FALSE, TRUE);
- if (ffe_is_subscript_check ())
+ if (flag_bounds_check)
element = ffecom_subscript_check_ (array, element, i, total_dims,
array_name);
if (element == error_mark_node)
@@ -1007,10 +896,10 @@ ffecom_arrayref_ (tree item, ffebld expr, int want_ptr)
item,
size_binop (MULT_EXPR,
size_in_bytes (TREE_TYPE (array)),
- fold (build (MINUS_EXPR,
- tree_type_x,
- element,
- min))));
+ convert (sizetype,
+ fold (build (MINUS_EXPR,
+ tree_type_x,
+ element, min)))));
}
if (! want_ptr)
{
@@ -1028,7 +917,7 @@ ffecom_arrayref_ (tree item, ffebld expr, int want_ptr)
array = TYPE_MAIN_VARIANT (TREE_TYPE (item));
element = ffecom_expr_ (dims[i], NULL, NULL, NULL, FALSE, TRUE);
- if (ffe_is_subscript_check ())
+ if (flag_bounds_check)
element = ffecom_subscript_check_ (array, element, i, total_dims,
array_name);
if (element == error_mark_node)
@@ -1065,7 +954,6 @@ ffecom_arrayref_ (tree item, ffebld expr, int want_ptr)
and such might well be stable too, but for things like calculations,
we do need to calculate a snapshot of a value before picking at it. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree
ffecom_stabilize_aggregate_ (tree ref)
{
@@ -1121,11 +1009,7 @@ ffecom_stabilize_aggregate_ (tree ref)
break;
case RTL_EXPR:
- result = build1 (INDIRECT_REF, TREE_TYPE (ref),
- save_expr (build1 (ADDR_EXPR,
- build_pointer_type (TREE_TYPE (ref)),
- ref)));
- break;
+ abort ();
default:
@@ -1139,17 +1023,14 @@ ffecom_stabilize_aggregate_ (tree ref)
TREE_READONLY (result) = TREE_READONLY (ref);
TREE_SIDE_EFFECTS (result) = TREE_SIDE_EFFECTS (ref);
TREE_THIS_VOLATILE (result) = TREE_THIS_VOLATILE (ref);
- TREE_RAISES (result) = TREE_RAISES (ref);
return result;
}
-#endif
/* A rip-off of gcc's convert.c convert_to_complex function,
reworked to handle complex implemented as C structures
(RECORD_TYPE with two fields, real and imaginary `r' and `i'). */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree
ffecom_convert_to_complex_ (tree type, tree expr)
{
@@ -1159,7 +1040,7 @@ ffecom_convert_to_complex_ (tree type, tree expr)
assert (TREE_CODE (type) == RECORD_TYPE);
subtype = TREE_TYPE (TYPE_FIELDS (type));
-
+
if (form == REAL_TYPE || form == INTEGER_TYPE || form == ENUMERAL_TYPE)
{
expr = convert (subtype, expr);
@@ -1192,16 +1073,14 @@ ffecom_convert_to_complex_ (tree type, tree expr)
error ("pointer value used where a complex was expected");
else
error ("aggregate value used where a complex was expected");
-
+
return ffecom_2 (COMPLEX_EXPR, type,
convert (subtype, integer_zero_node),
convert (subtype, integer_zero_node));
}
-#endif
/* Like gcc's convert(), but crashes if widening might happen. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree
ffecom_convert_narrow_ (type, expr)
tree type, expr;
@@ -1270,11 +1149,9 @@ ffecom_convert_narrow_ (type, expr)
assert ("conversion to non-scalar type requested" == NULL);
return error_mark_node;
}
-#endif
/* Like gcc's convert(), but crashes if narrowing might happen. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree
ffecom_convert_widen_ (type, expr)
tree type, expr;
@@ -1343,13 +1220,11 @@ ffecom_convert_widen_ (type, expr)
assert ("conversion to non-scalar type requested" == NULL);
return error_mark_node;
}
-#endif
/* Handles making a COMPLEX type, either the standard
(but buggy?) gbe way, or the safer (but less elegant?)
f2c way. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree
ffecom_make_complex_type_ (tree subtype)
{
@@ -1374,12 +1249,10 @@ ffecom_make_complex_type_ (tree subtype)
return type;
}
-#endif
/* Chooses either the gbe or the f2c way to build a
complex constant. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree
ffecom_build_complex_constant_ (tree type, tree realpart, tree imagpart)
{
@@ -1398,9 +1271,7 @@ ffecom_build_complex_constant_ (tree type, tree realpart, tree imagpart)
return bothparts;
}
-#endif
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree
ffecom_arglist_expr_ (const char *c, ffebld expr)
{
@@ -1413,7 +1284,7 @@ ffecom_arglist_expr_ (const char *c, ffebld expr)
tree item;
bool ptr = FALSE;
tree wanted = NULL_TREE;
- static char zed[] = "0";
+ static const char zed[] = "0";
if (c == NULL)
c = &zed[0];
@@ -1546,9 +1417,7 @@ ffecom_arglist_expr_ (const char *c, ffebld expr)
return list;
}
-#endif
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree
ffecom_widest_expr_type_ (ffebld list)
{
@@ -1584,7 +1453,6 @@ ffecom_widest_expr_type_ (ffebld list)
assert (t != NULL_TREE);
return t;
}
-#endif
/* Check whether a partial overlap between two expressions is possible.
@@ -1596,7 +1464,7 @@ ffecom_widest_expr_type_ (ffebld list)
aliasing of arguments, it isn't a concern. */
static bool
-ffecom_possible_partial_overlap_ (ffebld expr1, ffebld expr2)
+ffecom_possible_partial_overlap_ (ffebld expr1, ffebld expr2 ATTRIBUTE_UNUSED)
{
ffesymbol sym;
ffestorag st;
@@ -1636,7 +1504,6 @@ ffecom_possible_partial_overlap_ (ffebld expr1, ffebld expr2)
change before it is finally modified. dest_* are the canonized
destination itself. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static bool
ffecom_overlap_ (tree dest_decl, tree dest_offset, tree dest_size,
tree source_tree, ffebld source UNUSED,
@@ -1679,7 +1546,6 @@ ffecom_overlap_ (tree dest_decl, tree dest_offset, tree dest_size,
case FIX_FLOOR_EXPR:
case FIX_ROUND_EXPR:
case FLOAT_EXPR:
- case EXPON_EXPR:
case NEGATE_EXPR:
case MIN_EXPR:
case MAX_EXPR:
@@ -1757,7 +1623,7 @@ ffecom_overlap_ (tree dest_decl, tree dest_offset, tree dest_size,
return TRUE;
source_decl = source_tree;
- source_offset = size_zero_node;
+ source_offset = bitsize_zero_node;
source_size = TYPE_SIZE (TREE_TYPE (TREE_TYPE (source_tree)));
break;
@@ -1817,12 +1683,10 @@ ffecom_overlap_ (tree dest_decl, tree dest_offset, tree dest_size,
return TRUE; /* Destination and source overlap. */
}
-#endif
/* Check whether dest might overlap any of a list of arguments or is
in a COMMON area the callee might know about (and thus modify). */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static bool
ffecom_args_overlapping_ (tree dest_tree, ffebld dest UNUSED,
tree args, tree callee_commons,
@@ -1858,13 +1722,11 @@ ffecom_args_overlapping_ (tree dest_tree, ffebld dest UNUSED,
return FALSE;
}
-#endif
/* Build a string for a variable name as used by NAMELIST. This means that
if we're using the f2c library, we build an uppercase string, since
f2c does this. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree
ffecom_build_f2c_string_ (int i, const char *s)
{
@@ -1884,7 +1746,7 @@ ffecom_build_f2c_string_ (int i, const char *s)
tmp = &space[0];
for (p = s, q = tmp; *p != '\0'; ++p, ++q)
- *q = ffesrc_toupper (*p);
+ *q = TOUPPER (*p);
*q = '\0';
t = build_string (i, tmp);
@@ -1896,13 +1758,11 @@ ffecom_build_f2c_string_ (int i, const char *s)
}
}
-#endif
/* Returns CALL_EXPR or equivalent with given type (pass NULL_TREE for
type to just get whatever the function returns), handling the
f2c value-returning convention, if required, by prepending
to the arglist a pointer to a temporary to receive the return value. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree
ffecom_call_ (tree fn, ffeinfoKindtype kt, bool is_f2c_complex,
tree type, tree args, tree dest_tree,
@@ -1966,25 +1826,34 @@ ffecom_call_ (tree fn, ffeinfoKindtype kt, bool is_f2c_complex,
return item;
}
-#endif
/* Given two arguments, transform them and make a call to the given
function via ffecom_call_. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree
ffecom_call_binop_ (tree fn, ffeinfoKindtype kt, bool is_f2c_complex,
tree type, ffebld left, ffebld right,
tree dest_tree, ffebld dest, bool *dest_used,
- tree callee_commons, bool scalar_args, tree hook)
+ tree callee_commons, bool scalar_args, bool ref, tree hook)
{
tree left_tree;
tree right_tree;
tree left_length;
tree right_length;
- left_tree = ffecom_arg_ptr_to_expr (left, &left_length);
- right_tree = ffecom_arg_ptr_to_expr (right, &right_length);
+ if (ref)
+ {
+ /* Pass arguments by reference. */
+ left_tree = ffecom_arg_ptr_to_expr (left, &left_length);
+ right_tree = ffecom_arg_ptr_to_expr (right, &right_length);
+ }
+ else
+ {
+ /* Pass arguments by value. */
+ left_tree = ffecom_arg_expr (left, &left_length);
+ right_tree = ffecom_arg_expr (right, &right_length);
+ }
+
left_tree = build_tree_list (NULL_TREE, left_tree);
right_tree = build_tree_list (NULL_TREE, right_tree);
@@ -2009,7 +1878,6 @@ ffecom_call_binop_ (tree fn, ffeinfoKindtype kt, bool is_f2c_complex,
dest_tree, dest, dest_used, callee_commons,
scalar_args, hook);
}
-#endif
/* Return ptr/length args for char subexpression
@@ -2021,7 +1889,6 @@ ffecom_call_binop_ (tree fn, ffeinfoKindtype kt, bool is_f2c_complex,
Note that if with_null is TRUE, and the expression is an opCONTER,
a null byte is appended to the string. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static void
ffecom_char_args_x_ (tree *xitem, tree *length, ffebld expr, bool with_null)
{
@@ -2117,7 +1984,7 @@ ffecom_char_args_x_ (tree *xitem, tree *length, ffebld expr, bool with_null)
ffebld thing = ffebld_right (expr);
tree start_tree;
tree end_tree;
- char *char_name;
+ const char *char_name;
ffebld left_symter;
tree array;
@@ -2156,7 +2023,7 @@ ffecom_char_args_x_ (tree *xitem, tree *length, ffebld expr, bool with_null)
else
{
end_tree = ffecom_expr (end);
- if (ffe_is_subscript_check ())
+ if (flag_bounds_check)
end_tree = ffecom_subscript_check_ (array, end_tree, 1, 0,
char_name);
end_tree = convert (ffecom_f2c_ftnlen_type_node,
@@ -2174,7 +2041,7 @@ ffecom_char_args_x_ (tree *xitem, tree *length, ffebld expr, bool with_null)
else
{
start_tree = ffecom_expr (start);
- if (ffe_is_subscript_check ())
+ if (flag_bounds_check)
start_tree = ffecom_subscript_check_ (array, start_tree, 0, 0,
char_name);
start_tree = convert (ffecom_f2c_ftnlen_type_node,
@@ -2207,7 +2074,7 @@ ffecom_char_args_x_ (tree *xitem, tree *length, ffebld expr, bool with_null)
else
{
end_tree = ffecom_expr (end);
- if (ffe_is_subscript_check ())
+ if (flag_bounds_check)
end_tree = ffecom_subscript_check_ (array, end_tree, 1, 0,
char_name);
end_tree = convert (ffecom_f2c_ftnlen_type_node,
@@ -2375,7 +2242,6 @@ ffecom_char_args_x_ (tree *xitem, tree *length, ffebld expr, bool with_null)
*xitem = item;
}
-#endif
/* Check the size of the type to be sure it doesn't overflow the
"portable" capacities of the compiler back end. `dummy' types
@@ -2384,7 +2250,6 @@ ffecom_char_args_x_ (tree *xitem, tree *length, ffebld expr, bool with_null)
must still enforce its size requirements, though, and the back
end takes care of this in stor-layout.c. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree
ffecom_check_size_overflow_ (ffesymbol s, tree type, bool dummy)
{
@@ -2398,8 +2263,7 @@ ffecom_check_size_overflow_ (ffesymbol s, tree type, bool dummy)
return type;
if ((tree_int_cst_sgn (TYPE_SIZE (type)) < 0)
- || (!dummy && (((TREE_INT_CST_HIGH (TYPE_SIZE (type)) != 0))
- || TREE_OVERFLOW (TYPE_SIZE (type)))))
+ || (!dummy && TREE_OVERFLOW (TYPE_SIZE (type))))
{
ffebad_start (FFEBAD_ARRAY_LARGE);
ffebad_string (ffesymbol_text (s));
@@ -2411,13 +2275,11 @@ ffecom_check_size_overflow_ (ffesymbol s, tree type, bool dummy)
return type;
}
-#endif
/* Builds a length argument (PARM_DECL). Also wraps type in an array type
where the dimension info is (1:size) where <size> is ffesymbol_size(s) if
known, length_arg if not known (FFETARGET_charactersizeNONE). */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree
ffecom_char_enhance_arg_ (tree *xtype, ffesymbol s)
{
@@ -2432,14 +2294,11 @@ ffecom_char_enhance_arg_ (tree *xtype, ffesymbol s)
{
if (ffesymbol_where (s) == FFEINFO_whereDUMMY)
tlen = ffecom_get_invented_identifier ("__g77_length_%s",
- ffesymbol_text (s), -1);
+ ffesymbol_text (s));
else
- tlen = ffecom_get_invented_identifier ("__g77_%s",
- "length", -1);
+ tlen = ffecom_get_invented_identifier ("__g77_%s", "length");
tlen = build_decl (PARM_DECL, tlen, ffecom_f2c_ftnlen_type_node);
-#if BUILT_FOR_270
DECL_ARTIFICIAL (tlen) = 1;
-#endif
}
if (sz == FFETARGET_charactersizeNONE)
@@ -2462,7 +2321,6 @@ ffecom_char_enhance_arg_ (tree *xtype, ffesymbol s)
return tlen;
}
-#endif
/* ffecom_concat_list_gather_ -- Gather list of concatenated string exprs
ffecomConcatList_ catlist;
@@ -2473,14 +2331,13 @@ ffecom_char_enhance_arg_ (tree *xtype, ffesymbol s)
Scans expr for character subexpressions, updates and returns catlist
accordingly. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static ffecomConcatList_
ffecom_concat_list_gather_ (ffecomConcatList_ catlist, ffebld expr,
ffetargetCharacterSize max)
{
ffetargetCharacterSize sz;
-recurse: /* :::::::::::::::::::: */
+ recurse:
if (expr == NULL)
return catlist;
@@ -2576,7 +2433,6 @@ recurse: /* :::::::::::::::::::: */
}
}
-#endif
/* ffecom_concat_list_kill_ -- Kill list of concatenated string exprs
ffecomConcatList_ catlist;
@@ -2584,7 +2440,6 @@ recurse: /* :::::::::::::::::::: */
Anything allocated within the list info is deallocated. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static void
ffecom_concat_list_kill_ (ffecomConcatList_ catlist)
{
@@ -2593,13 +2448,11 @@ ffecom_concat_list_kill_ (ffecomConcatList_ catlist)
catlist.max * sizeof (catlist.exprs[0]));
}
-#endif
/* Make list of concatenated string exprs.
Returns a flattened list of concatenated subexpressions given a
tree of such expressions. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static ffecomConcatList_
ffecom_concat_list_new_ (ffebld expr, ffetargetCharacterSize max)
{
@@ -2609,13 +2462,10 @@ ffecom_concat_list_new_ (ffebld expr, ffetargetCharacterSize max)
return ffecom_concat_list_gather_ (catlist, expr, max);
}
-#endif
-
/* Provide some kind of useful info on member of aggregate area,
since current g77/gcc technology does not provide debug info
on these members. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static void
ffecom_debug_kludge_ (tree aggr, const char *aggr_type, ffesymbol member,
tree member_type UNUSED, ffetargetOffset offset)
@@ -2694,7 +2544,6 @@ ffecom_debug_kludge_ (tree aggr, const char *aggr_type, ffesymbol member,
if (buff != &space[0])
malloc_kill_ks (malloc_pool_image (), buff, len + 1);
}
-#endif
/* ffecom_do_entry_ -- Do compilation of a particular entrypoint
@@ -2705,7 +2554,6 @@ ffecom_debug_kludge_ (tree aggr, const char *aggr_type, ffesymbol member,
Makes a public entry point that calls our private master fn (already
compiled). */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static void
ffecom_do_entry_ (ffesymbol fn, int entrynum)
{
@@ -2722,23 +2570,12 @@ ffecom_do_entry_ (ffesymbol fn, int entrynum)
bool cmplxfunc; /* Use f2c way of returning COMPLEX. */
bool multi; /* Master fn has multiple return types. */
bool altreturning = FALSE; /* This entry point has alternate returns. */
- int yes;
int old_lineno = lineno;
- char *old_input_filename = input_filename;
+ const char *old_input_filename = input_filename;
input_filename = ffesymbol_where_filename (fn);
lineno = ffesymbol_where_filelinenum (fn);
- /* c-parse.y indeed does call suspend_momentary and not only ignores the
- return value, but also never calls resume_momentary, when starting an
- outer function (see "fndef:", "setspecs:", and so on). So g77 does the
- same thing. It shouldn't be a problem since start_function calls
- temporary_allocation, but it might be necessary. If it causes a problem
- here, then maybe there's a bug lurking in gcc. NOTE: This identical
- comment appears twice in thist file. */
-
- suspend_momentary ();
-
ffecom_doing_entry_ = TRUE; /* Don't bother with array dimensions. */
switch (ffecom_primary_entry_kind_)
@@ -2859,8 +2696,6 @@ ffecom_do_entry_ (ffesymbol fn, int entrynum)
/* Build dummy arg list for this entry point. */
- yes = suspend_momentary ();
-
if (charfunc || cmplxfunc)
{ /* Prepend arg for where result goes. */
tree type;
@@ -2871,8 +2706,7 @@ ffecom_do_entry_ (ffesymbol fn, int entrynum)
else
type = ffecom_tree_type[FFEINFO_basictypeCOMPLEX][kt];
- result = ffecom_get_invented_identifier ("__g77_%s",
- "result", -1);
+ result = ffecom_get_invented_identifier ("__g77_%s", "result");
/* Make length arg _and_ enhance type info for CHAR arg itself. */
@@ -2898,8 +2732,6 @@ ffecom_do_entry_ (ffesymbol fn, int entrynum)
ffecom_push_dummy_decls_ (ffesymbol_dummyargs (fn), FALSE);
- resume_momentary (yes);
-
store_parm_decls (0);
ffecom_start_compstmt ();
@@ -2910,16 +2742,12 @@ ffecom_do_entry_ (ffesymbol fn, int entrynum)
if (multi)
{
- yes = suspend_momentary ();
-
multi_retval = ffecom_get_invented_identifier ("__g77_%s",
- "multi_retval", -1);
+ "multi_retval");
multi_retval = build_decl (VAR_DECL, multi_retval,
ffecom_multi_type_node_);
multi_retval = start_decl (multi_retval, FALSE);
finish_decl (multi_retval, NULL_TREE, FALSE);
-
- resume_momentary (yes);
}
else
multi_retval = NULL_TREE; /* Not actually ref'd if !multi. */
@@ -3070,8 +2898,6 @@ ffecom_do_entry_ (ffesymbol fn, int entrynum)
call));
expand_return (result);
}
-
- clear_momentary ();
}
ffecom_end_compstmt ();
@@ -3084,7 +2910,6 @@ ffecom_do_entry_ (ffesymbol fn, int entrynum)
ffecom_doing_entry_ = FALSE;
}
-#endif
/* Transform expr into gcc tree with possible destination
Recursive descent on expr while making corresponding tree nodes and
@@ -3092,7 +2917,6 @@ ffecom_do_entry_ (ffesymbol fn, int entrynum)
with temporary that would be made in certain cases, temporary isn't
made, destination used instead, and dest_used flag set TRUE. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree
ffecom_expr_ (ffebld expr, tree dest_tree, ffebld dest,
bool *dest_used, bool assignp, bool widenp)
@@ -3343,7 +3167,7 @@ ffecom_expr_ (ffebld expr, tree dest_tree, ffebld dest,
case FFEBLD_opUMINUS:
left = ffecom_expr_ (ffebld_left (expr), NULL, NULL, NULL, FALSE, widenp);
- if (tree_type_x)
+ if (tree_type_x)
{
tree_type = tree_type_x;
left = convert (tree_type, left);
@@ -3353,7 +3177,7 @@ ffecom_expr_ (ffebld expr, tree dest_tree, ffebld dest,
case FFEBLD_opADD:
left = ffecom_expr_ (ffebld_left (expr), NULL, NULL, NULL, FALSE, widenp);
right = ffecom_expr_ (ffebld_right (expr), NULL, NULL, NULL, FALSE, widenp);
- if (tree_type_x)
+ if (tree_type_x)
{
tree_type = tree_type_x;
left = convert (tree_type, left);
@@ -3364,7 +3188,7 @@ ffecom_expr_ (ffebld expr, tree dest_tree, ffebld dest,
case FFEBLD_opSUBTRACT:
left = ffecom_expr_ (ffebld_left (expr), NULL, NULL, NULL, FALSE, widenp);
right = ffecom_expr_ (ffebld_right (expr), NULL, NULL, NULL, FALSE, widenp);
- if (tree_type_x)
+ if (tree_type_x)
{
tree_type = tree_type_x;
left = convert (tree_type, left);
@@ -3375,7 +3199,7 @@ ffecom_expr_ (ffebld expr, tree dest_tree, ffebld dest,
case FFEBLD_opMULTIPLY:
left = ffecom_expr_ (ffebld_left (expr), NULL, NULL, NULL, FALSE, widenp);
right = ffecom_expr_ (ffebld_right (expr), NULL, NULL, NULL, FALSE, widenp);
- if (tree_type_x)
+ if (tree_type_x)
{
tree_type = tree_type_x;
left = convert (tree_type, left);
@@ -3386,7 +3210,7 @@ ffecom_expr_ (ffebld expr, tree dest_tree, ffebld dest,
case FFEBLD_opDIVIDE:
left = ffecom_expr_ (ffebld_left (expr), NULL, NULL, NULL, FALSE, widenp);
right = ffecom_expr_ (ffebld_right (expr), NULL, NULL, NULL, FALSE, widenp);
- if (tree_type_x)
+ if (tree_type_x)
{
tree_type = tree_type_x;
left = convert (tree_type, left);
@@ -3403,9 +3227,11 @@ ffecom_expr_ (ffebld expr, tree dest_tree, ffebld dest,
ffecomGfrt code;
ffeinfoKindtype rtkt;
ffeinfoKindtype ltkt;
+ bool ref = TRUE;
switch (ffeinfo_basictype (ffebld_info (right)))
{
+
case FFEINFO_basictypeINTEGER:
if (1 || optimize)
{
@@ -3495,7 +3321,11 @@ ffecom_expr_ (ffebld expr, tree dest_tree, ffebld dest,
FFEINFO_kindtypeREALDOUBLE, 0,
FFETARGET_charactersizeNONE,
FFEEXPR_contextLET);
- code = FFECOM_gfrtPOW_DD;
+ /* We used to call FFECOM_gfrtPOW_DD here,
+ which passes arguments by reference. */
+ code = FFECOM_gfrtL_POW;
+ /* Pass arguments by value. */
+ ref = FALSE;
break;
case FFEINFO_basictypeCOMPLEX:
@@ -3513,6 +3343,7 @@ ffecom_expr_ (ffebld expr, tree dest_tree, ffebld dest,
FFETARGET_charactersizeNONE,
FFEEXPR_contextLET);
code = FFECOM_gfrtPOW_ZZ; /* Overlapping result okay. */
+ ref = TRUE; /* Pass arguments by reference. */
break;
default:
@@ -3526,7 +3357,7 @@ ffecom_expr_ (ffebld expr, tree dest_tree, ffebld dest,
&& ffecom_gfrt_complex_[code]),
tree_type, left, right,
dest_tree, dest, dest_used,
- NULL_TREE, FALSE,
+ NULL_TREE, FALSE, ref,
ffebld_nonter_hook (expr));
}
@@ -3941,14 +3772,12 @@ ffecom_expr_ (ffebld expr, tree dest_tree, ffebld dest,
#endif
}
-#endif
/* Returns the tree that does the intrinsic invocation.
Note: this function applies only to intrinsics returning
CHARACTER*1 or non-CHARACTER results, and to intrinsic
subroutines. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree
ffecom_expr_intrinsic_ (ffebld expr, tree dest_tree,
ffebld dest, bool *dest_used)
@@ -4366,9 +4195,11 @@ ffecom_expr_intrinsic_ (ffebld expr, tree dest_tree,
break; /* Already picked one, stick with it. */
if (kt == FFEINFO_kindtypeREAL1)
- gfrt = FFECOM_gfrtALOG10;
+ /* We used to call FFECOM_gfrtALOG10 here. */
+ gfrt = FFECOM_gfrtL_LOG10;
else if (kt == FFEINFO_kindtypeREAL2)
- gfrt = FFECOM_gfrtDLOG10;
+ /* We used to call FFECOM_gfrtDLOG10 here. */
+ gfrt = FFECOM_gfrtL_LOG10;
break;
case FFEINTRIN_impMAX:
@@ -4430,9 +4261,11 @@ ffecom_expr_intrinsic_ (ffebld expr, tree dest_tree,
convert (tree_type, ffecom_expr (arg2)));
if (kt == FFEINFO_kindtypeREAL1)
- gfrt = FFECOM_gfrtAMOD;
+ /* We used to call FFECOM_gfrtAMOD here. */
+ gfrt = FFECOM_gfrtL_FMOD;
else if (kt == FFEINFO_kindtypeREAL2)
- gfrt = FFECOM_gfrtDMOD;
+ /* We used to call FFECOM_gfrtDMOD here. */
+ gfrt = FFECOM_gfrtL_FMOD;
break;
case FFEINTRIN_impNINT:
@@ -4580,21 +4413,21 @@ ffecom_expr_intrinsic_ (ffebld expr, tree dest_tree,
case FFEINTRIN_impBTEST:
{
- ffetargetLogical1 true;
- ffetargetLogical1 false;
+ ffetargetLogical1 target_true;
+ ffetargetLogical1 target_false;
tree true_tree;
tree false_tree;
- ffetarget_logical1 (&true, TRUE);
- ffetarget_logical1 (&false, FALSE);
- if (true == 1)
+ ffetarget_logical1 (&target_true, TRUE);
+ ffetarget_logical1 (&target_false, FALSE);
+ if (target_true == 1)
true_tree = convert (tree_type, integer_one_node);
else
- true_tree = convert (tree_type, build_int_2 (true, 0));
- if (false == 0)
+ true_tree = convert (tree_type, build_int_2 (target_true, 0));
+ if (target_false == 0)
false_tree = convert (tree_type, integer_zero_node);
else
- false_tree = convert (tree_type, build_int_2 (false, 0));
+ false_tree = convert (tree_type, build_int_2 (target_false, 0));
return
ffecom_3 (COND_EXPR, tree_type,
@@ -4647,7 +4480,7 @@ ffecom_expr_intrinsic_ (ffebld expr, tree dest_tree,
integer_type_node,
TYPE_SIZE (uns_type),
arg3_tree))));
-#if !defined(TREE_SHIFT_FULLWIDTH) || !TREE_SHIFT_FULLWIDTH
+ /* Fix up, because the RSHIFT_EXPR above can't shift over TYPE_SIZE. */
expr_tree
= ffecom_3 (COND_EXPR, tree_type,
ffecom_truth_value
@@ -4656,7 +4489,6 @@ ffecom_expr_intrinsic_ (ffebld expr, tree dest_tree,
integer_zero_node)),
expr_tree,
convert (tree_type, integer_zero_node));
-#endif
}
return expr_tree;
@@ -4692,16 +4524,17 @@ ffecom_expr_intrinsic_ (ffebld expr, tree dest_tree,
ffecom_1 (NEGATE_EXPR,
integer_type_node,
arg2_tree))));
-#if !defined(TREE_SHIFT_FULLWIDTH) || !TREE_SHIFT_FULLWIDTH
+ /* Fix up, because {L|R}SHIFT_EXPR don't go over TYPE_SIZE bounds. */
expr_tree
= ffecom_3 (COND_EXPR, tree_type,
ffecom_truth_value
(ffecom_2 (NE_EXPR, integer_type_node,
- arg2_tree,
+ ffecom_1 (ABS_EXPR,
+ integer_type_node,
+ arg2_tree),
TYPE_SIZE (uns_type))),
expr_tree,
convert (tree_type, integer_zero_node));
-#endif
/* Make sure SAVE_EXPRs get referenced early enough. */
expr_tree
= ffecom_2 (COMPOUND_EXPR, tree_type,
@@ -4731,7 +4564,7 @@ ffecom_expr_intrinsic_ (ffebld expr, tree dest_tree,
ffecom_1 (BIT_NOT_EXPR, tree_type,
convert (tree_type, integer_zero_node)),
arg3_tree);
-#if !defined(TREE_SHIFT_FULLWIDTH) || !TREE_SHIFT_FULLWIDTH
+ /* Fix up, because LSHIFT_EXPR above can't shift over TYPE_SIZE. */
mask_arg1
= ffecom_3 (COND_EXPR, tree_type,
ffecom_truth_value
@@ -4740,7 +4573,6 @@ ffecom_expr_intrinsic_ (ffebld expr, tree dest_tree,
TYPE_SIZE (uns_type))),
mask_arg1,
convert (tree_type, integer_zero_node));
-#endif
mask_arg1 = ffecom_save_tree (mask_arg1);
masked_arg1
= ffecom_2 (BIT_AND_EXPR, tree_type,
@@ -4889,7 +4721,7 @@ ffecom_expr_intrinsic_ (ffebld expr, tree dest_tree,
convert (arg4_type,
integer_zero_node)),
arg5_plus_arg3);
-#if !defined(TREE_SHIFT_FULLWIDTH) || !TREE_SHIFT_FULLWIDTH
+ /* Fix up, because LSHIFT_EXPR above can't shift over TYPE_SIZE. */
prep_arg4
= ffecom_3 (COND_EXPR, arg4_type,
ffecom_truth_value
@@ -4899,7 +4731,6 @@ ffecom_expr_intrinsic_ (ffebld expr, tree dest_tree,
TYPE_SIZE (arg4_type)))),
prep_arg4,
convert (arg4_type, integer_zero_node));
-#endif
prep_arg4
= ffecom_2 (BIT_AND_EXPR, arg4_type,
arg4_tree,
@@ -4917,7 +4748,8 @@ ffecom_expr_intrinsic_ (ffebld expr, tree dest_tree,
= ffecom_2 (BIT_IOR_EXPR, arg4_type,
prep_arg1,
prep_arg4);
-#if !defined(TREE_SHIFT_FULLWIDTH) || !TREE_SHIFT_FULLWIDTH
+ /* Fix up (twice), because LSHIFT_EXPR above
+ can't shift over TYPE_SIZE. */
prep_arg1
= ffecom_3 (COND_EXPR, arg4_type,
ffecom_truth_value
@@ -4936,7 +4768,6 @@ ffecom_expr_intrinsic_ (ffebld expr, tree dest_tree,
TYPE_SIZE (arg4_type)))),
prep_arg1,
arg1_tree);
-#endif
expr_tree
= ffecom_2s (MODIFY_EXPR, void_type_node,
arg4_tree,
@@ -5226,7 +5057,10 @@ ffecom_expr_intrinsic_ (ffebld expr, tree dest_tree,
arg1_tree);
arg2_tree = ffecom_arg_ptr_to_expr (arg2, &arg2_len);
- arg3_tree = ffecom_expr_w (NULL_TREE, arg3);
+ if (arg3 != NULL)
+ arg3_tree = ffecom_expr_w (NULL_TREE, arg3);
+ else
+ arg3_tree = NULL_TREE;
arg1_tree = build_tree_list (NULL_TREE, arg1_tree);
arg2_tree = build_tree_list (NULL_TREE, arg2_tree);
@@ -5241,9 +5075,10 @@ ffecom_expr_intrinsic_ (ffebld expr, tree dest_tree,
arg1_tree,
NULL_TREE, NULL, NULL, NULL_TREE, TRUE,
ffebld_nonter_hook (expr));
- expr_tree = ffecom_modify (NULL_TREE, arg3_tree,
- convert (TREE_TYPE (arg3_tree),
- expr_tree));
+ if (arg3_tree != NULL_TREE)
+ expr_tree = ffecom_modify (NULL_TREE, arg3_tree,
+ convert (TREE_TYPE (arg3_tree),
+ expr_tree));
}
return expr_tree;
@@ -5568,12 +5403,10 @@ ffecom_expr_intrinsic_ (ffebld expr, tree dest_tree,
the bottom of this source file. */
}
-#endif
/* For power (exponentiation) where right-hand operand is type INTEGER,
generate in-line code to do it the fast way (which, if the operand
is a constant, might just mean a series of multiplies). */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree
ffecom_expr_power_integer_ (ffebld expr)
{
@@ -5941,7 +5774,6 @@ ffecom_expr_power_integer_ (ffebld expr)
return result;
}
-#endif
/* ffecom_expr_transform_ -- Transform symbols in expr
ffebld expr; // FFE expression.
@@ -5949,14 +5781,13 @@ ffecom_expr_power_integer_ (ffebld expr)
Recursive descent on expr while transforming any untransformed SYMTERs. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static void
ffecom_expr_transform_ (ffebld expr)
{
tree t;
ffesymbol s;
-tail_recurse: /* :::::::::::::::::::: */
+ tail_recurse:
if (expr == NULL)
return;
@@ -6004,10 +5835,8 @@ tail_recurse: /* :::::::::::::::::::: */
return;
}
-#endif
/* Make a type based on info in live f2c.h file. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static void
ffecom_f2c_make_type_ (tree *type, int tcode, const char *name)
{
@@ -6072,13 +5901,10 @@ ffecom_f2c_make_type_ (tree *type, int tcode, const char *name)
}
pushdecl (build_decl (TYPE_DECL,
- ffecom_get_invented_identifier ("__g77_f2c_%s",
- name, -1),
+ ffecom_get_invented_identifier ("__g77_f2c_%s", name),
*type));
}
-#endif
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
/* Set the f2c list-directed-I/O code for whatever (integral) type has the
given size. */
@@ -6090,8 +5916,8 @@ ffecom_f2c_set_lio_code_ (ffeinfoBasictype bt, int size,
tree t;
for (j = 0; ((size_t) j) < ARRAY_SIZE (ffecom_tree_type[0]); ++j)
- if (((t = ffecom_tree_type[bt][j]) != NULL_TREE)
- && (TREE_INT_CST_LOW (TYPE_SIZE (t)) == size))
+ if ((t = ffecom_tree_type[bt][j]) != NULL_TREE
+ && compare_tree_int (TYPE_SIZE (t), size) == 0)
{
assert (code != -1);
ffecom_f2c_typecode_[bt][j] = code;
@@ -6099,12 +5925,10 @@ ffecom_f2c_set_lio_code_ (ffeinfoBasictype bt, int size,
}
}
-#endif
/* Finish up globals after doing all program units in file
Need to handle only uninitialized COMMON areas. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static ffeglobal
ffecom_finish_global_ (ffeglobal global)
{
@@ -6123,8 +5947,6 @@ ffecom_finish_global_ (ffeglobal global)
|| !ffeglobal_common_have_size (global))
return global; /* No need to make common, never ref'd. */
- suspend_momentary ();
-
DECL_EXTERNAL (cbt) = 0;
/* Give the array a size now. */
@@ -6149,10 +5971,8 @@ ffecom_finish_global_ (ffeglobal global)
return global;
}
-#endif
/* Finish up any untransformed symbols. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static ffesymbol
ffecom_finish_symbol_transform_ (ffesymbol s)
{
@@ -6183,9 +6003,6 @@ ffecom_finish_symbol_transform_ (ffesymbol s)
if ((ffesymbol_where (s) == FFEINFO_whereCOMMON)
&& (ffesymbol_hook (s).decl_tree != error_mark_node))
{
-#ifdef SOMEONE_GETS_DEBUG_SUPPORT_WORKING
- int yes = suspend_momentary ();
-
/* This isn't working, at least for dbxout. The .s file looks
okay to me (burley), but in gdb 4.9 at least, the variables
appear to reside somewhere outside of the common area, so
@@ -6194,20 +6011,15 @@ ffecom_finish_symbol_transform_ (ffesymbol s)
with EQUIVALENCE, sadly...see similar #if later. */
ffecom_member_phase2_ (ffesymbol_storage (ffesymbol_common (s)),
ffesymbol_storage (s));
-
- resume_momentary (yes);
-#endif
}
return s;
}
-#endif
/* Append underscore(s) to name before calling get_identifier. "us"
is nonzero if the name already contains an underscore and thus
needs two underscores appended. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree
ffecom_get_appended_identifier_ (char us, const char *name)
{
@@ -6229,11 +6041,9 @@ ffecom_get_appended_identifier_ (char us, const char *name)
return id;
}
-#endif
/* Decide whether to append underscore to name before calling
get_identifier. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree
ffecom_get_external_identifier_ (ffesymbol s)
{
@@ -6259,7 +6069,6 @@ ffecom_get_external_identifier_ (ffesymbol s)
return ffecom_get_appended_identifier_ (us, name);
}
-#endif
/* Decide whether to append underscore to internal name before calling
get_identifier.
@@ -6275,7 +6084,6 @@ ffecom_get_external_identifier_ (ffesymbol s)
If the name does contain an underscore, then transform it just
like we transform an external identifier. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree
ffecom_get_identifier_ (const char *name)
{
@@ -6289,7 +6097,6 @@ ffecom_get_identifier_ (const char *name)
name);
}
-#endif
/* ffecom_gen_sfuncdef_ -- Generate definition of statement function
tree t;
@@ -6300,7 +6107,6 @@ ffecom_get_identifier_ (const char *name)
Call after setting up containing function and getting trees for all
other symbols. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree
ffecom_gen_sfuncdef_ (ffesymbol s, ffeinfoBasictype bt, ffeinfoKindtype kt)
{
@@ -6310,9 +6116,8 @@ ffecom_gen_sfuncdef_ (ffesymbol s, ffeinfoBasictype bt, ffeinfoKindtype kt)
tree result;
bool charfunc = (bt == FFEINFO_basictypeCHARACTER);
static bool recurse = FALSE;
- int yes;
int old_lineno = lineno;
- char *old_input_filename = input_filename;
+ const char *old_input_filename = input_filename;
ffecom_nested_entry_ = s;
@@ -6339,8 +6144,6 @@ ffecom_gen_sfuncdef_ (ffesymbol s, ffeinfoBasictype bt, ffeinfoKindtype kt)
assert (!recurse);
recurse = TRUE;
- yes = suspend_momentary ();
-
push_f_function_context ();
if (charfunc)
@@ -6362,16 +6165,13 @@ ffecom_gen_sfuncdef_ (ffesymbol s, ffeinfoBasictype bt, ffeinfoKindtype kt)
entirely internal to our code, and gcc has the ability to return COMPLEX
directly as a value. */
- yes = suspend_momentary ();
-
if (charfunc)
{ /* Prepend arg for where result goes. */
tree type;
type = ffecom_tree_type[FFEINFO_basictypeCHARACTER][kt];
- result = ffecom_get_invented_identifier ("__g77_%s",
- "result", -1);
+ result = ffecom_get_invented_identifier ("__g77_%s", "result");
ffecom_char_enhance_arg_ (&type, s); /* Ignore returned length. */
@@ -6385,8 +6185,6 @@ ffecom_gen_sfuncdef_ (ffesymbol s, ffeinfoBasictype bt, ffeinfoKindtype kt)
ffecom_push_dummy_decls_ (ffesymbol_dummyargs (s), TRUE);
- resume_momentary (yes);
-
store_parm_decls (0);
ffecom_start_compstmt ();
@@ -6418,8 +6216,6 @@ ffecom_gen_sfuncdef_ (ffesymbol s, ffeinfoBasictype bt, ffeinfoKindtype kt)
DECL_RESULT (current_function_decl),
ffecom_expr (expr)));
}
-
- clear_momentary ();
}
ffecom_end_compstmt ();
@@ -6429,8 +6225,6 @@ ffecom_gen_sfuncdef_ (ffesymbol s, ffeinfoBasictype bt, ffeinfoKindtype kt)
pop_f_function_context ();
- resume_momentary (yes);
-
recurse = FALSE;
lineno = old_lineno;
@@ -6441,17 +6235,12 @@ ffecom_gen_sfuncdef_ (ffesymbol s, ffeinfoBasictype bt, ffeinfoKindtype kt)
return func;
}
-#endif
-
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static const char *
ffecom_gfrt_args_ (ffecomGfrt ix)
{
return ffecom_gfrt_argstring_[ix];
}
-#endif
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree
ffecom_gfrt_tree_ (ffecomGfrt ix)
{
@@ -6463,10 +6252,57 @@ ffecom_gfrt_tree_ (ffecomGfrt ix)
ffecom_gfrt_[ix]);
}
-#endif
/* Return initialize-to-zero expression for this VAR_DECL. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
+/* A somewhat evil way to prevent the garbage collector
+ from collecting 'tree' structures. */
+#define NUM_TRACKED_CHUNK 63
+static struct tree_ggc_tracker
+{
+ struct tree_ggc_tracker *next;
+ tree trees[NUM_TRACKED_CHUNK];
+} *tracker_head = NULL;
+
+static void
+mark_tracker_head (void *arg)
+{
+ struct tree_ggc_tracker *head;
+ int i;
+
+ for (head = * (struct tree_ggc_tracker **) arg;
+ head != NULL;
+ head = head->next)
+ {
+ ggc_mark (head);
+ for (i = 0; i < NUM_TRACKED_CHUNK; i++)
+ ggc_mark_tree (head->trees[i]);
+ }
+}
+
+void
+ffecom_save_tree_forever (tree t)
+{
+ int i;
+ if (tracker_head != NULL)
+ for (i = 0; i < NUM_TRACKED_CHUNK; i++)
+ if (tracker_head->trees[i] == NULL)
+ {
+ tracker_head->trees[i] = t;
+ return;
+ }
+
+ {
+ /* Need to allocate a new block. */
+ struct tree_ggc_tracker *old_head = tracker_head;
+
+ tracker_head = ggc_alloc (sizeof (*tracker_head));
+ tracker_head->next = old_head;
+ tracker_head->trees[0] = t;
+ for (i = 1; i < NUM_TRACKED_CHUNK; i++)
+ tracker_head->trees[i] = NULL;
+ }
+}
+
static tree
ffecom_init_zero_ (tree decl)
{
@@ -6476,18 +6312,10 @@ ffecom_init_zero_ (tree decl)
if (incremental)
{
- int momentary = suspend_momentary ();
- push_obstacks_nochange ();
- if (TREE_PERMANENT (decl))
- end_temporary_allocation ();
- make_decl_rtl (decl, NULL, TREE_PUBLIC (decl) ? 1 : 0);
+ make_decl_rtl (decl, NULL);
assemble_variable (decl, TREE_PUBLIC (decl) ? 1 : 0, 0, 1);
- pop_obstacks ();
- resume_momentary (momentary);
}
- push_momentary ();
-
if ((TREE_CODE (type) != ARRAY_TYPE)
&& (TREE_CODE (type) != RECORD_TYPE)
&& (TREE_CODE (type) != UNION_TYPE)
@@ -6495,31 +6323,19 @@ ffecom_init_zero_ (tree decl)
init = convert (type, integer_zero_node);
else if (!incremental)
{
- int momentary = suspend_momentary ();
-
init = build (CONSTRUCTOR, type, NULL_TREE, NULL_TREE);
TREE_CONSTANT (init) = 1;
TREE_STATIC (init) = 1;
-
- resume_momentary (momentary);
}
else
{
- int momentary = suspend_momentary ();
-
assemble_zeros (int_size_in_bytes (type));
init = error_mark_node;
-
- resume_momentary (momentary);
}
- pop_momentary_nofree ();
-
return init;
}
-#endif
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree
ffecom_intrinsic_ichar_ (tree tree_type, ffebld arg,
tree *maybe_tree)
@@ -6623,7 +6439,6 @@ ffecom_intrinsic_ichar_ (tree tree_type, ffebld arg,
}
}
-#endif
/* ffecom_intrinsic_len_ -- Return length info for char arg (LEN())
tree length_arg;
@@ -6634,7 +6449,6 @@ ffecom_intrinsic_ichar_ (tree tree_type, ffebld arg,
subexpressions by constructing the appropriate tree for the
length-of-character-text argument in a calling sequence. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree
ffecom_intrinsic_len_ (ffebld expr)
{
@@ -6775,14 +6589,12 @@ ffecom_intrinsic_len_ (ffebld expr)
return length;
}
-#endif
/* Handle CHARACTER assignments.
Generates code to do the assignment. Used by ordinary assignment
statement handler ffecom_let_stmt and by statement-function
handler to generate code for a statement function. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static void
ffecom_let_char_ (tree dest_tree, tree dest_length,
ffetargetCharacterSize dest_size, ffebld source)
@@ -6984,7 +6796,6 @@ ffecom_let_char_ (tree dest_tree, tree dest_length,
ffecom_concat_list_kill_ (catlist);
}
-#endif
/* ffecom_make_gfrt_ -- Make initial info for run-time routine
ffecomGfrt ix;
@@ -6993,16 +6804,12 @@ ffecom_let_char_ (tree dest_tree, tree dest_length,
Assumes gfrt_[ix] is NULL_TREE, and replaces it with the FUNCTION_DECL
for the indicated run-time routine (ix). */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static void
ffecom_make_gfrt_ (ffecomGfrt ix)
{
tree t;
tree ttype;
- push_obstacks_nochange ();
- end_temporary_allocation ();
-
switch (ffecom_gfrt_type_[ix])
{
case FFECOM_rttypeVOID_:
@@ -7076,23 +6883,27 @@ ffecom_make_gfrt_ (ffecomGfrt ix)
get_identifier (ffecom_gfrt_name_[ix]),
ttype);
DECL_EXTERNAL (t) = 1;
+ TREE_READONLY (t) = ffecom_gfrt_const_[ix] ? 1 : 0;
TREE_PUBLIC (t) = 1;
TREE_THIS_VOLATILE (t) = ffecom_gfrt_volatile_[ix] ? 1 : 0;
+ /* Sanity check: A function that's const cannot be volatile. */
+
+ assert (ffecom_gfrt_const_[ix] ? !ffecom_gfrt_volatile_[ix] : 1);
+
+ /* Sanity check: A function that's const cannot return complex. */
+
+ assert (ffecom_gfrt_const_[ix] ? !ffecom_gfrt_complex_[ix] : 1);
+
t = start_decl (t, TRUE);
finish_decl (t, NULL_TREE, TRUE);
- resume_temporary_allocation ();
- pop_obstacks ();
-
ffecom_gfrt_[ix] = t;
}
-#endif
/* Phase 1 pass over each member of a COMMON/EQUIVALENCE group. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static void
ffecom_member_phase1_ (ffestorag mst UNUSED, ffestorag st)
{
@@ -7102,13 +6913,10 @@ ffecom_member_phase1_ (ffestorag mst UNUSED, ffestorag st)
ffecom_member_namelisted_ = TRUE;
}
-#endif
/* Phase 2 pass over each member of a COMMON/EQUIVALENCE group. Declare
the member so debugger will see it. Otherwise nobody should be
referencing the member. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
-#ifdef SOMEONE_GETS_DEBUG_SUPPORT_WORKING
static void
ffecom_member_phase2_ (ffestorag mst, ffestorag st)
{
@@ -7139,21 +6947,20 @@ ffecom_member_phase2_ (ffestorag mst, ffestorag st)
TREE_STATIC (t) = TREE_STATIC (mt);
DECL_INITIAL (t) = NULL_TREE;
TREE_ASM_WRITTEN (t) = 1;
+ TREE_USED (t) = 1;
- DECL_RTL (t)
- = gen_rtx (MEM, TYPE_MODE (type),
- plus_constant (XEXP (DECL_RTL (mt), 0),
- ffestorag_modulo (mst)
- + ffestorag_offset (st)
- - ffestorag_offset (mst)));
+ SET_DECL_RTL (t,
+ gen_rtx (MEM, TYPE_MODE (type),
+ plus_constant (XEXP (DECL_RTL (mt), 0),
+ ffestorag_modulo (mst)
+ + ffestorag_offset (st)
+ - ffestorag_offset (mst))));
t = start_decl (t, FALSE);
finish_decl (t, NULL_TREE, FALSE);
}
-#endif
-#endif
/* Prepare source expression for assignment into a destination perhaps known
to be of a specific size. */
@@ -7209,7 +7016,6 @@ ffecom_prepare_let_char_ (ffetargetCharacterSize dest_size, ffebld source)
always known by both the caller and the callee, though the code allows
for someday permitting CHAR*(*) stmtfunc dummies). */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static void
ffecom_push_dummy_decls_ (ffebld dummy_list, bool stmtfunc)
{
@@ -7279,13 +7085,11 @@ ffecom_push_dummy_decls_ (ffebld dummy_list, bool stmtfunc)
ffecom_transform_only_dummies_ = FALSE;
}
-#endif
/* ffecom_start_progunit_ -- Beginning of program unit
Does GNU back end stuff necessary to teach it about the start of its
equivalent of a Fortran program unit. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static void
ffecom_start_progunit_ ()
{
@@ -7308,8 +7112,7 @@ ffecom_start_progunit_ ()
&& (ffecom_master_bt_ == FFEINFO_basictypeNONE);
bool main_program = FALSE;
int old_lineno = lineno;
- char *old_input_filename = input_filename;
- int yes;
+ const char *old_input_filename = input_filename;
assert (fn != NULL);
assert (ffesymbol_hook (fn).decl_tree == NULL_TREE);
@@ -7317,16 +7120,6 @@ ffecom_start_progunit_ ()
input_filename = ffesymbol_where_filename (fn);
lineno = ffesymbol_where_filelinenum (fn);
- /* c-parse.y indeed does call suspend_momentary and not only ignores the
- return value, but also never calls resume_momentary, when starting an
- outer function (see "fndef:", "setspecs:", and so on). So g77 does the
- same thing. It shouldn't be a problem since start_function calls
- temporary_allocation, but it might be necessary. If it causes a problem
- here, then maybe there's a bug lurking in gcc. NOTE: This identical
- comment appears twice in thist file. */
-
- suspend_momentary ();
-
switch (ffecom_primary_entry_kind_)
{
case FFEINFO_kindPROGRAM:
@@ -7414,8 +7207,7 @@ ffecom_start_progunit_ ()
if (altentries)
{
id = ffecom_get_invented_identifier ("__g77_masterfun_%s",
- ffesymbol_text (fn),
- -1);
+ ffesymbol_text (fn));
}
#if FFETARGET_isENFORCED_MAIN
else if (main_program)
@@ -7439,8 +7231,6 @@ ffecom_start_progunit_ ()
ffeglobal_set_hook (g, current_function_decl);
}
- yes = suspend_momentary ();
-
/* Arg handling needs exec-transitioned ffesymbols to work with. But
exec-transitioning needs current_function_decl to be filled in. So we
do these things in two phases. */
@@ -7450,8 +7240,7 @@ ffecom_start_progunit_ ()
ffecom_which_entrypoint_decl_
= build_decl (PARM_DECL,
ffecom_get_invented_identifier ("__g77_%s",
- "which_entrypoint",
- -1),
+ "which_entrypoint"),
integer_type_node);
push_parm_decl (ffecom_which_entrypoint_decl_);
}
@@ -7470,8 +7259,7 @@ ffecom_start_progunit_ ()
else
type = ffecom_multi_type_node_;
- result = ffecom_get_invented_identifier ("__g77_%s",
- "result", -1);
+ result = ffecom_get_invented_identifier ("__g77_%s", "result");
/* Make length arg _and_ enhance type info for CHAR arg itself. */
@@ -7505,8 +7293,6 @@ ffecom_start_progunit_ ()
ffecom_push_dummy_decls_ (arglist, FALSE);
}
- resume_momentary (yes);
-
if (TREE_CODE (current_function_decl) != ERROR_MARK)
store_parm_decls (main_program ? 1 : 0);
@@ -7526,7 +7312,6 @@ ffecom_start_progunit_ ()
ffesymbol_drive (ffecom_finish_symbol_transform_);
}
-#endif
/* ffecom_sym_transform_ -- Transform FFE sym into backend sym
ffesymbol s;
@@ -7535,7 +7320,6 @@ ffecom_start_progunit_ ()
The ffesymbol_hook info for s is updated with appropriate backend info
on the symbol. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static ffesymbol
ffecom_sym_transform_ (ffesymbol s)
{
@@ -7545,9 +7329,8 @@ ffecom_sym_transform_ (ffesymbol s)
ffeinfoBasictype bt;
ffeinfoKindtype kt;
ffeglobal g;
- int yes;
int old_lineno = lineno;
- char *old_input_filename = input_filename;
+ const char *old_input_filename = input_filename;
/* Must ensure special ASSIGN variables are declared at top of outermost
block, else they'll end up in the innermost block when their first
@@ -7600,9 +7383,7 @@ ffecom_sym_transform_ (ffesymbol s)
t = build_decl (PARM_DECL,
ffecom_get_identifier_ (ffesymbol_text (s)),
ffecom_tree_ptr_to_subr_type);
-#if BUILT_FOR_270
DECL_ARTIFICIAL (t) = 1;
-#endif
addr = TRUE;
break;
@@ -7620,9 +7401,6 @@ ffecom_sym_transform_ (ffesymbol s)
break;
}
- push_obstacks_nochange ();
- end_temporary_allocation ();
-
t = build_decl (FUNCTION_DECL,
ffecom_get_external_identifier_ (s),
ffecom_tree_subr_type); /* Assume subr. */
@@ -7638,8 +7416,7 @@ ffecom_sym_transform_ (ffesymbol s)
|| (ffeglobal_type (g) == FFEGLOBAL_typeEXT)))
ffeglobal_set_hook (g, t);
- resume_temporary_allocation ();
- pop_obstacks ();
+ ffecom_save_tree_forever (t);
break;
@@ -7675,9 +7452,7 @@ ffecom_sym_transform_ (ffesymbol s)
break;
}
- yes = suspend_momentary ();
type = ffecom_type_localvar_ (s, bt, kt);
- resume_momentary (yes);
if (type == error_mark_node)
{
@@ -7690,7 +7465,6 @@ ffecom_sym_transform_ (ffesymbol s)
{ /* Child of EQUIVALENCE parent. */
ffestorag est;
tree et;
- int yes;
ffetargetOffset offset;
est = ffestorag_parent (st);
@@ -7702,8 +7476,6 @@ ffecom_sym_transform_ (ffesymbol s)
if (! TREE_STATIC (et))
put_var_into_stack (et);
- yes = suspend_momentary ();
-
offset = ffestorag_modulo (est)
+ ffestorag_offset (ffesymbol_storage (s))
- ffestorag_offset (est);
@@ -7724,16 +7496,12 @@ ffecom_sym_transform_ (ffesymbol s)
TREE_CONSTANT (t) = staticp (et);
addr = TRUE;
-
- resume_momentary (yes);
}
else
{
tree initexpr;
bool init = ffesymbol_is_init (s);
- yes = suspend_momentary ();
-
t = build_decl (VAR_DECL,
ffecom_get_identifier_ (ffesymbol_text (s)),
type);
@@ -7776,18 +7544,12 @@ ffecom_sym_transform_ (ffesymbol s)
finish_decl (t, initexpr, FALSE);
- if ((st != NULL) && (DECL_SIZE (t) != error_mark_node))
+ if (st != NULL && DECL_SIZE (t) != error_mark_node)
{
- tree size_tree;
-
- size_tree = size_binop (CEIL_DIV_EXPR,
- DECL_SIZE (t),
- size_int (BITS_PER_UNIT));
- assert (TREE_INT_CST_HIGH (size_tree) == 0);
- assert (TREE_INT_CST_LOW (size_tree) == ffestorag_size (st));
+ assert (TREE_CODE (DECL_SIZE_UNIT (t)) == INTEGER_CST);
+ assert (0 == compare_tree_int (DECL_SIZE_UNIT (t),
+ ffestorag_size (st)));
}
-
- resume_momentary (yes);
}
}
break;
@@ -7820,20 +7582,15 @@ ffecom_sym_transform_ (ffesymbol s)
if ((ffecom_num_entrypoints_ != 0)
&& (ffecom_master_bt_ == FFEINFO_basictypeNONE))
{
- yes = suspend_momentary ();
-
assert (ffecom_multi_retval_ != NULL_TREE);
t = ffecom_1 (INDIRECT_REF, ffecom_multi_type_node_,
ffecom_multi_retval_);
t = ffecom_2 (COMPONENT_REF, ffecom_tree_type[bt][kt],
t, ffecom_multi_fields_[bt][kt]);
- resume_momentary (yes);
break;
}
- yes = suspend_momentary ();
-
t = build_decl (VAR_DECL,
ffecom_get_identifier_ (ffesymbol_text (s)),
ffecom_tree_type[bt][kt]);
@@ -7843,7 +7600,6 @@ ffecom_sym_transform_ (ffesymbol s)
ffecom_func_result_ = t;
- resume_momentary (yes);
break;
case FFEINFO_whereDUMMY:
@@ -8094,9 +7850,7 @@ ffecom_sym_transform_ (ffesymbol s)
}
t = build_decl (PARM_DECL, t, type);
-#if BUILT_FOR_270
DECL_ARTIFICIAL (t) = 1;
-#endif
/* If this arg is present in every entry point's list of
dummy args, then we're done. */
@@ -8189,7 +7943,6 @@ ffecom_sym_transform_ (ffesymbol s)
tree ct;
ffestorag st = ffesymbol_storage (s);
tree type;
- int yes;
cs = ffesymbol_common (s); /* The COMMON area itself. */
if (st != NULL) /* Else not laid out. */
@@ -8198,8 +7951,6 @@ ffecom_sym_transform_ (ffesymbol s)
st = ffesymbol_storage (s);
}
- yes = suspend_momentary ();
-
type = ffecom_type_localvar_ (s, bt, kt);
cg = ffesymbol_global (cs); /* The global COMMON info. */
@@ -8242,8 +7993,6 @@ ffecom_sym_transform_ (ffesymbol s)
addr = TRUE;
}
-
- resume_momentary (yes);
}
break;
@@ -8284,9 +8033,6 @@ ffecom_sym_transform_ (ffesymbol s)
break;
}
- push_obstacks_nochange ();
- end_temporary_allocation ();
-
if (ffesymbol_is_f2c (s)
&& (ffesymbol_where (s) != FFEINFO_whereCONSTANT))
t = ffecom_tree_fun_type[bt][kt];
@@ -8307,8 +8053,7 @@ ffecom_sym_transform_ (ffesymbol s)
|| (ffeglobal_type (g) == FFEGLOBAL_typeEXT)))
ffeglobal_set_hook (g, t);
- resume_temporary_allocation ();
- pop_obstacks ();
+ ffecom_save_tree_forever (t);
break;
@@ -8325,9 +8070,7 @@ ffecom_sym_transform_ (ffesymbol s)
t = build_decl (PARM_DECL,
ffecom_get_identifier_ (ffesymbol_text (s)),
t);
-#if BUILT_FOR_270
DECL_ARTIFICIAL (t) = 1;
-#endif
addr = TRUE;
break;
@@ -8371,9 +8114,6 @@ ffecom_sym_transform_ (ffesymbol s)
break;
}
- push_obstacks_nochange ();
- end_temporary_allocation ();
-
t = build_decl (FUNCTION_DECL,
ffecom_get_external_identifier_ (s),
ffecom_tree_subr_type);
@@ -8388,8 +8128,7 @@ ffecom_sym_transform_ (ffesymbol s)
|| (ffeglobal_type (g) == FFEGLOBAL_typeEXT)))
ffeglobal_set_hook (g, t);
- resume_temporary_allocation ();
- pop_obstacks ();
+ ffecom_save_tree_forever (t);
break;
@@ -8399,9 +8138,7 @@ ffecom_sym_transform_ (ffesymbol s)
t = build_decl (PARM_DECL,
ffecom_get_identifier_ (ffesymbol_text (s)),
ffecom_tree_ptr_to_subr_type);
-#if BUILT_FOR_270
DECL_ARTIFICIAL (t) = 1;
-#endif
addr = TRUE;
break;
@@ -8458,9 +8195,6 @@ ffecom_sym_transform_ (ffesymbol s)
case FFEINFO_whereGLOBAL:
assert (!ffecom_transform_only_dummies_);
- push_obstacks_nochange ();
- end_temporary_allocation ();
-
t = build_decl (FUNCTION_DECL,
ffecom_get_external_identifier_ (s),
ffecom_tree_blockdata_type);
@@ -8470,8 +8204,7 @@ ffecom_sym_transform_ (ffesymbol s)
t = start_decl (t, FALSE);
finish_decl (t, NULL_TREE, FALSE);
- resume_temporary_allocation ();
- pop_obstacks ();
+ ffecom_save_tree_forever (t);
break;
@@ -8598,7 +8331,6 @@ ffecom_sym_transform_ (ffesymbol s)
return s;
}
-#endif
/* Transform into ASSIGNable symbol.
Symbol has already been transformed, but for whatever reason, the
@@ -8607,14 +8339,12 @@ ffecom_sym_transform_ (ffesymbol s)
another local symbol of type void * and stuff that in the assign_tree
argument. The F77/F90 standards allow this implementation. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static ffesymbol
ffecom_sym_transform_assign_ (ffesymbol s)
{
tree t; /* Transformed thingy. */
- int yes;
int old_lineno = lineno;
- char *old_input_filename = input_filename;
+ const char *old_input_filename = input_filename;
if (ffesymbol_sfdummyparent (s) == NULL)
{
@@ -8631,12 +8361,9 @@ ffecom_sym_transform_assign_ (ffesymbol s)
assert (!ffecom_transform_only_dummies_);
- yes = suspend_momentary ();
-
t = build_decl (VAR_DECL,
ffecom_get_invented_identifier ("__g77_ASSIGN_%s",
- ffesymbol_text (s),
- -1),
+ ffesymbol_text (s)),
TREE_TYPE (null_pointer_node));
switch (ffesymbol_where (s))
@@ -8677,8 +8404,6 @@ ffecom_sym_transform_assign_ (ffesymbol s)
t = start_decl (t, FALSE);
finish_decl (t, NULL_TREE, FALSE);
- resume_momentary (yes);
-
ffesymbol_hook (s).assign_tree = t;
lineno = old_lineno;
@@ -8687,7 +8412,6 @@ ffecom_sym_transform_assign_ (ffesymbol s)
return s;
}
-#endif
/* Implement COMMON area in back end.
Because COMMON-based variables can be referenced in the dimension
@@ -8716,7 +8440,6 @@ ffecom_sym_transform_assign_ (ffesymbol s)
though we might do that as well just for debugging purposes (and
stuff the rtl with the appropriate offset expression). */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static void
ffecom_transform_common_ (ffesymbol s)
{
@@ -8750,7 +8473,10 @@ ffecom_transform_common_ (ffesymbol s)
if ((cbt != NULL_TREE)
&& (!is_init
|| !DECL_EXTERNAL (cbt)))
- return;
+ {
+ if (st->hook == NULL) ffestorag_set_hook (st, cbt);
+ return;
+ }
/* Process inits. */
@@ -8795,9 +8521,6 @@ ffecom_transform_common_ (ffesymbol s)
else
init = NULL_TREE;
- push_obstacks_nochange ();
- end_temporary_allocation ();
-
/* cbtype must be permanently allocated! */
/* Allocate the MAX of the areas so far, seen filewide. */
@@ -8842,6 +8565,7 @@ ffecom_transform_common_ (ffesymbol s)
this seems easy enough. */
DECL_ALIGN (cbt) = BIGGEST_ALIGNMENT;
+ DECL_USER_ALIGN (cbt) = 0;
if (is_init && (ffestorag_init (st) == NULL))
init = ffecom_init_zero_ (cbt);
@@ -8853,30 +8577,22 @@ ffecom_transform_common_ (ffesymbol s)
if (init)
{
- tree size_tree;
-
- assert (DECL_SIZE (cbt) != NULL_TREE);
- assert (TREE_CODE (DECL_SIZE (cbt)) == INTEGER_CST);
- size_tree = size_binop (CEIL_DIV_EXPR,
- DECL_SIZE (cbt),
- size_int (BITS_PER_UNIT));
- assert (TREE_INT_CST_HIGH (size_tree) == 0);
- assert (TREE_INT_CST_LOW (size_tree)
- == ffeglobal_common_size (g) + ffeglobal_common_pad (g));
+ assert (DECL_SIZE_UNIT (cbt) != NULL_TREE);
+ assert (TREE_CODE (DECL_SIZE_UNIT (cbt)) == INTEGER_CST);
+ assert (0 == compare_tree_int (DECL_SIZE_UNIT (cbt),
+ (ffeglobal_common_size (g)
+ + ffeglobal_common_pad (g))));
}
ffeglobal_set_hook (g, cbt);
ffestorag_set_hook (st, cbt);
- resume_temporary_allocation ();
- pop_obstacks ();
+ ffecom_save_tree_forever (cbt);
}
-#endif
/* Make master area for local EQUIVALENCE. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static void
ffecom_transform_equiv_ (ffestorag eqst)
{
@@ -8885,7 +8601,6 @@ ffecom_transform_equiv_ (ffestorag eqst)
tree init;
tree high;
bool is_init = ffestorag_is_init (eqst);
- int yes;
assert (eqst != NULL);
@@ -8940,8 +8655,6 @@ ffecom_transform_equiv_ (ffestorag eqst)
&ffecom_member_phase1_,
eqst);
- yes = suspend_momentary ();
-
high = build_int_2 ((ffestorag_size (eqst)
+ ffestorag_modulo (eqst)) - 1, 0);
TREE_TYPE (high) = ffecom_integer_type_node;
@@ -8954,9 +8667,7 @@ ffecom_transform_equiv_ (ffestorag eqst)
eqt = build_decl (VAR_DECL,
ffecom_get_invented_identifier ("__g77_equiv_%s",
ffesymbol_text
- (ffestorag_symbol
- (eqst)),
- -1),
+ (ffestorag_symbol (eqst))),
eqtype);
DECL_EXTERNAL (eqt) = 0;
if (is_init
@@ -8971,6 +8682,7 @@ ffecom_transform_equiv_ (ffestorag eqst)
else
TREE_STATIC (eqt) = 0;
TREE_PUBLIC (eqt) = 0;
+ TREE_ADDRESSABLE (eqt) = 1; /* Ensure non-register allocation */
DECL_CONTEXT (eqt) = current_function_decl;
if (init)
DECL_INITIAL (eqt) = error_mark_node;
@@ -8985,6 +8697,7 @@ ffecom_transform_equiv_ (ffestorag eqst)
this seems easy enough. */
DECL_ALIGN (eqt) = BIGGEST_ALIGNMENT;
+ DECL_USER_ALIGN (eqt) = 0;
if ((!is_init && ffe_is_init_local_zero ())
|| (is_init && (ffestorag_init (eqst) == NULL)))
@@ -8996,31 +8709,21 @@ ffecom_transform_equiv_ (ffestorag eqst)
ffestorag_set_init (eqst, ffebld_new_any ());
{
- tree size_tree;
-
- size_tree = size_binop (CEIL_DIV_EXPR,
- DECL_SIZE (eqt),
- size_int (BITS_PER_UNIT));
- assert (TREE_INT_CST_HIGH (size_tree) == 0);
- assert (TREE_INT_CST_LOW (size_tree)
- == ffestorag_size (eqst) + ffestorag_modulo (eqst));
+ assert (TREE_CODE (DECL_SIZE_UNIT (eqt)) == INTEGER_CST);
+ assert (0 == compare_tree_int (DECL_SIZE_UNIT (eqt),
+ (ffestorag_size (eqst)
+ + ffestorag_modulo (eqst))));
}
ffestorag_set_hook (eqst, eqt);
-#ifdef SOMEONE_GETS_DEBUG_SUPPORT_WORKING
ffestorag_drive (ffestorag_list_equivs (eqst),
&ffecom_member_phase2_,
eqst);
-#endif
-
- resume_momentary (yes);
}
-#endif
/* Implement NAMELIST in back end. See f2c/format.c for more info. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree
ffecom_transform_namelist_ (ffesymbol s)
{
@@ -9032,15 +8735,12 @@ ffecom_transform_namelist_ (ffesymbol s)
tree nvarsinit;
tree field;
tree high;
- int yes;
int i;
static int mynumber = 0;
- yes = suspend_momentary ();
-
nmlt = build_decl (VAR_DECL,
ffecom_get_invented_identifier ("__g77_namelist_%d",
- NULL, mynumber++),
+ mynumber++),
nmltype);
TREE_STATIC (nmlt) = 1;
DECL_INITIAL (nmlt) = error_mark_node;
@@ -9100,19 +8800,14 @@ ffecom_transform_namelist_ (ffesymbol s)
nmlt = ffecom_1 (ADDR_EXPR, build_pointer_type (nmltype), nmlt);
- resume_momentary (yes);
-
return nmlt;
}
-#endif
-
/* A subroutine of ffecom_tree_canonize_ref_. The incoming tree is
analyzed on the assumption it is calculating a pointer to be
indirected through. It must return the proper decl and offset,
taking into account different units of measurements for offsets. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static void
ffecom_tree_canonize_ptr_ (tree *decl, tree *offset,
tree t)
@@ -9134,14 +8829,13 @@ ffecom_tree_canonize_ptr_ (tree *decl, tree *offset,
if (TREE_CODE (TREE_OPERAND (t, 1)) == INTEGER_CST)
{
/* An offset into COMMON. */
- *offset = size_binop (PLUS_EXPR,
- *offset,
- TREE_OPERAND (t, 1));
+ *offset = fold (build (PLUS_EXPR, TREE_TYPE (*offset),
+ *offset, TREE_OPERAND (t, 1)));
/* Convert offset (presumably in bytes) into canonical units
(presumably bits). */
*offset = size_binop (MULT_EXPR,
- TYPE_SIZE (TREE_TYPE (TREE_TYPE (t))),
- *offset);
+ convert (bitsizetype, *offset),
+ TYPE_SIZE (TREE_TYPE (TREE_TYPE (t))));
break;
}
/* Not a COMMON reference, so an unrecognized pattern. */
@@ -9150,7 +8844,7 @@ ffecom_tree_canonize_ptr_ (tree *decl, tree *offset,
case PARM_DECL:
*decl = t;
- *offset = bitsize_int (0L, 0L);
+ *offset = bitsize_zero_node;
break;
case ADDR_EXPR:
@@ -9158,7 +8852,7 @@ ffecom_tree_canonize_ptr_ (tree *decl, tree *offset,
{
/* A reference to COMMON. */
*decl = TREE_OPERAND (t, 0);
- *offset = bitsize_int (0L, 0L);
+ *offset = bitsize_zero_node;
break;
}
/* Fall through. */
@@ -9168,7 +8862,6 @@ ffecom_tree_canonize_ptr_ (tree *decl, tree *offset,
break;
}
}
-#endif
/* Given a tree that is possibly intended for use as an lvalue, return
information representing a canonical view of that tree as a decl, an
@@ -9201,7 +8894,6 @@ ffecom_tree_canonize_ptr_ (tree *decl, tree *offset,
whereas converting the array offsets to consistant offsets will
reveal the overlap. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static void
ffecom_tree_canonize_ref_ (tree *decl, tree *offset,
tree *size, tree t)
@@ -9239,7 +8931,6 @@ ffecom_tree_canonize_ref_ (tree *decl, tree *offset,
case FIX_FLOOR_EXPR:
case FIX_ROUND_EXPR:
case FLOAT_EXPR:
- case EXPON_EXPR:
case NEGATE_EXPR:
case MIN_EXPR:
case MAX_EXPR:
@@ -9279,7 +8970,7 @@ ffecom_tree_canonize_ref_ (tree *decl, tree *offset,
case VAR_DECL:
case PARM_DECL:
*decl = t;
- *offset = bitsize_int (0L, 0L);
+ *offset = bitsize_zero_node;
*size = TYPE_SIZE (TREE_TYPE (t));
return;
@@ -9302,17 +8993,17 @@ ffecom_tree_canonize_ref_ (tree *decl, tree *offset,
|| (*decl == error_mark_node))
return;
+ /* Calculate ((element - base) * NBBY) + init_offset. */
+ *offset = fold (build (MINUS_EXPR, TREE_TYPE (element),
+ element,
+ TYPE_MIN_VALUE (TYPE_DOMAIN
+ (TREE_TYPE (array)))));
+
*offset = size_binop (MULT_EXPR,
- TYPE_SIZE (TREE_TYPE (TREE_TYPE (array))),
- size_binop (MINUS_EXPR,
- element,
- TYPE_MIN_VALUE
- (TYPE_DOMAIN
- (TREE_TYPE (array)))));
+ convert (bitsizetype, *offset),
+ TYPE_SIZE (TREE_TYPE (TREE_TYPE (array))));
- *offset = size_binop (PLUS_EXPR,
- init_offset,
- *offset);
+ *offset = size_binop (PLUS_EXPR, init_offset, *offset);
*size = TYPE_SIZE (TREE_TYPE (t));
return;
@@ -9354,11 +9045,9 @@ ffecom_tree_canonize_ref_ (tree *decl, tree *offset,
return;
}
}
-#endif
/* Do divide operation appropriate to type of operands. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree
ffecom_tree_divide_ (tree tree_type, tree left, tree right,
tree dest_tree, ffebld dest, bool *dest_used,
@@ -9446,10 +9135,8 @@ ffecom_tree_divide_ (tree tree_type, tree left, tree right,
}
}
-#endif
/* Build type info for non-dummy variable. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree
ffecom_type_localvar_ (ffesymbol s, ffeinfoBasictype bt,
ffeinfoKindtype kt)
@@ -9506,10 +9193,8 @@ ffecom_type_localvar_ (ffesymbol s, ffeinfoBasictype bt,
return type;
}
-#endif
/* Build Namelist type. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree
ffecom_type_namelist_ ()
{
@@ -9522,9 +9207,6 @@ ffecom_type_namelist_ ()
vardesctype = ffecom_type_vardesc_ ();
- push_obstacks_nochange ();
- end_temporary_allocation ();
-
type = make_node (RECORD_TYPE);
vardesctype = build_pointer_type (build_pointer_type (vardesctype));
@@ -9538,53 +9220,14 @@ ffecom_type_namelist_ ()
TYPE_FIELDS (type) = namefield;
layout_type (type);
- resume_temporary_allocation ();
- pop_obstacks ();
+ ggc_add_tree_root (&type, 1);
}
return type;
}
-#endif
-
-/* Make a copy of a type, assuming caller has switched to the permanent
- obstacks and that the type is for an aggregate (array) initializer. */
-
-#if FFECOM_targetCURRENT == FFECOM_targetGCC && 0 /* Not used now. */
-static tree
-ffecom_type_permanent_copy_ (tree t)
-{
- tree domain;
- tree max;
-
- assert (TREE_TYPE (t) != NULL_TREE);
-
- domain = TYPE_DOMAIN (t);
-
- assert (TREE_CODE (t) == ARRAY_TYPE);
- assert (TREE_PERMANENT (TREE_TYPE (t)));
- assert (TREE_PERMANENT (TREE_TYPE (domain)));
- assert (TREE_PERMANENT (TYPE_MIN_VALUE (domain)));
-
- max = TYPE_MAX_VALUE (domain);
- if (!TREE_PERMANENT (max))
- {
- assert (TREE_CODE (max) == INTEGER_CST);
-
- max = build_int_2 (TREE_INT_CST_LOW (max), TREE_INT_CST_HIGH (max));
- TREE_TYPE (max) = TREE_TYPE (TYPE_MIN_VALUE (domain));
- }
-
- return build_array_type (TREE_TYPE (t),
- build_range_type (TREE_TYPE (domain),
- TYPE_MIN_VALUE (domain),
- max));
-}
-#endif
-
/* Build Vardesc type. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree
ffecom_type_vardesc_ ()
{
@@ -9593,9 +9236,6 @@ ffecom_type_vardesc_ ()
if (type == NULL_TREE)
{
- push_obstacks_nochange ();
- end_temporary_allocation ();
-
type = make_node (RECORD_TYPE);
namefield = ffecom_decl_field (type, NULL_TREE, "name",
@@ -9610,16 +9250,12 @@ ffecom_type_vardesc_ ()
TYPE_FIELDS (type) = namefield;
layout_type (type);
- resume_temporary_allocation ();
- pop_obstacks ();
+ ggc_add_tree_root (&type, 1);
}
return type;
}
-#endif
-
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree
ffecom_vardesc_ (ffebld expr)
{
@@ -9639,14 +9275,11 @@ ffecom_vardesc_ (ffebld expr)
tree typeinit;
tree field;
tree varinits;
- int yes;
static int mynumber = 0;
- yes = suspend_momentary ();
-
var = build_decl (VAR_DECL,
ffecom_get_invented_identifier ("__g77_vardesc_%d",
- NULL, mynumber++),
+ mynumber++),
vardesctype);
TREE_STATIC (var) = 1;
DECL_INITIAL (var) = error_mark_node;
@@ -9705,16 +9338,12 @@ ffecom_vardesc_ (ffebld expr)
var = ffecom_1 (ADDR_EXPR, build_pointer_type (vardesctype), var);
- resume_momentary (yes);
-
ffesymbol_hook (s).vardesc_tree = var;
}
return ffesymbol_hook (s).vardesc_tree;
}
-#endif
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree
ffecom_vardesc_array_ (ffesymbol s)
{
@@ -9723,7 +9352,6 @@ ffecom_vardesc_array_ (ffesymbol s)
tree item = NULL_TREE;
tree var;
int i;
- int yes;
static int mynumber = 0;
for (i = 0, list = NULL_TREE, b = ffesymbol_namelist (s);
@@ -9743,8 +9371,6 @@ ffecom_vardesc_array_ (ffesymbol s)
}
}
- yes = suspend_momentary ();
-
item = build_array_type (build_pointer_type (ffecom_type_vardesc_ ()),
build_range_type (integer_type_node,
integer_one_node,
@@ -9753,21 +9379,16 @@ ffecom_vardesc_array_ (ffesymbol s)
TREE_CONSTANT (list) = 1;
TREE_STATIC (list) = 1;
- var = ffecom_get_invented_identifier ("__g77_vardesc_array_%d", NULL,
- mynumber++);
+ var = ffecom_get_invented_identifier ("__g77_vardesc_array_%d", mynumber++);
var = build_decl (VAR_DECL, var, item);
TREE_STATIC (var) = 1;
DECL_INITIAL (var) = error_mark_node;
var = start_decl (var, FALSE);
finish_decl (var, list, FALSE);
- resume_momentary (yes);
-
return var;
}
-#endif
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree
ffecom_vardesc_dims_ (ffesymbol s)
{
@@ -9782,7 +9403,6 @@ ffecom_vardesc_dims_ (ffesymbol s)
tree backlist;
tree item = NULL_TREE;
tree var;
- int yes;
tree numdim;
tree numelem;
tree baseoff = NULL_TREE;
@@ -9855,8 +9475,6 @@ ffecom_vardesc_dims_ (ffesymbol s)
numdim = build_tree_list (NULL_TREE, numdim);
TREE_CHAIN (numdim) = numelem;
- yes = suspend_momentary ();
-
item = build_array_type (ffecom_f2c_ftnlen_type_node,
build_range_type (integer_type_node,
integer_zero_node,
@@ -9867,8 +9485,7 @@ ffecom_vardesc_dims_ (ffesymbol s)
TREE_CONSTANT (list) = 1;
TREE_STATIC (list) = 1;
- var = ffecom_get_invented_identifier ("__g77_dims_%d", NULL,
- mynumber++);
+ var = ffecom_get_invented_identifier ("__g77_dims_%d", mynumber++);
var = build_decl (VAR_DECL, var, item);
TREE_STATIC (var) = 1;
DECL_INITIAL (var) = error_mark_node;
@@ -9877,20 +9494,16 @@ ffecom_vardesc_dims_ (ffesymbol s)
var = ffecom_1 (ADDR_EXPR, build_pointer_type (item), var);
- resume_momentary (yes);
-
return var;
}
}
-#endif
/* Essentially does a "fold (build1 (code, type, node))" while checking
for certain housekeeping things.
NOTE: for building an ADDR_EXPR around a FUNCTION_DECL, use
ffecom_1_fn instead. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
tree
ffecom_1 (enum tree_code code, tree type, tree node)
{
@@ -9944,11 +9557,12 @@ ffecom_1 (enum tree_code code, tree type, tree node)
if (TREE_SIDE_EFFECTS (node))
TREE_SIDE_EFFECTS (item) = 1;
- if ((code == ADDR_EXPR) && staticp (node))
+ if (code == ADDR_EXPR && staticp (node))
TREE_CONSTANT (item) = 1;
+ else if (code == INDIRECT_REF)
+ TREE_READONLY (item) = TYPE_READONLY (type);
return fold (item);
}
-#endif
/* Like ffecom_1 (ADDR_EXPR, TREE_TYPE (node), node), except
handles TREE_CODE (node) == FUNCTION_DECL. In particular,
@@ -9956,7 +9570,6 @@ ffecom_1 (enum tree_code code, tree type, tree node)
function does not mean the function needs to be separately
compiled). */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
tree
ffecom_1_fn (tree node)
{
@@ -9977,12 +9590,10 @@ ffecom_1_fn (tree node)
TREE_CONSTANT (item) = 1;
return fold (item);
}
-#endif
/* Essentially does a "fold (build (code, type, node1, node2))" while
checking for certain housekeeping things. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
tree
ffecom_2 (enum tree_code code, tree type, tree node1,
tree node2)
@@ -10151,7 +9762,6 @@ ffecom_2 (enum tree_code code, tree type, tree node1,
return fold (item);
}
-#endif
/* ffecom_2pass_advise_entrypoint -- Advise that there's this entrypoint
ffesymbol s; // the ENTRY point itself
@@ -10170,7 +9780,6 @@ ffecom_2 (enum tree_code code, tree type, tree node1,
03-Jan-92 JCB 2.0
Return FALSE if the return type conflicts with previous entrypoints. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
bool
ffecom_2pass_advise_entrypoint (ffesymbol entry)
{
@@ -10308,7 +9917,6 @@ ffecom_2pass_advise_entrypoint (ffesymbol entry)
return TRUE;
}
-#endif
/* ffecom_2pass_do_entrypoint -- Do compilation of entrypoint
ffesymbol s; // the ENTRY point itself
@@ -10318,7 +9926,6 @@ ffecom_2pass_advise_entrypoint (ffesymbol entry)
happen. Must be called for each entrypoint after
ffecom_finish_progunit is called. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
void
ffecom_2pass_do_entrypoint (ffesymbol entry)
{
@@ -10339,13 +9946,10 @@ ffecom_2pass_do_entrypoint (ffesymbol entry)
ffecom_do_entry_ (entry, ent_num);
}
-#endif
-
/* Essentially does a "fold (build (code, type, node1, node2))" while
checking for certain housekeeping things. Always sets
TREE_SIDE_EFFECTS. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
tree
ffecom_2s (enum tree_code code, tree type, tree node1,
tree node2)
@@ -10362,11 +9966,9 @@ ffecom_2s (enum tree_code code, tree type, tree node1,
return fold (item);
}
-#endif
/* Essentially does a "fold (build (code, type, node1, node2, node3))" while
checking for certain housekeeping things. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
tree
ffecom_3 (enum tree_code code, tree type, tree node1,
tree node2, tree node3)
@@ -10386,12 +9988,10 @@ ffecom_3 (enum tree_code code, tree type, tree node1,
return fold (item);
}
-#endif
/* Essentially does a "fold (build (code, type, node1, node2, node3))" while
checking for certain housekeeping things. Always sets
TREE_SIDE_EFFECTS. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
tree
ffecom_3s (enum tree_code code, tree type, tree node1,
tree node2, tree node3)
@@ -10409,8 +10009,6 @@ ffecom_3s (enum tree_code code, tree type, tree node1,
return fold (item);
}
-#endif
-
/* ffecom_arg_expr -- Transform argument expr into gcc tree
See use by ffecom_list_expr.
@@ -10428,7 +10026,6 @@ ffecom_3s (enum tree_code code, tree type, tree node1,
we allow CHARACTER*(*) dummies to statement functions, we'll need
it). */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
tree
ffecom_arg_expr (ffebld expr, tree *length)
{
@@ -10445,7 +10042,6 @@ ffecom_arg_expr (ffebld expr, tree *length)
return ffecom_arg_ptr_to_expr (expr, &ign);
}
-#endif
/* Transform expression into constant argument-pointer-to-expression tree.
If the expression can be transformed into a argument-pointer-to-expression
@@ -10514,7 +10110,6 @@ ffecom_arg_ptr_to_const_expr (ffebld expr, tree *length)
length argument. This might even be seen as a feature, if a null
byte can always be appended. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
tree
ffecom_arg_ptr_to_expr (ffebld expr, tree *length)
{
@@ -10757,7 +10352,6 @@ ffecom_arg_ptr_to_expr (ffebld expr, tree *length)
return item;
}
-#endif
/* Generate call to run-time function.
The first arg is the GNU Fortran Run-Time function index, the second
@@ -10765,7 +10359,6 @@ ffecom_arg_ptr_to_expr (ffebld expr, tree *length)
(WITHOUT TREE_SIDE_EFFECTS set!) that makes the call and returns the
result (which may be void). */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
tree
ffecom_call_gfrt (ffecomGfrt ix, tree args, tree hook)
{
@@ -10775,11 +10368,9 @@ ffecom_call_gfrt (ffecomGfrt ix, tree args, tree hook)
NULL_TREE, args, NULL_TREE, NULL,
NULL, NULL_TREE, TRUE, hook);
}
-#endif
/* Transform constant-union to tree. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
tree
ffecom_constantunion (ffebldConstantUnion *cu, ffeinfoBasictype bt,
ffeinfoKindtype kt, tree tree_type)
@@ -11047,8 +10638,6 @@ ffecom_constantunion (ffebldConstantUnion *cu, ffeinfoBasictype bt,
return item;
}
-#endif
-
/* Transform expression into constant tree.
If the expression can be transformed into a tree that is constant,
@@ -11088,7 +10677,6 @@ ffecom_const_expr (ffebld expr)
/* Handy way to make a field in a struct/union. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
tree
ffecom_decl_field (tree context, tree prevfield,
const char *name, tree type)
@@ -11097,42 +10685,33 @@ ffecom_decl_field (tree context, tree prevfield,
field = build_decl (FIELD_DECL, get_identifier (name), type);
DECL_CONTEXT (field) = context;
- DECL_FRAME_SIZE (field) = 0;
+ DECL_ALIGN (field) = 0;
+ DECL_USER_ALIGN (field) = 0;
if (prevfield != NULL_TREE)
TREE_CHAIN (prevfield) = field;
return field;
}
-#endif
-
void
ffecom_close_include (FILE *f)
{
-#if FFECOM_GCC_INCLUDE
ffecom_close_include_ (f);
-#endif
}
int
ffecom_decode_include_option (char *spec)
{
-#if FFECOM_GCC_INCLUDE
return ffecom_decode_include_option_ (spec);
-#else
- return 1;
-#endif
}
/* End a compound statement (block). */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
tree
ffecom_end_compstmt (void)
{
return bison_rule_compstmt_ ();
}
-#endif /* FFECOM_targetCURRENT == FFECOM_targetGCC */
/* ffecom_end_transition -- Perform end transition on all symbols
@@ -11143,28 +10722,20 @@ ffecom_end_compstmt (void)
void
ffecom_end_transition ()
{
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
ffebld item;
-#endif
if (ffe_is_ffedebug ())
fprintf (dmpout, "; end_stmt_transition\n");
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
ffecom_list_blockdata_ = NULL;
ffecom_list_common_ = NULL;
-#endif
ffesymbol_drive (ffecom_sym_end_transition);
if (ffe_is_ffedebug ())
{
ffestorag_report ();
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- ffesymbol_report_all ();
-#endif
}
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
ffecom_start_progunit_ ();
for (item = ffecom_list_blockdata_;
@@ -11176,7 +10747,6 @@ ffecom_end_transition ()
tree dt;
tree t;
tree var;
- int yes;
static int number = 0;
callee = ffebld_head (item);
@@ -11188,13 +10758,11 @@ ffecom_end_transition ()
t = ffesymbol_hook (s).decl_tree;
}
- yes = suspend_momentary ();
-
dt = build_pointer_type (TREE_TYPE (t));
var = build_decl (VAR_DECL,
ffecom_get_invented_identifier ("__g77_forceload_%d",
- NULL, number++),
+ number++),
dt);
DECL_EXTERNAL (var) = 0;
TREE_STATIC (var) = 1;
@@ -11207,8 +10775,6 @@ ffecom_end_transition ()
t = ffecom_1 (ADDR_EXPR, dt, t);
finish_decl (var, t, FALSE);
-
- resume_momentary (yes);
}
/* This handles any COMMON areas that weren't referenced but have, for
@@ -11220,7 +10786,6 @@ ffecom_end_transition ()
ffecom_transform_common_ (ffebld_symter (ffebld_head (item)));
ffecom_list_common_ = NULL;
-#endif
}
/* ffecom_exec_transition -- Perform exec transition on all symbols
@@ -11246,9 +10811,6 @@ ffecom_exec_transition ()
if (ffe_is_ffedebug ())
{
ffestorag_report ();
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- ffesymbol_report_all ();
-#endif
}
if (inhibited)
@@ -11260,7 +10822,6 @@ ffecom_exec_transition ()
Convert dest and source using ffecom_expr, then join them
with an ASSIGN op and pass the whole thing to expand_expr_stmt. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
void
ffecom_expand_let_stmt (ffebld dest, ffebld source)
{
@@ -11370,7 +10931,6 @@ ffecom_expand_let_stmt (ffebld dest, ffebld source)
source);
}
-#endif
/* ffecom_expr -- Transform expr into gcc tree
tree t;
@@ -11380,41 +10940,34 @@ ffecom_expand_let_stmt (ffebld dest, ffebld source)
Recursive descent on expr while making corresponding tree nodes and
attaching type info and such. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
tree
ffecom_expr (ffebld expr)
{
return ffecom_expr_ (expr, NULL_TREE, NULL, NULL, FALSE, FALSE);
}
-#endif
/* Like ffecom_expr, but return tree usable for assigned GOTO or FORMAT. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
tree
ffecom_expr_assign (ffebld expr)
{
return ffecom_expr_ (expr, NULL_TREE, NULL, NULL, TRUE, FALSE);
}
-#endif
/* Like ffecom_expr_rw, but return tree usable for ASSIGN. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
tree
ffecom_expr_assign_w (ffebld expr)
{
return ffecom_expr_ (expr, NULL_TREE, NULL, NULL, TRUE, FALSE);
}
-#endif
/* Transform expr for use as into read/write tree and stabilize the
reference. Not for use on CHARACTER expressions.
Recursive descent on expr while making corresponding tree nodes and
attaching type info and such. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
tree
ffecom_expr_rw (tree type, ffebld expr)
{
@@ -11425,14 +10978,12 @@ ffecom_expr_rw (tree type, ffebld expr)
return stabilize_reference (ffecom_expr (expr));
}
-#endif
/* Transform expr for use as into write tree and stabilize the
reference. Not for use on CHARACTER expressions.
Recursive descent on expr while making corresponding tree nodes and
attaching type info and such. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
tree
ffecom_expr_w (tree type, ffebld expr)
{
@@ -11443,10 +10994,8 @@ ffecom_expr_w (tree type, ffebld expr)
return stabilize_reference (ffecom_expr (expr));
}
-#endif
/* Do global stuff. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
void
ffecom_finish_compile ()
{
@@ -11456,10 +11005,8 @@ ffecom_finish_compile ()
ffeglobal_drive (ffecom_finish_global_);
}
-#endif
/* Public entry point for front end to access finish_decl. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
void
ffecom_finish_decl (tree decl, tree init, bool is_top_level)
{
@@ -11467,10 +11014,8 @@ ffecom_finish_decl (tree decl, tree init, bool is_top_level)
finish_decl (decl, init, FALSE);
}
-#endif
/* Finish a program unit. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
void
ffecom_finish_progunit ()
{
@@ -11482,60 +11027,22 @@ ffecom_finish_progunit ()
finish_function (0);
}
-#endif
-/* Wrapper for get_identifier. pattern is sprintf-like, assumed to contain
- one %s if text is not NULL, assumed to contain one %d if number is
- not -1. If both are assumed, the %s is assumed to precede the %d. */
+/* Wrapper for get_identifier. pattern is sprintf-like. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
tree
-ffecom_get_invented_identifier (const char *pattern, const char *text,
- int number)
+ffecom_get_invented_identifier (const char *pattern, ...)
{
tree decl;
char *nam;
- mallocSize lenlen;
- char space[66];
-
- lenlen = 0;
- if (text)
- lenlen += strlen (text);
- if (number != -1)
- lenlen += 20;
- if (text || number != -1)
- {
- lenlen += strlen (pattern);
- if (lenlen > ARRAY_SIZE (space))
- nam = malloc_new_ks (malloc_pool_image (), pattern, lenlen);
- else
- nam = &space[0];
- }
- else
- {
- lenlen = 0;
- nam = (char *) pattern;
- }
-
- if (text == NULL)
- {
- if (number != -1)
- sprintf (&nam[0], pattern, number);
- }
- else
- {
- if (number == -1)
- sprintf (&nam[0], pattern, text);
- else
- sprintf (&nam[0], pattern, text, number);
- }
+ va_list ap;
+ va_start (ap, pattern);
+ if (vasprintf (&nam, pattern, ap) == 0)
+ abort ();
+ va_end (ap);
decl = get_identifier (nam);
-
- if (lenlen > ARRAY_SIZE (space))
- malloc_kill_ks (malloc_pool_image (), nam, lenlen);
-
+ free (nam);
IDENTIFIER_INVENTED (decl) = 1;
-
return decl;
}
@@ -11643,6 +11150,10 @@ ffecom_init_0 ()
tree field;
ffetype type;
ffetype base_type;
+ tree double_ftype_double;
+ tree float_ftype_float;
+ tree ldouble_ftype_ldouble;
+ tree ffecom_tree_ptr_to_fun_type_void;
/* This block of code comes from the now-obsolete cktyps.c. It checks
whether the compiler environment is buggy in known ways, some of which
@@ -11650,16 +11161,16 @@ ffecom_init_0 ()
if (ffe_is_do_internal_checks ())
{
- static char names[][12]
+ static const char names[][12]
=
{"bar", "bletch", "foo", "foobar"};
- char *name;
+ const char *name;
unsigned long ul;
double fl;
name = bsearch ("foo", &names[0], ARRAY_SIZE (names), sizeof (names[0]),
- (int (*)()) strcmp);
- if (name != (char *) &names[2])
+ (int (*)(const void *, const void *)) strcmp);
+ if (name != &names[0][2])
{
assert ("bsearch doesn't work, #define FFEPROJ_BSEARCH 0 in proj.h"
== NULL);
@@ -11683,10 +11194,6 @@ ffecom_init_0 ()
}
}
-#if FFECOM_GCC_INCLUDE
- ffecom_initialize_char_syntax_ ();
-#endif
-
ffecom_outer_function_decl_ = NULL_TREE;
current_function_decl = NULL_TREE;
named_labels = NULL_TREE;
@@ -11697,41 +11204,27 @@ ffecom_init_0 ()
global_binding_level = current_binding_level;
current_binding_level->prep_state = 2;
- /* Define `int' and `char' first so that dbx will output them first. */
+ build_common_tree_nodes (1);
- integer_type_node = make_signed_type (INT_TYPE_SIZE);
+ /* Define `int' and `char' first so that dbx will output them first. */
pushdecl (build_decl (TYPE_DECL, get_identifier ("int"),
integer_type_node));
-
+ /* CHARACTER*1 is unsigned in ICHAR contexts. */
char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
pushdecl (build_decl (TYPE_DECL, get_identifier ("char"),
char_type_node));
-
- long_integer_type_node = make_signed_type (LONG_TYPE_SIZE);
pushdecl (build_decl (TYPE_DECL, get_identifier ("long int"),
long_integer_type_node));
-
- unsigned_type_node = make_unsigned_type (INT_TYPE_SIZE);
pushdecl (build_decl (TYPE_DECL, get_identifier ("unsigned int"),
unsigned_type_node));
-
- long_unsigned_type_node = make_unsigned_type (LONG_TYPE_SIZE);
pushdecl (build_decl (TYPE_DECL, get_identifier ("long unsigned int"),
long_unsigned_type_node));
-
- long_long_integer_type_node = make_signed_type (LONG_LONG_TYPE_SIZE);
pushdecl (build_decl (TYPE_DECL, get_identifier ("long long int"),
long_long_integer_type_node));
-
- long_long_unsigned_type_node = make_unsigned_type (LONG_LONG_TYPE_SIZE);
pushdecl (build_decl (TYPE_DECL, get_identifier ("long long unsigned int"),
long_long_unsigned_type_node));
-
- short_integer_type_node = make_signed_type (SHORT_TYPE_SIZE);
pushdecl (build_decl (TYPE_DECL, get_identifier ("short int"),
short_integer_type_node));
-
- short_unsigned_type_node = make_unsigned_type (SHORT_TYPE_SIZE);
pushdecl (build_decl (TYPE_DECL, get_identifier ("short unsigned int"),
short_unsigned_type_node));
@@ -11743,73 +11236,44 @@ ffecom_init_0 ()
ffecom_typesize_pointer_
= TREE_INT_CST_LOW (TYPE_SIZE (sizetype)) / BITS_PER_UNIT;
- error_mark_node = make_node (ERROR_MARK);
- TREE_TYPE (error_mark_node) = error_mark_node;
+ build_common_tree_nodes_2 (0);
/* Define both `signed char' and `unsigned char'. */
- signed_char_type_node = make_signed_type (CHAR_TYPE_SIZE);
pushdecl (build_decl (TYPE_DECL, get_identifier ("signed char"),
signed_char_type_node));
- unsigned_char_type_node = make_unsigned_type (CHAR_TYPE_SIZE);
pushdecl (build_decl (TYPE_DECL, get_identifier ("unsigned char"),
unsigned_char_type_node));
- float_type_node = make_node (REAL_TYPE);
- TYPE_PRECISION (float_type_node) = FLOAT_TYPE_SIZE;
- layout_type (float_type_node);
pushdecl (build_decl (TYPE_DECL, get_identifier ("float"),
float_type_node));
-
- double_type_node = make_node (REAL_TYPE);
- TYPE_PRECISION (double_type_node) = DOUBLE_TYPE_SIZE;
- layout_type (double_type_node);
pushdecl (build_decl (TYPE_DECL, get_identifier ("double"),
double_type_node));
-
- long_double_type_node = make_node (REAL_TYPE);
- TYPE_PRECISION (long_double_type_node) = LONG_DOUBLE_TYPE_SIZE;
- layout_type (long_double_type_node);
pushdecl (build_decl (TYPE_DECL, get_identifier ("long double"),
long_double_type_node));
+ /* For now, override what build_common_tree_nodes has done. */
complex_integer_type_node = ffecom_make_complex_type_ (integer_type_node);
+ complex_float_type_node = ffecom_make_complex_type_ (float_type_node);
+ complex_double_type_node = ffecom_make_complex_type_ (double_type_node);
+ complex_long_double_type_node
+ = ffecom_make_complex_type_ (long_double_type_node);
+
pushdecl (build_decl (TYPE_DECL, get_identifier ("complex int"),
complex_integer_type_node));
-
- complex_float_type_node = ffecom_make_complex_type_ (float_type_node);
pushdecl (build_decl (TYPE_DECL, get_identifier ("complex float"),
complex_float_type_node));
-
- complex_double_type_node = ffecom_make_complex_type_ (double_type_node);
pushdecl (build_decl (TYPE_DECL, get_identifier ("complex double"),
complex_double_type_node));
-
- complex_long_double_type_node = ffecom_make_complex_type_ (long_double_type_node);
pushdecl (build_decl (TYPE_DECL, get_identifier ("complex long double"),
complex_long_double_type_node));
- integer_zero_node = build_int_2 (0, 0);
- TREE_TYPE (integer_zero_node) = integer_type_node;
- integer_one_node = build_int_2 (1, 0);
- TREE_TYPE (integer_one_node) = integer_type_node;
-
- size_zero_node = build_int_2 (0, 0);
- TREE_TYPE (size_zero_node) = sizetype;
- size_one_node = build_int_2 (1, 0);
- TREE_TYPE (size_one_node) = sizetype;
-
- void_type_node = make_node (VOID_TYPE);
pushdecl (build_decl (TYPE_DECL, get_identifier ("void"),
void_type_node));
- layout_type (void_type_node); /* Uses integer_zero_node */
/* We are not going to have real types in C with less than byte alignment,
so we might as well not have any types that claim to have it. */
TYPE_ALIGN (void_type_node) = BITS_PER_UNIT;
-
- null_pointer_node = build_int_2 (0, 0);
- TREE_TYPE (null_pointer_node) = build_pointer_type (void_type_node);
- layout_type (TREE_TYPE (null_pointer_node));
+ TYPE_USER_ALIGN (void_type_node) = 0;
string_type_node = build_pointer_type (char_type_node);
@@ -12129,7 +11593,7 @@ ffecom_init_0 ()
/* Set up pointer types. */
if (ffecom_pointer_kind_ == FFEINFO_basictypeNONE)
- fatal ("no INTEGER type can hold a pointer on this configuration");
+ fatal_error ("no INTEGER type can hold a pointer on this configuration");
else if (0 && ffe_is_do_internal_checks ())
fprintf (stderr, "Pointer type kt=%d\n", ffecom_pointer_kind_);
ffetype_set_kind (ffeinfo_type (FFEINFO_basictypeINTEGER,
@@ -12230,7 +11694,8 @@ ffecom_init_0 ()
ffecom_tree_type[i][j]);
DECL_CONTEXT (ffecom_multi_fields_[i][j])
= ffecom_multi_type_node_;
- DECL_FRAME_SIZE (ffecom_multi_fields_[i][j]) = 0;
+ DECL_ALIGN (ffecom_multi_fields_[i][j]) = 0;
+ DECL_USER_ALIGN (ffecom_multi_fields_[i][j]) = 0;
TREE_CHAIN (ffecom_multi_fields_[i][j]) = field;
field = ffecom_multi_fields_[i][j];
}
@@ -12249,27 +11714,25 @@ ffecom_init_0 ()
= build_function_type (void_type_node, NULL_TREE);
builtin_function ("__builtin_sqrtf", float_ftype_float,
- BUILT_IN_FSQRT, "sqrtf");
- builtin_function ("__builtin_fsqrt", double_ftype_double,
- BUILT_IN_FSQRT, "sqrt");
+ BUILT_IN_SQRTF, BUILT_IN_NORMAL, "sqrtf");
+ builtin_function ("__builtin_sqrt", double_ftype_double,
+ BUILT_IN_SQRT, BUILT_IN_NORMAL, "sqrt");
builtin_function ("__builtin_sqrtl", ldouble_ftype_ldouble,
- BUILT_IN_FSQRT, "sqrtl");
+ BUILT_IN_SQRTL, BUILT_IN_NORMAL, "sqrtl");
builtin_function ("__builtin_sinf", float_ftype_float,
- BUILT_IN_SIN, "sinf");
+ BUILT_IN_SINF, BUILT_IN_NORMAL, "sinf");
builtin_function ("__builtin_sin", double_ftype_double,
- BUILT_IN_SIN, "sin");
+ BUILT_IN_SIN, BUILT_IN_NORMAL, "sin");
builtin_function ("__builtin_sinl", ldouble_ftype_ldouble,
- BUILT_IN_SIN, "sinl");
+ BUILT_IN_SINL, BUILT_IN_NORMAL, "sinl");
builtin_function ("__builtin_cosf", float_ftype_float,
- BUILT_IN_COS, "cosf");
+ BUILT_IN_COSF, BUILT_IN_NORMAL, "cosf");
builtin_function ("__builtin_cos", double_ftype_double,
- BUILT_IN_COS, "cos");
+ BUILT_IN_COS, BUILT_IN_NORMAL, "cos");
builtin_function ("__builtin_cosl", ldouble_ftype_ldouble,
- BUILT_IN_COS, "cosl");
+ BUILT_IN_COSL, BUILT_IN_NORMAL, "cosl");
-#if BUILT_FOR_270
pedantic_lvalues = FALSE;
-#endif
ffecom_f2c_make_type_ (&ffecom_f2c_integer_type_node,
FFECOM_f2cINTEGER,
@@ -12359,9 +11822,9 @@ ffecom_init_0 ()
(int) FLOAT_TYPE_SIZE);
warning ("and pointers are %d bits wide, but g77 doesn't yet work",
(int) TREE_INT_CST_LOW (TYPE_SIZE (TREE_TYPE (null_pointer_node))));
- warning ("properly unless they all are 32 bits wide.");
+ warning ("properly unless they all are 32 bits wide");
warning ("Please keep this in mind before you report bugs. g77 should");
- warning ("support non-32-bit machines better as of version 0.6.");
+ warning ("support non-32-bit machines better as of version 0.6");
}
#endif
@@ -12385,12 +11848,10 @@ ffecom_init_0 ()
#endif
}
-#endif
/* ffecom_init_2 -- Initialize
ffecom_init_2(); */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
void
ffecom_init_2 ()
{
@@ -12406,7 +11867,6 @@ ffecom_init_2 ()
ffecom_multi_retval_ = NULL_TREE;
}
-#endif
/* ffecom_list_expr -- Transform list of exprs into gcc tree
tree t;
@@ -12415,7 +11875,6 @@ ffecom_init_2 ()
List of actual args is transformed into corresponding gcc backend list. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
tree
ffecom_list_expr (ffebld expr)
{
@@ -12447,7 +11906,6 @@ ffecom_list_expr (ffebld expr)
return list;
}
-#endif
/* ffecom_list_ptr_to_expr -- Transform list of exprs into gcc tree
tree t;
@@ -12457,7 +11915,6 @@ ffecom_list_expr (ffebld expr)
List of actual args is transformed into corresponding gcc backend list for
use in calling an external procedure (vs. a statement function). */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
tree
ffecom_list_ptr_to_expr (ffebld expr)
{
@@ -12489,10 +11946,8 @@ ffecom_list_ptr_to_expr (ffebld expr)
return list;
}
-#endif
/* Obtain gcc's LABEL_DECL tree for label. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
tree
ffecom_lookup_label (ffelab label)
{
@@ -12515,26 +11970,21 @@ ffecom_lookup_label (ffelab label)
break;
case FFELAB_typeFORMAT:
- push_obstacks_nochange ();
- end_temporary_allocation ();
-
glabel = build_decl (VAR_DECL,
ffecom_get_invented_identifier
- ("__g77_format_%d", NULL,
- (int) ffelab_value (label)),
+ ("__g77_format_%d", (int) ffelab_value (label)),
build_type_variant (build_array_type
(char_type_node,
NULL_TREE),
1, 0));
TREE_CONSTANT (glabel) = 1;
TREE_STATIC (glabel) = 1;
- DECL_CONTEXT (glabel) = 0;
+ DECL_CONTEXT (glabel) = current_function_decl;
DECL_INITIAL (glabel) = NULL;
- make_decl_rtl (glabel, NULL, 0);
+ make_decl_rtl (glabel, NULL);
expand_decl (glabel);
- resume_temporary_allocation ();
- pop_obstacks ();
+ ffecom_save_tree_forever (glabel);
break;
@@ -12557,13 +12007,11 @@ ffecom_lookup_label (ffelab label)
return glabel;
}
-#endif
/* Stabilizes the arguments. Don't use this if the lhs and rhs come from
a single source specification (as in the fourth argument of MVBITS).
If the type is NULL_TREE, the type of lhs is used to make the type of
the MODIFY_EXPR. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
tree
ffecom_modify (tree newtype, tree lhs,
tree rhs)
@@ -12580,16 +12028,12 @@ ffecom_modify (tree newtype, tree lhs,
return ffecom_2s (MODIFY_EXPR, newtype, lhs, rhs);
}
-#endif
-
/* Register source file name. */
void
-ffecom_file (char *name)
+ffecom_file (const char *name)
{
-#if FFECOM_GCC_INCLUDE
ffecom_file_ (name);
-#endif
}
/* ffecom_notify_init_storage -- An aggregate storage is now fully init'ed
@@ -12624,10 +12068,6 @@ void
ffecom_notify_init_storage (ffestorag st)
{
ffebld init; /* The initialization expression. */
-#if 0 && FFECOM_targetCURRENT == FFECOM_targetGCC
- ffetargetOffset size; /* The size of the entity. */
- ffetargetAlign pad; /* Its initial padding. */
-#endif
if (ffestorag_init (st) == NULL)
{
@@ -12635,50 +12075,8 @@ ffecom_notify_init_storage (ffestorag st)
assert (init != NULL);
ffestorag_set_accretion (st, NULL);
ffestorag_set_accretes (st, 0);
-
-#if 0 && FFECOM_targetCURRENT == FFECOM_targetGCC
- /* For GNU backend, just turn ACCTER into ARRTER and proceed. */
- size = ffebld_accter_size (init);
- pad = ffebld_accter_pad (init);
- ffebit_kill (ffebld_accter_bits (init));
- ffebld_set_op (init, FFEBLD_opARRTER);
- ffebld_set_arrter (init, ffebld_accter (init));
- ffebld_arrter_set_size (init, size);
- ffebld_arrter_set_pad (init, size);
-#endif
-
-#if FFECOM_TWOPASS
ffestorag_set_init (st, init);
-#endif
}
-#if FFECOM_ONEPASS
- else
- init = ffestorag_init (st);
-#endif
-
-#if FFECOM_ONEPASS /* Process the inits, wipe 'em out. */
- ffestorag_set_init (st, ffebld_new_any ());
-
- if (ffebld_op (init) == FFEBLD_opANY)
- return; /* Oh, we already did this! */
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- {
- ffesymbol s;
-
- if (ffestorag_symbol (st) != NULL)
- s = ffestorag_symbol (st);
- else
- s = ffestorag_typesymbol (st);
-
- fprintf (dmpout, "= initialize_storage \"%s\" ",
- (s != NULL) ? ffesymbol_text (s) : "(unnamed)");
- ffebld_dump (init);
- fputc ('\n', dmpout);
- }
-#endif
-
-#endif /* if FFECOM_ONEPASS */
}
/* ffecom_notify_init_symbol -- A symbol is now fully init'ed
@@ -12713,10 +12111,6 @@ void
ffecom_notify_init_symbol (ffesymbol s)
{
ffebld init; /* The initialization expression. */
-#if 0 && FFECOM_targetCURRENT == FFECOM_targetGCC
- ffetargetOffset size; /* The size of the entity. */
- ffetargetAlign pad; /* Its initial padding. */
-#endif
if (ffesymbol_storage (s) == NULL)
return; /* Do nothing until COMMON/EQUIVALENCE
@@ -12727,40 +12121,8 @@ ffecom_notify_init_symbol (ffesymbol s)
{
ffesymbol_set_accretion (s, NULL);
ffesymbol_set_accretes (s, 0);
-
-#if 0 && FFECOM_targetCURRENT == FFECOM_targetGCC
- /* For GNU backend, just turn ACCTER into ARRTER and proceed. */
- size = ffebld_accter_size (init);
- pad = ffebld_accter_pad (init);
- ffebit_kill (ffebld_accter_bits (init));
- ffebld_set_op (init, FFEBLD_opARRTER);
- ffebld_set_arrter (init, ffebld_accter (init));
- ffebld_arrter_set_size (init, size);
- ffebld_arrter_set_pad (init, size);
-#endif
-
-#if FFECOM_TWOPASS
ffesymbol_set_init (s, init);
-#endif
}
-#if FFECOM_ONEPASS
- else
- init = ffesymbol_init (s);
-#endif
-
-#if FFECOM_ONEPASS
- ffesymbol_set_init (s, ffebld_new_any ());
-
- if (ffebld_op (init) == FFEBLD_opANY)
- return; /* Oh, we already did this! */
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fprintf (dmpout, "= initialize_symbol \"%s\" ", ffesymbol_text (s));
- ffebld_dump (init);
- fputc ('\n', dmpout);
-#endif
-
-#endif /* if FFECOM_ONEPASS */
}
/* ffecom_notify_primary_entry -- Learn which is the primary entry point
@@ -12792,7 +12154,6 @@ ffecom_notify_primary_entry (ffesymbol s)
fprintf (stderr, " %s:\n", ffesymbol_text (s));
}
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
if (ffecom_primary_entry_kind_ == FFEINFO_kindSUBROUTINE)
{
ffebld list;
@@ -12810,17 +12171,12 @@ ffecom_notify_primary_entry (ffesymbol s)
}
}
}
-#endif
}
FILE *
ffecom_open_include (char *name, ffewhereLine l, ffewhereColumn c)
{
-#if FFECOM_GCC_INCLUDE
return ffecom_open_include_ (name, l, c);
-#else
- return fopen (name, "r");
-#endif
}
/* ffecom_ptr_to_expr -- Transform expr into gcc tree with & in front
@@ -12831,7 +12187,6 @@ ffecom_open_include (char *name, ffewhereLine l, ffewhereColumn c)
Like ffecom_expr, but sticks address-of in front of most things. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
tree
ffecom_ptr_to_expr (ffebld expr)
{
@@ -12934,7 +12289,6 @@ ffecom_ptr_to_expr (ffebld expr)
return error_mark_node;
}
-#endif
/* Obtain a temp var with given data type.
size is FFETARGET_charactersizeNONE for a non-CHARACTER type
@@ -12942,12 +12296,10 @@ ffecom_ptr_to_expr (ffebld expr)
elements is -1 for a scalar or > 0 for an array of type. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
tree
ffecom_make_tempvar (const char *commentary, tree type,
ffetargetCharacterSize size, int elements)
{
- int yes;
tree t;
static int mynumber;
@@ -12956,8 +12308,6 @@ ffecom_make_tempvar (const char *commentary, tree type,
if (type == error_mark_node)
return error_mark_node;
- yes = suspend_momentary ();
-
if (size != FFETARGET_charactersizeNONE)
type = build_array_type (type,
build_range_type (ffecom_f2c_ftnlen_type_node,
@@ -12978,11 +12328,8 @@ ffecom_make_tempvar (const char *commentary, tree type,
t = start_decl (t, FALSE);
finish_decl (t, NULL_TREE, FALSE);
- resume_momentary (yes);
-
return t;
}
-#endif
/* Prepare argument pointer to expression.
@@ -13355,7 +12702,6 @@ ffecom_ptr_to_const_expr (ffebld expr)
meaning no return value or the caller expects it to be returned somewhere
else (which is handled by other parts of this module). */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
tree
ffecom_return_expr (ffebld expr)
{
@@ -13426,30 +12772,24 @@ ffecom_return_expr (ffebld expr)
return rtn;
}
-#endif
/* Do save_expr only if tree is not error_mark_node. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
tree
ffecom_save_tree (tree t)
{
return save_expr (t);
}
-#endif
/* Start a compound statement (block). */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
void
ffecom_start_compstmt (void)
{
bison_rule_pushlevel_ ();
}
-#endif /* FFECOM_targetCURRENT == FFECOM_targetGCC */
/* Public entry point for front end to access start_decl. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
tree
ffecom_start_decl (tree decl, bool is_initialized)
{
@@ -13457,7 +12797,6 @@ ffecom_start_decl (tree decl, bool is_initialized)
return start_decl (decl, FALSE);
}
-#endif
/* ffecom_sym_commit -- Symbol's state being committed to reality
ffesymbol s;
@@ -13466,14 +12805,12 @@ ffecom_start_decl (tree decl, bool is_initialized)
Does whatever the backend needs when a symbol is committed after having
been backtrackable for a period of time. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
void
ffecom_sym_commit (ffesymbol s UNUSED)
{
assert (!ffesymbol_retractable ());
}
-#endif
/* ffecom_sym_end_transition -- Perform end transition on all symbols
ffecom_sym_end_transition();
@@ -13493,7 +12830,6 @@ ffecom_sym_end_transition (ffesymbol s)
s = ffest_sym_end_transition (s);
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
if ((ffesymbol_kind (s) == FFEINFO_kindBLOCKDATA)
&& (ffesymbol_where (s) == FFEINFO_whereGLOBAL))
{
@@ -13503,7 +12839,6 @@ ffecom_sym_end_transition (ffesymbol s)
FFEINTRIN_impNONE),
ffecom_list_blockdata_);
}
-#endif
/* This is where we finally notice that a symbol has partial initialization
and finalize it. */
@@ -13521,7 +12856,6 @@ ffecom_sym_end_transition (ffesymbol s)
ffecom_notify_init_storage (st);
}
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
if ((ffesymbol_kind (s) == FFEINFO_kindCOMMON)
&& (ffesymbol_where (s) == FFEINFO_whereLOCAL)
&& (ffesymbol_storage (s) != NULL))
@@ -13532,7 +12866,6 @@ ffecom_sym_end_transition (ffesymbol s)
FFEINTRIN_impNONE),
ffecom_list_common_);
}
-#endif
return s;
}
@@ -13610,7 +12943,6 @@ ffecom_sym_learned (ffesymbol s)
Does whatever the backend needs when a symbol is retracted after having
been backtrackable for a period of time. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
void
ffecom_sym_retract (ffesymbol s UNUSED)
{
@@ -13642,10 +12974,8 @@ ffecom_sym_retract (ffesymbol s UNUSED)
#endif
}
-#endif
/* Create temporary gcc label. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
tree
ffecom_temp_label ()
{
@@ -13654,7 +12984,6 @@ ffecom_temp_label ()
glabel = build_decl (LABEL_DECL,
ffecom_get_invented_identifier ("__g77_label_%d",
- NULL,
mynumber++),
void_type_node);
DECL_CONTEXT (glabel) = current_function_decl;
@@ -13663,35 +12992,29 @@ ffecom_temp_label ()
return glabel;
}
-#endif
/* Return an expression that is usable as an arg in a conditional context
(IF, DO WHILE, .NOT., and so on).
Use the one provided for the back end as of >2.6.0. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
tree
ffecom_truth_value (tree expr)
{
return truthvalue_conversion (expr);
}
-#endif
/* Return the inversion of a truth value (the inversion of what
ffecom_truth_value builds).
Apparently invert_truthvalue, which is properly in the back end, is
enough for now, so just use it. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
tree
ffecom_truth_value_invert (tree expr)
{
return invert_truthvalue (ffecom_truth_value (expr));
}
-#endif
-
/* Return the tree that is the type of the expression, as would be
returned in TREE_TYPE(ffecom_expr(expr)), without otherwise
transforming the expression, generating temporaries, etc. */
@@ -13767,7 +13090,6 @@ ffecom_type_expr (ffebld expr)
run time with the entrypoint number (0 for SUBROUTINE/FUNCTION, 1 for
first ENTRY statement, and so on). */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
tree
ffecom_which_entrypoint_decl ()
{
@@ -13775,8 +13097,6 @@ ffecom_which_entrypoint_decl ()
return ffecom_which_entrypoint_decl_;
}
-
-#endif
/* The following sections consists of private and public functions
that have the same names and perform roughly the same functions
@@ -13793,15 +13113,12 @@ ffecom_which_entrypoint_decl ()
Functions named after rule "foo:" in c-parse.y are named
"bison_rule_foo_" so they are easy to find. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
-
static void
bison_rule_pushlevel_ ()
{
emit_line_note (input_filename, lineno);
pushlevel (0);
clear_last_expr ();
- push_momentary ();
expand_start_bindings (0);
}
@@ -13818,7 +13135,6 @@ bison_rule_compstmt_ ()
emit_line_note (input_filename, lineno);
expand_end_bindings (getdecls (), keep, 0);
t = poplevel (keep, 1, 0);
- pop_momentary ();
return t;
}
@@ -13831,23 +13147,20 @@ bison_rule_compstmt_ ()
If LIBRARY_NAME is nonzero, use that for DECL_ASSEMBLER_NAME,
the name to be called if we can't opencode the function. */
-static tree
-builtin_function (const char *name, tree type,
- enum built_in_function function_code,
+tree
+builtin_function (const char *name, tree type, int function_code,
+ enum built_in_class class,
const char *library_name)
{
tree decl = build_decl (FUNCTION_DECL, get_identifier (name), type);
DECL_EXTERNAL (decl) = 1;
TREE_PUBLIC (decl) = 1;
if (library_name)
- DECL_ASSEMBLER_NAME (decl) = get_identifier (library_name);
- make_decl_rtl (decl, NULL_PTR, 1);
+ SET_DECL_ASSEMBLER_NAME (decl, get_identifier (library_name));
+ make_decl_rtl (decl, NULL);
pushdecl (decl);
- if (function_code != NOT_BUILT_IN)
- {
- DECL_BUILT_IN (decl) = 1;
- DECL_FUNCTION_CODE (decl) = function_code;
- }
+ DECL_BUILT_IN_CLASS (decl) = class;
+ DECL_FUNCTION_CODE (decl) = function_code;
return decl;
}
@@ -13905,17 +13218,6 @@ duplicate_decls (tree newdecl, tree olddecl)
tree oldreturntype = TREE_TYPE (TREE_TYPE (olddecl));
tree newreturntype = TREE_TYPE (TREE_TYPE (newdecl));
- /* Make sure we put the new type in the same obstack as the old ones.
- If the old types are not both in the same obstack, use the
- permanent one. */
- if (TYPE_OBSTACK (oldtype) == TYPE_OBSTACK (newtype))
- push_obstacks (TYPE_OBSTACK (oldtype), TYPE_OBSTACK (oldtype));
- else
- {
- push_obstacks_nochange ();
- end_temporary_allocation ();
- }
-
if (TYPE_MODE (oldreturntype) == TYPE_MODE (newreturntype))
{
/* Function types may be shared, so we can't just modify
@@ -13928,8 +13230,6 @@ duplicate_decls (tree newdecl, tree olddecl)
if (types_match)
TREE_TYPE (olddecl) = newtype;
}
-
- pop_obstacks ();
}
if (!types_match)
return 0;
@@ -13958,17 +13258,6 @@ duplicate_decls (tree newdecl, tree olddecl)
if (types_match)
{
- /* Make sure we put the new type in the same obstack as the old ones.
- If the old types are not both in the same obstack, use the permanent
- one. */
- if (TYPE_OBSTACK (oldtype) == TYPE_OBSTACK (newtype))
- push_obstacks (TYPE_OBSTACK (oldtype), TYPE_OBSTACK (oldtype));
- else
- {
- push_obstacks_nochange ();
- end_temporary_allocation ();
- }
-
/* Merge the data types specified in the two decls. */
if (TREE_CODE (newdecl) != FUNCTION_DECL || !DECL_BUILT_IN (olddecl))
TREE_TYPE (newdecl)
@@ -13989,13 +13278,17 @@ duplicate_decls (tree newdecl, tree olddecl)
{
/* Since the type is OLDDECL's, make OLDDECL's size go with. */
DECL_SIZE (newdecl) = DECL_SIZE (olddecl);
+ DECL_SIZE_UNIT (newdecl) = DECL_SIZE_UNIT (olddecl);
if (TREE_CODE (olddecl) != FUNCTION_DECL)
if (DECL_ALIGN (olddecl) > DECL_ALIGN (newdecl))
- DECL_ALIGN (newdecl) = DECL_ALIGN (olddecl);
+ {
+ DECL_ALIGN (newdecl) = DECL_ALIGN (olddecl);
+ DECL_USER_ALIGN (newdecl) |= DECL_USER_ALIGN (olddecl);
+ }
}
/* Keep the old rtl since we can safely use it. */
- DECL_RTL (newdecl) = DECL_RTL (olddecl);
+ COPY_DECL_RTL (olddecl, newdecl);
/* Merge the type qualifiers. */
if (DECL_BUILT_IN_NONANSI (olddecl) && TREE_THIS_VOLATILE (olddecl)
@@ -14040,15 +13333,11 @@ duplicate_decls (tree newdecl, tree olddecl)
if (DECL_SECTION_NAME (newdecl) == NULL_TREE)
DECL_SECTION_NAME (newdecl) = DECL_SECTION_NAME (olddecl);
-#if BUILT_FOR_270
if (TREE_CODE (newdecl) == FUNCTION_DECL)
{
DECL_STATIC_CONSTRUCTOR(newdecl) |= DECL_STATIC_CONSTRUCTOR(olddecl);
DECL_STATIC_DESTRUCTOR (newdecl) |= DECL_STATIC_DESTRUCTOR (olddecl);
}
-#endif
-
- pop_obstacks ();
}
/* If cannot merge, then use the new type and qualifiers,
and don't preserve the old rtl. */
@@ -14098,7 +13387,7 @@ duplicate_decls (tree newdecl, tree olddecl)
&& (!types_match || new_is_definition))
{
TREE_TYPE (olddecl) = TREE_TYPE (newdecl);
- DECL_BUILT_IN (olddecl) = 0;
+ DECL_BUILT_IN_CLASS (olddecl) = NOT_BUILT_IN;
}
/* If redeclaring a builtin function, and not a definition,
@@ -14108,11 +13397,9 @@ duplicate_decls (tree newdecl, tree olddecl)
{
if (DECL_BUILT_IN (olddecl))
{
- DECL_BUILT_IN (newdecl) = 1;
+ DECL_BUILT_IN_CLASS (newdecl) = DECL_BUILT_IN_CLASS (olddecl);
DECL_FUNCTION_CODE (newdecl) = DECL_FUNCTION_CODE (olddecl);
}
- else
- DECL_FRAME_SIZE (newdecl) = DECL_FRAME_SIZE (olddecl);
DECL_RESULT (newdecl) = DECL_RESULT (olddecl);
DECL_INITIAL (newdecl) = DECL_INITIAL (olddecl);
@@ -14144,7 +13431,6 @@ finish_decl (tree decl, tree init, bool is_top_level)
{
register tree type = TREE_TYPE (decl);
int was_incomplete = (DECL_SIZE (decl) == 0);
- int temporary = allocation_temporary_p ();
bool at_top_level = (current_binding_level == global_binding_level);
bool top_level = is_top_level || at_top_level;
@@ -14173,11 +13459,6 @@ finish_decl (tree decl, tree init, bool is_top_level)
}
}
- /* Pop back to the obstack that is current for this binding level. This is
- because MAXINDEX, rtl, etc. to be made below must go in the permanent
- obstack. But don't discard the temporary data yet. */
- pop_obstacks ();
-
/* Deduce size of array from initialization, if not already known */
if (TREE_CODE (type) == ARRAY_TYPE
@@ -14252,76 +13533,11 @@ finish_decl (tree decl, tree init, bool is_top_level)
}
else if (TREE_CODE (decl) == TYPE_DECL)
{
- rest_of_decl_compilation (decl, NULL_PTR,
+ rest_of_decl_compilation (decl, NULL,
DECL_CONTEXT (decl) == 0,
0);
}
- /* This test used to include TREE_PERMANENT, however, we have the same
- problem with initializers at the function level. Such initializers get
- saved until the end of the function on the momentary_obstack. */
- if (!(TREE_CODE (decl) == FUNCTION_DECL && DECL_INLINE (decl))
- && temporary
- /* DECL_INITIAL is not defined in PARM_DECLs, since it shares space with
- DECL_ARG_TYPE. */
- && TREE_CODE (decl) != PARM_DECL)
- {
- /* We need to remember that this array HAD an initialization, but
- discard the actual temporary nodes, since we can't have a permanent
- node keep pointing to them. */
- /* We make an exception for inline functions, since it's normal for a
- local extern redeclaration of an inline function to have a copy of
- the top-level decl's DECL_INLINE. */
- if ((DECL_INITIAL (decl) != 0)
- && (DECL_INITIAL (decl) != error_mark_node))
- {
- /* If this is a const variable, then preserve the
- initializer instead of discarding it so that we can optimize
- references to it. */
- /* This test used to include TREE_STATIC, but this won't be set
- for function level initializers. */
- if (TREE_READONLY (decl))
- {
- preserve_initializer ();
- /* Hack? Set the permanent bit for something that is
- permanent, but not on the permenent obstack, so as to
- convince output_constant_def to make its rtl on the
- permanent obstack. */
- TREE_PERMANENT (DECL_INITIAL (decl)) = 1;
-
- /* The initializer and DECL must have the same (or equivalent
- types), but if the initializer is a STRING_CST, its type
- might not be on the right obstack, so copy the type
- of DECL. */
- TREE_TYPE (DECL_INITIAL (decl)) = type;
- }
- else
- DECL_INITIAL (decl) = error_mark_node;
- }
- }
-
- /* If requested, warn about definitions of large data objects. */
-
- if (warn_larger_than
- && (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL)
- && !DECL_EXTERNAL (decl))
- {
- register tree decl_size = DECL_SIZE (decl);
-
- if (decl_size && TREE_CODE (decl_size) == INTEGER_CST)
- {
- unsigned units = TREE_INT_CST_LOW (decl_size) / BITS_PER_UNIT;
-
- if (units > larger_than_size)
- warning_with_decl (decl, "size of `%s' is %u bytes", units);
- }
- }
-
- /* If we have gone back from temporary to permanent allocation, actually
- free the temporary space that we no longer need. */
- if (temporary && !allocation_temporary_p ())
- permanent_allocation (0);
-
/* At the end of a declaration, throw away any variable type sizes of types
defined inside that declaration. There is no use computing them in the
following function definition. */
@@ -14369,18 +13585,18 @@ finish_function (int nested)
/* Generate rtl for function exit. */
expand_function_end (input_filename, lineno, 0);
- /* So we can tell if jump_optimize sets it to 1. */
- can_reach_end = 0;
+ /* If this is a nested function, protect the local variables in the stack
+ above us from being collected while we're compiling this function. */
+ if (nested)
+ ggc_push_context ();
/* Run the optimizers and output the assembler code for this function. */
rest_of_compilation (fndecl);
- }
- /* Free all the tree nodes making up this function. */
- /* Switch back to allocating nodes permanently until we start another
- function. */
- if (!nested)
- permanent_allocation (1);
+ /* Undo the GC context switch. */
+ if (nested)
+ ggc_pop_context ();
+ }
if (TREE_CODE (fndecl) != ERROR_MARK
&& !nested
@@ -14413,7 +13629,7 @@ finish_function (int nested)
per se, but if that comes up, it should be easy to check (being a
nested function and all). */
-static char *
+static const char *
lang_printable_name (tree decl, int v)
{
/* Just to keep GCC quiet about the unused variable.
@@ -14431,10 +13647,9 @@ lang_printable_name (tree decl, int v)
/* g77's function to print out name of current function that caused
an error. */
-#if BUILT_FOR_270
-void
-lang_print_error_function (file)
- char *file;
+static void
+lang_print_error_function (diagnostic_context *context __attribute__((unused)),
+ const char *file)
{
static ffeglobal last_g = NULL;
static ffesymbol last_s = NULL;
@@ -14455,33 +13670,12 @@ lang_print_error_function (file)
if (ffecom_nested_entry_ == NULL)
{
s = ffecom_primary_entry_;
- switch (ffesymbol_kind (s))
- {
- case FFEINFO_kindFUNCTION:
- kind = "function";
- break;
-
- case FFEINFO_kindSUBROUTINE:
- kind = "subroutine";
- break;
-
- case FFEINFO_kindPROGRAM:
- kind = "program";
- break;
-
- case FFEINFO_kindBLOCKDATA:
- kind = "block-data";
- break;
-
- default:
- kind = ffeinfo_kind_message (ffesymbol_kind (s));
- break;
- }
+ kind = _(ffeinfo_kind_message (ffesymbol_kind (s)));
}
else
{
s = ffecom_nested_entry_;
- kind = "statement function";
+ kind = _("In statement function");
}
}
@@ -14491,19 +13685,18 @@ lang_print_error_function (file)
fprintf (stderr, "%s: ", file);
if (s == NULL)
- fprintf (stderr, "Outside of any program unit:\n");
+ fprintf (stderr, _("Outside of any program unit:\n"));
else
{
const char *name = ffesymbol_text (s);
- fprintf (stderr, "In %s `%s':\n", kind, name);
+ fprintf (stderr, "%s `%s':\n", kind, name);
}
last_g = g;
last_s = s;
}
}
-#endif
/* Similar to `lookup_name' but look only at current binding level. */
@@ -14611,8 +13804,6 @@ push_parm_decl (tree parm)
immediate_size_expand = 0;
- push_obstacks_nochange ();
-
/* Fill in arg stuff. */
DECL_ARG_TYPE (parm) = TREE_TYPE (parm);
@@ -14693,9 +13884,6 @@ start_decl (tree decl, bool is_top_level)
level anyway. */
assert (!is_top_level || !at_top_level);
- /* The corresponding pop_obstacks is in finish_decl. */
- push_obstacks_nochange ();
-
if (DECL_INITIAL (decl) != NULL_TREE)
{
assert (DECL_INITIAL (decl) == error_mark_node);
@@ -14718,7 +13906,7 @@ start_decl (tree decl, bool is_top_level)
if (!top_level
/* But not if this is a duplicate decl and we preserved the rtl from the
previous one (which may or may not happen). */
- && DECL_RTL (tem) == 0)
+ && !DECL_RTL_SET_P (tem))
{
if (TYPE_SIZE (TREE_TYPE (tem)) != 0)
expand_decl (tem);
@@ -14727,14 +13915,6 @@ start_decl (tree decl, bool is_top_level)
expand_decl (tem);
}
- if (DECL_INITIAL (tem) != NULL_TREE)
- {
- /* When parsing and digesting the initializer, use temporary storage.
- Do this even if we will ignore the value. */
- if (at_top_level)
- temporary_allocation ();
- }
-
return tem;
}
@@ -14809,18 +13989,13 @@ start_function (tree name, tree type, int nested, int public)
if (TREE_CODE (current_function_decl) != ERROR_MARK)
{
- make_function_rtl (current_function_decl);
+ make_decl_rtl (current_function_decl, NULL);
restype = TREE_TYPE (TREE_TYPE (current_function_decl));
DECL_RESULT (current_function_decl)
= build_decl (RESULT_DECL, NULL_TREE, restype);
}
- if (!nested)
- /* Allocate further tree nodes temporarily during compilation of this
- function only. */
- temporary_allocation ();
-
if (!nested && (TREE_CODE (current_function_decl) != ERROR_MARK))
TREE_ADDRESSABLE (current_function_decl) = 1;
@@ -14913,50 +14088,87 @@ incomplete_type_error (value, type)
assert ("incomplete type?!?" == NULL);
}
-void
-init_decl_processing ()
-{
- malloc_init ();
- ffe_init_0 ();
-}
-
-char *
-init_parse (filename)
- char *filename;
+/* Mark ARG for GC. */
+static void
+mark_binding_level (void *arg)
{
-#if BUILT_FOR_270
- extern void (*print_error_function) (char *);
-#endif
+ struct binding_level *level = *(struct binding_level **) arg;
- /* Open input file. */
- if (filename == 0 || !strcmp (filename, "-"))
+ while (level)
{
- finput = stdin;
- filename = "stdin";
+ ggc_mark_tree (level->names);
+ ggc_mark_tree (level->blocks);
+ ggc_mark_tree (level->this_block);
+ level = level->level_chain;
}
- else
- finput = fopen (filename, "r");
- if (finput == 0)
- pfatal_with_name (filename);
+}
-#ifdef IO_BUFFER_SIZE
- setvbuf (finput, (char *) xmalloc (IO_BUFFER_SIZE), _IOFBF, IO_BUFFER_SIZE);
-#endif
+static void
+ffecom_init_decl_processing ()
+{
+ static tree *const tree_roots[] = {
+ &current_function_decl,
+ &string_type_node,
+ &ffecom_tree_fun_type_void,
+ &ffecom_integer_zero_node,
+ &ffecom_integer_one_node,
+ &ffecom_tree_subr_type,
+ &ffecom_tree_ptr_to_subr_type,
+ &ffecom_tree_blockdata_type,
+ &ffecom_tree_xargc_,
+ &ffecom_f2c_integer_type_node,
+ &ffecom_f2c_ptr_to_integer_type_node,
+ &ffecom_f2c_address_type_node,
+ &ffecom_f2c_real_type_node,
+ &ffecom_f2c_ptr_to_real_type_node,
+ &ffecom_f2c_doublereal_type_node,
+ &ffecom_f2c_complex_type_node,
+ &ffecom_f2c_doublecomplex_type_node,
+ &ffecom_f2c_longint_type_node,
+ &ffecom_f2c_logical_type_node,
+ &ffecom_f2c_flag_type_node,
+ &ffecom_f2c_ftnlen_type_node,
+ &ffecom_f2c_ftnlen_zero_node,
+ &ffecom_f2c_ftnlen_one_node,
+ &ffecom_f2c_ftnlen_two_node,
+ &ffecom_f2c_ptr_to_ftnlen_type_node,
+ &ffecom_f2c_ftnint_type_node,
+ &ffecom_f2c_ptr_to_ftnint_type_node,
+ &ffecom_outer_function_decl_,
+ &ffecom_previous_function_decl_,
+ &ffecom_which_entrypoint_decl_,
+ &ffecom_float_zero_,
+ &ffecom_float_half_,
+ &ffecom_double_zero_,
+ &ffecom_double_half_,
+ &ffecom_func_result_,
+ &ffecom_func_length_,
+ &ffecom_multi_type_node_,
+ &ffecom_multi_retval_,
+ &named_labels,
+ &shadowed_labels
+ };
+ size_t i;
- /* Make identifier nodes long enough for the language-specific slots. */
- set_identifier_size (sizeof (struct lang_identifier));
- decl_printable_name = lang_printable_name;
-#if BUILT_FOR_270
- print_error_function = lang_print_error_function;
-#endif
+ malloc_init ();
- return filename;
-}
+ /* Record our roots. */
+ for (i = 0; i < ARRAY_SIZE (tree_roots); i++)
+ ggc_add_tree_root (tree_roots[i], 1);
+ ggc_add_tree_root (&ffecom_tree_type[0][0],
+ FFEINFO_basictype*FFEINFO_kindtype);
+ ggc_add_tree_root (&ffecom_tree_fun_type[0][0],
+ FFEINFO_basictype*FFEINFO_kindtype);
+ ggc_add_tree_root (&ffecom_tree_ptr_to_fun_type[0][0],
+ FFEINFO_basictype*FFEINFO_kindtype);
+ ggc_add_tree_root (ffecom_gfrt_, FFECOM_gfrt);
+ ggc_add_root (&current_binding_level, 1, sizeof current_binding_level,
+ mark_binding_level);
+ ggc_add_root (&free_binding_level, 1, sizeof current_binding_level,
+ mark_binding_level);
+ ggc_add_root (&tracker_head, 1, sizeof tracker_head, mark_tracker_head);
-void
-finish_parse ()
-{
- fclose (finput);
+ ffe_init_0 ();
}
/* Delete the node BLOCK from the current binding level.
@@ -14992,62 +14204,97 @@ insert_block (block)
= chainon (current_binding_level->blocks, block);
}
-int
-lang_decode_option (argc, argv)
- int argc;
- char **argv;
+/* Each front end provides its own. */
+static const char *ffe_init PARAMS ((const char *));
+static void ffe_finish PARAMS ((void));
+static void ffe_init_options PARAMS ((void));
+static void ffe_print_identifier PARAMS ((FILE *, tree, int));
+
+#undef LANG_HOOKS_NAME
+#define LANG_HOOKS_NAME "GNU F77"
+#undef LANG_HOOKS_INIT
+#define LANG_HOOKS_INIT ffe_init
+#undef LANG_HOOKS_FINISH
+#define LANG_HOOKS_FINISH ffe_finish
+#undef LANG_HOOKS_INIT_OPTIONS
+#define LANG_HOOKS_INIT_OPTIONS ffe_init_options
+#undef LANG_HOOKS_DECODE_OPTION
+#define LANG_HOOKS_DECODE_OPTION ffe_decode_option
+#undef LANG_HOOKS_PRINT_IDENTIFIER
+#define LANG_HOOKS_PRINT_IDENTIFIER ffe_print_identifier
+
+/* We do not wish to use alias-set based aliasing at all. Used in the
+ extreme (every object with its own set, with equivalences recorded) it
+ might be helpful, but there are problems when it comes to inlining. We
+ get on ok with flag_argument_noalias, and alias-set aliasing does
+ currently limit how stack slots can be reused, which is a lose. */
+#undef LANG_HOOKS_GET_ALIAS_SET
+#define LANG_HOOKS_GET_ALIAS_SET hook_get_alias_set_0
+
+const struct lang_hooks lang_hooks = LANG_HOOKS_INITIALIZER;
+
+static const char *
+ffe_init (filename)
+ const char *filename;
{
- return ffe_decode_option (argc, argv);
-}
+ /* Open input file. */
+ if (filename == 0 || !strcmp (filename, "-"))
+ {
+ finput = stdin;
+ filename = "stdin";
+ }
+ else
+ finput = fopen (filename, "r");
+ if (finput == 0)
+ fatal_io_error ("can't open %s", filename);
-/* used by print-tree.c */
+#ifdef IO_BUFFER_SIZE
+ setvbuf (finput, (char *) xmalloc (IO_BUFFER_SIZE), _IOFBF, IO_BUFFER_SIZE);
+#endif
-void
-lang_print_xnode (file, node, indent)
- FILE *file UNUSED;
- tree node UNUSED;
- int indent UNUSED;
-{
+ ffecom_init_decl_processing ();
+ decl_printable_name = lang_printable_name;
+ print_error_function = lang_print_error_function;
+
+ /* If the file is output from cpp, it should contain a first line
+ `# 1 "real-filename"', and the current design of gcc (toplev.c
+ in particular and the way it sets up information relied on by
+ INCLUDE) requires that we read this now, and store the
+ "real-filename" info in master_input_filename. Ask the lexer
+ to try doing this. */
+ ffelex_hash_kludge (finput);
+
+ /* FIXME: The ffelex_hash_kludge code needs to be cleaned up to
+ return the new file name. */
+ if (main_input_filename)
+ filename = main_input_filename;
+
+ return filename;
}
-void
-lang_finish ()
+static void
+ffe_finish ()
{
ffe_terminate_0 ();
if (ffe_is_ffedebug ())
malloc_pool_display (malloc_pool_image ());
-}
-char *
-lang_identify ()
-{
- return "f77";
+ fclose (finput);
}
-void
-lang_init_options ()
+static void
+ffe_init_options ()
{
/* Set default options for Fortran. */
flag_move_all_movables = 1;
flag_reduce_all_givs = 1;
flag_argument_noalias = 2;
+ flag_merge_constants = 2;
flag_errno_math = 0;
flag_complex_divide_method = 1;
}
-void
-lang_init ()
-{
- /* If the file is output from cpp, it should contain a first line
- `# 1 "real-filename"', and the current design of gcc (toplev.c
- in particular and the way it sets up information relied on by
- INCLUDE) requires that we read this now, and store the
- "real-filename" info in master_input_filename. Ask the lexer
- to try doing this. */
- ffelex_hash_kludge (finput);
-}
-
int
mark_addressable (exp)
tree exp;
@@ -15195,7 +14442,6 @@ poplevel (keep, reverse, functionbody)
{
BLOCK_VARS (block) = decls;
BLOCK_SUBBLOCKS (block) = subblocks;
- remember_end_note (block);
}
/* In each subblock, record that this is its superior. */
@@ -15270,16 +14516,8 @@ poplevel (keep, reverse, functionbody)
return block;
}
-void
-print_lang_decl (file, node, indent)
- FILE *file UNUSED;
- tree node UNUSED;
- int indent UNUSED;
-{
-}
-
-void
-print_lang_identifier (file, node, indent)
+static void
+ffe_print_identifier (file, node, indent)
FILE *file;
tree node;
int indent;
@@ -15288,19 +14526,6 @@ print_lang_identifier (file, node, indent)
print_node (file, "local", IDENTIFIER_LOCAL_VALUE (node), indent + 4);
}
-void
-print_lang_statistics ()
-{
-}
-
-void
-print_lang_type (file, node, indent)
- FILE *file UNUSED;
- tree node UNUSED;
- int indent UNUSED;
-{
-}
-
/* Record a decl-node X as belonging to the current lexical scope.
Check for errors (such as an incompatible declaration for the same
name already seen in the same scope).
@@ -15328,9 +14553,7 @@ pushdecl (x)
{
if (IDENTIFIER_INVENTED (name))
{
-#if BUILT_FOR_270
DECL_ARTIFICIAL (x) = 1;
-#endif
DECL_IN_SYSTEM_HEADER (x) = 1;
}
@@ -15486,18 +14709,10 @@ set_block (block)
register tree block;
{
current_binding_level->this_block = block;
-}
-
-/* ~~gcc/tree.h *should* declare this, because toplev.c references it. */
-
-/* Can't 'yydebug' a front end not generated by yacc/bison! */
-
-void
-set_yydebug (value)
- int value;
-{
- if (value)
- fprintf (stderr, "warning: no yacc/bison-generated output to debug!\n");
+ current_binding_level->names = chainon (current_binding_level->names,
+ BLOCK_VARS (block));
+ current_binding_level->blocks = chainon (current_binding_level->blocks,
+ BLOCK_SUBBLOCKS (block));
}
tree
@@ -15779,6 +14994,11 @@ type_for_mode (mode, unsignedp)
if (mode == TYPE_MODE (long_long_integer_type_node))
return unsignedp ? long_long_unsigned_type_node : long_long_integer_type_node;
+#if HOST_BITS_PER_WIDE_INT >= 64
+ if (mode == TYPE_MODE (intTI_type_node))
+ return unsignedp ? unsigned_intTI_type_node : intTI_type_node;
+#endif
+
if (mode == TYPE_MODE (float_type_node))
return float_type_node;
@@ -15887,10 +15107,21 @@ unsigned_type (type)
return type;
}
-#endif /* FFECOM_targetCURRENT == FFECOM_targetGCC */
+void
+lang_mark_tree (t)
+ union tree_node *t ATTRIBUTE_UNUSED;
+{
+ if (TREE_CODE (t) == IDENTIFIER_NODE)
+ {
+ struct lang_identifier *i = (struct lang_identifier *) t;
+ ggc_mark_tree (IDENTIFIER_GLOBAL_VALUE (i));
+ ggc_mark_tree (IDENTIFIER_LOCAL_VALUE (i));
+ ggc_mark_tree (IDENTIFIER_LABEL_VALUE (i));
+ }
+ else if (TYPE_P (t) && TYPE_LANG_SPECIFIC (t))
+ ggc_mark (TYPE_LANG_SPECIFIC (t));
+}
-#if FFECOM_GCC_INCLUDE
-
/* From gcc/cccp.c, the code to handle -I. */
/* Skip leading "./" from a directory name.
@@ -15949,9 +15180,9 @@ static struct file_name_list *last_include = NULL; /* Last in chain */
and for expanding macro arguments. */
#define INPUT_STACK_MAX 400
static struct file_buf {
- char *fname;
+ const char *fname;
/* Filename specified with #line command. */
- char *nominal_fname;
+ const char *nominal_fname;
/* Record where in the search path this file was found.
For #include_next. */
struct file_name_list *dir;
@@ -15968,20 +15199,6 @@ static int indepth = -1;
typedef struct file_buf FILE_BUF;
-typedef unsigned char U_CHAR;
-
-/* table to tell if char can be part of a C identifier. */
-U_CHAR is_idchar[256];
-/* table to tell if char can be first char of a c identifier. */
-U_CHAR is_idstart[256];
-/* table to tell if c is horizontal space. */
-U_CHAR is_hor_space[256];
-/* table to tell if c is horizontal or vertical space. */
-static U_CHAR is_space[256];
-
-#define SKIP_WHITE_SPACE(p) do { while (is_hor_space[*p]) p++; } while (0)
-#define SKIP_ALL_WHITE_SPACE(p) do { while (is_space[*p]) p++; } while (0)
-
/* Nonzero means -I- has been seen,
so don't look for #include "foo" the source-file directory. */
static int ignore_srcdir;
@@ -15995,7 +15212,6 @@ static void append_include_chain (struct file_name_list *first,
static FILE *open_include_file (char *filename,
struct file_name_list *searchptr);
static void print_containing_files (ffebadSeverity sev);
-static const char *skip_redundant_dir_prefix (const char *);
static char *read_filename_string (int ch, FILE *f);
static struct file_name_map *read_name_map (const char *dirname);
@@ -16070,11 +15286,11 @@ open_include_file (filename, searchptr)
looking in. Thus #include <sys/types.h> will look up sys/types.h
in /usr/include/header.gcc and look up types.h in
/usr/include/sys/header.gcc. */
- p = rindex (filename, '/');
+ p = strrchr (filename, '/');
#ifdef DIR_SEPARATOR
- if (! p) p = rindex (filename, DIR_SEPARATOR);
+ if (! p) p = strrchr (filename, DIR_SEPARATOR);
else {
- char *tmp = rindex (filename, DIR_SEPARATOR);
+ char *tmp = strrchr (filename, DIR_SEPARATOR);
if (tmp != NULL && tmp > p) p = tmp;
}
#endif
@@ -16182,10 +15398,10 @@ read_filename_string (ch, f)
len = 20;
set = alloc = xmalloc (len + 1);
- if (! is_space[ch])
+ if (! ISSPACE (ch))
{
*set++ = ch;
- while ((ch = getc (f)) != EOF && ! is_space[ch])
+ while ((ch = getc (f)) != EOF && ! ISSPACE (ch))
{
if (set - alloc == len)
{
@@ -16253,10 +15469,10 @@ read_name_map (dirname)
char *from, *to;
struct file_name_map *ptr;
- if (is_space[ch])
+ if (ISSPACE (ch))
continue;
from = read_filename_string (ch, f);
- while ((ch = getc (f)) != EOF && is_hor_space[ch])
+ while ((ch = getc (f)) != EOF && ISSPACE (ch) && ch != '\n')
;
to = read_filename_string (ch, f);
@@ -16293,7 +15509,7 @@ read_name_map (dirname)
}
static void
-ffecom_file_ (char *name)
+ffecom_file_ (const char *name)
{
FILE_BUF *fp;
@@ -16307,45 +15523,6 @@ ffecom_file_ (char *name)
fp->nominal_fname = fp->fname = name;
}
-/* Initialize syntactic classifications of characters. */
-
-static void
-ffecom_initialize_char_syntax_ ()
-{
- register int i;
-
- /*
- * Set up is_idchar and is_idstart tables. These should be
- * faster than saying (is_alpha (c) || c == '_'), etc.
- * Set up these things before calling any routines tthat
- * refer to them.
- */
- for (i = 'a'; i <= 'z'; i++) {
- is_idchar[i - 'a' + 'A'] = 1;
- is_idchar[i] = 1;
- is_idstart[i - 'a' + 'A'] = 1;
- is_idstart[i] = 1;
- }
- for (i = '0'; i <= '9'; i++)
- is_idchar[i] = 1;
- is_idchar['_'] = 1;
- is_idstart['_'] = 1;
-
- /* horizontal space table */
- is_hor_space[' '] = 1;
- is_hor_space['\t'] = 1;
- is_hor_space['\v'] = 1;
- is_hor_space['\f'] = 1;
- is_hor_space['\r'] = 1;
-
- is_space[' '] = 1;
- is_space['\t'] = 1;
- is_space['\v'] = 1;
- is_space['\f'] = 1;
- is_space['\n'] = 1;
- is_space['\r'] = 1;
-}
-
static void
ffecom_close_include_ (FILE *f)
{
@@ -16370,12 +15547,12 @@ ffecom_decode_include_option_ (char *spec)
dirtmp = (struct file_name_list *)
xmalloc (sizeof (struct file_name_list));
dirtmp->next = 0; /* New one goes on the end */
- if (spec[0] != 0)
- dirtmp->fname = spec;
- else
- fatal ("Directory name must immediately follow -I option with no intervening spaces, as in `-Idir', not `-I dir'");
+ dirtmp->fname = spec;
dirtmp->got_name_map = 0;
- append_include_chain (dirtmp, dirtmp);
+ if (spec[0] == 0)
+ error ("directory name must immediately follow -I");
+ else
+ append_include_chain (dirtmp, dirtmp);
}
return 1;
}
@@ -16406,7 +15583,7 @@ ffecom_open_include_ (char *name, ffewhereLine l, ffewhereColumn c)
{
int n;
char *ep;
- char *nam;
+ const char *nam;
if ((nam = fp->nominal_fname) != NULL)
{
@@ -16415,18 +15592,18 @@ ffecom_open_include_ (char *name, ffewhereLine l, ffewhereColumn c)
dsp[0].next = search_start;
search_start = dsp;
#ifndef VMS
- ep = rindex (nam, '/');
+ ep = strrchr (nam, '/');
#ifdef DIR_SEPARATOR
- if (ep == NULL) ep = rindex (nam, DIR_SEPARATOR);
+ if (ep == NULL) ep = strrchr (nam, DIR_SEPARATOR);
else {
- char *tmp = rindex (nam, DIR_SEPARATOR);
+ char *tmp = strrchr (nam, DIR_SEPARATOR);
if (tmp != NULL && tmp > ep) ep = tmp;
}
#endif
#else /* VMS */
- ep = rindex (nam, ']');
- if (ep == NULL) ep = rindex (nam, '>');
- if (ep == NULL) ep = rindex (nam, ':');
+ ep = strrchr (nam, ']');
+ if (ep == NULL) ep = strrchr (nam, '>');
+ if (ep == NULL) ep = strrchr (nam, ':');
if (ep != NULL) ep++;
#endif /* VMS */
if (ep != NULL)
@@ -16463,7 +15640,7 @@ ffecom_open_include_ (char *name, ffewhereLine l, ffewhereColumn c)
{
strncpy (fname, (char *) fbeg, flen);
fname[flen] = 0;
- f = open_include_file (fname, NULL_PTR);
+ f = open_include_file (fname, NULL);
}
else
{
@@ -16505,7 +15682,7 @@ ffecom_open_include_ (char *name, ffewhereLine l, ffewhereColumn c)
fname[flen] = 0;
#if 0 /* Not for g77. */
/* if it's '#include filename', add the missing .h */
- if (index (fname, '.') == NULL)
+ if (strchr (fname, '.') == NULL)
strcat (fname, ".h");
#endif
}
@@ -16570,7 +15747,6 @@ ffecom_open_include_ (char *name, ffewhereLine l, ffewhereColumn c)
return f;
}
-#endif /* FFECOM_GCC_INCLUDE */
/**INDENT* (Do not reformat this comment even with -fca option.)
Data-gathering files: Given the source file listed below, compiled with
@@ -17056,12 +16232,12 @@ typedef doublereal E_f; // real function with -R not specified //
void pow_ci();
double pow_dd();
void pow_zz();
- double acos(), r_imag(), r_int(), log(), r_lg10(), r_mod(), r_nint(),
+ double acos(), r_imag(), r_int(), log(), r_lg10(), r_mod(), r_nint(),
asin(), atan(), atan2(), c_abs();
void c_cos(), c_exp(), c_log(), r_cnjg();
double cos(), cosh();
void c_sin(), c_sqrt();
- double d_dim(), exp(), r_dim(), d_int(), d_lg10(), d_mod(), d_nint(),
+ double d_dim(), exp(), r_dim(), d_int(), d_lg10(), d_mod(), d_nint(),
d_sign(), sin(), sinh(), sqrt(), tan(), tanh();
integer i_dim(), i_dnnt(), i_indx(), i_sign(), i_len();
logical l_ge(), l_gt(), l_le(), l_lt();
@@ -17069,7 +16245,7 @@ typedef doublereal E_f; // real function with -R not specified //
double r_sign();
// Local variables //
- extern // Subroutine // int fooa_(), fooc_(), food_(), fooi_(), foor_(),
+ extern // Subroutine // int fooa_(), fooc_(), food_(), fooi_(), foor_(),
fool_(), fooz_(), getem_();
static char a1[10], a2[10];
static complex c1, c2;
diff --git a/contrib/gcc/f/com.h b/contrib/gcc/f/com.h
index baa2953..5e20e2b 100644
--- a/contrib/gcc/f/com.h
+++ b/contrib/gcc/f/com.h
@@ -1,5 +1,5 @@
/* com.h -- Public #include File (module.h template V1.0)
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1996, 1997, 2000 Free Software Foundation, Inc.
Contributed by James Craig Burley.
This file is part of GNU Fortran.
@@ -27,34 +27,16 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* Allow multiple inclusion to work. */
-#ifndef _H_f_com
-#define _H_f_com
+#ifndef GCC_F_COM_H
+#define GCC_F_COM_H
/* Simple definitions and enumerations. */
#define FFECOM_dimensionsMAX 7 /* Max # dimensions (quick hack). */
-#define FFECOM_targetFFE 1
-#define FFECOM_targetGCC 2
-
-#ifndef FFE_STANDALONE
-#define FFECOM_targetCURRENT FFECOM_targetGCC /* Backend! */
-#define FFECOM_ONEPASS 0
-#else
-#define FFECOM_targetCURRENT FFECOM_targetFFE
-#define FFECOM_ONEPASS 0
-#endif
-
-#if FFECOM_ONEPASS
-#define FFECOM_TWOPASS 0
-#else
-#define FFECOM_TWOPASS 1
-#endif
-
#define FFECOM_SIZE_UNIT "byte" /* Singular form. */
#define FFECOM_SIZE_UNITS "bytes" /* Plural form. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
#define FFECOM_constantNULL NULL_TREE
#define FFECOM_nonterNULL NULL_TREE
#define FFECOM_globalNULL NULL_TREE
@@ -84,66 +66,29 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
to build the libf2c with which g77-generated code is linked, or there
will probably be bugs, some of them difficult to detect or even trigger. */
-/* Do we need int (for 32-bit or 64-bit systems) or long (16-bit or
- normally 32-bit) for f2c-type integers? */
-
-#ifndef BITS_PER_WORD
-#define BITS_PER_WORD 32
-#endif
-
-#ifndef CHAR_TYPE_SIZE
-#define CHAR_TYPE_SIZE BITS_PER_UNIT
-#endif
-
-#ifndef SHORT_TYPE_SIZE
-#define SHORT_TYPE_SIZE (BITS_PER_UNIT * MIN ((UNITS_PER_WORD + 1) / 2, 2))
-#endif
-
-#ifndef INT_TYPE_SIZE
-#define INT_TYPE_SIZE BITS_PER_WORD
-#endif
-
-#ifndef LONG_TYPE_SIZE
-#define LONG_TYPE_SIZE BITS_PER_WORD
-#endif
-
-#ifndef LONG_LONG_TYPE_SIZE
-#define LONG_LONG_TYPE_SIZE (BITS_PER_WORD * 2)
-#endif
-
-#ifndef WCHAR_UNSIGNED
-#define WCHAR_UNSIGNED 0
-#endif
-
-#ifndef FLOAT_TYPE_SIZE
-#define FLOAT_TYPE_SIZE BITS_PER_WORD
-#endif
-
-#ifndef DOUBLE_TYPE_SIZE
-#define DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
-#endif
-
-#ifndef LONG_DOUBLE_TYPE_SIZE
-#define LONG_DOUBLE_TYPE_SIZE (BITS_PER_WORD * 2)
-#endif
-
-#if LONG_TYPE_SIZE == FLOAT_TYPE_SIZE
-# define FFECOM_f2cINTEGER FFECOM_f2ccodeLONG
-# define FFECOM_f2cLOGICAL FFECOM_f2ccodeLONG
-#elif INT_TYPE_SIZE == FLOAT_TYPE_SIZE
-# define FFECOM_f2cINTEGER FFECOM_f2ccodeINT
-# define FFECOM_f2cLOGICAL FFECOM_f2ccodeINT
-#else
-# error Cannot find a suitable type for FFECOM_f2cINTEGER
-#endif
-
-#if LONG_TYPE_SIZE == (FLOAT_TYPE_SIZE * 2)
-# define FFECOM_f2cLONGINT FFECOM_f2ccodeLONG
-#elif LONG_LONG_TYPE_SIZE == (FLOAT_TYPE_SIZE * 2)
-# define FFECOM_f2cLONGINT FFECOM_f2ccodeLONGLONG
-#else
-# error Cannot find a suitable type for FFECOM_f2cLONGINT
-#endif
+/* The C front-end provides __g77_integer and __g77_uinteger types so that
+ the appropriately-sized signed and unsigned integer types are available
+ for libf2c. If you change this, also the definitions of those types
+ in ../c-decl.c. */
+#define FFECOM_f2cINTEGER \
+ (LONG_TYPE_SIZE == FLOAT_TYPE_SIZE \
+ ? FFECOM_f2ccodeLONG \
+ : (INT_TYPE_SIZE == FLOAT_TYPE_SIZE \
+ ? FFECOM_f2ccodeINT \
+ : (abort (), -1)))
+
+#define FFECOM_f2cLOGICAL FFECOM_f2cINTEGER
+
+/* The C front-end provides __g77_longint and __g77_ulongint types so that
+ the appropriately-sized signed and unsigned integer types are available
+ for libf2c. If you change this, also the definitions of those types
+ in ../c-decl.c. */
+#define FFECOM_f2cLONGINT \
+ (LONG_TYPE_SIZE == (FLOAT_TYPE_SIZE * 2) \
+ ? FFECOM_f2ccodeLONG \
+ : (LONG_LONG_TYPE_SIZE == (FLOAT_TYPE_SIZE * 2) \
+ ? FFECOM_f2ccodeLONGLONG \
+ : (abort (), -1)))
#define FFECOM_f2cADDRESS FFECOM_f2ccodeCHARPTR
#define FFECOM_f2cSHORTINT FFECOM_f2ccodeSHORT
@@ -170,37 +115,18 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
typedef enum
{
-#define DEFGFRT(CODE,NAME,TYPE,ARGS,VOLATILE,COMPLEX) CODE,
+#define DEFGFRT(CODE,NAME,TYPE,ARGS,VOLATILE,COMPLEX,CONST) CODE,
#include "com-rt.def"
#undef DEFGFRT
FFECOM_gfrt
} ffecomGfrt;
-#endif /* FFECOM_targetCURRENT == FFECOM_targetGCC */
-
/* Typedefs. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
#ifndef TREE_CODE
-#include "tree.j"
+#include "tree.h"
#endif
-#ifndef BUILT_FOR_270
-#ifdef DECL_STATIC_CONSTRUCTOR /* In gcc/tree.h. */
-#define BUILT_FOR_270 1
-#else
-#define BUILT_FOR_270 0
-#endif
-#endif /* !defined (BUILT_FOR_270) */
-
-#ifndef BUILT_FOR_280
-#ifdef DECL_ONE_ONLY /* In gcc/tree.h. */
-#define BUILT_FOR_280 1
-#else
-#define BUILT_FOR_280 0
-#endif
-#endif /* !defined (BUILT_FOR_280) */
-
typedef tree ffecomConstant;
#define FFECOM_constantHOOK
typedef tree ffecomNonter;
@@ -222,7 +148,6 @@ struct _ffecom_symbol_
tree assign_tree; /* For ASSIGN'ed vars. */
bool addr; /* Is address of item instead of item. */
};
-#endif /* FFECOM_targetCURRENT == FFECOM_targetGCC */
/* Include files needed by this one. */
@@ -237,9 +162,6 @@ struct _ffecom_symbol_
/* Global objects accessed by users of this module. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
-extern tree long_integer_type_node;
-extern tree complex_double_type_node;
extern tree string_type_node;
extern tree ffecom_integer_type_node;
extern tree ffecom_integer_zero_node;
@@ -266,11 +188,9 @@ extern tree ffecom_f2c_ftnlen_two_node;
extern tree ffecom_f2c_ptr_to_ftnlen_type_node;
extern tree ffecom_f2c_ftnint_type_node;
extern tree ffecom_f2c_ptr_to_ftnint_type_node;
-#endif /* FFECOM_targetCURRENT == FFECOM_targetGCC */
/* Declare functions with prototypes. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
tree ffecom_1 (enum tree_code code, tree type, tree node);
tree ffecom_1_fn (tree node);
tree ffecom_2 (enum tree_code code, tree type, tree node1, tree node2);
@@ -290,16 +210,12 @@ tree ffecom_constantunion (ffebldConstantUnion *cu, ffeinfoBasictype bt,
tree ffecom_const_expr (ffebld expr);
tree ffecom_decl_field (tree context, tree prevfield, const char *name,
tree type);
-#endif /* FFECOM_targetCURRENT == FFECOM_targetGCC */
void ffecom_close_include (FILE *f);
int ffecom_decode_include_option (char *spec);
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
tree ffecom_end_compstmt (void);
-#endif /* FFECOM_targetCURRENT == FFECOM_targetGCC */
void ffecom_end_transition (void);
void ffecom_exec_transition (void);
void ffecom_expand_let_stmt (ffebld dest, ffebld source);
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
tree ffecom_expr (ffebld expr);
tree ffecom_expr_assign (ffebld expr);
tree ffecom_expr_assign_w (ffebld expr);
@@ -308,8 +224,8 @@ tree ffecom_expr_w (tree type, ffebld expr);
void ffecom_finish_compile (void);
void ffecom_finish_decl (tree decl, tree init, bool is_top_level);
void ffecom_finish_progunit (void);
-tree ffecom_get_invented_identifier (const char *pattern, const char *text,
- int number);
+tree ffecom_get_invented_identifier (const char *pattern, ...)
+ ATTRIBUTE_PRINTF_1;
ffeinfoKindtype ffecom_gfrt_basictype (ffecomGfrt ix);
ffeinfoKindtype ffecom_gfrt_kindtype (ffecomGfrt ix);
void ffecom_init_0 (void);
@@ -320,13 +236,12 @@ tree ffecom_lookup_label (ffelab label);
tree ffecom_make_tempvar (const char *commentary, tree type,
ffetargetCharacterSize size, int elements);
tree ffecom_modify (tree newtype, tree lhs, tree rhs);
-#endif /* FFECOM_targetCURRENT == FFECOM_targetGCC */
-void ffecom_file (char *name);
+void ffecom_save_tree_forever (tree t);
+void ffecom_file (const char *name);
void ffecom_notify_init_storage (ffestorag st);
void ffecom_notify_init_symbol (ffesymbol s);
void ffecom_notify_primary_entry (ffesymbol fn);
FILE *ffecom_open_include (char *name, ffewhereLine l, ffewhereColumn c);
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
void ffecom_prepare_arg_ptr_to_expr (ffebld expr);
bool ffecom_prepare_end (void);
void ffecom_prepare_expr_ (ffebld expr, ffebld dest);
@@ -341,11 +256,9 @@ tree ffecom_save_tree (tree t);
void ffecom_start_compstmt (void);
tree ffecom_start_decl (tree decl, bool is_init);
void ffecom_sym_commit (ffesymbol s);
-#endif /* FFECOM_targetCURRENT == FFECOM_targetGCC */
ffesymbol ffecom_sym_end_transition (ffesymbol s);
ffesymbol ffecom_sym_exec_transition (ffesymbol s);
ffesymbol ffecom_sym_learned (ffesymbol s);
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
void ffecom_sym_retract (ffesymbol s);
tree ffecom_temp_label (void);
tree ffecom_truth_value (tree expr);
@@ -353,31 +266,12 @@ tree ffecom_truth_value_invert (tree expr);
tree ffecom_type_expr (ffebld expr);
tree ffecom_which_entrypoint_decl (void);
-/* These need to be in the front end with exactly these interfaces,
- as they're called by the back end. */
-
-int mark_addressable (tree expr);
-#endif /* FFECOM_targetCURRENT == FFECOM_targetGCC */
-
/* Define macros. */
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-#define ffecom_expr(e) (e)
-#define ffecom_init_0()
-#define ffecom_init_2()
-#define ffecom_label_kind() FFEINFO_kindtypeINTEGERDEFAULT
-#define ffecom_pointer_kind() FFEINFO_kindtypeINTEGERDEFAULT
-#define ffecom_ptr_to_expr(e) (e)
-#define ffecom_sym_commit(s)
-#define ffecom_sym_retract(s)
-#endif /* FFECOM_targetCURRENT == FFECOM_targetFFE */
-
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
#define ffecom_f2c_typecode(bt,kt) ffecom_f2c_typecode_[(bt)][(kt)]
#define ffecom_label_kind() ffecom_label_kind_
#define ffecom_pointer_kind() ffecom_pointer_kind_
#define ffecom_prepare_expr(e) ffecom_prepare_expr_ ((e), NULL)
-#endif /* FFECOM_targetCURRENT == FFECOM_targetGCC */
#define ffecom_init_1()
#define ffecom_init_3()
@@ -390,4 +284,4 @@ int mark_addressable (tree expr);
/* End of #include file. */
-#endif
+#endif /* ! GCC_F_COM_H */
diff --git a/contrib/gcc/f/config-lang.in b/contrib/gcc/f/config-lang.in
index 504bc20..168daad 100644
--- a/contrib/gcc/f/config-lang.in
+++ b/contrib/gcc/f/config-lang.in
@@ -1,5 +1,5 @@
# Top level configure fragment for GNU FORTRAN.
-# Copyright (C) 1995-1997 Free Software Foundation, Inc.
+# Copyright (C) 1995, 1996, 1997, 2000, 2001 Free Software Foundation, Inc.
#This file is part of GNU Fortran.
@@ -24,7 +24,6 @@
# language - name of language as it would appear in $(LANGUAGES)
# compilers - value to add to $(COMPILERS)
# stagestuff - files to add to $(STAGESTUFF)
-# diff_excludes - files to ignore when building diffs between two versions.
language="f77"
@@ -32,6 +31,4 @@ compilers="f771\$(exeext)"
stagestuff="g77\$(exeext) g77-cross\$(exeext) f771\$(exeext)"
-diff_excludes="-x f/BUGS -x f/NEWS -x f/INSTALL -x f/intdoc.texi"
-
-outputs=f/Makefile
+target_libs=target-libf2c
diff --git a/contrib/gcc/f/data.h b/contrib/gcc/f/data.h
index 666612e..a99369d 100644
--- a/contrib/gcc/f/data.h
+++ b/contrib/gcc/f/data.h
@@ -27,8 +27,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* Allow multiple inclusion to work. */
-#ifndef _H_f_data
-#define _H_f_data
+#ifndef GCC_F_DATA_H
+#define GCC_F_DATA_H
/* Simple definitions and enumerations. */
@@ -71,4 +71,4 @@ bool ffedata_value (ffetargetIntegerDefault rpt, ffebld value,
/* End of #include file. */
-#endif
+#endif /* ! GCC_F_DATA_H */
diff --git a/contrib/gcc/f/equiv.c b/contrib/gcc/f/equiv.c
index 4d89622..f58de9c 100644
--- a/contrib/gcc/f/equiv.c
+++ b/contrib/gcc/f/equiv.c
@@ -1,5 +1,5 @@
/* equiv.c -- Implementation File (module.c template V1.0)
- Copyright (C) 1995-1998 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
Contributed by James Craig Burley.
This file is part of GNU Fortran.
@@ -913,21 +913,6 @@ ffeequiv_add (ffeequiv eq, ffebld list, ffelexToken t)
ffeequiv_set_list (eq, ffebld_new_item (list, ffeequiv_list (eq)));
}
-/* ffeequiv_dump -- Dump info on equivalence object
-
- ffeequiv eq;
- ffeequiv_dump(eq); */
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-void
-ffeequiv_dump (ffeequiv eq)
-{
- if (ffeequiv_common (eq) != NULL)
- fprintf (dmpout, "(common %s) ", ffesymbol_text (ffeequiv_common (eq)));
- ffebld_dump (ffeequiv_list (eq));
-}
-#endif
-
/* ffeequiv_exec_transition -- Do the hard work on all the equivalence objects
ffeequiv_exec_transition(); */
diff --git a/contrib/gcc/f/equiv.h b/contrib/gcc/f/equiv.h
index 0a0ce92..59abfc8 100644
--- a/contrib/gcc/f/equiv.h
+++ b/contrib/gcc/f/equiv.h
@@ -27,8 +27,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* Allow multiple inclusion to work. */
-#ifndef _H_f_equiv
-#define _H_f_equiv
+#ifndef GCC_F_EQUIV_H
+#define GCC_F_EQUIV_H
/* Simple definitions and enumerations. */
@@ -62,9 +62,6 @@ struct _ffeequiv_
/* Declare functions with prototypes. */
void ffeequiv_add (ffeequiv eq, ffebld list, ffelexToken t);
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-void ffeequiv_dump (ffeequiv eq);
-#endif
void ffeequiv_exec_transition (void);
void ffeequiv_init_2 (void);
void ffeequiv_kill (ffeequiv victim);
@@ -100,4 +97,4 @@ void ffeequiv_update_save (ffeequiv eq);
/* End of #include file. */
-#endif
+#endif /* ! GCC_F_EQUIV_H */
diff --git a/contrib/gcc/f/expr.c b/contrib/gcc/f/expr.c
index 67b3765..d873018 100644
--- a/contrib/gcc/f/expr.c
+++ b/contrib/gcc/f/expr.c
@@ -1,5 +1,5 @@
/* expr.c -- Implementation File (module.c template V1.0)
- Copyright (C) 1995-1998 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1996, 1997, 1998, 2001 Free Software Foundation, Inc.
Contributed by James Craig Burley.
This file is part of GNU Fortran.
@@ -13162,7 +13162,7 @@ again: /* :::::::::::::::::::: */
error = (expr == NULL)
|| ((ffeinfo_rank (info) != 0) ?
ffe_is_pedantic () /* F77 C5. */
- : (ffeinfo_kindtype (info) != ffecom_label_kind ()))
+ : (bool) (ffeinfo_kindtype (info) != ffecom_label_kind ()))
|| (ffebld_op (expr) != FFEBLD_opSYMTER);
break;
@@ -17323,6 +17323,7 @@ ffeexpr_sym_rhs_dimlist_ (ffesymbol s, ffelexToken t)
| FFESYMBOL_attrsINIT
| FFESYMBOL_attrsNAMELIST
| FFESYMBOL_attrsSFARG
+ | FFESYMBOL_attrsARRAY
| FFESYMBOL_attrsTYPE)))
na = sa | FFESYMBOL_attrsADJUSTS;
else
@@ -17958,6 +17959,7 @@ ffeexpr_declare_parenthesized_ (ffelexToken t, bool maybe_intrin,
case FFEEXPR_contextDIMLIST:
s = ffeexpr_sym_rhs_dimlist_ (s, t);
+ bad = FALSE;
break;
case FFEEXPR_contextCHARACTERSIZE:
diff --git a/contrib/gcc/f/expr.h b/contrib/gcc/f/expr.h
index 3f781f9..b82173b 100644
--- a/contrib/gcc/f/expr.h
+++ b/contrib/gcc/f/expr.h
@@ -27,8 +27,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* Allow multiple inclusion to work. */
-#ifndef _H_f_expr
-#define _H_f_expr
+#ifndef GCC_F_EXPR_H
+#define GCC_F_EXPR_H
/* Simple definitions and enumerations. */
@@ -191,4 +191,4 @@ void ffeexpr_type_combine (ffeinfoBasictype *nbt, ffeinfoKindtype *nkt,
/* End of #include file. */
-#endif
+#endif /* ! GCC_F_EXPR_H */
diff --git a/contrib/gcc/f/ffe.texi b/contrib/gcc/f/ffe.texi
index e303332..8e019fa 100644
--- a/contrib/gcc/f/ffe.texi
+++ b/contrib/gcc/f/ffe.texi
@@ -19,7 +19,7 @@ as of late May, 1999.
To find about things that are ``To Be Determined'' or ``To Be Done'',
search for the string TBD.
If you want to help by working on one or more of these items,
-email me at @email{@value{email-burley}}.
+email @email{gcc@@gcc.gnu.org}.
If you're planning to do more than just research issues and offer comments,
see @uref{http://www.gnu.org/software/contribute.html} for steps you might
need to take first.
@@ -268,6 +268,12 @@ Lexing (@file{lex.c})
Stand-alone statement identification (@file{sta.c})
@item
+INCLUDE handling (@file{sti.c})
+
+@item
+Order-dependent statement identification (@file{stq.c})
+
+@item
Parsing (@file{stb.c} and @file{expr.c})
@item
@@ -329,7 +335,18 @@ Since the second lexeme is @samp{(},
the first must represent an array for this to be an assignment statement,
else it's a statement function.
-Either way, @file{sta.c} hands off the statement to @file{stb.c}
+Either way, @file{sta.c} hands off the statement to @file{stq.c}
+(via @file{sti.c}, which expands INCLUDE files).
+@file{stq.c} figures out what a statement that is,
+on its own, ambiguous, must actually be based on the context
+established by previous statements.
+
+So, @file{stq.c} watches the statement stream for executable statements,
+END statements, and so on, so it knows whether @samp{A(B)=C} is
+(intended as) a statement-function definition or an assignment statement.
+
+After establishing the context-aware statement info, @file{stq.c}
+passes the original sample statement on to @file{stb.c}
(either its statement-function parser or its assignment-statement parser).
@file{stb.c} forms a
@@ -379,6 +396,8 @@ decimal numbering is used, and so on.
* g77stripcard::
* lex.c::
* sta.c::
+* sti.c::
+* stq.c::
* stb.c::
* expr.c::
* stc.c::
@@ -527,6 +546,8 @@ as necessary to reach column @var{n},
where dividing @samp{(@var{n} - 1)} by eight
results in a remainder of zero.
+That saves having to pass most source files through @code{expand}.
+
@item
Linefeeds (ASCII code 10)
mark the ends of lines.
@@ -631,6 +652,14 @@ to the appropriate @code{CHARACTER} constants.
Then @code{g77} wouldn't have to define a prefix syntax for Hollerith
constants specifying whether they want C-style or straight-through
backslashes.
+
+@item
+To allow for form-neutral INCLUDE files without requiring them
+to be preprocessed,
+the fixed-form lexer should offer an extension (if possible)
+allowing a trailing @samp{&} to be ignored, especially if after
+column 72, as it would be using the traditional Unix Fortran source
+model (which ignores @emph{everything} after column 72).
@end itemize
The above implements nearly exactly what is specified by
@@ -638,9 +667,10 @@ The above implements nearly exactly what is specified by
and
@ref{Lines},
except it also provides automatic conversion of tabs
-and ignoring of newline-related carriage returns.
+and ignoring of newline-related carriage returns,
+as well as accommodating form-neutral INCLUDE files.
-It also effects the ``pure visual'' model,
+It also implements the ``pure visual'' model,
by which is meant that a user viewing his code
in a typical text editor
(assuming it's not preprocessed via @code{g77stripcard} or similar)
@@ -672,10 +702,10 @@ the GNU Fortran ``pure visual'' model meets these requirements.
Any language or user-visible source form
requiring special tagging of tabs,
the ends of lines after spaces/tabs,
-and so on, is broken by this definition.
-Fortunately, Fortran @emph{itself} is not broken,
-even if most vendor-supplied defaults for their Fortran compilers @emph{are}
-in this regard.)
+and so on, fails to meet this fairly straightforward specification.
+Fortunately, Fortran @emph{itself} does not mandate such a failure,
+though most vendor-supplied defaults for their Fortran compilers @emph{do}
+fail to meet this specification for readability.)
Further, this model provides a clean interface
to whatever preprocessors or code-generators are used
@@ -685,6 +715,12 @@ Mainly, they need not worry about long lines.
@node sta.c
@subsection sta.c
+@node sti.c
+@subsection sti.c
+
+@node stq.c
+@subsection stq.c
+
@node stb.c
@subsection stb.c
@@ -988,14 +1024,6 @@ Specific issues to resolve:
@itemize @bullet
@item
-Just where should @code{INCLUDE} processing take place?
-
-Clearly before (or part of) statement identification (@file{sta.c}),
-since determining whether @samp{I(J)=K} is a statement-function
-definition or an assignment statement requires knowing the context,
-which in turn requires having processed @code{INCLUDE} files.
-
-@item
Just where should (if it was implemented) @code{USE} processing take place?
This gets into the whole issue of how @code{g77} should handle the concept
@@ -1050,6 +1078,9 @@ and @samp{-fcase-initcap} options?
I've asked @email{info-gnu-fortran@@gnu.org} for input on this.
Not having to support these makes it easier to write the new front end,
and might also avoid complicated its design.
+
+The consensus to date (1999-11-17) has been to drop this support.
+Can't recall anybody saying they're using it, in fact.
@end itemize
@node Philosophy of Code Generation
@@ -1203,6 +1234,21 @@ were worked out.
The FFE was changed back to default to using that native facility,
leaving emulation as an option.
+Later during the release cycle
+(which was called EGCS 1.2, but soon became GCC 2.95),
+bugs in the native facility were found.
+Reactions among various people included
+``the last thing we should do is change the default back'',
+``we must change the default back'',
+and ``let's figure out whether we can narrow down the bugs to
+few enough cases to allow the now-months-long-tested default
+to remain the same''.
+The latter viewpoint won that particular time.
+The bugs exposed other concerns regarding ABI compliance
+when the ABI specified treatment of complex data as different
+from treatment of what Fortran and GNU C consider the equivalent
+aggregation (structure) of real (or float) pairs.
+
Other Fortran constructs---arrays, character strings,
complex division, @code{COMMON} and @code{EQUIVALENCE} aggregates,
and so on---involve issues similar to those pertaining to complex arithmetic.
@@ -1460,7 +1506,10 @@ be supported.
Both this mythical, and today's real, GBE caters to its GBEL
by, sometimes, scrambling around, cleaning up after itself---after
discovering that assumptions it made earlier during code generation
-are incorrect.)
+are incorrect.
+That's not a great design, since it indicates significant code
+paths that might be rarely tested but used in some key production
+environments.)
So, the FFE handles these discrepancies---between the order in which
it discovers facts about the code it is compiling,
diff --git a/contrib/gcc/f/fini.c b/contrib/gcc/f/fini.c
index 1b7c981..28d9028 100644
--- a/contrib/gcc/f/fini.c
+++ b/contrib/gcc/f/fini.c
@@ -62,7 +62,7 @@ static FILE *out;
static char prefix[32];
static char postfix[32];
static char storage[32];
-static const char *xspaces[]
+static const char *const xspaces[]
=
{
"", /* 0 */
@@ -234,7 +234,7 @@ int
main (int argc, char **argv)
{
char buf[MAXNAMELEN];
- char last_buf[MAXNAMELEN] = "";
+ char last_buf[MAXNAMELEN];
char kwname[MAXNAMELEN];
char routine[32];
char type[32];
@@ -256,6 +256,8 @@ main (int argc, char **argv)
int cc;
bool do_exit = FALSE;
+ last_buf[0] = '\0';
+
for (i = 0; ((size_t) i) < ARRAY_SIZE (names); ++i)
{ /* Initialize length/name ordered list roots. */
names[i].first = (name) &names[i];
@@ -267,7 +269,7 @@ main (int argc, char **argv)
if (argc != 4)
{
fprintf (stderr, "Command form: fini input output-code output-include\n");
- exit (1);
+ return (1);
}
input_name = argv[1];
@@ -278,21 +280,21 @@ main (int argc, char **argv)
if (in == NULL)
{
fprintf (stderr, "Cannot open \"%s\"\n", input_name);
- exit (1);
+ return (1);
}
out = fopen (output_name, "w");
if (out == NULL)
{
fclose (in);
fprintf (stderr, "Cannot open \"%s\"\n", output_name);
- exit (1);
+ return (1);
}
incl = fopen (include_name, "w");
if (incl == NULL)
{
fclose (in);
fprintf (stderr, "Cannot open \"%s\"\n", include_name);
- exit (1);
+ return (1);
}
/* Get past the initial block-style comment (man, this parsing code is just
@@ -316,7 +318,7 @@ main (int argc, char **argv)
else
{
assert ("EOF too soon!" == NULL);
- exit (1);
+ return (1);
}
}
@@ -365,7 +367,7 @@ main (int argc, char **argv)
/* Make new name object to store name and its keyword. */
- newname = (name) malloc (sizeof (*newname));
+ newname = (name) xmalloc (sizeof (*newname));
newname->namelen = strlen (buf);
newname->kwlen = strlen (kwname);
total_length = newname->kwlen + fixlengths;
@@ -379,15 +381,9 @@ main (int argc, char **argv)
for (i = 0; i < newname->namelen; ++i)
{
cc = buf[i];
- if (ISALPHA (cc))
- {
- newname->name_uc[i] = toupper (cc);
- newname->name_lc[i] = tolower (cc);
- newname->name_ic[i] = cc;
- }
- else
- newname->name_uc[i] = newname->name_lc[i] = newname->name_ic[i]
- = cc;
+ newname->name_uc[i] = TOUPPER (cc);
+ newname->name_lc[i] = TOLOWER (cc);
+ newname->name_ic[i] = cc;
}
newname->name_uc[i] = newname->name_lc[i] = newname->name_ic[i] = '\0';
@@ -441,7 +437,7 @@ main (int argc, char **argv)
#endif
if (do_exit)
- exit (1);
+ return (1);
/* First output the #include file. */
@@ -624,7 +620,7 @@ typedef enum %s_ %s;\n\
fclose (incl);
if (in != stdin)
fclose (in);
- exit (0);
+ return (0);
}
void
diff --git a/contrib/gcc/f/g77.texi b/contrib/gcc/f/g77.texi
index eaab254..38512cf 100644
--- a/contrib/gcc/f/g77.texi
+++ b/contrib/gcc/f/g77.texi
@@ -2,8 +2,8 @@
@c %**start of header
@setfilename g77.info
-@set last-update 1999-06-06
-@set copyrights-g77 1995-1999
+@set last-update 2001-11-20
+@set copyrights-g77 1995,1996,1997,1998,1999,2000,2001
@include root.texi
@@ -32,6 +32,25 @@
@c margin. -- burley 1999-03-13 (from mew's comment in gcc.texi).
@c @finalout
+@macro gcctabopt{body}
+@code{\body\}
+@end macro
+@macro gccoptlist{body}
+@smallexample
+\body\
+@end smallexample
+@end macro
+@c Makeinfo handles the above macro OK, TeX needs manual line breaks;
+@c they get lost at some point in handling the macro. But if @macro is
+@c used here rather than @alias, it produces double line breaks.
+@iftex
+@alias gol = *
+@end iftex
+@ifnottex
+@macro gol
+@end macro
+@end ifnottex
+
@ifset INTERNALS
@ifset USING
@settitle Using and Porting GNU Fortran
@@ -77,18 +96,18 @@
@end direntry
@ifset INTERNALS
@ifset USING
-This file documents the use and the internals of the GNU Fortran (@code{g77})
+This file documents the use and the internals of the GNU Fortran (@command{g77})
compiler.
-It corresponds to the @value{which-g77} version of @code{g77}.
+It corresponds to the @value{which-g77} version of @command{g77}.
@end ifset
@end ifset
@ifclear USING
-This file documents the internals of the GNU Fortran (@code{g77}) compiler.
-It corresponds to the @value{which-g77} version of @code{g77}.
+This file documents the internals of the GNU Fortran (@command{g77}) compiler.
+It corresponds to the @value{which-g77} version of @command{g77}.
@end ifclear
@ifclear INTERNALS
-This file documents the use of the GNU Fortran (@code{g77}) compiler.
-It corresponds to the @value{which-g77} version of @code{g77}.
+This file documents the use of the GNU Fortran (@command{g77}) compiler.
+It corresponds to the @value{which-g77} version of @command{g77}.
@end ifclear
Published by the Free Software Foundation
@@ -97,32 +116,25 @@ Boston, MA 02111-1307 USA
Copyright (C) @value{copyrights-g77} Free Software Foundation, Inc.
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-@ignore
-Permission is granted to process this file through Tex and print the
-results, provided the printed document carries copying permission
-notice identical to this one except for the removal of this paragraph
-(this paragraph not being relevant to the printed manual).
-
-@end ignore
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided also that the
-sections entitled ``GNU General Public License,'' ``Funding for Free
-Software,'' and ``Protect Your Freedom---Fight `Look And Feel'@w{}'' are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions,
-except that the sections entitled ``GNU General Public License,''
-``Funding for Free Software,'' and ``Protect Your Freedom---Fight `Look
-And Feel'@w{}'', and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being ``GNU General Public License'' and ``Funding
+Free Software'', the Front-Cover
+texts being (a) (see below), and with the Back-Cover Texts being (b)
+(see below). A copy of the license is included in the section entitled
+``GNU Free Documentation License''.
+
+(a) The FSF's Front-Cover Text is:
+
+ A GNU Manual
+
+(b) The FSF's Back-Cover Text is:
+
+ You have freedom to copy and modify this GNU Manual, like GNU
+ software. Copies published by the Free Software Foundation raise
+ funds for GNU development.
@end ifinfo
Contributed by James Craig Burley (@email{@value{email-burley}}).
@@ -163,95 +175,92 @@ Boston, MA 02111-1307, USA@*
@c Printed copies are available for $? each.@*
@c ISBN ???
@sp 1
-Permission is granted to make and distribute verbatim copies of
-this manual provided the copyright notice and this permission notice
-are preserved on all copies.
-
-Permission is granted to copy and distribute modified versions of this
-manual under the conditions for verbatim copying, provided also that the
-sections entitled ``GNU General Public License,'' ``Funding for Free
-Software,'' and ``Protect Your Freedom---Fight `Look And Feel'@w{}'' are
-included exactly as in the original, and provided that the entire
-resulting derived work is distributed under the terms of a permission
-notice identical to this one.
-
-Permission is granted to copy and distribute translations of this manual
-into another language, under the above conditions for modified versions,
-except that the sections entitled ``GNU General Public License,''
-``Funding for Free Software,'' and ``Protect Your Freedom---Fight `Look
-And Feel'@w{}'', and this permission notice, may be included in
-translations approved by the Free Software Foundation instead of in the
-original English.
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being ``GNU General Public License'' and ``Funding
+Free Software'', the Front-Cover
+texts being (a) (see below), and with the Back-Cover Texts being (b)
+(see below). A copy of the license is included in the section entitled
+``GNU Free Documentation License''.
+
+(a) The FSF's Front-Cover Text is:
+
+ A GNU Manual
+
+(b) The FSF's Back-Cover Text is:
+
+ You have freedom to copy and modify this GNU Manual, like GNU
+ software. Copies published by the Free Software Foundation raise
+ funds for GNU development.
@end titlepage
+@summarycontents
+@contents
@page
-@ifinfo
-
@node Top, Copying,, (DIR)
@top Introduction
@cindex Introduction
@ifset INTERNALS
@ifset USING
-This manual documents how to run, install and port @code{g77},
+This manual documents how to run, install and port @command{g77},
as well as its new features and incompatibilities,
and how to report bugs.
-It corresponds to the @value{which-g77} version of @code{g77}.
+It corresponds to the @value{which-g77} version of @command{g77}.
@end ifset
@end ifset
@ifclear INTERNALS
-This manual documents how to run and install @code{g77},
+This manual documents how to run and install @command{g77},
as well as its new features and incompatibilities, and how to report
bugs.
-It corresponds to the @value{which-g77} version of @code{g77}.
+It corresponds to the @value{which-g77} version of @command{g77}.
@end ifclear
@ifclear USING
-This manual documents how to port @code{g77},
+This manual documents how to port @command{g77},
as well as its new features and incompatibilities,
and how to report bugs.
-It corresponds to the @value{which-g77} version of @code{g77}.
+It corresponds to the @value{which-g77} version of @command{g77}.
@end ifclear
-@end ifinfo
-
@ifset DEVELOPMENT
@emph{Warning:} This document is still under development,
-and might not accurately reflect the @code{g77} code base
+and might not accurately reflect the @command{g77} code base
of which it is a part.
Efforts are made to keep it somewhat up-to-date,
but they are particularly concentrated
on any version of this information
-that is distributed as part of a @emph{released} @code{g77}.
+that is distributed as part of a @emph{released} @command{g77}.
In particular, while this document is intended to apply to
-the @value{which-g77} version of @code{g77},
+the @value{which-g77} version of @command{g77},
only an official @emph{release} of that version
is expected to contain documentation that is
-most consistent with the @code{g77} product in that version.
+most consistent with the @command{g77} product in that version.
@end ifset
@menu
* Copying:: GNU General Public License says
how you can copy and share GNU Fortran.
+* GNU Free Documentation License::
+ How you can copy and share this manual.
* Contributors:: People who have contributed to GNU Fortran.
* Funding:: How to help assure continued work for free software.
* Funding GNU Fortran:: How to help assure continued work on GNU Fortran.
-* Look and Feel:: Protect your freedom---fight ``look and feel''.
@ifset USING
* Getting Started:: Finding your way around this manual.
-* What is GNU Fortran?:: How @code{g77} fits into the universe.
+* What is GNU Fortran?:: How @command{g77} fits into the universe.
* G77 and GCC:: You can compile Fortran, C, or other programs.
-* Invoking G77:: Command options supported by @code{g77}.
-* News:: News about recent releases of @code{g77}.
-* Changes:: User-visible changes to recent releases of @code{g77}.
+* Invoking G77:: Command options supported by @command{g77}.
+* News:: News about recent releases of @command{g77}.
+* Changes:: User-visible changes to recent releases of @command{g77}.
* Language:: The GNU Fortran language.
* Compiler:: The GNU Fortran compiler.
-* Other Dialects:: Dialects of Fortran supported by @code{g77}.
-* Other Compilers:: Fortran compilers other than @code{g77}.
+* Other Dialects:: Dialects of Fortran supported by @command{g77}.
+* Other Compilers:: Fortran compilers other than @command{g77}.
* Other Languages:: Languages other than Fortran.
-* Installation:: How to configure, compile and install GNU Fortran.
-* Debugging and Interfacing:: How @code{g77} generates code.
+* Debugging and Interfacing:: How @command{g77} generates code.
* Collected Fortran Wisdom:: How to avoid Trouble.
* Trouble:: If you have trouble with GNU Fortran.
* Open Questions:: Things we'd like to know.
@@ -259,408 +268,20 @@ most consistent with the @code{g77} product in that version.
* Service:: How to find suppliers of support for GNU Fortran.
@end ifset
@ifset INTERNALS
-* Adding Options:: Guidance on teaching @code{g77} about new options.
-* Projects:: Projects for @code{g77} internals hackers.
-* Front End:: Design and implementation of the @code{g77} front end.
+* Adding Options:: Guidance on teaching @command{g77} about new options.
+* Projects:: Projects for @command{g77} internals hackers.
+* Front End:: Design and implementation of the @command{g77} front end.
@end ifset
-* M: Diagnostics. Diagnostics produced by @code{g77}.
+* M: Diagnostics. Diagnostics produced by @command{g77}.
* Index:: Index of concepts and symbol names.
@end menu
@c yes, the "M: " @emph{is} intentional -- bad.def references it (CMPAMBIG)!
-@node Copying
-@unnumbered GNU GENERAL PUBLIC LICENSE
-@center Version 2, June 1991
-
-@display
-Copyright @copyright{} 1989, 1991 Free Software Foundation, Inc.
-59 Temple Place - Suite 330, Boston, MA 02111-1307, USA
-
-Everyone is permitted to copy and distribute verbatim copies
-of this license document, but changing it is not allowed.
-@end display
-
-@unnumberedsec Preamble
-
- The licenses for most software are designed to take away your
-freedom to share and change it. By contrast, the GNU General Public
-License is intended to guarantee your freedom to share and change free
-software---to make sure the software is free for all its users. This
-General Public License applies to most of the Free Software
-Foundation's software and to any other program whose authors commit to
-using it. (Some other Free Software Foundation software is covered by
-the GNU Library General Public License instead.) You can apply it to
-your programs, too.
-
- When we speak of free software, we are referring to freedom, not
-price. Our General Public Licenses are designed to make sure that you
-have the freedom to distribute copies of free software (and charge for
-this service if you wish), that you receive source code or can get it
-if you want it, that you can change the software or use pieces of it
-in new free programs; and that you know you can do these things.
-
- To protect your rights, we need to make restrictions that forbid
-anyone to deny you these rights or to ask you to surrender the rights.
-These restrictions translate to certain responsibilities for you if you
-distribute copies of the software, or if you modify it.
-
- For example, if you distribute copies of such a program, whether
-gratis or for a fee, you must give the recipients all the rights that
-you have. You must make sure that they, too, receive or can get the
-source code. And you must show them these terms so they know their
-rights.
-
- We protect your rights with two steps: (1) copyright the software, and
-(2) offer you this license which gives you legal permission to copy,
-distribute and/or modify the software.
-
- Also, for each author's protection and ours, we want to make certain
-that everyone understands that there is no warranty for this free
-software. If the software is modified by someone else and passed on, we
-want its recipients to know that what they have is not the original, so
-that any problems introduced by others will not reflect on the original
-authors' reputations.
-
- Finally, any free program is threatened constantly by software
-patents. We wish to avoid the danger that redistributors of a free
-program will individually obtain patent licenses, in effect making the
-program proprietary. To prevent this, we have made it clear that any
-patent must be licensed for everyone's free use or not licensed at all.
-
- The precise terms and conditions for copying, distribution and
-modification follow.
-
-@iftex
-@unnumberedsec TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-@end iftex
-@ifinfo
-@center TERMS AND CONDITIONS FOR COPYING, DISTRIBUTION AND MODIFICATION
-@end ifinfo
-
-@enumerate 0
-@item
-This License applies to any program or other work which contains
-a notice placed by the copyright holder saying it may be distributed
-under the terms of this General Public License. The ``Program'', below,
-refers to any such program or work, and a ``work based on the Program''
-means either the Program or any derivative work under copyright law:
-that is to say, a work containing the Program or a portion of it,
-either verbatim or with modifications and/or translated into another
-language. (Hereinafter, translation is included without limitation in
-the term ``modification''.) Each licensee is addressed as ``you''.
-
-Activities other than copying, distribution and modification are not
-covered by this License; they are outside its scope. The act of
-running the Program is not restricted, and the output from the Program
-is covered only if its contents constitute a work based on the
-Program (independent of having been made by running the Program).
-Whether that is true depends on what the Program does.
-
-@item
-You may copy and distribute verbatim copies of the Program's
-source code as you receive it, in any medium, provided that you
-conspicuously and appropriately publish on each copy an appropriate
-copyright notice and disclaimer of warranty; keep intact all the
-notices that refer to this License and to the absence of any warranty;
-and give any other recipients of the Program a copy of this License
-along with the Program.
-
-You may charge a fee for the physical act of transferring a copy, and
-you may at your option offer warranty protection in exchange for a fee.
-
-@item
-You may modify your copy or copies of the Program or any portion
-of it, thus forming a work based on the Program, and copy and
-distribute such modifications or work under the terms of Section 1
-above, provided that you also meet all of these conditions:
-
-@enumerate a
-@item
-You must cause the modified files to carry prominent notices
-stating that you changed the files and the date of any change.
-
-@item
-You must cause any work that you distribute or publish, that in
-whole or in part contains or is derived from the Program or any
-part thereof, to be licensed as a whole at no charge to all third
-parties under the terms of this License.
-
-@item
-If the modified program normally reads commands interactively
-when run, you must cause it, when started running for such
-interactive use in the most ordinary way, to print or display an
-announcement including an appropriate copyright notice and a
-notice that there is no warranty (or else, saying that you provide
-a warranty) and that users may redistribute the program under
-these conditions, and telling the user how to view a copy of this
-License. (Exception: if the Program itself is interactive but
-does not normally print such an announcement, your work based on
-the Program is not required to print an announcement.)
-@end enumerate
-
-These requirements apply to the modified work as a whole. If
-identifiable sections of that work are not derived from the Program,
-and can be reasonably considered independent and separate works in
-themselves, then this License, and its terms, do not apply to those
-sections when you distribute them as separate works. But when you
-distribute the same sections as part of a whole which is a work based
-on the Program, the distribution of the whole must be on the terms of
-this License, whose permissions for other licensees extend to the
-entire whole, and thus to each and every part regardless of who wrote it.
-
-Thus, it is not the intent of this section to claim rights or contest
-your rights to work written entirely by you; rather, the intent is to
-exercise the right to control the distribution of derivative or
-collective works based on the Program.
-
-In addition, mere aggregation of another work not based on the Program
-with the Program (or with a work based on the Program) on a volume of
-a storage or distribution medium does not bring the other work under
-the scope of this License.
-
-@item
-You may copy and distribute the Program (or a work based on it,
-under Section 2) in object code or executable form under the terms of
-Sections 1 and 2 above provided that you also do one of the following:
-
-@enumerate a
-@item
-Accompany it with the complete corresponding machine-readable
-source code, which must be distributed under the terms of Sections
-1 and 2 above on a medium customarily used for software interchange; or,
-
-@item
-Accompany it with a written offer, valid for at least three
-years, to give any third party, for a charge no more than your
-cost of physically performing source distribution, a complete
-machine-readable copy of the corresponding source code, to be
-distributed under the terms of Sections 1 and 2 above on a medium
-customarily used for software interchange; or,
-
-@item
-Accompany it with the information you received as to the offer
-to distribute corresponding source code. (This alternative is
-allowed only for noncommercial distribution and only if you
-received the program in object code or executable form with such
-an offer, in accord with Subsection b above.)
-@end enumerate
-
-The source code for a work means the preferred form of the work for
-making modifications to it. For an executable work, complete source
-code means all the source code for all modules it contains, plus any
-associated interface definition files, plus the scripts used to
-control compilation and installation of the executable. However, as a
-special exception, the source code distributed need not include
-anything that is normally distributed (in either source or binary
-form) with the major components (compiler, kernel, and so on) of the
-operating system on which the executable runs, unless that component
-itself accompanies the executable.
-
-If distribution of executable or object code is made by offering
-access to copy from a designated place, then offering equivalent
-access to copy the source code from the same place counts as
-distribution of the source code, even though third parties are not
-compelled to copy the source along with the object code.
-
-@item
-You may not copy, modify, sublicense, or distribute the Program
-except as expressly provided under this License. Any attempt
-otherwise to copy, modify, sublicense or distribute the Program is
-void, and will automatically terminate your rights under this License.
-However, parties who have received copies, or rights, from you under
-this License will not have their licenses terminated so long as such
-parties remain in full compliance.
-
-@item
-You are not required to accept this License, since you have not
-signed it. However, nothing else grants you permission to modify or
-distribute the Program or its derivative works. These actions are
-prohibited by law if you do not accept this License. Therefore, by
-modifying or distributing the Program (or any work based on the
-Program), you indicate your acceptance of this License to do so, and
-all its terms and conditions for copying, distributing or modifying
-the Program or works based on it.
-
-@item
-Each time you redistribute the Program (or any work based on the
-Program), the recipient automatically receives a license from the
-original licensor to copy, distribute or modify the Program subject to
-these terms and conditions. You may not impose any further
-restrictions on the recipients' exercise of the rights granted herein.
-You are not responsible for enforcing compliance by third parties to
-this License.
-
-@item
-If, as a consequence of a court judgment or allegation of patent
-infringement or for any other reason (not limited to patent issues),
-conditions are imposed on you (whether by court order, agreement or
-otherwise) that contradict the conditions of this License, they do not
-excuse you from the conditions of this License. If you cannot
-distribute so as to satisfy simultaneously your obligations under this
-License and any other pertinent obligations, then as a consequence you
-may not distribute the Program at all. For example, if a patent
-license would not permit royalty-free redistribution of the Program by
-all those who receive copies directly or indirectly through you, then
-the only way you could satisfy both it and this License would be to
-refrain entirely from distribution of the Program.
-
-If any portion of this section is held invalid or unenforceable under
-any particular circumstance, the balance of the section is intended to
-apply and the section as a whole is intended to apply in other
-circumstances.
-
-It is not the purpose of this section to induce you to infringe any
-patents or other property right claims or to contest validity of any
-such claims; this section has the sole purpose of protecting the
-integrity of the free software distribution system, which is
-implemented by public license practices. Many people have made
-generous contributions to the wide range of software distributed
-through that system in reliance on consistent application of that
-system; it is up to the author/donor to decide if he or she is willing
-to distribute software through any other system and a licensee cannot
-impose that choice.
-
-This section is intended to make thoroughly clear what is believed to
-be a consequence of the rest of this License.
-
-@item
-If the distribution and/or use of the Program is restricted in
-certain countries either by patents or by copyrighted interfaces, the
-original copyright holder who places the Program under this License
-may add an explicit geographical distribution limitation excluding
-those countries, so that distribution is permitted only in or among
-countries not thus excluded. In such case, this License incorporates
-the limitation as if written in the body of this License.
-
-@item
-The Free Software Foundation may publish revised and/or new versions
-of the General Public License from time to time. Such new versions will
-be similar in spirit to the present version, but may differ in detail to
-address new problems or concerns.
-
-Each version is given a distinguishing version number. If the Program
-specifies a version number of this License which applies to it and ``any
-later version'', you have the option of following the terms and conditions
-either of that version or of any later version published by the Free
-Software Foundation. If the Program does not specify a version number of
-this License, you may choose any version ever published by the Free Software
-Foundation.
-
-@item
-If you wish to incorporate parts of the Program into other free
-programs whose distribution conditions are different, write to the author
-to ask for permission. For software which is copyrighted by the Free
-Software Foundation, write to the Free Software Foundation; we sometimes
-make exceptions for this. Our decision will be guided by the two goals
-of preserving the free status of all derivatives of our free software and
-of promoting the sharing and reuse of software generally.
-
-@iftex
-@heading NO WARRANTY
-@end iftex
-@ifinfo
-@center NO WARRANTY
-@end ifinfo
-
-@item
-BECAUSE THE PROGRAM IS LICENSED FREE OF CHARGE, THERE IS NO WARRANTY
-FOR THE PROGRAM, TO THE EXTENT PERMITTED BY APPLICABLE LAW. EXCEPT WHEN
-OTHERWISE STATED IN WRITING THE COPYRIGHT HOLDERS AND/OR OTHER PARTIES
-PROVIDE THE PROGRAM ``AS IS'' WITHOUT WARRANTY OF ANY KIND, EITHER EXPRESSED
-OR IMPLIED, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF
-MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE. THE ENTIRE RISK AS
-TO THE QUALITY AND PERFORMANCE OF THE PROGRAM IS WITH YOU. SHOULD THE
-PROGRAM PROVE DEFECTIVE, YOU ASSUME THE COST OF ALL NECESSARY SERVICING,
-REPAIR OR CORRECTION.
-
-@item
-IN NO EVENT UNLESS REQUIRED BY APPLICABLE LAW OR AGREED TO IN WRITING
-WILL ANY COPYRIGHT HOLDER, OR ANY OTHER PARTY WHO MAY MODIFY AND/OR
-REDISTRIBUTE THE PROGRAM AS PERMITTED ABOVE, BE LIABLE TO YOU FOR DAMAGES,
-INCLUDING ANY GENERAL, SPECIAL, INCIDENTAL OR CONSEQUENTIAL DAMAGES ARISING
-OUT OF THE USE OR INABILITY TO USE THE PROGRAM (INCLUDING BUT NOT LIMITED
-TO LOSS OF DATA OR DATA BEING RENDERED INACCURATE OR LOSSES SUSTAINED BY
-YOU OR THIRD PARTIES OR A FAILURE OF THE PROGRAM TO OPERATE WITH ANY OTHER
-PROGRAMS), EVEN IF SUCH HOLDER OR OTHER PARTY HAS BEEN ADVISED OF THE
-POSSIBILITY OF SUCH DAMAGES.
-@end enumerate
-
-@iftex
-@heading END OF TERMS AND CONDITIONS
-@end iftex
-@ifinfo
-@center END OF TERMS AND CONDITIONS
-@end ifinfo
-
-@page
-@unnumberedsec How to Apply These Terms to Your New Programs
-
- If you develop a new program, and you want it to be of the greatest
-possible use to the public, the best way to achieve this is to make it
-free software which everyone can redistribute and change under these terms.
+@include gpl.texi
- To do so, attach the following notices to the program. It is safest
-to attach them to the start of each source file to most effectively
-convey the exclusion of warranty; and each file should have at least
-the ``copyright'' line and a pointer to where the full notice is found.
-
-@smallexample
-@var{one line to give the program's name and a brief idea of what it does.}
-Copyright (C) 19@var{yy} @var{name of author}
-
-This program 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 of the License, or
-(at your option) any later version.
-
-This program 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 this program; if not, write to the Free Software
-Foundation, Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
-@end smallexample
-
-Also add information on how to contact you by electronic and paper mail.
-
-If the program is interactive, make it output a short notice like this
-when it starts in an interactive mode:
-
-@smallexample
-Gnomovision version 69, Copyright (C) 19@var{yy} @var{name of author}
-Gnomovision comes with ABSOLUTELY NO WARRANTY; for details
-type `show w'.
-This is free software, and you are welcome to redistribute it
-under certain conditions; type `show c' for details.
-@end smallexample
-
-The hypothetical commands @samp{show w} and @samp{show c} should show
-the appropriate parts of the General Public License. Of course, the
-commands you use may be called something other than @samp{show w} and
-@samp{show c}; they could even be mouse-clicks or menu items---whatever
-suits your program.
-
-You should also get your employer (if you work as a programmer) or your
-school, if any, to sign a ``copyright disclaimer'' for the program, if
-necessary. Here is a sample; alter the names:
-
-@smallexample
-Yoyodyne, Inc., hereby disclaims all copyright interest in the program
-`Gnomovision' (which makes passes at compilers) written by James Hacker.
-
-@var{signature of Ty Coon}, 1 April 1989
-Ty Coon, President of Vice
-@end smallexample
-
-This General Public License does not permit incorporating your program into
-proprietary programs. If your program is a subroutine library, you may
-consider it more useful to permit linking proprietary applications with the
-library. If this is what you want to do, use the GNU Library General
-Public License instead of this License.
+@include fdl.texi
@node Contributors
@unnumbered Contributors to GNU Fortran
@@ -674,13 +295,14 @@ many people have helped create and improve GNU Fortran.
@item
The packaging and compiler portions of GNU Fortran are based largely
on the GNU CC compiler.
-@xref{Contributors,,Contributors to GNU CC,gcc,Using and Porting GNU CC},
+@xref{Contributors,,Contributors to GCC,gcc,Using the GNU Compiler
+Collection (GCC)},
for more information.
@item
The run-time library used by GNU Fortran is a repackaged version
of the @code{libf2c} library (combined from the @code{libF77} and
-@code{libI77} libraries) provided as part of @code{f2c}, available for
+@code{libI77} libraries) provided as part of @command{f2c}, available for
free from @code{netlib} sites on the Internet.
@item
@@ -688,10 +310,10 @@ Cygnus Support and The Free Software Foundation contributed
significant money and/or equipment to Craig's efforts.
@item
-The following individuals served as alpha testers prior to @code{g77}'s
+The following individuals served as alpha testers prior to @command{g77}'s
public release. This work consisted of testing, researching, sometimes
debugging, and occasionally providing small amounts of code and fixes
-for @code{g77}, plus offering plenty of helpful advice to Craig:
+for @command{g77}, plus offering plenty of helpful advice to Craig:
@itemize @w{}
@item
@@ -727,6 +349,10 @@ Ian Watson
@end itemize
@item
+Dave Love (@email{d.love@@dl.ac.uk})
+wrote the libU77 part of the run-time library.
+
+@item
Scott Snyder (@email{snyder@@d0sgif.fnal.gov})
provided the patch to add rudimentary support
for @code{INTEGER*1}, @code{INTEGER*2}, and
@@ -745,16 +371,16 @@ old @file{g77-0.5.16/f/DOC} file.
@item
Toon Moene (@email{toon@@moene.indiv.nluug.nl}) performed
some analysis of generated code as part of an overall project
-to improve @code{g77} code generation to at least be as good
-as @code{f2c} used in conjunction with @code{gcc}.
+to improve @command{g77} code generation to at least be as good
+as @command{f2c} used in conjunction with @command{gcc}.
So far, this has resulted in the three, somewhat
-experimental, options added by @code{g77} to the @code{gcc}
+experimental, options added by @command{g77} to the @command{gcc}
compiler and its back end.
-(These, in turn, have made their way into the @code{egcs}
-version of the compiler, and do not exist in @code{gcc}
-version 2.8 or versions of @code{g77} based on that version
-of @code{gcc}.)
+(These, in turn, had made their way into the @code{egcs}
+version of the compiler, and do not exist in @command{gcc}
+version 2.8 or versions of @command{g77} based on that version
+of @command{gcc}.)
@item
John Carr (@email{jfc@@mit.edu}) wrote the alias analysis improvements.
@@ -764,7 +390,7 @@ Thanks to Mary Cortani and the staff at Craftwork Solutions
(@email{support@@craftwork.com}) for all of their support.
@item
-Many other individuals have helped debug, test, and improve @code{g77}
+Many other individuals have helped debug, test, and improve @command{g77}
over the past several years, and undoubtedly more people
will be doing so in the future.
If you have done so, and would like
@@ -772,65 +398,21 @@ to see your name listed in the above list, please ask!
The default is that people wish to remain anonymous.
@end itemize
-@node Funding
-@chapter Funding Free Software
-
-If you want to have more free software a few years from now, it makes
-sense for you to help encourage people to contribute funds for its
-development. The most effective approach known is to encourage
-commercial redistributors to donate.
-
-Users of free software systems can boost the pace of development by
-encouraging for-a-fee distributors to donate part of their selling price
-to free software developers---the Free Software Foundation, and others.
-
-The way to convince distributors to do this is to demand it and expect
-it from them. So when you compare distributors, judge them partly by
-how much they give to free software development. Show distributors
-they must compete to be the one who gives the most.
-
-To make this approach work, you must insist on numbers that you can
-compare, such as, ``We will donate ten dollars to the Frobnitz project
-for each disk sold.'' Don't be satisfied with a vague promise, such as
-``A portion of the profits are donated,'' since it doesn't give a basis
-for comparison.
-
-Even a precise fraction ``of the profits from this disk'' is not very
-meaningful, since creative accounting and unrelated business decisions
-can greatly alter what fraction of the sales price counts as profit.
-If the price you pay is $50, ten percent of the profit is probably
-less than a dollar; it might be a few cents, or nothing at all.
-
-Some redistributors do development work themselves. This is useful too;
-but to keep everyone honest, you need to inquire how much they do, and
-what kind. Some kinds of development make much more long-term
-difference than others. For example, maintaining a separate version of
-a program contributes very little; maintaining the standard version of a
-program for the whole community contributes much. Easy new ports
-contribute little, since someone else would surely do them; difficult
-ports such as adding a new CPU to the GNU C compiler contribute more;
-major new features or packages contribute the most.
-
-By establishing the idea that supporting further development is ``the
-proper thing to do'' when distributing free software for a fee, we can
-assure a steady flow of resources into making more free software.
-
-@display
-Copyright (C) 1994 Free Software Foundation, Inc.
-Verbatim copying and redistribution of this section is permitted
-without royalty; alteration is not permitted.
-@end display
+@include funding.texi
@node Funding GNU Fortran
@chapter Funding GNU Fortran
@cindex funding improvements
@cindex improvements, funding
-Work on GNU Fortran is still being done mostly by its author,
-James Craig Burley (@email{@value{email-burley}}), who is a volunteer
-for, not an employee of, the Free Software Foundation (FSF).
+James Craig Burley (@email{@value{email-burley}}), the original author
+of @command{g77}, stopped working on it in September 1999
(He has a web page at @uref{@value{www-burley}}.)
+GNU Fortran is currently maintained by Toon Moene
+(@email{toon@@moene.indiv.nluug.nl}), with the help of countless other
+volunteers.
+
As with other GNU software, funding is important because it can pay for
needed equipment, personnel, and so on.
@@ -841,57 +423,21 @@ development of GNU software (such as GNU Fortran) in documents
such as the ``GNUS Bulletin''.
Email @email{gnu@@gnu.org} for information on funding the FSF.
-To fund specific GNU Fortran work in particular, the FSF might
-provide a means for that, but the FSF does not provide direct funding
-to the author of GNU Fortran to continue his work. The FSF has
-employee salary restrictions that can be incompatible with the
-financial needs of some volunteers, who therefore choose to
-remain volunteers and thus be able to be free to do contract work
-and otherwise make their own schedules for doing GNU work.
-
-Still, funding the FSF at least indirectly benefits work
-on specific projects like GNU Fortran because it ensures the
-continuing operation of the FSF offices, their workstations, their
-network connections, and so on, which are invaluable to volunteers.
-(Similarly, hiring Cygnus Support can help a project like GNU
-Fortran---Cygnus has been a long-time donor of equipment usage to the author
-of GNU Fortran, and this too has been invaluable---see @ref{Contributors}.)
-
-Currently, the only way to directly fund the author of GNU Fortran
-in his work on that project is to hire him for the work you want
-him to do, or donate money to him.
-Several people have done this
-already, with the result that he has not needed to immediately find
-contract work on a few occasions.
-If more people did this, he
-would be able to plan on not doing contract work for many months and
-could thus devote that time to work on projects (such as the planned
-changes for 0.6) that require longer timeframes to complete.
-For the latest information on the status of the author, do
-@kbd{finger -l burley@@gnu.org} on a UNIX system
-(or any system with a command like UNIX @code{finger}).
-
Another important way to support work on GNU Fortran is to volunteer
to help out.
Work is needed on documentation, testing, porting
to various machines, and in some cases, coding (although major
changes planned for version 0.6 make it difficult to add manpower to this
area).
-Email @email{@value{email-general}} to volunteer for this work.
-@xref{Funding,,Funding Free Software}, for more information.
-
-@node Look and Feel
-@chapter Protect Your Freedom---Fight ``Look And Feel''
-@c the above chapter heading overflows onto the next line. --mew 1/26/93
+Email @email{@value{email-general}} to volunteer for this work.
-To preserve the ability to write free software, including replacements
-for proprietary software, authors must be free to replicate the
-user interface to which users of existing software have become
-accustomed.
+However, we strongly expect that there will never be a version 0.6
+of @command{g77}. Work on this compiler has stopped as of the release
+of GCC 3.1, except for bug fixing. @command{g77} will be succeeded by
+@command{g95} - see @uref{http://g95.sourceforge.net}.
-@xref{Look and Feel,,Protect Your Freedom---Fight ``Look And Feel'',
-gcc,Using and Porting GNU CC}, for more information.
+@xref{Funding,,Funding Free Software}, for more information.
@node Getting Started
@chapter Getting Started
@@ -910,51 +456,48 @@ systems, you'll want to see @ref{What is GNU Fortran?}.
If you are new to GNU compilers, or have used only one GNU
compiler in the past and not had to delve into how it lets
-you manage various versions and configurations of @code{gcc},
+you manage various versions and configurations of @command{gcc},
you should see @ref{G77 and GCC}.
-Everyone except experienced @code{g77} users should
+Everyone except experienced @command{g77} users should
see @ref{Invoking G77}.
-If you're acquainted with previous versions of @code{g77},
+If you're acquainted with previous versions of @command{g77},
you should see @ref{News,,News About GNU Fortran}.
-Further, if you've actually used previous versions of @code{g77},
+Further, if you've actually used previous versions of @command{g77},
especially if you've written or modified Fortran code to
-be compiled by previous versions of @code{g77}, you
+be compiled by previous versions of @command{g77}, you
should see @ref{Changes}.
If you intend to write or otherwise compile code that is
not already strictly conforming ANSI FORTRAN 77---and this
is probably everyone---you should see @ref{Language}.
-If you don't already have @code{g77} installed on your
-system, you must see @ref{Installation}.
-
If you run into trouble getting Fortran code to compile,
link, run, or work properly, you might find answers
if you see @ref{Debugging and Interfacing},
see @ref{Collected Fortran Wisdom},
and see @ref{Trouble}.
You might also find that the problems you are encountering
-are bugs in @code{g77}---see @ref{Bugs}, for information on
+are bugs in @command{g77}---see @ref{Bugs}, for information on
reporting them, after reading the other material.
-If you need further help with @code{g77}, or with
+If you need further help with @command{g77}, or with
freely redistributable software in general,
see @ref{Service}.
-If you would like to help the @code{g77} project,
+If you would like to help the @command{g77} project,
see @ref{Funding GNU Fortran}, for information on
helping financially, and see @ref{Projects}, for information
on helping in other ways.
If you're generally curious about the future of
-@code{g77}, see @ref{Projects}.
+@command{g77}, see @ref{Projects}.
If you're curious about its past,
see @ref{Contributors},
and see @ref{Funding GNU Fortran}.
-To see a few of the questions maintainers of @code{g77} have,
+To see a few of the questions maintainers of @command{g77} have,
and that you might be able to answer,
see @ref{Open Questions}.
@@ -964,12 +507,12 @@ see @ref{Open Questions}.
@cindex concepts, basic
@cindex basic concepts
-GNU Fortran, or @code{g77}, is designed initially as a free replacement
-for, or alternative to, the UNIX @code{f77} command.
-(Similarly, @code{gcc} is designed as a replacement
-for the UNIX @code{cc} command.)
+GNU Fortran, or @command{g77}, is designed initially as a free replacement
+for, or alternative to, the UNIX @command{f77} command.
+(Similarly, @command{gcc} is designed as a replacement
+for the UNIX @command{cc} command.)
-@code{g77} also is designed to fit in well with the other
+@command{g77} also is designed to fit in well with the other
fine GNU compilers and tools.
Sometimes these design goals conflict---in such cases, resolution
@@ -978,7 +521,7 @@ These cases are usually identified in the appropriate
sections of this manual.
@cindex compilers
-As compilers, @code{g77}, @code{gcc}, and @code{f77}
+As compilers, @command{g77}, @command{gcc}, and @command{f77}
share the following characteristics:
@itemize @bullet
@@ -1011,18 +554,18 @@ to make big mistakes.
@cindex debugger
@cindex bugs, finding
-@cindex @code{gdb}, command
-@cindex commands, @code{gdb}
+@cindex @command{gdb}, command
+@cindex commands, @command{gdb}
@item
They provide information in the generated machine code
that can make it easier to find bugs in the program
(using a debugging tool, called a @dfn{debugger},
-such as @code{gdb}).
+such as @command{gdb}).
@cindex libraries
@cindex linking
-@cindex @code{ld} command
-@cindex commands, @code{ld}
+@cindex @command{ld} command
+@cindex commands, @command{ld}
@item
They locate and gather machine code already generated
to perform actions requested by statements in
@@ -1033,10 +576,10 @@ during the @dfn{link} phase of the compilation
process.
(Linking often is thought of as a separate
step, because it can be directly invoked via the
-@code{ld} command.
-However, the @code{g77} and @code{gcc}
+@command{ld} command.
+However, the @command{g77} and @command{gcc}
commands, as with most compiler commands, automatically
-perform the linking step by calling on @code{ld}
+perform the linking step by calling on @command{ld}
directly, unless asked to not do so by the user.)
@cindex language, incorrect use of
@@ -1080,27 +623,27 @@ the program (whether to diagnose questionable usage
of the language), how much time to spend making
the generated machine code run faster, and so on.
-@cindex components of g77
-@cindex @code{g77}, components of
-@code{g77} consists of several components:
+@cindex components of @command{g77}
+@cindex @command{g77}, components of
+@command{g77} consists of several components:
-@cindex @code{gcc}, command
-@cindex commands, @code{gcc}
+@cindex @command{gcc}, command
+@cindex commands, @command{gcc}
@itemize @bullet
@item
-A modified version of the @code{gcc} command, which also might be
-installed as the system's @code{cc} command.
-(In many cases, @code{cc} refers to the
+A modified version of the @command{gcc} command, which also might be
+installed as the system's @command{cc} command.
+(In many cases, @command{cc} refers to the
system's ``native'' C compiler, which
might be a non-GNU compiler, or an older version
-of @code{gcc} considered more stable or that is
+of @command{gcc} considered more stable or that is
used to build the operating system kernel.)
-@cindex @code{g77}, command
-@cindex commands, @code{g77}
+@cindex @command{g77}, command
+@cindex commands, @command{g77}
@item
-The @code{g77} command itself, which also might be installed as the
-system's @code{f77} command.
+The @command{g77} command itself, which also might be installed as the
+system's @command{f77} command.
@cindex libg2c library
@cindex libf2c library
@@ -1111,13 +654,13 @@ system's @code{f77} command.
The @code{libg2c} run-time library.
This library contains the machine code needed to support
capabilities of the Fortran language that are not directly
-provided by the machine code generated by the @code{g77}
+provided by the machine code generated by the @command{g77}
compilation phase.
-@code{libg2c} is just the unique name @code{g77} gives
+@code{libg2c} is just the unique name @command{g77} gives
to its version of @code{libf2c} to distinguish it from
-any copy of @code{libf2c} installed from @code{f2c}
-(or versions of @code{g77} that built @code{libf2c} under
+any copy of @code{libf2c} installed from @command{f2c}
+(or versions of @command{g77} that built @code{libf2c} under
that same name)
on the system.
@@ -1127,8 +670,8 @@ The maintainer of @code{libf2c} currently is
@cindex @code{f771}, program
@cindex programs, @code{f771}
@cindex assembler
-@cindex @code{as} command
-@cindex commands, @code{as}
+@cindex @command{as} command
+@cindex commands, @command{as}
@cindex assembly code
@cindex code, assembly
@item
@@ -1137,18 +680,18 @@ The compiler itself, internally named @code{f771}.
Note that @code{f771} does not generate machine code directly---it
generates @dfn{assembly code} that is a more readable form
of machine code, leaving the conversion to actual machine code
-to an @dfn{assembler}, usually named @code{as}.
+to an @dfn{assembler}, usually named @command{as}.
@end itemize
-@code{gcc} is often thought of as ``the C compiler'' only,
+@command{gcc} is often thought of as ``the C compiler'' only,
but it does more than that.
Based on command-line options and the names given for files
-on the command line, @code{gcc} determines which actions to perform, including
+on the command line, @command{gcc} determines which actions to perform, including
preprocessing, compiling (in a variety of possible languages), assembling,
and linking.
@cindex driver, gcc command as
-@cindex @code{gcc}, command as driver
+@cindex @command{gcc}, command as driver
@cindex executable file
@cindex files, executable
@cindex cc1 program
@@ -1157,45 +700,45 @@ and linking.
@cindex cpp program
@cindex programs, cpp
For example, the command @samp{gcc foo.c} @dfn{drives} the file
-@file{foo.c} through the preprocessor @code{cpp}, then
+@file{foo.c} through the preprocessor @command{cpp}, then
the C compiler (internally named
-@code{cc1}), then the assembler (usually @code{as}), then the linker
-(@code{ld}), producing an executable program named @file{a.out} (on
+@code{cc1}), then the assembler (usually @command{as}), then the linker
+(@command{ld}), producing an executable program named @file{a.out} (on
UNIX systems).
@cindex cc1plus program
@cindex programs, cc1plus
As another example, the command @samp{gcc foo.cc} would do much the same as
@samp{gcc foo.c}, but instead of using the C compiler named @code{cc1},
-@code{gcc} would use the C++ compiler (named @code{cc1plus}).
+@command{gcc} would use the C++ compiler (named @code{cc1plus}).
@cindex @code{f771}, program
@cindex programs, @code{f771}
-In a GNU Fortran installation, @code{gcc} recognizes Fortran source
+In a GNU Fortran installation, @command{gcc} recognizes Fortran source
files by name just like it does C and C++ source files.
It knows to use the Fortran compiler named @code{f771}, instead of
@code{cc1} or @code{cc1plus}, to compile Fortran files.
-@cindex @code{gcc}, not recognizing Fortran source
+@cindex @command{gcc}, not recognizing Fortran source
@cindex unrecognized file format
@cindex file format not recognized
-Non-Fortran-related operation of @code{gcc} is generally
-unaffected by installing the GNU Fortran version of @code{gcc}.
-However, without the installed version of @code{gcc} being the
-GNU Fortran version, @code{gcc} will not be able to compile
-and link Fortran programs---and since @code{g77} uses @code{gcc}
-to do most of the actual work, neither will @code{g77}!
-
-@cindex @code{g77}, command
-@cindex commands, @code{g77}
-The @code{g77} command is essentially just a front-end for
-the @code{gcc} command.
-Fortran users will normally use @code{g77} instead of @code{gcc},
-because @code{g77}
+Non-Fortran-related operation of @command{gcc} is generally
+unaffected by installing the GNU Fortran version of @command{gcc}.
+However, without the installed version of @command{gcc} being the
+GNU Fortran version, @command{gcc} will not be able to compile
+and link Fortran programs---and since @command{g77} uses @command{gcc}
+to do most of the actual work, neither will @command{g77}!
+
+@cindex @command{g77}, command
+@cindex commands, @command{g77}
+The @command{g77} command is essentially just a front-end for
+the @command{gcc} command.
+Fortran users will normally use @command{g77} instead of @command{gcc},
+because @command{g77}
knows how to specify the libraries needed to link with Fortran programs
(@code{libg2c} and @code{lm}).
-@code{g77} can still compile and link programs and
-source files written in other languages, just like @code{gcc}.
+@command{g77} can still compile and link programs and
+source files written in other languages, just like @command{gcc}.
@cindex printing version information
@cindex version information, printing
@@ -1204,13 +747,13 @@ way to display lots of version information for the various programs
used to compile a typical preprocessed Fortran source file---this
produces much more output than @samp{gcc -v} currently does.
(If it produces an error message near the end of the output---diagnostics
-from the linker, usually @code{ld}---you might
+from the linker, usually @command{ld}---you might
have an out-of-date @code{libf2c} that improperly handles
complex arithmetic.)
In the output of this command, the line beginning @samp{GNU Fortran Front
End} identifies the version number of GNU Fortran; immediately
-preceding that line is a line identifying the version of @code{gcc}
-with which that version of @code{g77} was built.
+preceding that line is a line identifying the version of @command{gcc}
+with which that version of @command{g77} was built.
@cindex libf2c library
@cindex libraries, libf2c
@@ -1221,32 +764,32 @@ needed by Fortran programs while they are running.
@cindex in-line code
@cindex code, in-line
-For example, while code generated by @code{g77} is likely
+For example, while code generated by @command{g77} is likely
to do additions, subtractions, and multiplications @dfn{in line}---in
the actual compiled code---it is not likely to do trigonometric
functions this way.
Instead, operations like trigonometric
functions are compiled by the @code{f771} compiler
-(invoked by @code{g77} when compiling Fortran code) into machine
+(invoked by @command{g77} when compiling Fortran code) into machine
code that, when run, calls on functions in @code{libg2c}, so
@code{libg2c} must be linked with almost every useful program
having any component compiled by GNU Fortran.
-(As mentioned above, the @code{g77} command takes
+(As mentioned above, the @command{g77} command takes
care of all this for you.)
The @code{f771} program represents most of what is unique to GNU Fortran.
While much of the @code{libg2c} component comes from
-the @code{libf2c} component of @code{f2c},
+the @code{libf2c} component of @command{f2c},
a free Fortran-to-C converter distributed by Bellcore (AT&T),
plus @code{libU77}, provided by Dave Love,
-and the @code{g77} command is just a small front-end to @code{gcc},
+and the @command{g77} command is just a small front-end to @command{gcc},
@code{f771} is a combination of two rather
large chunks of code.
@cindex GNU Back End (GBE)
@cindex GBE
-@cindex @code{gcc}, back end
+@cindex @command{gcc}, back end
@cindex back end, gcc
@cindex code generator
One chunk is the so-called @dfn{GNU Back End}, or GBE,
@@ -1259,8 +802,8 @@ whenever the distinction is important.
@cindex GNU Fortran Front End (FFE)
@cindex FFE
-@cindex @code{g77}, front end
-@cindex front end, @code{g77}
+@cindex @command{g77}, front end
+@cindex front end, @command{g77}
The other chunk of @code{f771} is the
majority of what is unique about GNU Fortran---the code that knows how
to interpret Fortran programs to determine what they are intending to
@@ -1281,7 +824,7 @@ much of the behavior and many of the user-selectable options for these
compilers are similar.
For example, diagnostics (error messages and
warnings) are similar in appearance; command-line
-options like @samp{-Wall} have generally similar effects; and the quality
+options like @option{-Wall} have generally similar effects; and the quality
of generated code (in terms of speed and size) is roughly similar
(since that work is done by the shared GBE).
@@ -1290,2219 +833,41 @@ of generated code (in terms of speed and size) is roughly similar
@cindex compiling programs
@cindex programs, compiling
-@cindex @code{gcc}, command
-@cindex commands, @code{gcc}
-A GNU Fortran installation includes a modified version of the @code{gcc}
+@cindex @command{gcc}, command
+@cindex commands, @command{gcc}
+A GNU Fortran installation includes a modified version of the @command{gcc}
command.
-In a non-Fortran installation, @code{gcc} recognizes C, C++,
+In a non-Fortran installation, @command{gcc} recognizes C, C++,
and Objective-C source files.
-In a GNU Fortran installation, @code{gcc} also recognizes Fortran source
+In a GNU Fortran installation, @command{gcc} also recognizes Fortran source
files and accepts Fortran-specific command-line options, plus some
command-line options that are designed to cater to Fortran users
but apply to other languages as well.
-@xref{G++ and GCC,,Compile C; C++; or Objective-C,gcc,Using and Porting GNU CC},
+@xref{G++ and GCC,,Compile C; C++; Objective-C; Ada; CHILL; Fortran;
+or Java,gcc,Using the GNU Compiler Collection (GCC)},
for information on the way different languages are handled
-by the GNU CC compiler (@code{gcc}).
+by the GNU CC compiler (@command{gcc}).
-@cindex @code{g77}, command
-@cindex commands, @code{g77}
-Also provided as part of GNU Fortran is the @code{g77} command.
-The @code{g77} command is designed to make compiling and linking Fortran
-programs somewhat easier than when using the @code{gcc} command for
+@cindex @command{g77}, command
+@cindex commands, @command{g77}
+Also provided as part of GNU Fortran is the @command{g77} command.
+The @command{g77} command is designed to make compiling and linking Fortran
+programs somewhat easier than when using the @command{gcc} command for
these tasks.
It does this by analyzing the command line somewhat and changing it
-appropriately before submitting it to the @code{gcc} command.
+appropriately before submitting it to the @command{gcc} command.
@cindex -v option
-@cindex @code{g77} options, -v
+@cindex @command{g77} options, -v
@cindex options, -v
-Use the @samp{-v} option with @code{g77}
+Use the @option{-v} option with @command{g77}
to see what is going on---the first line of output is the invocation
-of the @code{gcc} command.
-
-@node Invoking G77
-@chapter GNU Fortran Command Options
-@cindex GNU Fortran command options
-@cindex command options
-@cindex options, GNU Fortran command
-
-The @code{g77} command supports all the options supported by the
-@code{gcc} command.
-@xref{Invoking GCC,,GNU CC Command Options,gcc,Using and Porting GNU CC},
-for information
-on the non-Fortran-specific aspects of the @code{gcc} command (and,
-therefore, the @code{g77} command).
-
-@cindex options, negative forms
-@cindex negative forms of options
-All @code{gcc} and @code{g77} options
-are accepted both by @code{g77} and by @code{gcc}
-(as well as any other drivers built at the same time,
-such as @code{g++}),
-since adding @code{g77} to the @code{gcc} distribution
-enables acceptance of @code{g77}-specific options
-by all of the relevant drivers.
-
-In some cases, options have positive and negative forms;
-the negative form of @samp{-ffoo} would be @samp{-fno-foo}.
-This manual documents only one of these two forms, whichever
-one is not the default.
-
-@menu
-* Option Summary:: Brief list of all @code{g77} options,
- without explanations.
-* Overall Options:: Controlling the kind of output:
- an executable, object files, assembler files,
- or preprocessed source.
-* Shorthand Options:: Options that are shorthand for other options.
-* Fortran Dialect Options:: Controlling the variant of Fortran language
- compiled.
-* Warning Options:: How picky should the compiler be?
-* Debugging Options:: Symbol tables, measurements, and debugging dumps.
-* Optimize Options:: How much optimization?
-* Preprocessor Options:: Controlling header files and macro definitions.
- Also, getting dependency information for Make.
-* Directory Options:: Where to find header files and libraries.
- Where to find the compiler executable files.
-* Code Gen Options:: Specifying conventions for function calls, data layout
- and register usage.
-* Environment Variables:: Env vars that affect GNU Fortran.
-@end menu
-
-@node Option Summary
-@section Option Summary
-
-Here is a summary of all the options specific to GNU Fortran, grouped
-by type. Explanations are in the following sections.
-
-@table @emph
-@item Overall Options
-@xref{Overall Options,,Options Controlling the Kind of Output}.
-@smallexample
--fversion -fset-g77-defaults -fno-silent
-@end smallexample
-
-@item Shorthand Options
-@xref{Shorthand Options}.
-@smallexample
--ff66 -fno-f66 -ff77 -fno-f77 -fno-ugly
-@end smallexample
-
-@item Fortran Language Options
-@xref{Fortran Dialect Options,,Options Controlling Fortran Dialect}.
-@smallexample
--ffree-form -fno-fixed-form -ff90
--fvxt -fdollar-ok -fno-backslash
--fno-ugly-args -fno-ugly-assign -fno-ugly-assumed
--fugly-comma -fugly-complex -fugly-init -fugly-logint
--fonetrip -ftypeless-boz
--fintrin-case-initcap -fintrin-case-upper
--fintrin-case-lower -fintrin-case-any
--fmatch-case-initcap -fmatch-case-upper
--fmatch-case-lower -fmatch-case-any
--fsource-case-upper -fsource-case-lower -fsource-case-preserve
--fsymbol-case-initcap -fsymbol-case-upper
--fsymbol-case-lower -fsymbol-case-any
--fcase-strict-upper -fcase-strict-lower
--fcase-initcap -fcase-upper -fcase-lower -fcase-preserve
--ff2c-intrinsics-delete -ff2c-intrinsics-hide
--ff2c-intrinsics-disable -ff2c-intrinsics-enable
--fbadu77-intrinsics-delete -fbadu77-intrinsics-hide
--fbadu77-intrinsics-disable -fbadu77-intrinsics-enable
--ff90-intrinsics-delete -ff90-intrinsics-hide
--ff90-intrinsics-disable -ff90-intrinsics-enable
--fgnu-intrinsics-delete -fgnu-intrinsics-hide
--fgnu-intrinsics-disable -fgnu-intrinsics-enable
--fmil-intrinsics-delete -fmil-intrinsics-hide
--fmil-intrinsics-disable -fmil-intrinsics-enable
--funix-intrinsics-delete -funix-intrinsics-hide
--funix-intrinsics-disable -funix-intrinsics-enable
--fvxt-intrinsics-delete -fvxt-intrinsics-hide
--fvxt-intrinsics-disable -fvxt-intrinsics-enable
--ffixed-line-length-@var{n} -ffixed-line-length-none
-@end smallexample
-
-@item Warning Options
-@xref{Warning Options,,Options to Request or Suppress Warnings}.
-@smallexample
--fsyntax-only -pedantic -pedantic-errors -fpedantic
--w -Wno-globals -Wimplicit -Wunused -Wuninitialized
--Wall -Wsurprising
--Werror -W
-@end smallexample
-
-@item Debugging Options
-@xref{Debugging Options,,Options for Debugging Your Program or GCC}.
-@smallexample
--g
-@end smallexample
-
-@item Optimization Options
-@xref{Optimize Options,,Options that Control Optimization}.
-@smallexample
--malign-double
--ffloat-store -fforce-mem -fforce-addr -fno-inline
--ffast-math -fstrength-reduce -frerun-cse-after-loop
--fexpensive-optimizations -fdelayed-branch
--fschedule-insns -fschedule-insn2 -fcaller-saves
--funroll-loops -funroll-all-loops
--fno-move-all-movables -fno-reduce-all-givs
--fno-rerun-loop-opt
-@end smallexample
-
-@item Directory Options
-@xref{Directory Options,,Options for Directory Search}.
-@smallexample
--I@var{dir} -I-
-@end smallexample
-
-@item Code Generation Options
-@xref{Code Gen Options,,Options for Code Generation Conventions}.
-@smallexample
--fno-automatic -finit-local-zero -fno-f2c
--ff2c-library -fno-underscoring -fno-ident
--fpcc-struct-return -freg-struct-return
--fshort-double -fno-common -fpack-struct
--fzeros -fno-second-underscore
--fdebug-kludge -femulate-complex
--falias-check -fargument-alias
--fargument-noalias -fno-argument-noalias-global
--fno-globals -fflatten-arrays
--fbounds-check -ffortran-bounds-check
-@end smallexample
-@end table
-
-@menu
-* Overall Options:: Controlling the kind of output:
- an executable, object files, assembler files,
- or preprocessed source.
-* Shorthand Options:: Options that are shorthand for other options.
-* Fortran Dialect Options:: Controlling the variant of Fortran language
- compiled.
-* Warning Options:: How picky should the compiler be?
-* Debugging Options:: Symbol tables, measurements, and debugging dumps.
-* Optimize Options:: How much optimization?
-* Preprocessor Options:: Controlling header files and macro definitions.
- Also, getting dependency information for Make.
-* Directory Options:: Where to find header files and libraries.
- Where to find the compiler executable files.
-* Code Gen Options:: Specifying conventions for function calls, data layout
- and register usage.
-@end menu
+of the @command{gcc} command.
-@node Overall Options
-@section Options Controlling the Kind of Output
-@cindex overall options
-@cindex options, overall
-
-Compilation can involve as many as four stages: preprocessing, code
-generation (often what is really meant by the term ``compilation''),
-assembly, and linking, always in that order. The first three
-stages apply to an individual source file, and end by producing an
-object file; linking combines all the object files (those newly
-compiled, and those specified as input) into an executable file.
-
-@cindex file name suffix
-@cindex suffixes, file name
-@cindex file name extension
-@cindex extensions, file name
-@cindex file type
-@cindex types, file
-For any given input file, the file name suffix determines what kind of
-program is contained in the file---that is, the language in which the
-program is written is generally indicated by the suffix.
-Suffixes specific to GNU Fortran are listed below.
-@xref{Overall Options,,gcc,Using and Porting GNU CC}, for
-information on suffixes recognized by GNU CC.
-
-@table @code
-@cindex .f filename suffix
-@cindex .for filename suffix
-@cindex .FOR filename suffix
-@item @var{file}.f
-@item @var{file}.for
-@item @var{file}.FOR
-Fortran source code that should not be preprocessed.
-
-Such source code cannot contain any preprocessor directives, such
-as @code{#include}, @code{#define}, @code{#if}, and so on.
-
-You can force @samp{.f} files to be preprocessed by @code{cpp} by using
-@samp{-x f77-cpp-input}.
-@xref{LEX}.
-
-@cindex preprocessor
-@cindex C preprocessor
-@cindex cpp preprocessor
-@cindex Fortran preprocessor
-@cindex cpp program
-@cindex programs, cpp
-@cindex .F filename suffix
-@cindex .fpp filename suffix
-@cindex .FPP filename suffix
-@item @var{file}.F
-@item @var{file}.fpp
-@item @var{file}.FPP
-Fortran source code that must be preprocessed (by the C preprocessor
-@code{cpp}, which is part of GNU CC).
-
-Note that preprocessing is not extended to the contents of
-files included by the @code{INCLUDE} directive---the @code{#include}
-preprocessor directive must be used instead.
-
-@cindex Ratfor preprocessor
-@cindex programs, @code{ratfor}
-@cindex @samp{.r} filename suffix
-@cindex @code{ratfor}
-@item @var{file}.r
-Ratfor source code, which must be preprocessed by the @code{ratfor}
-command, which is available separately (as it is not yet part of the GNU
-Fortran distribution).
-One version in Fortran, adapted for use with @code{g77}, is at
-@uref{ftp://members.aol.com/n8tm/rat7.uue} (of uncertain copyright
-status). Another, public domain version in C is at
-@uref{http://sepwww.stanford.edu/sep/prof/ratfor.shar.2}.
-@end table
-
-UNIX users typically use the @file{@var{file}.f} and @file{@var{file}.F}
-nomenclature.
-Users of other operating systems, especially those that cannot
-distinguish upper-case
-letters from lower-case letters in their file names, typically use
-the @file{@var{file}.for} and @file{@var{file}.fpp} nomenclature.
-
-@cindex #define
-@cindex #include
-@cindex #if
-Use of the preprocessor @code{cpp} allows use of C-like
-constructs such as @code{#define} and @code{#include}, but can
-lead to unexpected, even mistaken, results due to Fortran's source file
-format.
-It is recommended that use of the C preprocessor
-be limited to @code{#include} and, in
-conjunction with @code{#define}, only @code{#if} and related directives,
-thus avoiding in-line macro expansion entirely.
-This recommendation applies especially
-when using the traditional fixed source form.
-With free source form,
-fewer unexpected transformations are likely to happen, but use of
-constructs such as Hollerith and character constants can nevertheless
-present problems, especially when these are continued across multiple
-source lines.
-These problems result, primarily, from differences between the way
-such constants are interpreted by the C preprocessor and by a Fortran
-compiler.
-
-Another example of a problem that results from using the C preprocessor
-is that a Fortran comment line that happens to contain any
-characters ``interesting'' to the C preprocessor,
-such as a backslash at the end of the line,
-is not recognized by the preprocessor as a comment line,
-so instead of being passed through ``raw'',
-the line is edited according to the rules for the preprocessor.
-For example, the backslash at the end of the line is removed,
-along with the subsequent newline, resulting in the next
-line being effectively commented out---unfortunate if that
-line is a non-comment line of important code!
-
-@emph{Note:} The @samp{-traditional} and @samp{-undef} flags are supplied
-to @code{cpp} by default, to help avoid unpleasant surprises.
-@xref{Preprocessor Options,,Options Controlling the Preprocessor,
-gcc,Using and Porting GNU CC}.
-This means that ANSI C preprocessor features (such as the @samp{#}
-operator) aren't available, and only variables in the C reserved
-namespace (generally, names with a leading underscore) are liable to
-substitution by C predefines.
-Thus, if you want to do system-specific
-tests, use, for example, @samp{#ifdef __linux__} rather than @samp{#ifdef linux}.
-Use the @samp{-v} option to see exactly how the preprocessor is invoked.
-
-@cindex /*
-Unfortunately, the @samp{-traditional} flag will not avoid an error from
-anything that @code{cpp} sees as an unterminated C comment, such as:
-@smallexample
-C Some Fortran compilers accept /* as starting
-C an inline comment.
-@end smallexample
-@xref{Trailing Comment}.
-
-The following options that affect overall processing are recognized
-by the @code{g77} and @code{gcc} commands in a GNU Fortran installation:
-
-@table @code
-@cindex -fversion option
-@cindex options, -fversion
-@cindex printing version information
-@cindex version information, printing
-@cindex consistency checks
-@cindex internal consistency checks
-@cindex checks, of internal consistency
-@item -fversion
-Ensure that the @code{g77}-specific version of the compiler phase is reported,
-if run,
-and, starting in @code{egcs} version 1.1,
-that internal consistency checks in the @file{f771} program are run.
-
-This option is supplied automatically when @samp{-v} or @samp{--verbose}
-is specified as a command-line option for @code{g77} or @code{gcc}
-and when the resulting commands compile Fortran source files.
-
-@cindex -fset-g77-defaults option
-@cindex options, -fset-g77-defaults
-@item -fset-g77-defaults
-@emph{Version info:}
-This option is obsolete in @code{egcs}
-as of version 1.1.
-The effect is instead achieved
-by the @code{lang_init_options} routine
-in @file{egcs/gcc/f/com.c}.
-
-@cindex consistency checks
-@cindex internal consistency checks
-@cindex checks, of internal consistency
-Set up whatever @code{gcc} options are to apply to Fortran
-compilations, and avoid running internal consistency checks
-that might take some time.
-
-This option is supplied automatically when compiling Fortran code
-via the @code{g77} or @code{gcc} command.
-The description of this option is provided so that users seeing
-it in the output of, say, @samp{g77 -v} understand why it is
-there.
-
-@cindex modifying g77
-@cindex code, modifying
-Also, developers who run @code{f771} directly might want to specify it
-by hand to get the same defaults as they would running @code{f771}
-via @code{g77} or @code{gcc}.
-However, such developers should, after linking a new @code{f771}
-executable, invoke it without this option once,
-e.g. via @kbd{./f771 -quiet < /dev/null},
-to ensure that they have not introduced any
-internal inconsistencies (such as in the table of
-intrinsics) before proceeding---@code{g77} will crash
-with a diagnostic if it detects an inconsistency.
-
-@cindex -fno-silent option
-@cindex options, -fno-silent
-@cindex f2c compatibility
-@cindex compatibility, f2c
-@cindex status, compilation
-@cindex compilation, status
-@cindex reporting compilation status
-@cindex printing compilation status
-@item -fno-silent
-Print (to @code{stderr}) the names of the program units as
-they are compiled, in a form similar to that used by popular
-UNIX @code{f77} implementations and @code{f2c}.
-@end table
-
-@xref{Overall Options,,Options Controlling the Kind of Output,
-gcc,Using and Porting GNU CC}, for information
-on more options that control the overall operation of the @code{gcc} command
-(and, by extension, the @code{g77} command).
-
-@node Shorthand Options
-@section Shorthand Options
-@cindex shorthand options
-@cindex options, shorthand
-@cindex macro options
-@cindex options, macro
-
-The following options serve as ``shorthand''
-for other options accepted by the compiler:
-
-@table @code
-@cindex -fugly option
-@cindex options, -fugly
-@item -fugly
-@cindex ugly features
-@cindex features, ugly
-@emph{Note:} This option is no longer supported.
-The information, below, is provided to aid
-in the conversion of old scripts.
-
-Specify that certain ``ugly'' constructs are to be quietly accepted.
-Same as:
-
-@smallexample
--fugly-args -fugly-assign -fugly-assumed
--fugly-comma -fugly-complex -fugly-init
--fugly-logint
-@end smallexample
-
-These constructs are considered inappropriate to use in new
-or well-maintained portable Fortran code, but widely used
-in old code.
-@xref{Distensions}, for more information.
-
-@cindex -fno-ugly option
-@cindex options, -fno-ugly
-@item -fno-ugly
-@cindex ugly features
-@cindex features, ugly
-Specify that all ``ugly'' constructs are to be noisily rejected.
-Same as:
-
-@smallexample
--fno-ugly-args -fno-ugly-assign -fno-ugly-assumed
--fno-ugly-comma -fno-ugly-complex -fno-ugly-init
--fno-ugly-logint
-@end smallexample
-
-@xref{Distensions}, for more information.
-
-@cindex -ff66 option
-@cindex options, -ff66
-@item -ff66
-@cindex FORTRAN 66
-@cindex compatibility, FORTRAN 66
-Specify that the program is written in idiomatic FORTRAN 66.
-Same as @samp{-fonetrip -fugly-assumed}.
-
-The @samp{-fno-f66} option is the inverse of @samp{-ff66}.
-As such, it is the same as @samp{-fno-onetrip -fno-ugly-assumed}.
-
-The meaning of this option is likely to be refined as future
-versions of @code{g77} provide more compatibility with other
-existing and obsolete Fortran implementations.
-
-@cindex -ff77 option
-@cindex options, -ff77
-@item -ff77
-@cindex UNIX f77
-@cindex f2c compatibility
-@cindex compatibility, f2c
-@cindex f77 compatibility
-@cindex compatibility, f77
-Specify that the program is written in idiomatic UNIX FORTRAN 77
-and/or the dialect accepted by the @code{f2c} product.
-Same as @samp{-fbackslash -fno-typeless-boz}.
-
-The meaning of this option is likely to be refined as future
-versions of @code{g77} provide more compatibility with other
-existing and obsolete Fortran implementations.
-
-@cindex -fno-f77 option
-@cindex options, -fno-f77
-@item -fno-f77
-@cindex UNIX f77
-The @samp{-fno-f77} option is @emph{not} the inverse
-of @samp{-ff77}.
-It specifies that the program is not written in idiomatic UNIX
-FORTRAN 77 or @code{f2c}, but in a more widely portable dialect.
-@samp{-fno-f77} is the same as @samp{-fno-backslash}.
-
-The meaning of this option is likely to be refined as future
-versions of @code{g77} provide more compatibility with other
-existing and obsolete Fortran implementations.
-@end table
-
-@node Fortran Dialect Options
-@section Options Controlling Fortran Dialect
-@cindex dialect options
-@cindex language, dialect options
-@cindex options, dialect
-
-The following options control the dialect of Fortran
-that the compiler accepts:
-
-@table @code
-@cindex -ffree-form option
-@cindex options, -ffree-form
-@cindex -fno-fixed-form option
-@cindex options, -fno-fixed-form
-@cindex source file format
-@cindex free form
-@cindex fixed form
-@cindex Fortran 90, features
-@item -ffree-form
-@item -fno-fixed-form
-Specify that the source file is written in free form
-(introduced in Fortran 90) instead of the more-traditional fixed form.
-
-@cindex -ff90 option
-@cindex options, -ff90
-@cindex Fortran 90, features
-@item -ff90
-Allow certain Fortran-90 constructs.
-
-This option controls whether certain
-Fortran 90 constructs are recognized.
-(Other Fortran 90 constructs
-might or might not be recognized depending on other options such as
-@samp{-fvxt}, @samp{-ff90-intrinsics-enable}, and the
-current level of support for Fortran 90.)
-
-@xref{Fortran 90}, for more information.
-
-@cindex -fvxt option
-@cindex options, -fvxt
-@item -fvxt
-@cindex Fortran 90, features
-@cindex VXT extensions
-Specify the treatment of certain constructs that have different
-meanings depending on whether the code is written in
-GNU Fortran (based on FORTRAN 77 and akin to Fortran 90)
-or VXT Fortran (more like VAX FORTRAN).
-
-The default is @samp{-fno-vxt}.
-@samp{-fvxt} specifies that the VXT Fortran interpretations
-for those constructs are to be chosen.
-
-@xref{VXT Fortran}, for more information.
-
-@cindex -fdollar-ok option
-@cindex options, -fdollar-ok
-@item -fdollar-ok
-@cindex dollar sign
-@cindex symbol names
-@cindex character set
-Allow @samp{$} as a valid character in a symbol name.
-
-@cindex -fno-backslash option
-@cindex options, -fno-backslash
-@item -fno-backslash
-@cindex backslash
-@cindex character constants
-@cindex Hollerith constants
-Specify that @samp{\} is not to be specially interpreted in character
-and Hollerith constants a la C and many UNIX Fortran compilers.
-
-For example, with @samp{-fbackslash} in effect, @samp{A\nB} specifies
-three characters, with the second one being newline.
-With @samp{-fno-backslash}, it specifies four characters,
-@samp{A}, @samp{\}, @samp{n}, and @samp{B}.
-
-Note that @code{g77} implements a fairly general form of backslash
-processing that is incompatible with the narrower forms supported
-by some other compilers.
-For example, @samp{'A\003B'} is a three-character string in @code{g77},
-whereas other compilers that support backslash might not support
-the three-octal-digit form, and thus treat that string as longer
-than three characters.
-
-@xref{Backslash in Constants}, for
-information on why @samp{-fbackslash} is the default
-instead of @samp{-fno-backslash}.
-
-@cindex -fno-ugly-args option
-@cindex options, -fno-ugly-args
-@item -fno-ugly-args
-Disallow passing Hollerith and typeless constants as actual
-arguments (for example, @samp{CALL FOO(4HABCD)}).
-
-@xref{Ugly Implicit Argument Conversion}, for more information.
-
-@cindex -fugly-assign option
-@cindex options, -fugly-assign
-@item -fugly-assign
-Use the same storage for a given variable regardless of
-whether it is used to hold an assigned-statement label
-(as in @samp{ASSIGN 10 TO I}) or used to hold numeric data
-(as in @samp{I = 3}).
-
-@xref{Ugly Assigned Labels}, for more information.
-
-@cindex -fugly-assumed option
-@cindex options, -fugly-assumed
-@item -fugly-assumed
-Assume any dummy array with a final dimension specified as @samp{1}
-is really an assumed-size array, as if @samp{*} had been specified
-for the final dimension instead of @samp{1}.
-
-For example, @samp{DIMENSION X(1)} is treated as if it
-had read @samp{DIMENSION X(*)}.
-
-@xref{Ugly Assumed-Size Arrays}, for more information.
-
-@cindex -fugly-comma option
-@cindex options, -fugly-comma
-@item -fugly-comma
-In an external-procedure invocation,
-treat a trailing comma in the argument list
-as specification of a trailing null argument,
-and treat an empty argument list
-as specification of a single null argument.
-
-For example, @samp{CALL FOO(,)} is treated as
-@samp{CALL FOO(%VAL(0), %VAL(0))}.
-That is, @emph{two} null arguments are specified
-by the procedure call when @samp{-fugly-comma} is in force.
-And @samp{F = FUNC()} is treated as @samp{F = FUNC(%VAL(0))}.
-
-The default behavior, @samp{-fno-ugly-comma}, is to ignore
-a single trailing comma in an argument list.
-So, by default, @samp{CALL FOO(X,)} is treated
-exactly the same as @samp{CALL FOO(X)}.
-
-@xref{Ugly Null Arguments}, for more information.
-
-@cindex -fugly-complex option
-@cindex options, -fugly-complex
-@item -fugly-complex
-Do not complain about @samp{REAL(@var{expr})} or
-@samp{AIMAG(@var{expr})} when @var{expr} is a @code{COMPLEX}
-type other than @code{COMPLEX(KIND=1)}---usually
-this is used to permit @code{COMPLEX(KIND=2)}
-(@code{DOUBLE COMPLEX}) operands.
-
-The @samp{-ff90} option controls the interpretation
-of this construct.
-
-@xref{Ugly Complex Part Extraction}, for more information.
-
-@cindex -fno-ugly-init option
-@cindex options, -fno-ugly-init
-@item -fno-ugly-init
-Disallow use of Hollerith and typeless constants as initial
-values (in @code{PARAMETER} and @code{DATA} statements), and
-use of character constants to
-initialize numeric types and vice versa.
-
-For example, @samp{DATA I/'F'/, CHRVAR/65/, J/4HABCD/} is disallowed by
-@samp{-fno-ugly-init}.
-
-@xref{Ugly Conversion of Initializers}, for more information.
-
-@cindex -fugly-logint option
-@cindex options, -fugly-logint
-@item -fugly-logint
-Treat @code{INTEGER} and @code{LOGICAL} variables and
-expressions as potential stand-ins for each other.
-
-For example, automatic conversion between @code{INTEGER} and
-@code{LOGICAL} is enabled, for many contexts, via this option.
-
-@xref{Ugly Integer Conversions}, for more information.
-
-@cindex -fonetrip option
-@cindex options, -fonetrip
-@item -fonetrip
-@cindex FORTRAN 66
-@cindex @code{DO} loops, one-trip
-@cindex one-trip @code{DO} loops
-@cindex @code{DO} loops, zero-trip
-@cindex zero-trip @code{DO} loops
-@cindex compatibility, FORTRAN 66
-Executable iterative @code{DO} loops are to be executed at
-least once each time they are reached.
-
-ANSI FORTRAN 77 and more recent versions of the Fortran standard
-specify that the body of an iterative @code{DO} loop is not executed
-if the number of iterations calculated from the parameters of the
-loop is less than 1.
-(For example, @samp{DO 10 I = 1, 0}.)
-Such a loop is called a @dfn{zero-trip loop}.
-
-Prior to ANSI FORTRAN 77, many compilers implemented @code{DO} loops
-such that the body of a loop would be executed at least once, even
-if the iteration count was zero.
-Fortran code written assuming this behavior is said to require
-@dfn{one-trip loops}.
-For example, some code written to the FORTRAN 66 standard
-expects this behavior from its @code{DO} loops, although that
-standard did not specify this behavior.
-
-The @samp{-fonetrip} option specifies that the source file(s) being
-compiled require one-trip loops.
-
-This option affects only those loops specified by the (iterative) @code{DO}
-statement and by implied-@code{DO} lists in I/O statements.
-Loops specified by implied-@code{DO} lists in @code{DATA} and
-specification (non-executable) statements are not affected.
-
-@cindex -ftypeless-boz option
-@cindex options, -ftypeless-boz
-@cindex prefix-radix constants
-@cindex constants, prefix-radix
-@cindex constants, types
-@cindex types, constants
-@item -ftypeless-boz
-Specifies that prefix-radix non-decimal constants, such as
-@samp{Z'ABCD'}, are typeless instead of @code{INTEGER(KIND=1)}.
-
-You can test for yourself whether a particular compiler treats
-the prefix form as @code{INTEGER(KIND=1)} or typeless by running the
-following program:
-
-@smallexample
-EQUIVALENCE (I, R)
-R = Z'ABCD1234'
-J = Z'ABCD1234'
-IF (J .EQ. I) PRINT *, 'Prefix form is TYPELESS'
-IF (J .NE. I) PRINT *, 'Prefix form is INTEGER'
-END
-@end smallexample
-
-Reports indicate that many compilers process this form as
-@code{INTEGER(KIND=1)}, though a few as typeless, and at least one
-based on a command-line option specifying some kind of
-compatibility.
-
-@cindex -fintrin-case-initcap option
-@cindex options, -fintrin-case-initcap
-@item -fintrin-case-initcap
-@cindex -fintrin-case-upper option
-@cindex options, -fintrin-case-upper
-@item -fintrin-case-upper
-@cindex -fintrin-case-lower option
-@cindex options, -fintrin-case-lower
-@item -fintrin-case-lower
-@cindex -fintrin-case-any option
-@cindex options, -fintrin-case-any
-@item -fintrin-case-any
-Specify expected case for intrinsic names.
-@samp{-fintrin-case-lower} is the default.
-
-@cindex -fmatch-case-initcap option
-@cindex options, -fmatch-case-initcap
-@item -fmatch-case-initcap
-@cindex -fmatch-case-upper option
-@cindex options, -fmatch-case-upper
-@item -fmatch-case-upper
-@cindex -fmatch-case-lower option
-@cindex options, -fmatch-case-lower
-@item -fmatch-case-lower
-@cindex -fmatch-case-any option
-@cindex options, -fmatch-case-any
-@item -fmatch-case-any
-Specify expected case for keywords.
-@samp{-fmatch-case-lower} is the default.
-
-@cindex -fsource-case-upper option
-@cindex options, -fsource-case-upper
-@item -fsource-case-upper
-@cindex -fsource-case-lower option
-@cindex options, -fsource-case-lower
-@item -fsource-case-lower
-@cindex -fsource-case-preserve option
-@cindex options, -fsource-case-preserve
-@item -fsource-case-preserve
-Specify whether source text other than character and Hollerith constants
-is to be translated to uppercase, to lowercase, or preserved as is.
-@samp{-fsource-case-lower} is the default.
-
-@cindex -fsymbol-case-initcap option
-@cindex options, -fsymbol-case-initcap
-@item -fsymbol-case-initcap
-@cindex -fsymbol-case-upper option
-@cindex options, -fsymbol-case-upper
-@item -fsymbol-case-upper
-@cindex -fsymbol-case-lower option
-@cindex options, -fsymbol-case-lower
-@item -fsymbol-case-lower
-@cindex -fsymbol-case-any option
-@cindex options, -fsymbol-case-any
-@item -fsymbol-case-any
-Specify valid cases for user-defined symbol names.
-@samp{-fsymbol-case-any} is the default.
-
-@cindex -fcase-strict-upper option
-@cindex options, -fcase-strict-upper
-@item -fcase-strict-upper
-Same as @samp{-fintrin-case-upper -fmatch-case-upper -fsource-case-preserve
--fsymbol-case-upper}.
-(Requires all pertinent source to be in uppercase.)
-
-@cindex -fcase-strict-lower option
-@cindex options, -fcase-strict-lower
-@item -fcase-strict-lower
-Same as @samp{-fintrin-case-lower -fmatch-case-lower -fsource-case-preserve
--fsymbol-case-lower}.
-(Requires all pertinent source to be in lowercase.)
-
-@cindex -fcase-initcap option
-@cindex options, -fcase-initcap
-@item -fcase-initcap
-Same as @samp{-fintrin-case-initcap -fmatch-case-initcap -fsource-case-preserve
--fsymbol-case-initcap}.
-(Requires all pertinent source to be in initial capitals,
-as in @samp{Print *,SqRt(Value)}.)
-
-@cindex -fcase-upper option
-@cindex options, -fcase-upper
-@item -fcase-upper
-Same as @samp{-fintrin-case-any -fmatch-case-any -fsource-case-upper
--fsymbol-case-any}.
-(Maps all pertinent source to uppercase.)
-
-@cindex -fcase-lower option
-@cindex options, -fcase-lower
-@item -fcase-lower
-Same as @samp{-fintrin-case-any -fmatch-case-any -fsource-case-lower
--fsymbol-case-any}.
-(Maps all pertinent source to lowercase.)
-
-@cindex -fcase-preserve option
-@cindex options, -fcase-preserve
-@item -fcase-preserve
-Same as @samp{-fintrin-case-any -fmatch-case-any -fsource-case-preserve
--fsymbol-case-any}.
-(Preserves all case in user-defined symbols,
-while allowing any-case matching of intrinsics and keywords.
-For example, @samp{call Foo(i,I)} would pass two @emph{different}
-variables named @samp{i} and @samp{I} to a procedure named @samp{Foo}.)
-
-@cindex -fbadu77-intrinsics-delete option
-@cindex options, -fbadu77-intrinsics-delete
-@item -fbadu77-intrinsics-delete
-@cindex -fbadu77-intrinsics-hide option
-@cindex options, -fbadu77-intrinsics-hide
-@item -fbadu77-intrinsics-hide
-@cindex -fbadu77-intrinsics-disable option
-@cindex options, -fbadu77-intrinsics-disable
-@item -fbadu77-intrinsics-disable
-@cindex -fbadu77-intrinsics-enable option
-@cindex options, -fbadu77-intrinsics-enable
-@item -fbadu77-intrinsics-enable
-@cindex @code{badu77} intrinsics
-@cindex intrinsics, @code{badu77}
-Specify status of UNIX intrinsics having inappropriate forms.
-@samp{-fbadu77-intrinsics-enable} is the default.
-@xref{Intrinsic Groups}.
-
-@cindex -ff2c-intrinsics-delete option
-@cindex options, -ff2c-intrinsics-delete
-@item -ff2c-intrinsics-delete
-@cindex -ff2c-intrinsics-hide option
-@cindex options, -ff2c-intrinsics-hide
-@item -ff2c-intrinsics-hide
-@cindex -ff2c-intrinsics-disable option
-@cindex options, -ff2c-intrinsics-disable
-@item -ff2c-intrinsics-disable
-@cindex -ff2c-intrinsics-enable option
-@cindex options, -ff2c-intrinsics-enable
-@item -ff2c-intrinsics-enable
-@cindex @code{f2c} intrinsics
-@cindex intrinsics, @code{f2c}
-Specify status of f2c-specific intrinsics.
-@samp{-ff2c-intrinsics-enable} is the default.
-@xref{Intrinsic Groups}.
-
-@cindex -ff90-intrinsics-delete option
-@cindex options, -ff90-intrinsics-delete
-@item -ff90-intrinsics-delete
-@cindex -ff90-intrinsics-hide option
-@cindex options, -ff90-intrinsics-hide
-@item -ff90-intrinsics-hide
-@cindex -ff90-intrinsics-disable option
-@cindex options, -ff90-intrinsics-disable
-@item -ff90-intrinsics-disable
-@cindex -ff90-intrinsics-enable option
-@cindex options, -ff90-intrinsics-enable
-@item -ff90-intrinsics-enable
-@cindex Fortran 90, intrinsics
-@cindex intrinsics, Fortran 90
-Specify status of F90-specific intrinsics.
-@samp{-ff90-intrinsics-enable} is the default.
-@xref{Intrinsic Groups}.
-
-@cindex -fgnu-intrinsics-delete option
-@cindex options, -fgnu-intrinsics-delete
-@item -fgnu-intrinsics-delete
-@cindex -fgnu-intrinsics-hide option
-@cindex options, -fgnu-intrinsics-hide
-@item -fgnu-intrinsics-hide
-@cindex -fgnu-intrinsics-disable option
-@cindex options, -fgnu-intrinsics-disable
-@item -fgnu-intrinsics-disable
-@cindex -fgnu-intrinsics-enable option
-@cindex options, -fgnu-intrinsics-enable
-@item -fgnu-intrinsics-enable
-@cindex Digital Fortran features
-@cindex @code{COMPLEX} intrinsics
-@cindex intrinsics, @code{COMPLEX}
-Specify status of Digital's COMPLEX-related intrinsics.
-@samp{-fgnu-intrinsics-enable} is the default.
-@xref{Intrinsic Groups}.
-
-@cindex -fmil-intrinsics-delete option
-@cindex options, -fmil-intrinsics-delete
-@item -fmil-intrinsics-delete
-@cindex -fmil-intrinsics-hide option
-@cindex options, -fmil-intrinsics-hide
-@item -fmil-intrinsics-hide
-@cindex -fmil-intrinsics-disable option
-@cindex options, -fmil-intrinsics-disable
-@item -fmil-intrinsics-disable
-@cindex -fmil-intrinsics-enable option
-@cindex options, -fmil-intrinsics-enable
-@item -fmil-intrinsics-enable
-@cindex MIL-STD 1753
-@cindex intrinsics, MIL-STD 1753
-Specify status of MIL-STD-1753-specific intrinsics.
-@samp{-fmil-intrinsics-enable} is the default.
-@xref{Intrinsic Groups}.
-
-@cindex -funix-intrinsics-delete option
-@cindex options, -funix-intrinsics-delete
-@item -funix-intrinsics-delete
-@cindex -funix-intrinsics-hide option
-@cindex options, -funix-intrinsics-hide
-@item -funix-intrinsics-hide
-@cindex -funix-intrinsics-disable option
-@cindex options, -funix-intrinsics-disable
-@item -funix-intrinsics-disable
-@cindex -funix-intrinsics-enable option
-@cindex options, -funix-intrinsics-enable
-@item -funix-intrinsics-enable
-@cindex UNIX intrinsics
-@cindex intrinsics, UNIX
-Specify status of UNIX intrinsics.
-@samp{-funix-intrinsics-enable} is the default.
-@xref{Intrinsic Groups}.
-
-@cindex -fvxt-intrinsics-delete option
-@cindex options, -fvxt-intrinsics-delete
-@item -fvxt-intrinsics-delete
-@cindex -fvxt-intrinsics-hide option
-@cindex options, -fvxt-intrinsics-hide
-@item -fvxt-intrinsics-hide
-@cindex -fvxt-intrinsics-disable option
-@cindex options, -fvxt-intrinsics-disable
-@item -fvxt-intrinsics-disable
-@cindex -fvxt-intrinsics-enable option
-@cindex options, -fvxt-intrinsics-enable
-@item -fvxt-intrinsics-enable
-@cindex VXT intrinsics
-@cindex intrinsics, VXT
-Specify status of VXT intrinsics.
-@samp{-fvxt-intrinsics-enable} is the default.
-@xref{Intrinsic Groups}.
-
-@cindex -ffixed-line-length-@var{n} option
-@cindex options, -ffixed-line-length-@var{n}
-@item -ffixed-line-length-@var{n}
-@cindex source file format
-@cindex lines, length
-@cindex length of source lines
-@cindex fixed form
-@cindex limits, lengths of source lines
-Set column after which characters are ignored in typical fixed-form
-lines in the source file, and through which spaces are assumed (as
-if padded to that length) after the ends of short fixed-form lines.
-
-@cindex card image
-@cindex extended-source option
-Popular values for @var{n} include 72 (the
-standard and the default), 80 (card image), and 132 (corresponds
-to ``extended-source'' options in some popular compilers).
-@var{n} may be @samp{none}, meaning that the entire line is meaningful
-and that continued character constants never have implicit spaces appended
-to them to fill out the line.
-@samp{-ffixed-line-length-0} means the same thing as
-@samp{-ffixed-line-length-none}.
-
-@xref{Source Form}, for more information.
-@end table
-
-@node Warning Options
-@section Options to Request or Suppress Warnings
-@cindex options, warnings
-@cindex warnings, suppressing
-@cindex messages, warning
-@cindex suppressing warnings
-
-Warnings are diagnostic messages that report constructions which
-are not inherently erroneous but which are risky or suggest there
-might have been an error.
-
-You can request many specific warnings with options beginning @samp{-W},
-for example @samp{-Wimplicit} to request warnings on implicit
-declarations. Each of these specific warning options also has a
-negative form beginning @samp{-Wno-} to turn off warnings;
-for example, @samp{-Wno-implicit}. This manual lists only one of the
-two forms, whichever is not the default.
-
-These options control the amount and kinds of warnings produced by GNU
-Fortran:
-
-@table @code
-@cindex syntax checking
-@cindex -fsyntax-only option
-@cindex options, -fsyntax-only
-@item -fsyntax-only
-Check the code for syntax errors, but don't do anything beyond that.
-
-@cindex -pedantic option
-@cindex options, -pedantic
-@item -pedantic
-Issue warnings for uses of extensions to ANSI FORTRAN 77.
-@samp{-pedantic} also applies to C-language constructs where they
-occur in GNU Fortran source files, such as use of @samp{\e} in a
-character constant within a directive like @samp{#include}.
-
-Valid ANSI FORTRAN 77 programs should compile properly with or without
-this option.
-However, without this option, certain GNU extensions and traditional
-Fortran features are supported as well.
-With this option, many of them are rejected.
-
-Some users try to use @samp{-pedantic} to check programs for strict ANSI
-conformance.
-They soon find that it does not do quite what they want---it finds some
-non-ANSI practices, but not all.
-However, improvements to @code{g77} in this area are welcome.
-
-@cindex -pedantic-errors option
-@cindex options, -pedantic-errors
-@item -pedantic-errors
-Like @samp{-pedantic}, except that errors are produced rather than
-warnings.
-
-@cindex -fpedantic option
-@cindex options, -fpedantic
-@item -fpedantic
-Like @samp{-pedantic}, but applies only to Fortran constructs.
-
-@cindex -w option
-@cindex options, -w
-@item -w
-Inhibit all warning messages.
-
-@cindex -Wno-globals option
-@cindex options, -Wno-globals
-@item -Wno-globals
-@cindex global names, warning
-@cindex warnings, global names
-Inhibit warnings about use of a name as both a global name
-(a subroutine, function, or block data program unit, or a
-common block) and implicitly as the name of an intrinsic
-in a source file.
-
-Also inhibit warnings about inconsistent invocations and/or
-definitions of global procedures (function and subroutines).
-Such inconsistencies include different numbers of arguments
-and different types of arguments.
-
-@cindex -Wimplicit option
-@cindex options, -Wimplicit
-@item -Wimplicit
-@cindex implicit declaration, warning
-@cindex warnings, implicit declaration
-@cindex -u option
-@cindex /WARNINGS=DECLARATIONS switch
-@cindex IMPLICIT NONE, similar effect
-@cindex effecting IMPLICIT NONE
-Warn whenever a variable, array, or function is implicitly
-declared.
-Has an effect similar to using the @code{IMPLICIT NONE} statement
-in every program unit.
-(Some Fortran compilers provide this feature by an option
-named @samp{-u} or @samp{/WARNINGS=DECLARATIONS}.)
-
-@cindex -Wunused option
-@cindex options, -Wunused
-@item -Wunused
-@cindex unused variables
-@cindex variables, unused
-Warn whenever a variable is unused aside from its declaration.
-
-@cindex -Wuninitialized option
-@cindex options, -Wuninitialized
-@item -Wuninitialized
-@cindex uninitialized variables
-@cindex variables, uninitialized
-Warn whenever an automatic variable is used without first being initialized.
-
-These warnings are possible only in optimizing compilation,
-because they require data-flow information that is computed only
-when optimizing. If you don't specify @samp{-O}, you simply won't
-get these warnings.
-
-These warnings occur only for variables that are candidates for
-register allocation. Therefore, they do not occur for a variable
-@c that is declared @code{VOLATILE}, or
-whose address is taken, or whose size
-is other than 1, 2, 4 or 8 bytes. Also, they do not occur for
-arrays, even when they are in registers.
-
-Note that there might be no warning about a variable that is used only
-to compute a value that itself is never used, because such
-computations may be deleted by data-flow analysis before the warnings
-are printed.
-
-These warnings are made optional because GNU Fortran is not smart
-enough to see all the reasons why the code might be correct
-despite appearing to have an error. Here is one example of how
-this can happen:
-
-@example
-SUBROUTINE DISPAT(J)
-IF (J.EQ.1) I=1
-IF (J.EQ.2) I=4
-IF (J.EQ.3) I=5
-CALL FOO(I)
-END
-@end example
-
-@noindent
-If the value of @code{J} is always 1, 2 or 3, then @code{I} is
-always initialized, but GNU Fortran doesn't know this. Here is
-another common case:
-
-@example
-SUBROUTINE MAYBE(FLAG)
-LOGICAL FLAG
-IF (FLAG) VALUE = 9.4
-@dots{}
-IF (FLAG) PRINT *, VALUE
-END
-@end example
-
-@noindent
-This has no bug because @code{VALUE} is used only if it is set.
-
-@cindex -Wall option
-@cindex options, -Wall
-@item -Wall
-@cindex all warnings
-@cindex warnings, all
-The @samp{-Wunused} and @samp{-Wuninitialized} options combined.
-These are all the
-options which pertain to usage that we recommend avoiding and that we
-believe is easy to avoid.
-(As more warnings are added to @code{g77}, some might
-be added to the list enabled by @samp{-Wall}.)
-@end table
-
-The remaining @samp{-W@dots{}} options are not implied by @samp{-Wall}
-because they warn about constructions that we consider reasonable to
-use, on occasion, in clean programs.
-
-@table @code
-@c @item -W
-@c Print extra warning messages for these events:
-@c
-@c @itemize @bullet
-@c @item
-@c If @samp{-Wall} or @samp{-Wunused} is also specified, warn about unused
-@c arguments.
-@c
-@c @end itemize
-@c
-@cindex -Wsurprising option
-@cindex options, -Wsurprising
-@item -Wsurprising
-Warn about ``suspicious'' constructs that are interpreted
-by the compiler in a way that might well be surprising to
-someone reading the code.
-These differences can result in subtle, compiler-dependent
-(even machine-dependent) behavioral differences.
-The constructs warned about include:
-
-@itemize @bullet
-@item
-Expressions having two arithmetic operators in a row, such
-as @samp{X*-Y}.
-Such a construct is nonstandard, and can produce
-unexpected results in more complicated situations such
-as @samp{X**-Y*Z}.
-@code{g77}, along with many other compilers, interprets
-this example differently than many programmers, and a few
-other compilers.
-Specifically, @code{g77} interprets @samp{X**-Y*Z} as
-@samp{(X**(-Y))*Z}, while others might think it should
-be interpreted as @samp{X**(-(Y*Z))}.
-
-A revealing example is the constant expression @samp{2**-2*1.},
-which @code{g77} evaluates to .25, while others might evaluate
-it to 0., the difference resulting from the way precedence affects
-type promotion.
-
-(The @samp{-fpedantic} option also warns about expressions
-having two arithmetic operators in a row.)
-
-@item
-Expressions with a unary minus followed by an operand and then
-a binary operator other than plus or minus.
-For example, @samp{-2**2} produces a warning, because
-the precedence is @samp{-(2**2)}, yielding -4, not
-@samp{(-2)**2}, which yields 4, and which might represent
-what a programmer expects.
-
-An example of an expression producing different results
-in a surprising way is @samp{-I*S}, where @var{I} holds
-the value @samp{-2147483648} and @var{S} holds @samp{0.5}.
-On many systems, negating @var{I} results in the same
-value, not a positive number, because it is already the
-lower bound of what an @code{INTEGER(KIND=1)} variable can hold.
-So, the expression evaluates to a positive number, while
-the ``expected'' interpretation, @samp{(-I)*S}, would
-evaluate to a negative number.
-
-Even cases such as @samp{-I*J} produce warnings,
-even though, in most configurations and situations,
-there is no computational difference between the
-results of the two interpretations---the purpose
-of this warning is to warn about differing interpretations
-and encourage a better style of coding, not to identify
-only those places where bugs might exist in the user's
-code.
-
-@cindex DO statement
-@cindex statements, DO
-@item
-@code{DO} loops with @code{DO} variables that are not
-of integral type---that is, using @code{REAL}
-variables as loop control variables.
-Although such loops can be written to work in the
-``obvious'' way, the way @code{g77} is required by the
-Fortran standard to interpret such code is likely to
-be quite different from the way many programmers expect.
-(This is true of all @code{DO} loops, but the differences
-are pronounced for non-integral loop control variables.)
-
-@xref{Loops}, for more information.
-@end itemize
-
-@cindex -Werror option
-@cindex options, -Werror
-@item -Werror
-Make all warnings into errors.
-
-@cindex -W option
-@cindex options, -W
-@item -W
-@cindex extra warnings
-@cindex warnings, extra
-Turns on ``extra warnings'' and, if optimization is specified
-via @samp{-O}, the @samp{-Wuninitialized} option.
-(This might change in future versions of @code{g77}.)
-
-``Extra warnings'' are issued for:
-
-@itemize @bullet
-@item
-@cindex unused parameters
-@cindex parameters, unused
-@cindex unused arguments
-@cindex arguments, unused
-@cindex unused dummies
-@cindex dummies, unused
-Unused parameters to a procedure (when @samp{-Wunused} also is
-specified).
-
-@item
-@cindex overflow
-Overflows involving floating-point constants (not available
-for certain configurations).
-@end itemize
-@end table
-
-@xref{Warning Options,,Options to Request or Suppress Warnings,
-gcc,Using and Porting GNU CC}, for information on more options offered
-by the GBE shared by @code{g77}, @code{gcc}, and other GNU compilers.
-
-Some of these have no effect when compiling programs written in Fortran:
-
-@table @code
-@cindex -Wcomment option
-@cindex options, -Wcomment
-@item -Wcomment
-@cindex -Wformat option
-@cindex options, -Wformat
-@item -Wformat
-@cindex -Wparentheses option
-@cindex options, -Wparentheses
-@item -Wparentheses
-@cindex -Wswitch option
-@cindex options, -Wswitch
-@item -Wswitch
-@cindex -Wtraditional option
-@cindex options, -Wtraditional
-@item -Wtraditional
-@cindex -Wshadow option
-@cindex options, -Wshadow
-@item -Wshadow
-@cindex -Wid-clash-@var{len} option
-@cindex options, -Wid-clash-@var{len}
-@item -Wid-clash-@var{len}
-@cindex -Wlarger-than-@var{len} option
-@cindex options, -Wlarger-than-@var{len}
-@item -Wlarger-than-@var{len}
-@cindex -Wconversion option
-@cindex options, -Wconversion
-@item -Wconversion
-@cindex -Waggregate-return option
-@cindex options, -Waggregate-return
-@item -Waggregate-return
-@cindex -Wredundant-decls option
-@cindex options, -Wredundant-decls
-@item -Wredundant-decls
-@cindex unsupported warnings
-@cindex warnings, unsupported
-These options all could have some relevant meaning for
-GNU Fortran programs, but are not yet supported.
-@end table
-
-@node Debugging Options
-@section Options for Debugging Your Program or GNU Fortran
-@cindex options, debugging
-@cindex debugging information options
-
-GNU Fortran has various special options that are used for debugging
-either your program or @code{g77}.
-
-@table @code
-@cindex -g option
-@cindex options, -g
-@item -g
-Produce debugging information in the operating system's native format
-(stabs, COFF, XCOFF, or DWARF). GDB can work with this debugging
-information.
-
-@cindex common blocks
-@cindex equivalence areas
-@cindex missing debug features
-Support for this option in Fortran programs is incomplete.
-In particular, names of variables and arrays in common blocks
-or that are storage-associated via @code{EQUIVALENCE} are
-unavailable to the debugger.
-
-However, version 0.5.19 of @code{g77} does provide this information
-in a rudimentary way, as controlled by the
-@samp{-fdebug-kludge} option.
-
-@xref{Code Gen Options,,Options for Code Generation Conventions},
-for more information.
-@end table
-
-@xref{Debugging Options,,Options for Debugging Your Program or GNU CC,
-gcc,Using and Porting GNU CC}, for more information on debugging options.
-
-@node Optimize Options
-@section Options That Control Optimization
-@cindex optimize options
-@cindex options, optimization
-
-Most Fortran users will want to use no optimization when
-developing and testing programs, and use @samp{-O} or @samp{-O2} when
-compiling programs for late-cycle testing and for production use.
-However, note that certain diagnostics---such as for uninitialized
-variables---depend on the flow analysis done by @samp{-O}, i.e.@: you
-must use @samp{-O} or @samp{-O2} to get such diagnostics.
-
-The following flags have particular applicability when
-compiling Fortran programs:
-
-@table @code
-@cindex -malign-double option
-@cindex options, -malign-double
-@item -malign-double
-(Intel x86 architecture only.)
-
-Noticeably improves performance of @code{g77} programs making
-heavy use of @code{REAL(KIND=2)} (@code{DOUBLE PRECISION}) data
-on some systems.
-In particular, systems using Pentium, Pentium Pro, 586, and
-686 implementations
-of the i386 architecture execute programs faster when
-@code{REAL(KIND=2)} (@code{DOUBLE PRECISION}) data are
-aligned on 64-bit boundaries
-in memory.
-
-This option can, at least, make benchmark results more consistent
-across various system configurations, versions of the program,
-and data sets.
-
-@emph{Note:} The warning in the @code{gcc} documentation about
-this option does not apply, generally speaking, to Fortran
-code compiled by @code{g77}.
-
-@xref{Aligned Data}, for more information on alignment issues.
-
-@emph{Also also note:} The negative form of @samp{-malign-double}
-is @samp{-mno-align-double}, not @samp{-benign-double}.
-
-@cindex -ffloat-store option
-@cindex options, -ffloat-store
-@item -ffloat-store
-@cindex IEEE 754 conformance
-@cindex conformance, IEEE 754
-@cindex floating-point, precision
-Might help a Fortran program that depends on exact IEEE conformance on
-some machines, but might slow down a program that doesn't.
-
-This option is effective when the floating-point unit is set to work in
-IEEE 854 `extended precision'---as it typically is on x86 and m68k GNU
-systems---rather than IEEE 754 double precision. @samp{-ffloat-store}
-tries to remove the extra precision by spilling data from floating-point
-registers into memory and this typically involves a big performance
-hit. However, it doesn't affect intermediate results, so that it is
-only partially effective. `Excess precision' is avoided in code like:
-@smallexample
-a = b + c
-d = a * e
-@end smallexample
-but not in code like:
-@smallexample
- d = (b + c) * e
-@end smallexample
-
-For another, potentially better, way of controlling the precision,
-see @ref{Floating-point precision}.
-
-@cindex -fforce-mem option
-@cindex options, -fforce-mem
-@item -fforce-mem
-@cindex -fforce-addr option
-@cindex options, -fforce-addr
-@item -fforce-addr
-@cindex loops, speeding up
-@cindex speed, of loops
-Might improve optimization of loops.
-
-@cindex -fno-inline option
-@cindex options, -fno-inline
-@item -fno-inline
-@cindex in-line code
-@cindex compilation, in-line
-@c DL: Only relevant for -O3?
-Don't compile statement functions inline.
-Might reduce the size of a program unit---which might be at
-expense of some speed (though it should compile faster).
-Note that if you are not optimizing, no functions can be expanded inline.
-
-@cindex -ffast-math option
-@cindex options, -ffast-math
-@item -ffast-math
-@cindex IEEE 754 conformance
-@cindex conformance, IEEE 754
-Might allow some programs designed to not be too dependent
-on IEEE behavior for floating-point to run faster, or die trying.
-
-@cindex -fstrength-reduce option
-@cindex options, -fstrength-reduce
-@item -fstrength-reduce
-@cindex loops, speeding up
-@cindex speed, of loops
-@c DL: normally defaulted?
-Might make some loops run faster.
-
-@cindex -frerun-cse-after-loop option
-@cindex options, -frerun-cse-after-loop
-@item -frerun-cse-after-loop
-@cindex -fexpensive-optimizations option
-@cindex options, -fexpensive-optimizations
-@c DL: This is -O2?
-@item -fexpensive-optimizations
-@cindex -fdelayed-branch option
-@cindex options, -fdelayed-branch
-@item -fdelayed-branch
-@cindex -fschedule-insns option
-@cindex options, -fschedule-insns
-@item -fschedule-insns
-@cindex -fschedule-insns2 option
-@cindex options, -fschedule-insns2
-@item -fschedule-insns2
-@cindex -fcaller-saves option
-@cindex options, -fcaller-saves
-@item -fcaller-saves
-Might improve performance on some code.
-
-@cindex -funroll-loops option
-@cindex options, -funroll-loops
-@item -funroll-loops
-@cindex loops, unrolling
-@cindex unrolling loops
-@cindex loops, optimizing
-@cindex indexed (iterative) @code{DO}
-@cindex iterative @code{DO}
-@c DL: fixme: Craig doesn't like `indexed' but f95 doesn't seem to
-@c provide a suitable term
-@c CB: I've decided on `iterative', for the time being, and changed
-@c my previous, rather bizarre, use of `imperative' to that
-@c (though `precomputed-trip' would be a more precise adjective)
-Typically improves performance on code using iterative @code{DO} loops by
-unrolling them and is probably generally appropriate for Fortran, though
-it is not turned on at any optimization level.
-Note that outer loop unrolling isn't done specifically; decisions about
-whether to unroll a loop are made on the basis of its instruction count.
-
-@c DL: Fixme: This should obviously go somewhere else...
-Also, no `loop discovery'@footnote{@dfn{loop discovery} refers to the
-process by which a compiler, or indeed any reader of a program,
-determines which portions of the program are more likely to be executed
-repeatedly as it is being run. Such discovery typically is done early
-when compiling using optimization techniques, so the ``discovered''
-loops get more attention---and more run-time resources, such as
-registers---from the compiler. It is easy to ``discover'' loops that are
-constructed out of looping constructs in the language
-(such as Fortran's @code{DO}). For some programs, ``discovering'' loops
-constructed out of lower-level constructs (such as @code{IF} and
-@code{GOTO}) can lead to generation of more optimal code
-than otherwise.} is done, so only loops written with @code{DO}
-benefit from loop optimizations, including---but not limited
-to---unrolling. Loops written with @code{IF} and @code{GOTO} are not
-currently recognized as such. This option unrolls only iterative
-@code{DO} loops, not @code{DO WHILE} loops.
-
-@cindex -funroll-all-loops option
-@cindex options, -funroll-all-loops
-@cindex DO WHILE
-@item -funroll-all-loops
-@c DL: Check my understanding of -funroll-all-loops v. -funroll-loops is correct.
-Probably improves performance on code using @code{DO WHILE} loops by
-unrolling them in addition to iterative @code{DO} loops. In the absence
-of @code{DO WHILE}, this option is equivalent to @samp{-funroll-loops}
-but possibly slower.
-
-@item -fno-move-all-movables
-@cindex -fno-move-all-movables option
-@cindex options, -fno-move-all-movables
-@item -fno-reduce-all-givs
-@cindex -fno-reduce-all-givs option
-@cindex options, -fno-reduce-all-givs
-@item -fno-rerun-loop-opt
-@cindex -fno-rerun-loop-opt option
-@cindex options, -fno-rerun-loop-opt
-@emph{Version info:}
-These options are not supported by
-versions of @code{g77} based on @code{gcc} version 2.8.
-
-Each of these might improve performance on some code.
-
-Analysis of Fortran code optimization and the resulting
-optimizations triggered by the above options were
-contributed by Toon Moene (@email{toon@@moene.indiv.nluug.nl}).
-
-These three options are intended to be removed someday, once
-they have helped determine the efficacy of various
-approaches to improving the performance of Fortran code.
-
-Please let us know how use of these options affects
-the performance of your production code.
-We're particularly interested in code that runs faster
-when these options are @emph{disabled}, and in
-non-Fortran code that benefits when they are
-@emph{enabled} via the above @code{gcc} command-line options.
-@end table
-
-@xref{Optimize Options,,Options That Control Optimization,
-gcc,Using and Porting GNU CC}, for more information on options
-to optimize the generated machine code.
-
-@node Preprocessor Options
-@section Options Controlling the Preprocessor
-@cindex preprocessor options
-@cindex options, preprocessor
-@cindex cpp program
-@cindex programs, cpp
-
-These options control the C preprocessor, which is run on each C source
-file before actual compilation.
-
-@xref{Preprocessor Options,,Options Controlling the Preprocessor,
-gcc,Using and Porting GNU CC}, for information on C preprocessor options.
-
-@cindex INCLUDE directive
-@cindex directive, INCLUDE
-Some of these options also affect how @code{g77} processes the
-@code{INCLUDE} directive.
-Since this directive is processed even when preprocessing
-is not requested, it is not described in this section.
-@xref{Directory Options,,Options for Directory Search}, for
-information on how @code{g77} processes the @code{INCLUDE} directive.
-
-However, the @code{INCLUDE} directive does not apply
-preprocessing to the contents of the included file itself.
-
-Therefore, any file that contains preprocessor directives
-(such as @code{#include}, @code{#define}, and @code{#if})
-must be included via the @code{#include} directive, not
-via the @code{INCLUDE} directive.
-Therefore, any file containing preprocessor directives,
-if included, is necessarily included by a file that itself
-contains preprocessor directives.
-
-@node Directory Options
-@section Options for Directory Search
-@cindex directory, options
-@cindex options, directory search
-@cindex search path
-
-These options affect how the @code{cpp} preprocessor searches
-for files specified via the @code{#include} directive.
-Therefore, when compiling Fortran programs, they are meaningful
-when the preprocessor is used.
-
-@cindex INCLUDE directive
-@cindex directive, INCLUDE
-Some of these options also affect how @code{g77} searches
-for files specified via the @code{INCLUDE} directive,
-although files included by that directive are not,
-themselves, preprocessed.
-These options are:
-
-@table @code
-@cindex -I- option
-@cindex options, -I-
-@item -I-
-@cindex -Idir option
-@cindex options, -Idir
-@item -I@var{dir}
-@cindex directory, search paths for inclusion
-@cindex inclusion, directory search paths for
-@cindex search paths, for included files
-@cindex paths, search
-These affect interpretation of the @code{INCLUDE} directive
-(as well as of the @code{#include} directive of the @code{cpp}
-preprocessor).
-
-Note that @samp{-I@var{dir}} must be specified @emph{without} any
-spaces between @samp{-I} and the directory name---that is,
-@samp{-Ifoo/bar} is valid, but @samp{-I foo/bar}
-is rejected by the @code{g77} compiler (though the preprocessor supports
-the latter form).
-@c this is due to toplev.c's inflexible option processing
-Also note that the general behavior of @samp{-I} and
-@code{INCLUDE} is pretty much the same as of @samp{-I} with
-@code{#include} in the @code{cpp} preprocessor, with regard to
-looking for @file{header.gcc} files and other such things.
-
-@xref{Directory Options,,Options for Directory Search,
-gcc,Using and Porting GNU CC}, for information on the @samp{-I} option.
-@end table
-
-@node Code Gen Options
-@section Options for Code Generation Conventions
-@cindex code generation, conventions
-@cindex options, code generation
-@cindex run-time, options
-
-These machine-independent options control the interface conventions
-used in code generation.
-
-Most of them have both positive and negative forms; the negative form
-of @samp{-ffoo} would be @samp{-fno-foo}. In the table below, only
-one of the forms is listed---the one which is not the default. You
-can figure out the other form by either removing @samp{no-} or adding
-it.
-
-@table @code
-@cindex -fno-automatic option
-@cindex options, -fno-automatic
-@item -fno-automatic
-@cindex SAVE statement
-@cindex statements, SAVE
-Treat each program unit as if the @code{SAVE} statement was specified
-for every local variable and array referenced in it.
-Does not affect common blocks.
-(Some Fortran compilers provide this option under
-the name @samp{-static}.)
-
-@cindex -finit-local-zero option
-@cindex options, -finit-local-zero
-@item -finit-local-zero
-@cindex DATA statement
-@cindex statements, DATA
-@cindex initialization, of local variables
-@cindex variables, initialization of
-@cindex uninitialized variables
-@cindex variables, uninitialized
-Specify that variables and arrays that are local to a program unit
-(not in a common block and not passed as an argument) are to be initialized
-to binary zeros.
-
-Since there is a run-time penalty for initialization of variables
-that are not given the @code{SAVE} attribute, it might be a
-good idea to also use @samp{-fno-automatic} with @samp{-finit-local-zero}.
-
-@cindex -fno-f2c option
-@cindex options, -fno-f2c
-@item -fno-f2c
-@cindex @code{f2c} compatibility
-@cindex compatibility, @code{f2c}
-Do not generate code designed to be compatible with code generated
-by @code{f2c}; use the GNU calling conventions instead.
-
-The @code{f2c} calling conventions require functions that return
-type @code{REAL(KIND=1)} to actually return the C type @code{double},
-and functions that return type @code{COMPLEX} to return the
-values via an extra argument in the calling sequence that points
-to where to store the return value.
-Under the GNU calling conventions, such functions simply return
-their results as they would in GNU C---@code{REAL(KIND=1)} functions
-return the C type @code{float}, and @code{COMPLEX} functions
-return the GNU C type @code{complex} (or its @code{struct}
-equivalent).
-
-This does not affect the generation of code that interfaces with the
-@code{libg2c} library.
-
-However, because the @code{libg2c} library uses @code{f2c}
-calling conventions, @code{g77} rejects attempts to pass
-intrinsics implemented by routines in this library as actual
-arguments when @samp{-fno-f2c} is used, to avoid bugs when
-they are actually called by code expecting the GNU calling
-conventions to work.
-
-For example, @samp{INTRINSIC ABS;CALL FOO(ABS)} is
-rejected when @samp{-fno-f2c} is in force.
-(Future versions of the @code{g77} run-time library might
-offer routines that provide GNU-callable versions of the
-routines that implement the @code{f2c}-callable intrinsics
-that may be passed as actual arguments, so that
-valid programs need not be rejected when @samp{-fno-f2c}
-is used.)
-
-@strong{Caution:} If @samp{-fno-f2c} is used when compiling any
-source file used in a program, it must be used when compiling
-@emph{all} Fortran source files used in that program.
-
-@c seems kinda dumb to tell people about an option they can't use -- jcb
-@c then again, we want users building future-compatible libraries with it.
-@cindex -ff2c-library option
-@cindex options, -ff2c-library
-@item -ff2c-library
-Specify that use of @code{libg2c} (or the original @code{libf2c})
-is required.
-This is the default for the current version of @code{g77}.
-
-Currently it is not
-valid to specify @samp{-fno-f2c-library}.
-This option is provided so users can specify it in shell
-scripts that build programs and libraries that require the
-@code{libf2c} library, even when being compiled by future
-versions of @code{g77} that might otherwise default to
-generating code for an incompatible library.
-
-@cindex -fno-underscoring option
-@cindex options, -fno-underscoring
-@item -fno-underscoring
-@cindex underscore
-@cindex symbol names, underscores
-@cindex transforming symbol names
-@cindex symbol names, transforming
-Do not transform names of entities specified in the Fortran
-source file by appending underscores to them.
-
-With @samp{-funderscoring} in effect, @code{g77} appends two underscores
-to names with underscores and one underscore to external names with
-no underscores. (@code{g77} also appends two underscores to internal
-names with underscores to avoid naming collisions with external names.
-The @samp{-fno-second-underscore} option disables appending of the
-second underscore in all cases.)
-
-This is done to ensure compatibility with code produced by many
-UNIX Fortran compilers, including @code{f2c}, which perform the
-same transformations.
-
-Use of @samp{-fno-underscoring} is not recommended unless you are
-experimenting with issues such as integration of (GNU) Fortran into
-existing system environments (vis-a-vis existing libraries, tools, and
-so on).
-
-For example, with @samp{-funderscoring}, and assuming other defaults like
-@samp{-fcase-lower} and that @samp{j()} and @samp{max_count()} are
-external functions while @samp{my_var} and @samp{lvar} are local variables,
-a statement like
-
-@smallexample
-I = J() + MAX_COUNT (MY_VAR, LVAR)
-@end smallexample
-
-@noindent
-is implemented as something akin to:
-
-@smallexample
-i = j_() + max_count__(&my_var__, &lvar);
-@end smallexample
-
-With @samp{-fno-underscoring}, the same statement is implemented as:
-
-@smallexample
-i = j() + max_count(&my_var, &lvar);
-@end smallexample
-
-Use of @samp{-fno-underscoring} allows direct specification of
-user-defined names while debugging and when interfacing @code{g77}-compiled
-code with other languages.
-
-Note that just because the names match does @emph{not} mean that the
-interface implemented by @code{g77} for an external name matches the
-interface implemented by some other language for that same name.
-That is, getting code produced by @code{g77} to link to code produced
-by some other compiler using this or any other method can be only a
-small part of the overall solution---getting the code generated by
-both compilers to agree on issues other than naming can require
-significant effort, and, unlike naming disagreements, linkers normally
-cannot detect disagreements in these other areas.
-
-Also, note that with @samp{-fno-underscoring}, the lack of appended
-underscores introduces the very real possibility that a user-defined
-external name will conflict with a name in a system library, which
-could make finding unresolved-reference bugs quite difficult in some
-cases---they might occur at program run time, and show up only as
-buggy behavior at run time.
-
-In future versions of @code{g77}, we hope to improve naming and linking
-issues so that debugging always involves using the names as they appear
-in the source, even if the names as seen by the linker are mangled to
-prevent accidental linking between procedures with incompatible
-interfaces.
-
-@cindex -fno-second-underscore option
-@cindex options, -fno-second-underscore
-@item -fno-second-underscore
-@cindex underscore
-@cindex symbol names, underscores
-@cindex transforming symbol names
-@cindex symbol names, transforming
-Do not append a second underscore to names of entities specified
-in the Fortran source file.
-
-This option has no effect if @samp{-fno-underscoring} is
-in effect.
-
-Otherwise, with this option, an external name such as @samp{MAX_COUNT}
-is implemented as a reference to the link-time external symbol
-@samp{max_count_}, instead of @samp{max_count__}.
-
-@cindex -fno-ident option
-@cindex options, -fno-ident
-@item -fno-ident
-Ignore the @samp{#ident} directive.
-
-@cindex -fzeros option
-@cindex options, -fzeros
-@item -fzeros
-Treat initial values of zero as if they were any other value.
-
-As of version 0.5.18, @code{g77} normally treats @code{DATA} and
-other statements that are used to specify initial values of zero
-for variables and arrays as if no values were actually specified,
-in the sense that no diagnostics regarding multiple initializations
-are produced.
-
-This is done to speed up compiling of programs that initialize
-large arrays to zeros.
-
-Use @samp{-fzeros} to revert to the simpler, slower behavior
-that can catch multiple initializations by keeping track of
-all initializations, zero or otherwise.
-
-@emph{Caution:} Future versions of @code{g77} might disregard this option
-(and its negative form, the default) or interpret it somewhat
-differently.
-The interpretation changes will affect only non-standard
-programs; standard-conforming programs should not be affected.
-
-@cindex -fdebug-kludge option
-@cindex options, -fdebug-kludge
-@item -fdebug-kludge
-Emit information on @code{COMMON} and @code{EQUIVALENCE} members
-that might help users of debuggers work around lack of proper debugging
-information on such members.
-
-As of version 0.5.19, @code{g77} offers this option to emit
-information on members of aggregate areas to help users while debugging.
-This information consists of establishing the type and contents of each
-such member so that, when a debugger is asked to print the contents,
-the printed information provides rudimentary debugging information.
-This information identifies the name of the aggregate area (either the
-@code{COMMON} block name, or the @code{g77}-assigned name for the
-@code{EQUIVALENCE} name) and the offset, in bytes, of the member from
-the beginning of the area.
-
-Using @code{gdb}, this information is not coherently displayed in the Fortran
-language mode, so temporarily switching to the C language mode to display the
-information is suggested.
-Use @samp{set language c} and @samp{set language fortran} to accomplish this.
-
-For example:
-
-@smallexample
- COMMON /X/A,B
- EQUIVALENCE (C,D)
- CHARACTER XX*50
- EQUIVALENCE (I,XX(20:20))
- END
-
-GDB is free software and you are welcome to distribute copies of it
- under certain conditions; type "show copying" to see the conditions.
-There is absolutely no warranty for GDB; type "show warranty" for details.
-GDB 4.16 (lm-gnits-dwim), Copyright 1996 Free Software Foundation, Inc...
-(gdb) b MAIN__
-Breakpoint 1 at 0t1200000201120112: file cd.f, line 5.
-(gdb) r
-Starting program: /home/user/a.out
-
-Breakpoint 1, MAIN__ () at cd.f:5
-Current language: auto; currently fortran
-(gdb) set language c
-Warning: the current language does not match this frame.
-(gdb) p a
-$2 = "At (COMMON) `x_' plus 0 bytes"
-(gdb) p b
-$3 = "At (COMMON) `x_' plus 4 bytes"
-(gdb) p c
-$4 = "At (EQUIVALENCE) `__g77_equiv_c' plus 0 bytes"
-(gdb) p d
-$5 = "At (EQUIVALENCE) `__g77_equiv_c' plus 0 bytes"
-(gdb) p i
-$6 = "At (EQUIVALENCE) `__g77_equiv_xx' plus 20 bytes"
-(gdb) p xx
-$7 = "At (EQUIVALENCE) `__g77_equiv_xx' plus 1 bytes"
-(gdb) set language fortran
-(gdb)
-@end smallexample
-
-@noindent
-Use @samp{-fdebug-kludge} to generate this information,
-which might make some programs noticeably larger.
-
-@emph{Caution:} Future versions of @code{g77} might disregard this option
-(and its negative form).
-Current plans call for this to happen when published versions of @code{g77}
-and @code{gdb} exist that provide proper access to debugging information on
-@code{COMMON} and @code{EQUIVALENCE} members.
-
-@cindex -femulate-complex option
-@cindex options, -femulate-complex
-@item -femulate-complex
-Implement @code{COMPLEX} arithmetic via emulation,
-instead of using the facilities of
-the @code{gcc} back end that provide direct support of
-@code{complex} arithmetic.
-
-(@code{gcc} had some bugs in its back-end support
-for @code{complex} arithmetic, due primarily to the support not being
-completed as of version 2.8.1 and @code{egcs} 1.1.2.)
-
-Use @samp{-femulate-complex} if you suspect code-generation bugs,
-or experience compiler crashes,
-that might result from @code{g77} using the @code{COMPLEX} support
-in the @code{gcc} back end.
-If using that option fixes the bugs or crashes you are seeing,
-that indicates a likely @code{g77} bugs
-(though, all compiler crashes are considered bugs),
-so, please report it.
-(Note that the known bugs, now believed fixed, produced compiler crashes
-rather than causing the generation of incorrect code.)
-
-Use of this option should not affect how Fortran code compiled
-by @code{g77} works in terms of its interfaces to other code,
-e.g. that compiled by @code{f2c}.
-
-@emph{Caution:} Future versions of @code{g77} might ignore both forms
-of this option.
-
-@cindex -falias-check option
-@cindex options, -falias-check
-@cindex -fargument-alias option
-@cindex options, -fargument-alias
-@cindex -fargument-noalias option
-@cindex options, -fargument-noalias
-@cindex -fno-argument-noalias-global option
-@cindex options, -fno-argument-noalias-global
-@item -falias-check
-@item -fargument-alias
-@item -fargument-noalias
-@item -fno-argument-noalias-global
-@emph{Version info:}
-These options are not supported by
-versions of @code{g77} based on @code{gcc} version 2.8.
-
-These options specify to what degree aliasing
-(overlap)
-is permitted between
-arguments (passed as pointers) and @code{COMMON} (external, or
-public) storage.
-
-The default for Fortran code, as mandated by the FORTRAN 77 and
-Fortran 90 standards, is @samp{-fargument-noalias-global}.
-The default for code written in the C language family is
-@samp{-fargument-alias}.
-
-Note that, on some systems, compiling with @samp{-fforce-addr} in
-effect can produce more optimal code when the default aliasing
-options are in effect (and when optimization is enabled).
-
-@xref{Aliasing Assumed To Work}, for detailed information on the implications
-of compiling Fortran code that depends on the ability to alias dummy
-arguments.
-
-@cindex -fno-globals option
-@cindex options, -fno-globals
-@item -fno-globals
-@cindex global names, warning
-@cindex warnings, global names
-@cindex in-line code
-@cindex compilation, in-line
-Disable diagnostics about inter-procedural
-analysis problems, such as disagreements about the
-type of a function or a procedure's argument,
-that might cause a compiler crash when attempting
-to inline a reference to a procedure within a
-program unit.
-(The diagnostics themselves are still produced, but
-as warnings, unless @samp{-Wno-globals} is specified,
-in which case no relevant diagnostics are produced.)
-
-Further, this option disables such inlining, to
-avoid compiler crashes resulting from incorrect
-code that would otherwise be diagnosed.
-
-As such, this option might be quite useful when
-compiling existing, ``working'' code that happens
-to have a few bugs that do not generally show themselves,
-but which @code{g77} diagnoses.
-
-Use of this option therefore has the effect of
-instructing @code{g77} to behave more like it did
-up through version 0.5.19.1, when it paid little or
-no attention to disagreements between program units
-about a procedure's type and argument information,
-and when it performed no inlining of procedures
-(except statement functions).
-
-Without this option, @code{g77} defaults to performing
-the potentially inlining procedures as it started doing
-in version 0.5.20, but as of version 0.5.21, it also
-diagnoses disagreements that might cause such inlining
-to crash the compiler as (fatal) errors,
-and warns about similar disagreements
-that are currently believed to not
-likely to result in the compiler later crashing
-or producing incorrect code.
-
-@cindex -fflatten-arrays option
-@item -fflatten-arrays
-@cindex array performance
-@cindex arrays, flattening
-Use back end's C-like constructs
-(pointer plus offset)
-instead of its @code{ARRAY_REF} construct
-to handle all array references.
-
-@emph{Note:} This option is not supported.
-It is intended for use only by @code{g77} developers,
-to evaluate code-generation issues.
-It might be removed at any time.
-
-@cindex -fbounds-check option
-@cindex -ffortran-bounds-check option
-@item -fbounds-check
-@itemx -ffortran-bounds-check
-@cindex bounds checking
-@cindex range checking
-@cindex array bounds checking
-@cindex subscript checking
-@cindex substring checking
-@cindex checking subscripts
-@cindex checking substrings
-Enable generation of run-time checks for array subscripts
-and substring start and end points
-against the (locally) declared minimum and maximum values.
-
-The current implementation uses the @code{libf2c}
-library routine @code{s_rnge} to print the diagnostic.
-
-However, whereas @code{f2c} generates a single check per
-reference for a multi-dimensional array, of the computed
-offset against the valid offset range (0 through the size of the array),
-@code{g77} generates a single check per @emph{subscript} expression.
-This catches some cases of potential bugs that @code{f2c} does not,
-such as references to below the beginning of an assumed-size array.
-
-@code{g77} also generates checks for @code{CHARACTER} substring references,
-something @code{f2c} currently does not do.
-
-Use the new @samp{-ffortran-bounds-check} option
-to specify bounds-checking for only the Fortran code you are compiling,
-not necessarily for code written in other languages.
-
-@emph{Note:} To provide more detailed information on the offending subscript,
-@code{g77} provides the @code{libg2c} run-time library routine @code{s_rnge}
-with somewhat differently-formatted information.
-Here's a sample diagnostic:
-
-@smallexample
-Subscript out of range on file line 4, procedure rnge.f/bf.
-Attempt to access the -6-th element of variable b[subscript-2-of-2].
-Aborted
-@end smallexample
-
-The above message indicates that the offending source line is
-line 4 of the file @file{rnge.f},
-within the program unit (or statement function) named @samp{bf}.
-The offended array is named @samp{b}.
-The offended array dimension is the second for a two-dimensional array,
-and the offending, computed subscript expression was @samp{-6}.
-
-For a @code{CHARACTER} substring reference, the second line has
-this appearance:
-
-@smallexample
-Attempt to access the 11-th element of variable a[start-substring].
-@end smallexample
-
-This indicates that the offended @code{CHARACTER} variable or array
-is named @samp{a},
-the offended substring position is the starting (leftmost) position,
-and the offending substring expression is @samp{11}.
-
-(Though the verbage of @code{s_rnge} is not ideal
-for the purpose of the @code{g77} compiler,
-the above information should provide adequate diagnostic abilities
-to it users.)
-@end table
-
-@xref{Code Gen Options,,Options for Code Generation Conventions,
-gcc,Using and Porting GNU CC}, for information on more options
-offered by the GBE
-shared by @code{g77}, @code{gcc}, and other GNU compilers.
-
-Some of these do @emph{not} work when compiling programs written in Fortran:
-
-@table @code
-@cindex -fpcc-struct-return option
-@cindex options, -fpcc-struct-return
-@item -fpcc-struct-return
-@cindex -freg-struct-return option
-@cindex options, -freg-struct-return
-@item -freg-struct-return
-You should not use these except strictly the same way as you
-used them to build the version of @code{libg2c} with which
-you will be linking all code compiled by @code{g77} with the
-same option.
-
-@cindex -fshort-double option
-@cindex options, -fshort-double
-@item -fshort-double
-This probably either has no effect on Fortran programs, or
-makes them act loopy.
-
-@cindex -fno-common option
-@cindex options, -fno-common
-@item -fno-common
-Do not use this when compiling Fortran programs,
-or there will be Trouble.
-
-@cindex -fpack-struct option
-@cindex options, -fpack-struct
-@item -fpack-struct
-This probably will break any calls to the @code{libg2c} library,
-at the very least, even if it is built with the same option.
-@end table
-
-@node Environment Variables
-@section Environment Variables Affecting GNU Fortran
-@cindex environment variables
-
-GNU Fortran currently does not make use of any environment
-variables to control its operation above and beyond those
-that affect the operation of @code{gcc}.
-
-@xref{Environment Variables,,Environment Variables Affecting GNU CC,
-gcc,Using and Porting GNU CC}, for information on environment
-variables.
+@include invoke.texi
@include news.texi
@@ -3524,7 +889,7 @@ the network at
or as monolithic text at
@uref{http://www.fortran.com/fortran/F77_std/f77_std.html}.
It offers some extensions that are popular among users
-of UNIX @code{f77} and @code{f2c} compilers, some that
+of UNIX @command{f77} and @command{f2c} compilers, some that
are popular among users of other compilers (such as Digital
products), some that are popular among users of the
newer Fortran 90 standard, and some that are introduced
@@ -3536,10 +901,10 @@ a few freely available electronic references have pointers from
@uref{http://www.fortran.com/fortran/Books/}. There is a `cooperative
net project', @cite{User Notes on Fortran Programming} at
@uref{ftp://vms.huji.ac.il/fortran/} and mirrors elsewhere; some of this
-material might not apply specifically to @code{g77}.)
+material might not apply specifically to @command{g77}.)
Part of what defines a particular implementation of a Fortran
-system, such as @code{g77}, is the particular characteristics
+system, such as @command{g77}, is the particular characteristics
of how it supports types, constants, and so on.
Much of this is left up to the implementation by the various
Fortran standards and accepted practice in the industry.
@@ -3548,7 +913,7 @@ The GNU Fortran @emph{language} is described below.
Much of the material is organized along the same lines
as the ANSI FORTRAN 77 standard itself.
-@xref{Other Dialects}, for information on features @code{g77} supports
+@xref{Other Dialects}, for information on features @command{g77} supports
that are not part of the GNU Fortran language.
@emph{Note}: This portion of the documentation definitely needs a lot
@@ -3584,19 +949,19 @@ The purpose of the following description of the GNU Fortran
language is to promote wide portability of GNU Fortran programs.
GNU Fortran is an evolving language, due to the
-fact that @code{g77} itself is in beta test.
+fact that @command{g77} itself is in beta test.
Some current features of the language might later
-be redefined as dialects of Fortran supported by @code{g77}
-when better ways to express these features are added to @code{g77},
+be redefined as dialects of Fortran supported by @command{g77}
+when better ways to express these features are added to @command{g77},
for example.
Such features would still be supported by
-@code{g77}, but would be available only when
+@command{g77}, but would be available only when
one or more command-line options were used.
The GNU Fortran @emph{language} is distinct from the
-GNU Fortran @emph{compilation system} (@code{g77}).
+GNU Fortran @emph{compilation system} (@command{g77}).
-For example, @code{g77} supports various dialects of
+For example, @command{g77} supports various dialects of
Fortran---in a sense, these are languages other than
GNU Fortran---though its primary
purpose is to support the GNU Fortran language, which also is
@@ -3607,18 +972,18 @@ support for the GNU Fortran language, and are encouraged
to do so.
Currently, the GNU Fortran language is a fairly fuzzy object.
-It represents something of a cross between what @code{g77} accepts
+It represents something of a cross between what @command{g77} accepts
when compiling using the prevailing defaults and what this
document describes as being part of the language.
-Future versions of @code{g77} are expected to clarify the
+Future versions of @command{g77} are expected to clarify the
definition of the language in the documentation.
Often, this will mean adding new features to the language, in the form
-of both new documentation and new support in @code{g77}.
+of both new documentation and new support in @command{g77}.
However, it might occasionally mean removing a feature
from the language itself to ``dialect'' status.
In such a case, the documentation would be adjusted
-to reflect the change, and @code{g77} itself would likely be changed
+to reflect the change, and @command{g77} itself would likely be changed
to require one or more command-line options to continue supporting
the feature.
@@ -3628,7 +993,7 @@ a balance between:
@itemize @bullet
@item
Serving as a mostly-upwards-compatible language from the
-de facto UNIX Fortran dialect as supported by @code{f77}.
+de facto UNIX Fortran dialect as supported by @command{f77}.
@item
Offering new, well-designed language features.
@@ -3694,10 +1059,10 @@ sense that its users can use it in the same way, and expect largely the
same behaviors from it, regardless of the kind of system they are using
at any particular time.
-This approach constrains the solutions @code{g77} can use to resolve
+This approach constrains the solutions @command{g77} can use to resolve
conflicts between various camps of Fortran users.
If these two camps disagree about what a particular construct should
-mean, @code{g77} cannot simply be changed to treat that particular construct as
+mean, @command{g77} cannot simply be changed to treat that particular construct as
having one meaning without comment (such as a warning), lest the users
expecting it to have the other meaning are unpleasantly surprised that
their code misbehaves when executed.
@@ -3706,19 +1071,19 @@ The use of the ASCII backslash character in character constants is
an excellent (and still somewhat unresolved) example of this kind of
controversy.
@xref{Backslash in Constants}.
-Other examples are likely to arise in the future, as @code{g77} developers
+Other examples are likely to arise in the future, as @command{g77} developers
strive to improve its ability to accept an ever-wider variety of existing
Fortran code without requiring significant modifications to said code.
Development of GNU Fortran is further constrained by the desire
to avoid requiring programmers to change their code.
This is important because it allows programmers, administrators,
-and others to more faithfully evaluate and validate @code{g77}
+and others to more faithfully evaluate and validate @command{g77}
(as an overall product and as new versions are distributed)
without having to support multiple versions of their programs
so that they continue to work the same way on their existing
systems (non-GNU perhaps, but possibly also earlier versions
-of @code{g77}).
+of @command{g77}).
@node Standard Support
@section ANSI FORTRAN 77 Standard Support
@@ -3729,7 +1094,7 @@ of @code{g77}).
@cindex FORTRAN 77 compatibility
GNU Fortran supports ANSI FORTRAN 77 with the following caveats.
-In summary, the only ANSI FORTRAN 77 features @code{g77} doesn't
+In summary, the only ANSI FORTRAN 77 features @command{g77} doesn't
support are those that are probably rarely used in actual code,
some of which are explicitly disallowed by the Fortran 90 standard.
@@ -3743,7 +1108,7 @@ some of which are explicitly disallowed by the Fortran 90 standard.
@node No Passing External Assumed-length
@subsection No Passing External Assumed-length
-@code{g77} disallows passing of an external procedure
+@command{g77} disallows passing of an external procedure
as an actual argument if the procedure's
type is declared @code{CHARACTER*(*)}. For example:
@@ -3760,7 +1125,7 @@ It isn't clear whether the standard considers this conforming.
@node No Passing Dummy Assumed-length
@subsection No Passing Dummy Assumed-length
-@code{g77} disallows passing of a dummy procedure
+@command{g77} disallows passing of a dummy procedure
as an actual argument if the procedure's
type is declared @code{CHARACTER*(*)}.
@@ -3781,7 +1146,7 @@ It isn't clear whether the standard considers this conforming.
The @code{DO} variable for an implied-@code{DO} construct in a
@code{DATA} statement may not be used as the @code{DO} variable
for an outer implied-@code{DO} construct. For example, this
-fragment is disallowed by @code{g77}:
+fragment is disallowed by @command{g77}:
@smallexample
DATA ((A(I, I), I= 1, 10), I= 1, 10) /@dots{}/
@@ -3800,7 +1165,7 @@ tries to use this unsupported construct.
An array element initializer in an implied-@code{DO} construct in a
@code{DATA} statement must contain at least one reference to the @code{DO}
variables of each outer implied-@code{DO} construct. For example,
-this fragment is disallowed by @code{g77}:
+this fragment is disallowed by @command{g77}:
@smallexample
DATA (A, I= 1, 1) /1./
@@ -3809,7 +1174,7 @@ DATA (A, I= 1, 1) /1./
@noindent
This also is disallowed by Fortran 90, as FORTRAN 77's more permissive
requirements offer no additional capabilities.
-However, @code{g77} doesn't necessarily diagnose all cases
+However, @command{g77} doesn't necessarily diagnose all cases
where this requirement is not met.
Note that it is @emph{very} unlikely that any production Fortran code
@@ -3829,12 +1194,12 @@ the ANSI FORTRAN 77 language in that it does not generally require
conforming implementations to diagnose cases where programs do
not conform to the language.
-However, @code{g77} as a compiler is being developed in a way that
+However, @command{g77} as a compiler is being developed in a way that
is intended to enable it to diagnose such cases in an easy-to-understand
manner.
A program that conforms to the GNU Fortran language should, when
-compiled, linked, and executed using a properly installed @code{g77}
+compiled, linked, and executed using a properly installed @command{g77}
system, perform as described by the GNU Fortran language definition.
Reasons for different behavior include, among others:
@@ -3855,21 +1220,21 @@ Excessive reliance on behaviors that are system-dependent
Bugs in the program.
@item
-Bug in @code{g77}.
+Bug in @command{g77}.
@item
Bugs in the system.
@end itemize
Despite these ``loopholes'', the availability of a clear specification
-of the language of programs submitted to @code{g77}, as this document
+of the language of programs submitted to @command{g77}, as this document
is intended to provide, is considered an important aspect of providing
a robust, clean, predictable Fortran implementation.
The definition of the GNU Fortran language, while having no special
legal status, can therefore be viewed as a sort of contract, or agreement.
This agreement says, in essence, ``if you write a program in this language,
-and run it in an environment (such as a @code{g77} system) that supports
+and run it in an environment (such as a @command{g77} system) that supports
this language, the program should behave in a largely predictable way''.
@node Notation Used
@@ -4082,7 +1447,7 @@ Some readers might think the @samp{CALL BAR} is executed
only if @samp{VALIDP} is @code{.TRUE.}, while others might
assume its execution is unconditional.
-(At present, @code{g77} does not diagnose code that
+(At present, @command{g77} does not diagnose code that
violates this restriction.)
@end itemize
@@ -4417,9 +1782,9 @@ which is a literal GNU Fortran character constant.
The meaning and interpretation of @var{filename} depends on the
implementation, but typically is a filename.
-(@code{g77} treats it as a filename that it searches for
+(@command{g77} treats it as a filename that it searches for
in the current directory and/or directories specified
-via the @samp{-I} command-line option.)
+via the @option{-I} command-line option.)
The effect of the @code{INCLUDE} directive is as if the
included text directly replaced the directive in the source
@@ -4495,7 +1860,7 @@ This permits long names to be used for @var{filename}.
(@pxref{C Preprocessor Output,,, cpp, The C Preprocessor})
are recognized by the compiler even
when the preprocessor isn't run on the input (as it is when compiling
-@samp{.F} files). (Note the distinction between these @code{cpp}
+@samp{.F} files). (Note the distinction between these @command{cpp}
@code{#} @emph{output} directives and @code{#line} @emph{input}
directives.)
@@ -4528,7 +1893,7 @@ notation for clarification, though the traditional notation
might not work the same way on all GNU Fortran implementations.
Use of @samp{KIND=} makes this document more concise because
-@code{g77} is able to define values for @samp{KIND=} that
+@command{g77} is able to define values for @samp{KIND=} that
have the same meanings on all systems, due to the way the
Fortran 90 standard specifies these values are to be used.
@@ -4549,7 +1914,7 @@ operating system.
However, use of @samp{KIND=} is @emph{not} generally recommended
when writing portable code (unless, for example, the code is
-going to be compiled only via @code{g77}, which is a widely
+going to be compiled only via @command{g77}, which is a widely
ported compiler).
GNU Fortran does not yet have adequate language constructs to
permit use of @samp{KIND=} in a fashion that would make the
@@ -4572,7 +1937,7 @@ to specify the types in a fashion that may be easily adjusted
to suit each particular implementation to which the program
is ported.
(These types generally won't need to be adjusted for ports of
-@code{g77}.)
+@command{g77}.)
Further details regarding GNU Fortran data types and constants
are provided below.
@@ -4698,9 +2063,9 @@ in any particular way---use explicit code to do that.
Further, the GNU Fortran language requires no particular values
for @var{n} to be supported by an implementation via the @samp{*@var{n}}
notation.
-@code{g77} supports @code{INTEGER*1} (as @code{INTEGER(KIND=3)})
+@command{g77} supports @code{INTEGER*1} (as @code{INTEGER(KIND=3)})
on all systems, for example,
-but not all implementations are required to do so, and @code{g77}
+but not all implementations are required to do so, and @command{g77}
is known to not support @code{REAL*1} on most (or all) systems.
As a result, except for @var{generic-type} of @code{CHARACTER},
@@ -4767,7 +2132,7 @@ Programmers are discouraged from writing these values directly
into their code.
Future versions of the GNU Fortran language will offer
facilities that will make the writing of code portable
-to @code{g77} @emph{and} Fortran 90 implementations simpler.
+to @command{g77} @emph{and} Fortran 90 implementations simpler.
However, writing code that ports to existing FORTRAN 77
implementations depends on avoiding the @samp{KIND=} construct.
@@ -4912,8 +2277,8 @@ be the same size and semantics of the C type @code{void *}.)
@end table
Note that these are @emph{proposed} correspondences and might change
-in future versions of @code{g77}---avoid writing code depending
-on them while @code{g77}, and therefore the GNU Fortran language
+in future versions of @command{g77}---avoid writing code depending
+on them while @command{g77}, and therefore the GNU Fortran language
it defines, is in beta testing.
Values not specified in the above list are reserved to
@@ -5011,7 +2376,7 @@ is 11, and so on.)
A prefix-radix constant, such as @samp{Z'ABCD'}, can optionally be
treated as typeless. @xref{Fortran Dialect Options,, Options
Controlling Fortran Dialect}, for information on the
-@samp{-ftypeless-boz} option.
+@option{-ftypeless-boz} option.
Typeless constants have values that depend on the context in which
they are used.
@@ -5126,7 +2491,7 @@ While this might work in some circumstances, it is hard
to predict whether it will continue to work when a program
(that works using this unsafe behavior)
is recompiled using different command-line options or
-a different version of @code{g77}.
+a different version of @command{g77}.
Generally, @code{%LOC()} is safe when used as an argument
to a procedure that makes use of the value of the corresponding
@@ -5134,7 +2499,7 @@ dummy argument only during its activation, and only when
such use is restricted to referencing (reading) the value
of the argument to @code{%LOC()}.
-@emph{Implementation Note:} Currently, @code{g77} passes
+@emph{Implementation Note:} Currently, @command{g77} passes
arguments (those not passed using a construct such as @code{%VAL()})
by reference or descriptor, depending on the type of
the actual argument.
@@ -5145,7 +2510,7 @@ in fact might compile to identical code.
However, @samp{CALL FOO(%VAL(%LOC(I)))} emphatically means
``pass, by value, the address of @samp{I} in memory''.
While @samp{CALL FOO(I)} might use that same approach in a
-particular version of @code{g77}, another version or compiler
+particular version of @command{g77}, another version or compiler
might choose a different implementation, such as copy-in/copy-out,
to effect the desired behavior---and which will therefore not
necessarily compile to the same code as would
@@ -5153,7 +2518,7 @@ necessarily compile to the same code as would
using the same version or compiler.
@xref{Debugging and Interfacing}, for detailed information on
-how this particular version of @code{g77} implements various
+how this particular version of @command{g77} implements various
constructs.
@node Specification Statements
@@ -5177,7 +2542,7 @@ for the relevant aspects of GNU Fortran.)
The @code{NAMELIST} statement, and related I/O constructs, are
supported by the GNU Fortran language in essentially the same
-way as they are by @code{f2c}.
+way as they are by @command{f2c}.
This follows Fortran 90 with the restriction that on @code{NAMELIST}
input, subscripts must have the form
@@ -5261,7 +2626,7 @@ is labeled and a target of one or more labeled @code{DO} loops.
It is expected that this use of @code{END DO} will be removed from
the GNU Fortran language in the future, though it is likely that
-it will long be supported by @code{g77} as a dialect form.
+it will long be supported by @command{g77} as a dialect form.
@end itemize
@node Construct Names
@@ -5442,7 +2807,7 @@ use by the program as a whole, but are themselves not
portable, and should be thoroughly tested each time they
are rebuilt using a new compiler or version of a compiler.
-@emph{Implementation Note:} Currently, @code{g77} passes
+@emph{Implementation Note:} Currently, @command{g77} passes
all arguments either by reference or by descriptor.
Thus, use of @code{%VAL()} tends to be restricted to cases
@@ -5452,7 +2817,7 @@ than Fortran that supports call-by-value semantics.
@xref{Procedures,,Procedures (SUBROUTINE and FUNCTION)},
for detailed information on
-how this particular version of @code{g77} passes arguments
+how this particular version of @command{g77} passes arguments
to procedures.
@node %REF()
@@ -5489,11 +2854,11 @@ pass-by-reference semantics without passing a pointer to
the argument, @var{arg}.
(For example, a copy-in/copy-out implementation.)
-@emph{Implementation Note:} Currently, @code{g77} passes
+@emph{Implementation Note:} Currently, @command{g77} passes
all arguments
(other than variables and arrays of type @code{CHARACTER})
by reference.
-Future versions of, or dialects supported by, @code{g77} might
+Future versions of, or dialects supported by, @command{g77} might
not pass @code{CHARACTER} functions by reference.
Thus, use of @code{%REF()} tends to be restricted to cases
@@ -5502,7 +2867,7 @@ procedure accesses it via a means other than the method
used for Fortran @code{CHARACTER} arguments.
@xref{Procedures,,Procedures (SUBROUTINE and FUNCTION)}, for detailed information on
-how this particular version of @code{g77} passes arguments
+how this particular version of @command{g77} passes arguments
to procedures.
@node %DESCR()
@@ -5539,16 +2904,16 @@ implementation choices are available that preserve the
pass-by-reference semantics without passing a pointer to
the argument, @var{arg}.
(For example, a copy-in/copy-out implementation.)
-And, future versions of @code{g77} might change the
+And, future versions of @command{g77} might change the
way descriptors are implemented, such as passing a
single argument pointing to a record containing the
pointer/length information instead of passing that same
information via two arguments as it currently does.
-@emph{Implementation Note:} Currently, @code{g77} passes
+@emph{Implementation Note:} Currently, @command{g77} passes
all variables and arrays of type @code{CHARACTER}
by descriptor.
-Future versions of, or dialects supported by, @code{g77} might
+Future versions of, or dialects supported by, @command{g77} might
pass @code{CHARACTER} functions by descriptor as well.
Thus, use of @code{%DESCR()} tends to be restricted to cases
@@ -5557,7 +2922,7 @@ procedure accesses it via a means similar to the method
used for Fortran @code{CHARACTER} arguments.
@xref{Procedures,,Procedures (SUBROUTINE and FUNCTION)}, for detailed information on
-how this particular version of @code{g77} passes arguments
+how this particular version of @command{g77} passes arguments
to procedures.
@node Generics and Specifics
@@ -5763,14 +3128,14 @@ above will confirm that:
@itemize @bullet
@item
Digital Semiconductor (``DEC'') Alpha OSF/1, HP-UX 10.0.1, AIX 3.2.5
-@code{f77} compilers all implement @samp{Interp 1}.
+@command{f77} compilers all implement @samp{Interp 1}.
@item
-IRIX 5.3 @code{f77} compiler implements @samp{Interp 2}.
+IRIX 5.3 @command{f77} compiler implements @samp{Interp 2}.
@item
Solaris 2.5, SunOS 4.1.3, DECstation ULTRIX 4.3,
-and IRIX 6.1 @code{f77} compilers all implement @samp{Interp 3}.
+and IRIX 6.1 @command{f77} compilers all implement @samp{Interp 3}.
@end itemize
If you get different results than the above for the stated
@@ -5830,8 +3195,8 @@ thus ``smooshed'' by FORTRAN 77 into a single intrinsic, since
they happened to have the exact same effect in that language
(due to having only one @code{COMPLEX} type).
-@emph{Note:} When @samp{-ff90} is in effect,
-@code{g77} treats @samp{REAL(@var{expr})}, where @var{expr} is of
+@emph{Note:} When @option{-ff90} is in effect,
+@command{g77} treats @samp{REAL(@var{expr})}, where @var{expr} is of
type @code{COMPLEX}, as @samp{REALPART(@var{expr})},
whereas with @samp{-fugly-complex -fno-f90} in effect, it is
treated as @samp{REAL(REALPART(@var{expr}))}.
@@ -5869,7 +3234,7 @@ Fortran 90 extends the @code{CMPLX()} intrinsic by adding
an extra argument used to specify the desired kind of complex
result.
However, this solution is somewhat awkward to use, and
-@code{g77} currently does not support it.
+@command{g77} currently does not support it.
The GNU Fortran language provides a simple way to build a complex
value out of two numbers, with the precise type of the value
@@ -5896,10 +3261,10 @@ The GNU Fortran language includes the MIL-STD 1753 intrinsics
@code{ISHFTC}, @code{MVBITS}, and @code{NOT}.
@node f77/f2c Intrinsics
-@subsection @code{f77}/@code{f2c} Intrinsics
+@subsection @command{f77}/@command{f2c} Intrinsics
The bit-manipulation intrinsics supported by traditional
-@code{f77} and by @code{f2c} are available in the GNU Fortran language.
+@command{f77} and by @command{f2c} are available in the GNU Fortran language.
These include @code{AND}, @code{LSHIFT}, @code{OR}, @code{RSHIFT},
and @code{XOR}.
@@ -5979,7 +3344,7 @@ the requirements of @code{INTENT(IN)} and @code{INTENT(OUT)}.
@ifinfo
(Note that the empty lines appearing in the menu below
are not intentional---they result from a bug in the
-GNU @code{makeinfo} program@dots{}a program that, if it
+GNU @command{makeinfo} program@dots{}a program that, if it
did not exist, would leave this document in far worse shape!)
@end ifinfo
@@ -6067,11 +3432,11 @@ the Fortran 90 features supported by the GNU Fortran language, even if
they are documented elsewhere.
@xref{Characters Lines Sequence,,@asis{Characters, Lines, and Execution Sequence}},
for information on additional fixed source form lexical issues.
-@cindex @samp{-ffree-form}
+@cindex @option{-ffree-form}
Further, the free source form is supported through the
-@samp{-ffree-form} option.
-@cindex @samp{-ff90}
-Other Fortran 90 features can be turned on by the @samp{-ff90} option;
+@option{-ffree-form} option.
+@cindex @option{-ff90}
+Other Fortran 90 features can be turned on by the @option{-ff90} option;
see @ref{Fortran 90}.
For information on the Fortran 90 intrinsics available,
see @ref{Table of Intrinsic Functions}.
@@ -6146,12 +3511,12 @@ CHARACTER (LEN=3) FOO
GNU Fortran supports a variety of features that are not
considered part of the GNU Fortran language itself, but
are representative of various dialects of Fortran that
-@code{g77} supports in whole or in part.
+@command{g77} supports in whole or in part.
Any of the features listed below might be disallowed by
-@code{g77} unless some command-line option is specified.
+@command{g77} unless some command-line option is specified.
Currently, some of the features are accepted using the
-default invocation of @code{g77}, but that might change
+default invocation of @command{g77}, but that might change
in the future.
@emph{Note: This portion of the documentation definitely needs a lot
@@ -6196,12 +3561,12 @@ implementation choices made for the compiler, since those choices
are explicitly left to the implementation by the published Fortran
standards.
GNU Fortran currently tries to be somewhat like a few popular compilers
-(@code{f2c}, Digital (``DEC'') Fortran, and so on), though a cleaner default
+(@command{f2c}, Digital (``DEC'') Fortran, and so on), though a cleaner default
definition along with more
flexibility offered by command-line options is likely to be offered
in version 0.6.
-This section describes how @code{g77} interprets source lines.
+This section describes how @command{g77} interprets source lines.
@menu
* Carriage Returns:: Carriage returns ignored.
@@ -6216,7 +3581,7 @@ This section describes how @code{g77} interprets source lines.
@cindex carriage returns
Carriage returns (@samp{\r}) in source lines are ignored.
-This is somewhat different from @code{f2c}, which seems to treat them as
+This is somewhat different from @command{f2c}, which seems to treat them as
spaces outside character/Hollerith constants, and encodes them as @samp{\r}
inside such constants.
@@ -6228,14 +3593,14 @@ inside such constants.
A source line with a @key{TAB} character anywhere in it is treated as
entirely significant---however long it is---instead of ending in
column 72 (for fixed-form source) or 132 (for free-form source).
-This also is different from @code{f2c}, which encodes tabs as
+This also is different from @command{f2c}, which encodes tabs as
@samp{\t} (the ASCII @key{TAB} character) inside character
and Hollerith constants, but nevertheless seems to treat the column
position as if it had been affected by the canonical tab positioning.
-@code{g77} effectively
+@command{g77} effectively
translates tabs to the appropriate number of spaces (a la the default
-for the UNIX @code{expand} command) before doing any other processing, other
+for the UNIX @command{expand} command) before doing any other processing, other
than (currently) noting whether a tab was found on a line and using this
information to decide how to interpret the length of the line and continued
constants.
@@ -6272,13 +3637,13 @@ interpretation than provided by some other popular compilers
basis of Fortran and the way the Fortran standard expressed fixed
source form).
-@code{g77} might someday offer an option to warn about cases where differences
+@command{g77} might someday offer an option to warn about cases where differences
might be seen as a result of this treatment, and perhaps an option to
specify the alternate behavior as well.
Note that this padding cannot apply to lines that are effectively of
infinite length---such lines are specified using command-line options
-like @samp{-ffixed-line-length-none}, for example.
+like @option{-ffixed-line-length-none}, for example.
@node Long Lines
@subsection Long Lines
@@ -6289,12 +3654,12 @@ like @samp{-ffixed-line-length-none}, for example.
Source lines longer than the applicable length are truncated to that
length.
-Currently, @code{g77} does not warn if the truncated characters are
+Currently, @command{g77} does not warn if the truncated characters are
not spaces, to accommodate existing code written for systems that
treated truncated text as commentary (especially in columns 73 through 80).
@xref{Fortran Dialect Options,,Options Controlling Fortran Dialect},
-for information on the @samp{-ffixed-line-length-@var{n}} option,
+for information on the @option{-ffixed-line-length-@var{n}} option,
which can be used to set the line length applicable to fixed-form
source files.
@@ -6304,7 +3669,7 @@ source files.
@cindex continuation line, ampersand
A @samp{&} in column 1 of fixed-form source denotes an arbitrary-length
-continuation line, imitating the behavior of @code{f2c}.
+continuation line, imitating the behavior of @command{f2c}.
@node Trailing Comment
@section Trailing Comment
@@ -6315,7 +3680,7 @@ continuation line, imitating the behavior of @code{f2c}.
@cindex /*
@cindex !
@cindex exclamation point
-@code{g77} supports use of @samp{/*} to start a trailing
+@command{g77} supports use of @samp{/*} to start a trailing
comment.
In the GNU Fortran language, @samp{!} is used for this purpose.
@@ -6347,7 +3712,7 @@ When treated as a comment line, a line beginning with @samp{D} or
When treated as a normal line, such a line is treated as if
the first character was @key{SPC} (space).
-(Currently, @code{g77} provides no means for treating debug
+(Currently, @command{g77} provides no means for treating debug
lines as normal lines.)
@node Dollar Signs
@@ -6356,7 +3721,7 @@ lines as normal lines.)
@cindex $
Dollar signs (@samp{$}) are allowed in symbol names (after the first character)
-when the @samp{-fdollar-ok} option is specified.
+when the @option{-fdollar-ok} option is specified.
@node Case Sensitivity
@section Case Sensitivity
@@ -6442,7 +3807,7 @@ Allow InitialCaps Only (see Note 2)
@end itemize
@end itemize
-Note 1: @code{g77} eventually will support @code{NAMELIST} in a manner that is
+Note 1: @command{g77} eventually will support @code{NAMELIST} in a manner that is
consistent with these source switches---in the sense that input will be
expected to meet the same requirements as source code in terms
of matching symbol names and keywords (for the exponent letters).
@@ -6581,19 +3946,19 @@ option names that set some of these combinations all at once:
Number 22 is the ``strict'' ANSI FORTRAN 77 model wherein all input
(except comments, character constants, and Hollerith strings) must
be entered in uppercase.
-Use @samp{-fcase-strict-upper} to specify this
+Use @option{-fcase-strict-upper} to specify this
combination.
Number 43 is like Number 22 except all input must be lowercase. Use
-@samp{-fcase-strict-lower} to specify this combination.
+@option{-fcase-strict-lower} to specify this combination.
Number 65 is the ``classic'' ANSI FORTRAN 77 model as implemented on many
non-UNIX machines whereby all the source is translated to uppercase.
-Use @samp{-fcase-upper} to specify this combination.
+Use @option{-fcase-upper} to specify this combination.
Number 66 is the ``canonical'' UNIX model whereby all the source is
translated to lowercase.
-Use @samp{-fcase-lower} to specify this combination.
+Use @option{-fcase-lower} to specify this combination.
There are a few nearly useless combinations:
@@ -6637,7 +4002,7 @@ than comments).
@cindex VXT extensions
@cindex extensions, VXT
-@code{g77} supports certain constructs that
+@command{g77} supports certain constructs that
have different meanings in VXT Fortran than they
do in the GNU Fortran language.
@@ -6652,10 +4017,10 @@ Corporation.)
An extension offered by a Digital Fortran product that also is
offered by several other Fortran products for different kinds of
-systems is probably going to be considered for inclusion in @code{g77}
+systems is probably going to be considered for inclusion in @command{g77}
someday, and is considered a VXT Fortran feature.
-The @samp{-fvxt} option generally specifies that, where
+The @option{-fvxt} option generally specifies that, where
the meaning of a construct is ambiguous (means one thing
in GNU Fortran and another in VXT Fortran), the VXT Fortran
meaning is to be assumed.
@@ -6673,9 +4038,9 @@ meaning is to be assumed.
@cindex octal constants
@cindex constants, octal
-@code{g77} treats double-quote (@samp{"})
+@command{g77} treats double-quote (@samp{"})
as beginning an octal constant of @code{INTEGER(KIND=1)} type
-when the @samp{-fvxt} option is specified.
+when the @option{-fvxt} option is specified.
The form of this octal constant is
@example
@@ -6686,7 +4051,7 @@ The form of this octal constant is
where @var{octal-digits} is a nonempty string of characters in
the set @samp{01234567}.
-For example, the @samp{-fvxt} option permits this:
+For example, the @option{-fvxt} option permits this:
@example
PRINT *, "20
@@ -6714,12 +4079,12 @@ both constructs in the general case, since statements like
@cindex comment character
@cindex characters, comment
-@code{g77} treats an exclamation point (@samp{!}) in column 6 of
+@command{g77} treats an exclamation point (@samp{!}) in column 6 of
a fixed-form source file
as a continuation character rather than
as the beginning of a comment
(as it does in any other column)
-when the @samp{-fvxt} option is specified.
+when the @option{-fvxt} option is specified.
The following program, when run, prints a message indicating
whether it is interpreted according to GNU Fortran (and Fortran 90)
@@ -6745,19 +4110,19 @@ marks a line as a continuation line when it appears in column 6.)
@cindex Fortran 90, compatibility
The GNU Fortran language includes a number of features that are
-part of Fortran 90, even when the @samp{-ff90} option is not specified.
-The features enabled by @samp{-ff90} are intended to be those that,
-when @samp{-ff90} is not specified, would have another
-meaning to @code{g77}---usually meaning something invalid in the
+part of Fortran 90, even when the @option{-ff90} option is not specified.
+The features enabled by @option{-ff90} are intended to be those that,
+when @option{-ff90} is not specified, would have another
+meaning to @command{g77}---usually meaning something invalid in the
GNU Fortran language.
-So, the purpose of @samp{-ff90} is not to specify whether @code{g77} is
+So, the purpose of @option{-ff90} is not to specify whether @command{g77} is
to gratuitously reject Fortran 90 constructs.
-The @samp{-pedantic} option specified with @samp{-fno-f90} is intended
+The @option{-pedantic} option specified with @option{-fno-f90} is intended
to do that, although its implementation is certainly incomplete at
this point.
-When @samp{-ff90} is specified:
+When @option{-ff90} is specified:
@itemize @bullet
@item
@@ -6767,7 +4132,7 @@ is the same type as the real part of @var{expr}.
For example, assuming @samp{Z} is type @code{COMPLEX(KIND=2)},
@samp{REAL(Z)} would return a value of type @code{REAL(KIND=2)},
-not of type @code{REAL(KIND=1)}, since @samp{-ff90} is specified.
+not of type @code{REAL(KIND=1)}, since @option{-ff90} is specified.
@end itemize
@node Pedantic Compilation
@@ -6775,19 +4140,19 @@ not of type @code{REAL(KIND=1)}, since @samp{-ff90} is specified.
@cindex pedantic compilation
@cindex compilation, pedantic
-The @samp{-fpedantic} command-line option specifies that @code{g77}
+The @option{-fpedantic} command-line option specifies that @command{g77}
is to warn about code that is not standard-conforming.
This is useful for finding
-some extensions @code{g77} accepts that other compilers might not accept.
-(Note that the @samp{-pedantic} and @samp{-pedantic-errors} options
-always imply @samp{-fpedantic}.)
+some extensions @command{g77} accepts that other compilers might not accept.
+(Note that the @option{-pedantic} and @option{-pedantic-errors} options
+always imply @option{-fpedantic}.)
-With @samp{-fno-f90} in force, ANSI FORTRAN 77 is used as the standard
+With @option{-fno-f90} in force, ANSI FORTRAN 77 is used as the standard
for conforming code.
-With @samp{-ff90} in force, Fortran 90 is used.
+With @option{-ff90} in force, Fortran 90 is used.
-The constructs for which @code{g77} issues diagnostics when @samp{-fpedantic}
-and @samp{-fno-f90} are in force are:
+The constructs for which @command{g77} issues diagnostics when @option{-fpedantic}
+and @option{-fno-f90} are in force are:
@itemize @bullet
@item
@@ -6901,7 +4266,7 @@ Specification statements following first @code{DATA} statement.
(In the GNU Fortran language, @samp{DATA I/1/} may be followed by @samp{INTEGER J},
but not @samp{INTEGER I}.
-The @samp{-fpedantic} option disallows both of these.)
+The @option{-fpedantic} option disallows both of these.)
@item
Semicolon as statement separator, as in:
@@ -6927,7 +4292,7 @@ Expressions having two arithmetic operators in a row, such
as @samp{X*-Y}.
@end itemize
-If @samp{-fpedantic} is specified along with @samp{-ff90}, the
+If @option{-fpedantic} is specified along with @option{-ff90}, the
following constructs result in diagnostics:
@itemize @bullet
@@ -6942,7 +4307,7 @@ that has an @code{INCLUDE} directive.
@cindex ugly features
@cindex features, ugly
-The @samp{-fugly-*} command-line options determine whether certain
+The @option{-fugly-*} command-line options determine whether certain
features supported by VAX FORTRAN and other such compilers, but considered
too ugly to be in code that can be changed to use safer and/or more
portable constructs, are accepted.
@@ -6950,13 +4315,13 @@ These are humorously referred to as ``distensions'',
extensions that just plain look ugly in the harsh light of day.
@menu
-* Ugly Implicit Argument Conversion:: Disabled via @samp{-fno-ugly-args}.
-* Ugly Assumed-Size Arrays:: Enabled via @samp{-fugly-assumed}.
-* Ugly Null Arguments:: Enabled via @samp{-fugly-comma}.
-* Ugly Complex Part Extraction:: Enabled via @samp{-fugly-complex}.
-* Ugly Conversion of Initializers:: Disabled via @samp{-fno-ugly-init}.
-* Ugly Integer Conversions:: Enabled via @samp{-fugly-logint}.
-* Ugly Assigned Labels:: Enabled via @samp{-fugly-assign}.
+* Ugly Implicit Argument Conversion:: Disabled via @option{-fno-ugly-args}.
+* Ugly Assumed-Size Arrays:: Enabled via @option{-fugly-assumed}.
+* Ugly Null Arguments:: Enabled via @option{-fugly-comma}.
+* Ugly Complex Part Extraction:: Enabled via @option{-fugly-complex}.
+* Ugly Conversion of Initializers:: Disabled via @option{-fno-ugly-init}.
+* Ugly Integer Conversions:: Enabled via @option{-fugly-logint}.
+* Ugly Assigned Labels:: Enabled via @option{-fugly-assign}.
@end menu
@node Ugly Implicit Argument Conversion
@@ -6964,7 +4329,7 @@ extensions that just plain look ugly in the harsh light of day.
@cindex Hollerith constants
@cindex constants, Hollerith
-The @samp{-fno-ugly-args} option disables
+The @option{-fno-ugly-args} option disables
passing typeless and Hollerith constants as actual arguments
in procedure invocations.
For example:
@@ -6987,7 +4352,7 @@ Therefore, they are enabled by default.
@cindex assumed-size arrays
@cindex DIMENSION X(1)
-The @samp{-fugly-assumed} option enables
+The @option{-fugly-assumed} option enables
the treatment of any array with a final dimension specified as @samp{1}
as an assumed-size array, as if @samp{*} had been specified
instead.
@@ -7020,7 +4385,7 @@ arrays in the Fortran community.
treated if @samp{X} is listed as a dummy argument only
@emph{after} the @code{DIMENSION} statement (presumably in
an @code{ENTRY} statement).
-For example, @samp{-fugly-assumed} has no effect on the
+For example, @option{-fugly-assumed} has no effect on the
following program unit:
@example
@@ -7038,16 +4403,16 @@ END
@cindex real part
@cindex imaginary part
-The @samp{-fugly-complex} option enables
+The @option{-fugly-complex} option enables
use of the @code{REAL()} and @code{AIMAG()}
intrinsics with arguments that are
@code{COMPLEX} types other than @code{COMPLEX(KIND=1)}.
-With @samp{-ff90} in effect, these intrinsics return
+With @option{-ff90} in effect, these intrinsics return
the unconverted real and imaginary parts (respectively)
of their argument.
-With @samp{-fno-f90} in effect, these intrinsics convert
+With @option{-fno-f90} in effect, these intrinsics convert
the real and imaginary parts to @code{REAL(KIND=1)}, and return
the result of that conversion.
@@ -7063,10 +4428,10 @@ REAL(REAL(Z))
@noindent
is permitted even when @samp{Z} is @code{COMPLEX(KIND=2)}
-and @samp{-fno-ugly-complex} is in effect, because the
+and @option{-fno-ugly-complex} is in effect, because the
meaning is clear.
-@code{g77} enforces this restriction, unless @samp{-fugly-complex}
+@command{g77} enforces this restriction, unless @option{-fugly-complex}
is specified, in which case the appropriate interpretation is
chosen and no diagnostic is issued.
@@ -7089,7 +4454,7 @@ without conversion.
@cindex null arguments
@cindex arguments, null
-The @samp{-fugly-comma} option enables use of a single trailing comma
+The @option{-fugly-comma} option enables use of a single trailing comma
to mean ``pass an extra trailing null argument''
in a list of actual arguments to an external procedure,
and use of an empty list of arguments to such a procedure
@@ -7110,7 +4475,7 @@ that is syntactically distinct from passing no arguments.
That is, this construct changes the meaning of code that
makes no use of the construct.
-So, with @samp{-fugly-comma} in force, @samp{CALL FOO()}
+So, with @option{-fugly-comma} in force, @samp{CALL FOO()}
and @samp{I = JFUNC()} pass a single null argument, instead
of passing no arguments as required by the Fortran 77 and
90 standards.
@@ -7121,16 +4486,16 @@ called procedure does not expect.
So, in practice, there might be no difference in
the behavior of a program that does @samp{CALL FOO()}
-or @samp{I = JFUNC()} and is compiled with @samp{-fugly-comma}
+or @samp{I = JFUNC()} and is compiled with @option{-fugly-comma}
in force as compared to its behavior when compiled
-with the default, @samp{-fno-ugly-comma}, in force,
+with the default, @option{-fno-ugly-comma}, in force,
assuming @samp{FOO} and @samp{JFUNC} do not expect any
arguments to be passed.
@node Ugly Conversion of Initializers
@subsection Ugly Conversion of Initializers
-The constructs disabled by @samp{-fno-ugly-init} are:
+The constructs disabled by @option{-fno-ugly-init} are:
@itemize @bullet
@cindex Hollerith constants
@@ -7142,7 +4507,7 @@ constants---that is, @code{DATA} and @code{PARAMETER} statements, plus
type-declaration statements specifying initial values.
Here are some sample initializations that are disabled by the
-@samp{-fno-ugly-init} option:
+@option{-fno-ugly-init} option:
@example
PARAMETER (VAL='9A304FFE'X)
@@ -7157,7 +4522,7 @@ In the same contexts as above, use of character constants to initialize
numeric items and vice versa (one constant per item).
Here are more sample initializations that are disabled by the
-@samp{-fno-ugly-init} option:
+@option{-fno-ugly-init} option:
@example
INTEGER IA
@@ -7175,7 +4540,7 @@ are treated as assignments to known types (the dummy
arguments, in these cases).
Here are sample statements that are disabled by the
-@samp{-fno-ugly-init} option:
+@option{-fno-ugly-init} option:
@example
IVAR = 4HABCD
@@ -7192,7 +4557,7 @@ Therefore, they are enabled by default.
@node Ugly Integer Conversions
@subsection Ugly Integer Conversions
-The constructs enabled via @samp{-fugly-logint} are:
+The constructs enabled via @option{-fugly-logint} are:
@itemize @bullet
@item
@@ -7227,7 +4592,7 @@ different encodings.
@cindex assigned labels
@cindex pointers
-The @samp{-fugly-assign} option forces @code{g77} to use the
+The @option{-fugly-assign} option forces @command{g77} to use the
same storage for assigned labels as it would for a normal
assignment to the same variable.
@@ -7239,7 +4604,7 @@ ASSIGN 10 TO I
@end example
@noindent
-Normally, for portability and improved diagnostics, @code{g77}
+Normally, for portability and improved diagnostics, @command{g77}
reserves distinct storage for a ``sibling'' of @samp{I}, used
only for @code{ASSIGN} statements to that variable (along with
the corresponding assigned-@code{GOTO} and assigned-@code{FORMAT}-I/O
@@ -7258,26 +4623,26 @@ GOTO J
@end example
@noindent
-Such code doesn't work under @code{g77} unless @samp{-fugly-assign}
+Such code doesn't work under @command{g77} unless @option{-fugly-assign}
is specified on the command-line, ensuring that the value of @code{I}
-referenced in the second line is whatever value @code{g77} uses
+referenced in the second line is whatever value @command{g77} uses
to designate statement label @samp{10}, so the value may be
copied into the @samp{ISTATE} array, later retrieved into a
variable of the appropriate type (@samp{J}), and used as the target of
an assigned-@code{GOTO} statement.
@emph{Note:} To avoid subtle program bugs,
-when @samp{-fugly-assign} is specified,
-@code{g77} requires the type of variables
+when @option{-fugly-assign} is specified,
+@command{g77} requires the type of variables
specified in assigned-label contexts
@emph{must} be the same type returned by @code{%LOC()}.
On many systems, this type is effectively the same
as @code{INTEGER(KIND=1)}, while, on others, it is
effectively the same as @code{INTEGER(KIND=2)}.
-Do @emph{not} depend on @code{g77} actually writing valid pointers
+Do @emph{not} depend on @command{g77} actually writing valid pointers
to these variables, however.
-While @code{g77} currently chooses that implementation, it might
+While @command{g77} currently chooses that implementation, it might
be changed in the future.
@xref{Assigned Statement Labels,,Assigned Statement Labels (ASSIGN and GOTO)},
@@ -7286,10 +4651,10 @@ for implementation details on assigned-statement labels.
@node Compiler
@chapter The GNU Fortran Compiler
-The GNU Fortran compiler, @code{g77}, supports programs written
+The GNU Fortran compiler, @command{g77}, supports programs written
in the GNU Fortran language and in some other dialects of Fortran.
-Some aspects of how @code{g77} works are universal regardless
+Some aspects of how @command{g77} works are universal regardless
of dialect, and yet are not properly part of the GNU Fortran
language itself.
These are described below.
@@ -7310,7 +4675,7 @@ of work!}
@cindex limits, compiler
@cindex compiler limits
-@code{g77}, as with GNU tools in general, imposes few arbitrary restrictions
+@command{g77}, as with GNU tools in general, imposes few arbitrary restrictions
on lengths of identifiers, number of continuation lines, number of external
symbols in a program, and so on.
@@ -7321,13 +4686,13 @@ symbols in a program, and so on.
@cindex limits, continuation lines
@cindex limits, lengths of names
For example, some other Fortran compiler have an option
-(such as @samp{-Nl@var{x}}) to increase the limit on the
+(such as @option{-Nl@var{x}}) to increase the limit on the
number of continuation lines.
Also, some Fortran compilation systems have an option
-(such as @samp{-Nx@var{x}}) to increase the limit on the
+(such as @option{-Nx@var{x}}) to increase the limit on the
number of external symbols.
-@code{g77}, @code{gcc}, and GNU @code{ld} (the GNU linker) have
+@command{g77}, @command{gcc}, and GNU @command{ld} (the GNU linker) have
no equivalent options, since they do not impose arbitrary
limits in these areas.
@@ -7337,7 +4702,7 @@ limits in these areas.
@cindex maximum number of dimensions
@cindex limits, rank
@cindex limits, array dimensions
-@code{g77} does currently limit the number of dimensions in an array
+@command{g77} does currently limit the number of dimensions in an array
to the same degree as do the Fortran standards---seven (7).
This restriction might be lifted in a future version.
@@ -7347,12 +4712,12 @@ This restriction might be lifted in a future version.
@cindex wraparound
As a portable Fortran implementation,
-@code{g77} offers its users direct access to,
+@command{g77} offers its users direct access to,
and otherwise depends upon,
the underlying facilities of the system
-used to build @code{g77},
-the system on which @code{g77} itself is used to compile programs,
-and the system on which the @code{g77}-compiled program is actually run.
+used to build @command{g77},
+the system on which @command{g77} itself is used to compile programs,
+and the system on which the @command{g77}-compiled program is actually run.
(For most users, the three systems are of the same
type---combination of operating environment and hardware---often
the same physical system.)
@@ -7364,12 +4729,12 @@ These limits vary from system to system.
Even when such limits might be well beyond the
possibility of being encountered on a particular system,
-the @code{g77} run-time environment
+the @command{g77} run-time environment
has certain built-in limits,
usually, but not always, stemming from intrinsics
with inherently limited interfaces.
-Currently, the @code{g77} run-time environment
+Currently, the @command{g77} run-time environment
does not generally offer a less-limiting environment
by augmenting the underlying system's own environment.
@@ -7380,8 +4745,8 @@ about the run-time environment---assumptions that
prove to be false for some particular environments.
The GNU Fortran language,
-the @code{g77} compiler and run-time environment,
-and the @code{g77} documentation
+the @command{g77} compiler and run-time environment,
+and the @command{g77} documentation
do not yet offer comprehensive portable work-arounds for such limits,
though programmers should be able to
find their own in specific instances.
@@ -7435,7 +4800,7 @@ on at least some systems:
@cindex Y2K compliance
@cindex Year 2000 compliance
-While the @code{g77} compiler itself is believed to
+While the @command{g77} compiler itself is believed to
be Year-2000 (Y2K) compliant,
some intrinsics are not,
and, potentially, some underlying systems are not,
@@ -7469,7 +4834,7 @@ on at least some systems:
@cindex G77_date_y2kbuggy_0
@cindex G77_vxtidate_y2kbuggy_0
The @code{libg2c} library
-shipped with any @code{g77} that warns
+shipped with any @command{g77} that warns
about invocation of a non-Y2K-compliant intrinsic
has renamed the @code{EXTERNAL} procedure names
of those intrinsics.
@@ -7498,14 +4863,14 @@ CALL VXTIDATE_Y2KBUG (MM, DD, YY)
(Note that the @code{EXTERNAL} statement
is not actually required,
since the modified names are not recognized as intrinsics
-by the current version of @code{g77}.
+by the current version of @command{g77}.
But it is shown in this specific case,
for purposes of illustration.)
The renaming of @code{EXTERNAL} procedure names of these intrinsics
causes unresolved references at link time.
For example, @samp{EXTERNAL DATE; CALL DATE(STR)}
-is normally compiled by @code{g77}
+is normally compiled by @command{g77}
as, in C, @samp{date_(&str, 20);}.
This, in turn, links to the @code{date_} procedure
in the @code{libE77} portion of @code{libg2c},
@@ -7513,13 +4878,13 @@ which purposely calls a nonexistent procedure
named @code{G77_date_y2kbuggy_0}.
The resulting link-time error is designed, via this name,
to encourage the programmer to look up the
-index entries to this portion of the @code{g77} documentation.
+index entries to this portion of the @command{g77} documentation.
Generally, we recommend that the @code{EXTERNAL} method
of invoking procedures in @code{libg2c}
@emph{not} be used.
When used, some of the correctness checking
-normally performed by @code{g77}
+normally performed by @command{g77}
is skipped.
In particular, it is probably better to use the
@@ -7527,23 +4892,23 @@ In particular, it is probably better to use the
non-Y2K-compliant procedures,
so anyone compiling the code
can quickly notice the potential Y2K problems
-(via the warnings printing by @code{g77})
+(via the warnings printing by @command{g77})
without having to even look at the code itself.
If there are problems linking @code{libg2c}
-to code compiled by @code{g77}
+to code compiled by @command{g77}
that involve the string @samp{y2kbug},
and these are not explained above,
that probably indicates
that a version of @code{libg2c}
-older than @code{g77}
+older than @command{g77}
is being linked to,
or that the new library is being linked
-to code compiled by an older version of @code{g77}.
+to code compiled by an older version of @command{g77}.
That's because, as of the version that warns about
non-Y2K-compliant intrinsic invocation,
-@code{g77} references the @code{libg2c} implementations
+@command{g77} references the @code{libg2c} implementations
of those intrinsics
using new names, containing the string @samp{y2kbug}.
@@ -7561,7 +4926,7 @@ to @code{G77_vxtidate_0}.
(The new library calls it @code{G77_vxtidate_y2kbug_0}.)
The proper fix for the above problems
-is to obtain the latest release of @code{g77}
+is to obtain the latest release of @command{g77}
and related products
(including @code{libg2c})
and install them on all systems,
@@ -7574,19 +4939,19 @@ In this case, however, it seems more important to highlight
potential Y2K problems
than to ease the transition
of potentially non-Y2K-compliant code
-to new versions of @code{g77} and @code{libg2c}.)
+to new versions of @command{g77} and @code{libg2c}.)
@node Array Size
@subsection Array Size
@cindex limits, array size
@cindex array size
-Currently, @code{g77} uses the default @code{INTEGER} type
+Currently, @command{g77} uses the default @code{INTEGER} type
for array indexes,
which limits the sizes of single-dimension arrays
on systems offering a larger address space
than can be addressed by that type.
-(That @code{g77} puts all arrays in memory
+(That @command{g77} puts all arrays in memory
could be considered another limitation---it
could use large temporary files---but that decision
is left to the programmer as an implementation choice
@@ -7611,22 +4976,22 @@ on the same system.
@cindex multi-dimension arrays
@cindex arrays, dimensioning
Whether large multiple-dimension arrays are reliably supported
-depends mostly on the @code{gcc} back end (code generator)
-used by @code{g77}, and has not yet been fully investigated.
+depends mostly on the @command{gcc} back end (code generator)
+used by @command{g77}, and has not yet been fully investigated.
@node Character-variable Length
@subsection Character-variable Length
@cindex limits, on character-variable length
@cindex character-variable length
-Currently, @code{g77} uses the default @code{INTEGER} type
+Currently, @command{g77} uses the default @code{INTEGER} type
for the lengths of @code{CHARACTER} variables
and array elements.
This means that, for example,
a system with a 64-bit address space
and a 32-bit default @code{INTEGER} type
-does not, under @code{g77},
+does not, under @command{g77},
support a @code{CHARACTER*@var{n}} declaration
where @var{n} is greater than 2147483647.
@@ -7673,7 +5038,7 @@ element of the @code{COMPLEX(KIND=1)} variable.
placed on the implementation, nor is the relationship of storage sizes of
these types to the @code{CHARACTER} type specified, by the standard.)
-@code{g77} follows the above requirements, warning when compiling
+@command{g77} follows the above requirements, warning when compiling
a program requires placement of items in memory that contradict the
requirements of the target architecture.
(For example, a program can require placement of a @code{REAL(KIND=2)}
@@ -7683,22 +5048,22 @@ On some target architectures, using the canonical
mapping of Fortran types to underlying architectural types, such
placement is prohibited by the machine definition or
the Application Binary Interface (ABI) in force for
-the configuration defined for building @code{gcc} and @code{g77}.
-@code{g77} warns about such
+the configuration defined for building @command{gcc} and @command{g77}.
+@command{g77} warns about such
situations when it encounters them.)
-@code{g77} follows consistent rules for configuring the mapping between Fortran
+@command{g77} follows consistent rules for configuring the mapping between Fortran
types, including the @samp{*@var{n}} notation, and the underlying architectural
types as accessed by a similarly-configured applicable version of the
-@code{gcc} compiler.
+@command{gcc} compiler.
These rules offer a widely portable, consistent Fortran/C
environment, although they might well conflict with the expectations of
users of Fortran compilers designed and written for particular
architectures.
These rules are based on the configuration that is in force for the
-version of @code{gcc} built in the same release as @code{g77} (and
-which was therefore used to build both the @code{g77} compiler
+version of @command{gcc} built in the same release as @command{g77} (and
+which was therefore used to build both the @command{g77} compiler
components and the @code{libg2c} run-time library):
@table @code
@@ -7723,7 +5088,7 @@ an @code{int} or a @code{long int}.
@cindex LOGICAL(KIND=1) type
@cindex types, LOGICAL(KIND=1)
@item LOGICAL(KIND=1)
-Same @code{gcc} type as @code{INTEGER(KIND=1)}.
+Same @command{gcc} type as @code{INTEGER(KIND=1)}.
@cindex INTEGER(KIND=2) type
@cindex types, INTEGER(KIND=2)
@@ -7735,17 +5100,17 @@ a @code{long int} or a @code{long long int}.
@cindex LOGICAL(KIND=2) type
@cindex types, LOGICAL(KIND=2)
@item LOGICAL(KIND=2)
-Same @code{gcc} type as @code{INTEGER(KIND=2)}.
+Same @command{gcc} type as @code{INTEGER(KIND=2)}.
@cindex INTEGER(KIND=3) type
@cindex types, INTEGER(KIND=3)
@item INTEGER(KIND=3)
-Same @code{gcc} type as signed @code{char}.
+Same @command{gcc} type as signed @code{char}.
@cindex LOGICAL(KIND=3) type
@cindex types, LOGICAL(KIND=3)
@item LOGICAL(KIND=3)
-Same @code{gcc} type as @code{INTEGER(KIND=3)}.
+Same @command{gcc} type as @code{INTEGER(KIND=3)}.
@cindex INTEGER(KIND=6) type
@cindex types, INTEGER(KIND=6)
@@ -7757,7 +5122,7 @@ a @code{short}.
@cindex LOGICAL(KIND=6) type
@cindex types, LOGICAL(KIND=6)
@item LOGICAL(KIND=6)
-Same @code{gcc} type as @code{INTEGER(KIND=6)}.
+Same @command{gcc} type as @code{INTEGER(KIND=6)}.
@cindex COMPLEX(KIND=1) type
@cindex types, COMPLEX(KIND=1)
@@ -7773,8 +5138,8 @@ Two @code{REAL(KIND=2)} scalars.
@cindex *@var{n} notation
@item @var{numeric-type}*@var{n}
(Where @var{numeric-type} is any type other than @code{CHARACTER}.)
-Same as whatever @code{gcc} type occupies @var{n} times the storage
-space of a @code{gcc} @code{char} item.
+Same as whatever @command{gcc} type occupies @var{n} times the storage
+space of a @command{gcc} @code{char} item.
@cindex DOUBLE PRECISION type
@cindex types, DOUBLE PRECISION
@@ -7788,14 +5153,14 @@ Same as @code{COMPLEX(KIND=2)}.
@end table
Note that the above are proposed correspondences and might change
-in future versions of @code{g77}---avoid writing code depending
+in future versions of @command{g77}---avoid writing code depending
on them.
-Other types supported by @code{g77}
+Other types supported by @command{g77}
are derived from gcc types such as @code{char}, @code{short},
@code{int}, @code{long int}, @code{long long int}, @code{long double},
and so on.
-That is, whatever types @code{gcc} already supports, @code{g77} supports
+That is, whatever types @command{gcc} already supports, @command{g77} supports
now or probably will support in a future version.
The rules for the @samp{@var{numeric-type}*@var{n}} notation
apply to these types,
@@ -7807,7 +5172,7 @@ assigned in a way that encourages clarity, consistency, and portability.
@cindex constants
@cindex types, constants
-@code{g77} strictly assigns types to @emph{all} constants not
+@command{g77} strictly assigns types to @emph{all} constants not
documented as ``typeless'' (typeless constants including @samp{'1'Z},
for example).
Many other Fortran compilers attempt to assign types to typed constants
@@ -7816,9 +5181,9 @@ This results in hard-to-find bugs, nonportable
code, and is not in the spirit (though it strictly follows the letter)
of the 77 and 90 standards.
-@code{g77} might offer, in a future release, explicit constructs by
+@command{g77} might offer, in a future release, explicit constructs by
which a wider variety of typeless constants may be specified, and/or
-user-requested warnings indicating places where @code{g77} might differ
+user-requested warnings indicating places where @command{g77} might differ
from how other compilers assign types to constants.
@xref{Context-Sensitive Constants}, for more information on this issue.
@@ -7826,7 +5191,7 @@ from how other compilers assign types to constants.
@node Compiler Intrinsics
@section Compiler Intrinsics
-@code{g77} offers an ever-widening set of intrinsics.
+@command{g77} offers an ever-widening set of intrinsics.
Currently these all are procedures (functions and subroutines).
Some of these intrinsics are unimplemented, but their names reserved
@@ -7835,7 +5200,7 @@ Others are implemented as part of the GNU Fortran language, while
yet others are provided for compatibility with other dialects of
Fortran but are not part of the GNU Fortran language.
-To manage these distinctions, @code{g77} provides intrinsic @emph{groups},
+To manage these distinctions, @command{g77} provides intrinsic @emph{groups},
a facility that is simply an extension of the intrinsic groups provided
by the GNU Fortran language.
@@ -7906,8 +5271,8 @@ EXTERNAL FOO
@end example
@noindent
-So, deleting a group tells @code{g77} to pretend as though the intrinsics in
-that group do not exist at all, whereas disabling it tells @code{g77} to
+So, deleting a group tells @command{g77} to pretend as though the intrinsics in
+that group do not exist at all, whereas disabling it tells @command{g77} to
recognize them as (disabled) intrinsics in intrinsic-like contexts.
Hiding a group is like enabling it, but the intrinsic must be first
@@ -7946,9 +5311,9 @@ have intended side effects).
Intrinsics the GNU Fortran language supports that are extensions to
the Fortran standards (77 and 90).
-@cindex @code{f2c} intrinsics group
+@cindex @command{f2c} intrinsics group
@item f2c
-Intrinsics supported by AT&T's @code{f2c} converter and/or @code{libf2c}.
+Intrinsics supported by AT&T's @command{f2c} converter and/or @code{libf2c}.
@cindex @code{f90} intrinsics group
@item f90
@@ -7972,7 +5337,7 @@ VAX/VMS FORTRAN (current as of v4) intrinsics.
@cindex intrinsics, others
@cindex other intrinsics
-@code{g77} supports intrinsics other than those in the GNU Fortran
+@command{g77} supports intrinsics other than those in the GNU Fortran
language proper.
This set of intrinsics is described below.
@@ -8027,30 +5392,30 @@ like how to pass parameters, return arguments, and lay out
incorrect results produced by the program (and that assumes
these errors are detected, which is not always the case).
-Normally, @code{g77} generates code that is
+Normally, @command{g77} generates code that is
object-compatible with code generated by a version of
-@code{f2c} configured (with, for example, @file{f2c.h} definitions)
-to be generally compatible with @code{g77} as built by @code{gcc}.
-(Normally, @code{f2c} will, by default, conform to the appropriate
+@command{f2c} configured (with, for example, @file{f2c.h} definitions)
+to be generally compatible with @command{g77} as built by @command{gcc}.
+(Normally, @command{f2c} will, by default, conform to the appropriate
configuration, but it is possible that older or perhaps even newer
-versions of @code{f2c}, or versions having certain configuration changes
-to @code{f2c} internals, will produce object files that are
-incompatible with @code{g77}.)
+versions of @command{f2c}, or versions having certain configuration changes
+to @command{f2c} internals, will produce object files that are
+incompatible with @command{g77}.)
For example, a Fortran string subroutine
argument will become two arguments on the C side: a @code{char *}
and an @code{int} length.
Much of this compatibility results from the fact that
-@code{g77} uses the same run-time library,
-@code{libf2c}, used by @code{f2c},
-though @code{g77} gives its version the name @code{libg2c}
+@command{g77} uses the same run-time library,
+@code{libf2c}, used by @command{f2c},
+though @command{g77} gives its version the name @code{libg2c}
so as to avoid conflicts when linking,
installing them in the same directories,
and so on.
Other compilers might or might not generate code that
-is object-compatible with @code{libg2c} and current @code{g77},
+is object-compatible with @code{libg2c} and current @command{g77},
and some might offer such compatibility only when explicitly
selected via a command-line option to the compiler.
@@ -8063,78 +5428,78 @@ of work!}
@end menu
@node Dropping f2c Compatibility
-@section Dropping @code{f2c} Compatibility
+@section Dropping @command{f2c} Compatibility
-Specifying @samp{-fno-f2c} allows @code{g77} to generate, in
+Specifying @option{-fno-f2c} allows @command{g77} to generate, in
some cases, faster code, by not needing to allow to the possibility
-of linking with code compiled by @code{f2c}.
+of linking with code compiled by @command{f2c}.
For example, this affects how @code{REAL(KIND=1)},
@code{COMPLEX(KIND=1)}, and @code{COMPLEX(KIND=2)} functions are called.
-With @samp{-fno-f2c}, they are
-compiled as returning the appropriate @code{gcc} type
+With @option{-fno-f2c}, they are
+compiled as returning the appropriate @command{gcc} type
(@code{float}, @code{__complex__ float}, @code{__complex__ double},
in many configurations).
-With @samp{-ff2c} in force, they
+With @option{-ff2c} in force, they
are compiled differently (with perhaps slower run-time performance)
-to accommodate the restrictions inherent in @code{f2c}'s use of K&R
+to accommodate the restrictions inherent in @command{f2c}'s use of K&R
C as an intermediate language---@code{REAL(KIND=1)} functions
return C's @code{double} type, while @code{COMPLEX} functions return
@code{void} and use an extra argument pointing to a place for the functions to
return their values.
-It is possible that, in some cases, leaving @samp{-ff2c} in force
-might produce faster code than using @samp{-fno-f2c}.
+It is possible that, in some cases, leaving @option{-ff2c} in force
+might produce faster code than using @option{-fno-f2c}.
Feel free to experiment, but remember to experiment with changing the way
@emph{entire programs and their Fortran libraries are compiled} at
a time, since this sort of experimentation affects the interface
of code generated for a Fortran source file---that is, it affects
object compatibility.
-Note that @code{f2c} compatibility is a fairly static target to achieve,
-though not necessarily perfectly so, since, like @code{g77}, it is
+Note that @command{f2c} compatibility is a fairly static target to achieve,
+though not necessarily perfectly so, since, like @command{g77}, it is
still being improved.
-However, specifying @samp{-fno-f2c} causes @code{g77}
+However, specifying @option{-fno-f2c} causes @command{g77}
to generate code that will probably be incompatible with code
-generated by future versions of @code{g77} when the same option
+generated by future versions of @command{g77} when the same option
is in force.
You should make sure you are always able to recompile complete
-programs from source code when upgrading to new versions of @code{g77}
-or @code{f2c}, especially when using options such as @samp{-fno-f2c}.
+programs from source code when upgrading to new versions of @command{g77}
+or @command{f2c}, especially when using options such as @option{-fno-f2c}.
-Therefore, if you are using @code{g77} to compile libraries and other
+Therefore, if you are using @command{g77} to compile libraries and other
object files for possible future use and you don't want to require
-recompilation for future use with subsequent versions of @code{g77},
-you might want to stick with @code{f2c} compatibility for now, and
+recompilation for future use with subsequent versions of @command{g77},
+you might want to stick with @command{f2c} compatibility for now, and
carefully watch for any announcements about changes to the
-@code{f2c}/@code{libf2c} interface that might affect existing programs
+@command{f2c}/@code{libf2c} interface that might affect existing programs
(thus requiring recompilation).
-It is probable that a future version of @code{g77} will not,
-by default, generate object files compatible with @code{f2c},
+It is probable that a future version of @command{g77} will not,
+by default, generate object files compatible with @command{f2c},
and that version probably would no longer use @code{libf2c}.
If you expect to depend on this compatibility in the
long term, use the options @samp{-ff2c -ff2c-library} when compiling
all of the applicable code.
-This should cause future versions of @code{g77} either to produce
+This should cause future versions of @command{g77} either to produce
compatible code (at the expense of the availability of some features and
performance), or at the very least, to produce diagnostics.
-(The library @code{g77} produces will no longer be named @file{libg2c}
+(The library @command{g77} produces will no longer be named @file{libg2c}
when it is no longer generally compatible with @file{libf2c}.
It will likely be referred to, and, if installed as a distinct
library, named @code{libg77}, or some other as-yet-unused name.)
@node Compilers Other Than f2c
-@section Compilers Other Than @code{f2c}
+@section Compilers Other Than @command{f2c}
-On systems with Fortran compilers other than @code{f2c} and @code{g77},
-code compiled by @code{g77} is not expected to work
+On systems with Fortran compilers other than @command{f2c} and @command{g77},
+code compiled by @command{g77} is not expected to work
well with code compiled by the native compiler.
-(This is true for @code{f2c}-compiled objects as well.)
+(This is true for @command{f2c}-compiled objects as well.)
Libraries compiled with the native compiler probably will have
-to be recompiled with @code{g77} to be used with @code{g77}-compiled code.
+to be recompiled with @command{g77} to be used with @command{g77}-compiled code.
Reasons for such incompatibilities include:
@@ -8143,7 +5508,7 @@ Reasons for such incompatibilities include:
There might be differences in the way names of Fortran procedures
are translated for use in the system's object-file format.
For example, the statement @samp{CALL FOO} might be compiled
-by @code{g77} to call a procedure the linker @code{ld} sees
+by @command{g77} to call a procedure the linker @command{ld} sees
given the name @samp{_foo_}, while the apparently corresponding
statement @samp{SUBROUTINE FOO} might be compiled by the
native compiler to define the linker-visible name @samp{_foo},
@@ -8153,7 +5518,7 @@ or @samp{_FOO_}, and so on.
There might be subtle type mismatches which cause subroutine arguments
and function return values to get corrupted.
-This is why simply getting @code{g77} to
+This is why simply getting @command{g77} to
transform procedure names the same way a native
compiler does is not usually a good idea---unless
some effort has been made to ensure that, aside
@@ -8188,8 +5553,8 @@ of work!}
@cindex C, linking with
@cindex C++, linking with
@cindex linking with C
-The following discussion assumes that you are running @code{g77} in @code{f2c}
-compatibility mode, i.e.@: not using @samp{-fno-f2c}.
+The following discussion assumes that you are running @command{g77} in @command{f2c}
+compatibility mode, i.e.@: not using @option{-fno-f2c}.
It provides some
advice about quick and simple techniques for linking Fortran and C (or
C++), the most common requirement.
@@ -8197,15 +5562,15 @@ For the full story consult the
description of code generation.
@xref{Debugging and Interfacing}.
-When linking Fortran and C, it's usually best to use @code{g77} to do
+When linking Fortran and C, it's usually best to use @command{g77} to do
the linking so that the correct libraries are included (including the
maths one).
If you're linking with C++ you will want to add
-@samp{-lstdc++}, @samp{-lg++} or whatever.
+@option{-lstdc++}, @option{-lg++} or whatever.
If you need to use another
-driver program (or @code{ld} directly),
+driver program (or @command{ld} directly),
you can find out what linkage
-options @code{g77} passes by running @samp{g77 -v}.
+options @command{g77} passes by running @samp{g77 -v}.
@menu
* C Interfacing Tools::
@@ -8220,63 +5585,63 @@ options @code{g77} passes by running @samp{g77 -v}.
@pindex f2c
@cindex cfortran.h
@cindex Netlib
-Even if you don't actually use it as a compiler, @code{f2c} from
+Even if you don't actually use it as a compiler, @command{f2c} from
@uref{ftp://ftp.netlib.org/f2c/src}, can be a useful tool when you're
interfacing (linking) Fortran and C@.
-@xref{f2c Skeletons and Prototypes,,Generating Skeletons and Prototypes with @code{f2c}}.
+@xref{f2c Skeletons and Prototypes,,Generating Skeletons and Prototypes with @command{f2c}}.
-To use @code{f2c} for this purpose you only need retrieve and
+To use @command{f2c} for this purpose you only need retrieve and
build the @file{src} directory from the distribution, consult the
@file{README} instructions there for machine-specifics, and install the
-@code{f2c} program on your path.
+@command{f2c} program on your path.
Something else that might be useful is @samp{cfortran.h} from
-@uref{ftp://zebra/desy.de/cfortran}.
+@uref{ftp://zebra.desy.de/cfortran}.
This is a fairly general tool which
can be used to generate interfaces for calling in both directions
between Fortran and C@.
-It can be used in @code{f2c} mode with
-@code{g77}---consult its documentation for details.
+It can be used in @command{f2c} mode with
+@command{g77}---consult its documentation for details.
@node C Access to Type Information
@subsection Accessing Type Information in C
@cindex types, Fortran/C
Generally, C code written to link with
-@code{g77} code---calling and/or being
+@command{g77} code---calling and/or being
called from Fortran---should @samp{#include <g2c.h>} to define the C
versions of the Fortran types.
Don't assume Fortran @code{INTEGER} types
correspond to C @code{int}s, for instance; instead, declare them as
@code{integer}, a type defined by @file{g2c.h}.
-@file{g2c.h} is installed where @code{gcc} will find it by
-default, assuming you use a copy of @code{gcc} compatible with
-@code{g77}, probably built at the same time as @code{g77}.
+@file{g2c.h} is installed where @command{gcc} will find it by
+default, assuming you use a copy of @command{gcc} compatible with
+@command{g77}, probably built at the same time as @command{g77}.
@node f2c Skeletons and Prototypes
-@subsection Generating Skeletons and Prototypes with @code{f2c}
+@subsection Generating Skeletons and Prototypes with @command{f2c}
@pindex f2c
@cindex -fno-second-underscore
-A simple and foolproof way to write @code{g77}-callable C routines---e.g.@: to
+A simple and foolproof way to write @command{g77}-callable C routines---e.g.@: to
interface with an existing library---is to write a file (named, for
example, @file{fred.f}) of dummy Fortran
skeletons comprising just the declaration of the routine(s) and dummy
arguments plus @code{END} statements.
-Then run @code{f2c} on file @file{fred.f} to produce @file{fred.c}
+Then run @command{f2c} on file @file{fred.f} to produce @file{fred.c}
into which you can edit
useful code, confident the calling sequence is correct, at least.
(There are some errors otherwise commonly made in generating C
-interfaces with @code{f2c} conventions,
+interfaces with @command{f2c} conventions,
such as not using @code{doublereal}
as the return type of a @code{REAL} @code{FUNCTION}.)
@pindex ftnchek
-@code{f2c} also can help with calling Fortran from C, using its
-@samp{-P} option to generate C prototypes appropriate for calling the
+@command{f2c} also can help with calling Fortran from C, using its
+@option{-P} option to generate C prototypes appropriate for calling the
Fortran.@footnote{The files generated like this can also be used for
inter-unit consistency checking of dummy and actual arguments, although
-the @code{ftnchek} tool from @uref{ftp://ftp.netlib.org/fortran}
+the @command{ftnchek} tool from @uref{ftp://ftp.netlib.org/fortran}
or @uref{ftp://ftp.dsm.fordham.edu} is
probably better for this purpose.}
If the Fortran code containing any
@@ -8287,20 +5652,20 @@ prototype information.
the Fortran routines to make sure you get it right.
@xref{Arrays,,Arrays (DIMENSION)}, for information on the differences
-between the way Fortran (including compilers like @code{g77}) and
+between the way Fortran (including compilers like @command{g77}) and
C handle arrays.
@node C++ Considerations
@subsection C++ Considerations
@cindex C++
-@code{f2c} can be used to generate suitable code for compilation with a
-C++ system using the @samp{-C++} option.
-The important thing about linking @code{g77}-compiled
-code with C++ is that the prototypes for the @code{g77}
+@command{f2c} can be used to generate suitable code for compilation with a
+C++ system using the @option{-C++} option.
+The important thing about linking @command{g77}-compiled
+code with C++ is that the prototypes for the @command{g77}
routines must specify C linkage to avoid name mangling.
So, use an @samp{extern "C"} declaration.
-@code{f2c}'s @samp{-C++} option will take care
+@command{f2c}'s @option{-C++} option will take care
of this when generating skeletons or prototype files as above, and also
avoid clashes with C++ reserved words in addition to those in C@.
@@ -8316,17 +5681,17 @@ it shouldn't be necessary
to use a Fortran main program unit to ensure the
runtime---specifically the I/O system---is initialized.
-However, to use the @code{g77} intrinsics @code{GETARG} and @code{IARGC},
+However, to use the @command{g77} intrinsics @code{GETARG} and @code{IARGC},
either the @code{main} routine from the @file{libg2c} library must be used,
or the @code{f_setarg} routine
-(new as of @code{egcs} version 1.1 and @code{g77} version 0.5.23)
+(new as of @code{egcs} version 1.1 and @command{g77} version 0.5.23)
must be called with the appropriate @code{argc} and @code{argv} arguments
prior to the program calling @code{GETARG} or @code{IARGC}.
To provide more flexibility for mixed-language programming
-involving @code{g77} while allowing for shared libraries,
-as of @code{egcs} version 1.1 and @code{g77} version 0.5.23,
-@code{g77}'s @code{main} routine in @code{libg2c}
+involving @command{g77} while allowing for shared libraries,
+as of @code{egcs} version 1.1 and @command{g77} version 0.5.23,
+@command{g77}'s @code{main} routine in @code{libg2c}
does the following, in order:
@enumerate
@@ -8352,7 +5717,7 @@ as all I/O functions in @code{libf2c}
are believed to call @code{f_init} automatically,
if necessary.
-(A future version of @code{g77} might skip this explicit step,
+(A future version of @command{g77} might skip this explicit step,
to speed up normal exit of a program.)
@item
@@ -8384,7 +5749,7 @@ Calls @code{MAIN__} (with no arguments).
This starts executing the Fortran main program unit for
the application.
-(Both @code{g77} and @code{f2c} currently compile a main
+(Both @command{g77} and @command{f2c} currently compile a main
program unit so that its global name is @code{MAIN__}.)
@item
@@ -8404,7 +5769,7 @@ in case @code{exit} doesn't exit on the system.
All of the above names are C @code{extern} names,
i.e.@: not mangled.
-When using the @code{main} procedure provided by @code{g77}
+When using the @code{main} procedure provided by @command{g77}
without a Fortran main program unit,
you need to provide @code{MAIN__}
as the entry point for your C code.
@@ -8412,15 +5777,15 @@ as the entry point for your C code.
entry point with the rest of your program.)
To provide your own @code{main} procedure
-in place of @code{g77}'s,
+in place of @command{g77}'s,
make sure you specify the object file defining that procedure
-@emph{before} @samp{-lg2c} on the @code{g77} command line.
-Since the @samp{-lg2c} option is implicitly provided,
+@emph{before} @option{-lg2c} on the @command{g77} command line.
+Since the @option{-lg2c} option is implicitly provided,
this is usually straightforward.
-(Use the @samp{--verbose} option to see how and where
-@code{g77} implicitly adds @samp{-lg2c} in a command line
+(Use the @option{--verbose} option to see how and where
+@command{g77} implicitly adds @option{-lg2c} in a command line
that will link the program.
-Feel free to specify @samp{-lg2c} explicitly,
+Feel free to specify @option{-lg2c} explicitly,
as appropriate.)
However, when providing your own @code{main},
@@ -8437,24 +5802,22 @@ some scratch files might be left lying around,
and some existing files being written might be left
with old data not properly truncated at the end.
-Note that, generally, the @code{g77} operating environment
+Note that, generally, the @command{g77} operating environment
does not depend on a procedure named @code{MAIN__} actually
-being called prior to any other @code{g77}-compiled code.
+being called prior to any other @command{g77}-compiled code.
That is, @code{MAIN__} does not, itself,
set up any important operating-environment characteristics
upon which other code might depend.
-This might change in future versions of @code{g77},
+This might change in future versions of @command{g77},
with appropriate notification in the release notes.
For more information, consult the source code for the above routines.
These are in @file{@value{path-libf2c}/libF77/}, named @file{main.c},
@file{setarg.c}, @file{setsig.c}, @file{getarg_.c}, and @file{iargc_.c}.
-Also, the file @file{@value{path-g77}/com.c} contains the code @code{g77}
+Also, the file @file{@value{path-g77}/com.c} contains the code @command{g77}
uses to open-code (inline) references to @code{IARGC}.
-@include g77install.texi
-
@node Debugging and Interfacing
@chapter Debugging and Interfacing
@cindex debugging
@@ -8464,7 +5827,7 @@ uses to open-code (inline) references to @code{IARGC}.
@cindex f2c compatibility
GNU Fortran currently generates code that is object-compatible with
-the @code{f2c} converter.
+the @command{f2c} converter.
Also, it avoids limitations in the current GBE, such as the
inability to generate a procedure with
multiple entry points, by generating code that is structured
@@ -8472,47 +5835,47 @@ differently (in terms of procedure names, scopes, arguments, and
so on) than might be expected.
As a result, writing code in other languages that calls on, is
-called by, or shares in-memory data with @code{g77}-compiled code generally
-requires some understanding of the way @code{g77} compiles code for
+called by, or shares in-memory data with @command{g77}-compiled code generally
+requires some understanding of the way @command{g77} compiles code for
various constructs.
-Similarly, using a debugger to debug @code{g77}-compiled
+Similarly, using a debugger to debug @command{g77}-compiled
code, even if that debugger supports native Fortran debugging, generally
requires this sort of information.
This section describes some of the basic information on how
-@code{g77} compiles code for constructs involving interfaces to other
+@command{g77} compiles code for constructs involving interfaces to other
languages and to debuggers.
@emph{Caution:} Much or all of this information pertains to only the current
-release of @code{g77}, sometimes even to using certain compiler options
-with @code{g77} (such as @samp{-fno-f2c}).
+release of @command{g77}, sometimes even to using certain compiler options
+with @command{g77} (such as @option{-fno-f2c}).
Do not write code that depends on this
information without clearly marking said code as nonportable and
-subject to review for every new release of @code{g77}.
+subject to review for every new release of @command{g77}.
This information
is provided primarily to make debugging of code generated by this
-particular release of @code{g77} easier for the user, and partly to make
+particular release of @command{g77} easier for the user, and partly to make
writing (generally nonportable) interface code easier.
Both of these
-activities require tracking changes in new version of @code{g77} as they
+activities require tracking changes in new version of @command{g77} as they
are installed, because new versions can change the behaviors
described in this section.
@menu
-* Main Program Unit:: How @code{g77} compiles a main program unit.
-* Procedures:: How @code{g77} constructs parameter lists
+* Main Program Unit:: How @command{g77} compiles a main program unit.
+* Procedures:: How @command{g77} constructs parameter lists
for procedures.
* Functions:: Functions returning floating-point or character data.
* Names:: Naming of user-defined variables, procedures, etc.
* Common Blocks:: Accessing common variables while debugging.
* Local Equivalence Areas:: Accessing @code{EQUIVALENCE} while debugging.
-* Complex Variables:: How @code{g77} performs complex arithmetic.
+* Complex Variables:: How @command{g77} performs complex arithmetic.
* Arrays:: Dealing with (possibly multi-dimensional) arrays.
* Adjustable Arrays:: Special consideration for adjustable arrays.
-* Alternate Entry Points:: How @code{g77} implements alternate @code{ENTRY}.
-* Alternate Returns:: How @code{g77} handles alternate returns.
-* Assigned Statement Labels:: How @code{g77} handles @code{ASSIGN}.
+* Alternate Entry Points:: How @command{g77} implements alternate @code{ENTRY}.
+* Alternate Returns:: How @command{g77} handles alternate returns.
+* Assigned Statement Labels:: How @command{g77} handles @code{ASSIGN}.
* Run-time Library Errors:: Meanings of some @code{IOSTAT=} values.
@end menu
@@ -8521,22 +5884,22 @@ described in this section.
@cindex PROGRAM statement
@cindex statements, PROGRAM
-When @code{g77} compiles a main program unit, it gives it the public
+When @command{g77} compiles a main program unit, it gives it the public
procedure name @code{MAIN__}.
The @code{libg2c} library has the actual @code{main()} procedure
as is typical of C-based environments, and
it is this procedure that performs some initial start-up
activity and then calls @code{MAIN__}.
-Generally, @code{g77} and @code{libg2c} are designed so that you need not
+Generally, @command{g77} and @code{libg2c} are designed so that you need not
include a main program unit written in Fortran in your program---it
can be written in C or some other language.
-Especially for I/O handling, this is the case, although @code{g77} version 0.5.16
+Especially for I/O handling, this is the case, although @command{g77} version 0.5.16
includes a bug fix for @code{libg2c} that solved a problem with using the
@code{OPEN} statement as the first Fortran I/O activity in a program
without a Fortran main program unit.
-However, if you don't intend to use @code{g77} (or @code{f2c}) to compile
+However, if you don't intend to use @command{g77} (or @command{f2c}) to compile
your main program unit---that is, if you intend to compile a @code{main()}
procedure using some other language---you should carefully
examine the code for @code{main()} in @code{libg2c}, found in the source
@@ -8569,7 +5932,7 @@ Fortran code.
The standard way to get around this problem is to set a break
point (a one-time, or temporary, break point will do) at
the entrance to @code{MAIN__}, and then run the program.
-A convenient way to do so is to add the @code{gdb} command
+A convenient way to do so is to add the @command{gdb} command
@example
tbreak MAIN__
@@ -8577,7 +5940,7 @@ tbreak MAIN__
@noindent
to the file @file{.gdbinit} in the directory in which you're debugging
-(using @code{gdb}).
+(using @command{gdb}).
After doing this, the debugger will see the current execution
point of the program as at the beginning of the main program
@@ -8597,14 +5960,14 @@ that should work fine.
@cindex statements, FUNCTION
@cindex signature of procedures
-Currently, @code{g77} passes arguments via reference---specifically,
+Currently, @command{g77} passes arguments via reference---specifically,
by passing a pointer to the location in memory of a variable, array,
array element, a temporary location that holds the result of evaluating an
expression, or a temporary or permanent location that holds the value
of a constant.
Procedures that accept @code{CHARACTER} arguments are implemented by
-@code{g77} so that each @code{CHARACTER} argument has two actual arguments.
+@command{g77} so that each @code{CHARACTER} argument has two actual arguments.
The first argument occupies the expected position in the
argument list and has the user-specified name.
@@ -8633,9 +5996,9 @@ When more than one @code{CHARACTER} argument is present in the argument
list, the length arguments are appended in the order
the original arguments appear.
So @samp{CALL FOO('HI','THERE')} is implemented in
-C as @samp{foo("hi","there",2,5);}, ignoring the fact that @code{g77}
+C as @samp{foo("hi","there",2,5);}, ignoring the fact that @command{g77}
does not provide the trailing null bytes on the constant
-strings (@code{f2c} does provide them, but they are unnecessary in
+strings (@command{f2c} does provide them, but they are unnecessary in
a Fortran environment, and you should not expect them to be
there).
@@ -8674,7 +6037,7 @@ symptoms might appear.
@cindex statements, RETURN
@cindex return type of functions
-@code{g77} handles in a special way functions that return the following
+@command{g77} handles in a special way functions that return the following
types:
@itemize @bullet
@@ -8686,7 +6049,7 @@ types:
@code{REAL(KIND=1)}
@end itemize
-For @code{CHARACTER}, @code{g77} implements a subroutine (a C function
+For @code{CHARACTER}, @command{g77} implements a subroutine (a C function
returning @code{void})
with two arguments prepended: @samp{__g77_result}, which the caller passes
as a pointer to a @code{char} array expected to hold the return value,
@@ -8697,22 +6060,22 @@ For @code{CHARACTER*(*)}, the called function uses @samp{__g77_length}
to determine the size of the array that @samp{__g77_result} points to;
otherwise, it ignores that argument.
-For @code{COMPLEX}, when @samp{-ff2c} is in
-force, @code{g77} implements
+For @code{COMPLEX}, when @option{-ff2c} is in
+force, @command{g77} implements
a subroutine with one argument prepended: @samp{__g77_result}, which the
caller passes as a pointer to a variable of the type of the function.
The called function writes the return value into this variable instead
of returning it as a function value.
-When @samp{-fno-f2c} is in force,
-@code{g77} implements a @code{COMPLEX} function as @code{gcc}'s
+When @option{-fno-f2c} is in force,
+@command{g77} implements a @code{COMPLEX} function as @command{gcc}'s
@samp{__complex__ float} or @samp{__complex__ double} function
-(or an emulation thereof, when @samp{-femulate-complex} is in effect),
-returning the result of the function in the same way as @code{gcc} would.
+(or an emulation thereof, when @option{-femulate-complex} is in effect),
+returning the result of the function in the same way as @command{gcc} would.
-For @code{REAL(KIND=1)}, when @samp{-ff2c} is in force, @code{g77} implements
+For @code{REAL(KIND=1)}, when @option{-ff2c} is in force, @command{g77} implements
a function that actually returns @code{REAL(KIND=2)} (typically
C's @code{double} type).
-When @samp{-fno-f2c} is in force, @code{REAL(KIND=1)}
+When @option{-fno-f2c} is in force, @code{REAL(KIND=1)}
functions return @code{float}.
@node Names
@@ -8727,14 +6090,14 @@ as how casing is handled.
External names---names of entities that are public, or ``accessible'',
to all modules in a program---normally have an underscore (@samp{_})
-appended by @code{g77},
-to generate code that is compatible with @code{f2c}.
+appended by @command{g77},
+to generate code that is compatible with @command{f2c}.
External names include names of Fortran things like common blocks,
external procedures (subroutines and functions, but not including
statement functions, which are internal procedures), and entry point
names.
-However, use of the @samp{-fno-underscoring} option
+However, use of the @option{-fno-underscoring} option
disables this kind of transformation of external names (though inhibiting
the transformation certainly improves the chances of colliding with
incompatible externals written in other languages---but that
@@ -8744,14 +6107,14 @@ might be intentional.
@cindex options, -fno-underscoring
@cindex -fno-second-underscore option
@cindex options, -fno-underscoring
-When @samp{-funderscoring} is in force, any name (external or local)
+When @option{-funderscoring} is in force, any name (external or local)
that already has at least one underscore in it is
-implemented by @code{g77} by appending two underscores.
+implemented by @command{g77} by appending two underscores.
(This second underscore can be disabled via the
-@samp{-fno-second-underscore} option.)
-External names are changed this way for @code{f2c} compatibility.
+@option{-fno-second-underscore} option.)
+External names are changed this way for @command{f2c} compatibility.
Local names are changed this way to avoid collisions with external names
-that are different in the source code---@code{f2c} does the same thing, but
+that are different in the source code---@command{f2c} does the same thing, but
there's no compatibility issue there except for user expectations while
debugging.
@@ -8766,13 +6129,13 @@ Max_Cost = 0
Here, a user would, in the debugger, refer to this variable using the
name @samp{max_cost__} (or @samp{MAX_COST__} or @samp{Max_Cost__},
as described below).
-(We hope to improve @code{g77} in this regard in the future---don't
+(We hope to improve @command{g77} in this regard in the future---don't
write scripts depending on this behavior!
-Also, consider experimenting with the @samp{-fno-underscoring}
+Also, consider experimenting with the @option{-fno-underscoring}
option to try out debugging without having to massage names by
hand like this.)
-@code{g77} provides a number of command-line options that allow the user
+@command{g77} provides a number of command-line options that allow the user
to control how case mapping is handled for source files.
The default is the traditional UNIX model for Fortran compilers---names
are mapped to lower case.
@@ -8792,7 +6155,7 @@ This would be the name to enter when using a debugger to
access the variable.
However, depending on the command-line options specified, the
-name implemented by @code{g77} might instead be @samp{FOO} or even
+name implemented by @command{g77} might instead be @samp{FOO} or even
@samp{Foo}, thus affecting how debugging is done.
Also:
@@ -8810,9 +6173,9 @@ void foo_()
@end example
@noindent
-However, @code{g77} command-line options could be used to change the casing
+However, @command{g77} command-line options could be used to change the casing
of names, resulting in the name @samp{FOO_} or @samp{Foo_} being given to the
-procedure instead of @samp{foo_}, and the @samp{-fno-underscoring} option
+procedure instead of @samp{foo_}, and the @option{-fno-underscoring} option
could be used to inhibit the appending of the underscore to the name.
@node Common Blocks
@@ -8821,53 +6184,9 @@ could be used to inhibit the appending of the underscore to the name.
@cindex @code{COMMON} statement
@cindex statements, @code{COMMON}
-@code{g77} names and lays out @code{COMMON} areas
-the same way @code{f2c} does,
-for compatibility with @code{f2c}.
-
-Currently, @code{g77} does not emit ``true'' debugging information for
-members of a @code{COMMON} area, due to an apparent bug in the GBE.
-
-(As of Version 0.5.19, @code{g77} emits debugging information for such
-members in the form of a constant string specifying the base name of
-the aggregate area and the offset of the member in bytes from the start
-of the area.
-Use the @samp{-fdebug-kludge} option to enable this behavior.
-In @code{gdb}, use @samp{set language c} before printing the value
-of the member, then @samp{set language fortran} to restore the default
-language, since @code{gdb} doesn't provide a way to print a readable
-version of a character string in Fortran language mode.
-
-This kludge will be removed in a future version of @code{g77} that,
-in conjunction with a contemporary version of @code{gdb},
-properly supports Fortran-language debugging, including access
-to members of @code{COMMON} areas.)
-
-@xref{Code Gen Options,,Options for Code Generation Conventions},
-for information on the @samp{-fdebug-kludge} option.
-
-Moreover, @code{g77} currently implements a @code{COMMON} area such that its
-type is an array of the C @code{char} data type.
-
-So, when debugging, you must know the offset into a @code{COMMON} area
-for a particular item in that area, and you have to take into
-account the appropriate multiplier for the respective sizes
-of the types (as declared in your code) for the items preceding
-the item in question as compared to the size of the @code{char} type.
-
-For example, using default implicit typing, the statement
-
-@example
-COMMON I(15), R(20), T
-@end example
-
-@noindent
-results in a public 144-byte @code{char} array named @samp{_BLNK__}
-with @samp{I} placed at @samp{_BLNK__[0]}, @samp{R} at @samp{_BLNK__[60]},
-and @samp{T} at @samp{_BLNK__[140]}.
-(This is assuming that the target machine for
-the compilation has 4-byte @code{INTEGER(KIND=1)} and @code{REAL(KIND=1)}
-types.)
+@command{g77} names and lays out @code{COMMON} areas
+the same way @command{f2c} does,
+for compatibility with @command{f2c}.
@node Local Equivalence Areas
@section Local Equivalence Areas (EQUIVALENCE)
@@ -8876,56 +6195,19 @@ types.)
@cindex EQUIVALENCE statement
@cindex statements, EQUIVALENCE
-@code{g77} treats storage-associated areas involving a @code{COMMON}
+@command{g77} treats storage-associated areas involving a @code{COMMON}
block as explained in the section on common blocks.
A local @code{EQUIVALENCE} area is a collection of variables and arrays
connected to each other in any way via @code{EQUIVALENCE}, none of which are
listed in a @code{COMMON} statement.
-Currently, @code{g77} does not emit ``true'' debugging information for
-members in a local @code{EQUIVALENCE} area, due to an apparent bug in the GBE.
-
-(As of Version 0.5.19, @code{g77} does emit debugging information for such
-members in the form of a constant string specifying the base name of
-the aggregate area and the offset of the member in bytes from the start
-of the area.
-Use the @samp{-fdebug-kludge} option to enable this behavior.
-In @code{gdb}, use @samp{set language c} before printing the value
-of the member, then @samp{set language fortran} to restore the default
-language, since @code{gdb} doesn't provide a way to print a readable
-version of a character string in Fortran language mode.
-
-This kludge will be removed in a future version of @code{g77} that,
-in conjunction with a contemporary version of @code{gdb},
-properly supports Fortran-language debugging, including access
-to members of @code{EQUIVALENCE} areas.)
-
-@xref{Code Gen Options,,Options for Code Generation Conventions},
-for information on the @samp{-fdebug-kludge} option.
-
-Moreover, @code{g77} implements a local @code{EQUIVALENCE} area such that its
-type is an array of the C @code{char} data type.
-
-The name @code{g77} gives this array of @code{char} type is @samp{__g77_equiv_@var{x}},
-where @var{x} is the name of the item that is placed at the beginning (offset 0)
-of this array.
-If more than one such item is placed at the beginning, @var{x} is
-the name that sorts to the top in an alphabetical sort of the list of
-such items.
-
-When debugging, you must therefore access members of @code{EQUIVALENCE}
-areas by specifying the appropriate @samp{__g77_equiv_@var{x}}
-array section with the appropriate offset.
-See the explanation of debugging @code{COMMON} blocks
-for info applicable to debugging local @code{EQUIVALENCE} areas.
-
-(@emph{Note:} @code{g77} version 0.5.18 and earlier chose the name
+(@emph{Note:} @command{g77} version 0.5.18 and earlier chose the name
for @var{x} using a different method when more than one name was
in the list of names of entities placed at the beginning of the
array.
Though the documentation specified that the first name listed in
-the @code{EQUIVALENCE} statements was chosen for @var{x}, @code{g77}
+the @code{EQUIVALENCE} statements was chosen for @var{x}, @command{g77}
in fact chose the name using a method that was so complicated,
it seemed easier to change it to an alphabetical sort than to describe the
previous method in the documentation.)
@@ -8937,28 +6219,28 @@ previous method in the documentation.)
@cindex COMPLEX statement
@cindex statements, COMPLEX
-As of 0.5.20, @code{g77} defaults to handling @code{COMPLEX} types
+As of 0.5.20, @command{g77} defaults to handling @code{COMPLEX} types
(and related intrinsics, constants, functions, and so on)
in a manner that
makes direct debugging involving these types in Fortran
language mode difficult.
-Essentially, @code{g77} implements these types using an
+Essentially, @command{g77} implements these types using an
internal construct similar to C's @code{struct}, at least
-as seen by the @code{gcc} back end.
+as seen by the @command{gcc} back end.
Currently, the back end, when outputting debugging info with
the compiled code for the assembler to digest, does not detect
these @code{struct} types as being substitutes for Fortran
complex.
As a result, the Fortran language modes of debuggers such as
-@code{gdb} see these types as C @code{struct} types, which
+@command{gdb} see these types as C @code{struct} types, which
they might or might not support.
Until this is fixed, switch to C language mode to work with
entities of @code{COMPLEX} type and then switch back to Fortran language
mode afterward.
-(In @code{gdb}, this is accomplished via @samp{set lang c} and
+(In @command{gdb}, this is accomplished via @samp{set lang c} and
either @samp{set lang fortran} or @samp{set lang auto}.)
@node Arrays
@@ -9016,7 +6298,7 @@ So the C equivalent in this case would be @samp{a[4293]}.
When using a debugger directly on Fortran code, the C equivalent
might not work, because some debuggers cannot understand the notion
-of low bounds other than zero. However, unlike @code{f2c}, @code{g77}
+of low bounds other than zero. However, unlike @command{f2c}, @command{g77}
does inform the GBE that a multi-dimensional array (like @samp{A}
in the above example) is really multi-dimensional, rather than a
single-dimensional array, so at least the dimensionality of the array
@@ -9057,7 +6339,7 @@ You know, maybe nobody really needs to use arrays.
Adjustable and automatic arrays in Fortran require the implementation
(in this
-case, the @code{g77} compiler) to ``memorize'' the expressions that
+case, the @command{g77} compiler) to ``memorize'' the expressions that
dimension the arrays each time the procedure is invoked.
This is so that subsequent changes to variables used in those
expressions, made during execution of the procedure, do not
@@ -9089,7 +6371,7 @@ like:
Note that this shows that while the value of @samp{N} was successfully
changed, the size of the @samp{A} array remained at 5 elements.
-To support this, @code{g77} generates code that executes before any user
+To support this, @command{g77} generates code that executes before any user
code (and before the internally generated computed @code{GOTO} to handle
alternate entry points, as described below) that evaluates each
(nonconstant) expression in the list of subscripts for an
@@ -9105,14 +6387,14 @@ Since the user program cannot (legitimately) change the value
of the temporary during execution of the procedure, the size
of the array remains constant during each invocation.
-For alternate entry points, the code @code{g77} generates takes into
+For alternate entry points, the code @command{g77} generates takes into
account the possibility that a dummy adjustable array is not actually
passed to the actual entry point being invoked at that time.
In that case, the public procedure implementing the entry point
passes to the master private procedure implementing all the
code for the entry points a @code{NULL} pointer where a pointer to that
adjustable array would be expected.
-The @code{g77}-generated code
+The @command{g77}-generated code
doesn't attempt to evaluate any of the expressions in the subscripts
for an array if the pointer to that array is @code{NULL} at run time in
such cases.
@@ -9122,7 +6404,7 @@ callee expects adjustable arrays, even if you know the callee
won't reference the arrays---nor should you pass @code{NULL} pointers
for any dummy arguments used in calculating the bounds of such
arrays or leave undefined any values used for that purpose in
-COMMON---because the way @code{g77} implements these things might
+COMMON---because the way @command{g77} implements these things might
change in the future!)
@node Alternate Entry Points
@@ -9134,20 +6416,20 @@ change in the future!)
The GBE does not understand the general concept of
alternate entry points as Fortran provides via the ENTRY statement.
-@code{g77} gets around this by using an approach to compiling procedures
+@command{g77} gets around this by using an approach to compiling procedures
having at least one @code{ENTRY} statement that is almost identical to the
-approach used by @code{f2c}.
+approach used by @command{f2c}.
(An alternate approach could be used that
would probably generate faster, but larger, code that would also
be a bit easier to debug.)
-Information on how @code{g77} implements @code{ENTRY} is provided for those
+Information on how @command{g77} implements @code{ENTRY} is provided for those
trying to debug such code.
The choice of implementation seems
unlikely to affect code (compiled in other languages) that interfaces
to such code.
-@code{g77} compiles exactly one public procedure for the primary entry
+@command{g77} compiles exactly one public procedure for the primary entry
point of a procedure plus each @code{ENTRY} point it specifies, as usual.
That is, in terms of the public interface, there is no difference
between
@@ -9173,7 +6455,7 @@ for the @samp{X} and @samp{Y} procedures themselves, plus the fact that,
for the second case, an extra internal procedure is compiled.
For every Fortran procedure with at least one @code{ENTRY}
-statement, @code{g77} compiles an extra procedure
+statement, @command{g77} compiles an extra procedure
named @samp{__g77_masterfun_@var{x}}, where @var{x} is
the name of the primary entry point (which, in the above case,
using the standard compiler options, would be @samp{x_} in C).
@@ -9186,7 +6468,7 @@ for the primary entry point plus for every entry point.
The extra procedure has some other interesting characteristics.
-The argument list for this procedure is invented by @code{g77}.
+The argument list for this procedure is invented by @command{g77}.
It contains
a single integer argument named @samp{__g77_which_entrypoint},
passed by value (as in Fortran's @samp{%VAL()} intrinsic), specifying the
@@ -9195,7 +6477,7 @@ first entry point (the first @code{ENTRY} statement encountered), 2 for
the second entry point, and so on.
It also contains, for functions returning @code{CHARACTER} and
-(when @samp{-ff2c} is in effect) @code{COMPLEX} functions,
+(when @option{-ff2c} is in effect) @code{COMPLEX} functions,
and for functions returning different types among the
@code{ENTRY} statements (e.g. @samp{REAL FUNCTION R()}
containing @samp{ENTRY I()}), an argument named @samp{__g77_result} that
@@ -9207,7 +6489,7 @@ for @code{COMPLEX} functions, it is the appropriate area for the return
type; for multiple-return-type functions, it is a union of all the supported return
types (which cannot include @code{CHARACTER}, since combining @code{CHARACTER}
and non-@code{CHARACTER} return types via @code{ENTRY} in a single function
-is not supported by @code{g77}).
+is not supported by @command{g77}).
For @code{CHARACTER} functions, the @samp{__g77_result} argument is followed
by yet another argument named @samp{__g77_length} that, at run time,
@@ -9239,7 +6521,7 @@ statement:
@noindent
(Note that invalid Fortran statement labels and variable names
are used in the above example to highlight the fact that it
-represents code generated by the @code{g77} internals, not code to be
+represents code generated by the @command{g77} internals, not code to be
written by the user.)
It is this code that, when the procedure is called, picks which
@@ -9295,7 +6577,7 @@ for an equivalent single-entry function.
@cindex statements, RETURN
Subroutines with alternate returns (e.g. @samp{SUBROUTINE X(*)} and
-@samp{CALL X(*50)}) are implemented by @code{g77} as functions returning
+@samp{CALL X(*50)}) are implemented by @command{g77} as functions returning
the C @code{int} type.
The actual alternate-return arguments are omitted from the calling sequence.
Instead, the caller uses
@@ -9318,14 +6600,14 @@ in C, and @samp{RETURN} by itself is @samp{X = 0} and @samp{RETURN}).
@cindex statements, GOTO
For portability to machines where a pointer (such as to a label,
-which is how @code{g77} implements @code{ASSIGN} and its relatives,
+which is how @command{g77} implements @code{ASSIGN} and its relatives,
the assigned-@code{GOTO} and assigned-@code{FORMAT}-I/O statements)
-is wider (bitwise) than an @code{INTEGER(KIND=1)}, @code{g77}
+is wider (bitwise) than an @code{INTEGER(KIND=1)}, @command{g77}
uses a different memory location to hold the @code{ASSIGN}ed value of a variable
than it does the numerical value in that variable, unless the
variable is wide enough (can hold enough bits).
-In particular, while @code{g77} implements
+In particular, while @command{g77} implements
@example
I = 10
@@ -9341,24 +6623,24 @@ ASSIGN 10 TO I
@noindent
as, in GNU's extended C notation (for the label syntax),
@samp{__g77_ASSIGN_I = &&L10;} (where @samp{L10} is just a massaging
-of the Fortran label @samp{10} to make the syntax C-like; @code{g77} doesn't
+of the Fortran label @samp{10} to make the syntax C-like; @command{g77} doesn't
actually generate the name @samp{L10} or any other name like that,
since debuggers cannot access labels anyway).
While this currently means that an @code{ASSIGN} statement does not
overwrite the numeric contents of its target variable, @emph{do not}
write any code depending on this feature.
-@code{g77} has already changed this implementation across
+@command{g77} has already changed this implementation across
versions and might do so in the future.
This information is provided only to make debugging Fortran programs
-compiled with the current version of @code{g77} somewhat easier.
+compiled with the current version of @command{g77} somewhat easier.
If there's no debugger-visible variable named @samp{__g77_ASSIGN_I}
in a program unit that does @samp{ASSIGN 10 TO I}, that probably
-means @code{g77} has decided it can store the pointer to the label directly
+means @command{g77} has decided it can store the pointer to the label directly
into @samp{I} itself.
@xref{Ugly Assigned Labels}, for information on a command-line option
-to force @code{g77} to use the same storage for both normal and
+to force @command{g77} to use the same storage for both normal and
assigned-label uses of a variable.
@node Run-time Library Errors
@@ -9383,7 +6665,7 @@ so you can more easily change the actual numbers in the future.
The information below is culled from the definition
of @code{F_err} in @file{f/runtime/libI77/err.c} in the
-@code{g77} source tree.
+@command{g77} source tree.
@smallexample
100: "error in format"
@@ -9428,14 +6710,14 @@ of @code{F_err} in @file{f/runtime/libI77/err.c} in the
@cindex writing code
@cindex code, writing
-Most users of @code{g77} can be divided into two camps:
+Most users of @command{g77} can be divided into two camps:
@itemize @bullet
@item
-Those writing new Fortran code to be compiled by @code{g77}.
+Those writing new Fortran code to be compiled by @command{g77}.
@item
-Those using @code{g77} to compile existing, ``legacy'' code.
+Those using @command{g77} to compile existing, ``legacy'' code.
@end itemize
Users writing new code generally understand most of the necessary
@@ -9447,15 +6729,15 @@ Users dealing with ``legacy'' code sometimes don't have much
experience with Fortran, but believe that the code they're compiling
already works when compiled by other compilers (and might
not understand why, as is sometimes the case, it doesn't work
-when compiled by @code{g77}).
+when compiled by @command{g77}).
The following information is designed to help users do a better job
coping with existing, ``legacy'' Fortran code, and with writing
new code as well.
@menu
-* Advantages Over f2c:: If @code{f2c} is so great, why @code{g77}?
-* Block Data and Libraries:: How @code{g77} solves a common problem.
+* Advantages Over f2c:: If @command{f2c} is so great, why @command{g77}?
+* Block Data and Libraries:: How @command{g77} solves a common problem.
* Loops:: Fortran @code{DO} loops surprise many people.
* Working Programs:: Getting programs to work should be done first.
* Overly Convenient Options:: Temptations to avoid, habits to not form.
@@ -9465,11 +6747,11 @@ new code as well.
@node Advantages Over f2c
@section Advantages Over f2c
-Without @code{f2c}, @code{g77} would have taken much longer to
+Without @command{f2c}, @command{g77} would have taken much longer to
do and probably not been as good for quite a while.
-Sometimes people who notice how much @code{g77} depends on, and
-documents encouragement to use, @code{f2c} ask why @code{g77}
-was created if @code{f2c} already existed.
+Sometimes people who notice how much @command{g77} depends on, and
+documents encouragement to use, @command{f2c} ask why @command{g77}
+was created if @command{f2c} already existed.
This section gives some basic answers to these questions, though it
is not intended to be comprehensive.
@@ -9487,7 +6769,7 @@ is not intended to be comprehensive.
@node Language Extensions
@subsection Language Extensions
-@code{g77} offers several extensions to FORTRAN 77 language that @code{f2c}
+@command{g77} offers several extensions to FORTRAN 77 language that @command{f2c}
doesn't:
@itemize @bullet
@@ -9524,12 +6806,12 @@ with routines known to compiler as intrinsics
to change the interfaces used by Fortran routines)
@end itemize
-@code{g77} also implements iterative @code{DO} loops
+@command{g77} also implements iterative @code{DO} loops
so that they work even in the presence of certain ``extreme'' inputs,
-unlike @code{f2c}.
+unlike @command{f2c}.
@xref{Loops}.
-However, @code{f2c} offers a few that @code{g77} doesn't, such as:
+However, @command{f2c} offers a few that @command{g77} doesn't, such as:
@itemize @bullet
@item
@@ -9542,14 +6824,14 @@ Array bounds expressions (such as @samp{REAL M(N(2))})
@code{AUTOMATIC} statement
@end itemize
-It is expected that @code{g77} will offer some or all of these missing
+It is expected that @command{g77} will offer some or all of these missing
features at some time in the future.
@node Diagnostic Abilities
@subsection Diagnostic Abilities
-@code{g77} offers better diagnosis of problems in @code{FORMAT} statements.
-@code{f2c} doesn't, for example, emit any diagnostic for
+@command{g77} offers better diagnosis of problems in @code{FORMAT} statements.
+@command{f2c} doesn't, for example, emit any diagnostic for
@samp{FORMAT(XZFAJG10324)},
leaving that to be diagnosed, at run time, by
the @code{libf2c} run-time library.
@@ -9557,7 +6839,7 @@ the @code{libf2c} run-time library.
@node Compiler Options
@subsection Compiler Options
-@code{g77} offers compiler options that @code{f2c} doesn't,
+@command{g77} offers compiler options that @command{f2c} doesn't,
most of which are designed to more easily accommodate
legacy code:
@@ -9590,9 +6872,9 @@ One to specify the the source code is written in
Fortran-90-style free-form
@end itemize
-However, @code{f2c} offers a few that @code{g77} doesn't,
+However, @command{f2c} offers a few that @command{g77} doesn't,
like an option to have @code{REAL} default to @code{REAL*8}.
-It is expected that @code{g77} will offer all of the
+It is expected that @command{g77} will offer all of the
missing options pertinent to being a Fortran compiler
at some time in the future.
@@ -9600,72 +6882,72 @@ at some time in the future.
@subsection Compiler Speed
Saving the steps of writing and then rereading C code is a big reason
-why @code{g77} should be able to compile code much faster than using
-@code{f2c} in conjunction with the equivalent invocation of @code{gcc}.
+why @command{g77} should be able to compile code much faster than using
+@command{f2c} in conjunction with the equivalent invocation of @command{gcc}.
-However, due to @code{g77}'s youth, lots of self-checking is still being
+However, due to @command{g77}'s youth, lots of self-checking is still being
performed.
As a result, this improvement is as yet unrealized
(though the potential seems to be there for quite a big speedup
in the future).
-It is possible that, as of version 0.5.18, @code{g77}
+It is possible that, as of version 0.5.18, @command{g77}
is noticeably faster compiling many Fortran source files than using
-@code{f2c} in conjunction with @code{gcc}.
+@command{f2c} in conjunction with @command{gcc}.
@node Program Speed
@subsection Program Speed
-@code{g77} has the potential to better optimize code than @code{f2c},
-even when @code{gcc} is used to compile the output of @code{f2c},
-because @code{f2c} must necessarily
+@command{g77} has the potential to better optimize code than @command{f2c},
+even when @command{gcc} is used to compile the output of @command{f2c},
+because @command{f2c} must necessarily
translate Fortran into a somewhat lower-level language (C) that cannot
preserve all the information that is potentially useful for optimization,
-while @code{g77} can gather, preserve, and transmit that information directly
+while @command{g77} can gather, preserve, and transmit that information directly
to the GBE.
-For example, @code{g77} implements @code{ASSIGN} and assigned
+For example, @command{g77} implements @code{ASSIGN} and assigned
@code{GOTO} using direct assignment of pointers to labels and direct
-jumps to labels, whereas @code{f2c} maps the assigned labels to
+jumps to labels, whereas @command{f2c} maps the assigned labels to
integer values and then uses a C @code{switch} statement to encode
the assigned @code{GOTO} statements.
However, as is typical, theory and reality don't quite match, at least
-not in all cases, so it is still the case that @code{f2c} plus @code{gcc}
-can generate code that is faster than @code{g77}.
+not in all cases, so it is still the case that @command{f2c} plus @command{gcc}
+can generate code that is faster than @command{g77}.
-Version 0.5.18 of @code{g77} offered default
-settings and options, via patches to the @code{gcc}
+Version 0.5.18 of @command{g77} offered default
+settings and options, via patches to the @command{gcc}
back end, that allow for better program speed, though
some of these improvements also affected the performance
-of programs translated by @code{f2c} and then compiled
-by @code{g77}'s version of @code{gcc}.
+of programs translated by @command{f2c} and then compiled
+by @command{g77}'s version of @command{gcc}.
-Version 0.5.20 of @code{g77} offers further performance
+Version 0.5.20 of @command{g77} offers further performance
improvements, at least one of which (alias analysis) is
-not generally applicable to @code{f2c} (though @code{f2c}
+not generally applicable to @command{f2c} (though @command{f2c}
could presumably be changed to also take advantage of
-this new capability of the @code{gcc} back end, assuming
-this is made available in an upcoming release of @code{gcc}).
+this new capability of the @command{gcc} back end, assuming
+this is made available in an upcoming release of @command{gcc}).
@node Ease of Debugging
@subsection Ease of Debugging
-Because @code{g77} compiles directly to assembler code like @code{gcc},
-instead of translating to an intermediate language (C) as does @code{f2c},
-support for debugging can be better for @code{g77} than @code{f2c}.
+Because @command{g77} compiles directly to assembler code like @command{gcc},
+instead of translating to an intermediate language (C) as does @command{f2c},
+support for debugging can be better for @command{g77} than @command{f2c}.
-However, although @code{g77} might be somewhat more ``native'' in terms of
-debugging support than @code{f2c} plus @code{gcc}, there still are a lot
+However, although @command{g77} might be somewhat more ``native'' in terms of
+debugging support than @command{f2c} plus @command{gcc}, there still are a lot
of things ``not quite right''.
Many of the important ones should be resolved in the near future.
-For example, @code{g77} doesn't have to worry about reserved names
-like @code{f2c} does.
-Given @samp{FOR = WHILE}, @code{f2c} must necessarily
+For example, @command{g77} doesn't have to worry about reserved names
+like @command{f2c} does.
+Given @samp{FOR = WHILE}, @command{f2c} must necessarily
translate this to something @emph{other} than
@samp{for = while;}, because C reserves those words.
-However, @code{g77} does still uses things like an extra level of indirection
+However, @command{g77} does still uses things like an extra level of indirection
for @code{ENTRY}-laden procedures---in this case, because the back end doesn't
yet support multiple entry points.
@@ -9677,12 +6959,12 @@ EQUIVALENCE (B, C)
@end smallexample
@noindent
-the @code{g77} user should be able to access the variables directly, by name,
-without having to traverse C-like structures and unions, while @code{f2c}
+the @command{g77} user should be able to access the variables directly, by name,
+without having to traverse C-like structures and unions, while @command{f2c}
is unlikely to ever offer this ability (due to limitations in the
C language).
-However, due to apparent bugs in the back end, @code{g77} currently doesn't
+However, due to apparent bugs in the back end, @command{g77} currently doesn't
take advantage of this facility at all---it doesn't emit any debugging
information for @code{COMMON} and @code{EQUIVALENCE} areas,
other than information
@@ -9690,22 +6972,22 @@ on the array of @code{char} it creates (and, in the case
of local @code{EQUIVALENCE}, names) for each such area.
Yet another example is arrays.
-@code{g77} represents them to the debugger
-using the same ``dimensionality'' as in the source code, while @code{f2c}
+@command{g77} represents them to the debugger
+using the same ``dimensionality'' as in the source code, while @command{f2c}
must necessarily convert them all to one-dimensional arrays to fit
into the confines of the C language.
However, the level of support
offered by debuggers for interactive Fortran-style access to arrays
-as compiled by @code{g77} can vary widely.
+as compiled by @command{g77} can vary widely.
In some cases, it can actually
-be an advantage that @code{f2c} converts everything to widely supported
+be an advantage that @command{f2c} converts everything to widely supported
C semantics.
-In fairness, @code{g77} could do many of the things @code{f2c} does
-to get things working at least as well as @code{f2c}---for now,
-the developers prefer making @code{g77} work the
+In fairness, @command{g77} could do many of the things @command{f2c} does
+to get things working at least as well as @command{f2c}---for now,
+the developers prefer making @command{g77} work the
way they think it is supposed to, and finding help improving the
-other products (the back end of @code{gcc}; @code{gdb}; and so on)
+other products (the back end of @command{gcc}; @command{gdb}; and so on)
to get things working properly.
@node Character and Hollerith Constants
@@ -9719,19 +7001,19 @@ to get things working properly.
@cindex zero byte, trailing
To avoid the extensive hassle that would be needed to avoid this,
-@code{f2c} uses C character constants to encode character and Hollerith
+@command{f2c} uses C character constants to encode character and Hollerith
constants.
That means a constant like @samp{'HELLO'} is translated to
@samp{"hello"} in C, which further means that an extra null byte is
present at the end of the constant.
This null byte is superfluous.
-@code{g77} does not generate such null bytes.
+@command{g77} does not generate such null bytes.
This represents significant
savings of resources, such as on systems where @file{/dev/null} or
@file{/dev/zero} represent bottlenecks in the systems' performance,
-because @code{g77} simply asks for fewer zeros from the operating
-system than @code{f2c}.
+because @command{g77} simply asks for fewer zeros from the operating
+system than @command{f2c}.
(Avoiding spurious use of zero bytes, each byte typically have
eight zero bits, also reduces the liabilities in case
Microsoft's rumored patent on the digits 0 and 1 is upheld.)
@@ -9750,29 +7032,29 @@ when they are put into libraries, give each one a name (as in
@samp{BLOCK DATA FOO}) and make sure there is an @samp{EXTERNAL FOO}
statement in every program unit that uses any common block
initialized by the corresponding @code{BLOCK DATA}.
-@code{g77} currently compiles a @code{BLOCK DATA} as if it were a
+@command{g77} currently compiles a @code{BLOCK DATA} as if it were a
@code{SUBROUTINE},
that is, it generates an actual procedure having the appropriate name.
The procedure does nothing but return immediately if it happens to be
called.
For @samp{EXTERNAL FOO}, where @samp{FOO} is not otherwise referenced in the
-same program unit, @code{g77} assumes there exists a @samp{BLOCK DATA FOO}
+same program unit, @command{g77} assumes there exists a @samp{BLOCK DATA FOO}
in the program and ensures that by generating a
reference to it so the linker will make sure it is present.
-(Specifically, @code{g77} outputs in the data section a static pointer to the
+(Specifically, @command{g77} outputs in the data section a static pointer to the
external name @samp{FOO}.)
-The implementation @code{g77} currently uses to make this work is
-one of the few things not compatible with @code{f2c} as currently
+The implementation @command{g77} currently uses to make this work is
+one of the few things not compatible with @command{f2c} as currently
shipped.
-@code{f2c} currently does nothing with @samp{EXTERNAL FOO} except
+@command{f2c} currently does nothing with @samp{EXTERNAL FOO} except
issue a warning that @samp{FOO} is not otherwise referenced,
and, for @samp{BLOCK DATA FOO},
-@code{f2c} doesn't generate a dummy procedure with the name @samp{FOO}.
-The upshot is that you shouldn't mix @code{f2c} and @code{g77} in
+@command{f2c} doesn't generate a dummy procedure with the name @samp{FOO}.
+The upshot is that you shouldn't mix @command{f2c} and @command{g77} in
this particular case.
-If you use @code{f2c} to compile @samp{BLOCK DATA FOO},
-then any @code{g77}-compiled program unit that says @samp{EXTERNAL FOO}
+If you use @command{f2c} to compile @samp{BLOCK DATA FOO},
+then any @command{g77}-compiled program unit that says @samp{EXTERNAL FOO}
will result in an unresolved reference when linked.
If you do the
opposite, then @samp{FOO} might not be linked in under various
@@ -9781,7 +7063,7 @@ using a ``clever'' linker---so clever, it produces a broken program
with little or no warning by omitting initializations of global data
because they are contained in unreferenced procedures).
-The changes you make to your code to make @code{g77} handle this situation,
+The changes you make to your code to make @command{g77} handle this situation,
however, appear to be a widely portable way to handle it.
That is, many systems permit it (as they should, since the
FORTRAN 77 standard permits @samp{EXTERNAL FOO} when @samp{FOO}
@@ -9827,7 +7109,7 @@ END
@end smallexample
@noindent
-That way, @samp{CURX} is compiled by @code{g77} (and many other
+That way, @samp{CURX} is compiled by @command{g77} (and many other
compilers) so that the linker knows it must include @samp{FOO},
the @code{BLOCK DATA} program unit that sets the initial values
for the variables in @samp{VAR}, in the executable program.
@@ -9910,7 +7192,7 @@ END DO
@noindent
The simple @code{DO} construct and the @code{EXIT} statement
(used to leave the innermost loop)
-are F90 features that @code{g77} supports.
+are F90 features that @command{g77} supports.
Some Fortran compilers have buggy implementations of @code{DO},
in that they don't follow the standard.
@@ -9932,7 +7214,7 @@ DO I = 2147483600, 2147483647
@noindent
A loop started by the above statement will work as implemented
-by @code{g77}, but the use, by some compilers, of a
+by @command{g77}, but the use, by some compilers, of a
more C-like implementation akin to
@smallexample
@@ -9965,7 +7247,7 @@ Consider the following program:
A C-like view of @code{DO} would hold that the two ``exclamatory''
@code{PRINT} statements are never executed.
However, this is the output of running the above program
-as compiled by @code{g77} on a GNU/Linux ix86 system:
+as compiled by @command{g77} on a GNU/Linux ix86 system:
@smallexample
.100000001
@@ -9982,14 +7264,14 @@ LAST = .310000002
Note that one of the two checks in the program turned up
an apparent violation of the programmer's expectation---yet,
-the loop is correctly implemented by @code{g77}, in that
+the loop is correctly implemented by @command{g77}, in that
it has 30 iterations.
This trip count of 30 is correct when evaluated using
the floating-point representations for the @var{begin},
@var{end}, and @var{incr} values (.1, .31, .007) on GNU/Linux
ix86 are used.
On other systems, an apparently more accurate trip count
-of 31 might result, but, nevertheless, @code{g77} is
+of 31 might result, but, nevertheless, @command{g77} is
faithfully following the Fortran standard, and the result
is not what the author of the sample program above
apparently expected.
@@ -10000,10 +7282,10 @@ for example.)
Due to this combination of imprecise representation
of floating-point values and the often-misunderstood
interpretation of @code{DO} by standard-conforming
-compilers such as @code{g77}, use of @code{DO} loops
+compilers such as @command{g77}, use of @code{DO} loops
with @code{REAL} iteration
variables is not recommended.
-Such use can be caught by specifying @samp{-Wsurprising}.
+Such use can be caught by specifying @option{-Wsurprising}.
@xref{Warning Options}, for more information on this
option.
@@ -10014,7 +7296,7 @@ Getting Fortran programs to work in the first place can be
quite a challenge---even when the programs already work on
other systems, or when using other compilers.
-@code{g77} offers some facilities that might be useful for
+@command{g77} offers some facilities that might be useful for
tracking down bugs in such programs.
@menu
@@ -10058,7 +7340,7 @@ is likely to assume it returns
@code{INTEGER}, or some other type, leading to invalid results
or even program crashes.
-The @samp{-Wimplicit} option might catch failures to
+The @option{-Wimplicit} option might catch failures to
properly specify the types of
variables, arrays, and functions in the code.
@@ -10070,10 +7352,10 @@ This is why so many experienced Fortran programmers strongly
recommend widespread use of the @code{IMPLICIT NONE} statement,
despite it not being standard FORTRAN 77, to completely turn
off implicit typing.
-(@code{g77} supports @code{IMPLICIT NONE}, as do almost all
+(@command{g77} supports @code{IMPLICIT NONE}, as do almost all
FORTRAN 77 compilers.)
-Note that @samp{-Wimplicit} catches only implicit typing of
+Note that @option{-Wimplicit} catches only implicit typing of
@emph{names}.
It does not catch implicit typing of expressions such
as @samp{X**(2/3)}.
@@ -10096,18 +7378,18 @@ As a result, many of these programs depend, sometimes
inadvertently, on this behavior, though to do so violates
the Fortran standards.
-You can ask @code{g77} for this behavior by specifying the
-@samp{-finit-local-zero} option when compiling Fortran code.
-(You might want to specify @samp{-fno-automatic} as well,
+You can ask @command{g77} for this behavior by specifying the
+@option{-finit-local-zero} option when compiling Fortran code.
+(You might want to specify @option{-fno-automatic} as well,
to avoid code-size inflation for non-optimized compilations.)
Note that a program that works better when compiled with the
-@samp{-finit-local-zero} option
+@option{-finit-local-zero} option
is almost certainly depending on a particular system's,
or compiler's, tendency to initialize some variables to zero.
It might be worthwhile finding such cases and fixing them,
-using techniques such as compiling with the @samp{-O -Wuninitialized}
-options using @code{g77}.
+using techniques such as compiling with the @option{-O -Wuninitialized}
+options using @command{g77}.
@node Variables Assumed To Be Saved
@subsection Variables Assumed To Be Saved
@@ -10131,24 +7413,24 @@ Depending on variables and arrays to retain values across
procedure calls without using @code{SAVE} to require it violates
the Fortran standards.
-You can ask @code{g77} to assume @code{SAVE} is specified for all
+You can ask @command{g77} to assume @code{SAVE} is specified for all
relevant (local) variables and arrays by using the
-@samp{-fno-automatic} option.
+@option{-fno-automatic} option.
Note that a program that works better when compiled with the
-@samp{-fno-automatic} option
+@option{-fno-automatic} option
is almost certainly depending on not having to use
the @code{SAVE} statement as required by the Fortran standard.
It might be worthwhile finding such cases and fixing them,
using techniques such as compiling with the @samp{-O -Wuninitialized}
-options using @code{g77}.
+options using @command{g77}.
@node Unwanted Variables
@subsection Unwanted Variables
-The @samp{-Wunused} option can find bugs involving
+The @option{-Wunused} option can find bugs involving
implicit typing, sometimes
-more easily than using @samp{-Wimplicit} in code that makes
+more easily than using @option{-Wimplicit} in code that makes
heavy use of implicit typing.
An unused variable or array might indicate that the
spelling for its declaration is different from that of
@@ -10173,23 +7455,23 @@ to a procedure might indicate a bug.
Compile with @samp{-W -Wunused} option to catch cases of
unused arguments.
-Note that @samp{-W} also enables warnings regarding overflow
+Note that @option{-W} also enables warnings regarding overflow
of floating-point constants under certain circumstances.
@node Surprising Interpretations of Code
@subsection Surprising Interpretations of Code
-The @samp{-Wsurprising} option can help find bugs involving
+The @option{-Wsurprising} option can help find bugs involving
expression evaluation or in
the way @code{DO} loops with non-integral iteration variables
are handled.
Cases found by this option might indicate a difference of
interpretation between the author of the code involved, and
-a standard-conforming compiler such as @code{g77}.
+a standard-conforming compiler such as @command{g77}.
Such a difference might produce actual bugs.
In any case, changing the code to explicitly do what the
-programmer might have expected it to do, so @code{g77} and
+programmer might have expected it to do, so @command{g77} and
other compilers are more likely to follow the programmer's
expectations, might be worthwhile, especially if such changes
make the program work better.
@@ -10213,37 +7495,33 @@ make the program work better.
@cindex scheduling of reads and writes
@cindex reads and writes, scheduling
-The @samp{-falias-check}, @samp{-fargument-alias},
-@samp{-fargument-noalias},
-and @samp{-fno-argument-noalias-global} options,
+The @option{-falias-check}, @option{-fargument-alias},
+@option{-fargument-noalias},
+and @option{-fno-argument-noalias-global} options,
introduced in version 0.5.20 and
-@code{g77}'s version 2.7.2.2.f.2 of @code{gcc},
-were withdrawn as of @code{g77} version 0.5.23
-due to their not being supported by @code{gcc} version 2.8.
+@command{g77}'s version 2.7.2.2.f.2 of @command{gcc},
+were withdrawn as of @command{g77} version 0.5.23
+due to their not being supported by @command{gcc} version 2.8.
-These options, which control the assumptions regarding aliasing
+These options control the assumptions regarding aliasing
(overlapping) of writes and reads to main memory (core) made
-by the @code{gcc} back end,
-might well be added back (in some form) in a future version
-of @code{gcc}.
-
-However, these options @emph{are} supported by @code{egcs}.
+by the @command{gcc} back end.
The information below still is useful, but applies to
-only those versions of @code{g77} that support the
+only those versions of @command{g77} that support the
alias analysis implied by support for these options.
-These options are effective only when compiling with @samp{-O}
-(specifying any level other than @samp{-O0})
-or with @samp{-falias-check}.
+These options are effective only when compiling with @option{-O}
+(specifying any level other than @option{-O0})
+or with @option{-falias-check}.
-The default for Fortran code is @samp{-fargument-noalias-global}.
+The default for Fortran code is @option{-fargument-noalias-global}.
(The default for C code and code written in other C-based languages
-is @samp{-fargument-alias}.
-These defaults apply regardless of whether you use @code{g77} or
-@code{gcc} to compile your code.)
+is @option{-fargument-alias}.
+These defaults apply regardless of whether you use @command{g77} or
+@command{gcc} to compile your code.)
-Note that, on some systems, compiling with @samp{-fforce-addr} in
+Note that, on some systems, compiling with @option{-fforce-addr} in
effect can produce more optimal code when the default aliasing
options are in effect (and when optimization is enabled).
@@ -10257,7 +7535,7 @@ set up this kind of aliasing.
(The FORTRAN 77 standard's prohibition of this sort of
overlap, generally referred to therein as ``storage
assocation'', appears in Sections 15.9.3.6.
-This prohibition allows implementations, such as @code{g77},
+This prohibition allows implementations, such as @command{g77},
to, for example, implement the passing of procedures and
even values in @code{COMMON} via copy operations into local,
perhaps more efficiently accessed temporaries at entry to a
@@ -10268,17 +7546,17 @@ order in which the local copies are updated by the code,
among other things.)
To test this hypothesis, try compiling your program with
-the @samp{-fargument-alias} option, which causes the
+the @option{-fargument-alias} option, which causes the
compiler to revert to assumptions essentially the same as
-made by versions of @code{g77} prior to 0.5.20.
+made by versions of @command{g77} prior to 0.5.20.
If the program works using this option, that strongly suggests
that the bug is in your program.
Finding and fixing the bug(s) should result in a program that
-is more standard-conforming and that can be compiled by @code{g77}
+is more standard-conforming and that can be compiled by @command{g77}
in a way that results in a faster executable.
-(You might want to try compiling with @samp{-fargument-noalias},
+(You might want to try compiling with @option{-fargument-noalias},
a kind of half-way point, to see if the problem is limited to
aliasing between dummy arguments and @code{COMMON} variables---this
option assumes that such aliasing is not done, while still allowing
@@ -10363,10 +7641,10 @@ only those violations that actually happen during a particular run.
Neither approach can cope with programs mixing Fortran code with
routines written in other languages, however.)
-Currently, @code{g77} provides neither static nor run-time facilities
+Currently, @command{g77} provides neither static nor run-time facilities
to detect any cases of this problem, although other products might.
Run-time facilities are more likely to be offered by future
-versions of @code{g77}, though patches improving @code{g77} so that
+versions of @command{g77}, though patches improving @command{g77} so that
it provides either form of detection are welcome.
@node Output Assumed To Flush
@@ -10382,7 +7660,7 @@ it provides either form of detection are welcome.
@cindex NFS
@cindex network file system
-For several versions prior to 0.5.20, @code{g77} configured its
+For several versions prior to 0.5.20, @command{g77} configured its
version of the @code{libf2c} run-time library so that one of
its configuration macros, @code{ALWAYS_FLUSH}, was defined.
@@ -10393,23 +7671,60 @@ such as disk full, would be immediately flagged via the
relevant @code{ERR=} and @code{IOSTAT=} mechanism.
Because of the adverse effects this approach had on the performance
-of many programs, @code{g77} no longer configures @code{libf2c}
-(now named @code{libg2c} in its @code{g77} incarnation)
+of many programs, @command{g77} no longer configures @code{libf2c}
+(now named @code{libg2c} in its @command{g77} incarnation)
to always flush output.
If your program depends on this behavior, either insert the
appropriate @samp{CALL FLUSH} statements, or modify the sources
-to the @code{libg2c}, rebuild and reinstall @code{g77}, and
+to the @code{libg2c}, rebuild and reinstall @command{g77}, and
relink your programs with the modified library.
(Ideally, @code{libg2c} would offer the choice at run-time, so
-that a compile-time option to @code{g77} or @code{f2c} could
+that a compile-time option to @command{g77} or @command{f2c} could
result in generating the appropriate calls to flushing or
non-flushing library routines.)
-@xref{Always Flush Output}, for information on how to modify
-the @code{g77} source tree so that a version of @code{libg2c}
-can be built and installed with the @code{ALWAYS_FLUSH} macro defined.
+Some Fortran programs require output
+(writes) to be flushed to the operating system (under UNIX,
+via the @code{fflush()} library call) so that errors,
+such as disk full, are immediately flagged via the relevant
+@code{ERR=} and @code{IOSTAT=} mechanism, instead of such
+errors being flagged later as subsequent writes occur, forcing
+the previously written data to disk, or when the file is
+closed.
+
+Essentially, the difference can be viewed as synchronous error
+reporting (immediate flagging of errors during writes) versus
+asynchronous, or, more precisely, buffered error reporting
+(detection of errors might be delayed).
+
+@code{libg2c} supports flagging write errors immediately when
+it is built with the @code{ALWAYS_FLUSH} macro defined.
+This results in a @code{libg2c} that runs slower, sometimes
+quite a bit slower, under certain circumstances---for example,
+accessing files via the networked file system NFS---but the
+effect can be more reliable, robust file I/O.
+
+If you know that Fortran programs requiring this level of precision
+of error reporting are to be compiled using the
+version of @command{g77} you are building, you might wish to
+modify the @command{g77} source tree so that the version of
+@code{libg2c} is built with the @code{ALWAYS_FLUSH} macro
+defined, enabling this behavior.
+
+To do this, find this line in @file{@value{path-libf2c}/f2c.h} in
+your @command{g77} source tree:
+
+@example
+/* #define ALWAYS_FLUSH */
+@end example
+
+Remove the leading @samp{/*@w{ }},
+so the line begins with @samp{#define},
+and the trailing @samp{@w{ }*/}.
+
+Then build or rebuild @command{g77} as appropriate.
@node Large File Unit Numbers
@subsection Large File Unit Numbers
@@ -10433,17 +7748,41 @@ macro named @code{MXUNIT}.
If you can easily change your program to use unit numbers
in the range 0 through 99, you should do so.
-Otherwise, see @ref{Larger File Unit Numbers}, for information on how
-to change @code{MXUNIT} in @code{libg2c} so you can build and
-install a new version of @code{libg2c} that supports the larger
-unit numbers you need.
+As distributed, whether as part of @command{f2c} or @command{g77},
+@code{libf2c} accepts file unit numbers only in the range
+0 through 99.
+For example, a statement such as @samp{WRITE (UNIT=100)} causes
+a run-time crash in @code{libf2c}, because the unit number,
+100, is out of range.
-@emph{Note:} While @code{libg2c} places a limit on the range
-of Fortran file-unit numbers, the underlying library and operating
-system might impose different kinds of limits.
-For example, some systems limit the number of files simultaneously
-open by a running program.
-Information on how to increase these limits should be found
+If you know that Fortran programs at your installation require
+the use of unit numbers higher than 99, you can change the
+value of the @code{MXUNIT} macro, which represents the maximum unit
+number, to an appropriately higher value.
+
+To do this, edit the file @file{@value{path-libf2c}/libI77/fio.h} in your
+@command{g77} source tree, changing the following line:
+
+@example
+#define MXUNIT 100
+@end example
+
+Change the line so that the value of @code{MXUNIT} is defined to be
+at least one @emph{greater} than the maximum unit number used by
+the Fortran programs on your system.
+
+(For example, a program that does @samp{WRITE (UNIT=255)} would require
+@code{MXUNIT} set to at least 256 to avoid crashing.)
+
+Then build or rebuild @command{g77} as appropriate.
+
+@emph{Note:} Changing this macro has @emph{no} effect on other limits
+your system might place on the number of files open at the same time.
+That is, the macro might allow a program to do @samp{WRITE (UNIT=100)},
+but the library and operating system underlying @code{libf2c} might
+disallow it if many other files have already been opened (via @code{OPEN} or
+implicitly via @code{READ}, @code{WRITE}, and so on).
+Information on how to increase these other limits should be found
in your system's documentation.
@node Floating-point precision
@@ -10456,26 +7795,31 @@ in your system's documentation.
@cindex x86 floating-point
If your program depends on exact IEEE 754 floating-point handling it may
help on some systems---specifically x86 or m68k hardware---to use
-the @samp{-ffloat-store} option or to reset the precision flag on the
+the @option{-ffloat-store} option or to reset the precision flag on the
floating-point unit.
@xref{Optimize Options}.
However, it might be better simply to put the FPU into double precision
-mode and not take the performance hit of @samp{-ffloat-store}. On x86
+mode and not take the performance hit of @option{-ffloat-store}. On x86
and m68k GNU systems you can do this with a technique similar to that
for turning on floating-point exceptions
(@pxref{Floating-point Exception Handling}).
-The control word could be set to double precision by
-replacing the @code{__setfpucw} call with one like this:
+The control word could be set to double precision by some code like this
+one:
@smallexample
- __setfpucw ((_FPU_DEFAULT & ~_FPU_EXTENDED) | _FPU_DOUBLE);
+#include <fpu_control.h>
+@{
+ fpu_control_t cw = (_FPU_DEFAULT & ~_FPU_EXTENDED) | _FPU_DOUBLE;
+ _FPU_SETCW(cw);
+@}
@end smallexample
(It is not clear whether this has any effect on the operation of the GNU
maths library, but we have no evidence of it causing trouble.)
Some targets (such as the Alpha) may need special options for full IEEE
conformance.
-@xref{Submodel Options,,Hardware Models and Configurations,gcc,Using and Porting GNU CC}.
+@xref{Submodel Options,,Hardware Models and Configurations,gcc,Using
+the GNU Compiler Collection (GCC)}.
@node Inconsistent Calling Sequences
@subsection Inconsistent Calling Sequences
@@ -10486,10 +7830,10 @@ conformance.
@cindex x86 FPU stack
Code containing inconsistent calling sequences in the same file is
normally rejected---see @ref{GLOBALS}.
-(Use, say, @code{ftnchek} to ensure
+(Use, say, @command{ftnchek} to ensure
consistency across source files.
@xref{f2c Skeletons and Prototypes,,
-Generating Skeletons and Prototypes with @code{f2c}}.)
+Generating Skeletons and Prototypes with @command{f2c}}.)
Mysterious errors, which may appear to be code generation problems, can
appear specifically on the x86 architecture with some such
@@ -10530,11 +7874,11 @@ Fortran code developed with those compilers depends on it.
It is safer (and probably
would produce a faster program) to find the variables and arrays that
need such initialization and provide it explicitly via @code{DATA}, so that
-@samp{-finit-local-zero} is not needed.
+@option{-finit-local-zero} is not needed.
-Consider using @samp{-Wuninitialized} (which requires @samp{-O}) to
+Consider using @option{-Wuninitialized} (which requires @option{-O}) to
find likely candidates, but
-do not specify @samp{-finit-local-zero} or @samp{-fno-automatic},
+do not specify @option{-finit-local-zero} or @option{-fno-automatic},
or this technique won't work.
@cindex -fno-automatic option
@@ -10552,12 +7896,12 @@ This might cause a buggy program to appear to work better.
If so, rather than relying on this command-line option (and hoping all
compilers provide the equivalent one), add @code{SAVE}
statements to some or all program unit sources, as appropriate.
-Consider using @samp{-Wuninitialized} (which requires @samp{-O})
+Consider using @option{-Wuninitialized} (which requires @option{-O})
to find likely candidates, but
-do not specify @samp{-finit-local-zero} or @samp{-fno-automatic},
+do not specify @option{-finit-local-zero} or @option{-fno-automatic},
or this technique won't work.
-The default is @samp{-fautomatic}, which tells @code{g77} to try
+The default is @option{-fautomatic}, which tells @command{g77} to try
and put variables and arrays on the stack (or in fast registers)
where possible and reasonable.
This tends to make programs faster.
@@ -10573,7 +7917,7 @@ Examples include local variables and arrays not given the
@code{SAVE} attribute in procedures declared @code{RECURSIVE},
and local arrays declared with non-constant bounds (automatic
arrays).
-Currently, @code{g77} supports only automatic arrays, not
+Currently, @command{g77} supports only automatic arrays, not
@code{RECURSIVE} procedures or other means of explicitly
specifying that variables or arrays are automatic.
@@ -10582,7 +7926,7 @@ specifying that variables or arrays are automatic.
@item -f@var{group}-intrinsics-hide
Change the source code to use @code{EXTERNAL} for any external procedure
that might be the name of an intrinsic.
-It is easy to find these using @samp{-f@var{group}-intrinsics-disable}.
+It is easy to find these using @option{-f@var{group}-intrinsics-disable}.
@end table
@node Faster Programs
@@ -10590,8 +7934,8 @@ It is easy to find these using @samp{-f@var{group}-intrinsics-disable}.
@cindex speed, of programs
@cindex programs, speeding up
-Aside from the usual @code{gcc} options, such as @samp{-O},
-@samp{-ffast-math}, and so on, consider trying some of the
+Aside from the usual @command{gcc} options, such as @option{-O},
+@option{-ffast-math}, and so on, consider trying some of the
following approaches to speed up your program (once you get
it working).
@@ -10678,25 +8022,25 @@ possible requirement, which is compiler-independent on a given platform.)
@item
@cindex -malign-double option
@cindex options, -malign-double
-Use the (x86-specific) @samp{-malign-double} option when compiling
+Use the (x86-specific) @option{-malign-double} option when compiling
programs for the Pentium and Pentium Pro architectures (called 586
-and 686 in the @code{gcc} configuration subsystem).
-The warning about this in the @code{gcc} manual isn't
+and 686 in the @command{gcc} configuration subsystem).
+The warning about this in the @command{gcc} manual isn't
generally relevant to Fortran,
but using it will force @code{COMMON} to be padded if necessary to align
@code{DOUBLE PRECISION} data.
When @code{DOUBLE PRECISION} data is forcibly aligned
-in @code{COMMON} by @code{g77} due to specifying @samp{-malign-double},
-@code{g77} issues a warning about the need to
+in @code{COMMON} by @command{g77} due to specifying @option{-malign-double},
+@command{g77} issues a warning about the need to
insert padding.
In this case, each and every program unit that uses
the same @code{COMMON} area
must specify the same layout of variables and their types
for that area
-and be compiled with @samp{-malign-double} as well.
-@code{g77} will issue warnings in each case,
+and be compiled with @option{-malign-double} as well.
+@command{g77} will issue warnings in each case,
but as long as every program unit using that area
is compiled with the same warnings,
the resulting object files should work when linked together
@@ -10718,81 +8062,82 @@ to obtain the optimal alignment.
@end itemize
Progress is being made on making this work
-``out of the box'' on future versions of @code{g77},
-@code{gcc}, and some of the relevant operating systems
+``out of the box'' on future versions of @command{g77},
+@command{gcc}, and some of the relevant operating systems
(such as GNU/Linux).
@cindex alignment testing
@cindex testing alignment
A package that tests the degree to which a Fortran compiler
-(such as @code{g77})
+(such as @command{g77})
aligns 64-bit floating-point variables and arrays
is available at @uref{ftp://alpha.gnu.org/gnu/g77/align/}.
@node Prefer Automatic Uninitialized Variables
@subsection Prefer Automatic Uninitialized Variables
-If you're using @samp{-fno-automatic} already, you probably
-should change your code to allow compilation with @samp{-fautomatic}
+If you're using @option{-fno-automatic} already, you probably
+should change your code to allow compilation with @option{-fautomatic}
(the default), to allow the program to run faster.
-Similarly, you should be able to use @samp{-fno-init-local-zero}
-(the default) instead of @samp{-finit-local-zero}.
+Similarly, you should be able to use @option{-fno-init-local-zero}
+(the default) instead of @option{-finit-local-zero}.
This is because it is rare that every variable affected by these
options in a given program actually needs to
be so affected.
-For example, @samp{-fno-automatic}, which effectively @code{SAVE}s
+For example, @option{-fno-automatic}, which effectively @code{SAVE}s
every local non-automatic variable and array, affects even things like
@code{DO} iteration
variables, which rarely need to be @code{SAVE}d, and this often reduces
run-time performances.
-Similarly, @samp{-fno-init-local-zero} forces such
+Similarly, @option{-fno-init-local-zero} forces such
variables to be initialized to zero---when @code{SAVE}d (such as when
-@samp{-fno-automatic}), this by itself generally affects only
+@option{-fno-automatic}), this by itself generally affects only
startup time for a program, but when not @code{SAVE}d,
it can slow down the procedure every time it is called.
@xref{Overly Convenient Options,,Overly Convenient Command-Line Options},
-for information on the @samp{-fno-automatic} and
-@samp{-finit-local-zero} options and how to convert
+for information on the @option{-fno-automatic} and
+@option{-finit-local-zero} options and how to convert
their use into selective changes in your own code.
@node Avoid f2c Compatibility
@subsection Avoid f2c Compatibility
@cindex -fno-f2c option
@cindex options, -fno-f2c
-@cindex @code{f2c} compatibility
-@cindex compatibility, @code{f2c}
+@cindex @command{f2c} compatibility
+@cindex compatibility, @command{f2c}
If you aren't linking with any code compiled using
-@code{f2c}, try using the @samp{-fno-f2c} option when
+@command{f2c}, try using the @option{-fno-f2c} option when
compiling @emph{all} the code in your program.
(Note that @code{libf2c} is @emph{not} an example of code
-that is compiled using @code{f2c}---it is compiled by a C
-compiler, typically @code{gcc}.)
+that is compiled using @command{f2c}---it is compiled by a C
+compiler, typically @command{gcc}.)
@node Use Submodel Options
@subsection Use Submodel Options
@cindex submodels
-Using an appropriate @samp{-m} option to generate specific code for your
+Using an appropriate @option{-m} option to generate specific code for your
CPU may be worthwhile, though it may mean the executable won't run on
other versions of the CPU that don't support the same instruction set.
-@xref{Submodel Options,,Hardware Models and Configurations,gcc,Using and
-Porting GNU CC}. For instance on an x86 system the compiler might have
+@xref{Submodel Options,,Hardware Models and Configurations,gcc,Using the
+GNU Compiler Collection (GCC)}. For instance on an x86 system the
+compiler might have
been built---as shown by @samp{g77 -v}---for the target
@samp{i386-pc-linux-gnu}, i.e.@: an @samp{i386} CPU@. In that case to
generate code best optimized for a Pentium you could use the option
-@samp{-march=pentium}.
+@option{-march=pentium}.
For recent CPUs that don't have explicit support in the released version
-of @code{gcc}, it @emph{might} still be possible to get improvements
-with certain @samp{-m} options.
+of @command{gcc}, it @emph{might} still be possible to get improvements
+with certain @option{-m} options.
-@samp{-fomit-frame-pointer} can help performance on x86 systems and
+@option{-fomit-frame-pointer} can help performance on x86 systems and
others. It will, however, inhibit debugging on the systems on which it
-is not turned on anyway by @samp{-O}.
+is not turned on anyway by @option{-O}.
@node Trouble
@chapter Known Causes of Trouble with GNU Fortran
@@ -10809,25 +8154,21 @@ Some of these problems are due to bugs in other software, some are
missing features that are too much work to add, and some are places
where people's opinions differ as to what is best.
-Information on bugs that show up when configuring, porting, building,
-or installing @code{g77} is not provided here.
-@xref{Problems Installing}.
-
To find out about major bugs discovered in the current release and
possible workarounds for them, see
@uref{ftp://alpha.gnu.org/g77.plan}.
(Note that some of this portion of the manual is lifted
-directly from the @code{gcc} manual, with minor modifications
-to tailor it to users of @code{g77}.
-Anytime a bug seems to have more to do with the @code{gcc}
-portion of @code{g77}, see
-@ref{Trouble,,Known Causes of Trouble with GNU CC,
-gcc,Using and Porting GNU CC}.)
+directly from the @command{gcc} manual, with minor modifications
+to tailor it to users of @command{g77}.
+Anytime a bug seems to have more to do with the @command{gcc}
+portion of @command{g77}, see
+@ref{Trouble,,Known Causes of Trouble with GCC,
+gcc,Using the GNU Compiler Collection (GCC)}.)
@menu
* But-bugs:: Bugs really in other programs or elsewhere.
-* Known Bugs:: Bugs known to be in this version of @code{g77}.
+* Known Bugs:: Bugs known to be in this version of @command{g77}.
* Missing Features:: Features we already know we want to add later.
* Disappointments:: Regrettable things we can't change.
* Non-bugs:: Things we think are right, but some others disagree.
@@ -10840,23 +8181,23 @@ gcc,Using and Porting GNU CC}.)
@cindex but-bugs
These are bugs to which the maintainers often have to reply,
-``but that isn't a bug in @code{g77}@dots{}''.
+``but that isn't a bug in @command{g77}@dots{}''.
Some of these already are fixed in new versions of other
software; some still need to be fixed; some are problems
-with how @code{g77} is installed or is being used;
+with how @command{g77} is installed or is being used;
some are the result of bad hardware that causes software
to misbehave in sometimes bizarre ways;
some just cannot be addressed at this time until more
is known about the problem.
-Please don't re-report these bugs to the @code{g77} maintainers---if
+Please don't re-report these bugs to the @command{g77} maintainers---if
you must remind someone how important it is to you that the problem
be fixed, talk to the people responsible for the other products
identified below, but preferably only after you've tried the
latest versions of those products.
-The @code{g77} maintainers have their hands full working on
-just fixing and improving @code{g77}, without serving as a
-clearinghouse for all bugs that happen to affect @code{g77}
+The @command{g77} maintainers have their hands full working on
+just fixing and improving @command{g77}, without serving as a
+clearinghouse for all bugs that happen to affect @command{g77}
users.
@xref{Collected Fortran Wisdom}, for information on behavior
@@ -10912,7 +8253,7 @@ problem.
In particular, on systems other than those running the Linux
kernel, the message might appear somewhat or very different,
as it will if the error manifests itself while running a
-program other than the @code{g77} compiler.
+program other than the @command{g77} compiler.
For example,
it will appear somewhat different when running your program,
when running Emacs, and so on.
@@ -10936,37 +8277,37 @@ a reference to it in future versions of this manual.
@cindex unresolved reference (various)
@cindex linking error for user code
@cindex code, user
-@cindex @code{ld}, error linking user code
-@cindex @code{ld}, can't find strange names
+@cindex @command{ld}, error linking user code
+@cindex @command{ld}, can't find strange names
On some systems, perhaps just those with out-of-date (shared?)
-libraries, unresolved-reference errors happen when linking @code{g77}-compiled
-programs (which should be done using @code{g77}).
+libraries, unresolved-reference errors happen when linking @command{g77}-compiled
+programs (which should be done using @command{g77}).
-If this happens to you, try appending @samp{-lc} to the command you
+If this happens to you, try appending @option{-lc} to the command you
use to link the program, e.g. @samp{g77 foo.f -lc}.
-@code{g77} already specifies @samp{-lg2c -lm} when it calls the linker,
-but it cannot also specify @samp{-lc} because not all systems have a
+@command{g77} already specifies @samp{-lg2c -lm} when it calls the linker,
+but it cannot also specify @option{-lc} because not all systems have a
file named @file{libc.a}.
It is unclear at this point whether there are legitimately installed
systems where @samp{-lg2c -lm} is insufficient to resolve code produced
-by @code{g77}.
+by @command{g77}.
@cindex undefined reference (_main)
@cindex linking error, user code
-@cindex @code{ld}, error linking user code
+@cindex @command{ld}, error linking user code
@cindex code, user
-@cindex @code{ld}, can't find @samp{_main}
+@cindex @command{ld}, can't find @samp{_main}
If your program doesn't link due to unresolved references to names
-like @samp{_main}, make sure you're using the @code{g77} command to do the
+like @samp{_main}, make sure you're using the @command{g77} command to do the
link, since this command ensures that the necessary libraries are
-loaded by specifying @samp{-lg2c -lm} when it invokes the @code{gcc}
+loaded by specifying @samp{-lg2c -lm} when it invokes the @command{gcc}
command to do the actual link.
-(Use the @samp{-v} option to discover
-more about what actually happens when you use the @code{g77} and @code{gcc}
+(Use the @option{-v} option to discover
+more about what actually happens when you use the @command{g77} and @command{gcc}
commands.)
-Also, try specifying @samp{-lc} as the last item on the @code{g77}
+Also, try specifying @option{-lc} as the last item on the @command{g77}
command line, in case that helps.
@node Large Common Blocks
@@ -10974,30 +8315,30 @@ command line, in case that helps.
@cindex common blocks, large
@cindex large common blocks
@cindex linking, errors
-@cindex @code{ld}, errors
+@cindex @command{ld}, errors
@cindex errors, linker
On some older GNU/Linux systems, programs with common blocks larger
than 16MB cannot be linked without some kind of error
message being produced.
-This is a bug in older versions of @code{ld}, fixed in
+This is a bug in older versions of @command{ld}, fixed in
more recent versions of @code{binutils}, such as version 2.6.
@node Debugger Problems
@subsection Debugger Problems
-@cindex @code{gdb}, support
-@cindex support, @code{gdb}
-There are some known problems when using @code{gdb} on code
-compiled by @code{g77}.
+@cindex @command{gdb}, support
+@cindex support, @command{gdb}
+There are some known problems when using @command{gdb} on code
+compiled by @command{g77}.
Inadequate investigation as of the release of 0.5.16 results in not
knowing which products are the culprit, but @file{gdb-4.14} definitely
crashes when, for example, an attempt is made to print the contents
of a @code{COMPLEX(KIND=2)} dummy array, on at least some GNU/Linux
machines, plus some others.
Attempts to access assumed-size arrays are
-also known to crash recent versions of @code{gdb}.
-(@code{gdb}'s Fortran support was done for a different compiler
-and isn't properly compatible with @code{g77}.)
+also known to crash recent versions of @command{gdb}.
+(@command{gdb}'s Fortran support was done for a different compiler
+and isn't properly compatible with @command{g77}.)
@node NeXTStep Problems
@subsection NeXTStep Problems
@@ -11016,7 +8357,7 @@ common) with the @samp{UNIX STACK} segment.
This leads to all sorts of trouble, from the executable simply not
executing, to bus errors.
-The NeXTStep command line tool @code{ebadexec} points to
+The NeXTStep command line tool @command{ebadexec} points to
the problem as follows:
@smallexample
@@ -11057,7 +8398,7 @@ not enough.)
@subsection Stack Overflow
@cindex stack, overflow
@cindex segmentation violation
-@code{g77} code might fail at runtime (probably with a ``segmentation
+@command{g77} code might fail at runtime (probably with a ``segmentation
violation'') due to overflowing the stack.
This happens most often on systems with an environment
that provides substantially more heap space (for use
@@ -11066,19 +8407,36 @@ space.
Often this can be cured by
increasing or removing your shell's limit on stack usage, typically
-using @kbd{limit stacksize} (in @code{csh} and derivatives) or
-@kbd{ulimit -s} (in @code{sh} and derivatives).
+using @kbd{limit stacksize} (in @command{csh} and derivatives) or
+@kbd{ulimit -s} (in @command{sh} and derivatives).
Increasing the allowed stack size might, however, require
changing some operating system or system configuration parameters.
You might be able to work around the problem by compiling with the
-@samp{-fno-automatic} option to reduce stack usage, probably at the
+@option{-fno-automatic} option to reduce stack usage, probably at the
expense of speed.
-@xref{Maximum Stackable Size}, for information on patching
-@code{g77} to use different criteria for placing local
-non-automatic variables and arrays on the stack.
+@command{g77}, on most machines, puts many variables and arrays on the stack
+where possible, and can be configured (by changing
+@code{FFECOM_sizeMAXSTACKITEM} in @file{@value{path-g77}/com.c}) to force
+smaller-sized entities into static storage (saving
+on stack space) or permit larger-sized entities to be put on the
+stack (which can improve run-time performance, as it presents
+more opportunities for the GBE to optimize the generated code).
+
+@emph{Note:} Putting more variables and arrays on the stack
+might cause problems due to system-dependent limits on stack size.
+Also, the value of @code{FFECOM_sizeMAXSTACKITEM} has no
+effect on automatic variables and arrays.
+@xref{But-bugs}, for more information.
+@emph{Note:} While @code{libg2c} places a limit on the range
+of Fortran file-unit numbers, the underlying library and operating
+system might impose different kinds of limits.
+For example, some systems limit the number of files simultaneously
+open by a running program.
+Information on how to increase these limits should be found
+in your system's documentation.
@cindex automatic arrays
@cindex arrays, automatic
@@ -11086,12 +8444,12 @@ However, if your program uses large automatic arrays
(for example, has declarations like @samp{REAL A(N)} where
@samp{A} is a local array and @samp{N} is a dummy or
@code{COMMON} variable that can have a large value),
-neither use of @samp{-fno-automatic},
-nor changing the cut-off point for @code{g77} for using the stack,
+neither use of @option{-fno-automatic},
+nor changing the cut-off point for @command{g77} for using the stack,
will solve the problem by changing the placement of these
large arrays, as they are @emph{necessarily} automatic.
-@code{g77} currently provides no means to specify that
+@command{g77} currently provides no means to specify that
automatic arrays are to be allocated on the heap instead
of the stack.
So, other than increasing the stack size, your best bet is to
@@ -11108,8 +8466,8 @@ simply too large for the system, or buggy.)
@subsection Nothing Happens
@cindex nothing happens
@cindex naming programs
-@cindex @code{test} programs
-@cindex programs, @code{test}
+@cindex @command{test} programs
+@cindex programs, @command{test}
It is occasionally reported that a ``simple'' program,
such as a ``Hello, World!'' program, does nothing when
it is run, even though the compiler reported no errors,
@@ -11117,7 +8475,7 @@ despite the program containing nothing other than a
simple @code{PRINT} statement.
This most often happens because the program has been
-compiled and linked on a UNIX system and named @code{test},
+compiled and linked on a UNIX system and named @command{test},
though other names can lead to similarly unexpected
run-time behavior on various systems.
@@ -11135,7 +8493,7 @@ sh#
Under UNIX and many other system, a simple command name
invokes a searching mechanism that might well not choose
the program located in the current working directory if
-there is another alternative (such as the @code{test}
+there is another alternative (such as the @command{test}
command commonly installed on UNIX systems).
The reliable way to invoke a program you just linked in
@@ -11152,8 +8510,8 @@ Users who encounter this problem should take the time to
read up on how their shell searches for commands, how to
set their search path, and so on.
The relevant UNIX commands to learn about include
-@code{man}, @code{info} (on GNU systems), @code{setenv} (or
-@code{set} and @code{env}), @code{which}, and @code{find}.
+@command{man}, @command{info} (on GNU systems), @command{setenv} (or
+@command{set} and @command{env}), @command{which}, and @command{find}.
@node Strange Behavior at Run Time
@subsection Strange Behavior at Run Time
@@ -11161,7 +8519,7 @@ The relevant UNIX commands to learn about include
@cindex bus error
@cindex overwritten data
@cindex data, overwritten
-@code{g77} code might fail at runtime with ``segmentation violation'',
+@command{g77} code might fail at runtime with ``segmentation violation'',
``bus error'', or even something as subtle as a procedure call
overwriting a variable or array element that it is not supposed
to touch.
@@ -11173,7 +8531,7 @@ themselves as @emph{visible} problems some time later.
Overflowing the bounds of an array---usually by writing beyond
the end of it---is one of two kinds of bug that often occurs
in Fortran code.
-(Compile your code with the @samp{-fbounds-check} option
+(Compile your code with the @option{-fbounds-check} option
to catch many of these kinds of errors at program run time.)
The other kind of bug is a mismatch between the actual arguments
@@ -11188,7 +8546,7 @@ That is, these bugs can be quite sensitive to data, including
data representing the placement of other data in memory (that is,
pointers, such as the placement of stack frames in memory).
-@code{g77} now offers the
+@command{g77} now offers the
ability to catch and report some of these problems at compile, link, or
run time, such as by generating code to detect references to
beyond the bounds of most arrays (except assumed-size arrays),
@@ -11226,18 +8584,18 @@ avoid picking up the @code{BSD} library from @file{/usr/ucblib}.
@cindex inconsistent floating-point results
@cindex results, inconsistent
Some programs appear to produce inconsistent floating-point
-results compiled by @code{g77} versus by other compilers.
+results compiled by @command{g77} versus by other compilers.
Often the reason for this behavior is the fact that floating-point
values are represented on almost all Fortran systems by
@emph{approximations}, and these approximations are inexact
even for apparently simple values like 0.1, 0.2, 0.3, 0.4, 0.6,
0.7, 0.8, 0.9, 1.1, and so on.
-Most Fortran systems, including all current ports of @code{g77},
+Most Fortran systems, including all current ports of @command{g77},
use binary arithmetic to represent these approximations.
Therefore, the exact value of any floating-point approximation
-as manipulated by @code{g77}-compiled code is representable by
+as manipulated by @command{g77}-compiled code is representable by
adding some combination of the values 1.0, 0.5, 0.25, 0.125, and
so on (just keep dividing by two) through the precision of the
fraction (typically around 23 bits for @code{REAL(KIND=1)}, 52 for
@@ -11277,13 +8635,13 @@ PRINT *, 0.2
END
@end smallexample
-When compiled by @code{g77}, the above program might output
+When compiled by @command{g77}, the above program might output
@samp{0.20000003}, while another compiler might produce a
executable that outputs @samp{0.2}.
This particular difference is due to the fact that, currently,
conversion of floating-point values by the @code{libg2c} library,
-used by @code{g77}, handles only double-precision values.
+used by @command{g77}, handles only double-precision values.
Since @samp{0.2} in the program is a single-precision value, it
is converted to double precision (still in binary notation)
@@ -11324,7 +8682,7 @@ PRINT *, 0.2D0
END
@end smallexample
-Future versions of @code{g77} and/or @code{libg2c} might convert
+Future versions of @command{g77} and/or @code{libg2c} might convert
single-precision values directly to decimal,
instead of converting them to double precision first.
This would tend to result in output that is more consistent
@@ -11362,7 +8720,7 @@ as ``spills''.
@cindex spills of floating-point results
@cindex 80-bit spills
@cindex truncation, of floating-point values
-(@emph{Note:} @code{g77} specifically, and @code{gcc} generally,
+(@emph{Note:} @command{g77} specifically, and @command{gcc} generally,
does arbitrarily truncate 80-bit results during spills
as of this writing.
It is not yet clear whether a future version of
@@ -11380,7 +8738,7 @@ documentation about this.
@node Missing Features
@section Missing Features
-This section lists features we know are missing from @code{g77},
+This section lists features we know are missing from @command{g77},
and which we want to add someday.
(There is no priority implied in the ordering below.)
@@ -11452,7 +8810,7 @@ Debugging:
@node Better Source Model
@subsection Better Source Model
-@code{g77} needs to provide, as the default source-line model,
+@command{g77} needs to provide, as the default source-line model,
a ``pure visual'' mode, where
the interpretation of a source program in this mode can be accurately
determined by a user looking at a traditionally displayed rendition
@@ -11470,7 +8828,7 @@ to not treat lines with tabs as if they were infinitely long---instead,
they would end at column 72 just as if the tabs were replaced
by spaces in the canonical way.
-As part of this, provide common alternate models (Digital, @code{f2c},
+As part of this, provide common alternate models (Digital, @command{f2c},
and so on) via command-line options.
This includes allowing arbitrarily long
lines for free-form source as well as fixed-form source and providing
@@ -11478,7 +8836,7 @@ various limits and diagnostics as appropriate.
@cindex sequence numbers
@cindex columns 73 through 80
-Also, @code{g77} should offer, perhaps even default to, warnings
+Also, @command{g77} should offer, perhaps even default to, warnings
when characters beyond the last valid column are anything other
than spaces.
This would mean code with ``sequence numbers'' in columns 73 through 80
@@ -11487,14 +8845,14 @@ but one of the most frequent bugs encountered by new users is
accidentally writing fixed-form source code into and beyond
column 73.
So, maybe the users of old code would be able to more easily handle
-having to specify, say, a @samp{-Wno-col73to80} option.
+having to specify, say, a @option{-Wno-col73to80} option.
@node Fortran 90 Support
@subsection Fortran 90 Support
@cindex Fortran 90, support
@cindex support, Fortran 90
-@code{g77} does not support many of the features that
+@command{g77} does not support many of the features that
distinguish Fortran 90 (and, now, Fortran 95) from
ANSI FORTRAN 77.
@@ -11502,14 +8860,14 @@ Some Fortran 90 features are supported, because they
make sense to offer even to die-hard users of F77.
For example, many of them codify various ways F77 has
been extended to meet users' needs during its tenure,
-so @code{g77} might as well offer them as the primary
+so @command{g77} might as well offer them as the primary
way to meet those same needs, even if it offers compatibility
with one or more of the ways those needs were met
by other F77 compilers in the industry.
Still, many important F90 features are not supported,
because no attempt has been made to research each and
-every feature and assess its viability in @code{g77}.
+every feature and assess its viability in @command{g77}.
In the meantime, users who need those features must
use Fortran 90 compilers anyway, and the best approach
to adding some F90 features to GNU Fortran might well be
@@ -11520,19 +8878,19 @@ to fund a comprehensive project to create GNU Fortran 95.
@cindex PARAMETER statement
@cindex statements, PARAMETER
-@code{g77} doesn't allow intrinsics in @code{PARAMETER} statements.
+@command{g77} doesn't allow intrinsics in @code{PARAMETER} statements.
This feature is considered to be absolutely vital, even though it
is not standard-conforming, and is scheduled for version 0.6.
-Related to this, @code{g77} doesn't allow non-integral
+Related to this, @command{g77} doesn't allow non-integral
exponentiation in @code{PARAMETER} statements, such as
@samp{PARAMETER (R=2**.25)}.
-It is unlikely @code{g77} will ever support this feature,
+It is unlikely @command{g77} will ever support this feature,
as doing it properly requires complete emulation of
a target computer's floating-point facilities when
-building @code{g77} as a cross-compiler.
-But, if the @code{gcc} back end is enhanced to provide
-such a facility, @code{g77} will likely use that facility
+building @command{g77} as a cross-compiler.
+But, if the @command{gcc} back end is enhanced to provide
+such a facility, @command{g77} will likely use that facility
in implementing this feature soon afterwards.
@node Arbitrary Concatenation
@@ -11541,7 +8899,7 @@ in implementing this feature soon afterwards.
@cindex CHARACTER*(*)
@cindex run-time, dynamic allocation
-@code{g77} doesn't support arbitrary operands for concatenation
+@command{g77} doesn't support arbitrary operands for concatenation
in contexts where run-time allocation is required.
For example:
@@ -11564,7 +8922,7 @@ are not supported.
@cindex recursion, lack of
@cindex lack of recursion
-@code{g77} doesn't support the @code{RECURSIVE} keyword that
+@command{g77} doesn't support the @code{RECURSIVE} keyword that
F90 compilers do.
Nor does it provide any means for compiling procedures
designed to do recursion.
@@ -11585,27 +8943,27 @@ but the result is not pretty.
@cindex Toolpack
@cindex Netlib
-Some compilers, such as @code{f2c}, have an option (@samp{-r8},
-@samp{-qrealsize=8} or
+Some compilers, such as @command{f2c}, have an option (@option{-r8},
+@option{-qrealsize=8} or
similar) that provides automatic treatment of @code{REAL}
entities such that they have twice the storage size, and
a corresponding increase in the range and precision, of what
would normally be the @code{REAL(KIND=1)} (default @code{REAL}) type.
(This affects @code{COMPLEX} the same way.)
-They also typically offer another option (@samp{-i8}) to increase
+They also typically offer another option (@option{-i8}) to increase
@code{INTEGER} entities so they are twice as large
(with roughly twice as much range).
(There are potential pitfalls in using these options.)
-@code{g77} does not yet offer any option that performs these
+@command{g77} does not yet offer any option that performs these
kinds of transformations.
Part of the problem is the lack of detailed specifications regarding
exactly how these options affect the interpretation of constants,
intrinsics, and so on.
-Until @code{g77} addresses this need, programmers could improve
+Until @command{g77} addresses this need, programmers could improve
the portability of their code by modifying it to not require
compile-time options to produce correct results.
Some free tools are available which may help, specifically
@@ -11624,7 +8982,7 @@ alleviate this problem).
@cindex @code{LOGICAL*1} support
@cindex types, @code{LOGICAL*1}
-@code{g77} doesn't fully support @code{INTEGER*2}, @code{LOGICAL*1},
+@command{g77} doesn't fully support @code{INTEGER*2}, @code{LOGICAL*1},
and similar.
Version 0.6 will provide full support for this very
popular set of features.
@@ -11638,7 +8996,7 @@ for them.
@cindex types, @code{REAL*16}
@cindex @code{INTEGER*8} support
@cindex types, @code{INTEGER*8}
-@code{g77} doesn't support @code{INTEGER}, @code{REAL}, and @code{COMPLEX} equivalents
+@command{g77} doesn't support @code{INTEGER}, @code{REAL}, and @code{COMPLEX} equivalents
for @emph{all} applicable back-end-supported types (@code{char}, @code{short int},
@code{int}, @code{long int}, @code{long long int}, and @code{long double}).
This means providing intrinsic support, and maybe constant
@@ -11656,11 +9014,11 @@ This is scheduled for version 0.6.
@cindex @code{DIMENSION} statement
@cindex statements, @code{DIMENSION}
-@code{g77} doesn't support more general expressions to dimension
+@command{g77} doesn't support more general expressions to dimension
arrays, such as array element references, function
references, etc.
-For example, @code{g77} currently does not accept the following:
+For example, @command{g77} currently does not accept the following:
@smallexample
SUBROUTINE X(M, N)
@@ -11673,19 +9031,19 @@ INTEGER N(10), M(N(2), N(1))
@cindex statements, POINTER
@cindex Cray pointers
-@code{g77} doesn't support pointers or allocatable objects
+@command{g77} doesn't support pointers or allocatable objects
(other than automatic arrays).
This set of features is
probably considered just behind intrinsics
in @code{PARAMETER} statements on the list of large,
-important things to add to @code{g77}.
+important things to add to @command{g77}.
In the meantime, consider using the @code{INTEGER(KIND=7)}
declaration to specify that a variable must be
able to hold a pointer.
This construct is not portable to other non-GNU compilers,
but it is portable to all machines GNU Fortran supports
-when @code{g77} is used.
+when @command{g77} is used.
@xref{Functions and Subroutines}, for information on
@code{%VAL()}, @code{%REF()}, and @code{%DESCR()}
@@ -11695,14 +9053,14 @@ procedures written in languages other than Fortran.
@node Sensible Non-standard Constructs
@subsection Sensible Non-standard Constructs
-@code{g77} rejects things other compilers accept,
+@command{g77} rejects things other compilers accept,
like @samp{INTRINSIC SQRT,SQRT}.
As time permits in the future, some of these things that are easy for
humans to read and write and unlikely to be intended to mean something
-else will be accepted by @code{g77} (though @samp{-fpedantic} should
+else will be accepted by @command{g77} (though @option{-fpedantic} should
trigger warnings about such non-standard constructs).
-Until @code{g77} no longer gratuitously rejects sensible code,
+Until @command{g77} no longer gratuitously rejects sensible code,
you might as well fix your code
to be more standard-conforming and portable.
@@ -11725,18 +9083,18 @@ from also specifying the @code{SAVE} statement, by itself,
to indicate that all local variables and arrays are to
have the @code{SAVE} attribute.
-For this reason, @code{g77} already has been changed to
+For this reason, @command{g77} already has been changed to
allow this combination, because although the general
problem of gratuitously rejecting unambiguous and
-``safe'' constructs still exists in @code{g77}, this
+``safe'' constructs still exists in @command{g77}, this
particular construct was deemed useful enough that
-it was worth fixing @code{g77} for just this case.
+it was worth fixing @command{g77} for just this case.
So, while there is no need to change your code
to avoid using this particular construct, there
might be other, equally appropriate but non-standard
constructs, that you shouldn't have to stop using
-just because @code{g77} (or any other compiler)
+just because @command{g77} (or any other compiler)
gratuitously rejects it.
Until the general problem is solved, if you have
@@ -11744,7 +9102,7 @@ any such construct you believe is worthwhile
using (e.g. not just an arbitrary, redundant
specification of an attribute), please submit a
bug report with an explanation, so we can consider
-fixing @code{g77} just for cases like yours.
+fixing @command{g77} just for cases like yours.
@node READONLY Keyword
@subsection @code{READONLY} Keyword
@@ -11759,12 +9117,12 @@ and perhaps to trigger a fatal diagnostic
if a @code{WRITE} or @code{PRINT}
to such a unit is attempted.
-@emph{Note:} It is not sufficient for @code{g77} and @code{libg2c}
+@emph{Note:} It is not sufficient for @command{g77} and @code{libg2c}
(its version of @code{libf2c})
to assume that @code{READONLY} does not need some kind of explicit support
at run time,
due to UNIX systems not (generally) needing it.
-@code{g77} is not just a UNIX-based compiler!
+@command{g77} is not just a UNIX-based compiler!
Further, mounting of non-UNIX filesystems on UNIX systems
(such as via NFS)
@@ -11777,7 +9135,7 @@ keyword.)
@node FLUSH Statement
@subsection @code{FLUSH} Statement
-@code{g77} could perhaps use a @code{FLUSH} statement that
+@command{g77} could perhaps use a @code{FLUSH} statement that
does what @samp{CALL FLUSH} does,
but that supports @samp{*} as the unit designator (same unit as for
@code{PRINT}) and accepts @code{ERR=} and/or @code{IOSTAT=}
@@ -11788,11 +9146,11 @@ specifiers.
@cindex FORMAT statement
@cindex statements, FORMAT
-@code{g77} doesn't support @samp{FORMAT(I<J>)} and the like.
+@command{g77} doesn't support @samp{FORMAT(I<J>)} and the like.
Supporting this requires a significant redesign or replacement
of @code{libg2c}.
-However, @code{g77} does support
+However, @command{g77} does support
this construct when the expression is constant
(as of version 0.5.22).
For example:
@@ -11829,7 +9187,7 @@ when @code{ERR=} and @code{END=} constructs are employed:
@node Explicit Assembler Code
@subsection Explicit Assembler Code
-@code{g77} needs to provide some way, a la @code{gcc}, for @code{g77}
+@command{g77} needs to provide some way, a la @command{gcc}, for @command{g77}
code to specify explicit assembler code.
@node Q Edit Descriptor
@@ -11851,7 +9209,7 @@ A workaround might be using internal I/O or the stream-based intrinsics.
@cindex PARAMETER statement
@cindex statements, PARAMETER
-@code{g77} doesn't accept @samp{PARAMETER I=1}.
+@command{g77} doesn't accept @samp{PARAMETER I=1}.
Supporting this obsolete form of
the @code{PARAMETER} statement would not be particularly hard, as most of the
parsing code is already in place and working.
@@ -11871,7 +9229,7 @@ assigned to it).
@cindex ACCEPT statement
@cindex statements, ACCEPT
-@code{g77} doesn't support the I/O statements @code{TYPE} and
+@command{g77} doesn't support the I/O statements @code{TYPE} and
@code{ACCEPT}.
These are common extensions that should be easy to support,
but also are fairly easy to work around in user code.
@@ -11892,10 +9250,10 @@ replaced by @samp{READ fmt,list}.
@cindex MAP statement
@cindex statements, MAP
-@code{g77} doesn't support @code{STRUCTURE}, @code{UNION}, @code{RECORD},
+@command{g77} doesn't support @code{STRUCTURE}, @code{UNION}, @code{RECORD},
@code{MAP}.
This set of extensions is quite a bit
-lower on the list of large, important things to add to @code{g77}, partly
+lower on the list of large, important things to add to @command{g77}, partly
because it requires a great deal of work either upgrading or
replacing @code{libg2c}.
@@ -11909,9 +9267,9 @@ replacing @code{libg2c}.
@cindex INQUIRE statement
@cindex statements, INQUIRE
-@code{g77} doesn't have support for keywords such as @code{DISP='DELETE'} in
+@command{g77} doesn't have support for keywords such as @code{DISP='DELETE'} in
the @code{OPEN}, @code{CLOSE}, and @code{INQUIRE} statements.
-These extensions are easy to add to @code{g77} itself, but
+These extensions are easy to add to @command{g77} itself, but
require much more work on @code{libg2c}.
@cindex FORM='PRINT'
@@ -11919,15 +9277,15 @@ require much more work on @code{libg2c}.
@cindex carriage control
@pindex asa
@pindex fpr
-@code{g77} doesn't support @code{FORM='PRINT'} or an equivalent to
+@command{g77} doesn't support @code{FORM='PRINT'} or an equivalent to
translate the traditional `carriage control' characters in column 1 of
output to use backspaces, carriage returns and the like. However
programs exist to translate them in output files (or standard output).
-These are typically called either @code{fpr} or @code{asa}. You can get
-a version of @code{asa} from
+These are typically called either @command{fpr} or @command{asa}. You can get
+a version of @command{asa} from
@uref{ftp://sunsite.unc.edu/pub/Linux/devel/lang/fortran} for GNU
systems which will probably build easily on other systems.
-Alternatively, @code{fpr} is in BSD distributions in various archive
+Alternatively, @command{fpr} is in BSD distributions in various archive
sites.
@c (Can both programs can be used in a pipeline,
@@ -11941,7 +9299,7 @@ sites.
@cindex DECODE statement
@cindex statements, DECODE
-@code{g77} doesn't support @code{ENCODE} or @code{DECODE}.
+@command{g77} doesn't support @code{ENCODE} or @code{DECODE}.
These statements are best replaced by READ and WRITE statements
involving internal files (CHARACTER variables and arrays).
@@ -11989,7 +9347,7 @@ with:
@end smallexample
It is entirely possible that @code{ENCODE} and @code{DECODE} will
-be supported by a future version of @code{g77}.
+be supported by a future version of @command{g77}.
@node AUTOMATIC Statement
@subsection @code{AUTOMATIC} Statement
@@ -11998,13 +9356,13 @@ be supported by a future version of @code{g77}.
@cindex automatic variables
@cindex variables, automatic
-@code{g77} doesn't support the @code{AUTOMATIC} statement that
-@code{f2c} does.
+@command{g77} doesn't support the @code{AUTOMATIC} statement that
+@command{f2c} does.
@code{AUTOMATIC} would identify a variable or array
as not being @code{SAVE}'d, which is normally the default,
but which would be especially useful for code that, @emph{generally},
-needed to be compiled with the @samp{-fno-automatic} option.
+needed to be compiled with the @option{-fno-automatic} option.
@code{AUTOMATIC} also would serve as a hint to the compiler that placing
the variable or array---even a very large array--on the stack is acceptable.
@@ -12032,7 +9390,7 @@ should be provided as well.
@node Suppressing Space Padding
@subsection Suppressing Space Padding of Source Lines
-@code{g77} should offer VXT-Fortran-style suppression of virtual
+@command{g77} should offer VXT-Fortran-style suppression of virtual
spaces at the end of a source line
if an appropriate command-line option is specified.
@@ -12046,7 +9404,7 @@ source file, as in the following example:
@end smallexample
@noindent
-@code{g77}, and many other compilers, virtually extend
+@command{g77}, and many other compilers, virtually extend
the continued line through column 72 with spaces that become part
of the character constant, but Digital Fortran normally didn't,
leaving only one space between @samp{MANY} and @samp{SPACES?}
@@ -12058,13 +9416,13 @@ command-line option is specified, apparently due to demand
from readers of the USENET group @file{comp.lang.fortran}
to offer conformance to this widespread practice in the
industry.
-@code{g77} should return the favor by offering conformance
+@command{g77} should return the favor by offering conformance
to Digital's approach to handling the above example.
@node Fortran Preprocessor
@subsection Fortran Preprocessor
-@code{g77} should offer a preprocessor designed specifically
+@command{g77} should offer a preprocessor designed specifically
for Fortran to replace @samp{cpp -traditional}.
There are several out there worth evaluating, at least.
@@ -12082,10 +9440,10 @@ files included via the @code{INCLUDE} directive.
@cindex @code{Shift} intrinsic
@cindex intrinsics, @code{Shift}
-@code{g77} does not allow @code{REAL} and other non-integral types for
+@command{g77} does not allow @code{REAL} and other non-integral types for
arguments to intrinsics like @code{And}, @code{Or}, and @code{Shift}.
-For example, this program is rejected by @code{g77}, because
+For example, this program is rejected by @command{g77}, because
the intrinsic @code{Iand} does not accept @code{REAL} arguments:
@smallexample
@@ -12097,7 +9455,7 @@ END
@node Really Ugly Character Assignments
@subsection Really Ugly Character Assignments
-An option such as @samp{-fugly-char} should be provided
+An option such as @option{-fugly-char} should be provided
to allow
@smallexample
@@ -12115,7 +9473,7 @@ A1 = 'ABCDEFGH'
@node POSIX Standard
@subsection @code{POSIX} Standard
-@code{g77} should support the POSIX standard for Fortran.
+@command{g77} should support the POSIX standard for Fortran.
@node Floating-point Exception Handling
@subsection Floating-point Exception Handling
@@ -12124,7 +9482,7 @@ A1 = 'ABCDEFGH'
@cindex FPE handling
@cindex NaN values
-The @code{gcc} backend and, consequently, @code{g77}, currently provides no
+The @command{gcc} backend and, consequently, @command{g77}, currently provides no
general control over whether or not floating-point exceptions are trapped or
ignored.
(Ignoring them typically results in NaN values being
@@ -12134,18 +9492,20 @@ code, though some targets, such as the Alpha, have code generation
options which change the behaviour.
Most systems provide some C-callable mechanism to change this; this can
-be invoked at startup using @code{gcc}'s @code{constructor} attribute.
+be invoked at startup using @command{gcc}'s @code{constructor} attribute.
For example, just compiling and linking the following C code with your
program will turn on exception trapping for the ``common'' exceptions
-on an x86-based GNU system:
+on a GNU system using glibc 2.2 or newer:
@smallexample
-#include <fpu_control.h>
+#define _GNU_SOURCE 1
+#include <fenv.h>
static void __attribute__ ((constructor))
trapfpe ()
@{
- __setfpucw (_FPU_DEFAULT &
- ~(_FPU_MASK_IM | _FPU_MASK_ZM | _FPU_MASK_OM));
+ /* Enable some exceptions. At startup all exceptions are masked. */
+
+ feenableexcept (FE_INVALID|FE_DIVBYZERO|FE_OVERFLOW);
@}
@end smallexample
@@ -12153,7 +9513,7 @@ A convenient trick is to compile this something like:
@smallexample
gcc -o libtrapfpe.a trapfpe.c
@end smallexample
-and then use it by adding @samp{-trapfpe} to the @code{g77} command line
+and then use it by adding @option{-trapfpe} to the @command{g77} command line
when linking.
@node Nonportable Conversions
@@ -12161,14 +9521,14 @@ when linking.
@cindex nonportable conversions
@cindex conversions, nonportable
-@code{g77} doesn't accept some particularly nonportable,
+@command{g77} doesn't accept some particularly nonportable,
silent data-type conversions such as @code{LOGICAL}
to @code{REAL} (as in @samp{A=.FALSE.}, where @samp{A}
is type @code{REAL}), that other compilers might
quietly accept.
-Some of these conversions are accepted by @code{g77}
-when the @samp{-fugly-logint} option is specified.
+Some of these conversions are accepted by @command{g77}
+when the @option{-fugly-logint} option is specified.
Perhaps it should accept more or all of them.
@node Large Automatic Arrays
@@ -12178,7 +9538,7 @@ Perhaps it should accept more or all of them.
Currently, automatic arrays always are allocated on the stack.
For situations where the stack cannot be made large enough,
-@code{g77} should offer a compiler option that specifies
+@command{g77} should offer a compiler option that specifies
allocation of automatic arrays in heap storage.
@node Support for Threads
@@ -12186,8 +9546,8 @@ allocation of automatic arrays in heap storage.
@cindex threads
@cindex parallel processing
-Neither the code produced by @code{g77} nor the @code{libg2c} library
-are thread-safe, nor does @code{g77} have support for parallel processing
+Neither the code produced by @command{g77} nor the @code{libg2c} library
+are thread-safe, nor does @command{g77} have support for parallel processing
(other than the instruction-level parallelism available on some
processors).
A package such as PVM might help here.
@@ -12197,7 +9557,7 @@ A package such as PVM might help here.
@cindex debug line
@cindex comment line, debug
-An option such as @samp{-fdebug-lines} should be provided
+An option such as @option{-fdebug-lines} should be provided
to turn fixed-form lines beginning with @samp{D}
to be treated as if they began with a space,
instead of as if they began with a @samp{C}
@@ -12206,7 +9566,7 @@ instead of as if they began with a @samp{C}
@node Better Warnings
@subsection Better Warnings
-Because of how @code{g77} generates code via the back end,
+Because of how @command{g77} generates code via the back end,
it doesn't always provide warnings the user wants.
Consider:
@@ -12218,7 +9578,7 @@ END
Currently, the above is not flagged as a case of
using an uninitialized variable,
-because @code{g77} generates a run-time library call that looks,
+because @command{g77} generates a run-time library call that looks,
to the GBE, like it might actually @emph{modify} @samp{A} at run time.
(And, in fact, depending on the previous run-time library call,
it would!)
@@ -12237,7 +9597,7 @@ at least theoretically, and, ultimately, in practice,
for some types of code.
@item
-Have @code{g77} pass a pointer to a temporary
+Have @command{g77} pass a pointer to a temporary
containing a copy of @samp{A},
instead of to @samp{A} itself.
The GBE would then complain about the copy operation
@@ -12248,21 +9608,21 @@ because @samp{A} might then end up living in a register,
which could help with inner loops.
@item
-Have @code{g77} use a GBE construct similar to @code{ADDR_EXPR}
+Have @command{g77} use a GBE construct similar to @code{ADDR_EXPR}
but with extra information on the fact that the
item pointed to won't be modified
(a la @code{const} in C).
Probably the best solution for now, but not quite trivial
to implement in the general case.
-Worth considering after @code{g77} 0.6 is considered
+Worth considering after @command{g77} 0.6 is considered
pretty solid.
@end itemize
@node Gracefully Handle Sensible Bad Code
@subsection Gracefully Handle Sensible Bad Code
-@code{g77} generally should continue processing for
+@command{g77} generally should continue processing for
warnings and recoverable (user) errors whenever possible---that
is, it shouldn't gratuitously make bad or useless code.
@@ -12275,8 +9635,8 @@ END
@end smallexample
@noindent
-When compiling the above with @samp{-ff2c-intrinsics-disable},
-@code{g77} should indeed complain about passing @code{ZABS},
+When compiling the above with @option{-ff2c-intrinsics-disable},
+@command{g77} should indeed complain about passing @code{ZABS},
but it still should compile, instead of rejecting
the entire @code{CALL} statement.
(Some of this is related to improving
@@ -12285,14 +9645,14 @@ the compiler internals to improve how statements are analyzed.)
@node Non-standard Conversions
@subsection Non-standard Conversions
-@samp{-Wconversion} and related should flag places where non-standard
+@option{-Wconversion} and related should flag places where non-standard
conversions are found.
-Perhaps much of this would be part of @samp{-Wugly*}.
+Perhaps much of this would be part of @option{-Wugly*}.
@node Non-standard Intrinsics
@subsection Non-standard Intrinsics
-@code{g77} needs a new option, like @samp{-Wintrinsics}, to warn about use of
+@command{g77} needs a new option, like @option{-Wintrinsics}, to warn about use of
non-standard intrinsics without explicit @code{INTRINSIC} statements for them.
This would help find code that might fail silently when ported to another
compiler.
@@ -12300,14 +9660,14 @@ compiler.
@node Modifying DO Variable
@subsection Modifying @code{DO} Variable
-@code{g77} should warn about modifying @code{DO} variables
+@command{g77} should warn about modifying @code{DO} variables
via @code{EQUIVALENCE}.
(The internal information gathered to produce this warning
might also be useful in setting the
internal ``doiter'' flag for a variable or even array
reference within a loop, since that might produce faster code someday.)
-For example, this code is invalid, so @code{g77} should warn about
+For example, this code is invalid, so @command{g77} should warn about
the invalid assignment to @samp{NOTHER}:
@smallexample
@@ -12320,7 +9680,7 @@ END DO
@node Better Pedantic Compilation
@subsection Better Pedantic Compilation
-@code{g77} needs to support @samp{-fpedantic} more thoroughly,
+@command{g77} needs to support @option{-fpedantic} more thoroughly,
and use it only to generate
warnings instead of rejecting constructs outright.
Have it warn:
@@ -12333,7 +9693,7 @@ syntactic extensions.
@node Warn About Implicit Conversions
@subsection Warn About Implicit Conversions
-@code{g77} needs a @samp{-Wpromotions} option to warn if source code appears
+@command{g77} needs a @option{-Wpromotions} option to warn if source code appears
to expect automatic, silent, and
somewhat dangerous compiler-assisted conversion of @code{REAL(KIND=1)}
constants to @code{REAL(KIND=2)} based on context.
@@ -12349,7 +9709,7 @@ FOO = TZPHI * 3D0
@node Invalid Use of Hollerith Constant
@subsection Invalid Use of Hollerith Constant
-@code{g77} should disallow statements like @samp{RETURN 2HAB},
+@command{g77} should disallow statements like @samp{RETURN 2HAB},
which are invalid in both source forms
(unlike @samp{RETURN (2HAB)},
which probably still makes no sense but at least can
@@ -12360,17 +9720,17 @@ in a way that is a bit difficult to understand.
@node Dummy Array Without Dimensioning Dummy
@subsection Dummy Array Without Dimensioning Dummy
-@code{g77} should complain when a list of dummy arguments containing an
+@command{g77} should complain when a list of dummy arguments containing an
adjustable dummy array does
not also contain every variable listed in the dimension list of the
adjustable array.
-Currently, @code{g77} does complain about a variable that
+Currently, @command{g77} does complain about a variable that
dimensions an array but doesn't appear in any dummy list or @code{COMMON}
area, but this needs to be extended to catch cases where it doesn't appear in
every dummy list that also lists any arrays it dimensions.
-For example, @code{g77} should warn about the entry point @samp{ALT}
+For example, @command{g77} should warn about the entry point @samp{ALT}
below, since it includes @samp{ARRAY} but not @samp{ISIZE} in its
list of arguments:
@@ -12383,7 +9743,7 @@ ENTRY ALT(ARRAY)
@node Invalid FORMAT Specifiers
@subsection Invalid FORMAT Specifiers
-@code{g77} should check @code{FORMAT} specifiers for validity
+@command{g77} should check @code{FORMAT} specifiers for validity
as it does @code{FORMAT} statements.
For example, a diagnostic would be produced for:
@@ -12395,8 +9755,8 @@ PRINT 'HI THERE!' !User meant PRINT *, 'HI THERE!'
@node Ambiguous Dialects
@subsection Ambiguous Dialects
-@code{g77} needs a set of options such as @samp{-Wugly*}, @samp{-Wautomatic},
-@samp{-Wvxt}, @samp{-Wf90}, and so on.
+@command{g77} needs a set of options such as @option{-Wugly*}, @option{-Wautomatic},
+@option{-Wvxt}, @option{-Wf90}, and so on.
These would warn about places in the user's source where ambiguities
are found, helpful in resolving ambiguities in the program's
dialect or dialects.
@@ -12404,13 +9764,13 @@ dialect or dialects.
@node Unused Labels
@subsection Unused Labels
-@code{g77} should warn about unused labels when @samp{-Wunused} is in effect.
+@command{g77} should warn about unused labels when @option{-Wunused} is in effect.
@node Informational Messages
@subsection Informational Messages
-@code{g77} needs an option to suppress information messages (notes).
-@samp{-w} does this but also suppresses warnings.
+@command{g77} needs an option to suppress information messages (notes).
+@option{-w} does this but also suppresses warnings.
The default should be to suppress info messages.
Perhaps info messages should simply be eliminated.
@@ -12418,7 +9778,7 @@ Perhaps info messages should simply be eliminated.
@node Uninitialized Variables at Run Time
@subsection Uninitialized Variables at Run Time
-@code{g77} needs an option to initialize everything (not otherwise
+@command{g77} needs an option to initialize everything (not otherwise
explicitly initialized) to ``weird''
(machine-dependent) values, e.g. NaNs, bad (non-@code{NULL}) pointers, and
largest-magnitude integers, would help track down references to
@@ -12434,19 +9794,19 @@ many such bugs at compile time.
@cindex file formats
@cindex binary data
@cindex byte ordering
-@code{g77} has no facility for exchanging unformatted files with systems
+@command{g77} has no facility for exchanging unformatted files with systems
using different number formats---even differing only in endianness (byte
order)---or written by other compilers. Some compilers provide
facilities at least for doing byte-swapping during unformatted I/O.
It is unrealistic to expect to cope with exchanging unformatted files
-with arbitrary other compiler runtimes, but the @code{g77} runtime
-should at least be able to read files written by @code{g77} on systems
+with arbitrary other compiler runtimes, but the @command{g77} runtime
+should at least be able to read files written by @command{g77} on systems
with different number formats, particularly if they differ only in byte
order.
In case you do need to write a program to translate to or from
-@code{g77} (@code{libf2c}) unformatted files, they are written as
+@command{g77} (@code{libf2c}) unformatted files, they are written as
follows:
@table @asis
@item Sequential
@@ -12479,9 +9839,9 @@ between big- and little-endian 32-bit systems using IEEE 754 floating
point it would be sufficient to reverse the bytes in consecutive words
in the file if, and @emph{only} if, only @code{REAL*4}, @code{COMPLEX},
@code{INTEGER*4} and/or @code{LOGICAL*4} data have been written to it by
-@code{g77}.
+@command{g77}.
-If necessary, it is possible to do byte-oriented i/o with @code{g77}'s
+If necessary, it is possible to do byte-oriented i/o with @command{g77}'s
@code{FGETC} and @code{FPUTC} intrinsics. Byte-swapping can be done in
Fortran by equivalencing larger sized variables to an @code{INTEGER*1}
array or a set of scalars.
@@ -12495,7 +9855,7 @@ or PACT's PDB@footnote{No, not @emph{that} one.}
(@uref{http://www.llnl.gov/def_sci/pact/pact_homepage.html}). (Unlike,
say, CDF or XDR, HDF-like systems write in the native number formats and
only incur overhead when they are read on a system with a different
-format.) A future @code{g77} runtime library should use such
+format.) A future @command{g77} runtime library should use such
techniques.
@node Better List-directed I/O
@@ -12515,7 +9875,7 @@ to be undertaken.
In the meantime, use of formatted I/O is recommended.
While it might be of little consolation,
-@code{g77} does support @samp{FORMAT(F<WIDTH>.4)}, for example,
+@command{g77} does support @samp{FORMAT(F<WIDTH>.4)}, for example,
as long as @samp{WIDTH} is defined as a named constant
(via @code{PARAMETER}).
That at least allows some compile-time specification
@@ -12544,7 +9904,7 @@ This change probably requires the @code{libg77} project.
@node Labels Visible to Debugger
@subsection Labels Visible to Debugger
-@code{g77} should output debugging information for statements labels,
+@command{g77} should output debugging information for statements labels,
for use by debuggers that know how to support them.
Same with weirder things like construct names.
It is not yet known if any debug formats or debuggers support these.
@@ -12593,29 +9953,29 @@ with popular existing compilers.
@cindex statements, @code{COMMON}
@cindex naming conflicts
-@code{g77} doesn't allow a common block and an external procedure or
+@command{g77} doesn't allow a common block and an external procedure or
@code{BLOCK DATA} to have the same name.
-Some systems allow this, but @code{g77} does not,
-to be compatible with @code{f2c}.
+Some systems allow this, but @command{g77} does not,
+to be compatible with @command{f2c}.
-@code{g77} could special-case the way it handles
-@code{BLOCK DATA}, since it is not compatible with @code{f2c} in this
-particular area (necessarily, since @code{g77} offers an
+@command{g77} could special-case the way it handles
+@code{BLOCK DATA}, since it is not compatible with @command{f2c} in this
+particular area (necessarily, since @command{g77} offers an
important feature here), but
it is likely that such special-casing would be very annoying to people
with programs that use @samp{EXTERNAL FOO}, with no other mention of
@samp{FOO} in the same program unit, to refer to external procedures, since
-the result would be that @code{g77} would treat these references as requests to
+the result would be that @command{g77} would treat these references as requests to
force-load BLOCK DATA program units.
-In that case, if @code{g77} modified
+In that case, if @command{g77} modified
names of @code{BLOCK DATA} so they could have the same names as
@code{COMMON}, users
would find that their programs wouldn't link because the @samp{FOO} procedure
didn't have its name translated the same way.
(Strictly speaking,
-@code{g77} could emit a null-but-externally-satisfying definition of
+@command{g77} could emit a null-but-externally-satisfying definition of
@samp{FOO} with its name transformed as if it had been a
@code{BLOCK DATA}, but that probably invites more trouble than it's
worth.)
@@ -12625,7 +9985,7 @@ worth.)
@cindex IMPLICIT CHARACTER*(*) statement
@cindex statements, IMPLICIT CHARACTER*(*)
-@code{g77} disallows @code{IMPLICIT CHARACTER*(*)}.
+@command{g77} disallows @code{IMPLICIT CHARACTER*(*)}.
This is not standard-conforming.
@node Non-bugs
@@ -12652,19 +10012,19 @@ we do not make because we think GNU Fortran is better without them.
@node Backslash in Constants
@subsection Backslash in Constants
@cindex backslash
-@cindex @code{f77} support
-@cindex support, @code{f77}
+@cindex @command{f77} support
+@cindex support, @command{f77}
In the opinion of many experienced Fortran users,
-@samp{-fno-backslash} should be the default, not @samp{-fbackslash},
-as currently set by @code{g77}.
+@option{-fno-backslash} should be the default, not @option{-fbackslash},
+as currently set by @command{g77}.
First of all, you can always specify
-@samp{-fno-backslash} to turn off this processing.
+@option{-fno-backslash} to turn off this processing.
Despite not being within the spirit (though apparently within the
-letter) of the ANSI FORTRAN 77 standard, @code{g77} defaults to
-@samp{-fbackslash} because that is what most UNIX @code{f77} commands
+letter) of the ANSI FORTRAN 77 standard, @command{g77} defaults to
+@option{-fbackslash} because that is what most UNIX @command{f77} commands
default to, and apparently lots of code depends on this feature.
This is a particularly troubling issue.
@@ -12672,49 +10032,49 @@ The use of a C construct in the midst of Fortran code
is bad enough, worse when it makes existing Fortran
programs stop working (as happens when programs written
for non-UNIX systems are ported to UNIX systems with
-compilers that provide the @samp{-fbackslash} feature
+compilers that provide the @option{-fbackslash} feature
as the default---sometimes with no option to turn it off).
The author of GNU Fortran wished, for reasons of linguistic
-purity, to make @samp{-fno-backslash} the default for GNU
-Fortran and thus require users of UNIX @code{f77} and @code{f2c}
-to specify @samp{-fbackslash} to get the UNIX behavior.
-
-However, the realization that @code{g77} is intended as
-a replacement for @emph{UNIX} @code{f77}, caused the author
-to choose to make @code{g77} as compatible with
-@code{f77} as feasible, which meant making @samp{-fbackslash}
+purity, to make @option{-fno-backslash} the default for GNU
+Fortran and thus require users of UNIX @command{f77} and @command{f2c}
+to specify @option{-fbackslash} to get the UNIX behavior.
+
+However, the realization that @command{g77} is intended as
+a replacement for @emph{UNIX} @command{f77}, caused the author
+to choose to make @command{g77} as compatible with
+@command{f77} as feasible, which meant making @option{-fbackslash}
the default.
The primary focus on compatibility is at the source-code
level, and the question became ``What will users expect
-a replacement for @code{f77} to do, by default?''
-Although at least one UNIX @code{f77} does not provide
-@samp{-fbackslash} as a default, it appears that
+a replacement for @command{f77} to do, by default?''
+Although at least one UNIX @command{f77} does not provide
+@option{-fbackslash} as a default, it appears that
the majority of them do, which suggests that
-the majority of code that is compiled by UNIX @code{f77}
-compilers expects @samp{-fbackslash} to be the default.
+the majority of code that is compiled by UNIX @command{f77}
+compilers expects @option{-fbackslash} to be the default.
It is probably the case that more code exists
-that would @emph{not} work with @samp{-fbackslash}
+that would @emph{not} work with @option{-fbackslash}
in force than code that requires it be in force.
However, most of @emph{that} code is not being compiled
-with @code{f77},
+with @command{f77},
and when it is, new build procedures (shell scripts,
makefiles, and so on) must be set up anyway so that
they work under UNIX.
That makes a much more natural and safe opportunity for
non-UNIX users to adapt their build procedures for
-@code{g77}'s default of @samp{-fbackslash} than would
-exist for the majority of UNIX @code{f77} users who
+@command{g77}'s default of @option{-fbackslash} than would
+exist for the majority of UNIX @command{f77} users who
would have to modify existing, working build procedures
-to explicitly specify @samp{-fbackslash} if that was
+to explicitly specify @option{-fbackslash} if that was
not the default.
One suggestion has been to configure the default for
-@samp{-fbackslash} (and perhaps other options as well)
-based on the configuration of @code{g77}.
+@option{-fbackslash} (and perhaps other options as well)
+based on the configuration of @command{g77}.
This is technically quite straightforward, but will be avoided
even in cases where not configuring defaults to be
@@ -12736,11 +10096,11 @@ But such applications are rare.
And users writing a
program to run on more than one type of machine cannot possibly benefit
from this kind of compatibility.
-(This is consistent with the design goals for @code{gcc}.
-To change them for @code{g77}, you must first change them
-for @code{gcc}.
-Do not ask the maintainers of @code{g77} to do this for you,
-or to disassociate @code{g77} from the widely understood, if
+(This is consistent with the design goals for @command{gcc}.
+To change them for @command{g77}, you must first change them
+for @command{gcc}.
+Do not ask the maintainers of @command{g77} to do this for you,
+or to disassociate @command{g77} from the widely understood, if
not widely agreed-upon, goals for GNU compilers in general.)
This is why GNU Fortran does and will treat backslashes in the same
@@ -12779,20 +10139,20 @@ be used instead, for readability.)
@cindex initialization, statement placement
@cindex placing initialization statements
-@code{g77} does not allow @samp{DATA VAR/1/} to appear in the
+@command{g77} does not allow @samp{DATA VAR/1/} to appear in the
source code before @samp{COMMON VAR},
@samp{DIMENSION VAR(10)}, @samp{INTEGER VAR}, and so on.
-In general, @code{g77} requires initialization of a variable
+In general, @command{g77} requires initialization of a variable
or array to be specified @emph{after} all other specifications
of attributes (type, size, placement, and so on) of that variable
or array are specified (though @emph{confirmation} of data type is
permitted).
-It is @emph{possible} @code{g77} will someday allow all of this,
+It is @emph{possible} @command{g77} will someday allow all of this,
even though it is not allowed by the FORTRAN 77 standard.
Then again, maybe it is better to have
-@code{g77} always require placement of @code{DATA}
+@command{g77} always require placement of @code{DATA}
so that it can possibly immediately write constants
to the output file, thus saving time and space.
@@ -12806,42 +10166,42 @@ and to do this it cannot be followed by @samp{COMMON A}.
@cindex intrinsics, context-sensitive
@cindex context-sensitive intrinsics
-@code{g77} treats procedure references to @emph{possible} intrinsic
+@command{g77} treats procedure references to @emph{possible} intrinsic
names as always enabling their intrinsic nature, regardless of
whether the @emph{form} of the reference is valid for that
intrinsic.
-For example, @samp{CALL SQRT} is interpreted by @code{g77} as
+For example, @samp{CALL SQRT} is interpreted by @command{g77} as
an invalid reference to the @code{SQRT} intrinsic function,
because the reference is a subroutine invocation.
-First, @code{g77} recognizes the statement @samp{CALL SQRT}
+First, @command{g77} recognizes the statement @samp{CALL SQRT}
as a reference to a @emph{procedure} named @samp{SQRT}, not
to a @emph{variable} with that name (as it would for a statement
such as @samp{V = SQRT}).
-Next, @code{g77} establishes that, in the program unit being compiled,
+Next, @command{g77} establishes that, in the program unit being compiled,
@code{SQRT} is an intrinsic---not a subroutine that
happens to have the same name as an intrinsic (as would be
the case if, for example, @samp{EXTERNAL SQRT} was present).
-Finally, @code{g77} recognizes that the @emph{form} of the
+Finally, @command{g77} recognizes that the @emph{form} of the
reference is invalid for that particular intrinsic.
That is, it recognizes that it is invalid for an intrinsic
@emph{function}, such as @code{SQRT}, to be invoked as
a @emph{subroutine}.
-At that point, @code{g77} issues a diagnostic.
+At that point, @command{g77} issues a diagnostic.
Some users claim that it is ``obvious'' that @samp{CALL SQRT}
references an external subroutine of their own, not an
intrinsic function.
-However, @code{g77} knows about intrinsic
+However, @command{g77} knows about intrinsic
subroutines, not just functions, and is able to support both having
the same names, for example.
-As a result of this, @code{g77} rejects calls
+As a result of this, @command{g77} rejects calls
to intrinsics that are not subroutines, and function invocations
of intrinsics that are not functions, just as it (and most compilers)
rejects invocations of intrinsics with the wrong number (or types)
@@ -12855,7 +10215,7 @@ a user-written subroutine named @samp{SQRT}.
@cindex constants, context-sensitive
@cindex context-sensitive constants
-@code{g77} does not use context to determine the types of
+@command{g77} does not use context to determine the types of
constants or named constants (@code{PARAMETER}), except
for (non-standard) typeless constants such as @samp{'123'O}.
@@ -12866,12 +10226,12 @@ PRINT *, 9.435784839284958 * 2D0
@end smallexample
@noindent
-@code{g77} will interpret the (truncated) constant
+@command{g77} will interpret the (truncated) constant
@samp{9.435784839284958} as a @code{REAL(KIND=1)}, not @code{REAL(KIND=2)},
constant, because the suffix @code{D0} is not specified.
As a result, the output of the above statement when
-compiled by @code{g77} will appear to have ``less precision''
+compiled by @command{g77} will appear to have ``less precision''
than when compiled by other compilers.
In these and other cases, some compilers detect the
@@ -12904,7 +10264,7 @@ END
Running the above program should
result in the same value being
printed three times.
-With @code{g77} as the compiler,
+With @command{g77} as the compiler,
it does.
However, compiled by many other compilers,
@@ -12928,14 +10288,14 @@ to replace some constants with variables having the same
values for pertinent portions of code,
it is important that compilers treat code so modified in the
same way so that the results of such programs are the same.
-@code{g77} helps in this regard by treating constants just
+@command{g77} helps in this regard by treating constants just
the same as variables in terms of determining their types
in a context-independent way.
Still, there is a lot of existing Fortran code that has
been written to depend on the way other compilers freely
interpret constants' types based on context, so anything
-@code{g77} can do to help flag cases of this in such code
+@command{g77} can do to help flag cases of this in such code
could be very helpful.
@node Equivalence Versus Equality
@@ -12945,7 +10305,7 @@ could be very helpful.
@cindex logical expressions, comparing
Use of @code{.EQ.} and @code{.NE.} on @code{LOGICAL} operands
-is not supported, except via @samp{-fugly-logint}, which is not
+is not supported, except via @option{-fugly-logint}, which is not
recommended except for legacy code (where the behavior expected
by the @emph{code} is assumed).
@@ -12995,7 +10355,7 @@ own distinct precedence) to compare @code{LOGICAL} operands.
This requirement results in expression syntax with more certain
precedence (without requiring substantial context), making it easier
for programmers to read existing code.
-@code{g77} will avoid muddying up elements of the Fortran language
+@command{g77} will avoid muddying up elements of the Fortran language
that were well-designed in the first place.
(Ask C programmers about the precedence of expressions such as
@@ -13022,11 +10382,11 @@ that might diagnose it.
@cindex side effects, order of evaluation
@cindex order of evaluation, side effects
-@code{g77} does not necessarily produce code that, when run, performs
+@command{g77} does not necessarily produce code that, when run, performs
side effects (such as those performed by function invocations)
in the same order as in some other compiler---or even in the same
order as another version, port, or invocation (using different
-command-line options) of @code{g77}.
+command-line options) of @command{g77}.
It is never safe to depend on the order of evaluation of side effects.
For example, an expression like this may very well behave differently
@@ -13102,17 +10462,17 @@ Warnings might indicate danger points where you should check to make sure
that your program really does what you intend; or the use of obsolete
features; or the use of nonstandard features of GNU Fortran.
Many warnings are issued only if you ask for them, with one of the
-@samp{-W} options (for instance, @samp{-Wall} requests a variety of
+@option{-W} options (for instance, @option{-Wall} requests a variety of
useful warnings).
@emph{Note:} Currently, the text of the line and a pointer to the column
-is printed in most @code{g77} diagnostics.
-Probably, as of version 0.6, @code{g77} will
+is printed in most @command{g77} diagnostics.
+Probably, as of version 0.6, @command{g77} will
no longer print the text of the source line, instead printing
the column number following the file name and line number in
a form that GNU Emacs recognizes.
This change is expected to speed up and reduce the memory usage
-of the @code{g77} compiler.
+of the @command{g77} compiler.
@c
@c Say this when it is true -- hopefully 0.6, maybe 0.7 or later. --burley
@c
@@ -13121,8 +10481,8 @@ of the @code{g77} compiler.
@c (for instance) it fails to conform to a standard. In some cases,
@c however, the Fortran standard specifies that certain extensions are
@c forbidden, and a diagnostic @emph{must} be issued by a conforming
-@c compiler. The @samp{-pedantic} option tells GNU Fortran to issue warnings
-@c in such cases; @samp{-pedantic-errors} says to make them errors instead.
+@c compiler. The @option{-pedantic} option tells GNU Fortran to issue warnings
+@c in such cases; @option{-pedantic-errors} says to make them errors instead.
@c This does not mean that @emph{all} non-ANSI constructs get warnings
@c or errors.
@@ -13176,7 +10536,6 @@ information that makes for fixing the bug.
* Criteria: Bug Criteria. Have you really found a bug?
* Where: Bug Lists. Where to send your bug report.
* Reporting: Bug Reporting. How to report a bug effectively.
-* Patches: Sending Patches. How to send a patch for GNU Fortran.
@end menu
@xref{Trouble,,Known Causes of Trouble with GNU Fortran},
@@ -13252,33 +10611,33 @@ If you are an experienced user of Fortran compilers, your suggestions
for improvement of GNU Fortran are welcome in any case.
@end itemize
-Many, perhaps most, bug reports against @code{g77} turn out to
+Many, perhaps most, bug reports against @command{g77} turn out to
be bugs in the user's code.
While we find such bug reports educational, they sometimes take
a considerable amount of time to track down or at least respond
-to---time we could be spending making @code{g77}, not some user's
+to---time we could be spending making @command{g77}, not some user's
code, better.
Some steps you can take to verify that the bug is not certainly
-in the code you're compiling with @code{g77}:
+in the code you're compiling with @command{g77}:
@itemize @bullet
@item
-Compile your code using the @code{g77} options @samp{-W -Wall -O}.
-These options enable many useful warning; the @samp{-O} option
+Compile your code using the @command{g77} options @samp{-W -Wall -O}.
+These options enable many useful warning; the @option{-O} option
enables flow analysis that enables the uninitialized-variable
warning.
If you investigate the warnings and find evidence of possible bugs
-in your code, fix them first and retry @code{g77}.
+in your code, fix them first and retry @command{g77}.
@item
-Compile your code using the @code{g77} options @samp{-finit-local-zero},
-@samp{-fno-automatic}, @samp{-ffloat-store}, and various
+Compile your code using the @command{g77} options @option{-finit-local-zero},
+@option{-fno-automatic}, @option{-ffloat-store}, and various
combinations thereof.
If your code works with any of these combinations, that is not
-proof that the bug isn't in @code{g77}---a @code{g77} bug exposed
+proof that the bug isn't in @command{g77}---a @command{g77} bug exposed
by your code might simply be avoided, or have a different, more subtle
effect, when different options are used---but it can be a
strong indicator that your code is making unwarranted assumptions
@@ -13286,24 +10645,24 @@ about the Fortran dialect and/or underlying machine it is
being compiled and run on.
@xref{Overly Convenient Options,,Overly Convenient Command-Line Options},
-for information on the @samp{-fno-automatic} and
-@samp{-finit-local-zero} options and how to convert
+for information on the @option{-fno-automatic} and
+@option{-finit-local-zero} options and how to convert
their use into selective changes in your own code.
@item
@pindex ftnchek
-Validate your code with @code{ftnchek} or a similar code-checking
+Validate your code with @command{ftnchek} or a similar code-checking
tool.
-@code{ftnchek} can be found at @uref{ftp://ftp.netlib.org/fortran}
+@command{ftnchek} can be found at @uref{ftp://ftp.netlib.org/fortran}
or @uref{ftp://ftp.dsm.fordham.edu}.
@pindex make
@cindex Makefile example
-Here are some sample @file{Makefile} rules using @code{ftnchek}
-``project'' files to do cross-file checking and @code{sfmakedepend}
+Here are some sample @file{Makefile} rules using @command{ftnchek}
+``project'' files to do cross-file checking and @command{sfmakedepend}
(from @uref{ftp://ahab.rutgers.edu/pub/perl/sfmakedepend})
to maintain dependencies automatically.
-These assume the use of GNU @code{make}.
+These assume the use of GNU @command{make}.
@smallexample
# Dummy suffix for ftnchek targets:
@@ -13355,14 +10714,14 @@ depend: ; \
@end smallexample
@item
-Try your code out using other Fortran compilers, such as @code{f2c}.
+Try your code out using other Fortran compilers, such as @command{f2c}.
If it does not work on at least one other compiler (assuming the
compiler supports the features the code needs), that is a strong
indicator of a bug in the code.
However, even if your code works on many compilers @emph{except}
-@code{g77}, that does @emph{not} mean the bug is in @code{g77}.
-It might mean the bug is in your code, and that @code{g77} simply
+@command{g77}, that does @emph{not} mean the bug is in @command{g77}.
+It might mean the bug is in your code, and that @command{g77} simply
exposes it more readily than other compilers.
@end itemize
@@ -13450,14 +10809,14 @@ for now, if you are sending more than a few lines of code, if
your program's source file format contains ``interesting'' things
like trailing spaces or strange characters, or if you need to
include binary data files, it is acceptable to put all the
-files together in a @code{tar} archive, and, whether you need to
-do that, it is acceptable to then compress the single file (@code{tar}
+files together in a @command{tar} archive, and, whether you need to
+do that, it is acceptable to then compress the single file (@command{tar}
archive or source file)
-using @code{gzip} and encode it via @code{uuencode}.
+using @command{gzip} and encode it via @command{uuencode}.
Do not use any MIME stuff---the current maintainer can't decode this.
-Using @code{compress} instead of @code{gzip} is acceptable, assuming
+Using @command{compress} instead of @command{gzip} is acceptable, assuming
you have licensed the use of the patented algorithm in
-@code{compress} from Unisys.)
+@command{compress} from Unisys.)
To enable someone to investigate the bug, you should include all these
things:
@@ -13465,7 +10824,7 @@ things:
@itemize @bullet
@item
The version of GNU Fortran.
-You can get this by running @code{g77} with the @samp{-v} option.
+You can get this by running @command{g77} with the @option{-v} option.
(Ignore any error messages that might be displayed
when the linker is run.)
@@ -13488,7 +10847,7 @@ run your source file through the C preprocessor
by doing @samp{g77 -E @var{sourcefile} > @var{newfile}}.
Then, include the contents of @var{newfile} in the bug report.
(When you do this, use the same preprocessor options---such as
-@samp{-I}, @samp{-D}, and @samp{-U}---that you used in actual
+@option{-I}, @option{-D}, and @option{-U}---that you used in actual
compilation.)
A single statement is not enough of an example.
@@ -13525,7 +10884,7 @@ chases.
@item
The command arguments you gave GNU Fortran to compile that example
-and observe the bug. For example, did you use @samp{-O}? To guarantee
+and observe the bug. For example, did you use @option{-O}? To guarantee
you won't omit something important, list all the options.
If we were to try to guess the arguments, we would probably guess wrong
@@ -13539,7 +10898,7 @@ include that, send along any additional info you have that you
don't see clearly represented in that output.)
@item
-The operands you gave to the @code{configure} command when you installed
+The operands you gave to the @command{configure} command when you installed
the compiler.
@item
@@ -13593,7 +10952,7 @@ bug in the program itself.
@item
If you send examples of assembler code output from GNU Fortran,
-please use @samp{-g} when you make them. The debugging information
+please use @option{-g} when you make them. The debugging information
includes source line numbers which are essential for correlating the
output with the input.
@@ -13633,7 +10992,7 @@ not in an argument.
What you need to provide in addition to a backtrace are the values of
the local variables for several stack frames up. When a local
variable or an argument is an RTX, first print its value and then use
-the GDB command @code{pr} to print the RTL expression that it points
+the GDB command @command{pr} to print the RTL expression that it points
to. (If GDB doesn't run on your machine, use your debugger to call
the function @code{debug_rtx} with the RTX as an argument.) In
general, whenever a variable is a pointer, its value is no use
@@ -13691,7 +11050,8 @@ And if we can't understand what bug you are trying to fix, or why your
patch should be an improvement, we won't install it. A test case will
help us to understand.
-@xref{Sending Patches}, for guidelines on how to make it easy for us to
+See @uref{http://gcc.gnu.org/contribute.html}
+for guidelines on how to make it easy for us to
understand and install your patches.
@item
@@ -13708,124 +11068,6 @@ unless we have an identical system---and if we do have one,
we should be able to reproduce the crash ourselves.
@end itemize
-@node Sending Patches
-@section Sending Patches for GNU Fortran
-
-If you would like to write bug fixes or improvements for the GNU Fortran
-compiler, that is very helpful.
-Send suggested fixes to the bug report
-mailing list, @email{@value{email-bugs}}.
-
-Please follow these guidelines so we can study your patches efficiently.
-If you don't follow these guidelines, your information might still be
-useful, but using it will take extra work. Maintaining GNU Fortran is a lot
-of work in the best of circumstances, and we can't keep up unless you do
-your best to help.
-
-@itemize @bullet
-@item
-Send an explanation with your changes of what problem they fix or what
-improvement they bring about. For a bug fix, just include a copy of the
-bug report, and explain why the change fixes the bug.
-
-(Referring to a bug report is not as good as including it, because then
-we will have to look it up, and we have probably already deleted it if
-we've already fixed the bug.)
-
-@item
-Always include a proper bug report for the problem you think you have
-fixed. We need to convince ourselves that the change is right before
-installing it. Even if it is right, we might have trouble judging it if
-we don't have a way to reproduce the problem.
-
-@item
-Include all the comments that are appropriate to help people reading the
-source in the future understand why this change was needed.
-
-@item
-Don't mix together changes made for different reasons.
-Send them @emph{individually}.
-
-If you make two changes for separate reasons, then we might not want to
-install them both. We might want to install just one. If you send them
-all jumbled together in a single set of diffs, we have to do extra work
-to disentangle them---to figure out which parts of the change serve
-which purpose. If we don't have time for this, we might have to ignore
-your changes entirely.
-
-If you send each change as soon as you have written it, with its own
-explanation, then the two changes never get tangled up, and we can
-consider each one properly without any extra work to disentangle them.
-
-Ideally, each change you send should be impossible to subdivide into
-parts that we might want to consider separately, because each of its
-parts gets its motivation from the other parts.
-
-@item
-Send each change as soon as that change is finished. Sometimes people
-think they are helping us by accumulating many changes to send them all
-together. As explained above, this is absolutely the worst thing you
-could do.
-
-Since you should send each change separately, you might as well send it
-right away. That gives us the option of installing it immediately if it
-is important.
-
-@item
-Use @samp{diff -c} to make your diffs. Diffs without context are hard
-for us to install reliably. More than that, they make it hard for us to
-study the diffs to decide whether we want to install them. Unidiff
-format is better than contextless diffs, but not as easy to read as
-@samp{-c} format.
-
-If you have GNU @code{diff}, use @samp{diff -cp}, which shows the name of the
-function that each change occurs in.
-(The maintainer of GNU Fortran currently uses @samp{diff -rcp2N}.)
-
-@item
-Write the change log entries for your changes. We get lots of changes,
-and we don't have time to do all the change log writing ourselves.
-
-Read the @file{ChangeLog} file to see what sorts of information to put
-in, and to learn the style that we use. The purpose of the change log
-is to show people where to find what was changed. So you need to be
-specific about what functions you changed; in large functions, it's
-often helpful to indicate where within the function the change was.
-
-On the other hand, once you have shown people where to find the change,
-you need not explain its purpose. Thus, if you add a new function, all
-you need to say about it is that it is new. If you feel that the
-purpose needs explaining, it probably does---but the explanation will be
-much more useful if you put it in comments in the code.
-
-If you would like your name to appear in the header line for who made
-the change, send us the header line.
-
-@item
-When you write the fix, keep in mind that we can't install a change that
-would break other systems.
-
-People often suggest fixing a problem by changing machine-independent
-files such as @file{toplev.c} to do something special that a particular
-system needs. Sometimes it is totally obvious that such changes would
-break GNU Fortran for almost all users. We can't possibly make a change like
-that. At best it might tell us how to write another patch that would
-solve the problem acceptably.
-
-Sometimes people send fixes that @emph{might} be an improvement in
-general---but it is hard to be sure of this. It's hard to install
-such changes because we have to study them very carefully. Of course,
-a good explanation of the reasoning by which you concluded the change
-was correct can help convince us.
-
-The safest changes are changes to the configuration files for a
-particular machine. These are safe because they can't create new bugs
-on other machines.
-
-Please help us keep up with the workload by designing the patch in a
-form that is good to install.
-@end itemize
-
@node Service
@chapter How To Get Help with GNU Fortran
@@ -13839,7 +11081,7 @@ The service directory is found in the file named @file{SERVICE} in the
GNU CC distribution.
@item
-Send a message to @email{@value{email-general}}.
+Send a message to @email{@value{email-help}}.
@end itemize
@end ifset
@@ -13849,9 +11091,9 @@ Send a message to @email{@value{email-general}}.
@cindex options, adding
@cindex adding options
-To add a new command-line option to @code{g77}, first decide
+To add a new command-line option to @command{g77}, first decide
what kind of option you wish to add.
-Search the @code{g77} and @code{gcc} documentation for one
+Search the @command{g77} and @command{gcc} documentation for one
or more options that is most closely like the one you want to add
(in terms of what kind of effect it has, and so on) to
help clarify its nature.
@@ -13860,7 +11102,7 @@ help clarify its nature.
@item
@emph{Fortran options} are options that apply only
when compiling Fortran programs.
-They are accepted by @code{g77} and @code{gcc}, but
+They are accepted by @command{g77} and @command{gcc}, but
they apply only when compiling Fortran programs.
@item
@@ -13870,15 +11112,15 @@ when compiling most any kind of program.
@emph{Fortran options} are listed in the file
@file{@value{path-g77}/lang-options.h},
-which is used during the build of @code{gcc} to
+which is used during the build of @command{gcc} to
build a list of all options that are accepted by
at least one language's compiler.
-This list goes into the @code{lang_options} array
+This list goes into the @code{documented_lang_options} array
in @file{gcc/toplev.c}, which uses this array to
determine whether a particular option should be
offered to the linked-in front end for processing
by calling @code{lang_option_decode}, which, for
-@code{g77}, is in @file{@value{path-g77}/com.c} and just
+@command{g77}, is in @file{@value{path-g77}/com.c} and just
calls @code{ffe_decode_option}.
If the linked-in front end ``rejects'' a
@@ -13888,16 +11130,16 @@ language's compiler is willing to accept it.
This allows commands like @samp{gcc -fno-asm foo.c bar.f}
to work, even though Fortran compilation does
-not currently support the @samp{-fno-asm} option;
+not currently support the @option{-fno-asm} option;
even though the @code{f771} version of @code{lang_decode_option}
-rejects @samp{-fno-asm}, @file{toplev.c} doesn't
+rejects @option{-fno-asm}, @file{toplev.c} doesn't
produce a diagnostic because some other language (C)
does accept it.
This also means that commands like
@samp{g77 -fno-asm foo.f} yield no diagnostics,
despite the fact that no phase of the command was
-able to recognize and process @samp{-fno-asm}---perhaps
+able to recognize and process @option{-fno-asm}---perhaps
a warning about this would be helpful if it were
possible.
@@ -13916,10 +11158,10 @@ should behave the same way on all configurations
(especially when it comes to language constructs),
the practice of setting defaults in @file{target.h}
is likely to be deprecated and, ultimately, stopped
-in future versions of @code{g77}.
+in future versions of @command{g77}.
Accessor macros for Fortran options, used by code
-in the @code{g77} FFE, are defined in @file{@value{path-g77}/top.h}.
+in the @command{g77} FFE, are defined in @file{@value{path-g77}/top.h}.
@emph{Compiler options} are listed in @file{gcc/toplev.c}
in the array @code{f_options}.
@@ -13932,42 +11174,42 @@ some of which are in @file{gcc/toplev.c}.
You can set different defaults for @emph{Fortran-oriented}
or @emph{Fortran-reticent} compiler options by changing
-the source code of @code{g77} and rebuilding.
-How to do this depends on the version of @code{g77}:
+the source code of @command{g77} and rebuilding.
+How to do this depends on the version of @command{g77}:
@table @code
@item G77 0.5.24 (EGCS 1.1)
-@itemx G77 0.5.25 (EGCS 1.2)
-Change the @code{lang_init_options} routine in @file{egcs/gcc/f/com.c}.
+@itemx G77 0.5.25 (EGCS 1.2 - which became GCC 2.95)
+Change the @code{lang_init_options} routine in @file{gcc/gcc/f/com.c}.
-(Note that these versions of @code{g77}
+(Note that these versions of @command{g77}
perform internal consistency checking automatically
-when the @samp{-fversion} option is specified.)
+when the @option{-fversion} option is specified.)
@item G77 0.5.23
@itemx G77 0.5.24 (EGCS 1.0)
-Change the way @code{f771} handles the @samp{-fset-g77-defaults}
+Change the way @code{f771} handles the @option{-fset-g77-defaults}
option, which is always provided as the first option when
-called by @code{g77} or @code{gcc}.
+called by @command{g77} or @command{gcc}.
This code is in @code{ffe_decode_options} in @file{@value{path-g77}/top.c}.
Have it change just the variables that you want to default
to a different setting for Fortran compiles compared to
compiles of other languages.
-The @samp{-fset-g77-defaults} option is passed to @code{f771}
+The @option{-fset-g77-defaults} option is passed to @code{f771}
automatically because of the specification information
kept in @file{@value{path-g77}/lang-specs.h}.
-This file tells the @code{gcc} command how to recognize,
+This file tells the @command{gcc} command how to recognize,
in this case, Fortran source files (those to be preprocessed,
and those that are not), and further, how to invoke the
appropriate programs (including @code{f771}) to process
those source files.
-It is in @file{@value{path-g77}/lang-specs.h} that @samp{-fset-g77-defaults},
-@samp{-fversion}, and other options are passed, as appropriate,
+It is in @file{@value{path-g77}/lang-specs.h} that @option{-fset-g77-defaults},
+@option{-fversion}, and other options are passed, as appropriate,
even when the user has not explicitly specified them.
-Other ``internal'' options such as @samp{-quiet} also
+Other ``internal'' options such as @option{-quiet} also
are passed via this mechanism.
@end table
@@ -13975,22 +11217,22 @@ are passed via this mechanism.
@chapter Projects
@cindex projects
-If you want to contribute to @code{g77} by doing research,
+If you want to contribute to @command{g77} by doing research,
design, specification, documentation, coding, or testing,
the following information should give you some ideas.
More relevant information might be available from
@uref{ftp://alpha.gnu.org/gnu/g77/projects/}.
@menu
-* Efficiency:: Make @code{g77} itself compile code faster.
-* Better Optimization:: Teach @code{g77} to generate faster code.
-* Simplify Porting:: Make @code{g77} easier to configure, build,
+* Efficiency:: Make @command{g77} itself compile code faster.
+* Better Optimization:: Teach @command{g77} to generate faster code.
+* Simplify Porting:: Make @command{g77} easier to configure, build,
and install.
* More Extensions:: Features many users won't know to ask for.
-* Machine Model:: @code{g77} should better leverage @code{gcc}.
+* Machine Model:: @command{g77} should better leverage @command{gcc}.
* Internals Documentation:: Make maintenance easier.
* Internals Improvements:: Make internals more robust.
-* Better Diagnostics:: Make using @code{g77} on new code easier.
+* Better Diagnostics:: Make using @command{g77} on new code easier.
@end menu
@node Efficiency
@@ -14030,7 +11272,7 @@ is not a subroutine intrinsic, would result actual error instead of the
unimplemented-statement catch-all.
@item
-Throughout @code{g77}, don't pass line/column pairs where
+Throughout @command{g77}, don't pass line/column pairs where
a simple @code{ffewhere} type, which points to the error as much as is
desired by the configuration, will do, and don't pass @code{ffelexToken} types
where a simple @code{ffewhere} type will do.
@@ -14049,7 +11291,7 @@ improve maintainability.)
Handle @samp{DATA (A(I),I=1,1000000)/1000000*2/} more efficiently, especially
as regards the assembly output.
Some of this might require improving
-the back end, but lots of improvement in space/time required in @code{g77}
+the back end, but lots of improvement in space/time required in @command{g77}
itself can be fairly easily obtained without touching the back end.
Maybe type-conversion, where necessary, can be speeded up as well in
cases like the one shown (converting the @samp{2} into @samp{2.}).
@@ -14068,7 +11310,7 @@ own.
@cindex optimization, better
@cindex code generation, improving
-Much of this work should be put off until after @code{g77} has
+Much of this work should be put off until after @command{g77} has
all the features necessary for its widespread acceptance as a
useful F77 compiler.
However, perhaps this work can be done in parallel during
@@ -14078,7 +11320,7 @@ the feature-adding work.
@item
Do the equivalent of the trick of putting @samp{extern inline} in front
of every function definition in @code{libg2c} and #include'ing the resulting
-file in @code{f2c}+@code{gcc}---that is, inline all run-time-library functions
+file in @command{f2c}+@command{gcc}---that is, inline all run-time-library functions
that are at all worth inlining.
(Some of this has already been done, such as for integral exponentiation.)
@@ -14113,7 +11355,7 @@ Among the important things the library would do are:
Be a one-stop-shop-type
library, hence shareable and usable by all, in that what are now
library-build-time options in @code{libg2c} would be moved at least to the
-@code{g77} compile phase, if not to finer grains (such as choosing how
+@command{g77} compile phase, if not to finer grains (such as choosing how
list-directed I/O formatting is done by default at @code{OPEN} time, for
preconnected units via options or even statements in the main program
unit, maybe even on a per-I/O basis with appropriate pragma-like
@@ -14123,14 +11365,14 @@ devices).
@item
Probably requiring the new library design, change interface to
normally have @code{COMPLEX} functions return their values in the way
-@code{gcc} would if they were declared @code{__complex__ float},
+@command{gcc} would if they were declared @code{__complex__ float},
rather than using
the mechanism currently used by @code{CHARACTER} functions (whereby the
functions are compiled as returning void and their first arg is
a pointer to where to store the result).
(Don't append underscores to
-external names for @code{COMPLEX} functions in some cases once @code{g77} uses
-@code{gcc} rather than @code{f2c} calling conventions.)
+external names for @code{COMPLEX} functions in some cases once @command{g77} uses
+@command{gcc} rather than @command{f2c} calling conventions.)
@item
Do something useful with @code{doiter} references where possible.
@@ -14149,7 +11391,7 @@ for Fortran-77 code.)
@cindex porting, simplify
@cindex simplify porting
-Making @code{g77} easier to configure, port, build, and install, either
+Making @command{g77} easier to configure, port, build, and install, either
as a single-system compiler or as a cross-compiler, would be
very useful.
@@ -14157,7 +11399,7 @@ very useful.
@item
A new library (replacing @code{libg2c}) should improve portability as well as
produce more optimal code.
-Further, @code{g77} and the new library should
+Further, @command{g77} and the new library should
conspire to simplify naming of externals, such as by removing unnecessarily
added underscores, and to reduce/eliminate the possibility of naming
conflicts, while making debugger more straightforward.
@@ -14168,8 +11410,8 @@ Fortran intrinsics that get Fortran unit numbers given C @code{FILE *}
descriptors.
@item
-Possibly related to a new library, @code{g77} should produce the equivalent
-of a @code{gcc} @samp{main(argc, argv)} function when it compiles a
+Possibly related to a new library, @command{g77} should produce the equivalent
+of a @command{gcc} @samp{main(argc, argv)} function when it compiles a
main program unit, instead of compiling something that must be
called by a library
implementation of @code{main()}.
@@ -14182,7 +11424,7 @@ not requiring programmers to start their debugging sessions with
@item
The GBE needs to understand the difference between alignment
requirements and desires.
-For example, on Intel x86 machines, @code{g77} currently imposes
+For example, on Intel x86 machines, @command{g77} currently imposes
overly strict alignment requirements, due to the back end, but it
would be useful for Fortran and C programmers to be able to override
these @emph{recommendations} as long as they don't violate the actual
@@ -14194,9 +11436,9 @@ processor @emph{requirements}.
@cindex extensions, more
These extensions are not the sort of things users ask for ``by name'',
-but they might improve the usability of @code{g77}, and Fortran in
+but they might improve the usability of @command{g77}, and Fortran in
general, in the long run.
-Some of these items really pertain to improving @code{g77} internals
+Some of these items really pertain to improving @command{g77} internals
so that some popular extensions can be more easily supported.
@itemize @bullet
@@ -14235,7 +11477,7 @@ later @code{UNIT=} in the first example is invalid.
Make sure this is what users of this feature would expect.
@item
-Currently @code{g77} disallows @samp{READ(1'10)} since
+Currently @command{g77} disallows @samp{READ(1'10)} since
it is an obnoxious syntax, but
supporting it might be pretty easy if needed.
More details are needed, such
@@ -14253,7 +11495,7 @@ This requires either major
changes to @code{libg2c} or its replacement.
@item
-F90 and @code{g77} probably disagree about label scoping relative to
+F90 and @command{g77} probably disagree about label scoping relative to
@code{INTERFACE} and @code{END INTERFACE}, and their contained
procedure interface bodies (blocks?).
@@ -14277,7 +11519,7 @@ other (besides @code{CLOSE}) to assist in making applications port to systems
@node Machine Model
@section Machine Model
-This items pertain to generalizing @code{g77}'s view of
+This items pertain to generalizing @command{g77}'s view of
the machine model to more fully accept whatever the GBE
provides it via its configuration.
@@ -14286,7 +11528,7 @@ provides it via its configuration.
Switch to using @code{REAL_VALUE_TYPE} to represent floating-point constants
exclusively so the target float format need not be required.
This
-means changing the way @code{g77} handles initialization of aggregate areas
+means changing the way @command{g77} handles initialization of aggregate areas
having more than one type, such as @code{REAL} and @code{INTEGER},
because currently
it initializes them as if they were arrays of @code{char} and uses the
@@ -14295,12 +11537,12 @@ what to stuff in elements of the arrays.
@item
Rely more and more on back-end info and capabilities, especially in the
-area of constants (where having the @code{g77} front-end's IL just store
+area of constants (where having the @command{g77} front-end's IL just store
the appropriate tree nodes containing constants might be best).
@item
Suite of C and Fortran programs that a user/administrator can run on a
-machine to help determine the configuration for @code{g77} before building
+machine to help determine the configuration for @command{g77} before building
and help determine if the compiler works (especially with whatever
libraries are installed) after building.
@end itemize
@@ -14308,17 +11550,17 @@ libraries are installed) after building.
@node Internals Documentation
@section Internals Documentation
-Better info on how @code{g77} works and how to port it is needed.
+Better info on how @command{g77} works and how to port it is needed.
Much of this should be done only after the redesign planned for
0.6 is complete.
@xref{Front End}, which contains some information
-on @code{g77} internals.
+on @command{g77} internals.
@node Internals Improvements
@section Internals Improvements
-Some more items that would make @code{g77} more reliable
+Some more items that would make @command{g77} more reliable
and easier to maintain:
@itemize @bullet
@@ -14335,7 +11577,7 @@ important to preserve the left-to-right-in-source order of production
of diagnostics.)
@item
-Come up with better naming conventions for @samp{-D} to establish requirements
+Come up with better naming conventions for @option{-D} to establish requirements
to achieve desired implementation dialect via @file{proj.h}.
@item
@@ -14372,7 +11614,7 @@ not worth the time).
@item
Implement C macros @samp{RETURNS(value)} and @samp{SETS(something,value)}
in @file{proj.h}
-and use them throughout @code{g77} source code (especially in the definitions
+and use them throughout @command{g77} source code (especially in the definitions
of access macros in @samp{.h} files) so they can be tailored
to catch code writing into a @samp{RETURNS()} or reading from a @samp{SETS()}.
@@ -14451,11 +11693,11 @@ statements.)
@chapter Diagnostics
@cindex diagnostics
-Some diagnostics produced by @code{g77} require sufficient explanation
+Some diagnostics produced by @command{g77} require sufficient explanation
that the explanations are given below, and the diagnostics themselves
identify the appropriate explanation.
-Identification uses the GNU Info format---specifically, the @code{info}
+Identification uses the GNU Info format---specifically, the @command{info}
command that displays the explanation is given within square
brackets in the diagnostic.
For example:
@@ -14464,7 +11706,7 @@ For example:
foo.f:5: Invalid statement [info -f g77 M FOOEY]
@end smallexample
-More details about the above diagnostic is found in the @code{g77} Info
+More details about the above diagnostic is found in the @command{g77} Info
documentation, menu item @samp{M}, submenu item @samp{FOOEY},
which is displayed by typing the UNIX command
@samp{info -f g77 M FOOEY}.
@@ -14478,7 +11720,7 @@ this chapter, which is the very text you're reading now),
@samp{FOOEY} is the menu item to select.
@iftex
-In this printed version of the @code{g77} manual, the above example
+In this printed version of the @command{g77} manual, the above example
points to a section, below, entitled @samp{FOOEY}---though, of course,
as the above is just a sample, no such section exists.
@end iftex
@@ -14631,11 +11873,11 @@ the same expectation regarding interpretation, you can:
@itemize @bullet
@item
-Compile with the @code{g77} option @samp{-ff90}, to enable the
+Compile with the @command{g77} option @option{-ff90}, to enable the
Fortran 90 interpretation.
@item
-Compile with the @code{g77} options @samp{-fno-f90 -fugly-complex},
+Compile with the @command{g77} options @samp{-fno-f90 -fugly-complex},
to enable the non-Fortran-90 interpretations.
@end itemize
@@ -14709,7 +11951,7 @@ in another program unit in the same source file.
This diagnostic is designed to catch cases where a program
might depend on using the name @var{intrinsic} as an intrinsic
in one program unit and as a global name (such as the name
-of a subroutine or function) in another, but @code{g77} recognizes
+of a subroutine or function) in another, but @command{g77} recognizes
the name as an intrinsic in both cases.
After verifying that the program unit making implicit use
@@ -14718,15 +11960,15 @@ add an @samp{INTRINSIC @var{intrinsic}} statement to that
program unit to prevent this warning.
This and related warnings are disabled by using
-the @samp{-Wno-globals} option when compiling.
+the @option{-Wno-globals} option when compiling.
Note that this warning is not issued for standard intrinsics.
Standard intrinsics include those described in the FORTRAN 77
-standard and, if @samp{-ff90} is specified, those described
+standard and, if @option{-ff90} is specified, those described
in the Fortran 90 standard.
Such intrinsics are not as likely to be confused with user
procedures as intrinsics provided as extensions to the
-standard by @code{g77}.
+standard by @command{g77}.
@node INTGLOB
@section @code{INTGLOB}
@@ -14741,7 +11983,7 @@ block or a program unit) in one program unit and implicitly
used as an intrinsic in another program unit.
This diagnostic is designed to catch cases where a program
-intends to use a name entirely as a global name, but @code{g77}
+intends to use a name entirely as a global name, but @command{g77}
recognizes the name as an intrinsic in the program unit that
references the name, a situation that would likely produce
incorrect code.
@@ -14761,14 +12003,14 @@ END
The above example defines a program unit named @samp{TIME}, but
the reference to @samp{TIME} in the main program unit @samp{SAMP}
-is normally treated by @code{g77} as a reference to the intrinsic
+is normally treated by @command{g77} as a reference to the intrinsic
@code{TIME()} (unless a command-line option that prevents such
treatment has been specified).
As a result, the program @samp{SAMP} will @emph{not}
invoke the @samp{TIME} function in the same source file.
-Since @code{g77} recognizes @code{libU77} procedures as
+Since @command{g77} recognizes @code{libU77} procedures as
intrinsics, and since some existing code uses the same names
for its own procedures as used by some @code{libU77}
procedures, this situation is expected to arise often enough
@@ -14781,20 +12023,20 @@ program unit to prevent this warning.
Or, if you believe the program unit is designed to invoke the
program-defined procedure instead of the intrinsic (as
-recognized by @code{g77}), add an @samp{EXTERNAL @var{intrinsic}}
+recognized by @command{g77}), add an @samp{EXTERNAL @var{intrinsic}}
statement to the program unit that references the name to
prevent this warning.
This and related warnings are disabled by using
-the @samp{-Wno-globals} option when compiling.
+the @option{-Wno-globals} option when compiling.
Note that this warning is not issued for standard intrinsics.
Standard intrinsics include those described in the FORTRAN 77
-standard and, if @samp{-ff90} is specified, those described
+standard and, if @option{-ff90} is specified, those described
in the Fortran 90 standard.
Such intrinsics are not as likely to be confused with user
procedures as intrinsics provided as extensions to the
-standard by @code{g77}.
+standard by @command{g77}.
@node LEX
@section @code{LEX}
@@ -14831,7 +12073,7 @@ of parentheses, it might be Lisp source code; if it
contains lots of bugs, it might be C++ source code.
@item
-The source file contains free-form Fortran code, but @samp{-ffree-form}
+The source file contains free-form Fortran code, but @option{-ffree-form}
was not specified on the command line to compile it.
Free form is a newer form for Fortran code.
@@ -14923,26 +12165,27 @@ requires preprocessing.
If the file's suffix is @samp{.f}, @samp{.for}, or @samp{.FOR},
the file normally will be compiled @emph{without} preprocessing
-by @code{g77}.
+by @command{g77}.
Change the file's suffix from @samp{.f} to @samp{.F}
(or, on systems with case-insensitive file names,
to @samp{.fpp} or @samp{.FPP}),
from @samp{.for} to @samp{.fpp},
or from @samp{.FOR} to @samp{.FPP}.
-@code{g77} compiles files with such names @emph{with}
+@command{g77} compiles files with such names @emph{with}
preprocessing.
@pindex cpp
@cindex preprocessor
@cindex cpp program
@cindex programs, cpp
-@cindex @samp{-x f77-cpp-input} option
-@cindex options, @samp{-x f77-cpp-input}
-Or, learn how to use @code{gcc}'s @samp{-x} option to specify
+@cindex @option{-x f77-cpp-input} option
+@cindex options, @option{-x f77-cpp-input}
+Or, learn how to use @command{gcc}'s @option{-x} option to specify
the language @samp{f77-cpp-input} for Fortran files that
require preprocessing.
-@xref{Overall Options,,gcc,Using and Porting GNU CC}.
+@xref{Overall Options,,Options Controlling the Kind of
+Output,gcc,Using the GNU Compiler Collection (GCC)}.
@item
The source file is preprocessed, and the results of preprocessing
@@ -14991,16 +12234,16 @@ Other disagreements are diagnosed via warnings.
@cindex in-line code
@cindex compilation, in-line
This distinction, between warnings and errors,
-is due primarily to the present tendency of the @code{gcc} back end
+is due primarily to the present tendency of the @command{gcc} back end
to inline only those procedure invocations that are
@emph{preceded} by the corresponding procedure definitions.
-If the @code{gcc} back end is changed
+If the @command{gcc} back end is changed
to inline ``forward references'',
in which invocations precede definitions,
-the @code{g77} front end will be changed
+the @command{g77} front end will be changed
to treat both orderings as errors, accordingly.
-The sorts of disagreements that are diagnosed by @code{g77} include
+The sorts of disagreements that are diagnosed by @command{g77} include
whether a procedure is a subroutine or function;
if it is a function, the type of the return value of the procedure;
the number of arguments the procedure accepts;
@@ -15011,18 +12254,18 @@ in a Fortran program @emph{should} be fixed in the code itself.
However, if that is not immediately practical,
and the code has been working for some time,
it is possible it will work
-when compiled with the @samp{-fno-globals} option.
+when compiled with the @option{-fno-globals} option.
-The @samp{-fno-globals} option
+The @option{-fno-globals} option
causes these diagnostics to all be warnings
and disables all inlining of references to global procedures
(to avoid subsequent compiler crashes and bad-code generation).
-Use of the @samp{-Wno-globals} option as well as @samp{-fno-globals}
+Use of the @option{-Wno-globals} option as well as @option{-fno-globals}
suppresses all of these diagnostics.
-(@samp{-Wno-globals} by itself disables only the warnings,
+(@option{-Wno-globals} by itself disables only the warnings,
not the errors.)
-After using @samp{-fno-globals} to work around these problems,
+After using @option{-fno-globals} to work around these problems,
it is wise to stop using that option and address them by fixing
the Fortran code, because such problems, while they might not
actually result in bugs on some systems, indicate that the code
@@ -15035,28 +12278,14 @@ without exhibiting any other outward manifestations of the bugs.
@section @code{LINKFAIL}
@noindent
-@smallexample
-If the above command failed due to an unresolved reference
-to strtoul, _strtoul, bsearch, _bsearch, or similar, see
-[info -f g77 M LINKFAIL] (a node in the g77 documentation)
-for information on what causes this, how to work around
-the problem by editing $@{srcdir@}/proj.c, and what else to do.
-@end smallexample
-
-@xref{Missing strtoul or bsearch}, for more information on
-this problem,
-which occurs only in releases of @code{g77}
-based on @code{gcc}.
-(It does not occur in @code{egcs}.)
-
-On AIX 4.1, @code{g77} might not build with the native (non-GNU) tools
-due to a linker bug in coping with the @samp{-bbigtoc} option which
+On AIX 4.1, @command{g77} might not build with the native (non-GNU) tools
+due to a linker bug in coping with the @option{-bbigtoc} option which
leads to a @samp{Relocation overflow} error. The GNU linker is not
recommended on current AIX versions, though; it was developed under a
now-unsupported version. This bug is said to be fixed by `update PTF
U455193 for APAR IX75823'.
-Compiling with @samp{-mminimal-toc}
+Compiling with @option{-mminimal-toc}
might solve this problem, e.g.@: by adding
@smallexample
BOOT_CFLAGS='-mminimal-toc -O2 -g'
@@ -15086,6 +12315,4 @@ that is not Year-2000 (Y2K) compliant.
@unnumbered Index
@printindex cp
-@summarycontents
-@contents
@bye
diff --git a/contrib/gcc/f/g77spec.c b/contrib/gcc/f/g77spec.c
index 93a363c..2e094d9 100644
--- a/contrib/gcc/f/g77spec.c
+++ b/contrib/gcc/f/g77spec.c
@@ -1,5 +1,5 @@
/* Specific flags and argument handling of the Fortran front-end.
- Copyright (C) 1997, 1999, 2000 Free Software Foundation, Inc.
+ Copyright (C) 1997, 1999, 2000, 2001, 2002 Free Software Foundation, Inc.
This file is part of GNU CC.
@@ -46,12 +46,17 @@ Boston, MA 02111-1307, USA. */
#include "config.h"
#include "system.h"
+#include "gcc.h"
#include <f/version.h>
#ifndef MATH_LIBRARY
#define MATH_LIBRARY "-lm"
#endif
+#ifndef FORTRAN_INIT
+#define FORTRAN_INIT "-lfrtbegin"
+#endif
+
#ifndef FORTRAN_LIBRARY
#define FORTRAN_LIBRARY "-lg2c"
#endif
@@ -85,14 +90,14 @@ typedef enum
/* The original argument list and related info is copied here. */
static int g77_xargc;
-static char **g77_xargv;
-static void (*g77_fn)();
+static const char *const *g77_xargv;
+static void lookup_option PARAMS ((Option *, int *, const char **,
+ const char *));
+static void append_arg PARAMS ((const char *));
/* The new argument list will be built here. */
static int g77_newargc;
-static char **g77_newargv;
-
-extern char *version_string;
+static const char **g77_newargv;
/* --- This comes from gcc.c (2.8.1) verbatim: */
@@ -136,12 +141,12 @@ static void
lookup_option (xopt, xskip, xarg, text)
Option *xopt;
int *xskip;
- char **xarg;
- char *text;
+ const char **xarg;
+ const char *text;
{
Option opt = OPTION_;
int skip;
- char *arg = NULL;
+ const char *arg = NULL;
if ((skip = SWITCH_TAKES_ARG (text[1])))
skip -= (text[2] != '\0'); /* See gcc.c. */
@@ -189,6 +194,8 @@ lookup_option (xopt, xskip, xarg, text)
opt = OPTION_syntax_only;
else if (! strcmp (text, "-dumpversion"))
opt = OPTION_version;
+ else if (! strcmp (text, "-fversion")) /* Really --version!! */
+ opt = OPTION_version;
else if (! strcmp (text, "-Xlinker")
|| ! strcmp (text, "-specs"))
skip = 1;
@@ -216,7 +223,7 @@ lookup_option (xopt, xskip, xarg, text)
static void
append_arg (arg)
- char *arg;
+ const char *arg;
{
static int newargsize;
@@ -238,7 +245,7 @@ append_arg (arg)
int i;
newargsize = (g77_xargc << 2) + 20; /* This should handle all. */
- g77_newargv = (char **) xmalloc (newargsize * sizeof (char *));
+ g77_newargv = (const char **) xmalloc (newargsize * sizeof (char *));
/* Copy what has been done so far. */
for (i = 0; i < g77_newargc; ++i)
@@ -246,36 +253,28 @@ append_arg (arg)
}
if (g77_newargc == newargsize)
- (*g77_fn) ("overflowed output arg list for `%s'", arg);
+ fatal ("overflowed output arg list for `%s'", arg);
g77_newargv[g77_newargc++] = arg;
}
void
-lang_specific_driver (fn, in_argc, in_argv, in_added_libraries)
- void (*fn)();
+lang_specific_driver (in_argc, in_argv, in_added_libraries)
int *in_argc;
- char ***in_argv;
- int *in_added_libraries;
+ const char *const **in_argv;
+ int *in_added_libraries ATTRIBUTE_UNUSED;
{
int argc = *in_argc;
- char **argv = *in_argv;
+ const char *const *argv = *in_argv;
int i;
int verbose = 0;
Option opt;
int skip;
- char *arg;
+ const char *arg;
/* This will be NULL if we encounter a situation where we should not
link in libf2c. */
- char *library = FORTRAN_LIBRARY;
-
- /* This will become 0 if anything other than -v and kin (like -V)
- is seen, meaning the user is trying to accomplish something.
- If it remains nonzero, and the user wants version info, add stuff to
- the command line to make gcc invoke all the appropriate phases
- to get all the version info. */
- int add_version_magic = 1;
+ const char *library = FORTRAN_LIBRARY;
/* 0 => -xnone in effect.
1 => -xfoo in effect. */
@@ -286,6 +285,9 @@ lang_specific_driver (fn, in_argc, in_argv, in_added_libraries)
2 => last two args were -l<library> -lm. */
int saw_library = 0;
+ /* 0 => initial/reset state
+ 1 => FORTRAN_INIT linked in */
+ int use_init = 0;
/* By default, we throw on the math library if we have one. */
int need_math = (MATH_LIBRARY[0] != '\0');
@@ -303,8 +305,7 @@ lang_specific_driver (fn, in_argc, in_argv, in_added_libraries)
g77_xargc = argc;
g77_xargv = argv;
g77_newargc = 0;
- g77_newargv = argv;
- g77_fn = fn;
+ g77_newargv = (const char **) argv;
/* First pass through arglist.
@@ -325,14 +326,12 @@ lang_specific_driver (fn, in_argc, in_argv, in_added_libraries)
{
if ((argv[i][0] == '+') && (argv[i][1] == 'e'))
{
- add_version_magic = 0;
continue;
}
if ((argv[i][0] != '-') || (argv[i][1] == '\0'))
{
++n_infiles;
- add_version_magic = 0;
continue;
}
@@ -350,23 +349,17 @@ lang_specific_driver (fn, in_argc, in_argv, in_added_libraries)
/* These options disable linking entirely or linking of the
standard libraries. */
library = 0;
- add_version_magic = 0;
break;
case OPTION_l:
++n_infiles;
- add_version_magic = 0;
break;
case OPTION_o:
++n_outfiles;
- add_version_magic = 0;
break;
case OPTION_v:
- if (! verbose)
- fprintf (stderr, "g77 version %s (from FSF-g77 version %s)\n",
- version_string, ffe_version_string);
verbose = 1;
break;
@@ -381,64 +374,28 @@ lang_specific_driver (fn, in_argc, in_argv, in_added_libraries)
case OPTION_version:
printf ("\
-GNU Fortran %s\n\
-Copyright (C) 1997 Free Software Foundation, Inc.\n\
-For more version information on components of the GNU Fortran\n\
-compilation system, especially useful when reporting bugs,\n\
-type the command `g77 --verbose'.\n\
+GNU Fortran (GCC %s) %s\n\
+Copyright (C) 2002 Free Software Foundation, Inc.\n\
\n\
GNU Fortran comes with NO WARRANTY, to the extent permitted by law.\n\
You may redistribute copies of GNU Fortran\n\
under the terms of the GNU General Public License.\n\
For more information about these matters, see the file named COPYING\n\
or type the command `info -f g77 Copying'.\n\
-", ffe_version_string);
+", version_string, ffe_version_string);
exit (0);
break;
case OPTION_help:
- /* Let gcc.c handle this, as the egcs version has a really
+ /* Let gcc.c handle this, as it has a really
cool facility for handling --help and --verbose --help. */
return;
-#if 0
- printf ("\
-Usage: g77 [OPTION]... FORTRAN-SOURCE...\n\
-\n\
-Compile and link Fortran source code to produce an executable program,\n\
-which by default is named `a.out', and can be invoked with the UNIX\n\
-command `./a.out'.\n\
-\n\
-Options:\n\
---debug include debugging information in executable.\n\
---help display this help and exit.\n\
---optimize[=LEVEL] take extra time and memory to make generated\n\
- executable run faster. LEVEL is 0 for no\n\
- optimization, 1 for normal optimization, and\n\
- increases through 3 for more optimization.\n\
---output=PROGRAM name the executable PROGRAM instead of a.out;\n\
- invoke with the command `./PROGRAM'.\n\
---version display version information and exit.\n\
-\n\
-Many other options exist to tailor the compilation process, specify\n\
-the dialect of the Fortran source code, specify details of the\n\
-code-generation methodology, and so on.\n\
-\n\
-For more information on g77 and gcc, type the commands `info -f g77'\n\
-and `info -f gcc' to read the Info documentation.\n\
-\n\
-For bug reporting instructions, please see:\n\
-%s.\n", GCCBUGURL);
- exit (0);
- break;
-#endif
-
case OPTION_driver:
- (*fn) ("--driver no longer supported", argv[i]);
+ fatal ("--driver no longer supported");
break;
default:
- add_version_magic = 0;
break;
}
@@ -448,11 +405,15 @@ For bug reporting instructions, please see:\n\
if (i + skip < argc)
i += skip;
else
- (*fn) ("argument to `%s' missing", argv[i]);
+ fatal ("argument to `%s' missing", argv[i]);
}
if ((n_outfiles != 0) && (n_infiles == 0))
- (*fn) ("No input files; unwilling to write output files");
+ fatal ("no input files; unwilling to write output files");
+
+ /* If there are no input files, no need for the library. */
+ if (n_infiles == 0)
+ library = 0;
/* Second pass through arglist, transforming arguments as appropriate. */
@@ -486,7 +447,7 @@ For bug reporting instructions, please see:\n\
if (opt == OPTION_x)
{
/* Track input language. */
- char *lang;
+ const char *lang;
if (arg == NULL)
lang = argv[i+1];
@@ -519,7 +480,14 @@ For bug reporting instructions, please see:\n\
if (saw_library == 1)
saw_library = 2; /* -l<library> -lm. */
else
- append_arg (FORTRAN_LIBRARY);
+ {
+ if (0 == use_init)
+ {
+ append_arg (FORTRAN_INIT);
+ use_init = 1;
+ }
+ append_arg (FORTRAN_LIBRARY);
+ }
}
else if (strcmp (argv[i], FORTRAN_LIBRARY) == 0)
saw_library = 1; /* -l<library>. */
@@ -535,7 +503,7 @@ For bug reporting instructions, please see:\n\
/* Append `-lg2c -lm' as necessary. */
- if (! add_version_magic && library)
+ if (library)
{ /* Doing a link and no -nostdlib. */
if (saw_speclang)
append_arg ("-xnone");
@@ -543,6 +511,11 @@ For bug reporting instructions, please see:\n\
switch (saw_library)
{
case 0:
+ if (0 == use_init)
+ {
+ append_arg (FORTRAN_INIT);
+ use_init = 1;
+ }
append_arg (library);
case 1:
if (need_math)
@@ -551,13 +524,23 @@ For bug reporting instructions, please see:\n\
break;
}
}
- else if (add_version_magic && verbose)
+
+#ifdef ENABLE_SHARED_LIBGCC
+ if (library)
{
- append_arg ("-c");
- append_arg ("-xf77-version");
- append_arg ("/dev/null");
- append_arg ("-xnone");
+ int i;
+
+ for (i = 1; i < g77_newargc; i++)
+ if (g77_newargv[i][0] == '-')
+ if (strcmp (g77_newargv[i], "-static-libgcc") == 0
+ || strcmp (g77_newargv[i], "-static") == 0)
+ break;
+
+ if (i == g77_newargc)
+ append_arg ("-shared-libgcc");
}
+
+#endif
if (verbose
&& g77_newargv != g77_xargv)
diff --git a/contrib/gcc/f/global.c b/contrib/gcc/f/global.c
index 85311f1..1fe9270 100644
--- a/contrib/gcc/f/global.c
+++ b/contrib/gcc/f/global.c
@@ -60,7 +60,7 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#if FFEGLOBAL_ENABLED
static ffenameSpace ffeglobal_filewide_ = NULL;
-static const char *ffeglobal_type_string_[] =
+static const char *const ffeglobal_type_string_[] =
{
[FFEGLOBAL_typeNONE] "??",
[FFEGLOBAL_typeMAIN] "main program",
diff --git a/contrib/gcc/f/global.h b/contrib/gcc/f/global.h
index eaf9921..15d984f 100644
--- a/contrib/gcc/f/global.h
+++ b/contrib/gcc/f/global.h
@@ -27,8 +27,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* Allow multiple inclusion to work. */
-#ifndef _H_f_global
-#define _H_f_global
+#ifndef GCC_F_GLOBAL_H
+#define GCC_F_GLOBAL_H
/* Simple definitions and enumerations. */
@@ -153,13 +153,7 @@ void ffeglobal_terminate_1 (void);
/* Define macros. */
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-#define FFEGLOBAL_ENABLED 0
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
#define FFEGLOBAL_ENABLED 1
-#else
-#error
-#endif
#define ffeglobal_common_init(g) ((g)->tick != 0)
#define ffeglobal_common_have_pad(g) ((g)->u.common.have_pad)
@@ -197,4 +191,5 @@ void ffeglobal_terminate_1 (void);
/* End of #include file. */
-#endif
+#endif /* ! GCC_F_GLOBAL_H */
+
diff --git a/contrib/gcc/f/implic.c b/contrib/gcc/f/implic.c
index 7e0c61b..625742f 100644
--- a/contrib/gcc/f/implic.c
+++ b/contrib/gcc/f/implic.c
@@ -92,7 +92,7 @@ static ffeimplic_
ffeimplic_lookup_ (unsigned char c)
{
/* NOTE: This is definitely ASCII-specific!! */
- if (ISALPHA (c) || (c == '_'))
+ if (ISIDST (c))
return &ffeimplic_table_[c - 'A'];
return NULL;
}
diff --git a/contrib/gcc/f/implic.h b/contrib/gcc/f/implic.h
index ae96653..44fbfac 100644
--- a/contrib/gcc/f/implic.h
+++ b/contrib/gcc/f/implic.h
@@ -27,8 +27,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* Allow multiple inclusion to work. */
-#ifndef _H_f_implic
-#define _H_f_implic
+#ifndef GCC_F_IMPLIC_H
+#define GCC_F_IMPLIC_H
/* Simple definitions and enumerations. */
@@ -71,4 +71,4 @@ void ffeimplic_terminate_2 (void);
/* End of #include file. */
-#endif
+#endif /* ! GCC_F_IMPLIC_H */
diff --git a/contrib/gcc/f/info-k.def b/contrib/gcc/f/info-k.def
index 30fb382..9e6052d 100644
--- a/contrib/gcc/f/info-k.def
+++ b/contrib/gcc/f/info-k.def
@@ -1,5 +1,5 @@
/* info-k.def -- Public #include File (module.h template V1.0)
- Copyright (C) 1995 Free Software Foundation, Inc.
+ Copyright (C) 1995, 2002 Free Software Foundation, Inc.
Contributed by James Craig Burley.
This file is part of GNU Fortran.
@@ -25,13 +25,17 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
Modifications:
*/
-FFEINFO_KIND (FFEINFO_kindNONE, "an unknown kind", "")
-FFEINFO_KIND (FFEINFO_kindENTITY, "an entity", "e")
-FFEINFO_KIND (FFEINFO_kindFUNCTION, "a function", "f")
-FFEINFO_KIND (FFEINFO_kindSUBROUTINE, "a subroutine", "u")
-FFEINFO_KIND (FFEINFO_kindPROGRAM, "a program", "p")
-FFEINFO_KIND (FFEINFO_kindBLOCKDATA, "a block-data unit", "b")
-FFEINFO_KIND (FFEINFO_kindCOMMON, "a common block", "c")
-FFEINFO_KIND (FFEINFO_kindCONSTRUCT, "a construct", ":")
-FFEINFO_KIND (FFEINFO_kindNAMELIST, "a namelist", "n")
-FFEINFO_KIND (FFEINFO_kindANY, "anything", "~")
+#
+/* Kind messages are used in diagnostic location reports of the
+ form "<file>: In function `foo': <error message>". */
+
+FFEINFO_KIND (FFEINFO_kindNONE, "In unknown kind", "")
+FFEINFO_KIND (FFEINFO_kindENTITY, "In entity", "e")
+FFEINFO_KIND (FFEINFO_kindFUNCTION, "In function", "f")
+FFEINFO_KIND (FFEINFO_kindSUBROUTINE, "In subroutine", "u")
+FFEINFO_KIND (FFEINFO_kindPROGRAM, "In program", "p")
+FFEINFO_KIND (FFEINFO_kindBLOCKDATA, "In block-data unit", "b")
+FFEINFO_KIND (FFEINFO_kindCOMMON, "In common block", "c")
+FFEINFO_KIND (FFEINFO_kindCONSTRUCT, "In construct", ":")
+FFEINFO_KIND (FFEINFO_kindNAMELIST, "In namelist", "n")
+FFEINFO_KIND (FFEINFO_kindANY, "In anything", "~")
diff --git a/contrib/gcc/f/info.c b/contrib/gcc/f/info.c
index 784e699..1bedaa0 100644
--- a/contrib/gcc/f/info.c
+++ b/contrib/gcc/f/info.c
@@ -1,5 +1,5 @@
/* info.c -- Implementation File (module.c template V1.0)
- Copyright (C) 1995 Free Software Foundation, Inc.
+ Copyright (C) 1995, 2002 Free Software Foundation, Inc.
Contributed by James Craig Burley.
This file is part of GNU Fortran.
@@ -55,21 +55,21 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* Static objects accessed by functions in this module. */
-static const char *ffeinfo_basictype_string_[]
+static const char *const ffeinfo_basictype_string_[]
=
{
#define FFEINFO_BASICTYPE(KWD,LNAM,SNAM) SNAM,
#include "info-b.def"
#undef FFEINFO_BASICTYPE
};
-static const char *ffeinfo_kind_message_[]
+static const char *const ffeinfo_kind_message_[]
=
{
-#define FFEINFO_KIND(KWD,LNAM,SNAM) LNAM,
+#define FFEINFO_KIND(kwd,msgid,snam) msgid,
#include "info-k.def"
#undef FFEINFO_KIND
};
-static const char *ffeinfo_kind_string_[]
+static const char *const ffeinfo_kind_string_[]
=
{
#define FFEINFO_KIND(KWD,LNAM,SNAM) SNAM,
@@ -77,7 +77,7 @@ static const char *ffeinfo_kind_string_[]
#undef FFEINFO_KIND
};
static ffeinfoBasictype ffeinfo_combine_[FFEINFO_basictype][FFEINFO_basictype];
-static const char *ffeinfo_kindtype_string_[]
+static const char *const ffeinfo_kindtype_string_[]
=
{
"",
@@ -91,15 +91,14 @@ static const char *ffeinfo_kindtype_string_[]
"8",
"*",
};
-static const char *ffeinfo_where_string_[]
+static const char *const ffeinfo_where_string_[]
=
{
#define FFEINFO_WHERE(KWD,LNAM,SNAM) SNAM,
#include "info-w.def"
#undef FFEINFO_WHERE
};
-static ffetype ffeinfo_types_[FFEINFO_basictype][FFEINFO_kindtype]
- = { { NULL } };
+static ffetype ffeinfo_types_[FFEINFO_basictype][FFEINFO_kindtype];
/* Static functions (internal). */
diff --git a/contrib/gcc/f/info.h b/contrib/gcc/f/info.h
index bbf4e94..69defd2 100644
--- a/contrib/gcc/f/info.h
+++ b/contrib/gcc/f/info.h
@@ -29,8 +29,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* Allow multiple inclusion to work. */
-#ifndef _H_f_info
-#define _H_f_info
+#ifndef GCC_F_INFO_H
+#define GCC_F_INFO_H
/* Simple definitions and enumerations. */
@@ -183,4 +183,4 @@ ffetype ffeinfo_type (ffeinfoBasictype basictype, ffeinfoKindtype kindtype);
/* End of #include file. */
-#endif
+#endif /* ! GCC_F_INFO_H */
diff --git a/contrib/gcc/f/intdoc.c b/contrib/gcc/f/intdoc.c
index 7e0a630..84720a3 100644
--- a/contrib/gcc/f/intdoc.c
+++ b/contrib/gcc/f/intdoc.c
@@ -1,5 +1,5 @@
/* intdoc.c
- Copyright (C) 1997 Free Software Foundation, Inc.
+ Copyright (C) 1997, 2000, 2001 Free Software Foundation, Inc.
Contributed by James Craig Burley.
This file is part of GNU Fortran.
@@ -22,25 +22,9 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* From f/proj.h, which uses #error -- not all C compilers
support that, and we want *this* program to be compilable
by pretty much any C compiler. */
-#include "hconfig.j"
-#include "system.j"
-#include "assert.j"
-#if HAVE_STDDEF_H
-#include <stddef.h>
-#endif
-
-typedef enum
- {
-#if !defined(false) || !defined(true)
- false = 0, true = 1,
-#endif
-#if !defined(FALSE) || !defined(TRUE)
- FALSE = 0, TRUE = 1,
-#endif
- Doggone_Trailing_Comma_Dont_Work = 1
- } bool;
-
-#define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0]))
+#include "hconfig.h"
+#include "system.h"
+#include "assert.h"
/* Pull in the intrinsics info, but only the doc parts. */
#define FFEINTRIN_DOC 1
@@ -86,39 +70,36 @@ Usage: intdoc > intdoc.texi\n\
struct _ffeintrin_name_
{
- const char *name_uc;
- const char *name_lc;
- const char *name_ic;
- ffeintrinGen generic;
- ffeintrinSpec specific;
+ const char *const name_uc;
+ const char *const name_lc;
+ const char *const name_ic;
+ const ffeintrinGen generic;
+ const ffeintrinSpec specific;
};
struct _ffeintrin_gen_
{
- const char *name; /* Name as seen in program. */
- ffeintrinSpec specs[2];
+ const char *const name; /* Name as seen in program. */
+ const ffeintrinSpec specs[2];
};
struct _ffeintrin_spec_
{
- const char *name; /* Uppercase name as seen in source code,
+ const char *const name; /* Uppercase name as seen in source code,
lowercase if no source name, "none" if no
name at all (NONE case). */
- bool is_actualarg; /* Ok to pass as actual arg if -pedantic. */
- ffeintrinFamily family;
- ffeintrinImp implementation;
+ const bool is_actualarg; /* Ok to pass as actual arg if -pedantic. */
+ const ffeintrinFamily family;
+ const ffeintrinImp implementation;
};
struct _ffeintrin_imp_
{
- const char *name; /* Name of implementation. */
-#if 0 /* FFECOM_targetCURRENT == FFECOM_targetGCC */
- ffecomGfrt gfrt; /* gfrt index in library. */
-#endif /* FFECOM_targetCURRENT == FFECOM_targetGCC */
- const char *control;
+ const char *const name; /* Name of implementation. */
+ const char *const control;
};
-static struct _ffeintrin_name_ names[] = {
+static const struct _ffeintrin_name_ names[] = {
#define DEFNAME(UPPER,LOWER,MIXED,GEN,SPEC) \
{ UPPER, LOWER, MIXED, FFEINTRIN_ ## GEN, FFEINTRIN_ ## SPEC },
#define DEFGEN(CODE,NAME,SPEC1,SPEC2)
@@ -133,7 +114,7 @@ static struct _ffeintrin_name_ names[] = {
#undef DEFIMPY
};
-static struct _ffeintrin_gen_ gens[] = {
+static const struct _ffeintrin_gen_ gens[] = {
#define DEFNAME(UPPER,LOWER,MIXED,GEN,SPEC)
#define DEFGEN(CODE,NAME,SPEC1,SPEC2) \
{ NAME, { SPEC1, SPEC2, }, },
@@ -148,23 +129,14 @@ static struct _ffeintrin_gen_ gens[] = {
#undef DEFIMPY
};
-static struct _ffeintrin_imp_ imps[] = {
+static const struct _ffeintrin_imp_ imps[] = {
#define DEFNAME(UPPER,LOWER,MIXED,GEN,SPEC)
#define DEFGEN(CODE,NAME,SPEC1,SPEC2)
#define DEFSPEC(CODE,NAME,CALLABLE,FAMILY,IMP)
-#if 0 /* FFECOM_targetCURRENT == FFECOM_targetGCC */
-#define DEFIMP(CODE,NAME,GFRTDIRECT,GFRTF2C,GFRTGNU,CONTROL) \
- { NAME, FFECOM_gfrt ## GFRT, CONTROL },
-#define DEFIMPY(CODE,NAME,GFRTDIRECT,GFRTF2C,GFRTGNU,CONTROL,Y2KBAD) \
- { NAME, FFECOM_gfrt ## GFRT, CONTROL },
-#elif 1 /* FFECOM_targetCURRENT == FFECOM_targetFFE */
#define DEFIMP(CODE,NAME,GFRTDIRECT,GFRTF2C,GFRTGNU,CONTROL) \
{ NAME, CONTROL },
#define DEFIMPY(CODE,NAME,GFRTDIRECT,GFRTF2C,GFRTGNU,CONTROL,Y2KBAD) \
{ NAME, CONTROL },
-#else
-#error
-#endif
#include "intrin.def"
#undef DEFNAME
#undef DEFGEN
@@ -173,7 +145,7 @@ static struct _ffeintrin_imp_ imps[] = {
#undef DEFIMPY
};
-static struct _ffeintrin_spec_ specs[] = {
+static const struct _ffeintrin_spec_ specs[] = {
#define DEFNAME(UPPER,LOWER,MIXED,GEN,SPEC)
#define DEFGEN(CODE,NAME,SPEC1,SPEC2)
#define DEFSPEC(CODE,NAME,CALLABLE,FAMILY,IMP) \
@@ -187,17 +159,17 @@ static struct _ffeintrin_spec_ specs[] = {
#undef DEFIMPY
};
-struct cc_pair { ffeintrinImp imp; const char *text; };
+struct cc_pair { const ffeintrinImp imp; const char *const text; };
static const char *descriptions[FFEINTRIN_imp] = { 0 };
-static struct cc_pair cc_descriptions[] = {
+static const struct cc_pair cc_descriptions[] = {
#define DEFDOC(IMP,SUMMARY,DESCRIPTION) { FFEINTRIN_imp ## IMP, DESCRIPTION },
#include "intdoc.h0"
#undef DEFDOC
};
static const char *summaries[FFEINTRIN_imp] = { 0 };
-static struct cc_pair cc_summaries[] = {
+static const struct cc_pair cc_summaries[] = {
#define DEFDOC(IMP,SUMMARY,DESCRIPTION) { FFEINTRIN_imp ## IMP, SUMMARY },
#include "intdoc.h0"
#undef DEFDOC
@@ -427,15 +399,12 @@ dumpimp (int menu, const char *name, const char *name_uc, size_t genno,
for (c = summaries[imp]; c[0] != '\0'; ++c)
{
- if ((c[0] == '@')
- && (c[1] >= '0')
- && (c[1] <= '9'))
+ if (c[0] == '@' && ISDIGIT (c[1]))
{
int argno = c[1] - '0';
c += 2;
- while ((c[0] >= '0')
- && (c[0] <= '9'))
+ while (ISDIGIT (c[0]))
{
argno = 10 * argno + (c[0] - '0');
++c;
@@ -523,8 +492,7 @@ external procedure.\n\
const char *arg_string;
const char *arg_info;
- if ((c[colon + 1] >= '0')
- && (c[colon + 1] <= '9'))
+ if (ISDIGIT (c[colon + 1]))
{
other_arg = c[colon + 1] - '0';
arg_string = argument_name_string (imp, other_arg);
@@ -576,9 +544,7 @@ this intrinsic is valid only when used as the argument to\n\
printf (", the exact type being wide enough to hold a pointer\n\
on the target system (typically @code{INTEGER(KIND=1)} or @code{INTEGER(KIND=4)}).\n\n");
#endif
- else if ((c[1] == '=')
- && (c[colon + 1] >= '0')
- && (c[colon + 1] <= '9'))
+ else if (c[1] == '=' && ISDIGIT (c[colon + 1]))
{
assert (other_arg >= 0);
@@ -1039,15 +1005,12 @@ Description:\n\
while (c[0] != '\0')
{
- if ((c[0] == '@')
- && (c[1] >= '0')
- && (c[1] <= '9'))
+ if (c[0] == '@' && ISDIGIT (c[1]))
{
int argno = c[1] - '0';
c += 2;
- while ((c[0] >= '0')
- && (c[0] <= '9'))
+ while (ISDIGIT (c[0]))
{
argno = 10 * argno + (c[0] - '0');
++c;
diff --git a/contrib/gcc/f/intdoc.in b/contrib/gcc/f/intdoc.in
index 565b771..f702fa1 100644
--- a/contrib/gcc/f/intdoc.in
+++ b/contrib/gcc/f/intdoc.in
@@ -55,11 +55,11 @@ If @var{@1@} is type @code{COMPLEX}, the absolute
value is computed as:
@example
-SQRT(REALPART(@var{@1@})**2, IMAGPART(@var{@1@})**2)
+SQRT(REALPART(@var{@1@})**2+IMAGPART(@var{@1@})**2)
@end example
@noindent
-Otherwise, it is computed by negating the @var{@1@} if
+Otherwise, it is computed by negating @var{@1@} if
it is negative, or returning @var{@1@}.
@xref{Sign Intrinsic}, for how to explicitly
diff --git a/contrib/gcc/f/intdoc.texi b/contrib/gcc/f/intdoc.texi
index a34f700..6165e44 100644
--- a/contrib/gcc/f/intdoc.texi
+++ b/contrib/gcc/f/intdoc.texi
@@ -868,11 +868,11 @@ If @var{A} is type @code{COMPLEX}, the absolute
value is computed as:
@example
-SQRT(REALPART(@var{A})**2, IMAGPART(@var{A})**2)
+SQRT(REALPART(@var{A})**2+IMAGPART(@var{A})**2)
@end example
@noindent
-Otherwise, it is computed by negating the @var{A} if
+Otherwise, it is computed by negating @var{A} if
it is negative, or returning @var{A}.
@xref{Sign Intrinsic}, for how to explicitly
diff --git a/contrib/gcc/f/intrin.c b/contrib/gcc/f/intrin.c
index dbf375b..83a478c 100644
--- a/contrib/gcc/f/intrin.c
+++ b/contrib/gcc/f/intrin.c
@@ -1,5 +1,5 @@
/* intrin.c -- Recognize references to intrinsics
- Copyright (C) 1995-1998 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1996, 1997, 1998, 2002 Free Software Foundation, Inc.
Contributed by James Craig Burley.
This file is part of GNU Fortran.
@@ -32,39 +32,37 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
struct _ffeintrin_name_
{
- const char *name_uc;
- const char *name_lc;
- const char *name_ic;
- ffeintrinGen generic;
- ffeintrinSpec specific;
+ const char *const name_uc;
+ const char *const name_lc;
+ const char *const name_ic;
+ const ffeintrinGen generic;
+ const ffeintrinSpec specific;
};
struct _ffeintrin_gen_
{
- const char *name; /* Name as seen in program. */
- ffeintrinSpec specs[2];
+ const char *const name; /* Name as seen in program. */
+ const ffeintrinSpec specs[2];
};
struct _ffeintrin_spec_
{
- const char *name; /* Uppercase name as seen in source code,
+ const char *const name; /* Uppercase name as seen in source code,
lowercase if no source name, "none" if no
name at all (NONE case). */
- bool is_actualarg; /* Ok to pass as actual arg if -pedantic. */
- ffeintrinFamily family;
- ffeintrinImp implementation;
+ const bool is_actualarg; /* Ok to pass as actual arg if -pedantic. */
+ const ffeintrinFamily family;
+ const ffeintrinImp implementation;
};
struct _ffeintrin_imp_
{
- const char *name; /* Name of implementation. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
- ffecomGfrt gfrt_direct; /* library routine, direct-callable form. */
- ffecomGfrt gfrt_f2c; /* library routine, f2c-callable form. */
- ffecomGfrt gfrt_gnu; /* library routine, gnu-callable form. */
-#endif /* FFECOM_targetCURRENT == FFECOM_targetGCC */
- const char *control;
- char y2kbad;
+ const char *const name; /* Name of implementation. */
+ const ffecomGfrt gfrt_direct;/* library routine, direct-callable form. */
+ const ffecomGfrt gfrt_f2c; /* library routine, f2c-callable form. */
+ const ffecomGfrt gfrt_gnu; /* library routine, gnu-callable form. */
+ const char *const control;
+ const char y2kbad;
};
static ffebad ffeintrin_check_ (ffeintrinImp imp, ffebldOp op,
@@ -77,7 +75,7 @@ static ffebad ffeintrin_check_ (ffeintrinImp imp, ffebldOp op,
static bool ffeintrin_check_any_ (ffebld arglist);
static int ffeintrin_cmp_name_ (const void *name, const void *intrinsic);
-static struct _ffeintrin_name_ ffeintrin_names_[]
+static const struct _ffeintrin_name_ ffeintrin_names_[]
=
{ /* Alpha order. */
#define DEFNAME(UPPER,LOWER,MIXED,GEN,SPEC) \
@@ -94,7 +92,7 @@ static struct _ffeintrin_name_ ffeintrin_names_[]
#undef DEFIMPY
};
-static struct _ffeintrin_gen_ ffeintrin_gens_[]
+static const struct _ffeintrin_gen_ ffeintrin_gens_[]
=
{
#define DEFNAME(UPPER,LOWER,MIXED,GEN,SPEC)
@@ -111,27 +109,18 @@ static struct _ffeintrin_gen_ ffeintrin_gens_[]
#undef DEFIMPY
};
-static struct _ffeintrin_imp_ ffeintrin_imps_[]
+static const struct _ffeintrin_imp_ ffeintrin_imps_[]
=
{
#define DEFNAME(UPPER,LOWER,MIXED,GEN,SPEC)
#define DEFGEN(CODE,NAME,SPEC1,SPEC2)
#define DEFSPEC(CODE,NAME,CALLABLE,FAMILY,IMP)
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
#define DEFIMP(CODE,NAME,GFRTDIRECT,GFRTF2C,GFRTGNU,CONTROL) \
{ NAME, FFECOM_gfrt ## GFRTDIRECT, FFECOM_gfrt ## GFRTF2C, \
FFECOM_gfrt ## GFRTGNU, CONTROL, FALSE },
#define DEFIMPY(CODE,NAME,GFRTDIRECT,GFRTF2C,GFRTGNU,CONTROL,Y2KBAD) \
{ NAME, FFECOM_gfrt ## GFRTDIRECT, FFECOM_gfrt ## GFRTF2C, \
FFECOM_gfrt ## GFRTGNU, CONTROL, Y2KBAD },
-#elif FFECOM_targetCURRENT == FFECOM_targetFFE
-#define DEFIMP(CODE,NAME,GFRTDIRECT,GFRTF2C,GFRTGNU,CONTROL) \
- { NAME, CONTROL, FALSE },
-#define DEFIMPY(CODE,NAME,GFRTDIRECT,GFRTF2C,GFRTGNU,CONTROL,Y2KBAD) \
- { NAME, CONTROL, Y2KBAD },
-#else
-#error
-#endif
#include "intrin.def"
#undef DEFNAME
#undef DEFGEN
@@ -140,7 +129,7 @@ static struct _ffeintrin_imp_ ffeintrin_imps_[]
#undef DEFIMPY
};
-static struct _ffeintrin_spec_ ffeintrin_specs_[]
+static const struct _ffeintrin_spec_ ffeintrin_specs_[]
=
{
#define DEFNAME(UPPER,LOWER,MIXED,GEN,SPEC)
@@ -633,10 +622,11 @@ ffeintrin_check_ (ffeintrinImp imp, ffebldOp op,
{
bool okay = TRUE;
bool have_anynum = FALSE;
+ int arg_count=0;
- for (arg = args;
+ for (arg = args, arg_count=0;
arg != NULL;
- arg = (c[colon + 1] == '*') ? ffebld_trail (arg) : NULL)
+ arg = ffebld_trail (arg), arg_count++ )
{
ffebld a = ffebld_head (arg);
ffeinfo i;
@@ -646,6 +636,9 @@ ffeintrin_check_ (ffeintrinImp imp, ffebldOp op,
continue;
i = ffebld_info (a);
+ if ( c[colon+1] != '*' && (c[colon+1]-'0') != arg_count )
+ continue;
+
anynum = (ffeinfo_basictype (i) == FFEINFO_basictypeHOLLERITH)
|| (ffeinfo_basictype (i) == FFEINFO_basictypeTYPELESS);
if (anynum)
@@ -1160,16 +1153,49 @@ ffeintrin_check_any_ (ffebld arglist)
return FALSE;
}
-/* Compare name to intrinsic's name. Uses strcmp on arguments' names. */
+/* Compare a forced-to-uppercase name with a known-upper-case name. */
+
+static int
+upcasecmp_ (const char *name, const char *ucname)
+{
+ for ( ; *name != 0 && *ucname != 0; name++, ucname++)
+ {
+ int i = TOUPPER(*name) - *ucname;
+
+ if (i != 0)
+ return i;
+ }
+
+ return *name - *ucname;
+}
+
+/* Compare name to intrinsic's name.
+ The intrinsics table is sorted on the upper case entries; so first
+ compare irrespective of case on the `uc' entry. If it matches,
+ compare according to the setting of intrinsics case comparison mode. */
static int
ffeintrin_cmp_name_ (const void *name, const void *intrinsic)
{
- const char *uc = ((struct _ffeintrin_name_ *) intrinsic)->name_uc;
- const char *lc = ((struct _ffeintrin_name_ *) intrinsic)->name_lc;
- const char *ic = ((struct _ffeintrin_name_ *) intrinsic)->name_ic;
+ const char *const uc = ((const struct _ffeintrin_name_ *) intrinsic)->name_uc;
+ const char *const lc = ((const struct _ffeintrin_name_ *) intrinsic)->name_lc;
+ const char *const ic = ((const struct _ffeintrin_name_ *) intrinsic)->name_ic;
+ int i;
+
+ if ((i = upcasecmp_ (name, uc)) == 0)
+ {
+ switch (ffe_case_intrin ())
+ {
+ case FFE_caseLOWER:
+ return strcmp(name, lc);
+ case FFE_caseINITCAP:
+ return strcmp(name, ic);
+ default:
+ return 0;
+ }
+ }
- return ffesrc_strcmp_2c (ffe_case_intrin (), name, uc, lc, ic);
+ return i;
}
/* Return basic type of intrinsic implementation, based on its
@@ -1195,7 +1221,7 @@ ffeintrin_basictype (ffeintrinSpec spec)
if (ffe_is_f2c ())
gfrt = ffeintrin_imps_[imp].gfrt_f2c;
- else
+ else
gfrt = ffeintrin_imps_[imp].gfrt_gnu;
assert (gfrt != FFECOM_gfrt);
@@ -1523,7 +1549,6 @@ ffeintrin_fulfill_specific (ffebld *expr, ffeinfo *info,
/* Return run-time index of intrinsic implementation as direct call. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
ffecomGfrt
ffeintrin_gfrt_direct (ffeintrinImp imp)
{
@@ -1531,11 +1556,9 @@ ffeintrin_gfrt_direct (ffeintrinImp imp)
return ffeintrin_imps_[imp].gfrt_direct;
}
-#endif
/* Return run-time index of intrinsic implementation as actual argument. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
ffecomGfrt
ffeintrin_gfrt_indirect (ffeintrinImp imp)
{
@@ -1545,7 +1568,6 @@ ffeintrin_gfrt_indirect (ffeintrinImp imp)
return ffeintrin_imps_[imp].gfrt_gnu;
return ffeintrin_imps_[imp].gfrt_f2c;
}
-#endif
void
ffeintrin_init_0 ()
@@ -1581,14 +1603,10 @@ ffeintrin_init_0 ()
p3 = ffeintrin_names_[i].name_ic;
for (; *p1 != '\0' && *p2 != '\0' && *p3 != '\0'; ++p1, ++p2, ++p3)
{
- if (! IN_CTYPE_DOMAIN (*p1)
- || ! IN_CTYPE_DOMAIN (*p2)
- || ! IN_CTYPE_DOMAIN (*p3))
- break;
if ((ISDIGIT (*p1) || (*p1 == '_')) && (*p1 == *p2) && (*p1 == *p3))
continue;
if (! ISUPPER ((unsigned char)*p1) || ! ISLOWER ((unsigned char)*p2)
- || (*p1 != toupper ((unsigned char)*p2))
+ || (*p1 != TOUPPER (*p2))
|| ((*p3 != *p1) && (*p3 != *p2)))
break;
}
@@ -1647,8 +1665,7 @@ ffeintrin_init_0 ()
}
if ((c[colon + 1] != '-')
&& (c[colon + 1] != '*')
- && ((c[colon + 1] < '0')
- || (c[colon + 1] > '9')))
+ && (! ISDIGIT (c[colon + 1])))
{
fprintf (stderr, "%s: bad COL-spec\n",
ffeintrin_imps_[i].name);
@@ -1702,9 +1719,9 @@ ffeintrin_init_0 ()
}
if (c[3] == '[')
{
- if (((c[4] < '0') || (c[4] > '9'))
+ if ((! ISDIGIT (c[4]))
|| ((c[5] != ']')
- && (++c, (c[4] < '0') || (c[4] > '9')
+ && (++c, ! ISDIGIT (c[4])
|| (c[5] != ']'))))
{
fprintf (stderr, "%s: bad arg-len\n",
@@ -1715,9 +1732,9 @@ ffeintrin_init_0 ()
}
if (c[3] == '(')
{
- if (((c[4] < '0') || (c[4] > '9'))
+ if ((! ISDIGIT (c[4]))
|| ((c[5] != ')')
- && (++c, (c[4] < '0') || (c[4] > '9')
+ && (++c, ! ISDIGIT (c[4])
|| (c[5] != ')'))))
{
fprintf (stderr, "%s: bad arg-rank\n",
@@ -1762,13 +1779,11 @@ ffeintrin_is_actualarg (ffeintrinSpec spec)
state = ffeintrin_state_family (ffeintrin_specs_[spec].family);
return (!ffe_is_pedantic () || ffeintrin_specs_[spec].is_actualarg)
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
&& (ffe_is_f2c ()
? (ffeintrin_imps_[ffeintrin_specs_[spec].implementation].gfrt_f2c
!= FFECOM_gfrt)
: (ffeintrin_imps_[ffeintrin_specs_[spec].implementation].gfrt_gnu
!= FFECOM_gfrt))
-#endif
&& ((state == FFE_intrinsicstateENABLED)
|| (state == FFE_intrinsicstateHIDDEN));
}
diff --git a/contrib/gcc/f/intrin.def b/contrib/gcc/f/intrin.def
index 4864abb..9451a27 100644
--- a/contrib/gcc/f/intrin.def
+++ b/contrib/gcc/f/intrin.def
@@ -3129,12 +3129,12 @@ DEFIMP (ACOS, "ACOS", L_ACOS,ACOS,, "R=:0:X=R*")
DEFIMP (AIMAG, "AIMAG", ,AIMAG,, "RC:0:Z=C*")
DEFIMP (AINT, "AINT", ,AINT,, "R=:0:A=R*")
DEFIMP (ALOG, "ALOG", L_LOG,ALOG,, "R1:-:X=R1")
-DEFIMP (ALOG10, "ALOG10", ,ALOG10,, "R1:-:X=R1")
+DEFIMP (ALOG10, "ALOG10", L_LOG10,ALOG10,,"R1:-:X=R1")
DEFIMP (AMAX0, "AMAX0", ,,, "R1:*:A=pI1")
DEFIMP (AMAX1, "AMAX1", ,,, "R1:*:A=pR1")
DEFIMP (AMIN0, "AMIN0", ,,, "R1:*:A=pI1")
DEFIMP (AMIN1, "AMIN1", ,,, "R1:*:A=pR1")
-DEFIMP (AMOD, "AMOD", ,AMOD,, "R1:*:A=R1,P=R1")
+DEFIMP (AMOD, "AMOD", L_FMOD,AMOD,, "R1:*:A=R1,P=R1")
DEFIMP (ANINT, "ANINT", ,ANINT,, "R=:0:A=R*")
DEFIMP (ASIN, "ASIN", L_ASIN,ASIN,, "R=:0:X=R*")
DEFIMP (ATAN, "ATAN", L_ATAN,ATAN,, "R=:0:X=R*")
@@ -3164,10 +3164,10 @@ DEFIMP (DEXP, "DEXP", L_EXP,DEXP,, "R2:-:X=R2")
DEFIMP (DIM, "DIM", ,DIM,, "S=:*:X=S*,Y=S*")
DEFIMP (DINT, "DINT", ,DINT,, "R2:-:A=R2")
DEFIMP (DLOG, "DLOG", L_LOG,DLOG,, "R2:-:X=R2")
-DEFIMP (DLOG10, "DLOG10", ,DLOG10,, "R2:-:X=R2")
+DEFIMP (DLOG10, "DLOG10", L_LOG10,DLOG10,,"R2:-:X=R2")
DEFIMP (DMAX1, "DMAX1", ,,, "R2:*:A=pR2")
DEFIMP (DMIN1, "DMIN1", ,,, "R2:*:A=pR2")
-DEFIMP (DMOD, "DMOD", ,DMOD,, "R2:*:A=R2,P=R2")
+DEFIMP (DMOD, "DMOD", L_FMOD,DMOD,, "R2:*:A=R2,P=R2")
DEFIMP (DNINT, "DNINT", ,DNINT,, "R2:-:A=R2")
DEFIMP (DPROD, "DPROD", ,DPROD,, "R2:*:X=R1,Y=R1")
DEFIMP (DSIGN, "DSIGN", ,DSIGN,, "R2:*:A=R2,B=R2")
@@ -3193,7 +3193,7 @@ DEFIMP (LGT, "LGT", ,LGT,LGT, "L1:*:String_A=A1,String_B=A1")
DEFIMP (LLE, "LLE", ,LLE,LLE, "L1:*:String_A=A1,String_B=A1")
DEFIMP (LLT, "LLT", ,LLT,LLT, "L1:*:String_A=A1,String_B=A1")
DEFIMP (LOG, "LOG", L_LOG,ALOG,, "F=:0:X=F*")
-DEFIMP (LOG10, "LOG10", ,,, "R=:0:X=R*")
+DEFIMP (LOG10, "LOG10", L_LOG10,ALOG10,,"R=:0:X=R*")
DEFIMP (MAX, "MAX", ,,, "S=:*:A=pS*")
DEFIMP (MIN, "MIN", ,,, "S=:*:A=pS*")
DEFIMP (MAX0, "MAX0", ,,, "I1:*:A=pI1")
diff --git a/contrib/gcc/f/intrin.h b/contrib/gcc/f/intrin.h
index 5b8d725..e741e69 100644
--- a/contrib/gcc/f/intrin.h
+++ b/contrib/gcc/f/intrin.h
@@ -1,5 +1,5 @@
/* intrin.h -- Public interface for intrin.c
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
Contributed by James Craig Burley.
This file is part of GNU Fortran.
@@ -21,8 +21,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
*/
-#ifndef _H_f_intrin
-#define _H_f_intrin
+#ifndef GCC_F_INTRIN_H
+#define GCC_F_INTRIN_H
#ifndef FFEINTRIN_DOC
#define FFEINTRIN_DOC 0 /* 1 means intrinsic documentation only (intdoc.c). */
@@ -105,10 +105,8 @@ ffeintrinFamily ffeintrin_family (ffeintrinSpec spec);
void ffeintrin_fulfill_generic (ffebld *expr, ffeinfo *info, ffelexToken t);
void ffeintrin_fulfill_specific (ffebld *expr, ffeinfo *info,
bool *check_intrin, ffelexToken t);
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
ffecomGfrt ffeintrin_gfrt_direct (ffeintrinImp imp);
ffecomGfrt ffeintrin_gfrt_indirect (ffeintrinImp imp);
-#endif /* FFECOM_targetCURRENT == FFECOM_targetGCC */
void ffeintrin_init_0 (void);
#define ffeintrin_init_1()
#define ffeintrin_init_2()
@@ -134,4 +132,4 @@ ffeIntrinsicState ffeintrin_state_family (ffeintrinFamily family);
/* End of #include file. */
-#endif
+#endif /* ! GCC_F_INTRIN_H */
diff --git a/contrib/gcc/f/invoke.texi b/contrib/gcc/f/invoke.texi
new file mode 100644
index 0000000..ff2de1a
--- /dev/null
+++ b/contrib/gcc/f/invoke.texi
@@ -0,0 +1,2191 @@
+@c Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001
+@c Free Software Foundation, Inc.
+@c This is part of the G77 manual.
+@c For copying conditions, see the file g77.texi.
+
+@ignore
+@c man begin COPYRIGHT
+Copyright @copyright{} 1996, 1997, 1998, 1999, 2000, 2001
+Free Software Foundation, Inc.
+
+Permission is granted to copy, distribute and/or modify this document
+under the terms of the GNU Free Documentation License, Version 1.1 or
+any later version published by the Free Software Foundation; with the
+Invariant Sections being ``GNU General Public License'' and ``Funding
+Free Software'', the Front-Cover texts being (a) (see below), and with
+the Back-Cover Texts being (b) (see below). A copy of the license is
+included in the gfdl(7) man page.
+
+(a) The FSF's Front-Cover Text is:
+
+ A GNU Manual
+
+(b) The FSF's Back-Cover Text is:
+
+ You have freedom to copy and modify this GNU Manual, like GNU
+ software. Copies published by the Free Software Foundation raise
+ funds for GNU development.
+@c man end
+@c Set file name and title for the man page.
+@setfilename g77
+@settitle GNU project Fortran 77 compiler.
+@c man begin SYNOPSIS
+g77 [@option{-c}|@option{-S}|@option{-E}]
+ [@option{-g}] [@option{-pg}] [@option{-O}@var{level}]
+ [@option{-W}@var{warn}@dots{}] [@option{-pedantic}]
+ [@option{-I}@var{dir}@dots{}] [@option{-L}@var{dir}@dots{}]
+ [@option{-D}@var{macro}[=@var{defn}]@dots{}] [@option{-U}@var{macro}]
+ [@option{-f}@var{option}@dots{}] [@option{-m}@var{machine-option}@dots{}]
+ [@option{-o} @var{outfile}] @var{infile}@dots{}
+
+Only the most useful options are listed here; see below for the
+remainder.
+@c man end
+@c man begin SEEALSO
+gpl(7), gfdl(7), fsf-funding(7),
+cpp(1), gcov(1), gcc(1), as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1)
+and the Info entries for @file{gcc}, @file{cpp}, @file{g77}, @file{as},
+@file{ld}, @file{binutils} and @file{gdb}.
+@c man end
+@c man begin BUGS
+For instructions on reporting bugs, see
+@w{@uref{http://gcc.gnu.org/bugs.html}}. Use of the @command{gccbug}
+script to report bugs is recommended.
+@c man end
+@c man begin AUTHOR
+See the Info entry for @command{g77} for contributors to GCC and G77@.
+@c man end
+@end ignore
+
+@node Invoking G77
+@chapter GNU Fortran Command Options
+@cindex GNU Fortran command options
+@cindex command options
+@cindex options, GNU Fortran command
+
+@c man begin DESCRIPTION
+
+The @command{g77} command supports all the options supported by the
+@command{gcc} command.
+@xref{Invoking GCC,,GCC Command Options,gcc,Using the GNU Compiler
+Collection (GCC)}, for information
+on the non-Fortran-specific aspects of the @command{gcc} command (and,
+therefore, the @command{g77} command).
+
+@cindex options, negative forms
+@cindex negative forms of options
+All @command{gcc} and @command{g77} options
+are accepted both by @command{g77} and by @command{gcc}
+(as well as any other drivers built at the same time,
+such as @command{g++}),
+since adding @command{g77} to the @command{gcc} distribution
+enables acceptance of @command{g77} options
+by all of the relevant drivers.
+
+In some cases, options have positive and negative forms;
+the negative form of @option{-ffoo} would be @option{-fno-foo}.
+This manual documents only one of these two forms, whichever
+one is not the default.
+
+@c man end
+
+@menu
+* Option Summary:: Brief list of all @command{g77} options,
+ without explanations.
+* Overall Options:: Controlling the kind of output:
+ an executable, object files, assembler files,
+ or preprocessed source.
+* Shorthand Options:: Options that are shorthand for other options.
+* Fortran Dialect Options:: Controlling the variant of Fortran language
+ compiled.
+* Warning Options:: How picky should the compiler be?
+* Debugging Options:: Symbol tables, measurements, and debugging dumps.
+* Optimize Options:: How much optimization?
+* Preprocessor Options:: Controlling header files and macro definitions.
+ Also, getting dependency information for Make.
+* Directory Options:: Where to find header files and libraries.
+ Where to find the compiler executable files.
+* Code Gen Options:: Specifying conventions for function calls, data layout
+ and register usage.
+* Environment Variables:: Env vars that affect GNU Fortran.
+@end menu
+
+@node Option Summary
+@section Option Summary
+
+@c man begin OPTIONS
+
+Here is a summary of all the options specific to GNU Fortran, grouped
+by type. Explanations are in the following sections.
+
+@table @emph
+@item Overall Options
+@xref{Overall Options,,Options Controlling the Kind of Output}.
+@gccoptlist{
+-fversion -fset-g77-defaults -fno-silent}
+
+@item Shorthand Options
+@xref{Shorthand Options}.
+@gccoptlist{
+-ff66 -fno-f66 -ff77 -fno-f77 -fno-ugly}
+
+@item Fortran Language Options
+@xref{Fortran Dialect Options,,Options Controlling Fortran Dialect}.
+@gccoptlist{
+-ffree-form -fno-fixed-form -ff90
+-fvxt -fdollar-ok -fno-backslash
+-fno-ugly-args -fno-ugly-assign -fno-ugly-assumed
+-fugly-comma -fugly-complex -fugly-init -fugly-logint
+-fonetrip -ftypeless-boz
+-fintrin-case-initcap -fintrin-case-upper
+-fintrin-case-lower -fintrin-case-any
+-fmatch-case-initcap -fmatch-case-upper
+-fmatch-case-lower -fmatch-case-any
+-fsource-case-upper -fsource-case-lower
+-fsource-case-preserve
+-fsymbol-case-initcap -fsymbol-case-upper
+-fsymbol-case-lower -fsymbol-case-any
+-fcase-strict-upper -fcase-strict-lower
+-fcase-initcap -fcase-upper -fcase-lower -fcase-preserve
+-ff2c-intrinsics-delete -ff2c-intrinsics-hide
+-ff2c-intrinsics-disable -ff2c-intrinsics-enable
+-fbadu77-intrinsics-delete -fbadu77-intrinsics-hide
+-fbadu77-intrinsics-disable -fbadu77-intrinsics-enable
+-ff90-intrinsics-delete -ff90-intrinsics-hide
+-ff90-intrinsics-disable -ff90-intrinsics-enable
+-fgnu-intrinsics-delete -fgnu-intrinsics-hide
+-fgnu-intrinsics-disable -fgnu-intrinsics-enable
+-fmil-intrinsics-delete -fmil-intrinsics-hide
+-fmil-intrinsics-disable -fmil-intrinsics-enable
+-funix-intrinsics-delete -funix-intrinsics-hide
+-funix-intrinsics-disable -funix-intrinsics-enable
+-fvxt-intrinsics-delete -fvxt-intrinsics-hide
+-fvxt-intrinsics-disable -fvxt-intrinsics-enable
+-ffixed-line-length-@var{n} -ffixed-line-length-none}
+
+@item Warning Options
+@xref{Warning Options,,Options to Request or Suppress Warnings}.
+@gccoptlist{
+-fsyntax-only -pedantic -pedantic-errors -fpedantic
+-w -Wno-globals -Wimplicit -Wunused -Wuninitialized
+-Wall -Wsurprising
+-Werror -W}
+
+@item Debugging Options
+@xref{Debugging Options,,Options for Debugging Your Program or GCC}.
+@gccoptlist{
+-g}
+
+@item Optimization Options
+@xref{Optimize Options,,Options that Control Optimization}.
+@gccoptlist{
+-malign-double
+-ffloat-store -fforce-mem -fforce-addr -fno-inline
+-ffast-math -fstrength-reduce -frerun-cse-after-loop
+-funsafe-math-optimizations -fno-trapping-math
+-fexpensive-optimizations -fdelayed-branch
+-fschedule-insns -fschedule-insn2 -fcaller-saves
+-funroll-loops -funroll-all-loops
+-fno-move-all-movables -fno-reduce-all-givs
+-fno-rerun-loop-opt}
+
+@item Directory Options
+@xref{Directory Options,,Options for Directory Search}.
+@gccoptlist{
+-I@var{dir} -I-}
+
+@item Code Generation Options
+@xref{Code Gen Options,,Options for Code Generation Conventions}.
+@gccoptlist{
+-fno-automatic -finit-local-zero -fno-f2c
+-ff2c-library -fno-underscoring -fno-ident
+-fpcc-struct-return -freg-struct-return
+-fshort-double -fno-common -fpack-struct
+-fzeros -fno-second-underscore
+-femulate-complex
+-falias-check -fargument-alias
+-fargument-noalias -fno-argument-noalias-global
+-fno-globals -fflatten-arrays
+-fbounds-check -ffortran-bounds-check}
+@end table
+
+@c man end
+
+@menu
+* Overall Options:: Controlling the kind of output:
+ an executable, object files, assembler files,
+ or preprocessed source.
+* Shorthand Options:: Options that are shorthand for other options.
+* Fortran Dialect Options:: Controlling the variant of Fortran language
+ compiled.
+* Warning Options:: How picky should the compiler be?
+* Debugging Options:: Symbol tables, measurements, and debugging dumps.
+* Optimize Options:: How much optimization?
+* Preprocessor Options:: Controlling header files and macro definitions.
+ Also, getting dependency information for Make.
+* Directory Options:: Where to find header files and libraries.
+ Where to find the compiler executable files.
+* Code Gen Options:: Specifying conventions for function calls, data layout
+ and register usage.
+@end menu
+
+@node Overall Options
+@section Options Controlling the Kind of Output
+@cindex overall options
+@cindex options, overall
+
+@c man begin OPTIONS
+
+Compilation can involve as many as four stages: preprocessing, code
+generation (often what is really meant by the term ``compilation''),
+assembly, and linking, always in that order. The first three
+stages apply to an individual source file, and end by producing an
+object file; linking combines all the object files (those newly
+compiled, and those specified as input) into an executable file.
+
+@cindex file name suffix
+@cindex suffixes, file name
+@cindex file name extension
+@cindex extensions, file name
+@cindex file type
+@cindex types, file
+For any given input file, the file name suffix determines what kind of
+program is contained in the file---that is, the language in which the
+program is written is generally indicated by the suffix.
+Suffixes specific to GNU Fortran are listed below.
+@xref{Overall Options,,Options Controlling the Kind of
+Output,gcc,Using the GNU Compiler Collection (GCC)}, for
+information on suffixes recognized by GNU CC.
+
+@table @gcctabopt
+@cindex .f filename suffix
+@cindex .for filename suffix
+@cindex .FOR filename suffix
+@item @var{file}.f
+@item @var{file}.for
+@item @var{file}.FOR
+Fortran source code that should not be preprocessed.
+
+Such source code cannot contain any preprocessor directives, such
+as @code{#include}, @code{#define}, @code{#if}, and so on.
+
+You can force @samp{.f} files to be preprocessed by @command{cpp} by using
+@option{-x f77-cpp-input}.
+@xref{LEX}.
+
+@cindex preprocessor
+@cindex C preprocessor
+@cindex cpp preprocessor
+@cindex Fortran preprocessor
+@cindex cpp program
+@cindex programs, cpp
+@cindex .F filename suffix
+@cindex .fpp filename suffix
+@cindex .FPP filename suffix
+@item @var{file}.F
+@item @var{file}.fpp
+@item @var{file}.FPP
+Fortran source code that must be preprocessed (by the C preprocessor
+@command{cpp}, which is part of GNU CC).
+
+Note that preprocessing is not extended to the contents of
+files included by the @code{INCLUDE} directive---the @code{#include}
+preprocessor directive must be used instead.
+
+@cindex Ratfor preprocessor
+@cindex programs, @command{ratfor}
+@cindex @samp{.r} filename suffix
+@cindex @command{ratfor}
+@item @var{file}.r
+Ratfor source code, which must be preprocessed by the @command{ratfor}
+command, which is available separately (as it is not yet part of the GNU
+Fortran distribution).
+One version in Fortran, adapted for use with @command{g77} is at
+@uref{ftp://members.aol.com/n8tm/rat7.uue} (of uncertain copyright
+status). Another, public domain version in C is at
+@uref{http://sepwww.stanford.edu/sep/prof/ratfor.shar.2}.
+@end table
+
+UNIX users typically use the @file{@var{file}.f} and @file{@var{file}.F}
+nomenclature.
+Users of other operating systems, especially those that cannot
+distinguish upper-case
+letters from lower-case letters in their file names, typically use
+the @file{@var{file}.for} and @file{@var{file}.fpp} nomenclature.
+
+@cindex #define
+@cindex #include
+@cindex #if
+Use of the preprocessor @command{cpp} allows use of C-like
+constructs such as @code{#define} and @code{#include}, but can
+lead to unexpected, even mistaken, results due to Fortran's source file
+format.
+It is recommended that use of the C preprocessor
+be limited to @code{#include} and, in
+conjunction with @code{#define}, only @code{#if} and related directives,
+thus avoiding in-line macro expansion entirely.
+This recommendation applies especially
+when using the traditional fixed source form.
+With free source form,
+fewer unexpected transformations are likely to happen, but use of
+constructs such as Hollerith and character constants can nevertheless
+present problems, especially when these are continued across multiple
+source lines.
+These problems result, primarily, from differences between the way
+such constants are interpreted by the C preprocessor and by a Fortran
+compiler.
+
+Another example of a problem that results from using the C preprocessor
+is that a Fortran comment line that happens to contain any
+characters ``interesting'' to the C preprocessor,
+such as a backslash at the end of the line,
+is not recognized by the preprocessor as a comment line,
+so instead of being passed through ``raw'',
+the line is edited according to the rules for the preprocessor.
+For example, the backslash at the end of the line is removed,
+along with the subsequent newline, resulting in the next
+line being effectively commented out---unfortunate if that
+line is a non-comment line of important code!
+
+@emph{Note:} The @option{-traditional} and @option{-undef} flags are supplied
+to @command{cpp} by default, to help avoid unpleasant surprises.
+@xref{Preprocessor Options,,Options Controlling the Preprocessor,
+gcc,Using the GNU Compiler Collection (GCC)}.
+This means that ANSI C preprocessor features (such as the @samp{#}
+operator) aren't available, and only variables in the C reserved
+namespace (generally, names with a leading underscore) are liable to
+substitution by C predefines.
+Thus, if you want to do system-specific
+tests, use, for example, @samp{#ifdef __linux__} rather than @samp{#ifdef linux}.
+Use the @option{-v} option to see exactly how the preprocessor is invoked.
+
+@cindex /*
+Unfortunately, the @option{-traditional} flag will not avoid an error from
+anything that @command{cpp} sees as an unterminated C comment, such as:
+@smallexample
+C Some Fortran compilers accept /* as starting
+C an inline comment.
+@end smallexample
+@xref{Trailing Comment}.
+
+The following options that affect overall processing are recognized
+by the @command{g77} and @command{gcc} commands in a GNU Fortran installation:
+
+@table @gcctabopt
+@cindex -fversion option
+@cindex options, -fversion
+@cindex printing version information
+@cindex version information, printing
+@cindex consistency checks
+@cindex internal consistency checks
+@cindex checks, of internal consistency
+@item -fversion
+Ensure that the @command{g77} version of the compiler phase is reported,
+if run,
+and, starting in @code{egcs} version 1.1,
+that internal consistency checks in the @file{f771} program are run.
+
+This option is supplied automatically when @option{-v} or @option{--verbose}
+is specified as a command-line option for @command{g77} or @command{gcc}
+and when the resulting commands compile Fortran source files.
+
+In GCC 3.1, this is changed back to the behaviour @command{gcc} displays
+for @samp{.c} files.
+
+@cindex -fset-g77-defaults option
+@cindex options, -fset-g77-defaults
+@item -fset-g77-defaults
+@emph{Version info:}
+This option was obsolete as of @code{egcs}
+version 1.1.
+The effect is instead achieved
+by the @code{lang_init_options} routine
+in @file{gcc/gcc/f/com.c}.
+
+@cindex consistency checks
+@cindex internal consistency checks
+@cindex checks, of internal consistency
+Set up whatever @command{gcc} options are to apply to Fortran
+compilations, and avoid running internal consistency checks
+that might take some time.
+
+This option is supplied automatically when compiling Fortran code
+via the @command{g77} or @command{gcc} command.
+The description of this option is provided so that users seeing
+it in the output of, say, @samp{g77 -v} understand why it is
+there.
+
+@cindex modifying @command{g77}
+@cindex @command{g77}, modifying
+Also, developers who run @code{f771} directly might want to specify it
+by hand to get the same defaults as they would running @code{f771}
+via @command{g77} or @command{gcc}
+However, such developers should, after linking a new @code{f771}
+executable, invoke it without this option once,
+e.g. via @kbd{./f771 -quiet < /dev/null},
+to ensure that they have not introduced any
+internal inconsistencies (such as in the table of
+intrinsics) before proceeding---@command{g77} will crash
+with a diagnostic if it detects an inconsistency.
+
+@cindex -fno-silent option
+@cindex options, -fno-silent
+@cindex f2c compatibility
+@cindex compatibility, f2c
+@cindex status, compilation
+@cindex compilation, status
+@cindex reporting compilation status
+@cindex printing compilation status
+@item -fno-silent
+Print (to @code{stderr}) the names of the program units as
+they are compiled, in a form similar to that used by popular
+UNIX @command{f77} implementations and @command{f2c}
+@end table
+
+@xref{Overall Options,,Options Controlling the Kind of Output,
+gcc,Using the GNU Compiler Collection (GCC)}, for information
+on more options that control the overall operation of the @command{gcc} command
+(and, by extension, the @command{g77} command).
+
+@node Shorthand Options
+@section Shorthand Options
+@cindex shorthand options
+@cindex options, shorthand
+@cindex macro options
+@cindex options, macro
+
+The following options serve as ``shorthand''
+for other options accepted by the compiler:
+
+@table @gcctabopt
+@cindex -fugly option
+@cindex options, -fugly
+@item -fugly
+@cindex ugly features
+@cindex features, ugly
+@emph{Note:} This option is no longer supported.
+The information, below, is provided to aid
+in the conversion of old scripts.
+
+Specify that certain ``ugly'' constructs are to be quietly accepted.
+Same as:
+
+@smallexample
+-fugly-args -fugly-assign -fugly-assumed
+-fugly-comma -fugly-complex -fugly-init
+-fugly-logint
+@end smallexample
+
+These constructs are considered inappropriate to use in new
+or well-maintained portable Fortran code, but widely used
+in old code.
+@xref{Distensions}, for more information.
+
+@cindex -fno-ugly option
+@cindex options, -fno-ugly
+@item -fno-ugly
+@cindex ugly features
+@cindex features, ugly
+Specify that all ``ugly'' constructs are to be noisily rejected.
+Same as:
+
+@smallexample
+-fno-ugly-args -fno-ugly-assign -fno-ugly-assumed
+-fno-ugly-comma -fno-ugly-complex -fno-ugly-init
+-fno-ugly-logint
+@end smallexample
+
+@xref{Distensions}, for more information.
+
+@cindex -ff66 option
+@cindex options, -ff66
+@item -ff66
+@cindex FORTRAN 66
+@cindex compatibility, FORTRAN 66
+Specify that the program is written in idiomatic FORTRAN 66.
+Same as @samp{-fonetrip -fugly-assumed}.
+
+The @option{-fno-f66} option is the inverse of @option{-ff66}.
+As such, it is the same as @samp{-fno-onetrip -fno-ugly-assumed}.
+
+The meaning of this option is likely to be refined as future
+versions of @command{g77} provide more compatibility with other
+existing and obsolete Fortran implementations.
+
+@cindex -ff77 option
+@cindex options, -ff77
+@item -ff77
+@cindex UNIX f77
+@cindex f2c compatibility
+@cindex compatibility, f2c
+@cindex f77 compatibility
+@cindex compatibility, f77
+Specify that the program is written in idiomatic UNIX FORTRAN 77
+and/or the dialect accepted by the @command{f2c} product.
+Same as @samp{-fbackslash -fno-typeless-boz}.
+
+The meaning of this option is likely to be refined as future
+versions of @command{g77} provide more compatibility with other
+existing and obsolete Fortran implementations.
+
+@cindex -fno-f77 option
+@cindex options, -fno-f77
+@item -fno-f77
+@cindex UNIX f77
+The @option{-fno-f77} option is @emph{not} the inverse
+of @option{-ff77}.
+It specifies that the program is not written in idiomatic UNIX
+FORTRAN 77 or @command{f2c} but in a more widely portable dialect.
+@option{-fno-f77} is the same as @option{-fno-backslash}.
+
+The meaning of this option is likely to be refined as future
+versions of @command{g77} provide more compatibility with other
+existing and obsolete Fortran implementations.
+@end table
+
+@node Fortran Dialect Options
+@section Options Controlling Fortran Dialect
+@cindex dialect options
+@cindex language, dialect options
+@cindex options, dialect
+
+The following options control the dialect of Fortran
+that the compiler accepts:
+
+@table @gcctabopt
+@cindex -ffree-form option
+@cindex options, -ffree-form
+@cindex -fno-fixed-form option
+@cindex options, -fno-fixed-form
+@cindex source file format
+@cindex free form
+@cindex fixed form
+@cindex Fortran 90, features
+@item -ffree-form
+@item -fno-fixed-form
+Specify that the source file is written in free form
+(introduced in Fortran 90) instead of the more-traditional fixed form.
+
+@cindex -ff90 option
+@cindex options, -ff90
+@cindex Fortran 90, features
+@item -ff90
+Allow certain Fortran-90 constructs.
+
+This option controls whether certain
+Fortran 90 constructs are recognized.
+(Other Fortran 90 constructs
+might or might not be recognized depending on other options such as
+@option{-fvxt}, @option{-ff90-intrinsics-enable}, and the
+current level of support for Fortran 90.)
+
+@xref{Fortran 90}, for more information.
+
+@cindex -fvxt option
+@cindex options, -fvxt
+@item -fvxt
+@cindex Fortran 90, features
+@cindex VXT extensions
+Specify the treatment of certain constructs that have different
+meanings depending on whether the code is written in
+GNU Fortran (based on FORTRAN 77 and akin to Fortran 90)
+or VXT Fortran (more like VAX FORTRAN).
+
+The default is @option{-fno-vxt}.
+@option{-fvxt} specifies that the VXT Fortran interpretations
+for those constructs are to be chosen.
+
+@xref{VXT Fortran}, for more information.
+
+@cindex -fdollar-ok option
+@cindex options, -fdollar-ok
+@item -fdollar-ok
+@cindex dollar sign
+@cindex symbol names
+@cindex character set
+Allow @samp{$} as a valid character in a symbol name.
+
+@cindex -fno-backslash option
+@cindex options, -fno-backslash
+@item -fno-backslash
+@cindex backslash
+@cindex character constants
+@cindex Hollerith constants
+Specify that @samp{\} is not to be specially interpreted in character
+and Hollerith constants a la C and many UNIX Fortran compilers.
+
+For example, with @option{-fbackslash} in effect, @samp{A\nB} specifies
+three characters, with the second one being newline.
+With @option{-fno-backslash}, it specifies four characters,
+@samp{A}, @samp{\}, @samp{n}, and @samp{B}.
+
+Note that @command{g77} implements a fairly general form of backslash
+processing that is incompatible with the narrower forms supported
+by some other compilers.
+For example, @samp{'A\003B'} is a three-character string in @command{g77}
+whereas other compilers that support backslash might not support
+the three-octal-digit form, and thus treat that string as longer
+than three characters.
+
+@xref{Backslash in Constants}, for
+information on why @option{-fbackslash} is the default
+instead of @option{-fno-backslash}.
+
+@cindex -fno-ugly-args option
+@cindex options, -fno-ugly-args
+@item -fno-ugly-args
+Disallow passing Hollerith and typeless constants as actual
+arguments (for example, @samp{CALL FOO(4HABCD)}).
+
+@xref{Ugly Implicit Argument Conversion}, for more information.
+
+@cindex -fugly-assign option
+@cindex options, -fugly-assign
+@item -fugly-assign
+Use the same storage for a given variable regardless of
+whether it is used to hold an assigned-statement label
+(as in @samp{ASSIGN 10 TO I}) or used to hold numeric data
+(as in @samp{I = 3}).
+
+@xref{Ugly Assigned Labels}, for more information.
+
+@cindex -fugly-assumed option
+@cindex options, -fugly-assumed
+@item -fugly-assumed
+Assume any dummy array with a final dimension specified as @samp{1}
+is really an assumed-size array, as if @samp{*} had been specified
+for the final dimension instead of @samp{1}.
+
+For example, @samp{DIMENSION X(1)} is treated as if it
+had read @samp{DIMENSION X(*)}.
+
+@xref{Ugly Assumed-Size Arrays}, for more information.
+
+@cindex -fugly-comma option
+@cindex options, -fugly-comma
+@item -fugly-comma
+In an external-procedure invocation,
+treat a trailing comma in the argument list
+as specification of a trailing null argument,
+and treat an empty argument list
+as specification of a single null argument.
+
+For example, @samp{CALL FOO(,)} is treated as
+@samp{CALL FOO(%VAL(0), %VAL(0))}.
+That is, @emph{two} null arguments are specified
+by the procedure call when @option{-fugly-comma} is in force.
+And @samp{F = FUNC()} is treated as @samp{F = FUNC(%VAL(0))}.
+
+The default behavior, @option{-fno-ugly-comma}, is to ignore
+a single trailing comma in an argument list.
+So, by default, @samp{CALL FOO(X,)} is treated
+exactly the same as @samp{CALL FOO(X)}.
+
+@xref{Ugly Null Arguments}, for more information.
+
+@cindex -fugly-complex option
+@cindex options, -fugly-complex
+@item -fugly-complex
+Do not complain about @samp{REAL(@var{expr})} or
+@samp{AIMAG(@var{expr})} when @var{expr} is a @code{COMPLEX}
+type other than @code{COMPLEX(KIND=1)}---usually
+this is used to permit @code{COMPLEX(KIND=2)}
+(@code{DOUBLE COMPLEX}) operands.
+
+The @option{-ff90} option controls the interpretation
+of this construct.
+
+@xref{Ugly Complex Part Extraction}, for more information.
+
+@cindex -fno-ugly-init option
+@cindex options, -fno-ugly-init
+@item -fno-ugly-init
+Disallow use of Hollerith and typeless constants as initial
+values (in @code{PARAMETER} and @code{DATA} statements), and
+use of character constants to
+initialize numeric types and vice versa.
+
+For example, @samp{DATA I/'F'/, CHRVAR/65/, J/4HABCD/} is disallowed by
+@option{-fno-ugly-init}.
+
+@xref{Ugly Conversion of Initializers}, for more information.
+
+@cindex -fugly-logint option
+@cindex options, -fugly-logint
+@item -fugly-logint
+Treat @code{INTEGER} and @code{LOGICAL} variables and
+expressions as potential stand-ins for each other.
+
+For example, automatic conversion between @code{INTEGER} and
+@code{LOGICAL} is enabled, for many contexts, via this option.
+
+@xref{Ugly Integer Conversions}, for more information.
+
+@cindex -fonetrip option
+@cindex options, -fonetrip
+@item -fonetrip
+@cindex FORTRAN 66
+@cindex @code{DO} loops, one-trip
+@cindex one-trip @code{DO} loops
+@cindex @code{DO} loops, zero-trip
+@cindex zero-trip @code{DO} loops
+@cindex compatibility, FORTRAN 66
+Executable iterative @code{DO} loops are to be executed at
+least once each time they are reached.
+
+ANSI FORTRAN 77 and more recent versions of the Fortran standard
+specify that the body of an iterative @code{DO} loop is not executed
+if the number of iterations calculated from the parameters of the
+loop is less than 1.
+(For example, @samp{DO 10 I = 1, 0}.)
+Such a loop is called a @dfn{zero-trip loop}.
+
+Prior to ANSI FORTRAN 77, many compilers implemented @code{DO} loops
+such that the body of a loop would be executed at least once, even
+if the iteration count was zero.
+Fortran code written assuming this behavior is said to require
+@dfn{one-trip loops}.
+For example, some code written to the FORTRAN 66 standard
+expects this behavior from its @code{DO} loops, although that
+standard did not specify this behavior.
+
+The @option{-fonetrip} option specifies that the source file(s) being
+compiled require one-trip loops.
+
+This option affects only those loops specified by the (iterative) @code{DO}
+statement and by implied-@code{DO} lists in I/O statements.
+Loops specified by implied-@code{DO} lists in @code{DATA} and
+specification (non-executable) statements are not affected.
+
+@cindex -ftypeless-boz option
+@cindex options, -ftypeless-boz
+@cindex prefix-radix constants
+@cindex constants, prefix-radix
+@cindex constants, types
+@cindex types, constants
+@item -ftypeless-boz
+Specifies that prefix-radix non-decimal constants, such as
+@samp{Z'ABCD'}, are typeless instead of @code{INTEGER(KIND=1)}.
+
+You can test for yourself whether a particular compiler treats
+the prefix form as @code{INTEGER(KIND=1)} or typeless by running the
+following program:
+
+@smallexample
+EQUIVALENCE (I, R)
+R = Z'ABCD1234'
+J = Z'ABCD1234'
+IF (J .EQ. I) PRINT *, 'Prefix form is TYPELESS'
+IF (J .NE. I) PRINT *, 'Prefix form is INTEGER'
+END
+@end smallexample
+
+Reports indicate that many compilers process this form as
+@code{INTEGER(KIND=1)}, though a few as typeless, and at least one
+based on a command-line option specifying some kind of
+compatibility.
+
+@cindex -fintrin-case-initcap option
+@cindex options, -fintrin-case-initcap
+@item -fintrin-case-initcap
+@cindex -fintrin-case-upper option
+@cindex options, -fintrin-case-upper
+@item -fintrin-case-upper
+@cindex -fintrin-case-lower option
+@cindex options, -fintrin-case-lower
+@item -fintrin-case-lower
+@cindex -fintrin-case-any option
+@cindex options, -fintrin-case-any
+@item -fintrin-case-any
+Specify expected case for intrinsic names.
+@option{-fintrin-case-lower} is the default.
+
+@cindex -fmatch-case-initcap option
+@cindex options, -fmatch-case-initcap
+@item -fmatch-case-initcap
+@cindex -fmatch-case-upper option
+@cindex options, -fmatch-case-upper
+@item -fmatch-case-upper
+@cindex -fmatch-case-lower option
+@cindex options, -fmatch-case-lower
+@item -fmatch-case-lower
+@cindex -fmatch-case-any option
+@cindex options, -fmatch-case-any
+@item -fmatch-case-any
+Specify expected case for keywords.
+@option{-fmatch-case-lower} is the default.
+
+@cindex -fsource-case-upper option
+@cindex options, -fsource-case-upper
+@item -fsource-case-upper
+@cindex -fsource-case-lower option
+@cindex options, -fsource-case-lower
+@item -fsource-case-lower
+@cindex -fsource-case-preserve option
+@cindex options, -fsource-case-preserve
+@item -fsource-case-preserve
+Specify whether source text other than character and Hollerith constants
+is to be translated to uppercase, to lowercase, or preserved as is.
+@option{-fsource-case-lower} is the default.
+
+@cindex -fsymbol-case-initcap option
+@cindex options, -fsymbol-case-initcap
+@item -fsymbol-case-initcap
+@cindex -fsymbol-case-upper option
+@cindex options, -fsymbol-case-upper
+@item -fsymbol-case-upper
+@cindex -fsymbol-case-lower option
+@cindex options, -fsymbol-case-lower
+@item -fsymbol-case-lower
+@cindex -fsymbol-case-any option
+@cindex options, -fsymbol-case-any
+@item -fsymbol-case-any
+Specify valid cases for user-defined symbol names.
+@option{-fsymbol-case-any} is the default.
+
+@cindex -fcase-strict-upper option
+@cindex options, -fcase-strict-upper
+@item -fcase-strict-upper
+Same as @samp{-fintrin-case-upper -fmatch-case-upper -fsource-case-preserve
+-fsymbol-case-upper}.
+(Requires all pertinent source to be in uppercase.)
+
+@cindex -fcase-strict-lower option
+@cindex options, -fcase-strict-lower
+@item -fcase-strict-lower
+Same as @samp{-fintrin-case-lower -fmatch-case-lower -fsource-case-preserve
+-fsymbol-case-lower}.
+(Requires all pertinent source to be in lowercase.)
+
+@cindex -fcase-initcap option
+@cindex options, -fcase-initcap
+@item -fcase-initcap
+Same as @samp{-fintrin-case-initcap -fmatch-case-initcap -fsource-case-preserve
+-fsymbol-case-initcap}.
+(Requires all pertinent source to be in initial capitals,
+as in @samp{Print *,SqRt(Value)}.)
+
+@cindex -fcase-upper option
+@cindex options, -fcase-upper
+@item -fcase-upper
+Same as @samp{-fintrin-case-any -fmatch-case-any -fsource-case-upper
+-fsymbol-case-any}.
+(Maps all pertinent source to uppercase.)
+
+@cindex -fcase-lower option
+@cindex options, -fcase-lower
+@item -fcase-lower
+Same as @samp{-fintrin-case-any -fmatch-case-any -fsource-case-lower
+-fsymbol-case-any}.
+(Maps all pertinent source to lowercase.)
+
+@cindex -fcase-preserve option
+@cindex options, -fcase-preserve
+@item -fcase-preserve
+Same as @samp{-fintrin-case-any -fmatch-case-any -fsource-case-preserve
+-fsymbol-case-any}.
+(Preserves all case in user-defined symbols,
+while allowing any-case matching of intrinsics and keywords.
+For example, @samp{call Foo(i,I)} would pass two @emph{different}
+variables named @samp{i} and @samp{I} to a procedure named @samp{Foo}.)
+
+@cindex -fbadu77-intrinsics-delete option
+@cindex options, -fbadu77-intrinsics-delete
+@item -fbadu77-intrinsics-delete
+@cindex -fbadu77-intrinsics-hide option
+@cindex options, -fbadu77-intrinsics-hide
+@item -fbadu77-intrinsics-hide
+@cindex -fbadu77-intrinsics-disable option
+@cindex options, -fbadu77-intrinsics-disable
+@item -fbadu77-intrinsics-disable
+@cindex -fbadu77-intrinsics-enable option
+@cindex options, -fbadu77-intrinsics-enable
+@item -fbadu77-intrinsics-enable
+@cindex @code{badu77} intrinsics
+@cindex intrinsics, @code{badu77}
+Specify status of UNIX intrinsics having inappropriate forms.
+@option{-fbadu77-intrinsics-enable} is the default.
+@xref{Intrinsic Groups}.
+
+@cindex -ff2c-intrinsics-delete option
+@cindex options, -ff2c-intrinsics-delete
+@item -ff2c-intrinsics-delete
+@cindex -ff2c-intrinsics-hide option
+@cindex options, -ff2c-intrinsics-hide
+@item -ff2c-intrinsics-hide
+@cindex -ff2c-intrinsics-disable option
+@cindex options, -ff2c-intrinsics-disable
+@item -ff2c-intrinsics-disable
+@cindex -ff2c-intrinsics-enable option
+@cindex options, -ff2c-intrinsics-enable
+@item -ff2c-intrinsics-enable
+@cindex @command{f2c} intrinsics
+@cindex intrinsics, @command{f2c}
+Specify status of f2c-specific intrinsics.
+@option{-ff2c-intrinsics-enable} is the default.
+@xref{Intrinsic Groups}.
+
+@cindex -ff90-intrinsics-delete option
+@cindex options, -ff90-intrinsics-delete
+@item -ff90-intrinsics-delete
+@cindex -ff90-intrinsics-hide option
+@cindex options, -ff90-intrinsics-hide
+@item -ff90-intrinsics-hide
+@cindex -ff90-intrinsics-disable option
+@cindex options, -ff90-intrinsics-disable
+@item -ff90-intrinsics-disable
+@cindex -ff90-intrinsics-enable option
+@cindex options, -ff90-intrinsics-enable
+@item -ff90-intrinsics-enable
+@cindex Fortran 90, intrinsics
+@cindex intrinsics, Fortran 90
+Specify status of F90-specific intrinsics.
+@option{-ff90-intrinsics-enable} is the default.
+@xref{Intrinsic Groups}.
+
+@cindex -fgnu-intrinsics-delete option
+@cindex options, -fgnu-intrinsics-delete
+@item -fgnu-intrinsics-delete
+@cindex -fgnu-intrinsics-hide option
+@cindex options, -fgnu-intrinsics-hide
+@item -fgnu-intrinsics-hide
+@cindex -fgnu-intrinsics-disable option
+@cindex options, -fgnu-intrinsics-disable
+@item -fgnu-intrinsics-disable
+@cindex -fgnu-intrinsics-enable option
+@cindex options, -fgnu-intrinsics-enable
+@item -fgnu-intrinsics-enable
+@cindex Digital Fortran features
+@cindex @code{COMPLEX} intrinsics
+@cindex intrinsics, @code{COMPLEX}
+Specify status of Digital's COMPLEX-related intrinsics.
+@option{-fgnu-intrinsics-enable} is the default.
+@xref{Intrinsic Groups}.
+
+@cindex -fmil-intrinsics-delete option
+@cindex options, -fmil-intrinsics-delete
+@item -fmil-intrinsics-delete
+@cindex -fmil-intrinsics-hide option
+@cindex options, -fmil-intrinsics-hide
+@item -fmil-intrinsics-hide
+@cindex -fmil-intrinsics-disable option
+@cindex options, -fmil-intrinsics-disable
+@item -fmil-intrinsics-disable
+@cindex -fmil-intrinsics-enable option
+@cindex options, -fmil-intrinsics-enable
+@item -fmil-intrinsics-enable
+@cindex MIL-STD 1753
+@cindex intrinsics, MIL-STD 1753
+Specify status of MIL-STD-1753-specific intrinsics.
+@option{-fmil-intrinsics-enable} is the default.
+@xref{Intrinsic Groups}.
+
+@cindex -funix-intrinsics-delete option
+@cindex options, -funix-intrinsics-delete
+@item -funix-intrinsics-delete
+@cindex -funix-intrinsics-hide option
+@cindex options, -funix-intrinsics-hide
+@item -funix-intrinsics-hide
+@cindex -funix-intrinsics-disable option
+@cindex options, -funix-intrinsics-disable
+@item -funix-intrinsics-disable
+@cindex -funix-intrinsics-enable option
+@cindex options, -funix-intrinsics-enable
+@item -funix-intrinsics-enable
+@cindex UNIX intrinsics
+@cindex intrinsics, UNIX
+Specify status of UNIX intrinsics.
+@option{-funix-intrinsics-enable} is the default.
+@xref{Intrinsic Groups}.
+
+@cindex -fvxt-intrinsics-delete option
+@cindex options, -fvxt-intrinsics-delete
+@item -fvxt-intrinsics-delete
+@cindex -fvxt-intrinsics-hide option
+@cindex options, -fvxt-intrinsics-hide
+@item -fvxt-intrinsics-hide
+@cindex -fvxt-intrinsics-disable option
+@cindex options, -fvxt-intrinsics-disable
+@item -fvxt-intrinsics-disable
+@cindex -fvxt-intrinsics-enable option
+@cindex options, -fvxt-intrinsics-enable
+@item -fvxt-intrinsics-enable
+@cindex VXT intrinsics
+@cindex intrinsics, VXT
+Specify status of VXT intrinsics.
+@option{-fvxt-intrinsics-enable} is the default.
+@xref{Intrinsic Groups}.
+
+@cindex -ffixed-line-length-@var{n} option
+@cindex options, -ffixed-line-length-@var{n}
+@item -ffixed-line-length-@var{n}
+@cindex source file format
+@cindex lines, length
+@cindex length of source lines
+@cindex fixed form
+@cindex limits, lengths of source lines
+Set column after which characters are ignored in typical fixed-form
+lines in the source file, and through which spaces are assumed (as
+if padded to that length) after the ends of short fixed-form lines.
+
+@cindex card image
+@cindex extended-source option
+Popular values for @var{n} include 72 (the
+standard and the default), 80 (card image), and 132 (corresponds
+to ``extended-source'' options in some popular compilers).
+@var{n} may be @samp{none}, meaning that the entire line is meaningful
+and that continued character constants never have implicit spaces appended
+to them to fill out the line.
+@option{-ffixed-line-length-0} means the same thing as
+@option{-ffixed-line-length-none}.
+
+@xref{Source Form}, for more information.
+@end table
+
+@node Warning Options
+@section Options to Request or Suppress Warnings
+@cindex options, warnings
+@cindex warnings, suppressing
+@cindex messages, warning
+@cindex suppressing warnings
+
+Warnings are diagnostic messages that report constructions which
+are not inherently erroneous but which are risky or suggest there
+might have been an error.
+
+You can request many specific warnings with options beginning @option{-W},
+for example @option{-Wimplicit} to request warnings on implicit
+declarations. Each of these specific warning options also has a
+negative form beginning @option{-Wno-} to turn off warnings;
+for example, @option{-Wno-implicit}. This manual lists only one of the
+two forms, whichever is not the default.
+
+These options control the amount and kinds of warnings produced by GNU
+Fortran:
+
+@table @gcctabopt
+@cindex syntax checking
+@cindex -fsyntax-only option
+@cindex options, -fsyntax-only
+@item -fsyntax-only
+Check the code for syntax errors, but don't do anything beyond that.
+
+@cindex -pedantic option
+@cindex options, -pedantic
+@item -pedantic
+Issue warnings for uses of extensions to ANSI FORTRAN 77.
+@option{-pedantic} also applies to C-language constructs where they
+occur in GNU Fortran source files, such as use of @samp{\e} in a
+character constant within a directive like @samp{#include}.
+
+Valid ANSI FORTRAN 77 programs should compile properly with or without
+this option.
+However, without this option, certain GNU extensions and traditional
+Fortran features are supported as well.
+With this option, many of them are rejected.
+
+Some users try to use @option{-pedantic} to check programs for strict ANSI
+conformance.
+They soon find that it does not do quite what they want---it finds some
+non-ANSI practices, but not all.
+However, improvements to @command{g77} in this area are welcome.
+
+@cindex -pedantic-errors option
+@cindex options, -pedantic-errors
+@item -pedantic-errors
+Like @option{-pedantic}, except that errors are produced rather than
+warnings.
+
+@cindex -fpedantic option
+@cindex options, -fpedantic
+@item -fpedantic
+Like @option{-pedantic}, but applies only to Fortran constructs.
+
+@cindex -w option
+@cindex options, -w
+@item -w
+Inhibit all warning messages.
+
+@cindex -Wno-globals option
+@cindex options, -Wno-globals
+@item -Wno-globals
+@cindex global names, warning
+@cindex warnings, global names
+Inhibit warnings about use of a name as both a global name
+(a subroutine, function, or block data program unit, or a
+common block) and implicitly as the name of an intrinsic
+in a source file.
+
+Also inhibit warnings about inconsistent invocations and/or
+definitions of global procedures (function and subroutines).
+Such inconsistencies include different numbers of arguments
+and different types of arguments.
+
+@cindex -Wimplicit option
+@cindex options, -Wimplicit
+@item -Wimplicit
+@cindex implicit declaration, warning
+@cindex warnings, implicit declaration
+@cindex -u option
+@cindex /WARNINGS=DECLARATIONS switch
+@cindex IMPLICIT NONE, similar effect
+@cindex effecting IMPLICIT NONE
+Warn whenever a variable, array, or function is implicitly
+declared.
+Has an effect similar to using the @code{IMPLICIT NONE} statement
+in every program unit.
+(Some Fortran compilers provide this feature by an option
+named @option{-u} or @samp{/WARNINGS=DECLARATIONS}.)
+
+@cindex -Wunused option
+@cindex options, -Wunused
+@item -Wunused
+@cindex unused variables
+@cindex variables, unused
+Warn whenever a variable is unused aside from its declaration.
+
+@cindex -Wuninitialized option
+@cindex options, -Wuninitialized
+@item -Wuninitialized
+@cindex uninitialized variables
+@cindex variables, uninitialized
+Warn whenever an automatic variable is used without first being initialized.
+
+These warnings are possible only in optimizing compilation,
+because they require data-flow information that is computed only
+when optimizing. If you don't specify @option{-O}, you simply won't
+get these warnings.
+
+These warnings occur only for variables that are candidates for
+register allocation. Therefore, they do not occur for a variable
+@c that is declared @code{VOLATILE}, or
+whose address is taken, or whose size
+is other than 1, 2, 4 or 8 bytes. Also, they do not occur for
+arrays, even when they are in registers.
+
+Note that there might be no warning about a variable that is used only
+to compute a value that itself is never used, because such
+computations may be deleted by data-flow analysis before the warnings
+are printed.
+
+These warnings are made optional because GNU Fortran is not smart
+enough to see all the reasons why the code might be correct
+despite appearing to have an error. Here is one example of how
+this can happen:
+
+@example
+SUBROUTINE DISPAT(J)
+IF (J.EQ.1) I=1
+IF (J.EQ.2) I=4
+IF (J.EQ.3) I=5
+CALL FOO(I)
+END
+@end example
+
+@noindent
+If the value of @code{J} is always 1, 2 or 3, then @code{I} is
+always initialized, but GNU Fortran doesn't know this. Here is
+another common case:
+
+@example
+SUBROUTINE MAYBE(FLAG)
+LOGICAL FLAG
+IF (FLAG) VALUE = 9.4
+@dots{}
+IF (FLAG) PRINT *, VALUE
+END
+@end example
+
+@noindent
+This has no bug because @code{VALUE} is used only if it is set.
+
+@cindex -Wall option
+@cindex options, -Wall
+@item -Wall
+@cindex all warnings
+@cindex warnings, all
+The @option{-Wunused} and @option{-Wuninitialized} options combined.
+These are all the
+options which pertain to usage that we recommend avoiding and that we
+believe is easy to avoid.
+(As more warnings are added to @command{g77} some might
+be added to the list enabled by @option{-Wall}.)
+@end table
+
+The remaining @option{-W@dots{}} options are not implied by @option{-Wall}
+because they warn about constructions that we consider reasonable to
+use, on occasion, in clean programs.
+
+@table @gcctabopt
+@c @item -W
+@c Print extra warning messages for these events:
+@c
+@c @itemize @bullet
+@c @item
+@c If @option{-Wall} or @option{-Wunused} is also specified, warn about unused
+@c arguments.
+@c
+@c @end itemize
+@c
+@cindex -Wsurprising option
+@cindex options, -Wsurprising
+@item -Wsurprising
+Warn about ``suspicious'' constructs that are interpreted
+by the compiler in a way that might well be surprising to
+someone reading the code.
+These differences can result in subtle, compiler-dependent
+(even machine-dependent) behavioral differences.
+The constructs warned about include:
+
+@itemize @bullet
+@item
+Expressions having two arithmetic operators in a row, such
+as @samp{X*-Y}.
+Such a construct is nonstandard, and can produce
+unexpected results in more complicated situations such
+as @samp{X**-Y*Z}.
+@command{g77} along with many other compilers, interprets
+this example differently than many programmers, and a few
+other compilers.
+Specifically, @command{g77} interprets @samp{X**-Y*Z} as
+@samp{(X**(-Y))*Z}, while others might think it should
+be interpreted as @samp{X**(-(Y*Z))}.
+
+A revealing example is the constant expression @samp{2**-2*1.},
+which @command{g77} evaluates to .25, while others might evaluate
+it to 0., the difference resulting from the way precedence affects
+type promotion.
+
+(The @option{-fpedantic} option also warns about expressions
+having two arithmetic operators in a row.)
+
+@item
+Expressions with a unary minus followed by an operand and then
+a binary operator other than plus or minus.
+For example, @samp{-2**2} produces a warning, because
+the precedence is @samp{-(2**2)}, yielding -4, not
+@samp{(-2)**2}, which yields 4, and which might represent
+what a programmer expects.
+
+An example of an expression producing different results
+in a surprising way is @samp{-I*S}, where @var{I} holds
+the value @samp{-2147483648} and @var{S} holds @samp{0.5}.
+On many systems, negating @var{I} results in the same
+value, not a positive number, because it is already the
+lower bound of what an @code{INTEGER(KIND=1)} variable can hold.
+So, the expression evaluates to a positive number, while
+the ``expected'' interpretation, @samp{(-I)*S}, would
+evaluate to a negative number.
+
+Even cases such as @samp{-I*J} produce warnings,
+even though, in most configurations and situations,
+there is no computational difference between the
+results of the two interpretations---the purpose
+of this warning is to warn about differing interpretations
+and encourage a better style of coding, not to identify
+only those places where bugs might exist in the user's
+code.
+
+@cindex DO statement
+@cindex statements, DO
+@item
+@code{DO} loops with @code{DO} variables that are not
+of integral type---that is, using @code{REAL}
+variables as loop control variables.
+Although such loops can be written to work in the
+``obvious'' way, the way @command{g77} is required by the
+Fortran standard to interpret such code is likely to
+be quite different from the way many programmers expect.
+(This is true of all @code{DO} loops, but the differences
+are pronounced for non-integral loop control variables.)
+
+@xref{Loops}, for more information.
+@end itemize
+
+@cindex -Werror option
+@cindex options, -Werror
+@item -Werror
+Make all warnings into errors.
+
+@cindex -W option
+@cindex options, -W
+@item -W
+@cindex extra warnings
+@cindex warnings, extra
+Turns on ``extra warnings'' and, if optimization is specified
+via @option{-O}, the @option{-Wuninitialized} option.
+(This might change in future versions of @command{g77}
+
+``Extra warnings'' are issued for:
+
+@itemize @bullet
+@item
+@cindex unused parameters
+@cindex parameters, unused
+@cindex unused arguments
+@cindex arguments, unused
+@cindex unused dummies
+@cindex dummies, unused
+Unused parameters to a procedure (when @option{-Wunused} also is
+specified).
+
+@item
+@cindex overflow
+Overflows involving floating-point constants (not available
+for certain configurations).
+@end itemize
+@end table
+
+@xref{Warning Options,,Options to Request or Suppress Warnings,
+gcc,Using the GNU Compiler Collection (GCC)}, for information on more
+options offered
+by the GBE shared by @command{g77} @command{gcc} and other GNU compilers.
+
+Some of these have no effect when compiling programs written in Fortran:
+
+@table @gcctabopt
+@cindex -Wcomment option
+@cindex options, -Wcomment
+@item -Wcomment
+@cindex -Wformat option
+@cindex options, -Wformat
+@item -Wformat
+@cindex -Wparentheses option
+@cindex options, -Wparentheses
+@item -Wparentheses
+@cindex -Wswitch option
+@cindex options, -Wswitch
+@item -Wswitch
+@cindex -Wtraditional option
+@cindex options, -Wtraditional
+@item -Wtraditional
+@cindex -Wshadow option
+@cindex options, -Wshadow
+@item -Wshadow
+@cindex -Wid-clash-@var{len} option
+@cindex options, -Wid-clash-@var{len}
+@item -Wid-clash-@var{len}
+@cindex -Wlarger-than-@var{len} option
+@cindex options, -Wlarger-than-@var{len}
+@item -Wlarger-than-@var{len}
+@cindex -Wconversion option
+@cindex options, -Wconversion
+@item -Wconversion
+@cindex -Waggregate-return option
+@cindex options, -Waggregate-return
+@item -Waggregate-return
+@cindex -Wredundant-decls option
+@cindex options, -Wredundant-decls
+@item -Wredundant-decls
+@cindex unsupported warnings
+@cindex warnings, unsupported
+These options all could have some relevant meaning for
+GNU Fortran programs, but are not yet supported.
+@end table
+
+@node Debugging Options
+@section Options for Debugging Your Program or GNU Fortran
+@cindex options, debugging
+@cindex debugging information options
+
+GNU Fortran has various special options that are used for debugging
+either your program or @command{g77}
+
+@table @gcctabopt
+@cindex -g option
+@cindex options, -g
+@item -g
+Produce debugging information in the operating system's native format
+(stabs, COFF, XCOFF, or DWARF). GDB can work with this debugging
+information.
+@end table
+
+@xref{Debugging Options,,Options for Debugging Your Program or GCC,
+gcc,Using the GNU Compiler Collection (GCC)}, for more information on
+debugging options.
+
+@node Optimize Options
+@section Options That Control Optimization
+@cindex optimize options
+@cindex options, optimization
+
+Most Fortran users will want to use no optimization when
+developing and testing programs, and use @option{-O} or @option{-O2} when
+compiling programs for late-cycle testing and for production use.
+However, note that certain diagnostics---such as for uninitialized
+variables---depend on the flow analysis done by @option{-O}, i.e.@: you
+must use @option{-O} or @option{-O2} to get such diagnostics.
+
+The following flags have particular applicability when
+compiling Fortran programs:
+
+@table @gcctabopt
+@cindex -malign-double option
+@cindex options, -malign-double
+@item -malign-double
+(Intel x86 architecture only.)
+
+Noticeably improves performance of @command{g77} programs making
+heavy use of @code{REAL(KIND=2)} (@code{DOUBLE PRECISION}) data
+on some systems.
+In particular, systems using Pentium, Pentium Pro, 586, and
+686 implementations
+of the i386 architecture execute programs faster when
+@code{REAL(KIND=2)} (@code{DOUBLE PRECISION}) data are
+aligned on 64-bit boundaries
+in memory.
+
+This option can, at least, make benchmark results more consistent
+across various system configurations, versions of the program,
+and data sets.
+
+@emph{Note:} The warning in the @command{gcc} documentation about
+this option does not apply, generally speaking, to Fortran
+code compiled by @command{g77}
+
+@xref{Aligned Data}, for more information on alignment issues.
+
+@emph{Also also note:} The negative form of @option{-malign-double}
+is @option{-mno-align-double}, not @option{-benign-double}.
+
+@cindex -ffloat-store option
+@cindex options, -ffloat-store
+@item -ffloat-store
+@cindex IEEE 754 conformance
+@cindex conformance, IEEE 754
+@cindex floating-point, precision
+Might help a Fortran program that depends on exact IEEE conformance on
+some machines, but might slow down a program that doesn't.
+
+This option is effective when the floating-point unit is set to work in
+IEEE 854 `extended precision'---as it typically is on x86 and m68k GNU
+systems---rather than IEEE 754 double precision. @option{-ffloat-store}
+tries to remove the extra precision by spilling data from floating-point
+registers into memory and this typically involves a big performance
+hit. However, it doesn't affect intermediate results, so that it is
+only partially effective. `Excess precision' is avoided in code like:
+@smallexample
+a = b + c
+d = a * e
+@end smallexample
+but not in code like:
+@smallexample
+ d = (b + c) * e
+@end smallexample
+
+For another, potentially better, way of controlling the precision,
+see @ref{Floating-point precision}.
+
+@cindex -fforce-mem option
+@cindex options, -fforce-mem
+@item -fforce-mem
+@cindex -fforce-addr option
+@cindex options, -fforce-addr
+@item -fforce-addr
+@cindex loops, speeding up
+@cindex speed, of loops
+Might improve optimization of loops.
+
+@cindex -fno-inline option
+@cindex options, -fno-inline
+@item -fno-inline
+@cindex in-line code
+@cindex compilation, in-line
+@c DL: Only relevant for -O3? TM: No, statement functions are
+@c inlined even at -O1.
+Don't compile statement functions inline.
+Might reduce the size of a program unit---which might be at
+expense of some speed (though it should compile faster).
+Note that if you are not optimizing, no functions can be expanded inline.
+
+@cindex -ffast-math option
+@cindex options, -ffast-math
+@item -ffast-math
+@cindex IEEE 754 conformance
+@cindex conformance, IEEE 754
+Might allow some programs designed to not be too dependent
+on IEEE behavior for floating-point to run faster, or die trying.
+Sets @option{-funsafe-math-optimizations}, and
+@option{-fno-trapping-math}.
+
+@cindex -funsafe-math-optimizations option
+@cindex options, -funsafe-math-optimizations
+@item -funsafe-math-optimizations
+Allow optimizations that may be give incorrect results
+for certain IEEE inputs.
+
+@cindex -fno-trapping-math option
+@cindex options, -fno-trapping-math
+@item -fno-trapping-math
+Allow the compiler to assume that floating-point arithmetic
+will not generate traps on any inputs. This is useful, for
+example, when running a program using IEEE "non-stop"
+floating-point arithmetic.
+
+@cindex -fstrength-reduce option
+@cindex options, -fstrength-reduce
+@item -fstrength-reduce
+@cindex loops, speeding up
+@cindex speed, of loops
+@c DL: normally defaulted?
+Might make some loops run faster.
+
+@cindex -frerun-cse-after-loop option
+@cindex options, -frerun-cse-after-loop
+@item -frerun-cse-after-loop
+@cindex -fexpensive-optimizations option
+@cindex options, -fexpensive-optimizations
+@c DL: This is -O2?
+@item -fexpensive-optimizations
+@cindex -fdelayed-branch option
+@cindex options, -fdelayed-branch
+@item -fdelayed-branch
+@cindex -fschedule-insns option
+@cindex options, -fschedule-insns
+@item -fschedule-insns
+@cindex -fschedule-insns2 option
+@cindex options, -fschedule-insns2
+@item -fschedule-insns2
+@cindex -fcaller-saves option
+@cindex options, -fcaller-saves
+@item -fcaller-saves
+Might improve performance on some code.
+
+@cindex -funroll-loops option
+@cindex options, -funroll-loops
+@item -funroll-loops
+@cindex loops, unrolling
+@cindex unrolling loops
+@cindex loops, optimizing
+@cindex indexed (iterative) @code{DO}
+@cindex iterative @code{DO}
+@c DL: fixme: Craig doesn't like `indexed' but f95 doesn't seem to
+@c provide a suitable term
+@c CB: I've decided on `iterative', for the time being, and changed
+@c my previous, rather bizarre, use of `imperative' to that
+@c (though `precomputed-trip' would be a more precise adjective)
+Typically improves performance on code using iterative @code{DO} loops by
+unrolling them and is probably generally appropriate for Fortran, though
+it is not turned on at any optimization level.
+Note that outer loop unrolling isn't done specifically; decisions about
+whether to unroll a loop are made on the basis of its instruction count.
+
+@c DL: Fixme: This should obviously go somewhere else...
+Also, no `loop discovery'@footnote{@dfn{loop discovery} refers to the
+process by which a compiler, or indeed any reader of a program,
+determines which portions of the program are more likely to be executed
+repeatedly as it is being run. Such discovery typically is done early
+when compiling using optimization techniques, so the ``discovered''
+loops get more attention---and more run-time resources, such as
+registers---from the compiler. It is easy to ``discover'' loops that are
+constructed out of looping constructs in the language
+(such as Fortran's @code{DO}). For some programs, ``discovering'' loops
+constructed out of lower-level constructs (such as @code{IF} and
+@code{GOTO}) can lead to generation of more optimal code
+than otherwise.} is done, so only loops written with @code{DO}
+benefit from loop optimizations, including---but not limited
+to---unrolling. Loops written with @code{IF} and @code{GOTO} are not
+currently recognized as such. This option unrolls only iterative
+@code{DO} loops, not @code{DO WHILE} loops.
+
+@cindex -funroll-all-loops option
+@cindex options, -funroll-all-loops
+@cindex DO WHILE
+@item -funroll-all-loops
+@c DL: Check my understanding of -funroll-all-loops v. -funroll-loops is correct.
+Probably improves performance on code using @code{DO WHILE} loops by
+unrolling them in addition to iterative @code{DO} loops. In the absence
+of @code{DO WHILE}, this option is equivalent to @option{-funroll-loops}
+but possibly slower.
+
+@item -fno-move-all-movables
+@cindex -fno-move-all-movables option
+@cindex options, -fno-move-all-movables
+@item -fno-reduce-all-givs
+@cindex -fno-reduce-all-givs option
+@cindex options, -fno-reduce-all-givs
+@item -fno-rerun-loop-opt
+@cindex -fno-rerun-loop-opt option
+@cindex options, -fno-rerun-loop-opt
+@emph{Version info:}
+These options are not supported by
+versions of @command{g77} based on @command{gcc} version 2.8.
+
+Each of these might improve performance on some code.
+
+Analysis of Fortran code optimization and the resulting
+optimizations triggered by the above options were
+contributed by Toon Moene (@email{toon@@moene.indiv.nluug.nl}).
+
+These three options are intended to be removed someday, once
+they have helped determine the efficacy of various
+approaches to improving the performance of Fortran code.
+
+Please let us know how use of these options affects
+the performance of your production code.
+We're particularly interested in code that runs faster
+when these options are @emph{disabled}, and in
+non-Fortran code that benefits when they are
+@emph{enabled} via the above @command{gcc} command-line options.
+@end table
+
+@xref{Optimize Options,,Options That Control Optimization,
+gcc,Using the GNU Compiler Collection (GCC)}, for more information on options
+to optimize the generated machine code.
+
+@node Preprocessor Options
+@section Options Controlling the Preprocessor
+@cindex preprocessor options
+@cindex options, preprocessor
+@cindex cpp program
+@cindex programs, cpp
+
+These options control the C preprocessor, which is run on each C source
+file before actual compilation.
+
+@xref{Preprocessor Options,,Options Controlling the Preprocessor,
+gcc,Using the GNU Compiler Collection (GCC)}, for information on C
+preprocessor options.
+
+@cindex INCLUDE directive
+@cindex directive, INCLUDE
+Some of these options also affect how @command{g77} processes the
+@code{INCLUDE} directive.
+Since this directive is processed even when preprocessing
+is not requested, it is not described in this section.
+@xref{Directory Options,,Options for Directory Search}, for
+information on how @command{g77} processes the @code{INCLUDE} directive.
+
+However, the @code{INCLUDE} directive does not apply
+preprocessing to the contents of the included file itself.
+
+Therefore, any file that contains preprocessor directives
+(such as @code{#include}, @code{#define}, and @code{#if})
+must be included via the @code{#include} directive, not
+via the @code{INCLUDE} directive.
+Therefore, any file containing preprocessor directives,
+if included, is necessarily included by a file that itself
+contains preprocessor directives.
+
+@node Directory Options
+@section Options for Directory Search
+@cindex directory, options
+@cindex options, directory search
+@cindex search path
+
+These options affect how the @command{cpp} preprocessor searches
+for files specified via the @code{#include} directive.
+Therefore, when compiling Fortran programs, they are meaningful
+when the preprocessor is used.
+
+@cindex INCLUDE directive
+@cindex directive, INCLUDE
+Some of these options also affect how @command{g77} searches
+for files specified via the @code{INCLUDE} directive,
+although files included by that directive are not,
+themselves, preprocessed.
+These options are:
+
+@table @gcctabopt
+@cindex -I- option
+@cindex options, -I-
+@item -I-
+@cindex -Idir option
+@cindex options, -Idir
+@item -I@var{dir}
+@cindex directory, search paths for inclusion
+@cindex inclusion, directory search paths for
+@cindex search paths, for included files
+@cindex paths, search
+These affect interpretation of the @code{INCLUDE} directive
+(as well as of the @code{#include} directive of the @command{cpp}
+preprocessor).
+
+Note that @option{-I@var{dir}} must be specified @emph{without} any
+spaces between @option{-I} and the directory name---that is,
+@option{-Ifoo/bar} is valid, but @option{-I foo/bar}
+is rejected by the @command{g77} compiler (though the preprocessor supports
+the latter form).
+@c this is due to toplev.c's inflexible option processing
+Also note that the general behavior of @option{-I} and
+@code{INCLUDE} is pretty much the same as of @option{-I} with
+@code{#include} in the @command{cpp} preprocessor, with regard to
+looking for @file{header.gcc} files and other such things.
+
+@xref{Directory Options,,Options for Directory Search,
+gcc,Using the GNU Compiler Collection (GCC)}, for information on the
+@option{-I} option.
+@end table
+
+@node Code Gen Options
+@section Options for Code Generation Conventions
+@cindex code generation, conventions
+@cindex options, code generation
+@cindex run-time, options
+
+These machine-independent options control the interface conventions
+used in code generation.
+
+Most of them have both positive and negative forms; the negative form
+of @option{-ffoo} would be @option{-fno-foo}. In the table below, only
+one of the forms is listed---the one which is not the default. You
+can figure out the other form by either removing @option{no-} or adding
+it.
+
+@table @gcctabopt
+@cindex -fno-automatic option
+@cindex options, -fno-automatic
+@item -fno-automatic
+@cindex SAVE statement
+@cindex statements, SAVE
+Treat each program unit as if the @code{SAVE} statement was specified
+for every local variable and array referenced in it.
+Does not affect common blocks.
+(Some Fortran compilers provide this option under
+the name @option{-static}.)
+
+@cindex -finit-local-zero option
+@cindex options, -finit-local-zero
+@item -finit-local-zero
+@cindex DATA statement
+@cindex statements, DATA
+@cindex initialization, of local variables
+@cindex variables, initialization of
+@cindex uninitialized variables
+@cindex variables, uninitialized
+Specify that variables and arrays that are local to a program unit
+(not in a common block and not passed as an argument) are to be initialized
+to binary zeros.
+
+Since there is a run-time penalty for initialization of variables
+that are not given the @code{SAVE} attribute, it might be a
+good idea to also use @option{-fno-automatic} with @option{-finit-local-zero}.
+
+@cindex -fno-f2c option
+@cindex options, -fno-f2c
+@item -fno-f2c
+@cindex @command{f2c} compatibility
+@cindex compatibility, @command{f2c}
+Do not generate code designed to be compatible with code generated
+by @command{f2c} use the GNU calling conventions instead.
+
+The @command{f2c} calling conventions require functions that return
+type @code{REAL(KIND=1)} to actually return the C type @code{double},
+and functions that return type @code{COMPLEX} to return the
+values via an extra argument in the calling sequence that points
+to where to store the return value.
+Under the GNU calling conventions, such functions simply return
+their results as they would in GNU C---@code{REAL(KIND=1)} functions
+return the C type @code{float}, and @code{COMPLEX} functions
+return the GNU C type @code{complex} (or its @code{struct}
+equivalent).
+
+This does not affect the generation of code that interfaces with the
+@code{libg2c} library.
+
+However, because the @code{libg2c} library uses @command{f2c}
+calling conventions, @command{g77} rejects attempts to pass
+intrinsics implemented by routines in this library as actual
+arguments when @option{-fno-f2c} is used, to avoid bugs when
+they are actually called by code expecting the GNU calling
+conventions to work.
+
+For example, @samp{INTRINSIC ABS;CALL FOO(ABS)} is
+rejected when @option{-fno-f2c} is in force.
+(Future versions of the @command{g77} run-time library might
+offer routines that provide GNU-callable versions of the
+routines that implement the @command{f2c} intrinsics
+that may be passed as actual arguments, so that
+valid programs need not be rejected when @option{-fno-f2c}
+is used.)
+
+@strong{Caution:} If @option{-fno-f2c} is used when compiling any
+source file used in a program, it must be used when compiling
+@emph{all} Fortran source files used in that program.
+
+@c seems kinda dumb to tell people about an option they can't use -- jcb
+@c then again, we want users building future-compatible libraries with it.
+@cindex -ff2c-library option
+@cindex options, -ff2c-library
+@item -ff2c-library
+Specify that use of @code{libg2c} (or the original @code{libf2c})
+is required.
+This is the default for the current version of @command{g77}
+
+Currently it is not
+valid to specify @option{-fno-f2c-library}.
+This option is provided so users can specify it in shell
+scripts that build programs and libraries that require the
+@code{libf2c} library, even when being compiled by future
+versions of @command{g77} that might otherwise default to
+generating code for an incompatible library.
+
+@cindex -fno-underscoring option
+@cindex options, -fno-underscoring
+@item -fno-underscoring
+@cindex underscore
+@cindex symbol names, underscores
+@cindex transforming symbol names
+@cindex symbol names, transforming
+Do not transform names of entities specified in the Fortran
+source file by appending underscores to them.
+
+With @option{-funderscoring} in effect, @command{g77} appends two underscores
+to names with underscores and one underscore to external names with
+no underscores. (@command{g77} also appends two underscores to internal
+names with underscores to avoid naming collisions with external names.
+The @option{-fno-second-underscore} option disables appending of the
+second underscore in all cases.)
+
+This is done to ensure compatibility with code produced by many
+UNIX Fortran compilers, including @command{f2c} which perform the
+same transformations.
+
+Use of @option{-fno-underscoring} is not recommended unless you are
+experimenting with issues such as integration of (GNU) Fortran into
+existing system environments (vis-a-vis existing libraries, tools, and
+so on).
+
+For example, with @option{-funderscoring}, and assuming other defaults like
+@option{-fcase-lower} and that @samp{j()} and @samp{max_count()} are
+external functions while @samp{my_var} and @samp{lvar} are local variables,
+a statement like
+
+@smallexample
+I = J() + MAX_COUNT (MY_VAR, LVAR)
+@end smallexample
+
+@noindent
+is implemented as something akin to:
+
+@smallexample
+i = j_() + max_count__(&my_var__, &lvar);
+@end smallexample
+
+With @option{-fno-underscoring}, the same statement is implemented as:
+
+@smallexample
+i = j() + max_count(&my_var, &lvar);
+@end smallexample
+
+Use of @option{-fno-underscoring} allows direct specification of
+user-defined names while debugging and when interfacing @command{g77}
+code with other languages.
+
+Note that just because the names match does @emph{not} mean that the
+interface implemented by @command{g77} for an external name matches the
+interface implemented by some other language for that same name.
+That is, getting code produced by @command{g77} to link to code produced
+by some other compiler using this or any other method can be only a
+small part of the overall solution---getting the code generated by
+both compilers to agree on issues other than naming can require
+significant effort, and, unlike naming disagreements, linkers normally
+cannot detect disagreements in these other areas.
+
+Also, note that with @option{-fno-underscoring}, the lack of appended
+underscores introduces the very real possibility that a user-defined
+external name will conflict with a name in a system library, which
+could make finding unresolved-reference bugs quite difficult in some
+cases---they might occur at program run time, and show up only as
+buggy behavior at run time.
+
+In future versions of @command{g77} we hope to improve naming and linking
+issues so that debugging always involves using the names as they appear
+in the source, even if the names as seen by the linker are mangled to
+prevent accidental linking between procedures with incompatible
+interfaces.
+
+@cindex -fno-second-underscore option
+@cindex options, -fno-second-underscore
+@item -fno-second-underscore
+@cindex underscore
+@cindex symbol names, underscores
+@cindex transforming symbol names
+@cindex symbol names, transforming
+Do not append a second underscore to names of entities specified
+in the Fortran source file.
+
+This option has no effect if @option{-fno-underscoring} is
+in effect.
+
+Otherwise, with this option, an external name such as @samp{MAX_COUNT}
+is implemented as a reference to the link-time external symbol
+@samp{max_count_}, instead of @samp{max_count__}.
+
+@cindex -fno-ident option
+@cindex options, -fno-ident
+@item -fno-ident
+Ignore the @samp{#ident} directive.
+
+@cindex -fzeros option
+@cindex options, -fzeros
+@item -fzeros
+Treat initial values of zero as if they were any other value.
+
+As of version 0.5.18, @command{g77} normally treats @code{DATA} and
+other statements that are used to specify initial values of zero
+for variables and arrays as if no values were actually specified,
+in the sense that no diagnostics regarding multiple initializations
+are produced.
+
+This is done to speed up compiling of programs that initialize
+large arrays to zeros.
+
+Use @option{-fzeros} to revert to the simpler, slower behavior
+that can catch multiple initializations by keeping track of
+all initializations, zero or otherwise.
+
+@emph{Caution:} Future versions of @command{g77} might disregard this option
+(and its negative form, the default) or interpret it somewhat
+differently.
+The interpretation changes will affect only non-standard
+programs; standard-conforming programs should not be affected.
+
+@cindex -femulate-complex option
+@cindex options, -femulate-complex
+@item -femulate-complex
+Implement @code{COMPLEX} arithmetic via emulation,
+instead of using the facilities of
+the @command{gcc} back end that provide direct support of
+@code{complex} arithmetic.
+
+(@command{gcc} had some bugs in its back-end support
+for @code{complex} arithmetic, due primarily to the support not being
+completed as of version 2.8.1 and @code{egcs} 1.1.2.)
+
+Use @option{-femulate-complex} if you suspect code-generation bugs,
+or experience compiler crashes,
+that might result from @command{g77} using the @code{COMPLEX} support
+in the @command{gcc} back end.
+If using that option fixes the bugs or crashes you are seeing,
+that indicates a likely @command{g77} bugs
+(though, all compiler crashes are considered bugs),
+so, please report it.
+(Note that the known bugs, now believed fixed, produced compiler crashes
+rather than causing the generation of incorrect code.)
+
+Use of this option should not affect how Fortran code compiled
+by @command{g77} works in terms of its interfaces to other code,
+e.g. that compiled by @command{f2c}
+
+As of GCC version 3.0, this option is not necessary anymore.
+
+@emph{Caution:} Future versions of @command{g77} might ignore both forms
+of this option.
+
+@cindex -falias-check option
+@cindex options, -falias-check
+@cindex -fargument-alias option
+@cindex options, -fargument-alias
+@cindex -fargument-noalias option
+@cindex options, -fargument-noalias
+@cindex -fno-argument-noalias-global option
+@cindex options, -fno-argument-noalias-global
+@item -falias-check
+@item -fargument-alias
+@item -fargument-noalias
+@item -fno-argument-noalias-global
+@emph{Version info:}
+These options are not supported by
+versions of @command{g77} based on @command{gcc} version 2.8.
+
+These options specify to what degree aliasing
+(overlap)
+is permitted between
+arguments (passed as pointers) and @code{COMMON} (external, or
+public) storage.
+
+The default for Fortran code, as mandated by the FORTRAN 77 and
+Fortran 90 standards, is @option{-fargument-noalias-global}.
+The default for code written in the C language family is
+@option{-fargument-alias}.
+
+Note that, on some systems, compiling with @option{-fforce-addr} in
+effect can produce more optimal code when the default aliasing
+options are in effect (and when optimization is enabled).
+
+@xref{Aliasing Assumed To Work}, for detailed information on the implications
+of compiling Fortran code that depends on the ability to alias dummy
+arguments.
+
+@cindex -fno-globals option
+@cindex options, -fno-globals
+@item -fno-globals
+@cindex global names, warning
+@cindex warnings, global names
+@cindex in-line code
+@cindex compilation, in-line
+Disable diagnostics about inter-procedural
+analysis problems, such as disagreements about the
+type of a function or a procedure's argument,
+that might cause a compiler crash when attempting
+to inline a reference to a procedure within a
+program unit.
+(The diagnostics themselves are still produced, but
+as warnings, unless @option{-Wno-globals} is specified,
+in which case no relevant diagnostics are produced.)
+
+Further, this option disables such inlining, to
+avoid compiler crashes resulting from incorrect
+code that would otherwise be diagnosed.
+
+As such, this option might be quite useful when
+compiling existing, ``working'' code that happens
+to have a few bugs that do not generally show themselves,
+but which @command{g77} diagnoses.
+
+Use of this option therefore has the effect of
+instructing @command{g77} to behave more like it did
+up through version 0.5.19.1, when it paid little or
+no attention to disagreements between program units
+about a procedure's type and argument information,
+and when it performed no inlining of procedures
+(except statement functions).
+
+Without this option, @command{g77} defaults to performing
+the potentially inlining procedures as it started doing
+in version 0.5.20, but as of version 0.5.21, it also
+diagnoses disagreements that might cause such inlining
+to crash the compiler as (fatal) errors,
+and warns about similar disagreements
+that are currently believed to not
+likely to result in the compiler later crashing
+or producing incorrect code.
+
+@cindex -fflatten-arrays option
+@item -fflatten-arrays
+@cindex array performance
+@cindex arrays, flattening
+Use back end's C-like constructs
+(pointer plus offset)
+instead of its @code{ARRAY_REF} construct
+to handle all array references.
+
+@emph{Note:} This option is not supported.
+It is intended for use only by @command{g77} developers,
+to evaluate code-generation issues.
+It might be removed at any time.
+
+@cindex -fbounds-check option
+@cindex -ffortran-bounds-check option
+@item -fbounds-check
+@itemx -ffortran-bounds-check
+@cindex bounds checking
+@cindex range checking
+@cindex array bounds checking
+@cindex subscript checking
+@cindex substring checking
+@cindex checking subscripts
+@cindex checking substrings
+Enable generation of run-time checks for array subscripts
+and substring start and end points
+against the (locally) declared minimum and maximum values.
+
+The current implementation uses the @code{libf2c}
+library routine @code{s_rnge} to print the diagnostic.
+
+However, whereas @command{f2c} generates a single check per
+reference for a multi-dimensional array, of the computed
+offset against the valid offset range (0 through the size of the array),
+@command{g77} generates a single check per @emph{subscript} expression.
+This catches some cases of potential bugs that @command{f2c} does not,
+such as references to below the beginning of an assumed-size array.
+
+@command{g77} also generates checks for @code{CHARACTER} substring references,
+something @command{f2c} currently does not do.
+
+Use the new @option{-ffortran-bounds-check} option
+to specify bounds-checking for only the Fortran code you are compiling,
+not necessarily for code written in other languages.
+
+@emph{Note:} To provide more detailed information on the offending subscript,
+@command{g77} provides the @code{libg2c} run-time library routine @code{s_rnge}
+with somewhat differently-formatted information.
+Here's a sample diagnostic:
+
+@smallexample
+Subscript out of range on file line 4, procedure rnge.f/bf.
+Attempt to access the -6-th element of variable b[subscript-2-of-2].
+Aborted
+@end smallexample
+
+The above message indicates that the offending source line is
+line 4 of the file @file{rnge.f},
+within the program unit (or statement function) named @samp{bf}.
+The offended array is named @samp{b}.
+The offended array dimension is the second for a two-dimensional array,
+and the offending, computed subscript expression was @samp{-6}.
+
+For a @code{CHARACTER} substring reference, the second line has
+this appearance:
+
+@smallexample
+Attempt to access the 11-th element of variable a[start-substring].
+@end smallexample
+
+This indicates that the offended @code{CHARACTER} variable or array
+is named @samp{a},
+the offended substring position is the starting (leftmost) position,
+and the offending substring expression is @samp{11}.
+
+(Though the verbage of @code{s_rnge} is not ideal
+for the purpose of the @command{g77} compiler,
+the above information should provide adequate diagnostic abilities
+to it users.)
+@end table
+
+@xref{Code Gen Options,,Options for Code Generation Conventions,
+gcc,Using the GNU Compiler Collection (GCC)}, for information on more options
+offered by the GBE
+shared by @command{g77} @command{gcc} and other GNU compilers.
+
+Some of these do @emph{not} work when compiling programs written in Fortran:
+
+@table @gcctabopt
+@cindex -fpcc-struct-return option
+@cindex options, -fpcc-struct-return
+@item -fpcc-struct-return
+@cindex -freg-struct-return option
+@cindex options, -freg-struct-return
+@item -freg-struct-return
+You should not use these except strictly the same way as you
+used them to build the version of @code{libg2c} with which
+you will be linking all code compiled by @command{g77} with the
+same option.
+
+@cindex -fshort-double option
+@cindex options, -fshort-double
+@item -fshort-double
+This probably either has no effect on Fortran programs, or
+makes them act loopy.
+
+@cindex -fno-common option
+@cindex options, -fno-common
+@item -fno-common
+Do not use this when compiling Fortran programs,
+or there will be Trouble.
+
+@cindex -fpack-struct option
+@cindex options, -fpack-struct
+@item -fpack-struct
+This probably will break any calls to the @code{libg2c} library,
+at the very least, even if it is built with the same option.
+@end table
+
+@c man end
+
+@node Environment Variables
+@section Environment Variables Affecting GNU Fortran
+@cindex environment variables
+
+@c man begin ENVIRONMENT
+
+GNU Fortran currently does not make use of any environment
+variables to control its operation above and beyond those
+that affect the operation of @command{gcc}.
+
+@xref{Environment Variables,,Environment Variables Affecting GCC,
+gcc,Using the GNU Compiler Collection (GCC)}, for information on environment
+variables.
+
+@c man end
diff --git a/contrib/gcc/f/lab.h b/contrib/gcc/f/lab.h
index 09f1291..fba3808 100644
--- a/contrib/gcc/f/lab.h
+++ b/contrib/gcc/f/lab.h
@@ -29,8 +29,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* Allow multiple inclusion to work. */
-#ifndef _H_f_lab
-#define _H_f_lab
+#ifndef GCC_F_LAB_H
+#define GCC_F_LAB_H
/* Simple definitions and enumerations. */
@@ -151,4 +151,4 @@ ffelab ffelab_new (ffelabValue v);
/* End of #include file. */
-#endif
+#endif /* ! GCC_F_LAB_H */
diff --git a/contrib/gcc/f/lang-options.h b/contrib/gcc/f/lang-options.h
index f9bb90d..b2821ed 100644
--- a/contrib/gcc/f/lang-options.h
+++ b/contrib/gcc/f/lang-options.h
@@ -1,5 +1,5 @@
/* lang-options.h file for Fortran
- Copyright (C) 1995-1998 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc.
Contributed by James Craig Burley.
This file is part of GNU Fortran.
@@ -21,149 +21,219 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
*/
-/* This is the contribution to the `lang_options' array in gcc.c for
- g77. */
+/* This is the contribution to the `documented_lang_options' array in
+ toplev.c for g77. */
#ifdef __STDC__ /* To be consistent with lang-specs.h. Maybe avoid
overflowing some old compiler's tables, etc. */
DEFINE_LANG_NAME ("Fortran")
-/* Use of FTNOPT makes tracking changes between FSF-g77 and egcs-g77
- easier, since FSF-gcc doesn't support doc strings. */
-#define FTNOPT(opt,doc) { opt, doc },
-
-FTNOPT( "-fversion", "Print g77-specific compiler version info, run internal tests" )
-FTNOPT( "-fnull-version", "" )
+ { "-fversion",
+ N_("Print g77-specific compiler version info, run internal tests") },
/*"-fident",*/
/*"-fno-ident",*/
-FTNOPT( "-ff66", "Program is written in typical FORTRAN 66 dialect" )
-FTNOPT( "-fno-f66", "" )
-FTNOPT( "-ff77", "Program is written in typical Unix f77 dialect" )
-FTNOPT( "-fno-f77", "Program does not use Unix-f77 dialectal features" )
-FTNOPT( "-ff90", "Program is written in Fortran-90-ish dialect" )
-FTNOPT( "-fno-f90", "" )
-FTNOPT( "-fautomatic", "" )
-FTNOPT( "-fno-automatic", "Treat local vars and COMMON blocks as if they were named in SAVE statements" )
-FTNOPT( "-fdollar-ok", "Allow $ in symbol names" )
-FTNOPT( "-fno-dollar-ok", "" )
-FTNOPT( "-ff2c", "" )
-FTNOPT( "-fno-f2c", "f2c-compatible code need not be generated" )
-FTNOPT( "-ff2c-library", "" )
-FTNOPT( "-fno-f2c-library", "Unsupported; do not generate libf2c-calling code" )
-FTNOPT( "-fflatten-arrays", "Unsupported; affects code-generation of arrays" )
-FTNOPT( "-fno-flatten-arrays", "" )
-FTNOPT( "-ffree-form", "Program is written in Fortran-90-ish free form" )
-FTNOPT( "-fno-free-form", "" )
-FTNOPT( "-ffixed-form", "" )
-FTNOPT( "-fno-fixed-form", "" )
-FTNOPT( "-fpedantic", "Warn about use of (only a few for now) Fortran extensions" )
-FTNOPT( "-fno-pedantic", "" )
-FTNOPT( "-fvxt", "Program is written in VXT (Digital-like) FORTRAN" )
-FTNOPT( "-fno-vxt", "" )
-FTNOPT( "-fno-ugly", "Disallow all ugly features" )
-FTNOPT( "-fugly-args", "" )
-FTNOPT( "-fno-ugly-args", "Hollerith and typeless constants not passed as arguments" )
-FTNOPT( "-fugly-assign", "Allow ordinary copying of ASSIGN'ed vars" )
-FTNOPT( "-fno-ugly-assign", "" )
-FTNOPT( "-fugly-assumed", "Dummy array dimensioned to (1) is assumed-size" )
-FTNOPT( "-fno-ugly-assumed", "" )
-FTNOPT( "-fugly-comma", "Trailing comma in procedure call denotes null argument" )
-FTNOPT( "-fno-ugly-comma", "" )
-FTNOPT( "-fugly-complex", "Allow REAL(Z) and AIMAG(Z) given DOUBLE COMPLEX Z" )
-FTNOPT( "-fno-ugly-complex", "" )
-FTNOPT( "-fugly-init", "" )
-FTNOPT( "-fno-ugly-init", "Initialization via DATA and PARAMETER is type-compatible" )
-FTNOPT( "-fugly-logint", "Allow INTEGER and LOGICAL interchangeability" )
-FTNOPT( "-fno-ugly-logint", "" )
-FTNOPT( "-fxyzzy", "Print internal debugging-related info" )
-FTNOPT( "-fno-xyzzy", "" )
-FTNOPT( "-finit-local-zero", "Initialize local vars and arrays to zero" )
-FTNOPT( "-fno-init-local-zero", "" )
-FTNOPT( "-fbackslash", "" )
-FTNOPT( "-fno-backslash", "Backslashes in character/hollerith constants not special (C-style)" )
-FTNOPT( "-femulate-complex", "Have front end emulate COMPLEX arithmetic to avoid bugs" )
-FTNOPT( "-fno-emulate-complex", "" )
-FTNOPT( "-funderscoring", "" )
-FTNOPT( "-fno-underscoring", "Disable the appending of underscores to externals" )
-FTNOPT( "-fsecond-underscore", "" )
-FTNOPT( "-fno-second-underscore", "Never append a second underscore to externals" )
-FTNOPT( "-fintrin-case-initcap", "Intrinsics spelled as e.g. SqRt" )
-FTNOPT( "-fintrin-case-upper", "Intrinsics in uppercase" )
-FTNOPT( "-fintrin-case-lower", "" )
-FTNOPT( "-fintrin-case-any", "Intrinsics letters in arbitrary cases" )
-FTNOPT( "-fmatch-case-initcap", "Language keywords spelled as e.g. IOStat" )
-FTNOPT( "-fmatch-case-upper", "Language keywords in uppercase" )
-FTNOPT( "-fmatch-case-lower", "" )
-FTNOPT( "-fmatch-case-any", "Language keyword letters in arbitrary cases" )
-FTNOPT( "-fsource-case-upper", "Internally convert most source to uppercase" )
-FTNOPT( "-fsource-case-lower", "" )
-FTNOPT( "-fsource-case-preserve", "Internally preserve source case" )
-FTNOPT( "-fsymbol-case-initcap", "Symbol names spelled in mixed case" )
-FTNOPT( "-fsymbol-case-upper", "Symbol names in uppercase" )
-FTNOPT( "-fsymbol-case-lower", "Symbol names in lowercase" )
-FTNOPT( "-fsymbol-case-any", "" )
-FTNOPT( "-fcase-strict-upper", "Program written in uppercase" )
-FTNOPT( "-fcase-strict-lower", "Program written in lowercase" )
-FTNOPT( "-fcase-initcap", "Program written in strict mixed-case" )
-FTNOPT( "-fcase-upper", "Compile as if program written in uppercase" )
-FTNOPT( "-fcase-lower", "Compile as if program written in lowercase" )
-FTNOPT( "-fcase-preserve", "Preserve all spelling (case) used in program" )
-FTNOPT( "-fbadu77-intrinsics-delete", "Delete libU77 intrinsics with bad interfaces" )
-FTNOPT( "-fbadu77-intrinsics-disable", "Disable libU77 intrinsics with bad interfaces" )
-FTNOPT( "-fbadu77-intrinsics-enable", "" )
-FTNOPT( "-fbadu77-intrinsics-hide", "Hide libU77 intrinsics with bad interfaces" )
-FTNOPT( "-ff2c-intrinsics-delete", "Delete non-FORTRAN-77 intrinsics f2c supports" )
-FTNOPT( "-ff2c-intrinsics-disable", "Disable non-FORTRAN-77 intrinsics f2c supports" )
-FTNOPT( "-ff2c-intrinsics-enable", "" )
-FTNOPT( "-ff2c-intrinsics-hide", "Hide non-FORTRAN-77 intrinsics f2c supports" )
-FTNOPT( "-ff90-intrinsics-delete", "Delete non-FORTRAN-77 intrinsics F90 supports" )
-FTNOPT( "-ff90-intrinsics-disable", "Disable non-FORTRAN-77 intrinsics F90 supports" )
-FTNOPT( "-ff90-intrinsics-enable", "" )
-FTNOPT( "-ff90-intrinsics-hide", "Hide non-FORTRAN-77 intrinsics F90 supports" )
-FTNOPT( "-fgnu-intrinsics-delete", "Delete non-FORTRAN-77 intrinsics g77 supports" )
-FTNOPT( "-fgnu-intrinsics-disable", "Disable non-FORTRAN 77 intrinsics F90 supports" )
-FTNOPT( "-fgnu-intrinsics-enable", "" )
-FTNOPT( "-fgnu-intrinsics-hide", "Hide non-FORTRAN 77 intrinsics F90 supports" )
-FTNOPT( "-fmil-intrinsics-delete", "Delete MIL-STD 1753 intrinsics" )
-FTNOPT( "-fmil-intrinsics-disable", "Disable MIL-STD 1753 intrinsics" )
-FTNOPT( "-fmil-intrinsics-enable", "" )
-FTNOPT( "-fmil-intrinsics-hide", "Hide MIL-STD 1753 intrinsics" )
-FTNOPT( "-funix-intrinsics-delete", "Delete libU77 intrinsics" )
-FTNOPT( "-funix-intrinsics-disable", "Disable libU77 intrinsics" )
-FTNOPT( "-funix-intrinsics-enable", "" )
-FTNOPT( "-funix-intrinsics-hide", "Hide libU77 intrinsics" )
-FTNOPT( "-fvxt-intrinsics-delete", "Delete non-FORTRAN-77 intrinsics VXT FORTRAN supports" )
-FTNOPT( "-fvxt-intrinsics-disable", "Disable non-FORTRAN-77 intrinsics VXT FORTRAN supports" )
-FTNOPT( "-fvxt-intrinsics-enable", "" )
-FTNOPT( "-fvxt-intrinsics-hide", "Hide non-FORTRAN-77 intrinsics VXT FORTRAN supports" )
-FTNOPT( "-fzeros", "Treat initial values of 0 like non-zero values" )
-FTNOPT( "-fno-zeros", "" )
-FTNOPT( "-fdebug-kludge", "Emit special debugging information for COMMON and EQUIVALENCE" )
-FTNOPT( "-fno-debug-kludge", "" )
-FTNOPT( "-fonetrip", "Take at least one trip through each iterative DO loop" )
-FTNOPT( "-fno-onetrip", "" )
-FTNOPT( "-fsilent", "" )
-FTNOPT( "-fno-silent", "Print names of program units as they are compiled" )
-FTNOPT( "-fglobals", "" )
-FTNOPT( "-fno-globals", "Disable fatal diagnostics about inter-procedural problems" )
-FTNOPT( "-ftypeless-boz", "Make prefix-radix non-decimal constants be typeless" )
-FTNOPT( "-fno-typeless-boz", "" )
-FTNOPT( "-fbounds-check", "Generate code to check subscript and substring bounds" )
-FTNOPT( "-fno-bounds-check", "" )
-FTNOPT( "-ffortran-bounds-check", "Fortran-specific form of -fbounds-check")
-FTNOPT( "-fno-fortran-bounds-check", "" )
-FTNOPT( "-Wglobals", "" )
-FTNOPT( "-Wno-globals", "Disable warnings about inter-procedural problems" )
+ { "-ff66",
+ N_("Program is written in typical FORTRAN 66 dialect") },
+ { "-fno-f66", "" },
+ { "-ff77",
+ N_("Program is written in typical Unix f77 dialect") },
+ { "-fno-f77",
+ N_("Program does not use Unix-f77 dialectal features") },
+ { "-ff90",
+ N_("Program is written in Fortran-90-ish dialect") },
+ { "-fno-f90", "" },
+ { "-fautomatic", "" },
+ { "-fno-automatic",
+ N_("Treat local vars and COMMON blocks as if they were named in SAVE statements") },
+ { "-fdollar-ok",
+ N_("Allow $ in symbol names") },
+ { "-fno-dollar-ok", "" },
+ { "-ff2c", "" },
+ { "-fno-f2c",
+ N_("f2c-compatible code need not be generated") },
+ { "-ff2c-library", "" },
+ { "-fno-f2c-library",
+ N_("Unsupported; do not generate libf2c-calling code") },
+ { "-fflatten-arrays",
+ N_("Unsupported; affects code-generation of arrays") },
+ { "-fno-flatten-arrays", "" },
+ { "-ffree-form",
+ N_("Program is written in Fortran-90-ish free form") },
+ { "-fno-free-form", "" },
+ { "-ffixed-form", "" },
+ { "-fno-fixed-form", "" },
+ { "-fpedantic",
+ N_("Warn about use of (only a few for now) Fortran extensions") },
+ { "-fno-pedantic", "" },
+ { "-fvxt",
+ N_("Program is written in VXT (Digital-like) FORTRAN") },
+ { "-fno-vxt", "" },
+ { "-fno-ugly",
+ N_("Disallow all ugly features") },
+ { "-fugly-args", "" },
+ { "-fno-ugly-args",
+ N_("Hollerith and typeless constants not passed as arguments") },
+ { "-fugly-assign",
+ N_("Allow ordinary copying of ASSIGN'ed vars") },
+ { "-fno-ugly-assign", "" },
+ { "-fugly-assumed",
+ N_("Dummy array dimensioned to (1) is assumed-size") },
+ { "-fno-ugly-assumed", "" },
+ { "-fugly-comma",
+ N_("Trailing comma in procedure call denotes null argument") },
+ { "-fno-ugly-comma", "" },
+ { "-fugly-complex",
+ N_("Allow REAL(Z) and AIMAG(Z) given DOUBLE COMPLEX Z") },
+ { "-fno-ugly-complex", "" },
+ { "-fugly-init", "" },
+ { "-fno-ugly-init",
+ N_("Initialization via DATA and PARAMETER is type-compatible") },
+ { "-fugly-logint",
+ N_("Allow INTEGER and LOGICAL interchangeability") },
+ { "-fno-ugly-logint", "" },
+ { "-fxyzzy",
+ N_("Print internal debugging-related info") },
+ { "-fno-xyzzy", "" },
+ { "-finit-local-zero",
+ N_("Initialize local vars and arrays to zero") },
+ { "-fno-init-local-zero", "" },
+ { "-fbackslash", "" },
+ { "-fno-backslash",
+ N_("Backslashes in character/hollerith constants not special (C-style)") },
+ { "-femulate-complex",
+ N_("Have front end emulate COMPLEX arithmetic to avoid bugs") },
+ { "-fno-emulate-complex", "" },
+ { "-funderscoring", "" },
+ { "-fno-underscoring",
+ N_("Disable the appending of underscores to externals") },
+ { "-fsecond-underscore", "" },
+ { "-fno-second-underscore",
+ N_("Never append a second underscore to externals") },
+ { "-fintrin-case-initcap",
+ N_("Intrinsics spelled as e.g. SqRt") },
+ { "-fintrin-case-upper",
+ N_("Intrinsics in uppercase") },
+ { "-fintrin-case-lower", "" },
+ { "-fintrin-case-any",
+ N_("Intrinsics letters in arbitrary cases") },
+ { "-fmatch-case-initcap",
+ N_("Language keywords spelled as e.g. IOStat") },
+ { "-fmatch-case-upper",
+ N_("Language keywords in uppercase") },
+ { "-fmatch-case-lower", "" },
+ { "-fmatch-case-any",
+ N_("Language keyword letters in arbitrary cases") },
+ { "-fsource-case-upper",
+ N_("Internally convert most source to uppercase") },
+ { "-fsource-case-lower", "" },
+ { "-fsource-case-preserve",
+ N_("Internally preserve source case") },
+ { "-fsymbol-case-initcap",
+ N_("Symbol names spelled in mixed case") },
+ { "-fsymbol-case-upper",
+ N_("Symbol names in uppercase") },
+ { "-fsymbol-case-lower",
+ N_("Symbol names in lowercase") },
+ { "-fsymbol-case-any", "" },
+ { "-fcase-strict-upper",
+ N_("Program written in uppercase") },
+ { "-fcase-strict-lower",
+ N_("Program written in lowercase") },
+ { "-fcase-initcap",
+ N_("Program written in strict mixed-case") },
+ { "-fcase-upper",
+ N_("Compile as if program written in uppercase") },
+ { "-fcase-lower",
+ N_("Compile as if program written in lowercase") },
+ { "-fcase-preserve",
+ N_("Preserve all spelling (case) used in program") },
+ { "-fbadu77-intrinsics-delete",
+ N_("Delete libU77 intrinsics with bad interfaces") },
+ { "-fbadu77-intrinsics-disable",
+ N_("Disable libU77 intrinsics with bad interfaces") },
+ { "-fbadu77-intrinsics-enable", "" },
+ { "-fbadu77-intrinsics-hide",
+ N_("Hide libU77 intrinsics with bad interfaces") },
+ { "-ff2c-intrinsics-delete",
+ N_("Delete non-FORTRAN-77 intrinsics f2c supports") },
+ { "-ff2c-intrinsics-disable",
+ N_("Disable non-FORTRAN-77 intrinsics f2c supports") },
+ { "-ff2c-intrinsics-enable", "" },
+ { "-ff2c-intrinsics-hide",
+ N_("Hide non-FORTRAN-77 intrinsics f2c supports") },
+ { "-ff90-intrinsics-delete",
+ N_("Delete non-FORTRAN-77 intrinsics F90 supports") },
+ { "-ff90-intrinsics-disable",
+ N_("Disable non-FORTRAN-77 intrinsics F90 supports") },
+ { "-ff90-intrinsics-enable", "" },
+ { "-ff90-intrinsics-hide",
+ N_("Hide non-FORTRAN-77 intrinsics F90 supports") },
+ { "-fgnu-intrinsics-delete",
+ N_("Delete non-FORTRAN-77 intrinsics g77 supports") },
+ { "-fgnu-intrinsics-disable",
+ N_("Disable non-FORTRAN 77 intrinsics F90 supports") },
+ { "-fgnu-intrinsics-enable", "" },
+ { "-fgnu-intrinsics-hide",
+ N_("Hide non-FORTRAN 77 intrinsics F90 supports") },
+ { "-fmil-intrinsics-delete",
+ N_("Delete MIL-STD 1753 intrinsics") },
+ { "-fmil-intrinsics-disable",
+ N_("Disable MIL-STD 1753 intrinsics") },
+ { "-fmil-intrinsics-enable", "" },
+ { "-fmil-intrinsics-hide",
+ N_("Hide MIL-STD 1753 intrinsics") },
+ { "-funix-intrinsics-delete",
+ N_("Delete libU77 intrinsics") },
+ { "-funix-intrinsics-disable",
+ N_("Disable libU77 intrinsics") },
+ { "-funix-intrinsics-enable", "" },
+ { "-funix-intrinsics-hide",
+ N_("Hide libU77 intrinsics") },
+ { "-fvxt-intrinsics-delete",
+ N_("Delete non-FORTRAN-77 intrinsics VXT FORTRAN supports") },
+ { "-fvxt-intrinsics-disable",
+ N_("Disable non-FORTRAN-77 intrinsics VXT FORTRAN supports") },
+ { "-fvxt-intrinsics-enable", "" },
+ { "-fvxt-intrinsics-hide",
+ N_("Hide non-FORTRAN-77 intrinsics VXT FORTRAN supports") },
+ { "-fzeros",
+ N_("Treat initial values of 0 like non-zero values") },
+ { "-fno-zeros", "" },
+ { "-fdebug-kludge",
+ N_("Emit special debugging information for COMMON and EQUIVALENCE (disabled)") },
+ { "-fno-debug-kludge", "" },
+ { "-fonetrip",
+ N_("Take at least one trip through each iterative DO loop") },
+ { "-fno-onetrip", "" },
+ { "-fsilent", "" },
+ { "-fno-silent",
+ N_("Print names of program units as they are compiled") },
+ { "-fglobals", "" },
+ { "-fno-globals",
+ N_("Disable fatal diagnostics about inter-procedural problems") },
+ { "-ftypeless-boz",
+ N_("Make prefix-radix non-decimal constants be typeless") },
+ { "-fno-typeless-boz", "" },
+ { "-fbounds-check",
+ N_("Generate code to check subscript and substring bounds") },
+ { "-fno-bounds-check", "" },
+ { "-ffortran-bounds-check",
+ N_("Fortran-specific form of -fbounds-check") },
+ { "-fno-fortran-bounds-check", "" },
+ { "-Wglobals", "" },
+ { "-Wno-globals",
+ N_("Disable warnings about inter-procedural problems") },
/*"-Wimplicit",*/
/*"-Wno-implicit",*/
-FTNOPT( "-Wsurprising", "Warn about constructs with surprising meanings" )
-FTNOPT( "-Wno-surprising", "" )
+ { "-Wsurprising",
+ N_("Warn about constructs with surprising meanings") },
+ { "-Wno-surprising", "" },
/*"-Wall",*/
/* Prefix options. */
-FTNOPT( "-I", "Add a directory for INCLUDE searching" )
-FTNOPT( "-ffixed-line-length-", "Set the maximum line length" )
-
-#undef FTNOPT
+ { "-I",
+ N_("Add a directory for INCLUDE searching") },
+ { "-ffixed-line-length-",
+ N_("Set the maximum line length") },
#endif
diff --git a/contrib/gcc/f/lang-specs.h b/contrib/gcc/f/lang-specs.h
index f37d14d..d6c3a14 100644
--- a/contrib/gcc/f/lang-specs.h
+++ b/contrib/gcc/f/lang-specs.h
@@ -24,87 +24,20 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* This is the contribution to the `default_compilers' array in gcc.c for
g77. */
- {".F", {"@f77-cpp-input"}},
- {".fpp", {"@f77-cpp-input"}},
- {".FPP", {"@f77-cpp-input"}},
+ {".F", "@f77-cpp-input", 0},
+ {".fpp", "@f77-cpp-input", 0},
+ {".FPP", "@f77-cpp-input", 0},
{"@f77-cpp-input",
- /* For f77 we want -traditional to avoid errors with, for
- instance, mismatched '. Also, we avoid unpleasant surprises
- with substitution of names not prefixed by `_' by using %P
- rather than %p (although this isn't consistent with SGI and
- Sun f77, at least) so you test `__unix' rather than `unix'.
- -D_LANGUAGE_FORTRAN is used by some compilers like SGI and
- might as well be in there. */
- {"cpp0 -lang-c %{nostdinc*} %{C} %{v} %{A*} %{I*} %{P} %{$} %I\
- %{C:%{!E:%eGNU C does not support -C without using -E}}\
- %{M} %{MM} %{MD:-MD %b.d} %{MMD:-MMD %b.d} %{MG}\
- %{!no-gcc:-D__GNUC__=%v1 -D__GNUC_MINOR__=%v2}\
- %{ansi:-trigraphs -$ -D__STRICT_ANSI__}\
- %{!undef:%P} -D_LANGUAGE_FORTRAN %{trigraphs} \
- %c %{Os:-D__OPTIMIZE_SIZE__} %{O*:%{!O0:-D__OPTIMIZE__}} -traditional\
- %{ffast-math:-D__FAST_MATH__}\
- %{g*} %{W*} %{w} %{pedantic*} %{H} %{d*} %C %{D*} %{U*} %{i*} %Z\
- %i %{!M:%{!MM:%{!E:%{!pipe:%g.i}}}}%{E:%W{o*}}%{M:%W{o*}}%{MM:%W{o*}} |\n",
- "%{!M:%{!MM:%{!E:f771 %{!pipe:%g.i} %(f771) \
- %{!Q:-quiet} -dumpbase %b.F %{d*} %{m*} %{a*}\
- %{g*} %{O*} %{W*} %{w} %{pedantic*} \
- %{v:-version -fversion} %{pg:-p} %{p} %{f*} %{I*}\
- %{aux-info*} %{Qn:-fno-ident}\
- %{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\
- %{S:%W{o*}%{!o*:-o %b.s}}%{!S:-o %{|!pipe:%g.s}} |\n\
- %{!S:as %a %Y\
- %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O}\
- %{!pipe:%g.s} %A\n }}}}"}},
- {".r", {"@ratfor"}},
+ "tradcpp0 -lang-fortran %(cpp_options) %{!M:%{!MM:%{!E:%{!pipe:%g.f} |\n\
+ f771 %{!pipe:%g.f} %(cc1_options) %{I*} %{!fsyntax-only:%(invoke_as)}}}}", 0},
+ {".r", "@ratfor", 0},
{"@ratfor",
- {"ratfor %{C} %{v}\
- %{C:%{!E:%eGNU C does not support -C without using -E}}\
- %{!E:%{!pipe:-o %g.f}}%{E:%W{o*}} %i |\n",
- "%{!E:f771 %{!pipe:%g.f} %(f771) \
- %{!Q:-quiet} -dumpbase %b.r %{d*} %{m*} %{a*}\
- %{g*} %{O*} %{W*} %{w} %{pedantic*} \
- %{v:-version -fversion} %{pg:-p} %{p} %{f*} %{I*}\
- %{aux-info*} %{Qn:-fno-ident}\
- %{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\
- %{S:%W{o*}%{!o*:-o %b.s}}%{!S:-o %{|!pipe:%g.s}} |\n\
- %{!S:as %a %Y\
- %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O}\
- %{!pipe:%g.s} %A\n }}"}},
- {".f", {"@f77"}},
- {".for", {"@f77"}},
- {".FOR", {"@f77"}},
+ "%{C:%{!E:%eGNU C does not support -C without using -E}}\
+ ratfor %{C} %{v} %i %{E:%W{o*}} %{!E: %{!pipe:-o %g.f} |\n\
+ f771 %{!pipe:%g.f} %(cc1_options) %{I*} %{!fsyntax-only:%(invoke_as)}}", 0},
+ {".f", "@f77", 0},
+ {".for", "@f77", 0},
+ {".FOR", "@f77", 0},
{"@f77",
- {"%{!M:%{!MM:%{!E:f771 %i %(f771) \
- %{!Q:-quiet} -dumpbase %b.f %{d*} %{m*} %{a*}\
- %{g*} %{O*} %{W*} %{w} %{pedantic*}\
- %{v:-version -fversion} %{pg:-p} %{p} %{f*} %{I*}\
- %{aux-info*} %{Qn:-fno-ident}\
- %{pg:%{fomit-frame-pointer:%e-pg and -fomit-frame-pointer are incompatible}}\
- %{S:%W{o*}%{!o*:-o %b.s}}%{!S:-o %{|!pipe:%g.s}} |\n\
- %{!S:as %a %Y\
- %{c:%W{o*}%{!o*:-o %w%b%O}}%{!c:-o %d%w%u%O}\
- %{!pipe:%g.s} %A\n }}}}"}},
- {"@f77-version",
- {"cpp0 -lang-c %{nostdinc*} %{C} %{v} %{A*} %{I*} %{P} %{$} %I \
- %{C:%{!E:%eGNU C does not support -C without using -E}} \
- %{M} %{MM} %{MD:-MD %b.d} %{MMD:-MMD %b.d} %{MG} \
- %{!no-gcc:-D__GNUC__=%v1 -D__GNUC_MINOR__=%v2} \
- %{ansi:-trigraphs -$ -D__STRICT_ANSI__} \
- %{!undef:%P} -D_LANGUAGE_FORTRAN %{trigraphs} \
- %c %{Os:-D__OPTIMIZE_SIZE__} %{O*:%{!O0:-D__OPTIMIZE__}} -traditional \
- %{ffast-math:-D__FAST_MATH__}\
- %{g*} %{W*} %{w} %{pedantic*} %{H} %{d*} %C %{D*} %{U*} %{i*} %Z \
- /dev/null /dev/null \n\
- f771 -fnull-version %(f771) \
- %{!Q:-quiet} -dumpbase g77-version.f %{d*} %{m*} %{a*} \
- %{g*} %{O*} %{W*} %{w} %{pedantic*} \
- -version -fversion %{f*} %{I*} -o %g.s /dev/null \n\
- as %a %Y -o %g%O %g.s %A \n\
- ld %l %X -o %g %g%O %{A} %{d} %{e*} %{m} %{N} %{n} \
- %{r} %{s} %{t} %{u*} %{x} %{z} %{Z} \
- %{!A:%{!nostdlib:%{!nostartfiles:%S}}} \
- %{static:} %{L*} %D -lg2c -lm \
- %{!nostdlib:%{!nodefaultlibs:%G %L %G}} \
- %{!A:%{!nostdlib:%{!nostartfiles:%E}}} \
- %{T*} \n\
- %g \n"}},
+ "%{!M:%{!MM:%{!E:f771 %i %(cc1_options) %{I*}\
+ %{!fsyntax-only:%(invoke_as)}}}}", 0},
diff --git a/contrib/gcc/f/lex.c b/contrib/gcc/f/lex.c
index 3136d40..acbb4d3 100644
--- a/contrib/gcc/f/lex.c
+++ b/contrib/gcc/f/lex.c
@@ -1,5 +1,5 @@
/* Implementation of Fortran lexer
- Copyright (C) 1995-1998 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1996, 1997, 1998, 2001 Free Software Foundation, Inc.
Contributed by James Craig Burley.
This file is part of GNU Fortran.
@@ -26,20 +26,12 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "lex.h"
#include "malloc.h"
#include "src.h"
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
-#include "flags.j"
-#include "input.j"
-#include "toplev.j"
-#include "tree.j"
-#include "output.j" /* Must follow tree.j so TREE_CODE is defined! */
-#endif
-
-#ifdef DWARF_DEBUGGING_INFO
-void dwarfout_resume_previous_source_file (register unsigned);
-void dwarfout_start_new_source_file (register char *);
-void dwarfout_define (register unsigned, register char *);
-void dwarfout_undef (register unsigned, register char *);
-#endif DWARF_DEBUGGING_INFO
+#include "debug.h"
+#include "flags.h"
+#include "input.h"
+#include "toplev.h"
+#include "output.h"
+#include "ggc.h"
static void ffelex_append_to_token_ (char c);
static int ffelex_backslash_ (int c, ffewhereColumnNumber col);
@@ -51,10 +43,8 @@ static void ffelex_bad_2_ (ffebad errnum, ffewhereLineNumber ln0,
static void ffelex_bad_here_ (int num, ffewhereLineNumber ln0,
ffewhereColumnNumber cn0);
static void ffelex_finish_statement_ (void);
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static int ffelex_get_directive_line_ (char **text, FILE *finput);
static int ffelex_hash_ (FILE *f);
-#endif
static ffewhereColumnNumber ffelex_image_char_ (int c,
ffewhereColumnNumber col);
static void ffelex_include_ (void);
@@ -358,7 +348,7 @@ ffelex_backslash_ (int c, ffewhereColumnNumber col)
m[0] = c;
m[1] = '\0';
- ffebad_start_msg_lex ("Non-ANSI-C-standard escape sequence `\\%A' at %0",
+ ffebad_start_msg_lex ("Non-ISO-C-standard escape sequence `\\%A' at %0",
FFEBAD_severityPEDANTIC);
ffelex_bad_here_ (0, line, column);
ffebad_string (m);
@@ -404,17 +394,9 @@ ffelex_backslash_ (int c, ffewhereColumnNumber col)
return c;
case 2:
- if ((c >= 'a' && c <= 'f')
- || (c >= 'A' && c <= 'F')
- || (c >= '0' && c <= '9'))
+ if (ISXDIGIT (c))
{
- code *= 16;
- if (c >= 'a' && c <= 'f')
- code += c - 'a' + 10;
- if (c >= 'A' && c <= 'F')
- code += c - 'A' + 10;
- if (c >= '0' && c <= '9')
- code += c - '0';
+ code = (code * 16) + hex_value (c);
if (code != 0 || count != 0)
{
if (count == 0)
@@ -567,7 +549,6 @@ ffelex_bad_here_ (int n, ffewhereLineNumber ln0,
ffewhere_column_kill (wc0);
}
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static int
ffelex_getc_ (FILE *finput)
{
@@ -584,8 +565,6 @@ ffelex_getc_ (FILE *finput)
return getc (finput);
}
-#endif
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static int
ffelex_cfebackslash_ (int *use_d, int *d, FILE *finput)
{
@@ -612,21 +591,13 @@ ffelex_cfebackslash_ (int *use_d, int *d, FILE *finput)
while (1)
{
c = getc (finput);
- if (!(c >= 'a' && c <= 'f')
- && !(c >= 'A' && c <= 'F')
- && !(c >= '0' && c <= '9'))
+ if (! ISXDIGIT (c))
{
*use_d = 1;
*d = c;
break;
}
- code *= 16;
- if (c >= 'a' && c <= 'f')
- code += c - 'a' + 10;
- if (c >= 'A' && c <= 'F')
- code += c - 'A' + 10;
- if (c >= '0' && c <= '9')
- code += c - '0';
+ code = (code * 16) + hex_value (c);
if (code != 0 || count != 0)
{
if (count == 0)
@@ -721,7 +692,7 @@ ffelex_cfebackslash_ (int *use_d, int *d, FILE *finput)
/* `\%' is used to prevent SCCS from getting confused. */
case '%':
if (pedantic)
- pedwarn ("non-ANSI escape sequence `\\%c'", c);
+ pedwarn ("non-ISO escape sequence `\\%c'", c);
return c;
}
if (c >= 040 && c < 0177)
@@ -731,10 +702,8 @@ ffelex_cfebackslash_ (int *use_d, int *d, FILE *finput)
return c;
}
-#endif
/* A miniature version of the C front-end lexer. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static int
ffelex_cfelex_ (ffelexToken *xtoken, FILE *finput, int c)
{
@@ -806,7 +775,7 @@ ffelex_cfelex_ (ffelexToken *xtoken, FILE *finput, int c)
case EOF:
case '\n':
- fatal ("Badly formed directive -- no closing quote");
+ error ("badly formed directive -- no closing quote");
done = TRUE;
break;
@@ -851,11 +820,9 @@ ffelex_cfelex_ (ffelexToken *xtoken, FILE *finput, int c)
*xtoken = token;
return c;
}
-#endif
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static void
-ffelex_file_pop_ (char *input_filename)
+ffelex_file_pop_ (const char *input_filename)
{
if (input_file_stack->next)
{
@@ -863,11 +830,7 @@ ffelex_file_pop_ (char *input_filename)
input_file_stack = p->next;
free (p);
input_file_stack_tick++;
-#ifdef DWARF_DEBUGGING_INFO
- if (debug_info_level == DINFO_LEVEL_VERBOSE
- && write_symbols == DWARF_DEBUG)
- dwarfout_resume_previous_source_file (input_file_stack->line);
-#endif /* DWARF_DEBUGGING_INFO */
+ (*debug_hooks->end_source_file) (input_file_stack->line);
}
else
error ("#-lines for entering and leaving files don't match");
@@ -878,10 +841,8 @@ ffelex_file_pop_ (char *input_filename)
input_file_stack->name = input_filename;
}
-#endif
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static void
-ffelex_file_push_ (int old_lineno, char *input_filename)
+ffelex_file_push_ (int old_lineno, const char *input_filename)
{
struct file_stack *p
= (struct file_stack *) xmalloc (sizeof (struct file_stack));
@@ -891,18 +852,14 @@ ffelex_file_push_ (int old_lineno, char *input_filename)
p->name = input_filename;
input_file_stack = p;
input_file_stack_tick++;
-#ifdef DWARF_DEBUGGING_INFO
- if (debug_info_level == DINFO_LEVEL_VERBOSE
- && write_symbols == DWARF_DEBUG)
- dwarfout_start_new_source_file (input_filename);
-#endif /* DWARF_DEBUGGING_INFO */
+
+ (*debug_hooks->start_source_file) (0, input_filename);
/* Now that we've pushed or popped the input stack,
update the name in the top element. */
if (input_file_stack)
input_file_stack->name = input_filename;
}
-#endif
/* Prepare to finish a statement-in-progress by sending the current
token, if any, then setting up EOS as the current token with the
@@ -993,7 +950,6 @@ ffelex_finish_statement_ ()
/* Copied from gcc/c-common.c get_directive_line. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static int
ffelex_get_directive_line_ (char **text, FILE *finput)
{
@@ -1039,7 +995,7 @@ ffelex_get_directive_line_ (char **text, FILE *finput)
|| c == EOF)
{
if (looking_for != 0)
- fatal ("Bad directive -- missing close-quote");
+ error ("bad directive -- missing close-quote");
*p++ = '\0';
*text = directive_buffer;
@@ -1065,7 +1021,6 @@ ffelex_get_directive_line_ (char **text, FILE *finput)
char_escaped = (c == '\\' && ! char_escaped);
}
}
-#endif
/* Handle # directives that make it through (or are generated by) the
preprocessor. As much as reasonably possible, emulate the behavior
@@ -1076,8 +1031,6 @@ ffelex_get_directive_line_ (char **text, FILE *finput)
Returns the next character unhandled, which is always newline or EOF. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
-
#if defined HANDLE_PRAGMA
/* Local versions of these macros, that can be passed as function pointers. */
static int
@@ -1110,7 +1063,7 @@ ffelex_hash_ (FILE *finput)
it and ignore it; otherwise, ignore the line, with an error
if the word isn't `pragma', `ident', `define', or `undef'. */
- if ((c >= 'a' && c <= 'z') || (c >= 'A' && c <= 'Z'))
+ if (ISALPHA(c))
{
if (c == 'p')
{
@@ -1126,20 +1079,21 @@ ffelex_hash_ (FILE *finput)
static char buffer [128];
char * buff = buffer;
- /* Read the pragma name into a buffer. */
- while (isspace (c = getc (finput)))
+ /* Read the pragma name into a buffer.
+ ISSPACE() may evaluate its argument more than once! */
+ while (((c = getc (finput)), ISSPACE(c)))
continue;
-
+
do
{
* buff ++ = c;
c = getc (finput);
}
- while (c != EOF && ! isspace (c) && c != '\n'
+ while (c != EOF && ! ISSPACE (c) && c != '\n'
&& buff < buffer + 128);
pragma_ungetc (c);
-
+
* -- buff = 0;
#ifdef HANDLE_PRAGMA
if (HANDLE_PRAGMA (pragma_getc, pragma_ungetc, buffer))
@@ -1175,11 +1129,8 @@ ffelex_hash_ (FILE *finput)
c = ffelex_get_directive_line_ (&text, finput);
-#ifdef DWARF_DEBUGGING_INFO
- if ((debug_info_level == DINFO_LEVEL_VERBOSE)
- && (write_symbols == DWARF_DEBUG))
- dwarfout_define (lineno, text);
-#endif /* DWARF_DEBUGGING_INFO */
+ if (debug_info_level == DINFO_LEVEL_VERBOSE)
+ (*debug_hooks->define) (lineno, text);
goto skipline;
}
@@ -1197,11 +1148,8 @@ ffelex_hash_ (FILE *finput)
c = ffelex_get_directive_line_ (&text, finput);
-#ifdef DWARF_DEBUGGING_INFO
- if ((debug_info_level == DINFO_LEVEL_VERBOSE)
- && (write_symbols == DWARF_DEBUG))
- dwarfout_undef (lineno, text);
-#endif /* DWARF_DEBUGGING_INFO */
+ if (debug_info_level == DINFO_LEVEL_VERBOSE)
+ (*debug_hooks->undef) (lineno, text);
goto skipline;
}
@@ -1222,7 +1170,7 @@ ffelex_hash_ (FILE *finput)
&& getc (finput) == 't'
&& ((c = getc (finput)) == ' ' || c == '\t'))
{
- /* #ident. The pedantic warning is now in cccp.c. */
+ /* #ident. The pedantic warning is now in cpp. */
/* Here we have just seen `#ident '.
A string constant should follow. */
@@ -1280,7 +1228,7 @@ ffelex_hash_ (FILE *finput)
&& (ffelex_token_type (token) == FFELEX_typeNUMBER))
{
int old_lineno = lineno;
- char *old_input_filename = input_filename;
+ const char *old_input_filename = input_filename;
ffewhereFile wf;
/* subtract one, because it is the following line that
@@ -1319,7 +1267,7 @@ ffelex_hash_ (FILE *finput)
lineno = l;
if (ffelex_kludge_flag_)
- input_filename = ffelex_token_text (token);
+ input_filename = ggc_strdup (ffelex_token_text (token));
else
{
wf = ffewhere_file_new (ffelex_token_text (token),
@@ -1368,7 +1316,7 @@ ffelex_hash_ (FILE *finput)
{
lineno = 1;
input_filename = old_input_filename;
- fatal ("Use `#line ...' instead of `# ...' in first line");
+ error ("use `#line ...' instead of `# ...' in first line");
}
if (num == 1)
@@ -1412,7 +1360,13 @@ ffelex_hash_ (FILE *finput)
{
lineno = 1;
input_filename = old_input_filename;
- fatal ("Use `#line ...' instead of `# ...' in first line");
+ error ("use `#line ...' instead of `# ...' in first line");
+ }
+ if (c == '\n' || c == EOF)
+ {
+ if (token != NULL && !ffelex_kludge_flag_)
+ ffelex_token_kill (token);
+ return c;
}
}
else
@@ -1426,7 +1380,6 @@ ffelex_hash_ (FILE *finput)
;
return c;
}
-#endif /* FFECOM_targetCURRENT == FFECOM_targetGCC */
/* "Image" a character onto the card image, return incremented column number.
@@ -1550,10 +1503,8 @@ ffelex_include_ ()
ffewhereLineNumber linecount_current = ffelex_linecount_current_;
ffewhereLineNumber linecount_offset
= ffewhere_line_filelinenum (current_wl);
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
int old_lineno = lineno;
- char *old_input_filename = input_filename;
-#endif
+ const char *old_input_filename = input_filename;
if (card_length != 0)
{
@@ -1571,18 +1522,14 @@ ffelex_include_ ()
ffewhere_file_set (include_wherefile, TRUE, 0);
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
ffelex_file_push_ (old_lineno, ffewhere_file_name (include_wherefile));
-#endif /* FFECOM_targetCURRENT == FFECOM_targetGCC */
if (ffelex_include_free_form_)
ffelex_file_free (include_wherefile, include_file);
else
ffelex_file_fixed (include_wherefile, include_file);
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
ffelex_file_pop_ (ffewhere_file_name (current_wf));
-#endif /* FFECOM_targetCURRENT == FFECOM_targetGCC */
ffewhere_file_set (current_wf, TRUE, linecount_offset);
@@ -1598,10 +1545,8 @@ ffelex_include_ ()
}
ffelex_card_image_[card_length] = '\0';
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
input_filename = old_input_filename;
lineno = old_lineno;
-#endif
ffelex_linecount_current_ = linecount_current;
ffelex_current_wf_ = current_wf;
ffelex_final_nontab_column_ = final_nontab_column;
@@ -1659,9 +1604,7 @@ ffelex_next_line_ ()
{
ffelex_linecount_current_ = ffelex_linecount_next_;
++ffelex_linecount_next_;
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
++lineno;
-#endif
}
static void
@@ -1754,7 +1697,7 @@ ffelex_token_new_ ()
static const char *
ffelex_type_string_ (ffelexType type)
{
- static const char *types[] = {
+ static const char *const types[] = {
"FFELEX_typeNONE",
"FFELEX_typeCOMMENT",
"FFELEX_typeEOS",
@@ -1877,10 +1820,8 @@ ffelex_file_fixed (ffewhereFile wf, FILE *f)
assert (ffelex_handler_ != NULL);
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
lineno = 0;
input_filename = ffewhere_file_name (wf);
-#endif
ffelex_current_wf_ = wf;
disallow_continuation_line = TRUE;
ignore_disallowed_continuation = FALSE;
@@ -1891,22 +1832,6 @@ ffelex_file_fixed (ffewhereFile wf, FILE *f)
ffelex_current_wc_ = ffewhere_column_unknown ();
latest_char_in_file = '\n';
- if (ffe_is_null_version ())
- {
- /* Just substitute a "program" directly here. */
-
- char line[] = " call g77__fvers;call g77__ivers;call g77__uvers;end";
- char *p;
-
- column = 0;
- for (p = &line[0]; *p != '\0'; ++p)
- column = ffelex_image_char_ (*p, column);
-
- c = EOF;
-
- goto have_line; /* :::::::::::::::::::: */
- }
-
goto first_line; /* :::::::::::::::::::: */
/* Come here to get a new line. */
@@ -1969,10 +1894,8 @@ ffelex_file_fixed (ffewhereFile wf, FILE *f)
while ((c != '\n') && (c != EOF))
c = getc (f);
}
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
else if (lextype == FFELEX_typeHASH)
c = ffelex_hash_ (f);
-#endif
else if (lextype == FFELEX_typeSLASH)
{
/* SIDE-EFFECT ABOVE HAS HAPPENED. */
@@ -2055,8 +1978,6 @@ ffelex_file_fixed (ffewhereFile wf, FILE *f)
column = ffelex_final_nontab_column_;
}
- have_line: /* :::::::::::::::::::: */
-
ffelex_card_image_[column] = '\0';
ffelex_card_length_ = column;
@@ -3089,10 +3010,8 @@ ffelex_file_free (ffewhereFile wf, FILE *f)
assert (ffelex_handler_ != NULL);
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
lineno = 0;
input_filename = ffewhere_file_name (wf);
-#endif
ffelex_current_wf_ = wf;
continuation_line = FALSE;
ffelex_token_->type = FFELEX_typeNONE;
@@ -3130,14 +3049,7 @@ ffelex_file_free (ffewhereFile wf, FILE *f)
|| (c == '#'))
{
if (c == '#')
- {
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
- c = ffelex_hash_ (f);
-#else
- /* Don't skip over # line after all. */
- break;
-#endif
- }
+ c = ffelex_hash_ (f);
comment_line: /* :::::::::::::::::::: */
@@ -3980,17 +3892,16 @@ ffelex_file_free (ffewhereFile wf, FILE *f)
/* See the code in com.c that calls this to understand why. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
void
ffelex_hash_kludge (FILE *finput)
{
/* If you change this constant string, you have to change whatever
code might thus be affected by it in terms of having to use
ffelex_getc_() instead of getc() in the lexers and _hash_. */
- static char match[] = "# 1 \"";
+ static const char match[] = "# 1 \"";
static int kludge[ARRAY_SIZE (match) + 1];
int c;
- char *p;
+ const char *p;
int *q;
/* Read chars as long as they match the target string.
@@ -4017,7 +3928,6 @@ ffelex_hash_kludge (FILE *finput)
}
}
-#endif
void
ffelex_init_1 ()
{
diff --git a/contrib/gcc/f/lex.h b/contrib/gcc/f/lex.h
index c82a9c8..04dfbed 100644
--- a/contrib/gcc/f/lex.h
+++ b/contrib/gcc/f/lex.h
@@ -29,8 +29,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* Allow multiple inclusion to work. */
-#ifndef _H_f_lex
-#define _H_f_lex
+#ifndef GCC_F_LEX_H
+#define GCC_F_LEX_H
/* Simple definitions and enumerations. */
@@ -171,8 +171,7 @@ ffelexToken ffelex_token_use (ffelexToken t);
#define ffelex_init_2()
#define ffelex_init_3()
#define ffelex_init_4()
-#define ffelex_is_firstnamechar(c) \
- (ISALPHA ((c)) || ((c) == '_'))
+#define ffelex_is_firstnamechar(c) ISIDST (c)
#define ffelex_terminate_0()
#define ffelex_terminate_1()
#define ffelex_terminate_2()
@@ -198,4 +197,4 @@ ffelexToken ffelex_token_use (ffelexToken t);
/* End of #include file. */
-#endif
+#endif /* ! GCC_F_LEX_H */
diff --git a/contrib/gcc/f/malloc.c b/contrib/gcc/f/malloc.c
index b0d31af..77e2e4a 100644
--- a/contrib/gcc/f/malloc.c
+++ b/contrib/gcc/f/malloc.c
@@ -70,7 +70,7 @@ struct _malloc_root_ malloc_root_
static void *malloc_reserve_ = NULL; /* For crashes. */
#if MALLOC_DEBUG
-static const char *malloc_types_[] =
+static const char *const malloc_types_[] =
{"KS", "KSR", "NF", "NFR", "US", "USR"};
#endif
@@ -140,8 +140,7 @@ malloc_init ()
{
if (malloc_reserve_ != NULL)
return;
- malloc_reserve_ = malloc (20 * 1024); /* In case of crash, free this first. */
- assert (malloc_reserve_ != NULL);
+ malloc_reserve_ = xmalloc (20 * 1024); /* In case of crash, free this first. */
}
/* malloc_pool_display -- Display a pool
diff --git a/contrib/gcc/f/malloc.h b/contrib/gcc/f/malloc.h
index d9efdf2..1c82720 100644
--- a/contrib/gcc/f/malloc.h
+++ b/contrib/gcc/f/malloc.h
@@ -27,8 +27,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* Allow multiple inclusion to work. */
-#ifndef _H_f_malloc
-#define _H_f_malloc
+#ifndef GCC_F_MALLOC_H
+#define GCC_F_MALLOC_H
#ifndef MALLOC_DEBUG
#define MALLOC_DEBUG 0 /* 1 means check caller's use of this module. */
@@ -180,4 +180,4 @@ void malloc_verify_inpool_ (mallocPool pool, mallocType_ type, void *ptr,
/* End of #include file. */
-#endif
+#endif /* ! GCC_F_MALLOC_H */
diff --git a/contrib/gcc/f/name.h b/contrib/gcc/f/name.h
index 6c3499f..4b18805 100644
--- a/contrib/gcc/f/name.h
+++ b/contrib/gcc/f/name.h
@@ -27,8 +27,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* Allow multiple inclusion to work. */
-#ifndef _H_f_name
-#define _H_f_name
+#ifndef GCC_F_NAME_H
+#define GCC_F_NAME_H
/* Simple definitions and enumerations. */
@@ -106,4 +106,4 @@ ffenameSpace ffename_space_new (mallocPool pool);
/* End of #include file. */
-#endif
+#endif /* ! GCC_F_NAME_H */
diff --git a/contrib/gcc/f/news.texi b/contrib/gcc/f/news.texi
index a4b6d68..55341b3 100644
--- a/contrib/gcc/f/news.texi
+++ b/contrib/gcc/f/news.texi
@@ -1,4 +1,4 @@
-@c Copyright (C) 1995-1999 Free Software Foundation, Inc.
+@c Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc.
@c This is part of the G77 manual.
@c For copying conditions, see the file g77.texi.
@@ -7,9 +7,9 @@
@c Keep this the same as the dates above, since it's used
@c in the standalone derivations of this file (e.g. NEWS).
-@set copyrights-news 1995-1999
+@set copyrights-news 1995,1996,1997,1998,1999,2000,2001
-@set last-update-news 1999-07-08
+@set last-update-news 2001-11-20
@include root.texi
@@ -40,15 +40,15 @@ this copyright notice and permission notice.
@cindex changes, user-visible
@cindex user-visible changes
-This chapter describes changes to @code{g77} that are visible
+This chapter describes changes to @command{g77} that are visible
to the programmers who actually write and maintain Fortran
-code they compile with @code{g77}.
+code they compile with @command{g77}.
Information on changes to installation procedures,
changes to the documentation, and bug fixes is
not provided here, unless it is likely to affect how
-users use @code{g77}.
+users use @command{g77}.
@xref{News,,News About GNU Fortran}, for information on
-such changes to @code{g77}.
+such changes to @command{g77}.
@end ifset
@ifclear USERVISONLY
@@ -93,11 +93,12 @@ This order is not strict---for example, some items
involve a combination of these elements.
@end ifclear
-Note that two variants of @code{g77} are tracked below.
+Note that two variants of @command{g77} are tracked below.
The @code{egcs} variant is described vis-a-vis
previous versions of @code{egcs} and/or
-an official FSF version,
-as appropriate.
+an official FSF version, as appropriate.
+Note that all such variants are obsolete @emph{as of July 1999} -
+the information is retained here only for its historical value.
Therefore, @code{egcs} versions sometimes have multiple listings
to help clarify how they differ from other versions,
@@ -106,31 +107,31 @@ of what a particular @code{egcs} version contains
somewhat more difficult.
@ifset DOC-G77
-For information on bugs in the @value{which-g77} version of @code{g77},
+For information on bugs in the @value{which-g77} version of @command{g77},
see @ref{Known Bugs,,Known Bugs In GNU Fortran}.
@end ifset
@ifset DOC-BUGS
-For information on bugs in the @value{which-g77} version of @code{g77},
+For information on bugs in the @value{which-g77} version of @command{g77},
see @file{@value{path-g77}/BUGS}.
@end ifset
@ifset DEVELOPMENT
@emph{Warning:} The information below is still under development,
-and might not accurately reflect the @code{g77} code base
+and might not accurately reflect the @command{g77} code base
of which it is a part.
Efforts are made to keep it somewhat up-to-date,
but they are particularly concentrated
on any version of this information
-that is distributed as part of a @emph{released} @code{g77}.
+that is distributed as part of a @emph{released} @command{g77}.
In particular, while this information is intended to apply to
-the @value{which-g77} version of @code{g77},
+the @value{which-g77} version of @command{g77},
only an official @emph{release} of that version
is expected to contain documentation that is
-most consistent with the @code{g77} product in that version.
+most consistent with the @command{g77} product in that version.
-Nevertheless, information on @emph{previous} releases of @code{g77}, below,
+Nevertheless, information on @emph{previous} releases of @command{g77}, below,
is likely to be more up-to-date and accurate
than the equivalent information that accompanied
those releases,
@@ -138,24 +139,132 @@ assuming the last-updated date of the information below
is later than the dates of those releases.
That's due to attempts to keep this development version
-of news about previous @code{g77} versions up-to-date.
+of news about previous @command{g77} versions up-to-date.
@end ifset
@ifclear USERVISONLY
An online, ``live'' version of this document
(derived directly from the mainline, development version
-of @code{g77} within @code{egcs})
+of @command{g77} within @command{gcc})
is available at
@uref{http://www.gnu.org/software/gcc/onlinedocs/g77_news.html}.
@end ifclear
The following information was last updated on @value{last-update-news}:
+@heading In development, 0.5.27, @code{GCC} 3.1 versus @code{GCC} 3.0:
+@itemize @bullet
+@item
+@command{g77} now has its man page generated from the texinfo documentation,
+to guarantee that it remains up to date.
+
+@item
+@command{g77} used to reject the following program on 32-bit targets:
+@smallexample
+PROGRAM PROG
+DIMENSION A(140 000 000)
+END
+@end smallexample
+with the message:
+@smallexample
+prog.f: In program `prog':
+prog.f:2:
+ DIMENSION A(140 000 000)
+ ^
+Array `a' at (^) is too large to handle
+@end smallexample
+because 140 000 000 reals is larger than the largest bit-extent that can be
+expressed in 32 bits. However, bit-sizes never play a role after offsets
+have been converted to byte addresses. Therefore this check has been removed.
+Note: On GNU/Linux systems one has to compile programs that occupy more
+than 1 Gbyte statically, i.e.@: @code{g77 -static ...}.
+
+@item
+Based on work done by Juergen Pfeifer (@email{juergen.pfeifer@@gmx.net})
+libf2c is now a shared library. One can still link in all objects with
+the program by specifying the @option{-static} option.
+
+@item
+Robert Anderson (@email{rwa@@alumni.princeton.edu}) thought up a two
+line change that enables g77 to compile such code as:
+@smallexample
+SUBROUTINE SUB(A, N)
+DIMENSION N(2)
+DIMENSION A(N(1),N(2))
+A(1,1) = 1.
+END
+@end smallexample
+Note the use of array elements in the bounds of the adjustable array A.
+
+@item
+George Helffrich (@email{george@@geo.titech.ac.jp}) implemented a change
+in substring index checking (when specifying @option{-fbounds-check})
+that permits the use of zero length substrings of the form
+@code{string(1:0)}.
+
+@item
+Based on code developed by Pedro Vazquez (@email{vazquez@@penelope.iqm.unicamp.br}),
+the @code{libf2c} library is now able to read and write files larger than
+2 Gbyte on 32-bit target machines, if the operating system supports this.
+@end itemize
+
+@heading In 0.5.26, @code{GCC} 3.0 versus @code{GCC} 2.95:
+@itemize @bullet
+@item
+When a REWIND was issued after a WRITE statement on an unformatted
+file, the implicit truncation was performed by copying the truncated
+file to /tmp and copying the result back. This has been fixed by using
+the @code{ftruncate} OS function. Thanks go to the GAMESS developers
+for bringing this to our attention.
+
+@item
+Using options @option{-g}, @option{-ggdb} or @option{-gdwarf[-2]} (where
+appropriate for your target) now also enables debugging information
+for COMMON BLOCK and EQUIVALENCE items to be emitted.
+Thanks go to Andrew Vaught (@email{andy@@xena.eas.asu.edu}) and
+George Helffrich (@email{george@@geology.bristol.ac.uk}) for
+fixing this longstanding problem.
+
+@item
+It is not necessary anymore to use the option @option{-femulate-complex}
+to compile Fortran code using COMPLEX arithmetic, even on 64-bit machines
+(like the Alpha). This will improve code generation.
+
+@item
+INTRINSIC arithmetic functions are now treated as routines that do not
+depend on anything but their argument(s). This enables further instruction
+scheduling, because it is known that they cannot read or modify arbitrary
+locations.
+
+@ifclear USERVISONLY
+@item
+Upgrade to @code{libf2c} as of 2000-12-05.
+
+This fixes a bug where a namelist containing initialization of LOGICAL
+items and a variable starting with T or F would be read incorrectly.
+
+@item
+The @code{TtyNam} intrinsics now set @var{Name} to all spaces (at run time)
+if the system has no @code{ttyname} implementation available.
+
+@item
+Upgrade to @code{libf2c} as of 1999-06-28.
+
+This fixes a bug whereby
+input to a @code{NAMELIST} read involving a repeat count,
+such as @samp{K(5)=10*3},
+was not properly handled by @code{libf2c}.
+The first item was written to @samp{K(5)},
+but the remaining nine were written elsewhere (still within the array),
+not necessarily starting at @samp{K(6)}.
+@end ifclear
+@end itemize
+
@heading In 0.5.25, @code{GCC} 2.95 (@code{EGCS} 1.2) versus @code{EGCS} 1.1.2:
@itemize @bullet
@ifclear USERVISONLY
@item
-@code{g77} no longer generates bad code for assignments,
+@command{g77} no longer generates bad code for assignments,
or other conversions,
of @code{REAL} or @code{COMPLEX} constant expressions
to type @code{INTEGER(KIND=2)}
@@ -166,7 +275,7 @@ For example, @samp{INTEGER*8 J; J = 4E10} now works as documented.
@ifclear USERVISONLY
@item
-@code{g77} no longer truncates @code{INTEGER(KIND=2)}
+@command{g77} no longer truncates @code{INTEGER(KIND=2)}
(usually @code{INTEGER*8})
subscript expressions when evaluating array references
on systems with pointers widers than @code{INTEGER(KIND=1)}
@@ -175,7 +284,7 @@ on systems with pointers widers than @code{INTEGER(KIND=1)}
@ifclear USERVISONLY
@item
-@code{g77} no longer generates bad code
+@command{g77} no longer generates bad code
for an assignment to a @code{COMPLEX} variable or array
that partially overlaps one or more of the sources
of the same assignment
@@ -216,7 +325,7 @@ on big-endian systems.
@ifclear USERVISONLY
@item
-Fix @code{g77} so it no longer crashes when compiling
+Fix @command{g77} so it no longer crashes when compiling
I/O statements using keywords that define @code{INTEGER} values,
such as @samp{IOSTAT=@var{j}},
where @var{j} is other than default @code{INTEGER}
@@ -226,34 +335,34 @@ Instead, it issues a diagnostic.
@ifclear USERVISONLY
@item
-Fix @code{g77} so it properly handles @samp{DATA A/@var{rpt}*@var{val}/},
+Fix @command{g77} so it properly handles @samp{DATA A/@var{rpt}*@var{val}/},
where @var{rpt} is not default @code{INTEGER}, such as @code{INTEGER*2},
instead of producing a spurious diagnostic.
Also fix @samp{DATA (A(I),I=1,N)},
where @samp{N} is not default @code{INTEGER}
-to work instead of crashing @code{g77}.
+to work instead of crashing @command{g77}.
@end ifclear
@ifclear USERVISONLY
@item
-The @samp{-ax} option is now obeyed when compiling Fortran programs.
+The @option{-ax} option is now obeyed when compiling Fortran programs.
(It is passed to the @file{f771} driver.)
@end ifclear
@item
-The new @samp{-fbounds-check} option
-causes @code{g77} to compile run-time bounds checks
+The new @option{-fbounds-check} option
+causes @command{g77} to compile run-time bounds checks
of array subscripts, as well as of substring start and end points.
@item
@code{libg2c} now supports building as multilibbed library,
which provides better support for systems
-that require options such as @samp{-mieee}
+that require options such as @option{-mieee}
to work properly.
@item
Source file names with the suffixes @samp{.FOR} and @samp{.FPP}
-now are recognized by @code{g77}
+now are recognized by @command{g77}
as if they ended in @samp{.for} and @samp{.fpp}, respectively.
@item
@@ -267,7 +376,7 @@ making these consistent with the other subroutine forms
of @code{libU77} intrinsics.
@item
-@code{g77} now warns about a reference to an intrinsic
+@command{g77} now warns about a reference to an intrinsic
that has an interface that is not Year 2000 (Y2K) compliant.
Also, @code{libg2c} has been changed to increase the likelihood
of catching references to the implementations of these intrinsics
@@ -280,13 +389,13 @@ using the @code{EXTERNAL} mechanism
@ifclear USERVISONLY
@item
-@code{g77} now warns about a reference to a function
+@command{g77} now warns about a reference to a function
when the corresponding @emph{subsequent} function program unit
disagrees with the reference concerning the type of the function.
@end ifclear
@item
-@samp{-fno-emulate-complex} is now the default option.
+@option{-fno-emulate-complex} is now the default option.
This should result in improved performance
of code that uses the @code{COMPLEX} data type.
@@ -294,35 +403,35 @@ of code that uses the @code{COMPLEX} data type.
@cindex double-precision performance
@cindex -malign-double
@item
-The @samp{-malign-double} option
+The @option{-malign-double} option
now reliably aligns @emph{all} double-precision variables and arrays
on Intel x86 targets.
@ifclear USERVISONLY
@item
-Even without the @samp{-malign-double} option,
-@code{g77} reliably aligns local double-precision variables
+Even without the @option{-malign-double} option,
+@command{g77} reliably aligns local double-precision variables
that are not in @code{EQUIVALENCE} areas
and not @code{SAVE}'d.
@end ifclear
@ifclear USERVISONLY
@item
-@code{g77} now open-codes (``inlines'') division of @code{COMPLEX} operands
+@command{g77} now open-codes (``inlines'') division of @code{COMPLEX} operands
instead of generating a run-time call to
the @code{libf2c} routines @code{c_div} or @code{z_div},
-unless the @samp{-Os} option is specified.
+unless the @option{-Os} option is specified.
@end ifclear
@item
-@code{g77} no longer generates code to maintain @code{errno},
+@command{g77} no longer generates code to maintain @code{errno},
a C-language concept,
when performing operations such as the @code{SqRt} intrinsic.
@ifclear USERVISONLY
@item
-@code{g77} developers can temporarily use
-the @samp{-fflatten-arrays} option
+@command{g77} developers can temporarily use
+the @option{-fflatten-arrays} option
to compare how the compiler handles code generation
using C-like constructs as compared to the
Fortran-like method constructs normally used.
@@ -330,17 +439,17 @@ Fortran-like method constructs normally used.
@ifclear USERVISONLY
@item
-A substantial portion of the @code{g77} front end's code-generation component
+A substantial portion of the @command{g77} front end's code-generation component
was rewritten.
It now generates code using facilities more robustly supported
-by the @code{gcc} back end.
+by the @command{gcc} back end.
One effect of this rewrite is that some codes no longer produce
a spurious ``label @var{lab} used before containing binding contour''
message.
@end ifclear
@item
-Support for the @samp{-fugly} option has been removed.
+Support for the @option{-fugly} option has been removed.
@ifclear USERVISONLY
@item
@@ -357,12 +466,12 @@ Upgrade to @code{libf2c} as of 1999-05-10.
@heading In 0.5.24 versus 0.5.23:
-There is no @code{g77} version 0.5.24 at this time,
+There is no @command{g77} version 0.5.24 at this time,
or planned.
0.5.24 is the version number designated for bug fixes and,
perhaps, some new features added,
to 0.5.23.
-Version 0.5.23 requires @code{gcc} 2.8.1,
+Version 0.5.23 requires @command{gcc} 2.8.1,
as 0.5.24 was planned to require.
Due to @code{EGCS} becoming @code{GCC}
@@ -371,14 +480,14 @@ and @code{EGCS} 1.2 becoming officially designated @code{GCC} 2.95,
there seems to be no need for an actual 0.5.24 release.
To reduce the confusion already resulting from use of 0.5.24
-to designate @code{g77} versions within @code{EGCS} versions 1.0 and 1.1,
-as well as in versions of @code{g77} documentation and notices
+to designate @command{g77} versions within @code{EGCS} versions 1.0 and 1.1,
+as well as in versions of @command{g77} documentation and notices
during that period,
-``mainline'' @code{g77} version numbering resumes
+``mainline'' @command{g77} version numbering resumes
at 0.5.25 with @code{GCC} 2.95 (@code{EGCS} 1.2),
skipping over 0.5.24 as a placeholder version number.
-To repeat, there is no @code{g77} 0.5.24, but there is now a 0.5.25.
+To repeat, there is no @command{g77} 0.5.24, but there is now a 0.5.25.
Please remain calm and return to your keypunch units.
@c 1999-03-15: EGCS 1.1.2 released.
@@ -421,21 +530,21 @@ Fix @code{libg2c} so it performs an implicit @code{ENDFILE} operation
whenever a @code{REWIND} is done.
(This bug was introduced in 0.5.23 and @code{egcs} 1.1 in
-@code{g77}'s version of @code{libf2c}.)
+@command{g77}'s version of @code{libf2c}.)
@item
Fix @code{libg2c} so it no longer crashes with a spurious diagnostic
upon doing any I/O following a direct formatted write.
(This bug was introduced in 0.5.23 and @code{egcs} 1.1 in
-@code{g77}'s version of @code{libf2c}.)
+@command{g77}'s version of @code{libf2c}.)
@item
-Fix @code{g77} so it no longer crashes compiling references
+Fix @command{g77} so it no longer crashes compiling references
to the @code{Rand} intrinsic on some systems.
@item
-Fix @code{g77} portion of installation process so it works
+Fix @command{g77} portion of installation process so it works
better on some systems
(those with shells requiring @samp{else true} clauses
on @code{if} constructs
@@ -460,12 +569,12 @@ that overwrote their arguments.
@item
Assumed arrays with negative bounds
(such as @samp{REAL A(-1:*)})
-no longer elicit spurious diagnostics from @code{g77},
+no longer elicit spurious diagnostics from @command{g77},
even on systems with pointers having
different sizes than integers.
This bug is not known to have existed in any
-recent version of @code{gcc}.
+recent version of @command{gcc}.
It was introduced in an early release of @code{egcs}.
@end ifclear
@@ -477,19 +586,19 @@ without explicitly giving it a type,
and, in a subsequent program unit,
referencing that external as
an external function with a different type
-no longer crash @code{g77}.
+no longer crash @command{g77}.
@end ifclear
@ifclear USERVISONLY
@item
-@code{CASE DEFAULT} no longer crashes @code{g77}.
+@code{CASE DEFAULT} no longer crashes @command{g77}.
@end ifclear
@ifclear USERVISONLY
@item
-The @samp{-Wunused} option no longer issues a spurious
+The @option{-Wunused} option no longer issues a spurious
warning about the ``master'' procedure generated by
-@code{g77} for procedures containing @code{ENTRY} statements.
+@command{g77} for procedures containing @code{ENTRY} statements.
@end ifclear
@item
@@ -497,9 +606,9 @@ Support @samp{FORMAT(I<@var{expr}>)} when @var{expr} is a
compile-time constant @code{INTEGER} expression.
@item
-Fix @code{g77} @samp{-g} option so procedures that
+Fix @command{g77} @option{-g} option so procedures that
use @code{ENTRY} can be stepped through, line by line,
-in @code{gdb}.
+in @command{gdb}.
@item
Allow any @code{REAL} argument to intrinsics
@@ -512,7 +621,7 @@ so that the @code{TMPDIR} environment variable,
if present, is used.
@item
-@code{g77}'s version of @code{libf2c} separates out
+@command{g77}'s version of @code{libf2c} separates out
the setting of global state
(such as command-line arguments and signal handling)
from @file{main.o} into distinct, new library
@@ -525,9 +634,9 @@ when @code{libf2c} (now @code{libg2c}) is a shared library.
@ifclear USERVISONLY
@item
-@code{g77} no longer installs the @file{f77} command
+@command{g77} no longer installs the @file{f77} command
and @file{f77.1} man page
-in the @file{/usr} or @file{/usr/local} heirarchy,
+in the @file{/usr} or @file{/usr/local} hierarchy,
even if the @file{f77-install-ok} file exists
in the source or build directory.
See the installation documentation for more information.
@@ -535,9 +644,9 @@ See the installation documentation for more information.
@ifclear USERVISONLY
@item
-@code{g77} no longer installs the @file{libf2c.a} library
+@command{g77} no longer installs the @file{libf2c.a} library
and @file{f2c.h} include file
-in the @file{/usr} or @file{/usr/local} heirarchy,
+in the @file{/usr} or @file{/usr/local} hierarchy,
even if the @file{f2c-install-ok} or @file{f2c-exists-ok} files exist
in the source or build directory.
See the installation documentation for more information.
@@ -545,10 +654,10 @@ See the installation documentation for more information.
@ifclear USERVISONLY
@item
-The @file{libf2c.a} library produced by @code{g77} has been
+The @file{libf2c.a} library produced by @command{g77} has been
renamed to @file{libg2c.a}.
-It is installed only in the @code{gcc} ``private''
-directory heirarchy, @file{gcc-lib}.
+It is installed only in the @command{gcc} ``private''
+directory hierarchy, @file{gcc-lib}.
This allows system administrators and users to choose which
version of the @code{libf2c} library from @code{netlib} they
wish to use on a case-by-case basis.
@@ -557,10 +666,10 @@ See the installation documentation for more information.
@ifclear USERVISONLY
@item
-The @file{f2c.h} include (header) file produced by @code{g77}
+The @file{f2c.h} include (header) file produced by @command{g77}
has been renamed to @file{g2c.h}.
-It is installed only in the @code{gcc} ``private''
-directory heirarchy, @file{gcc-lib}.
+It is installed only in the @command{gcc} ``private''
+directory hierarchy, @file{gcc-lib}.
This allows system administrators and users to choose which
version of the include file from @code{netlib} they
wish to use on a case-by-case basis.
@@ -568,15 +677,15 @@ See the installation documentation for more information.
@end ifclear
@item
-The @code{g77} command now expects the run-time library
+The @command{g77} command now expects the run-time library
to be named @code{libg2c.a} instead of @code{libf2c.a},
to ensure that a version other than the one built and
-installed as part of the same @code{g77} version is picked up.
+installed as part of the same @command{g77} version is picked up.
@ifclear USERVISONLY
@item
During the configuration and build process,
-@code{g77} creates subdirectories it needs only as it
+@command{g77} creates subdirectories it needs only as it
needs them.
Other cleaning up of the configuration and build process
has been performed as well.
@@ -585,7 +694,7 @@ has been performed as well.
@ifclear USERVISONLY
@item
@code{install-info} now used to update the directory of
-Info documentation to contain an entry for @code{g77}
+Info documentation to contain an entry for @command{g77}
(during installation).
@end ifclear
@@ -623,7 +732,7 @@ as well.
@end itemize
@c 1998-09-03: EGCS 1.1 released.
-@heading In @code{EGCS} 1.1 versus @code{g77} 0.5.23:
+@heading In @code{EGCS} 1.1 versus @command{g77} 0.5.23:
@itemize @bullet
@ifclear USERVISONLY
@cindex DNRM2
@@ -632,7 +741,7 @@ as well.
@cindex -O2
@item
Fix a code-generation bug that afflicted
-Intel x86 targets when @samp{-O2} was specified
+Intel x86 targets when @option{-O2} was specified
compiling, for example, an old version of
the @code{DNRM2} routine.
@@ -643,7 +752,7 @@ and @code{ASSIGN}.
@ifclear USERVISONLY
@item
-@code{g77} no longer produces incorrect code
+@command{g77} no longer produces incorrect code
and initial values
for @code{EQUIVALENCE} and @code{COMMON}
aggregates that, due to ``unnatural'' ordering of members
@@ -652,39 +761,39 @@ vis-a-vis their types, require initial padding.
@ifclear USERVISONLY
@item
-Fix @code{g77} crash compiling code
+Fix @command{g77} crash compiling code
containing the construct @samp{CMPLX(0.)} or similar.
@end ifclear
@ifclear USERVISONLY
@item
-@code{g77} no longer crashes when compiling code
+@command{g77} no longer crashes when compiling code
containing specification statements such as
@samp{INTEGER(KIND=7) PTR}.
@end ifclear
@ifclear USERVISONLY
@item
-@code{g77} no longer crashes when compiling code
+@command{g77} no longer crashes when compiling code
such as @samp{J = SIGNAL(1, 2)}.
@end ifclear
@item
-@code{g77} now treats @samp{%LOC(@var{expr})} and
+@command{g77} now treats @samp{%LOC(@var{expr})} and
@samp{LOC(@var{expr})} as ``ordinary'' expressions
when they are used as arguments in procedure calls.
This change applies only to global (filewide) analysis,
making it consistent with
-how @code{g77} actually generates code
+how @command{g77} actually generates code
for these cases.
-Previously, @code{g77} treated these expressions
+Previously, @command{g77} treated these expressions
as denoting special ``pointer'' arguments
for the purposes of filewide analysis.
@ifclear USERVISONLY
@item
-Fix @code{g77} crash
+Fix @command{g77} crash
(or apparently infinite run-time)
when compiling certain complicated expressions
involving @code{COMPLEX} arithmetic
@@ -697,27 +806,27 @@ involving @code{COMPLEX} arithmetic
@item
Align static double-precision variables and arrays
on Intel x86 targets
-regardless of whether @samp{-malign-double} is specified.
+regardless of whether @option{-malign-double} is specified.
Generally, this affects only local variables and arrays
having the @code{SAVE} attribute
or given initial values via @code{DATA}.
@item
-The @code{g77} driver now ensures that @samp{-lg2c}
+The @command{g77} driver now ensures that @option{-lg2c}
is specified in the link phase prior to any
-occurrence of @samp{-lm}.
+occurrence of @option{-lm}.
This prevents accidentally linking to a routine
-in the SunOS4 @samp{-lm} library
+in the SunOS4 @option{-lm} library
when the generated code wants to link to the one
in @code{libf2c} (@code{libg2c}).
@item
-@code{g77} emits more debugging information when
-@samp{-g} is used.
+@command{g77} emits more debugging information when
+@option{-g} is used.
This new information allows, for example,
-@kbd{which __g77_length_a} to be used in @code{gdb}
+@kbd{which __g77_length_a} to be used in @command{gdb}
to determine the type of the phantom length argument
supplied with @code{CHARACTER} variables.
@@ -764,54 +873,54 @@ for such information.
@itemize @bullet
@item
This release contains several regressions against
-version 0.5.22 of @code{g77}, due to using the
-``vanilla'' @code{gcc} back end instead of patching
+version 0.5.22 of @command{g77}, due to using the
+``vanilla'' @command{gcc} back end instead of patching
it to fix a few bugs and improve performance in a
few cases.
Features that have been dropped from this version
-of @code{g77} due to their being implemented
-via @code{g77}-specific patches to the @code{gcc}
+of @command{g77} due to their being implemented
+via @command{g77}-specific patches to the @command{gcc}
back end in previous releases include:
@itemize @minus
@item
Support for @code{__restrict__} keyword,
-the options @samp{-fargument-alias}, @samp{-fargument-noalias},
-and @samp{-fargument-noalias-global},
+the options @option{-fargument-alias}, @option{-fargument-noalias},
+and @option{-fargument-noalias-global},
and the corresponding alias-analysis code.
(@code{egcs} has the alias-analysis
code, but not the @code{__restrict__} keyword.
-@code{egcs} @code{g77} users benefit from the alias-analysis
+@code{egcs} @command{g77} users benefit from the alias-analysis
code despite the lack of the @code{__restrict__} keyword,
which is a C-language construct.)
@item
Support for the GNU compiler options
-@samp{-fmove-all-movables},
-@samp{-freduce-all-givs},
-and @samp{-frerun-loop-opt}.
+@option{-fmove-all-movables},
+@option{-freduce-all-givs},
+and @option{-frerun-loop-opt}.
(@code{egcs} supports these options.
-@code{g77} users of @code{egcs} benefit from them even if
+@command{g77} users of @code{egcs} benefit from them even if
they are not explicitly specified,
-because the defaults are optimized for @code{g77} users.)
+because the defaults are optimized for @command{g77} users.)
@item
-Support for the @samp{-W} option warning about
+Support for the @option{-W} option warning about
integer division by zero.
@item
-The Intel x86-specific option @samp{-malign-double}
+The Intel x86-specific option @option{-malign-double}
applying to stack-allocated data
as well as statically-allocate data.
@end itemize
@ifclear USERVISONLY
Note that the @file{gcc/f/gbe/} subdirectory has been removed
-from this distribution as a result of @code{g77} no longer
-including patches for the @code{gcc} back end.
+from this distribution as a result of @command{g77} no longer
+including patches for the @command{gcc} back end.
@end ifclear
@ifclear USERVISONLY
@@ -825,20 +934,20 @@ that overwrote their arguments.
@end ifclear
@item
-Support @code{gcc} version 2.8,
-and remove support for prior versions of @code{gcc}.
+Support @command{gcc} version 2.8,
+and remove support for prior versions of @command{gcc}.
@cindex -@w{}-driver option
-@cindex @code{g77} options, -@w{}-driver
+@cindex @command{g77} options, -@w{}-driver
@cindex options, -@w{}-driver
@item
-Remove support for the @samp{--driver} option,
-as @code{g77} now does all the driving,
-just like @code{gcc}.
+Remove support for the @option{--driver} option,
+as @command{g77} now does all the driving,
+just like @command{gcc}.
@ifclear USERVISONLY
@item
-@code{CASE DEFAULT} no longer crashes @code{g77}.
+@code{CASE DEFAULT} no longer crashes @command{g77}.
@end ifclear
@ifclear USERVISONLY
@@ -849,14 +958,14 @@ without explicitly giving it a type,
and, in a subsequent program unit,
referencing that external as
an external function with a different type
-no longer crash @code{g77}.
+no longer crash @command{g77}.
@end ifclear
@ifclear USERVISONLY
@item
-@code{g77} no longer installs the @file{f77} command
+@command{g77} no longer installs the @file{f77} command
and @file{f77.1} man page
-in the @file{/usr} or @file{/usr/local} heirarchy,
+in the @file{/usr} or @file{/usr/local} hierarchy,
even if the @file{f77-install-ok} file exists
in the source or build directory.
See the installation documentation for more information.
@@ -864,9 +973,9 @@ See the installation documentation for more information.
@ifclear USERVISONLY
@item
-@code{g77} no longer installs the @file{libf2c.a} library
+@command{g77} no longer installs the @file{libf2c.a} library
and @file{f2c.h} include file
-in the @file{/usr} or @file{/usr/local} heirarchy,
+in the @file{/usr} or @file{/usr/local} hierarchy,
even if the @file{f2c-install-ok} or @file{f2c-exists-ok} files exist
in the source or build directory.
See the installation documentation for more information.
@@ -874,10 +983,10 @@ See the installation documentation for more information.
@ifclear USERVISONLY
@item
-The @file{libf2c.a} library produced by @code{g77} has been
+The @file{libf2c.a} library produced by @command{g77} has been
renamed to @file{libg2c.a}.
-It is installed only in the @code{gcc} ``private''
-directory heirarchy, @file{gcc-lib}.
+It is installed only in the @command{gcc} ``private''
+directory hierarchy, @file{gcc-lib}.
This allows system administrators and users to choose which
version of the @code{libf2c} library from @code{netlib} they
wish to use on a case-by-case basis.
@@ -886,10 +995,10 @@ See the installation documentation for more information.
@ifclear USERVISONLY
@item
-The @file{f2c.h} include (header) file produced by @code{g77}
+The @file{f2c.h} include (header) file produced by @command{g77}
has been renamed to @file{g2c.h}.
-It is installed only in the @code{gcc} ``private''
-directory heirarchy, @file{gcc-lib}.
+It is installed only in the @command{gcc} ``private''
+directory hierarchy, @file{gcc-lib}.
This allows system administrators and users to choose which
version of the include file from @code{netlib} they
wish to use on a case-by-case basis.
@@ -897,20 +1006,20 @@ See the installation documentation for more information.
@end ifclear
@item
-The @code{g77} command now expects the run-time library
+The @command{g77} command now expects the run-time library
to be named @code{libg2c.a} instead of @code{libf2c.a},
to ensure that a version other than the one built and
-installed as part of the same @code{g77} version is picked up.
+installed as part of the same @command{g77} version is picked up.
@ifclear USERVISONLY
@item
-The @samp{-Wunused} option no longer issues a spurious
+The @option{-Wunused} option no longer issues a spurious
warning about the ``master'' procedure generated by
-@code{g77} for procedures containing @code{ENTRY} statements.
+@command{g77} for procedures containing @code{ENTRY} statements.
@end ifclear
@item
-@code{g77}'s version of @code{libf2c} separates out
+@command{g77}'s version of @code{libf2c} separates out
the setting of global state
(such as command-line arguments and signal handling)
from @file{main.o} into distinct, new library
@@ -924,7 +1033,7 @@ when @code{libf2c} (now @code{libg2c}) is a shared library.
@ifclear USERVISONLY
@item
During the configuration and build process,
-@code{g77} creates subdirectories it needs only as it
+@command{g77} creates subdirectories it needs only as it
needs them, thus avoiding unnecessary creation of, for example,
@file{stage1/f/runtime} when doing a non-bootstrap build.
Other cleaning up of the configuration and build process
@@ -934,7 +1043,7 @@ has been performed as well.
@ifclear USERVISONLY
@item
@code{install-info} now used to update the directory of
-Info documentation to contain an entry for @code{g77}
+Info documentation to contain an entry for @command{g77}
(during installation).
@end ifclear
@@ -981,7 +1090,7 @@ For example, @samp{DO 10 J=2,J} now is compiled correctly.
@cindex -O2
@item
Fix a code-generation bug that afflicted
-Intel x86 targets when @samp{-O2} was specified
+Intel x86 targets when @option{-O2} was specified
compiling, for example, an old version of
the @code{DNRM2} routine.
@@ -1009,7 +1118,7 @@ machines such as Alphas.
@ifclear USERVISONLY
@item
-Fix @code{g77} version of @code{libf2c} so it no longer
+Fix @command{g77} version of @code{libf2c} so it no longer
produces a spurious @samp{I/O recursion} diagnostic at run time
when an I/O operation (such as @samp{READ *,I}) is interrupted
in a manner that causes the program to be terminated
@@ -1018,19 +1127,19 @@ via the @code{f_exit} routine (such as via @kbd{C-c}).
@ifclear USERVISONLY
@item
-Fix @code{g77} crash triggered by @code{CASE} statement with
+Fix @command{g77} crash triggered by @code{CASE} statement with
an omitted lower or upper bound.
@end ifclear
@ifclear USERVISONLY
@item
-Fix @code{g77} crash compiling references to @code{CPU_Time}
+Fix @command{g77} crash compiling references to @code{CPU_Time}
intrinsic.
@end ifclear
@ifclear USERVISONLY
@item
-Fix @code{g77} crash
+Fix @command{g77} crash
(or apparently infinite run-time)
when compiling certain complicated expressions
involving @code{COMPLEX} arithmetic
@@ -1039,14 +1148,14 @@ involving @code{COMPLEX} arithmetic
@ifclear USERVISONLY
@item
-Fix @code{g77} crash on statements such as
+Fix @command{g77} crash on statements such as
@samp{PRINT *, (REAL(Z(I)),I=1,2)}, where
@samp{Z} is @code{DOUBLE COMPLEX}.
@end ifclear
@ifclear USERVISONLY
@item
-Fix a @code{g++} crash.
+Fix a @command{g++} crash.
@end ifclear
@item
@@ -1054,13 +1163,13 @@ Support @samp{FORMAT(I<@var{expr}>)} when @var{expr} is a
compile-time constant @code{INTEGER} expression.
@item
-Fix @code{g77} @samp{-g} option so procedures that
+Fix @command{g77} @option{-g} option so procedures that
use @code{ENTRY} can be stepped through, line by line,
-in @code{gdb}.
+in @command{gdb}.
@ifclear USERVISONLY
@item
-Fix a profiling-related bug in @code{gcc} back end for
+Fix a profiling-related bug in @command{gcc} back end for
Intel x86 architecture.
@end ifclear
@@ -1079,7 +1188,7 @@ so that the @code{TMPDIR} environment variable,
if present, is used.
@item
-Rename the @code{gcc} keyword @code{restrict} to
+Rename the @command{gcc} keyword @code{restrict} to
@code{__restrict__}, to avoid rejecting valid, existing,
C programs.
Support for @code{restrict} is now more like support
@@ -1087,19 +1196,19 @@ for @code{complex}.
@ifclear USERVISONLY
@item
-Fix @samp{-fpedantic} to not reject procedure invocations
+Fix @option{-fpedantic} to not reject procedure invocations
such as @samp{I=J()} and @samp{CALL FOO()}.
@end ifclear
@item
-Fix @samp{-fugly-comma} to affect invocations of
+Fix @option{-fugly-comma} to affect invocations of
only external procedures.
Restore rejection of gratuitous trailing omitted
arguments to intrinsics, as in @samp{I=MAX(3,4,,)}.
@item
-Fix compiler so it accepts @samp{-fgnu-intrinsics-*} and
-@samp{-fbadu77-intrinsics-*} options.
+Fix compiler so it accepts @option{-fgnu-intrinsics-*} and
+@option{-fbadu77-intrinsics-*} options.
@ifclear USERVISONLY
@item
@@ -1108,10 +1217,10 @@ so it is more likely that the printing of the
active format string is limited to the string,
with no trailing garbage being printed.
-(Unlike @code{f2c}, @code{g77} did not append
+(Unlike @command{f2c}, @command{g77} did not append
a null byte to its compiled form of every
format string specified via a @code{FORMAT} statement.
-However, @code{f2c} would exhibit the problem
+However, @command{f2c} would exhibit the problem
anyway for a statement like @samp{PRINT '(I)garbage', 1}
by printing @samp{(I)garbage} as the format string.)
@end ifclear
@@ -1159,13 +1268,13 @@ This fixes a formatted-I/O bug that afflicted
@itemize @bullet
@ifclear USERVISONLY
@item
-Fix @code{g77} crash triggered by @code{CASE} statement with
+Fix @command{g77} crash triggered by @code{CASE} statement with
an omitted lower or upper bound.
@end ifclear
@ifclear USERVISONLY
@item
-Fix @code{g77} crash on statements such as
+Fix @command{g77} crash on statements such as
@samp{PRINT *, (REAL(Z(I)),I=1,2)}, where
@samp{Z} is @code{DOUBLE COMPLEX}.
@end ifclear
@@ -1176,28 +1285,28 @@ Fix @code{g77} crash on statements such as
@cindex -fPIC option
@cindex options, -fPIC
@item
-Fix @samp{-fPIC} (such as compiling for ELF targets)
+Fix @option{-fPIC} (such as compiling for ELF targets)
on the Intel x86 architecture target
so invalid assembler code is no longer produced.
@end ifclear
@ifclear USERVISONLY
@item
-Fix @samp{-fpedantic} to not reject procedure invocations
+Fix @option{-fpedantic} to not reject procedure invocations
such as @samp{I=J()} and @samp{CALL FOO()}.
@end ifclear
@ifclear USERVISONLY
@item
-Fix @samp{-fugly-comma} to affect invocations of
+Fix @option{-fugly-comma} to affect invocations of
only external procedures.
Restore rejection of gratuitous trailing omitted
arguments to intrinsics, as in @samp{I=MAX(3,4,,)}.
@end ifclear
@item
-Fix compiler so it accepts @samp{-fgnu-intrinsics-*} and
-@samp{-fbadu77-intrinsics-*} options.
+Fix compiler so it accepts @option{-fgnu-intrinsics-*} and
+@option{-fbadu77-intrinsics-*} options.
@end itemize
@c 1998-01-06: EGCS 1.0.1 released.
@@ -1211,20 +1320,20 @@ machines such as Alphas.
@end ifclear
@c 1997-12-03: EGCS 1.0 released.
-@heading In @code{EGCS} 1.0 versus @code{g77} 0.5.21:
+@heading In @code{EGCS} 1.0 versus @command{g77} 0.5.21:
@itemize @bullet
@item
Version 1.0 of @code{egcs}
contains several regressions against
-version 0.5.21 of @code{g77},
+version 0.5.21 of @command{g77},
due to using the
-``vanilla'' @code{gcc} back end instead of patching
+``vanilla'' @command{gcc} back end instead of patching
it to fix a few bugs and improve performance in a
few cases.
Features that have been dropped from this version
-of @code{g77} due to their being implemented
-via @code{g77}-specific patches to the @code{gcc}
+of @command{g77} due to their being implemented
+via @command{g77}-specific patches to the @command{gcc}
back end in previous releases include:
@itemize @minus
@@ -1232,20 +1341,20 @@ back end in previous releases include:
Support for the C-language @code{restrict} keyword.
@item
-Support for the @samp{-W} option warning about
+Support for the @option{-W} option warning about
integer division by zero.
@item
-The Intel x86-specific option @samp{-malign-double}
+The Intel x86-specific option @option{-malign-double}
applying to stack-allocated data
as well as statically-allocate data.
@end itemize
@ifclear USERVISONLY
Note that the @file{gcc/f/gbe/} subdirectory has been removed
-from this distribution as a result of @code{g77}
+from this distribution as a result of @command{g77}
being fully integrated with
-the @code{egcs} variant of the @code{gcc} back end.
+the @code{egcs} variant of the @command{gcc} back end.
@end ifclear
@ifclear USERVISONLY
@@ -1266,9 +1375,9 @@ results to integer values (on some systems).
@item
@c Toon Moene discovered these.
Some Fortran code, miscompiled
-by @code{g77} built on @code{gcc} version 2.8.1
+by @command{g77} built on @command{gcc} version 2.8.1
on m68k-next-nextstep3 configurations
-when using the @samp{-O2} option,
+when using the @option{-O2} option,
is now compiled correctly.
It is believed that a C function known to miscompile
on that configuration
@@ -1278,16 +1387,16 @@ also is now compiled correctly.
@ifclear USERVISONLY
@item
-Remove support for non-@code{egcs} versions of @code{gcc}.
+Remove support for non-@code{egcs} versions of @command{gcc}.
@end ifclear
@cindex -@w{}-driver option
-@cindex @code{g77} options, -@w{}-driver
+@cindex @command{g77} options, -@w{}-driver
@cindex options, -@w{}-driver
@item
-Remove support for the @samp{--driver} option,
-as @code{g77} now does all the driving,
-just like @code{gcc}.
+Remove support for the @option{--driver} option,
+as @command{g77} now does all the driving,
+just like @command{gcc}.
@item
Allow any numeric argument to intrinsics
@@ -1300,7 +1409,7 @@ so it is more likely that the printing of the
active format string is limited to the string,
with no trailing garbage being printed.
-(Unlike @code{f2c}, @code{g77} did not append
+(Unlike @command{f2c}, @command{g77} did not append
a null byte to its compiled form of every
format string specified via a @code{FORMAT} statement.
However, @code{f2c} would exhibit the problem
@@ -1324,9 +1433,9 @@ This fixes a formatted-I/O bug that afflicted
@item
Fix a code-generation bug introduced by 0.5.20
caused by loop unrolling (by specifying
-@samp{-funroll-loops} or similar).
+@option{-funroll-loops} or similar).
This bug afflicted all code compiled by
-version 2.7.2.2.f.2 of @code{gcc} (C, C++,
+version 2.7.2.2.f.2 of @command{gcc} (C, C++,
Fortran, and so on).
@end ifclear
@@ -1337,25 +1446,25 @@ combining local @code{EQUIVALENCE} with a
@code{DATA} statement that follows
the first executable statement (or is
treated as an executable-context statement
-as a result of using the @samp{-fpedantic}
+as a result of using the @option{-fpedantic}
option).
@end ifclear
@ifclear USERVISONLY
@item
-Fix a compiler crash that occured when an
+Fix a compiler crash that occurred when an
integer division by a constant zero is detected.
-Instead, when the @samp{-W} option is specified,
-the @code{gcc} back end issues a warning about such a case.
+Instead, when the @option{-W} option is specified,
+the @command{gcc} back end issues a warning about such a case.
This bug afflicted all code compiled by
-version 2.7.2.2.f.2 of @code{gcc} (C, C++,
+version 2.7.2.2.f.2 of @command{gcc} (C, C++,
Fortran, and so on).
@end ifclear
@ifset USERVISONLY
@item
-When the @samp{-W} option is specified, @code{gcc}, @code{g77},
-and other GNU compilers that incorporate the @code{gcc}
-back end as modified by @code{g77}, issue
+When the @option{-W} option is specified, @command{gcc}, @command{g77},
+and other GNU compilers that incorporate the @command{gcc}
+back end as modified by @command{g77}, issue
a warning about integer division by constant zero.
@end ifset
@@ -1397,17 +1506,17 @@ Such dual use of a name in a program is allowed by
the standard.
@end ifclear
-@c @code{g77}'s version of @code{libf2c} has been modified
+@c @command{g77}'s version of @code{libf2c} has been modified
@c so that the external names of library's procedures do not
@c conflict with names used for Fortran procedures compiled
-@c by @code{g77}.
+@c by @command{g77}.
@c An additional layer of jacket procedures has been added
@c to @code{libf2c} to map the old names to the new names,
@c for automatic use by programs that interface to the
@c library procedures via the external-procedure mechanism.
@c
@c For example, the intrinsic @code{FPUTC} previously was
-@c implemented by @code{g77} as a call to the @code{libf2c}
+@c implemented by @command{g77} as a call to the @code{libf2c}
@c routine @code{fputc_}.
@c This would conflict with a Fortran procedure named @code{FPUTC}
@c (using default compiler options), and this conflict
@@ -1425,20 +1534,20 @@ the standard.
@ifclear USERVISONLY
@item
Place automatic arrays on the stack, even if
-@code{SAVE} or the @samp{-fno-automatic} option
+@code{SAVE} or the @option{-fno-automatic} option
is in effect.
This avoids a compiler crash in some cases.
@end ifclear
@ifclear USERVISONLY
@item
-The @samp{-malign-double} option now reliably aligns
+The @option{-malign-double} option now reliably aligns
@code{DOUBLE PRECISION} optimally on Pentium and
-Pentium Pro architectures (586 and 686 in @code{gcc}).
+Pentium Pro architectures (586 and 686 in @command{gcc}).
@end ifclear
@item
-New option @samp{-Wno-globals} disables warnings
+New option @option{-Wno-globals} disables warnings
about ``suspicious'' use of a name both as a global
name and as the implicit name of an intrinsic, and
warnings about disagreements over the number or natures of
@@ -1446,10 +1555,10 @@ arguments passed to global procedures, or the
natures of the procedures themselves.
The default is to issue such warnings, which are
-new as of this version of @code{g77}.
+new as of this version of @command{g77}.
@item
-New option @samp{-fno-globals} disables diagnostics
+New option @option{-fno-globals} disables diagnostics
about potentially fatal disagreements
analysis problems, such as disagreements over the
number or natures of arguments passed to global
@@ -1458,7 +1567,7 @@ procedures, or the natures of those procedures themselves.
The default is to issue such diagnostics and flag
the compilation as unsuccessful.
With this option, the diagnostics are issued as
-warnings, or, if @samp{-Wno-globals} is specified,
+warnings, or, if @option{-Wno-globals} is specified,
are not issued at all.
This option also disables inlining of global procedures,
@@ -1476,7 +1585,7 @@ This avoids a compiler crash.
@ifclear USERVISONLY
@item
-Fix parsing bug whereby @code{g77} rejected a
+Fix parsing bug whereby @command{g77} rejected a
second initialization specification immediately
following the first's closing @samp{/} without
an intervening comma in a @code{DATA} statement,
@@ -1485,7 +1594,7 @@ and the second specification was an implied-DO list.
@ifclear USERVISONLY
@item
-Improve performance of the @code{gcc} back end so
+Improve performance of the @command{gcc} back end so
certain complicated expressions involving @code{COMPLEX}
arithmetic (especially multiplication) don't appear to
take forever to compile.
@@ -1493,7 +1602,7 @@ take forever to compile.
@ifclear USERVISONLY
@item
-Fix a couple of profiling-related bugs in @code{gcc}
+Fix a couple of profiling-related bugs in @command{gcc}
back end.
@end ifclear
@@ -1506,8 +1615,8 @@ These fixes are circa version 3.10p of GNAT.
@ifclear USERVISONLY
@item
-Include some other @code{gcc} fixes that seem useful in
-@code{g77}'s version of @code{gcc}.
+Include some other @command{gcc} fixes that seem useful in
+@command{g77}'s version of @command{gcc}.
(See @file{gcc/ChangeLog} for details---compare it
to that file in the vanilla @code{gcc-2.7.2.3.tar.gz}
distribution.)
@@ -1555,8 +1664,8 @@ Improve @code{libU77} so it is more portable.
@end ifclear
@item
-Add options @samp{-fbadu77-intrinsics-delete},
-@samp{-fbadu77-intrinsics-hide}, and so on.
+Add options @option{-fbadu77-intrinsics-delete},
+@option{-fbadu77-intrinsics-hide}, and so on.
@ifclear USERVISONLY
@item
@@ -1565,7 +1674,7 @@ Fix crashes involving diagnosed or invalid code.
@ifclear USERVISONLY
@item
-@code{g77} and @code{gcc} now do a somewhat better
+@command{g77} and @command{gcc} now do a somewhat better
job detecting and diagnosing arrays that are too
large to handle before these cause diagnostics
during the assembler or linker phase, a compiler
@@ -1579,33 +1688,33 @@ Make some fixes to alias analysis code.
@ifclear USERVISONLY
@item
-Add support for @code{restrict} keyword in @code{gcc}
+Add support for @code{restrict} keyword in @command{gcc}
front end.
@end ifclear
@ifclear USERVISONLY
@item
-Support @code{gcc} version 2.7.2.3
-(modified by @code{g77} into version 2.7.2.3.f.1),
+Support @command{gcc} version 2.7.2.3
+(modified by @command{g77} into version 2.7.2.3.f.1),
and remove
-support for prior versions of @code{gcc}.
+support for prior versions of @command{gcc}.
@end ifclear
@ifclear USERVISONLY
@item
-Incorporate GNAT's patches to the @code{gcc} back
-end into @code{g77}'s, so GNAT users do not need
-to apply GNAT's patches to build both GNAT and @code{g77}
+Incorporate GNAT's patches to the @command{gcc} back
+end into @command{g77}'s, so GNAT users do not need
+to apply GNAT's patches to build both GNAT and @command{g77}
from the same source tree.
@end ifclear
@ifclear USERVISONLY
@item
-Modify @code{make} rules and related code so that
+Modify @command{make} rules and related code so that
generation of Info documentation doesn't require
-compilation using @code{gcc}.
+compilation using @command{gcc}.
Now, any ANSI C compiler should be adequate to
-produce the @code{g77} documentation (in particular,
+produce the @command{g77} documentation (in particular,
the tables of intrinsics) from scratch.
@end ifclear
@@ -1630,12 +1739,12 @@ the type of an intrinsic invocation.
@ifclear USERVISONLY
@item
-Support @samp{*f771} entry in @code{gcc} @file{specs} file.
+Support @samp{*f771} entry in @command{gcc} @file{specs} file.
@end ifclear
@ifclear USERVISONLY
@item
-Fix typo in @code{make} rule @code{g77-cross}, used only for
+Fix typo in @command{make} rule @command{g77-cross}, used only for
cross-compiling.
@end ifclear
@@ -1647,27 +1756,27 @@ if previous attempt to archive was interrupted.
@ifclear USERVISONLY
@item
-Change @code{gcc} to unroll loops only during the last
+Change @command{gcc} to unroll loops only during the last
invocation (of as many as two invocations) of loop
optimization.
@end ifclear
@ifclear USERVISONLY
@item
-Improve handling of @samp{-fno-f2c} so that code that
+Improve handling of @option{-fno-f2c} so that code that
attempts to pass an intrinsic as an actual argument,
such as @samp{CALL FOO(ABS)}, is rejected due to the fact
that the run-time-library routine is, effectively,
-compiled with @samp{-ff2c} in effect.
+compiled with @option{-ff2c} in effect.
@end ifclear
@ifclear USERVISONLY
@item
-Fix @code{g77} driver to recognize @samp{-fsyntax-only}
-as an option that inhibits linking, just like @samp{-c} or
-@samp{-S}, and to recognize and properly handle the
-@samp{-nostdlib}, @samp{-M}, @samp{-MM}, @samp{-nodefaultlibs},
-and @samp{-Xlinker} options.
+Fix @command{g77} driver to recognize @option{-fsyntax-only}
+as an option that inhibits linking, just like @option{-c} or
+@option{-S}, and to recognize and properly handle the
+@option{-nostdlib}, @option{-M}, @option{-MM}, @option{-nodefaultlibs},
+and @option{-Xlinker} options.
@end ifclear
@ifclear USERVISONLY
@@ -1682,17 +1791,17 @@ recursive I/O (at run time).
@end ifclear
@item
-@code{g77} driver now prints version information (such as produced
+@command{g77} driver now prints version information (such as produced
by @kbd{g77 -v}) to @code{stderr} instead of @code{stdout}.
@item
The @samp{.r} suffix now designates a Ratfor source file,
-to be preprocessed via the @code{ratfor} command, available
+to be preprocessed via the @command{ratfor} command, available
separately.
@ifclear USERVISONLY
@item
-Fix some aspects of how @code{gcc} determines what kind of
+Fix some aspects of how @command{gcc} determines what kind of
system is being configured and what kinds are supported.
For example, GNU Linux/Alpha ELF systems now are directly
supported.
@@ -1712,7 +1821,7 @@ Improve documentation and indexing.
@item
Include all pertinent files for @code{libf2c} that come
from @code{netlib.bell-labs.com}; give any such files
-that aren't quite accurate in @code{g77}'s version of
+that aren't quite accurate in @command{g77}'s version of
@code{libf2c} the suffix @samp{.netlib}.
@end ifclear
@@ -1726,32 +1835,32 @@ Reserve @code{INTEGER(KIND=0)} for future use.
@heading In 0.5.20:
@itemize @bullet
@item
-The @samp{-fno-typeless-boz} option is now the default.
+The @option{-fno-typeless-boz} option is now the default.
This option specifies that non-decimal-radix
constants using the prefixed-radix form (such as @samp{Z'1234'})
are to be interpreted as @code{INTEGER(KIND=1)} constants.
-Specify @samp{-ftypeless-boz} to cause such
+Specify @option{-ftypeless-boz} to cause such
constants to be interpreted as typeless.
-(Version 0.5.19 introduced @samp{-fno-typeless-boz} and
+(Version 0.5.19 introduced @option{-fno-typeless-boz} and
its inverse.)
@ifset DOC-G77
@xref{Fortran Dialect Options,,Options Controlling Fortran Dialect},
-for information on the @samp{-ftypeless-boz} option.
+for information on the @option{-ftypeless-boz} option.
@end ifset
@item
-Options @samp{-ff90-intrinsics-enable} and
-@samp{-fvxt-intrinsics-enable} now are the
+Options @option{-ff90-intrinsics-enable} and
+@option{-fvxt-intrinsics-enable} now are the
defaults.
Some programs might use names that clash with
intrinsic names defined (and now enabled) by these
options or by the new @code{libU77} intrinsics.
Users of such programs might need to compile them
-differently (using, for example, @samp{-ff90-intrinsics-disable})
+differently (using, for example, @option{-ff90-intrinsics-disable})
or, better yet, insert appropriate @code{EXTERNAL}
statements specifying that these names are not intended
to be names of intrinsics.
@@ -1764,7 +1873,7 @@ I/O performance, especially over NFS.
@emph{Note:} If you have code that depends on the behavior
of @code{libf2c} when built with @code{ALWAYS_FLUSH} defined,
you will have to modify @code{libf2c} accordingly before
-building it from this and future versions of @code{g77}.
+building it from this and future versions of @command{g77}.
@ifset DOC-G77
@xref{Output Assumed To Flush}, for more information.
@@ -1773,44 +1882,44 @@ building it from this and future versions of @code{g77}.
@item
Dave Love's implementation of @code{libU77} has been
added to the version of @code{libf2c} distributed with
-and built as part of @code{g77}.
-@code{g77} now knows about the routines in this library
+and built as part of @command{g77}.
+@command{g77} now knows about the routines in this library
as intrinsics.
@item
-New option @samp{-fvxt} specifies that the
+New option @option{-fvxt} specifies that the
source file is written in VXT Fortran, instead of GNU Fortran.
@ifset DOC-G77
@xref{VXT Fortran}, for more information on the constructs
-recognized when the @samp{-fvxt} option is specified.
+recognized when the @option{-fvxt} option is specified.
@end ifset
@item
-The @samp{-fvxt-not-f90} option has been deleted,
-along with its inverse, @samp{-ff90-not-vxt}.
+The @option{-fvxt-not-f90} option has been deleted,
+along with its inverse, @option{-ff90-not-vxt}.
If you used one of these deleted options, you should
re-read the pertinent documentation to determine which
options, if any, are appropriate for compiling your
-code with this version of @code{g77}.
+code with this version of @command{g77}.
@ifset DOC-G77
@xref{Other Dialects}, for more information.
@end ifset
@item
-The @samp{-fugly} option now issues a warning, as it
+The @option{-fugly} option now issues a warning, as it
likely will be removed in a future version.
-(Enabling all the @samp{-fugly-*} options is unlikely
+(Enabling all the @option{-fugly-*} options is unlikely
to be feasible, or sensible, in the future,
so users should learn to specify only those
-@samp{-fugly-*} options they really need for a
+@option{-fugly-*} options they really need for a
particular source file.)
@item
-The @samp{-fugly-assumed} option, introduced in
+The @option{-fugly-assumed} option, introduced in
version 0.5.19, has been changed to
better accommodate old and new code.
@@ -1820,11 +1929,11 @@ better accommodate old and new code.
@ifclear USERVISONLY
@item
-Make a number of fixes to the @code{g77} front end and
-the @code{gcc} back end to better support Alpha (AXP)
+Make a number of fixes to the @command{g77} front end and
+the @command{gcc} back end to better support Alpha (AXP)
machines.
This includes providing at least one bug-fix to the
-@code{gcc} back end for Alphas.
+@command{gcc} back end for Alphas.
@end ifclear
@item
@@ -1845,34 +1954,34 @@ instead of the more common @code{INTEGER(KIND=1)}
(often referred to as @code{INTEGER*4}).
@item
-Emulate @code{COMPLEX} arithmetic in the @code{g77} front
+Emulate @code{COMPLEX} arithmetic in the @command{g77} front
end, to avoid bugs in @code{complex} support in the
-@code{gcc} back end.
-New option @samp{-fno-emulate-complex}
-causes @code{g77} to revert the 0.5.19 behavior.
+@command{gcc} back end.
+New option @option{-fno-emulate-complex}
+causes @command{g77} to revert the 0.5.19 behavior.
@ifclear USERVISONLY
@item
Fix bug whereby @samp{REAL A(1)}, for example, caused
-a compiler crash if @samp{-fugly-assumed} was in effect
+a compiler crash if @option{-fugly-assumed} was in effect
and @var{A} was a local (automatic) array.
That case is no longer affected by the new
-handling of @samp{-fugly-assumed}.
+handling of @option{-fugly-assumed}.
@end ifclear
@ifclear USERVISONLY
@item
-Fix @code{g77} command driver so that @samp{g77 -o foo.f}
+Fix @command{g77} command driver so that @samp{g77 -o foo.f}
no longer deletes @file{foo.f} before issuing other
-diagnostics, and so the @samp{-x} option is properly
+diagnostics, and so the @option{-x} option is properly
handled.
@end ifclear
@ifclear USERVISONLY
@item
-Enable inlining of subroutines and functions by the @code{gcc}
+Enable inlining of subroutines and functions by the @command{gcc}
back end.
-This works as it does for @code{gcc} itself---program units
+This works as it does for @command{gcc} itself---program units
may be inlined for invocations that follow them in the same
program unit, as long as the appropriate compile-time
options are specified.
@@ -1886,18 +1995,18 @@ these are defined (assigned to) by Fortran code.
This can result in faster and/or smaller programs when
compiling with optimization enabled, though on some
-systems this effect is observed only when @samp{-fforce-addr}
+systems this effect is observed only when @option{-fforce-addr}
also is specified.
-New options @samp{-falias-check}, @samp{-fargument-alias},
-@samp{-fargument-noalias},
-and @samp{-fno-argument-noalias-global} control the
-way @code{g77} handles potential aliasing.
+New options @option{-falias-check}, @option{-fargument-alias},
+@option{-fargument-noalias},
+and @option{-fno-argument-noalias-global} control the
+way @command{g77} handles potential aliasing.
@ifset DOC-G77
@xref{Aliasing Assumed To Work}, for detailed information on why the
new defaults might result in some programs no longer working the way they
-did when compiled by previous versions of @code{g77}.
+did when compiled by previous versions of @command{g77}.
@end ifset
@ifclear USERVISONLY
@@ -1909,7 +2018,7 @@ are compiled in-line.
@ifclear USERVISONLY
@item
The bug-fix for 0.5.19.1 has been re-done.
-The @code{g77} compiler has been changed back to
+The @command{g77} compiler has been changed back to
assume @code{libf2c} has no aliasing problems in
its implementations of the @code{COMPLEX} (and
@code{DOUBLE COMPLEX}) intrinsics.
@@ -1922,7 +2031,7 @@ or all cases, due to this change alone.
@emph{Note:} This change requires version 0.5.20 of
@code{libf2c}, at least, when linking code produced
-by any versions of @code{g77} other than 0.5.19.1.
+by any versions of @command{g77} other than 0.5.19.1.
Use @samp{g77 -v} to determine the version numbers
of the @code{libF77}, @code{libI77}, and @code{libU77}
components of the @code{libf2c} library.
@@ -1934,11 +2043,11 @@ version of @code{libf2c}.)
@end ifclear
@item
-New option @samp{-fugly-assign} specifies that the
+New option @option{-fugly-assign} specifies that the
same memory locations are to be used to hold the
values assigned by both statements @samp{I = 3} and
@samp{ASSIGN 10 TO I}, for example.
-(Normally, @code{g77} uses a separate memory location
+(Normally, @command{g77} uses a separate memory location
to hold assigned statement labels.)
@ifset DOC-G77
@@ -1965,7 +2074,7 @@ Fix crashes involving diagnosed or invalid code.
Change approach to building @code{libf2c} archive
(@file{libf2c.a}) so that members are added to it
only when truly necessary, so the user that installs
-an already-built @code{g77} doesn't need to have write
+an already-built @command{g77} doesn't need to have write
access to the build tree (whereas the user doing the
build might not have access to install new software
on the system).
@@ -1973,10 +2082,10 @@ on the system).
@ifclear USERVISONLY
@item
-Support @code{gcc} version 2.7.2.2
-(modified by @code{g77} into version 2.7.2.2.f.2),
+Support @command{gcc} version 2.7.2.2
+(modified by @command{g77} into version 2.7.2.2.f.2),
and remove
-support for prior versions of @code{gcc}.
+support for prior versions of @command{gcc}.
@end ifclear
@ifclear USERVISONLY
@@ -1987,7 +2096,7 @@ fix up some of the build procedures.
@ifclear USERVISONLY
@item
-Improve general build procedures for @code{g77},
+Improve general build procedures for @command{g77},
fixing minor bugs (such as deletion of any file
named @file{f771} in the parent directory of @code{gcc/}).
@end ifclear
@@ -1996,13 +2105,13 @@ named @file{f771} in the parent directory of @code{gcc/}).
Enable full support of @code{INTEGER(KIND=2)}
(often referred to as @code{INTEGER*8})
available in
-@code{libf2c} and @file{f2c.h} so that @code{f2c} users
-may make full use of its features via the @code{g77}
+@code{libf2c} and @file{f2c.h} so that @command{f2c} users
+may make full use of its features via the @command{g77}
version of @file{f2c.h} and the @code{INTEGER(KIND=2)}
-support routines in the @code{g77} version of @code{libf2c}.
+support routines in the @command{g77} version of @code{libf2c}.
@item
-Improve @code{g77} driver and @code{libf2c} so that @samp{g77 -v}
+Improve @command{g77} driver and @code{libf2c} so that @samp{g77 -v}
yields version information on the library.
@item
@@ -2027,9 +2136,9 @@ Complain about industry-wide ambiguous references
@samp{REAL(@var{expr})} and @samp{AIMAG(@var{expr})},
where @var{expr} is @code{DOUBLE COMPLEX} (or any
complex type other than @code{COMPLEX}), unless
-@samp{-ff90} option specifies Fortran 90 interpretation
-or new @samp{-fugly-complex} option, in conjunction with
-@samp{-fnot-f90}, specifies @code{f2c} interpretation.
+@option{-ff90} option specifies Fortran 90 interpretation
+or new @option{-fugly-complex} option, in conjunction with
+@option{-fnot-f90}, specifies @command{f2c} interpretation.
@ifclear USERVISONLY
@item
@@ -2105,38 +2214,38 @@ A temporary kludge option provides bare-bones information on
@code{COMMON} and @code{EQUIVALENCE} members at debug time.
@item
-New @samp{-fonetrip} option specifies FORTRAN-66-style
+New @option{-fonetrip} option specifies FORTRAN-66-style
one-trip @code{DO} loops.
@item
-New @samp{-fno-silent} option causes names of program units
+New @option{-fno-silent} option causes names of program units
to be printed as they are compiled, in a fashion similar to
-UNIX @code{f77} and @code{f2c}.
+UNIX @command{f77} and @command{f2c}.
@item
-New @samp{-fugly-assumed} option specifies that arrays
+New @option{-fugly-assumed} option specifies that arrays
dimensioned via @samp{DIMENSION X(1)}, for example, are to be
treated as assumed-size.
@item
-New @samp{-fno-typeless-boz} option specifies that non-decimal-radix
+New @option{-fno-typeless-boz} option specifies that non-decimal-radix
constants using the prefixed-radix form (such as @samp{Z'1234'})
are to be interpreted as @code{INTEGER} constants.
@item
-New @samp{-ff66} option is a ``shorthand'' option that specifies
+New @option{-ff66} option is a ``shorthand'' option that specifies
behaviors considered appropriate for FORTRAN 66 programs.
@item
-New @samp{-ff77} option is a ``shorthand'' option that specifies
-behaviors considered appropriate for UNIX @code{f77} programs.
+New @option{-ff77} option is a ``shorthand'' option that specifies
+behaviors considered appropriate for UNIX @command{f77} programs.
@item
-New @samp{-fugly-comma} and @samp{-fugly-logint} options provided
-to perform some of what @samp{-fugly} used to do.
-@samp{-fugly} and @samp{-fno-ugly} are now ``shorthand'' options,
+New @option{-fugly-comma} and @option{-fugly-logint} options provided
+to perform some of what @option{-fugly} used to do.
+@option{-fugly} and @option{-fno-ugly} are now ``shorthand'' options,
in that they do nothing more than enable (or disable) other
-@samp{-fugly-*} options.
+@option{-fugly-*} options.
@item
Fix parsing of assignment statements involving targets that
@@ -2153,7 +2262,7 @@ of valid Fortran programs are not misdiagnosed as improperly
extending the area backwards.
@item
-Support @code{gcc} version 2.7.2.1.
+Support @command{gcc} version 2.7.2.1.
@item
Upgrade to @code{libf2c} as of 1996-09-26, and
@@ -2180,23 +2289,23 @@ Modify @code{fseek_()} in @code{libf2c} to be more portable
matters) and to catch invalid @code{whence} arguments.
@item
-Some useless warnings from the @samp{-Wunused} option have
+Some useless warnings from the @option{-Wunused} option have
been eliminated.
@item
Fix a problem building the @file{f771} executable
-on AIX systems by linking with the @samp{-bbigtoc} option.
+on AIX systems by linking with the @option{-bbigtoc} option.
@item
-Abort configuration if @code{gcc} has not been patched
+Abort configuration if @command{gcc} has not been patched
using the patch file provided in the @file{gcc/f/gbe/}
subdirectory.
@item
-Add options @samp{--help} and @samp{--version} to the
-@code{g77} command, to conform to GNU coding guidelines.
-Also add printing of @code{g77} version number when
-the @samp{--verbose} (@samp{-v}) option is used.
+Add options @option{--help} and @option{--version} to the
+@command{g77} command, to conform to GNU coding guidelines.
+Also add printing of @command{g77} version number when
+the @option{--verbose} (@option{-v}) option is used.
@item
Change internally generated name for local @code{EQUIVALENCE}
@@ -2215,7 +2324,7 @@ Improvements to documentation and indexing.
Add some rudimentary support for @code{INTEGER*1},
@code{INTEGER*2}, @code{INTEGER*8},
and their @code{LOGICAL} equivalents.
-(This support works on most, maybe all, @code{gcc} targets.)
+(This support works on most, maybe all, @command{gcc} targets.)
Thanks to Scott Snyder (@email{snyder@@d0sgif.fnal.gov})
for providing the patch for this!
@@ -2258,18 +2367,18 @@ in some cases significantly (though, again, this
is only a subset of the general problem to be
addressed in 0.6).
-A new option, @samp{-fzeros}, is introduced to
+A new option, @option{-fzeros}, is introduced to
enable the traditional treatment of zeros as any
other value.
@item
-With @samp{-ff90} in force, @code{g77} incorrectly
+With @option{-ff90} in force, @command{g77} incorrectly
interpreted @samp{REAL(Z)} as returning a @code{REAL}
result, instead of as a @code{DOUBLE PRECISION}
result.
(Here, @samp{Z} is @code{DOUBLE COMPLEX}.)
-With @samp{-fno-f90} in force, the interpretation remains
+With @option{-fno-f90} in force, the interpretation remains
unchanged, since this appears to be how at least some
F77 code using the @code{DOUBLE COMPLEX} extension expected
it to work.
@@ -2304,9 +2413,9 @@ triggered in a long time.
@item
Introduce three new options that
-implement optimizations in the @code{gcc} back end (GBE).
-These options are @samp{-fmove-all-movables}, @samp{-freduce-all-givs},
-and @samp{-frerun-loop-opt}, which are enabled, by default,
+implement optimizations in the @command{gcc} back end (GBE).
+These options are @option{-fmove-all-movables}, @option{-freduce-all-givs},
+and @option{-frerun-loop-opt}, which are enabled, by default,
for Fortran compilations.
These optimizations are intended to help toon Fortran programs.
@@ -2315,19 +2424,19 @@ Patch the GBE to do a better job optimizing certain
kinds of references to array elements.
@item
-Due to patches to the GBE, the version number of @code{gcc}
+Due to patches to the GBE, the version number of @command{gcc}
also is patched to make it easier to manage installations,
-especially useful if it turns out a @code{g77} change to the
+especially useful if it turns out a @command{g77} change to the
GBE has a bug.
-The @code{g77}-modified version number is the @code{gcc}
+The @command{g77}-modified version number is the @command{gcc}
version number with the string @samp{.f.@var{n}} appended,
where @samp{f} identifies the version as enhanced for
Fortran, and @var{n} is @samp{1} for the first Fortran
-patch for that version of @code{gcc}, @samp{2} for the
+patch for that version of @command{gcc}, @samp{2} for the
second, and so on.
-So, this introduces version 2.7.2.f.1 of @code{gcc}.
+So, this introduces version 2.7.2.f.1 of @command{gcc}.
@item
Make several improvements and fixes to diagnostics, including
@@ -2335,22 +2444,22 @@ the removal of two that were inappropriate or inadequate.
@item
Warning about two successive arithmetic operators, produced
-by @samp{-Wsurprising}, now produced @emph{only} when both
+by @option{-Wsurprising}, now produced @emph{only} when both
operators are, indeed, arithmetic (not relational/boolean).
@item
-@samp{-Wsurprising} now warns about the remaining cases
+@option{-Wsurprising} now warns about the remaining cases
of using non-integral variables for implied-@code{DO}
-loops, instead of these being rejected unless @samp{-fpedantic}
-or @samp{-fugly} specified.
+loops, instead of these being rejected unless @option{-fpedantic}
+or @option{-fugly} specified.
@item
Allow @code{SAVE} of a local variable or array, even after
it has been given an initial value via @code{DATA}, for example.
@item
-Introduce an Info version of @code{g77} documentation, which
-supercedes @file{gcc/f/CREDITS}, @file{gcc/f/DOC}, and
+Introduce an Info version of @command{g77} documentation, which
+supersedes @file{gcc/f/CREDITS}, @file{gcc/f/DOC}, and
@file{gcc/f/PROJECTS}.
These files will be removed in a future release.
The files @file{gcc/f/BUGS}, @file{gcc/f/INSTALL}, and
@@ -2362,8 +2471,8 @@ This effort was inspired by a first pass at translating
David Ronis (@email{ronis@@onsager.chem.mcgill.ca}).
@item
-New @samp{-fno-second-underscore} option to specify
-that, when @samp{-funderscoring} is in effect, a second
+New @option{-fno-second-underscore} option to specify
+that, when @option{-funderscoring} is in effect, a second
underscore is not to be appended to Fortran names already
containing an underscore.
@@ -2377,20 +2486,20 @@ the result of the calculation is always converted to
the default @code{INTEGER} type.
(This should have no effect on existing code compiled
-by @code{g77}, but code written to assume that use
+by @command{g77}, but code written to assume that use
of a @emph{wider} type for the @code{DO} variable
will result in an iteration count being fully calculated
using that wider type (wider
than default @code{INTEGER}) must be rewritten.)
@item
-Support @code{gcc} version 2.7.2.
+Support @command{gcc} version 2.7.2.
@item
Upgrade to @code{libf2c} as of 1996-03-23, and
fix up some of the build procedures.
-Note that the email addresses related to @code{f2c}
+Note that the email addresses related to @command{f2c}
have changed---the distribution site now is
named @code{netlib.bell-labs.com}, and the
maintainer's new address is @email{dmg@@bell-labs.com}.
@@ -2417,8 +2526,8 @@ various applications and programs exhibiting sudden, strange
behaviors.
I sincerely apologize for not realizing the
-implications of the fact that when @samp{g77 -v} runs the @code{ld} command
-with @samp{-o /dev/null} that @code{ld} tries to @emph{remove} the executable
+implications of the fact that when @samp{g77 -v} runs the @command{ld} command
+with @samp{-o /dev/null} that @command{ld} tries to @emph{remove} the executable
it is supposed to build (especially if it reports unresolved
references, which it should in this case)!
@@ -2440,10 +2549,10 @@ never happen).
@item
Make @code{libf2c} build procedures work on more systems again by
-eliminating unnecessary invocations of @samp{ld -r -x} and @code{mv}.
+eliminating unnecessary invocations of @samp{ld -r -x} and @command{mv}.
@item
-Fix omission of @samp{-funix-intrinsics-@dots{}} options in list of permitted
+Fix omission of @option{-funix-intrinsics-@dots{}} options in list of permitted
options to compiler.
@item
@@ -2457,12 +2566,12 @@ in the back end) involving exponentiation with a large @code{INTEGER}
constant for the right-hand operator (e.g. @samp{I**32767}).
@item
-Fix build procedures so cross-compiling @code{g77} (the @code{fini}
+Fix build procedures so cross-compiling @command{g77} (the @command{fini}
utility in particular) is properly built using the host compiler.
@item
-Add new @samp{-Wsurprising} option to warn about constructs that are
-interpreted by the Fortran standard (and @code{g77}) in ways that
+Add new @option{-Wsurprising} option to warn about constructs that are
+interpreted by the Fortran standard (and @command{g77}) in ways that
are surprising to many programmers.
@item
@@ -2473,12 +2582,12 @@ Add @code{ERF()} and @code{ERFC()} as generic intrinsics mapping to existing
specify @samp{INTRINSIC ERF,ERFC} in any code where you might use
these as generic intrinsics, to improve likelihood of diagnostics
(instead of subtle run-time bugs) when using a compiler that
-doesn't support these as intrinsics (e.g. @code{f2c}).
+doesn't support these as intrinsics (e.g. @command{f2c}).
@item
-Remove from @samp{-fno-pedantic} the diagnostic about @code{DO}
+Remove from @option{-fno-pedantic} the diagnostic about @code{DO}
with non-@code{INTEGER} index variable; issue that under
-@samp{-Wsurprising} instead.
+@option{-Wsurprising} instead.
@item
Clarify some diagnostics that say things like ``ignored'' when that's
@@ -2497,7 +2606,7 @@ Minor improvement to code generation for some @code{DO} loops on some
machines.
@item
-Support @code{gcc} version 2.7.1.
+Support @command{gcc} version 2.7.1.
@item
Upgrade to @code{libf2c} as of 1995-11-15.
@@ -2512,14 +2621,14 @@ not involving @code{COMMON}.
@item
Fix code-generation bugs involving invoking ``gratis'' library procedures
-in @code{libf2c} from code compiled with @samp{-fno-f2c} by making these
-procedures known to @code{g77} as intrinsics (not affected by -fno-f2c).
+in @code{libf2c} from code compiled with @option{-fno-f2c} by making these
+procedures known to @command{g77} as intrinsics (not affected by -fno-f2c).
This is known to fix code invoking @code{ERF()}, @code{ERFC()},
@code{DERF()}, and @code{DERFC()}.
@item
Update @code{libf2c} to include netlib patches through 1995-08-16, and
-@code{#define} @code{WANT_LEAD_0} to 1 to make @code{g77}-compiled code more
+@code{#define} @code{WANT_LEAD_0} to 1 to make @command{g77}-compiled code more
consistent with other Fortran implementations by outputting
leading zeros in formatted and list-directed output.
@@ -2527,7 +2636,7 @@ leading zeros in formatted and list-directed output.
Fix a code-generation bug involving adjustable dummy arrays with high
bounds whose primaries are changed during procedure execution, and
which might well improve code-generation performance for such arrays
-compared to @code{f2c} plus @code{gcc} (but apparently only when using
+compared to @command{f2c} plus @command{gcc} (but apparently only when using
@file{gcc-2.7.0} or later).
@item
@@ -2540,8 +2649,8 @@ that overlaps one or more of the arguments to the invocation or divide.
@item
Fix crash by not generating new optimal code for @samp{X**I} if @samp{I} is
nonconstant and the expression is used to dimension a dummy
-array, since the @code{gcc} back end does not support the necessary
-mechanics (and the @code{gcc} front end rejects the equivalent
+array, since the @command{gcc} back end does not support the necessary
+mechanics (and the @command{gcc} front end rejects the equivalent
construct, as it turns out).
@item
@@ -2568,25 +2677,25 @@ area when any member of area has initial value (via @code{DATA},
for example).
@item
-Fix installation bug that prevented installation of @code{g77} driver.
-Provide for easy selection of whether to install copy of @code{g77}
-as @code{f77} to replace the broken code.
+Fix installation bug that prevented installation of @command{g77} driver.
+Provide for easy selection of whether to install copy of @command{g77}
+as @command{f77} to replace the broken code.
@item
-Fix @code{gcc} driver (affects @code{g77} thereby) to not
+Fix @command{gcc} driver (affects @command{g77} thereby) to not
gratuitously invoke the
-@code{f771} program (e.g. when @samp{-E} is specified).
+@code{f771} program (e.g. when @option{-E} is specified).
@item
Fix diagnostic to point to correct source line when it immediately
follows an @code{INCLUDE} statement.
@item
-Support more compiler options in @code{gcc}/@code{g77} when
+Support more compiler options in @command{gcc}/@command{g77} when
compiling Fortran files.
-These options include @samp{-p}, @samp{-pg}, @samp{-aux-info}, @samp{-P},
+These options include @option{-p}, @option{-pg}, @option{-aux-info}, @option{-P},
correct setting of version-number macros for preprocessing, full
-recognition of @samp{-O0}, and
+recognition of @option{-O0}, and
automatic insertion of configuration-specific linker specs.
@item
@@ -2609,15 +2718,15 @@ Move @code{LOC()} intrinsic out of the @code{vxt} group to the new
@code{unix} group.
@item
-Improve @code{g77} so that @samp{g77 -v} by itself (or with
-certain other options, including @samp{-B}, @samp{-b}, @samp{-i},
-@samp{-nostdlib}, and @samp{-V}) reports lots more useful
-version info, and so that long-form options @code{gcc} accepts are
-understood by @code{g77} as well (even in truncated, unambiguous forms).
+Improve @command{g77} so that @samp{g77 -v} by itself (or with
+certain other options, including @option{-B}, @option{-b}, @option{-i},
+@option{-nostdlib}, and @option{-V}) reports lots more useful
+version info, and so that long-form options @command{gcc} accepts are
+understood by @command{g77} as well (even in truncated, unambiguous forms).
@item
-Add new @code{g77} option @samp{--driver=name} to specify driver when
-default, @code{gcc}, isn't appropriate.
+Add new @command{g77} option @option{--driver=name} to specify driver when
+default, @command{gcc}, isn't appropriate.
@item
Add support for @samp{#} directives (as output by the preprocessor) in the
@@ -2626,14 +2735,14 @@ preprocessor (when compiling @samp{.F} files) so diagnostics and debugging
info are more useful to users of the preprocessor.
@item
-Produce better diagnostics, more like @code{gcc}, with info such as
+Produce better diagnostics, more like @command{gcc}, with info such as
@samp{In function `foo':} and @samp{In file included from...:}.
@item
-Support @code{gcc}'s @samp{-fident} and @samp{-fno-ident} options.
+Support @command{gcc}'s @option{-fident} and @option{-fno-ident} options.
@item
-When @samp{-Wunused} in effect, don't warn about local variables used as
+When @option{-Wunused} in effect, don't warn about local variables used as
statement-function dummy arguments or @code{DATA} implied-@code{DO} iteration
variables, even though, strictly speaking, these are not uses
of the variables themselves.
@@ -2641,19 +2750,19 @@ of the variables themselves.
@item
When @samp{-W -Wunused} in effect, don't warn about unused dummy arguments
at all, since there's no way to turn this off for individual
-cases (@code{g77} might someday start warning about these)---applies
-to @code{gcc} versions 2.7.0 and later, since earlier versions didn't
+cases (@command{g77} might someday start warning about these)---applies
+to @command{gcc} versions 2.7.0 and later, since earlier versions didn't
warn about unused dummy arguments.
@item
-New option @samp{-fno-underscoring} that inhibits transformation of names
+New option @option{-fno-underscoring} that inhibits transformation of names
(by appending one or two underscores) so users may experiment
with implications of such an environment.
@item
Minor improvement to @file{gcc/f/info} module to make it easier to build
-@code{g77} using the native (non-@code{gcc}) compiler on certain machines
-(but definitely not all machines nor all non-@code{gcc} compilers).
+@command{g77} using the native (non-@command{gcc}) compiler on certain machines
+(but definitely not all machines nor all non-@command{gcc} compilers).
Please
do not report bugs showing problems compilers have with
macros defined in @file{gcc/f/target.h} and used in places like
@@ -2663,14 +2772,14 @@ macros defined in @file{gcc/f/target.h} and used in places like
Add warning to be printed for each invocation of the compiler
if the target machine @code{INTEGER}, @code{REAL}, or @code{LOGICAL} size
is not 32 bits,
-since @code{g77} is known to not work well for such cases.
+since @command{g77} is known to not work well for such cases.
@item
Lots of new documentation (though work is still needed to put it into
canonical GNU format).
@item
-Build @code{libf2c} with @samp{-g0}, not @samp{-g2}, in effect
+Build @code{libf2c} with @option{-g0}, not @option{-g2}, in effect
(by default), to produce
smaller library without lots of debugging clutter.
@end itemize
@@ -2680,7 +2789,7 @@ smaller library without lots of debugging clutter.
@itemize @bullet
@item
Fix bad code generation involving @samp{X**I} and temporary, internal variables
-generated by @code{g77} and the back end (such as for @code{DO} loops).
+generated by @command{g77} and the back end (such as for @code{DO} loops).
@item
Fix crash given @samp{CHARACTER A;DATA A/.TRUE./}.
@@ -2697,26 +2806,26 @@ Fix crash or other erratic behavior involving diagnosed code.
@item
Fix code generation for external functions returning type @code{REAL} when
-the @samp{-ff2c} option is in force (which it is by default) so that
-@code{f2c} compatibility is indeed provided.
+the @option{-ff2c} option is in force (which it is by default) so that
+@command{f2c} compatibility is indeed provided.
@item
Disallow @samp{COMMON I(10)} if @samp{I} has previously been specified
with an array declarator.
@item
-New @samp{-ffixed-line-length-@var{n}} option, where @var{n} is the
+New @option{-ffixed-line-length-@var{n}} option, where @var{n} is the
maximum length
of a typical fixed-form line, defaulting to 72 columns, such
that characters beyond column @var{n} are ignored, or @var{n} is @samp{none},
meaning no characters are ignored.
does not affect lines
with @samp{&} in column 1, which are always processed as if
-@samp{-ffixed-line-length-none} was in effect.
+@option{-ffixed-line-length-none} was in effect.
@item
No longer generate better code for some kinds of array references,
-as @code{gcc} back end is to be fixed to do this even better, and it
+as @command{gcc} back end is to be fixed to do this even better, and it
turned out to slow down some code in some cases after all.
@item
@@ -2724,7 +2833,7 @@ In @code{COMMON} and @code{EQUIVALENCE} areas with any members given initial
values (e.g. via @code{DATA}), uninitialized members now always
initialized to binary zeros (though this is not required by
the standard, and might not be done in future versions
-of @code{g77}).
+of @command{g77}).
Previously, in some @code{COMMON}/@code{EQUIVALENCE} areas
(essentially those with members of more than one type), the
uninitialized members were initialized to spaces, to
@@ -2768,7 +2877,7 @@ Fix crash on @code{DCMPLX()} with a single @code{INTEGER} argument.
Fix various crashes involving code with diagnosed errors.
@item
-Support @samp{-I} option for @code{INCLUDE} statement, plus @code{gcc}'s
+Support @option{-I} option for @code{INCLUDE} statement, plus @command{gcc}'s
@file{header.gcc} facility for handling systems like MS-DOS.
@item
@@ -2781,13 +2890,13 @@ fixes a bug involving infinite loops reading EOF with empty list-directed
I/O list.
@item
-Remove all the @code{g77}-specific auto-configuration scripts, code,
+Remove all the @command{g77}-specific auto-configuration scripts, code,
and so on,
except for temporary substitutes for bsearch() and strtoul(), as
too many configure/build problems were reported in these areas.
People will have to fix their systems' problems themselves, or at
-least somewhere other than @code{g77}, which expects a working ANSI C
-environment (and, for now, a GNU C compiler to compile @code{g77} itself).
+least somewhere other than @command{g77}, which expects a working ANSI C
+environment (and, for now, a GNU C compiler to compile @command{g77} itself).
@item
Complain if initialized common redeclared as larger in subsequent program
@@ -2798,40 +2907,40 @@ Warn if blank common initialized, since its size can vary and hence
related warnings that might be helpful won't be seen.
@item
-New @samp{-fbackslash} option, on by default, that causes @samp{\}
+New @option{-fbackslash} option, on by default, that causes @samp{\}
within @code{CHARACTER}
and Hollerith constants to be interpreted a la GNU C.
Note that
-this behavior is somewhat different from @code{f2c}'s, which supports only
+this behavior is somewhat different from @command{f2c}'s, which supports only
a limited subset of backslash (escape) sequences.
@item
-Make @samp{-fugly-args} the default.
+Make @option{-fugly-args} the default.
@item
-New @samp{-fugly-init} option, on by default, that allows typeless/Hollerith
+New @option{-fugly-init} option, on by default, that allows typeless/Hollerith
to be specified as initial values for variables or named constants
(@code{PARAMETER}), and also allows character<->numeric conversion in
-those contexts---turn off via @samp{-fno-ugly-init}.
+those contexts---turn off via @option{-fno-ugly-init}.
@item
-New @samp{-finit-local-zero} option to initialize
+New @option{-finit-local-zero} option to initialize
local variables to binary zeros.
This does not affect whether they are @code{SAVE}d, i.e. made
automatic or static.
@item
-New @samp{-Wimplicit} option to warn about implicitly typed variables, arrays,
+New @option{-Wimplicit} option to warn about implicitly typed variables, arrays,
and functions.
(Basically causes all program units to default to @code{IMPLICIT NONE}.)
@item
-@samp{-Wall} now implies @samp{-Wuninitialized} as with @code{gcc}
-(i.e. unless @samp{-O} not specified, since @samp{-Wuninitialized}
-requires @samp{-O}), and implies @samp{-Wunused} as well.
+@option{-Wall} now implies @option{-Wuninitialized} as with @command{gcc}
+(i.e. unless @option{-O} not specified, since @option{-Wuninitialized}
+requires @option{-O}), and implies @option{-Wunused} as well.
@item
-@samp{-Wunused} no longer gives spurious messages for unused
+@option{-Wunused} no longer gives spurious messages for unused
@code{EXTERNAL} names (since they are assumed to refer to block data
program units, to make use of libraries more reliable).
@@ -2842,7 +2951,7 @@ Support @code{%LOC()} and @code{LOC()} of character arguments.
Support null (zero-length) character constants and expressions.
@item
-Support @code{f2c}'s @code{IMAG()} generic intrinsic.
+Support @command{f2c}'s @code{IMAG()} generic intrinsic.
@item
Support @code{ICHAR()}, @code{IACHAR()}, and @code{LEN()} of
@@ -2850,7 +2959,7 @@ character expressions that are valid in assignments but
not normally as actual arguments.
@item
-Support @code{f2c}-style @samp{&} in column 1 to mean continuation line.
+Support @command{f2c}-style @samp{&} in column 1 to mean continuation line.
@item
Allow @code{NAMELIST}, @code{EXTERNAL}, @code{INTRINSIC}, and @code{VOLATILE}
@@ -2882,9 +2991,9 @@ too small, otherwise fully intact if constant wider the @code{INTEGER}
type) instead of by value.
@end itemize
-@strong{Warning:} @code{f2c} differs on the
+@strong{Warning:} @command{f2c} differs on the
interpretation of @samp{CALL FOO(1HX)}, which it treats exactly the
-same as @samp{CALL FOO('X')}, but which the standard and @code{g77} treat
+same as @samp{CALL FOO('X')}, but which the standard and @command{g77} treat
as @samp{CALL FOO(%REF('X '))} (padded with as many spaces as necessary
to widen to @code{INTEGER}), essentially.
@@ -2931,7 +3040,7 @@ Remove redundant message about zero-step-count @code{DO} loops.
Clean up diagnostic messages, shortening many of them.
@item
-Fix typo in @code{g77} man page.
+Fix typo in @command{g77} man page.
@item
Clarify implications of constant-handling bugs in @file{f/BUGS}.
@@ -2942,7 +3051,7 @@ type @code{INTEGER}.
@item
Generate better code for @code{SQRT()} and @code{DSQRT()},
-also when @samp{-ffast-math}
+also when @option{-ffast-math}
specified, enable better code generation for @code{SIN()} and @code{COS()}.
@item
diff --git a/contrib/gcc/f/parse.c b/contrib/gcc/f/parse.c
index 1ffd6b3..29c6133 100644
--- a/contrib/gcc/f/parse.c
+++ b/contrib/gcc/f/parse.c
@@ -24,72 +24,28 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "com.h"
#include "where.h"
#include "version.h"
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
-#include "flags.j"
-#endif
+#include "flags.h"
#define NAME_OF_STDIN "<stdin>"
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-void
-main (int argc, char *argv[])
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-FILE *finput;
+extern FILE *finput;
int
yyparse ()
-#else
-#error
-#endif
{
ffewhereFile wf;
if (ffe_is_version ())
fprintf (stderr, "GNU Fortran Front End version %s\n", ffe_version_string);
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- ffe_init_0 ();
-
- {
- int strings_processed;
- for (--argc, ++argv; argc > 0; argc -= strings_processed, argv += strings_processed)
- {
- strings_processed = ffe_decode_option (argc, argv);
- if (strings_processed == 0)
- {
- fprintf (stderr, "Unrecognized option: %s\n", argv[0]);
- strings_processed = 1;
- }
- }
- }
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
if (!ffe_is_pedantic ())
ffe_set_is_pedantic (pedantic);
-#else
-#error
-#endif
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- wf = ffewhere_file_new (NAME_OF_STDIN, strlen (NAME_OF_STDIN));
- ffecom_file (NAME_OF_STDIN);
- ffe_file (wf, stdin);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
wf = ffewhere_file_new (main_input_filename, strlen (main_input_filename));
ffecom_file (main_input_filename);
ffe_file (wf, finput);
-#else
-#error
-#endif
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
ffecom_finish_compile ();
return 0;
-#elif FFECOM_targetCURRENT == FFECOM_targetFFE
- ffe_terminate_0 ();
-
- exit (0);
-#else
-#error
-#endif
}
diff --git a/contrib/gcc/f/proj.h b/contrib/gcc/f/proj.h
index 47fc2f9..fd4a65c 100644
--- a/contrib/gcc/f/proj.h
+++ b/contrib/gcc/f/proj.h
@@ -1,5 +1,5 @@
/* proj.h file for Gnu Fortran
- Copyright (C) 1995, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1996, 2000, 2001 Free Software Foundation, Inc.
Contributed by James Craig Burley.
This file is part of GNU Fortran.
@@ -21,63 +21,30 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
*/
-#ifndef _H_f_proj
-#define _H_f_proj
+#ifndef GCC_F_PROJ_H
+#define GCC_F_PROJ_H
#ifdef USE_HCONFIG
-#include "hconfig.j"
+#include "hconfig.h"
#else
-#include "config.j"
+#include "config.h"
#endif
-#include "system.j"
+#include "system.h"
-#if !defined (__GNUC__) || (__GNUC__ < 2)
-#error "You have to use gcc 2.x to build g77 (might be fixed in g77-0.6)."
+#if (GCC_VERSION < 2000)
+ #error "You have to use gcc 2.x to build g77 (might be fixed in g77-0.6)."
#endif
-#ifndef BUILT_WITH_270
-#if (__GNUC__ > 2) || (__GNUC__ == 2 && __GNUC_MINOR__ >= 7)
-#define BUILT_WITH_270 1
-#else
-#define BUILT_WITH_270 0
-#endif
-#endif /* !defined (BUILT_WITH_270) */
-
-/* Include files everyone gets. <assert.h> is needed for assert().
- <stddef.h> is needed for offsetof, but technically also NULL,
- size_t, ptrdiff_t, and so on. */
-
-#include "assert.j"
-
-#if HAVE_STDDEF_H
-#include <stddef.h>
-#endif
+/* Include files everyone gets. <assert.h> is needed for assert(). */
-/* Generally useful definitions. */
-
-typedef enum
- {
-#if !defined(false) || !defined(true)
- false = 0, true = 1,
-#endif
-#if !defined(FALSE) || !defined(TRUE)
- FALSE = 0, TRUE = 1,
-#endif
- Doggone_Trailing_Comma_Dont_Work = 1
- } bool;
-
-#define ARRAY_SIZE(a) (sizeof(a)/sizeof(a[0]))
+#include "assert.h"
#ifndef UNUSED /* Compile with -DUNUSED= if cc doesn't support this. */
-#if BUILT_WITH_270
-#define UNUSED __attribute__ ((unused))
-#else /* !BUILT_WITH_270 */
-#define UNUSED
-#endif /* !BUILT_WITH_270 */
+#define UNUSED ATTRIBUTE_UNUSED
#endif /* !defined (UNUSED) */
#ifndef dmpout
#define dmpout stderr
#endif
-#endif
+#endif /* ! GCC_F_PROJ_H */
diff --git a/contrib/gcc/f/root.texi b/contrib/gcc/f/root.texi
index dce97c0..2ea699e 100644
--- a/contrib/gcc/f/root.texi
+++ b/contrib/gcc/f/root.texi
@@ -1,40 +1,20 @@
@c DEVELOPMENT is set to indicate an in-development version,
@c as compared to a release version. When making a release
-@c (e.g. a release branch in the CVS repository for egcs),
+@c (e.g. a release branch in the CVS repository for gcc),
@c clear this and set the version information correctly.
-@clear DEVELOPMENT
-@set version-g77 0.5.25
-@set version-egcs 1.2
-@set version-gcc 2.95
-
-@c GCC-G77 indicates this is the GCC (2.95 or later) version of g77.
-@set GCC-G77
-
-@c EGCS-G77 indicates this is the EGCS (1.0 or 1.1) version of g77.
-@clear EGCS-G77
-
-@c FSF-G77 indicates this is the FSF (0.5.23 or earlier) version of g77.
-@clear FSF-G77
+@set DEVELOPMENT
+@set version-g77 0.5.27
+@set version-gcc 3.1
@set email-general gcc@@gcc.gnu.org
+@set email-help gcc-help@@gcc.gnu.org
@set email-bugs gcc-bugs@@gcc.gnu.org or bug-gcc@@gnu.org
-@set path-g77 egcs/gcc/f
-@set path-libf2c egcs/libf2c
+@set email-patch gcc-patches@@gcc.gnu.org
+@set path-g77 gcc/gcc/f
+@set path-libf2c gcc/libf2c
-@ifset GCC-G77
@set which-g77 GCC-@value{version-gcc}
@set which-gcc GCC
-@end ifset
-
-@ifset EGCS-G77
-@set which-g77 EGCS-@value{version-egcs}
-@set which-gcc EGCS
-@end ifset
-
-@ifset FSF-G77
-@set which-g77 FSF-@value{version-g77}
-@set which-gcc GCC
-@end ifset
@set email-burley craig@@jcb-sc.com
@set www-burley http://world.std.com/%7Eburley
diff --git a/contrib/gcc/f/src.c b/contrib/gcc/f/src.c
index 7b23931..28c55cc 100644
--- a/contrib/gcc/f/src.c
+++ b/contrib/gcc/f/src.c
@@ -32,16 +32,6 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "src.h"
#include "top.h"
-/* This array does a toupper (), but any valid char type is valid as an
- index and returns identity if not a lower-case character. */
-
-char ffesrc_toupper_[256];
-
-/* This array does a tolower (), but any valid char type is valid as an
- index and returns identity if not an upper-case character. */
-
-char ffesrc_tolower_[256];
-
/* This array is set up so that, given a source-mapped character, the result
of indexing into this array will match an upper-cased character depending
on the source-mapped character's case and the established ffe_case_match()
@@ -113,18 +103,10 @@ ffesrc_init_1 ()
ffesrc_char_match_noninit_[i] = i;
ffesrc_char_source_[i] = i;
ffesrc_char_internal_init_[i] = i;
- ffesrc_toupper_[i] = i;
- ffesrc_tolower_[i] = i;
ffesrc_bad_symbol_init_[i] = FFEBAD;
ffesrc_bad_symbol_noninit_[i] = FFEBAD;
}
- for (i = 'A'; i <= 'Z'; ++i)
- ffesrc_tolower_[i] = tolower (i);
-
- for (i = 'a'; i <= 'z'; ++i)
- ffesrc_toupper_[i] = toupper (i);
-
ffesrc_check_symbol_ = (ffe_case_symbol () != FFE_caseNONE);
ffesrc_ok_match_init_upper_ = (ffe_case_match () != FFE_caseLOWER);
@@ -153,7 +135,7 @@ ffesrc_init_1 ()
if (ffesrc_ok_match_init_lower_)
for (i = 'a'; i <= 'z'; ++i)
- ffesrc_char_match_init_[i] = toupper (i);
+ ffesrc_char_match_init_[i] = TOUPPER (i);
else
for (i = 'a'; i <= 'z'; ++i)
ffesrc_char_match_init_[i] = FFESRC_INVALID_SYMBOL_CHAR_;
@@ -164,21 +146,21 @@ ffesrc_init_1 ()
if (ffesrc_ok_match_noninit_lower_)
for (i = 'a'; i <= 'z'; ++i)
- ffesrc_char_match_noninit_[i] = toupper (i);
+ ffesrc_char_match_noninit_[i] = TOUPPER (i);
else
for (i = 'a'; i <= 'z'; ++i)
ffesrc_char_match_noninit_[i] = FFESRC_INVALID_SYMBOL_CHAR_;
if (ffe_case_source () == FFE_caseLOWER)
for (i = 'A'; i <= 'Z'; ++i)
- ffesrc_char_source_[i] = tolower (i);
+ ffesrc_char_source_[i] = TOLOWER (i);
else if (ffe_case_source () == FFE_caseUPPER)
for (i = 'a'; i <= 'z'; ++i)
- ffesrc_char_source_[i] = toupper (i);
+ ffesrc_char_source_[i] = TOUPPER (i);
if (ffe_case_match () == FFE_caseLOWER)
for (i = 'A'; i <= 'Z'; ++i)
- ffesrc_char_internal_init_[i] = tolower (i);
+ ffesrc_char_internal_init_[i] = TOLOWER (i);
switch (ffe_case_symbol ())
{
@@ -230,8 +212,8 @@ ffesrc_strcmp_1ns2i (ffeCase mcase, const char *var, int len,
for (; len > 0; --len, ++var, ++str_ic)
{
c = ffesrc_char_source (*var); /* Transform source. */
- c = ffesrc_toupper (c); /* Upcase source. */
- d = ffesrc_toupper (*str_ic); /* Upcase InitialCaps char. */
+ c = TOUPPER (c); /* Upcase source. */
+ d = TOUPPER (*str_ic); /* Upcase InitialCaps char. */
if (c != d)
{
if ((d != '\0') && (c < d))
@@ -246,7 +228,7 @@ ffesrc_strcmp_1ns2i (ffeCase mcase, const char *var, int len,
for (; len > 0; --len, ++var, ++str_ic)
{
c = ffesrc_char_source (*var); /* Transform source. */
- d = ffesrc_toupper (*str_ic); /* Transform InitialCaps char. */
+ d = TOUPPER (*str_ic); /* Transform InitialCaps char. */
if (c != d)
{
if ((d != '\0') && (c < d))
@@ -261,7 +243,7 @@ ffesrc_strcmp_1ns2i (ffeCase mcase, const char *var, int len,
for (; len > 0; --len, ++var, ++str_ic)
{
c = ffesrc_char_source (*var); /* Transform source. */
- d = ffesrc_tolower (*str_ic); /* Transform InitialCaps char. */
+ d = TOLOWER (*str_ic); /* Transform InitialCaps char. */
if (c != d)
{
if ((d != '\0') && (c < d))
@@ -279,14 +261,14 @@ ffesrc_strcmp_1ns2i (ffeCase mcase, const char *var, int len,
d = *str_ic; /* No transform of InitialCaps char. */
if (c != d)
{
- c = ffesrc_toupper (c);
- d = ffesrc_toupper (d);
+ c = TOUPPER (c);
+ d = TOUPPER (d);
while ((len > 0) && (c == d))
{ /* Skip past equivalent (case-ins) chars. */
--len, ++var, ++str_ic;
if (len > 0)
- c = ffesrc_toupper (*var);
- d = ffesrc_toupper (*str_ic);
+ c = TOUPPER (*var);
+ d = TOUPPER (*str_ic);
}
if ((d != '\0') && (c < d))
return -1;
@@ -323,7 +305,7 @@ ffesrc_strcmp_2c (ffeCase mcase, const char *var, const char *str_uc,
case FFE_caseNONE:
for (; *var != '\0'; ++var, ++str_uc)
{
- c = ffesrc_toupper (*var); /* Upcase source. */
+ c = TOUPPER (*var); /* Upcase source. */
if (c != *str_uc)
{
if ((*str_uc != '\0') && (c < *str_uc))
@@ -349,11 +331,11 @@ ffesrc_strcmp_2c (ffeCase mcase, const char *var, const char *str_uc,
{
if (*var != *str_ic)
{
- c = ffesrc_toupper (*var);
+ c = TOUPPER (*var);
while ((c != '\0') && (c == *str_uc))
{ /* Skip past equivalent (case-ins) chars. */
++var, ++str_uc;
- c = ffesrc_toupper (*var);
+ c = TOUPPER (*var);
}
if ((*str_uc != '\0') && (c < *str_uc))
return -1;
@@ -393,7 +375,7 @@ ffesrc_strncmp_2c (ffeCase mcase, const char *var, const char *str_uc,
case FFE_caseNONE:
for (; len > 0; ++var, ++str_uc, --len)
{
- c = ffesrc_toupper (*var); /* Upcase source. */
+ c = TOUPPER (*var); /* Upcase source. */
if (c != *str_uc)
{
if (c < *str_uc)
@@ -417,12 +399,12 @@ ffesrc_strncmp_2c (ffeCase mcase, const char *var, const char *str_uc,
{
if (*var != *str_ic)
{
- c = ffesrc_toupper (*var);
+ c = TOUPPER (*var);
while ((len > 0) && (c == *str_uc))
{ /* Skip past equivalent (case-ins) chars. */
--len, ++var, ++str_uc;
if (len > 0)
- c = ffesrc_toupper (*var);
+ c = TOUPPER (*var);
}
if ((len > 0) && (c < *str_uc))
return -1;
diff --git a/contrib/gcc/f/src.h b/contrib/gcc/f/src.h
index 7ba03e0..ce5843e 100644
--- a/contrib/gcc/f/src.h
+++ b/contrib/gcc/f/src.h
@@ -27,14 +27,12 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* Allow multiple inclusion to work. */
-#ifndef _H_f_src
-#define _H_f_src
+#ifndef GCC_F_SRC_H
+#define GCC_F_SRC_H
#include "bad.h"
#include "top.h"
-extern char ffesrc_toupper_[256];
-extern char ffesrc_tolower_[256];
extern char ffesrc_char_match_init_[256];
extern char ffesrc_char_match_noninit_[256];
extern char ffesrc_char_source_[256];
@@ -136,9 +134,7 @@ int ffesrc_strncmp_2c (ffeCase mcase, const char *var, const char *str_uc,
#define ffesrc_terminate_2()
#define ffesrc_terminate_3()
#define ffesrc_terminate_4()
-#define ffesrc_toupper(c) (ffesrc_toupper_[(unsigned int) (c)])
-#define ffesrc_tolower(c) (ffesrc_tolower_[(unsigned int) (c)])
/* End of #include file. */
-#endif
+#endif /* ! GCC_F_SRC_H */
diff --git a/contrib/gcc/f/st.h b/contrib/gcc/f/st.h
index cfcc7be..65b99f9 100644
--- a/contrib/gcc/f/st.h
+++ b/contrib/gcc/f/st.h
@@ -27,8 +27,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* Allow multiple inclusion to work. */
-#ifndef _H_f_st
-#define _H_f_st
+#ifndef GCC_F_ST_H
+#define GCC_F_ST_H
/* Simple definitions and enumerations. */
@@ -78,4 +78,4 @@ void ffest_terminate_4 (void);
/* End of #include file. */
-#endif
+#endif /* ! GCC_F_ST_H */
diff --git a/contrib/gcc/f/sta.c b/contrib/gcc/f/sta.c
index 52cb37b..0b4c11a 100644
--- a/contrib/gcc/f/sta.c
+++ b/contrib/gcc/f/sta.c
@@ -1,5 +1,5 @@
/* sta.c -- Implementation File (module.c template V1.0)
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
Contributed by James Craig Burley.
This file is part of GNU Fortran.
@@ -1452,9 +1452,6 @@ ffesta_eof ()
if (ffe_is_ffedebug ())
{
ffestorag_report ();
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- ffesymbol_report_all ();
-#endif
}
}
@@ -1990,9 +1987,6 @@ ffesta_zero (ffelexToken t)
if (ffe_is_ffedebug ())
{
ffestorag_report ();
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- ffesymbol_report_all ();
-#endif
}
ffelex_set_names (TRUE);
diff --git a/contrib/gcc/f/sta.h b/contrib/gcc/f/sta.h
index 64e1607..cf41777 100644
--- a/contrib/gcc/f/sta.h
+++ b/contrib/gcc/f/sta.h
@@ -27,8 +27,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* Allow multiple inclusion to work. */
-#ifndef _H_f_sta
-#define _H_f_sta
+#ifndef GCC_F_STA_H
+#define GCC_F_STA_H
/* Simple definitions and enumerations. */
@@ -114,4 +114,4 @@ void ffesta_set_outpooldisp (ffestaPooldisp d);
/* End of #include file. */
-#endif
+#endif /* ! GCC_F_STA_H */
diff --git a/contrib/gcc/f/stb.h b/contrib/gcc/f/stb.h
index 6ee761d..a9b3acc 100644
--- a/contrib/gcc/f/stb.h
+++ b/contrib/gcc/f/stb.h
@@ -27,8 +27,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* Allow multiple inclusion to work. */
-#ifndef _H_f_stb
-#define _H_f_stb
+#ifndef GCC_F_STB_H
+#define GCC_F_STB_H
/* Simple definitions and enumerations. */
@@ -250,4 +250,4 @@ ffelexHandler ffestb_V027 (ffelexToken t);
/* End of #include file. */
-#endif
+#endif /* ! GCC_F_STB_H */
diff --git a/contrib/gcc/f/stc.c b/contrib/gcc/f/stc.c
index b89b747..1f17766 100644
--- a/contrib/gcc/f/stc.c
+++ b/contrib/gcc/f/stc.c
@@ -1,5 +1,5 @@
/* stc.c -- Implementation File (module.c template V1.0)
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
Contributed by James Craig Burley.
This file is part of GNU Fortran.
@@ -339,8 +339,8 @@ static void ffestc_shriek_where_ (bool ok);
#if FFESTR_F90
static void ffestc_shriek_wherethen_ (bool ok);
#endif
-static int ffestc_subr_binsrch_ (const char **list, int size, ffestpFile *spec,
- const char *whine);
+static int ffestc_subr_binsrch_ (const char *const *list, int size,
+ ffestpFile *spec, const char *whine);
static ffestvFormat ffestc_subr_format_ (ffestpFile *spec);
static bool ffestc_subr_is_branch_ (ffestpFile *spec);
static bool ffestc_subr_is_format_ (ffestpFile *spec);
@@ -5044,7 +5044,8 @@ ffestc_shriek_wherethen_ (bool ok)
using "etc" as the pick-one-of-these string. */
static int
-ffestc_subr_binsrch_ (const char **list, int size, ffestpFile *spec, const char *whine)
+ffestc_subr_binsrch_ (const char *const *list, int size, ffestpFile *spec,
+ const char *whine)
{
int lowest_tested;
int highest_tested;
@@ -10202,8 +10203,7 @@ ffestc_R904 ()
{
int i;
int expect_file;
- const char *status_strs[]
- =
+ static const char *const status_strs[] =
{
"New",
"Old",
@@ -10211,29 +10211,25 @@ ffestc_R904 ()
"Scratch",
"Unknown"
};
- const char *access_strs[]
- =
+ static const char *const access_strs[] =
{
"Append",
"Direct",
"Keyed",
"Sequential"
};
- const char *blank_strs[]
- =
+ static const char *const blank_strs[] =
{
"Null",
"Zero"
};
- const char *carriagecontrol_strs[]
- =
+ static const char *const carriagecontrol_strs[] =
{
"Fortran",
"List",
"None"
};
- const char *dispose_strs[]
- =
+ static const char *const dispose_strs[] =
{
"Delete",
"Keep",
@@ -10243,42 +10239,36 @@ ffestc_R904 ()
"Submit",
"Submit/Delete"
};
- const char *form_strs[]
- =
+ static const char *const form_strs[] =
{
"Formatted",
"Unformatted"
};
- const char *organization_strs[]
- =
+ static const char *const organization_strs[] =
{
"Indexed",
"Relative",
"Sequential"
};
- const char *position_strs[]
- =
+ static const char *const position_strs[] =
{
"Append",
"AsIs",
"Rewind"
};
- const char *action_strs[]
- =
+ static const char *const action_strs[] =
{
"Read",
"ReadWrite",
"Write"
};
- const char *delim_strs[]
- =
+ static const char *const delim_strs[] =
{
"Apostrophe",
"None",
"Quote"
};
- const char *recordtype_strs[]
- =
+ static const char *const recordtype_strs[] =
{
"Fixed",
"Segmented",
@@ -10287,8 +10277,7 @@ ffestc_R904 ()
"Stream_LF",
"Variable"
};
- const char *pad_strs[]
- =
+ static const char *const pad_strs[] =
{
"No",
"Yes"
@@ -10457,8 +10446,7 @@ ffestc_R904 ()
void
ffestc_R907 ()
{
- const char *status_strs[]
- =
+ static const char *const status_strs[] =
{
"Delete",
"Keep",
diff --git a/contrib/gcc/f/stc.h b/contrib/gcc/f/stc.h
index 12b4783..8b2f7c3 100644
--- a/contrib/gcc/f/stc.h
+++ b/contrib/gcc/f/stc.h
@@ -27,8 +27,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* Allow multiple inclusion to work. */
-#ifndef _H_f_stc
-#define _H_f_stc
+#ifndef GCC_F_STC_H
+#define GCC_F_STC_H
/* Simple definitions and enumerations. */
@@ -357,4 +357,4 @@ void ffestc_any (void);
/* End of #include file. */
-#endif
+#endif /* ! GCC_F_STC_H */
diff --git a/contrib/gcc/f/std.c b/contrib/gcc/f/std.c
index 72037c1..db8c723 100644
--- a/contrib/gcc/f/std.c
+++ b/contrib/gcc/f/std.c
@@ -1,5 +1,5 @@
/* std.c -- Implementation File (module.c template V1.0)
- Copyright (C) 1995, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1996, 2000 Free Software Foundation, Inc.
Contributed by James Craig Burley.
This file is part of GNU Fortran.
@@ -69,7 +69,6 @@ typedef enum
FFESTD_
} ffestdStatelet_;
-#if FFECOM_TWOPASS
typedef enum
{
FFESTD_stmtidENDDOLOOP_,
@@ -134,14 +133,10 @@ typedef enum
FFESTD_stmtid_,
} ffestdStmtId_;
-#endif
-
/* Internal typedefs. */
typedef struct _ffestd_expr_item_ *ffestdExprItem_;
-#if FFECOM_TWOPASS
typedef struct _ffestd_stmt_ *ffestdStmt_;
-#endif
/* Private include files. */
@@ -155,16 +150,13 @@ struct _ffestd_expr_item_
ffelexToken token;
};
-#if FFECOM_TWOPASS
struct _ffestd_stmt_
{
ffestdStmt_ next;
ffestdStmt_ previous;
ffestdStmtId_ id;
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
char *filename;
int filelinenum;
-#endif
union
{
struct
@@ -491,47 +483,36 @@ struct _ffestd_stmt_
u;
};
-#endif
-
/* Static objects accessed by functions in this module. */
static ffestdStatelet_ ffestd_statelet_ = FFESTD_stateletSIMPLE_;
static int ffestd_block_level_ = 0; /* Block level for reachableness. */
static bool ffestd_is_reachable_; /* Is the current stmt reachable? */
static ffelab ffestd_label_formatdef_ = NULL;
-#if FFECOM_TWOPASS
static ffestdExprItem_ *ffestd_expr_list_;
static struct
{
ffestdStmt_ first;
ffestdStmt_ last;
}
-
-ffestd_stmt_list_
-=
+ffestd_stmt_list_ =
{
NULL, NULL
};
-#endif
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
-static int ffestd_2pass_entrypoints_ = 0; /* # ENTRY statements
- pending. */
-#endif
+
+/* # ENTRY statements pending. */
+static int ffestd_2pass_entrypoints_ = 0;
/* Static functions (internal). */
-#if FFECOM_TWOPASS
static void ffestd_stmt_append_ (ffestdStmt_ stmt);
static ffestdStmt_ ffestd_stmt_new_ (ffestdStmtId_ id);
static void ffestd_stmt_pass_ (void);
-#endif
-#if FFESTD_COPY_EASY_ && FFECOM_TWOPASS
+#if FFESTD_COPY_EASY_
static ffestpInquireStmt *ffestd_subr_copy_easy_ (ffestpInquireIx max);
#endif
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static void ffestd_subr_vxt_ (void);
-#endif
#if FFESTR_F90
static void ffestd_subr_f90_ (void);
#endif
@@ -562,7 +543,6 @@ static void ffestd_R1001rtexpr_ (ffests s, ffesttFormatList f, ffebld expr);
/* Internal macros. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
#define ffestd_subr_line_now_() \
ffeste_set_line (ffelex_token_where_filename (ffesta_tokens[0]), \
ffelex_token_where_filelinenum (ffesta_tokens[0]))
@@ -571,13 +551,6 @@ static void ffestd_R1001rtexpr_ (ffests s, ffesttFormatList f, ffebld expr);
#define ffestd_subr_line_save_(s) \
((s)->filename = ffelex_token_where_filename (ffesta_tokens[0]), \
(s)->filelinenum = ffelex_token_where_filelinenum (ffesta_tokens[0]))
-#else
-#define ffestd_subr_line_now_()
-#if FFECOM_TWOPASS
-#define ffestd_subr_line_restore_(s)
-#define ffestd_subr_line_save_(s)
-#endif /* FFECOM_TWOPASS */
-#endif /* FFECOM_targetCURRENT != FFECOM_targetGCC */
#define ffestd_check_simple_() \
assert(ffestd_statelet_ == FFESTD_stateletSIMPLE_)
#define ffestd_check_start_() \
@@ -603,7 +576,7 @@ static void ffestd_R1001rtexpr_ (ffests s, ffesttFormatList f, ffebld expr);
|| ffestd_statelet_ == FFESTD_stateletITEM_); \
ffestd_statelet_ = FFESTD_stateletSIMPLE_
-#if FFESTD_COPY_EASY_ && FFECOM_TWOPASS
+#if FFESTD_COPY_EASY_
#define ffestd_subr_copy_accept_() (ffestpAcceptStmt *) \
ffestd_subr_copy_easy_((ffestpInquireIx) FFESTP_acceptix)
#define ffestd_subr_copy_beru_() (ffestpBeruStmt *) \
@@ -636,7 +609,6 @@ static void ffestd_R1001rtexpr_ (ffests s, ffesttFormatList f, ffebld expr);
ffestd_stmt_append_(ffestd_stmt_new_(FFESTD_stmtidR737A_)); */
-#if FFECOM_TWOPASS
static void
ffestd_stmt_append_ (ffestdStmt_ stmt)
{
@@ -646,13 +618,11 @@ ffestd_stmt_append_ (ffestdStmt_ stmt)
stmt->previous->next = stmt;
}
-#endif
/* ffestd_stmt_new_ -- Make new statement with given id
ffestdStmt_ stmt;
stmt = ffestd_stmt_new_(FFESTD_stmtidR737A_); */
-#if FFECOM_TWOPASS
static ffestdStmt_
ffestd_stmt_new_ (ffestdStmtId_ id)
{
@@ -663,12 +633,10 @@ ffestd_stmt_new_ (ffestdStmtId_ id)
return stmt;
}
-#endif
/* ffestd_stmt_pass_ -- Pass all statements on list to ffeste
ffestd_stmt_pass_(); */
-#if FFECOM_TWOPASS
static void
ffestd_stmt_pass_ ()
{
@@ -676,7 +644,6 @@ ffestd_stmt_pass_ ()
ffestdExprItem_ expr; /* For traversing lists. */
bool okay = (TREE_CODE (current_function_decl) != ERROR_MARK);
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
if ((ffestd_2pass_entrypoints_ != 0) && okay)
{
tree which = ffecom_which_entrypoint_decl ();
@@ -687,7 +654,6 @@ ffestd_stmt_pass_ ()
tree duplicate;
expand_start_case (0, which, TREE_TYPE (which), "entrypoint dispatch");
- push_momentary ();
stmt = ffestd_stmt_list_.first;
do
@@ -709,7 +675,6 @@ ffestd_stmt_pass_ ()
label = ffecom_temp_label ();
TREE_USED (label) = 1;
expand_goto (label);
- clear_momentary ();
ffesymbol_hook (stmt->u.R1226.entry).length_tree = label;
}
@@ -717,11 +682,8 @@ ffestd_stmt_pass_ ()
}
while (--ents != 0);
- pop_momentary ();
expand_end_case (which);
- clear_momentary ();
}
-#endif
for (stmt = ffestd_stmt_list_.first;
stmt != (ffestdStmt_) &ffestd_stmt_list_.first;
@@ -1179,7 +1141,6 @@ ffestd_stmt_pass_ ()
}
}
-#endif
/* ffestd_subr_copy_easy_ -- Copy I/O statement data structure
ffestd_subr_copy_easy_();
@@ -1191,7 +1152,7 @@ ffestd_stmt_pass_ ()
and structure references assume (though not necessarily dangerous if
FALSE) that INQUIRE has the most file elements. */
-#if FFESTD_COPY_EASY_ && FFECOM_TWOPASS
+#if FFESTD_COPY_EASY_
static ffestpInquireStmt *
ffestd_subr_copy_easy_ (ffestpInquireIx max)
{
@@ -1330,7 +1291,6 @@ ffestd_subr_f90_ ()
ffestd_subr_vxt_(); */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static void
ffestd_subr_vxt_ ()
{
@@ -1340,7 +1300,6 @@ ffestd_subr_vxt_ ()
ffebad_finish ();
}
-#endif
/* ffestd_begin_uses -- Start a bunch of USE statements
ffestd_begin_uses();
@@ -1354,12 +1313,6 @@ ffestd_subr_vxt_ ()
void
ffestd_begin_uses ()
{
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("; begin_uses\n", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_do -- End of statement following DO-term-stmt etc
@@ -1375,19 +1328,12 @@ ffestd_begin_uses ()
void
ffestd_do (bool ok UNUSED)
{
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_do (ffestw_stack_top ());
-#else
- {
- ffestdStmt_ stmt;
+ ffestdStmt_ stmt;
- stmt = ffestd_stmt_new_ (FFESTD_stmtidENDDOLOOP_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.enddoloop.block = ffestw_stack_top ();
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidENDDOLOOP_);
+ ffestd_stmt_append_ (stmt);
+ ffestd_subr_line_save_ (stmt);
+ stmt->u.enddoloop.block = ffestw_stack_top ();
--ffestd_block_level_;
assert (ffestd_block_level_ >= 0);
@@ -1404,12 +1350,6 @@ ffestd_do (bool ok UNUSED)
void
ffestd_end_uses (bool ok)
{
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("; end_uses\n", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_end_R740 -- End a WHERE(-THEN)
@@ -1436,18 +1376,11 @@ ffestd_end_R740 (bool ok)
void
ffestd_end_R807 (bool ok UNUSED)
{
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_end_R807 ();
-#else
- {
- ffestdStmt_ stmt;
+ ffestdStmt_ stmt;
- stmt = ffestd_stmt_new_ (FFESTD_stmtidENDLOGIF_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidENDLOGIF_);
+ ffestd_stmt_append_ (stmt);
+ ffestd_subr_line_save_ (stmt);
--ffestd_block_level_;
assert (ffestd_block_level_ >= 0);
@@ -1462,11 +1395,6 @@ ffestd_exec_begin ()
{
ffecom_exec_transition ();
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("{ begin_exec\n", dmpout);
-#endif
-
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
if (ffestd_2pass_entrypoints_ != 0)
{ /* Process pending ENTRY statements now that
info filled in. */
@@ -1488,7 +1416,6 @@ ffestd_exec_begin ()
}
while (--ents != 0);
}
-#endif
}
/* ffestd_exec_end -- Executable statements can no longer come in now
@@ -1498,23 +1425,13 @@ ffestd_exec_begin ()
void
ffestd_exec_end ()
{
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
int old_lineno = lineno;
- char *old_input_filename = input_filename;
-#endif
+ const char *old_input_filename = input_filename;
ffecom_end_transition ();
-#if FFECOM_TWOPASS
ffestd_stmt_pass_ ();
-#endif
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("} end_exec\n", dmpout);
- fputs ("> end_unit\n", dmpout);
-#endif
-
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
ffecom_finish_progunit ();
if (ffestd_2pass_entrypoints_ != 0)
@@ -1543,7 +1460,6 @@ ffestd_exec_end ()
lineno = old_lineno;
input_filename = old_input_filename;
-#endif
}
/* ffestd_init_3 -- Initialize for any program unit
@@ -1553,10 +1469,8 @@ ffestd_exec_end ()
void
ffestd_init_3 ()
{
-#if FFECOM_TWOPASS
ffestd_stmt_list_.first = (ffestdStmt_) &ffestd_stmt_list_.first;
ffestd_stmt_list_.last = (ffestdStmt_) &ffestd_stmt_list_.first;
-#endif
}
/* Generate "code" for "any" label def. */
@@ -1564,12 +1478,6 @@ ffestd_init_3 ()
void
ffestd_labeldef_any (ffelab label UNUSED)
{
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fprintf (dmpout, "; any_label_def %lu\n", ffelab_value (label));
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_labeldef_branch -- Generate "code" for branch label def
@@ -1579,17 +1487,11 @@ ffestd_labeldef_any (ffelab label UNUSED)
void
ffestd_labeldef_branch (ffelab label)
{
-#if FFECOM_ONEPASS
- ffeste_labeldef_branch (label);
-#else
- {
- ffestdStmt_ stmt;
+ ffestdStmt_ stmt;
- stmt = ffestd_stmt_new_ (FFESTD_stmtidEXECLABEL_);
- ffestd_stmt_append_ (stmt);
- stmt->u.execlabel.label = label;
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidEXECLABEL_);
+ ffestd_stmt_append_ (stmt);
+ stmt->u.execlabel.label = label;
ffestd_is_reachable_ = TRUE;
}
@@ -1601,31 +1503,13 @@ ffestd_labeldef_branch (ffelab label)
void
ffestd_labeldef_format (ffelab label)
{
- ffestd_label_formatdef_ = label;
+ ffestdStmt_ stmt;
-#if FFECOM_ONEPASS
- ffeste_labeldef_format (label);
-#else
- {
- ffestdStmt_ stmt;
+ ffestd_label_formatdef_ = label;
- stmt = ffestd_stmt_new_ (FFESTD_stmtidFORMATLABEL_);
-#if 0
- /* Don't bother with this. See FORMAT statement. */
- /* Prepend FORMAT label instead of appending it, so all the
- FORMAT label/statement pairs end up at the top of the list.
- This helps ensure all decls for a block (in the GBE) are
- known before any executable statements are generated. */
- stmt->previous = (ffestdStmt_) &ffestd_stmt_list_.first;
- stmt->next = ffestd_stmt_list_.first;
- stmt->next->previous = stmt;
- stmt->previous->next = stmt;
-#else
- ffestd_stmt_append_ (stmt);
-#endif
- stmt->u.formatlabel.label = label;
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidFORMATLABEL_);
+ ffestd_stmt_append_ (stmt);
+ stmt->u.formatlabel.label = label;
}
/* ffestd_labeldef_useless -- Generate "code" for useless label def
@@ -1635,12 +1519,6 @@ ffestd_labeldef_format (ffelab label)
void
ffestd_labeldef_useless (ffelab label UNUSED)
{
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fprintf (dmpout, "; useless_label_def %lu\n", ffelab_value (label));
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_R423A -- PRIVATE statement (in R422 derived-type statement)
@@ -1652,13 +1530,6 @@ void
ffestd_R423A ()
{
ffestd_check_simple_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("* PRIVATE_derived_type\n", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_R423B -- SEQUENCE statement (in R422 derived-type-stmt)
@@ -1669,13 +1540,6 @@ void
ffestd_R423B ()
{
ffestd_check_simple_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("* SEQUENCE_derived_type\n", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_R424 -- derived-TYPE-def statement
@@ -1724,12 +1588,6 @@ ffestd_R424 (ffelexToken access, ffestrOther access_kw, ffelexToken name)
void
ffestd_R425 (bool ok)
{
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fprintf (dmpout, "* END_TYPE %s\n", ffelex_token_text (ffestw_name (ffestw_stack_top ())));
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_R519_start -- INTENT statement list begin
@@ -2020,13 +1878,6 @@ void
ffestd_R522 ()
{
ffestd_check_simple_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("* SAVE_all\n", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_R522start -- SAVE statement list begin
@@ -2039,13 +1890,6 @@ void
ffestd_R522start ()
{
ffestd_check_start_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("* SAVE ", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_R522item_object -- SAVE statement for object-name
@@ -2058,13 +1902,6 @@ void
ffestd_R522item_object (ffelexToken name UNUSED)
{
ffestd_check_item_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fprintf (dmpout, "%s,", ffelex_token_text (name));
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_R522item_cblock -- SAVE statement for common-block-name
@@ -2077,13 +1914,6 @@ void
ffestd_R522item_cblock (ffelexToken name UNUSED)
{
ffestd_check_item_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fprintf (dmpout, "/%s/,", ffelex_token_text (name));
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_R522finish -- SAVE statement list complete
@@ -2096,13 +1926,6 @@ void
ffestd_R522finish ()
{
ffestd_check_finish_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputc ('\n', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_R524_start -- DIMENSION statement list begin
@@ -2115,16 +1938,6 @@ void
ffestd_R524_start (bool virtual UNUSED)
{
ffestd_check_start_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- if (virtual)
- fputs ("* VIRTUAL ", dmpout); /* V028. */
- else
- fputs ("* DIMENSION ", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_R524_item -- DIMENSION statement for object-name
@@ -2137,16 +1950,6 @@ void
ffestd_R524_item (ffelexToken name UNUSED, ffesttDimList dims UNUSED)
{
ffestd_check_item_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs (ffelex_token_text (name), dmpout);
- fputc ('(', dmpout);
- ffestt_dimlist_dump (dims);
- fputs ("),", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_R524_finish -- DIMENSION statement list complete
@@ -2159,13 +1962,6 @@ void
ffestd_R524_finish ()
{
ffestd_check_finish_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputc ('\n', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_R525_start -- ALLOCATABLE statement list begin
@@ -2369,13 +2165,6 @@ void
ffestd_R537_start ()
{
ffestd_check_start_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("* PARAMETER (", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_R537_item -- PARAMETER statement assignment
@@ -2389,16 +2178,6 @@ void
ffestd_R537_item (ffebld dest UNUSED, ffebld source UNUSED)
{
ffestd_check_item_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- ffebld_dump (dest);
- fputc ('=', dmpout);
- ffebld_dump (source);
- fputc (',', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_R537_finish -- PARAMETER statement list complete
@@ -2411,13 +2190,6 @@ void
ffestd_R537_finish ()
{
ffestd_check_finish_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs (")\n", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_R539 -- IMPLICIT NONE statement
@@ -2430,13 +2202,6 @@ void
ffestd_R539 ()
{
ffestd_check_simple_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("* IMPLICIT_NONE\n", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_R539start -- IMPLICIT statement
@@ -2449,13 +2214,6 @@ void
ffestd_R539start ()
{
ffestd_check_start_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("* IMPLICIT ", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_R539item -- IMPLICIT statement specification (R540)
@@ -2469,88 +2227,7 @@ ffestd_R539item (ffestpType type UNUSED, ffebld kind UNUSED,
ffelexToken kindt UNUSED, ffebld len UNUSED,
ffelexToken lent UNUSED, ffesttImpList letters UNUSED)
{
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- char *a;
-#endif
-
ffestd_check_item_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- switch (type)
- {
- case FFESTP_typeINTEGER:
- a = "INTEGER";
- break;
-
- case FFESTP_typeBYTE:
- a = "BYTE";
- break;
-
- case FFESTP_typeWORD:
- a = "WORD";
- break;
-
- case FFESTP_typeREAL:
- a = "REAL";
- break;
-
- case FFESTP_typeCOMPLEX:
- a = "COMPLEX";
- break;
-
- case FFESTP_typeLOGICAL:
- a = "LOGICAL";
- break;
-
- case FFESTP_typeCHARACTER:
- a = "CHARACTER";
- break;
-
- case FFESTP_typeDBLPRCSN:
- a = "DOUBLE PRECISION";
- break;
-
- case FFESTP_typeDBLCMPLX:
- a = "DOUBLE COMPLEX";
- break;
-
-#if FFESTR_F90
- case FFESTP_typeTYPE:
- a = "TYPE";
- break;
-#endif
-
- default:
- assert (FALSE);
- a = "?";
- break;
- }
- fprintf (dmpout, "%s(", a);
- if (kindt != NULL)
- {
- fputs ("kind=", dmpout);
- if (kind == NULL)
- fputs (ffelex_token_text (kindt), dmpout);
- else
- ffebld_dump (kind);
- if (lent != NULL)
- fputc (',', dmpout);
- }
- if (lent != NULL)
- {
- fputs ("len=", dmpout);
- if (len == NULL)
- fputs (ffelex_token_text (lent), dmpout);
- else
- ffebld_dump (len);
- }
- fputs (")(", dmpout);
- ffestt_implist_dump (letters);
- fputs ("),", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_R539finish -- IMPLICIT statement
@@ -2563,13 +2240,6 @@ void
ffestd_R539finish ()
{
ffestd_check_finish_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputc ('\n', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_R542_start -- NAMELIST statement list begin
@@ -2582,13 +2252,6 @@ void
ffestd_R542_start ()
{
ffestd_check_start_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("* NAMELIST ", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_R542_item_nlist -- NAMELIST statement for group-name
@@ -2601,13 +2264,6 @@ void
ffestd_R542_item_nlist (ffelexToken name UNUSED)
{
ffestd_check_item_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fprintf (dmpout, "/%s/", ffelex_token_text (name));
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_R542_item_nitem -- NAMELIST statement for variable-name
@@ -2620,13 +2276,6 @@ void
ffestd_R542_item_nitem (ffelexToken name UNUSED)
{
ffestd_check_item_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fprintf (dmpout, "%s,", ffelex_token_text (name));
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_R542_finish -- NAMELIST statement list complete
@@ -2639,13 +2288,6 @@ void
ffestd_R542_finish ()
{
ffestd_check_finish_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputc ('\n', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_R544_start -- EQUIVALENCE statement list begin
@@ -2660,13 +2302,6 @@ void
ffestd_R544_start ()
{
ffestd_check_start_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("* EQUIVALENCE (", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
#endif
@@ -2681,14 +2316,6 @@ void
ffestd_R544_item (ffesttExprList exprlist)
{
ffestd_check_item_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- ffestt_exprlist_dump (exprlist);
- fputs ("),", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
#endif
@@ -2703,13 +2330,6 @@ void
ffestd_R544_finish ()
{
ffestd_check_finish_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs (")\n", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
#endif
@@ -2723,13 +2343,6 @@ void
ffestd_R547_start ()
{
ffestd_check_start_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("* COMMON ", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_R547_item_object -- COMMON statement for object-name
@@ -2743,20 +2356,6 @@ ffestd_R547_item_object (ffelexToken name UNUSED,
ffesttDimList dims UNUSED)
{
ffestd_check_item_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs (ffelex_token_text (name), dmpout);
- if (dims != NULL)
- {
- fputc ('(', dmpout);
- ffestt_dimlist_dump (dims);
- fputc (')', dmpout);
- }
- fputc (',', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_R547_item_cblock -- COMMON statement for common-block-name
@@ -2769,16 +2368,6 @@ void
ffestd_R547_item_cblock (ffelexToken name UNUSED)
{
ffestd_check_item_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- if (name == NULL)
- fputs ("//,", dmpout);
- else
- fprintf (dmpout, "/%s/,", ffelex_token_text (name));
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_R547_finish -- COMMON statement list complete
@@ -2791,13 +2380,6 @@ void
ffestd_R547_finish ()
{
ffestd_check_finish_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputc ('\n', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_R620 -- ALLOCATE statement
@@ -2813,18 +2395,6 @@ ffestd_R620 (ffesttExprList exprlist, ffebld stat)
ffestd_check_simple_ ();
ffestd_subr_f90_ ();
- return;
-
-#ifdef FFESTD_F90
- fputs ("+ ALLOCATE (", dmpout);
- ffestt_exprlist_dump (exprlist);
- if (stat != NULL)
- {
- fputs (",stat=", dmpout);
- ffebld_dump (stat);
- }
- fputs (")\n", dmpout);
-#endif
}
/* ffestd_R624 -- NULLIFY statement
@@ -2861,18 +2431,6 @@ ffestd_R625 (ffesttExprList exprlist, ffebld stat)
ffestd_check_simple_ ();
ffestd_subr_f90_ ();
- return;
-
-#ifdef FFESTD_F90
- fputs ("+ DEALLOCATE (", dmpout);
- ffestt_exprlist_dump (exprlist);
- if (stat != NULL)
- {
- fputs (",stat=", dmpout);
- ffebld_dump (stat);
- }
- fputs (")\n", dmpout);
-#endif
}
#endif
@@ -2883,24 +2441,17 @@ ffestd_R625 (ffesttExprList exprlist, ffebld stat)
void
ffestd_R737A (ffebld dest, ffebld source)
{
+ ffestdStmt_ stmt;
+
ffestd_check_simple_ ();
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_R737A (dest, source);
-#else
- {
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR737A_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R737A.pool = ffesta_output_pool;
- stmt->u.R737A.dest = dest;
- stmt->u.R737A.source = source;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidR737A_);
+ ffestd_stmt_append_ (stmt);
+ ffestd_subr_line_save_ (stmt);
+ stmt->u.R737A.pool = ffesta_output_pool;
+ stmt->u.R737A.dest = dest;
+ stmt->u.R737A.source = source;
+ ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
}
/* ffestd_R737B -- Assignment statement inside of WHERE
@@ -2912,16 +2463,6 @@ void
ffestd_R737B (ffebld dest, ffebld source)
{
ffestd_check_simple_ ();
-
- return; /* F90. */
-
-#ifdef FFESTD_F90
- fputs ("+ let_inside_where ", dmpout);
- ffebld_dump (dest);
- fputs ("=", dmpout);
- ffebld_dump (source);
- fputc ('\n', dmpout);
-#endif
}
/* ffestd_R738 -- Pointer assignment statement
@@ -2936,15 +2477,6 @@ ffestd_R738 (ffebld dest, ffebld source)
ffestd_check_simple_ ();
ffestd_subr_f90_ ();
- return;
-
-#ifdef FFESTD_F90
- fputs ("+ let_pointer ", dmpout);
- ffebld_dump (dest);
- fputs ("=>", dmpout);
- ffebld_dump (source);
- fputc ('\n', dmpout);
-#endif
}
/* ffestd_R740 -- WHERE statement
@@ -2959,16 +2491,6 @@ ffestd_R740 (ffebld expr)
ffestd_check_simple_ ();
ffestd_subr_f90_ ();
- return;
-
-#ifdef FFESTD_F90
- fputs ("+ WHERE (", dmpout);
- ffebld_dump (expr);
- fputs (")\n", dmpout);
-
- ++ffestd_block_level_;
- assert (ffestd_block_level_ > 0);
-#endif
}
/* ffestd_R742 -- WHERE-construct statement
@@ -2983,16 +2505,6 @@ ffestd_R742 (ffebld expr)
ffestd_check_simple_ ();
ffestd_subr_f90_ ();
- return;
-
-#ifdef FFESTD_F90
- fputs ("+ WHERE_construct (", dmpout);
- ffebld_dump (expr);
- fputs (")\n", dmpout);
-
- ++ffestd_block_level_;
- assert (ffestd_block_level_ > 0);
-#endif
}
/* ffestd_R744 -- ELSE WHERE statement
@@ -3036,24 +2548,17 @@ ffestd_R745 (bool ok)
void
ffestd_R803 (ffelexToken construct_name UNUSED, ffebld expr)
{
+ ffestdStmt_ stmt;
+
ffestd_check_simple_ ();
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_R803 (expr); /* Don't bother with name. */
-#else
- {
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR803_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R803.pool = ffesta_output_pool;
- stmt->u.R803.block = ffestw_use (ffestw_stack_top ());
- stmt->u.R803.expr = expr;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidR803_);
+ ffestd_stmt_append_ (stmt);
+ ffestd_subr_line_save_ (stmt);
+ stmt->u.R803.pool = ffesta_output_pool;
+ stmt->u.R803.block = ffestw_use (ffestw_stack_top ());
+ stmt->u.R803.expr = expr;
+ ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
++ffestd_block_level_;
assert (ffestd_block_level_ > 0);
@@ -3064,24 +2569,17 @@ ffestd_R803 (ffelexToken construct_name UNUSED, ffebld expr)
void
ffestd_R804 (ffebld expr, ffelexToken name UNUSED)
{
+ ffestdStmt_ stmt;
+
ffestd_check_simple_ ();
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_R804 (expr); /* Don't bother with name. */
-#else
- {
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR804_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R804.pool = ffesta_output_pool;
- stmt->u.R804.block = ffestw_use (ffestw_stack_top ());
- stmt->u.R804.expr = expr;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidR804_);
+ ffestd_stmt_append_ (stmt);
+ ffestd_subr_line_save_ (stmt);
+ stmt->u.R804.pool = ffesta_output_pool;
+ stmt->u.R804.block = ffestw_use (ffestw_stack_top ());
+ stmt->u.R804.expr = expr;
+ ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
}
/* ELSE statement. */
@@ -3089,21 +2587,14 @@ ffestd_R804 (ffebld expr, ffelexToken name UNUSED)
void
ffestd_R805 (ffelexToken name UNUSED)
{
- ffestd_check_simple_ ();
+ ffestdStmt_ stmt;
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_R805 (); /* Don't bother with name. */
-#else
- {
- ffestdStmt_ stmt;
+ ffestd_check_simple_ ();
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR805_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R805.block = ffestw_use (ffestw_stack_top ());
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidR805_);
+ ffestd_stmt_append_ (stmt);
+ ffestd_subr_line_save_ (stmt);
+ stmt->u.R805.block = ffestw_use (ffestw_stack_top ());
}
/* END IF statement. */
@@ -3111,19 +2602,12 @@ ffestd_R805 (ffelexToken name UNUSED)
void
ffestd_R806 (bool ok UNUSED)
{
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_R806 ();
-#else
- {
- ffestdStmt_ stmt;
+ ffestdStmt_ stmt;
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR806_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R806.block = ffestw_use (ffestw_stack_top ());
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidR806_);
+ ffestd_stmt_append_ (stmt);
+ ffestd_subr_line_save_ (stmt);
+ stmt->u.R806.block = ffestw_use (ffestw_stack_top ());
--ffestd_block_level_;
assert (ffestd_block_level_ >= 0);
@@ -3138,23 +2622,16 @@ ffestd_R806 (bool ok UNUSED)
void
ffestd_R807 (ffebld expr)
{
+ ffestdStmt_ stmt;
+
ffestd_check_simple_ ();
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_R807 (expr);
-#else
- {
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR807_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R807.pool = ffesta_output_pool;
- stmt->u.R807.expr = expr;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidR807_);
+ ffestd_stmt_append_ (stmt);
+ ffestd_subr_line_save_ (stmt);
+ stmt->u.R807.pool = ffesta_output_pool;
+ stmt->u.R807.expr = expr;
+ ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
++ffestd_block_level_;
assert (ffestd_block_level_ > 0);
@@ -3169,25 +2646,18 @@ ffestd_R807 (ffebld expr)
void
ffestd_R809 (ffelexToken construct_name UNUSED, ffebld expr)
{
+ ffestdStmt_ stmt;
+
ffestd_check_simple_ ();
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_R809 (ffestw_stack_top (), expr);
-#else
- {
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR809_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R809.pool = ffesta_output_pool;
- stmt->u.R809.block = ffestw_use (ffestw_stack_top ());
- stmt->u.R809.expr = expr;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
- malloc_pool_use (ffestw_select (ffestw_stack_top ())->pool);
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidR809_);
+ ffestd_stmt_append_ (stmt);
+ ffestd_subr_line_save_ (stmt);
+ stmt->u.R809.pool = ffesta_output_pool;
+ stmt->u.R809.block = ffestw_use (ffestw_stack_top ());
+ stmt->u.R809.expr = expr;
+ ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
+ malloc_pool_use (ffestw_select (ffestw_stack_top ())->pool);
++ffestd_block_level_;
assert (ffestd_block_level_ > 0);
@@ -3204,24 +2674,17 @@ ffestd_R809 (ffelexToken construct_name UNUSED, ffebld expr)
void
ffestd_R810 (unsigned long casenum)
{
+ ffestdStmt_ stmt;
+
ffestd_check_simple_ ();
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_R810 (ffestw_stack_top (), casenum);
-#else
- {
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR810_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R810.pool = ffesta_output_pool;
- stmt->u.R810.block = ffestw_stack_top ();
- stmt->u.R810.casenum = casenum;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidR810_);
+ ffestd_stmt_append_ (stmt);
+ ffestd_subr_line_save_ (stmt);
+ stmt->u.R810.pool = ffesta_output_pool;
+ stmt->u.R810.block = ffestw_stack_top ();
+ stmt->u.R810.casenum = casenum;
+ ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
}
/* ffestd_R811 -- End a SELECT
@@ -3231,19 +2694,12 @@ ffestd_R810 (unsigned long casenum)
void
ffestd_R811 (bool ok UNUSED)
{
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_R811 (ffestw_stack_top ());
-#else
- {
- ffestdStmt_ stmt;
+ ffestdStmt_ stmt;
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR811_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R811.block = ffestw_stack_top ();
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidR811_);
+ ffestd_stmt_append_ (stmt);
+ ffestd_subr_line_save_ (stmt);
+ stmt->u.R811.block = ffestw_stack_top ();
--ffestd_block_level_;
assert (ffestd_block_level_ >= 0);
@@ -3261,33 +2717,25 @@ ffestd_R819A (ffelexToken construct_name UNUSED, ffelab label,
ffebld end, ffelexToken end_token,
ffebld incr, ffelexToken incr_token)
{
+ ffestdStmt_ stmt;
+
ffestd_check_simple_ ();
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_R819A (ffestw_stack_top (), label, var, start, end, incr,
- incr_token);
-#else
- {
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR819A_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R819A.pool = ffesta_output_pool;
- stmt->u.R819A.block = ffestw_use (ffestw_stack_top ());
- stmt->u.R819A.label = label;
- stmt->u.R819A.var = var;
- stmt->u.R819A.start = start;
- stmt->u.R819A.start_token = ffelex_token_use (start_token);
- stmt->u.R819A.end = end;
- stmt->u.R819A.end_token = ffelex_token_use (end_token);
- stmt->u.R819A.incr = incr;
- stmt->u.R819A.incr_token = (incr_token == NULL) ? NULL
- : ffelex_token_use (incr_token);
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidR819A_);
+ ffestd_stmt_append_ (stmt);
+ ffestd_subr_line_save_ (stmt);
+ stmt->u.R819A.pool = ffesta_output_pool;
+ stmt->u.R819A.block = ffestw_use (ffestw_stack_top ());
+ stmt->u.R819A.label = label;
+ stmt->u.R819A.var = var;
+ stmt->u.R819A.start = start;
+ stmt->u.R819A.start_token = ffelex_token_use (start_token);
+ stmt->u.R819A.end = end;
+ stmt->u.R819A.end_token = ffelex_token_use (end_token);
+ stmt->u.R819A.incr = incr;
+ stmt->u.R819A.incr_token = (incr_token == NULL) ? NULL
+ : ffelex_token_use (incr_token);
+ ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
++ffestd_block_level_;
assert (ffestd_block_level_ > 0);
@@ -3303,25 +2751,18 @@ void
ffestd_R819B (ffelexToken construct_name UNUSED, ffelab label,
ffebld expr)
{
+ ffestdStmt_ stmt;
+
ffestd_check_simple_ ();
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_R819B (ffestw_stack_top (), label, expr);
-#else
- {
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR819B_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R819B.pool = ffesta_output_pool;
- stmt->u.R819B.block = ffestw_use (ffestw_stack_top ());
- stmt->u.R819B.label = label;
- stmt->u.R819B.expr = expr;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidR819B_);
+ ffestd_stmt_append_ (stmt);
+ ffestd_subr_line_save_ (stmt);
+ stmt->u.R819B.pool = ffesta_output_pool;
+ stmt->u.R819B.block = ffestw_use (ffestw_stack_top ());
+ stmt->u.R819B.label = label;
+ stmt->u.R819B.expr = expr;
+ ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
++ffestd_block_level_;
assert (ffestd_block_level_ > 0);
@@ -3341,20 +2782,13 @@ ffestd_R819B (ffelexToken construct_name UNUSED, ffelab label,
void
ffestd_R825 (ffelexToken name UNUSED)
{
- ffestd_check_simple_ ();
+ ffestdStmt_ stmt;
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_R825 ();
-#else
- {
- ffestdStmt_ stmt;
+ ffestd_check_simple_ ();
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR825_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidR825_);
+ ffestd_stmt_append_ (stmt);
+ ffestd_subr_line_save_ (stmt);
}
/* ffestd_R834 -- CYCLE statement
@@ -3366,21 +2800,14 @@ ffestd_R825 (ffelexToken name UNUSED)
void
ffestd_R834 (ffestw block)
{
- ffestd_check_simple_ ();
+ ffestdStmt_ stmt;
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_R834 (block);
-#else
- {
- ffestdStmt_ stmt;
+ ffestd_check_simple_ ();
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR834_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R834.block = block;
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidR834_);
+ ffestd_stmt_append_ (stmt);
+ ffestd_subr_line_save_ (stmt);
+ stmt->u.R834.block = block;
}
/* ffestd_R835 -- EXIT statement
@@ -3392,21 +2819,14 @@ ffestd_R834 (ffestw block)
void
ffestd_R835 (ffestw block)
{
- ffestd_check_simple_ ();
+ ffestdStmt_ stmt;
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_R835 (block);
-#else
- {
- ffestdStmt_ stmt;
+ ffestd_check_simple_ ();
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR835_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R835.block = block;
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidR835_);
+ ffestd_stmt_append_ (stmt);
+ ffestd_subr_line_save_ (stmt);
+ stmt->u.R835.block = block;
}
/* ffestd_R836 -- GOTO statement
@@ -3419,21 +2839,14 @@ ffestd_R835 (ffestw block)
void
ffestd_R836 (ffelab label)
{
- ffestd_check_simple_ ();
+ ffestdStmt_ stmt;
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_R836 (label);
-#else
- {
- ffestdStmt_ stmt;
+ ffestd_check_simple_ ();
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR836_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R836.label = label;
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidR836_);
+ ffestd_stmt_append_ (stmt);
+ ffestd_subr_line_save_ (stmt);
+ stmt->u.R836.label = label;
if (ffestd_block_level_ == 0)
ffestd_is_reachable_ = FALSE;
@@ -3449,25 +2862,18 @@ ffestd_R836 (ffelab label)
void
ffestd_R837 (ffelab *labels, int count, ffebld expr)
{
+ ffestdStmt_ stmt;
+
ffestd_check_simple_ ();
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_R837 (labels, count, expr);
-#else
- {
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR837_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R837.pool = ffesta_output_pool;
- stmt->u.R837.labels = labels;
- stmt->u.R837.count = count;
- stmt->u.R837.expr = expr;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidR837_);
+ ffestd_stmt_append_ (stmt);
+ ffestd_subr_line_save_ (stmt);
+ stmt->u.R837.pool = ffesta_output_pool;
+ stmt->u.R837.labels = labels;
+ stmt->u.R837.count = count;
+ stmt->u.R837.expr = expr;
+ ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
}
/* ffestd_R838 -- ASSIGN statement
@@ -3482,24 +2888,17 @@ ffestd_R837 (ffelab *labels, int count, ffebld expr)
void
ffestd_R838 (ffelab label, ffebld target)
{
+ ffestdStmt_ stmt;
+
ffestd_check_simple_ ();
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_R838 (label, target);
-#else
- {
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR838_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R838.pool = ffesta_output_pool;
- stmt->u.R838.label = label;
- stmt->u.R838.target = target;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidR838_);
+ ffestd_stmt_append_ (stmt);
+ ffestd_subr_line_save_ (stmt);
+ stmt->u.R838.pool = ffesta_output_pool;
+ stmt->u.R838.label = label;
+ stmt->u.R838.target = target;
+ ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
}
/* ffestd_R839 -- Assigned GOTO statement
@@ -3512,23 +2911,16 @@ ffestd_R838 (ffelab label, ffebld target)
void
ffestd_R839 (ffebld target, ffelab *labels UNUSED, int count UNUSED)
{
+ ffestdStmt_ stmt;
+
ffestd_check_simple_ ();
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_R839 (target);
-#else
- {
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR839_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R839.pool = ffesta_output_pool;
- stmt->u.R839.target = target;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidR839_);
+ ffestd_stmt_append_ (stmt);
+ ffestd_subr_line_save_ (stmt);
+ stmt->u.R839.pool = ffesta_output_pool;
+ stmt->u.R839.target = target;
+ ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
if (ffestd_block_level_ == 0)
ffestd_is_reachable_ = FALSE;
@@ -3543,26 +2935,19 @@ ffestd_R839 (ffebld target, ffelab *labels UNUSED, int count UNUSED)
void
ffestd_R840 (ffebld expr, ffelab neg, ffelab zero, ffelab pos)
{
+ ffestdStmt_ stmt;
+
ffestd_check_simple_ ();
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_R840 (expr, neg, zero, pos);
-#else
- {
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR840_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R840.pool = ffesta_output_pool;
- stmt->u.R840.expr = expr;
- stmt->u.R840.neg = neg;
- stmt->u.R840.zero = zero;
- stmt->u.R840.pos = pos;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidR840_);
+ ffestd_stmt_append_ (stmt);
+ ffestd_subr_line_save_ (stmt);
+ stmt->u.R840.pool = ffesta_output_pool;
+ stmt->u.R840.expr = expr;
+ stmt->u.R840.neg = neg;
+ stmt->u.R840.zero = zero;
+ stmt->u.R840.pos = pos;
+ ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
if (ffestd_block_level_ == 0)
ffestd_is_reachable_ = FALSE;
@@ -3575,20 +2960,13 @@ ffestd_R840 (ffebld expr, ffelab neg, ffelab zero, ffelab pos)
void
ffestd_R841 (bool in_where UNUSED)
{
- ffestd_check_simple_ ();
+ ffestdStmt_ stmt;
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_R841 ();
-#else
- {
- ffestdStmt_ stmt;
+ ffestd_check_simple_ ();
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR841_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidR841_);
+ ffestd_stmt_append_ (stmt);
+ ffestd_subr_line_save_ (stmt);
}
/* ffestd_R842 -- STOP statement
@@ -3598,36 +2976,29 @@ ffestd_R841 (bool in_where UNUSED)
void
ffestd_R842 (ffebld expr)
{
- ffestd_check_simple_ ();
+ ffestdStmt_ stmt;
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_R842 (expr);
-#else
- {
- ffestdStmt_ stmt;
+ ffestd_check_simple_ ();
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR842_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- if (ffesta_outpooldisp () == FFESTA_pooldispPRESERVE)
- {
- /* This is a "spurious" (automatically-generated) STOP
- that follows a previous STOP or other statement.
- Make sure we don't have an expression in the pool,
- and then mark that the pool has already been killed. */
- assert (expr == NULL);
- stmt->u.R842.pool = NULL;
- stmt->u.R842.expr = NULL;
- }
- else
- {
- stmt->u.R842.pool = ffesta_output_pool;
- stmt->u.R842.expr = expr;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
- }
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidR842_);
+ ffestd_stmt_append_ (stmt);
+ ffestd_subr_line_save_ (stmt);
+ if (ffesta_outpooldisp () == FFESTA_pooldispPRESERVE)
+ {
+ /* This is a "spurious" (automatically-generated) STOP
+ that follows a previous STOP or other statement.
+ Make sure we don't have an expression in the pool,
+ and then mark that the pool has already been killed. */
+ assert (expr == NULL);
+ stmt->u.R842.pool = NULL;
+ stmt->u.R842.expr = NULL;
+ }
+ else
+ {
+ stmt->u.R842.pool = ffesta_output_pool;
+ stmt->u.R842.expr = expr;
+ ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
+ }
if (ffestd_block_level_ == 0)
ffestd_is_reachable_ = FALSE;
@@ -3643,23 +3014,16 @@ ffestd_R842 (ffebld expr)
void
ffestd_R843 (ffebld expr)
{
+ ffestdStmt_ stmt;
+
ffestd_check_simple_ ();
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_R843 (expr);
-#else
- {
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR843_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R843.pool = ffesta_output_pool;
- stmt->u.R843.expr = expr;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidR843_);
+ ffestd_stmt_append_ (stmt);
+ ffestd_subr_line_save_ (stmt);
+ stmt->u.R843.pool = ffesta_output_pool;
+ stmt->u.R843.expr = expr;
+ ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
}
/* ffestd_R904 -- OPEN statement
@@ -3671,9 +3035,10 @@ ffestd_R843 (ffebld expr)
void
ffestd_R904 ()
{
+ ffestdStmt_ stmt;
+
ffestd_check_simple_ ();
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
#define specified(something) \
(ffestp_file.open.open_spec[something].kw_or_val_present)
@@ -3707,23 +3072,13 @@ ffestd_R904 ()
}
#undef specified
-#endif
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_R904 (&ffestp_file.open);
-#else
- {
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR904_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R904.pool = ffesta_output_pool;
- stmt->u.R904.params = ffestd_subr_copy_open_ ();
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidR904_);
+ ffestd_stmt_append_ (stmt);
+ ffestd_subr_line_save_ (stmt);
+ stmt->u.R904.pool = ffesta_output_pool;
+ stmt->u.R904.params = ffestd_subr_copy_open_ ();
+ ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
}
/* ffestd_R907 -- CLOSE statement
@@ -3735,23 +3090,16 @@ ffestd_R904 ()
void
ffestd_R907 ()
{
+ ffestdStmt_ stmt;
+
ffestd_check_simple_ ();
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_R907 (&ffestp_file.close);
-#else
- {
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR907_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R907.pool = ffesta_output_pool;
- stmt->u.R907.params = ffestd_subr_copy_close_ ();
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidR907_);
+ ffestd_stmt_append_ (stmt);
+ ffestd_subr_line_save_ (stmt);
+ stmt->u.R907.pool = ffesta_output_pool;
+ stmt->u.R907.params = ffestd_subr_copy_close_ ();
+ ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
}
/* ffestd_R909_start -- READ(...) statement list begin
@@ -3765,9 +3113,10 @@ void
ffestd_R909_start (bool only_format, ffestvUnit unit,
ffestvFormat format, bool rec, bool key)
{
+ ffestdStmt_ stmt;
+
ffestd_check_start_ ();
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
#define specified(something) \
(ffestp_file.read.read_spec[something].kw_or_val_present)
@@ -3788,30 +3137,20 @@ ffestd_R909_start (bool only_format, ffestvUnit unit,
}
#undef specified
-#endif
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_R909_start (&ffestp_file.read, only_format, unit, format, rec, key);
-#else
- {
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR909_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R909.pool = ffesta_output_pool;
- stmt->u.R909.params = ffestd_subr_copy_read_ ();
- stmt->u.R909.only_format = only_format;
- stmt->u.R909.unit = unit;
- stmt->u.R909.format = format;
- stmt->u.R909.rec = rec;
- stmt->u.R909.key = key;
- stmt->u.R909.list = NULL;
- ffestd_expr_list_ = &stmt->u.R909.list;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidR909_);
+ ffestd_stmt_append_ (stmt);
+ ffestd_subr_line_save_ (stmt);
+ stmt->u.R909.pool = ffesta_output_pool;
+ stmt->u.R909.params = ffestd_subr_copy_read_ ();
+ stmt->u.R909.only_format = only_format;
+ stmt->u.R909.unit = unit;
+ stmt->u.R909.format = format;
+ stmt->u.R909.rec = rec;
+ stmt->u.R909.key = key;
+ stmt->u.R909.list = NULL;
+ ffestd_expr_list_ = &stmt->u.R909.list;
+ ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
}
/* ffestd_R909_item -- READ statement i/o item
@@ -3823,23 +3162,18 @@ ffestd_R909_start (bool only_format, ffestvUnit unit,
void
ffestd_R909_item (ffebld expr, ffelexToken expr_token)
{
+ ffestdExprItem_ item;
+
ffestd_check_item_ ();
-#if FFECOM_ONEPASS
- ffeste_R909_item (expr);
-#else
- {
- ffestdExprItem_ item
- = (ffestdExprItem_) malloc_new_kp (ffesta_output_pool, "ffestdExprItem_",
- sizeof (*item));
-
- item->next = NULL;
- item->expr = expr;
- item->token = ffelex_token_use (expr_token);
- *ffestd_expr_list_ = item;
- ffestd_expr_list_ = &item->next;
- }
-#endif
+ item = (ffestdExprItem_) malloc_new_kp (ffesta_output_pool,
+ "ffestdExprItem_", sizeof (*item));
+
+ item->next = NULL;
+ item->expr = expr;
+ item->token = ffelex_token_use (expr_token);
+ *ffestd_expr_list_ = item;
+ ffestd_expr_list_ = &item->next;
}
/* ffestd_R909_finish -- READ statement list complete
@@ -3852,12 +3186,6 @@ void
ffestd_R909_finish ()
{
ffestd_check_finish_ ();
-
-#if FFECOM_ONEPASS
- ffeste_R909_finish ();
-#else
- /* Nothing to do, it's implicit. */
-#endif
}
/* ffestd_R910_start -- WRITE(...) statement list begin
@@ -3870,9 +3198,10 @@ ffestd_R909_finish ()
void
ffestd_R910_start (ffestvUnit unit, ffestvFormat format, bool rec)
{
+ ffestdStmt_ stmt;
+
ffestd_check_start_ ();
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
#define specified(something) \
(ffestp_file.write.write_spec[something].kw_or_val_present)
@@ -3887,28 +3216,18 @@ ffestd_R910_start (ffestvUnit unit, ffestvFormat format, bool rec)
}
#undef specified
-#endif
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_R910_start (&ffestp_file.write, unit, format, rec);
-#else
- {
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR910_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R910.pool = ffesta_output_pool;
- stmt->u.R910.params = ffestd_subr_copy_write_ ();
- stmt->u.R910.unit = unit;
- stmt->u.R910.format = format;
- stmt->u.R910.rec = rec;
- stmt->u.R910.list = NULL;
- ffestd_expr_list_ = &stmt->u.R910.list;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidR910_);
+ ffestd_stmt_append_ (stmt);
+ ffestd_subr_line_save_ (stmt);
+ stmt->u.R910.pool = ffesta_output_pool;
+ stmt->u.R910.params = ffestd_subr_copy_write_ ();
+ stmt->u.R910.unit = unit;
+ stmt->u.R910.format = format;
+ stmt->u.R910.rec = rec;
+ stmt->u.R910.list = NULL;
+ ffestd_expr_list_ = &stmt->u.R910.list;
+ ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
}
/* ffestd_R910_item -- WRITE statement i/o item
@@ -3920,23 +3239,18 @@ ffestd_R910_start (ffestvUnit unit, ffestvFormat format, bool rec)
void
ffestd_R910_item (ffebld expr, ffelexToken expr_token)
{
+ ffestdExprItem_ item;
+
ffestd_check_item_ ();
-#if FFECOM_ONEPASS
- ffeste_R910_item (expr);
-#else
- {
- ffestdExprItem_ item
- = (ffestdExprItem_) malloc_new_kp (ffesta_output_pool, "ffestdExprItem_",
- sizeof (*item));
-
- item->next = NULL;
- item->expr = expr;
- item->token = ffelex_token_use (expr_token);
- *ffestd_expr_list_ = item;
- ffestd_expr_list_ = &item->next;
- }
-#endif
+ item = (ffestdExprItem_) malloc_new_kp (ffesta_output_pool,
+ "ffestdExprItem_", sizeof (*item));
+
+ item->next = NULL;
+ item->expr = expr;
+ item->token = ffelex_token_use (expr_token);
+ *ffestd_expr_list_ = item;
+ ffestd_expr_list_ = &item->next;
}
/* ffestd_R910_finish -- WRITE statement list complete
@@ -3949,12 +3263,6 @@ void
ffestd_R910_finish ()
{
ffestd_check_finish_ ();
-
-#if FFECOM_ONEPASS
- ffeste_R910_finish ();
-#else
- /* Nothing to do, it's implicit. */
-#endif
}
/* ffestd_R911_start -- PRINT statement list begin
@@ -3967,26 +3275,19 @@ ffestd_R910_finish ()
void
ffestd_R911_start (ffestvFormat format)
{
+ ffestdStmt_ stmt;
+
ffestd_check_start_ ();
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_R911_start (&ffestp_file.print, format);
-#else
- {
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR911_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R911.pool = ffesta_output_pool;
- stmt->u.R911.params = ffestd_subr_copy_print_ ();
- stmt->u.R911.format = format;
- stmt->u.R911.list = NULL;
- ffestd_expr_list_ = &stmt->u.R911.list;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidR911_);
+ ffestd_stmt_append_ (stmt);
+ ffestd_subr_line_save_ (stmt);
+ stmt->u.R911.pool = ffesta_output_pool;
+ stmt->u.R911.params = ffestd_subr_copy_print_ ();
+ stmt->u.R911.format = format;
+ stmt->u.R911.list = NULL;
+ ffestd_expr_list_ = &stmt->u.R911.list;
+ ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
}
/* ffestd_R911_item -- PRINT statement i/o item
@@ -3998,23 +3299,18 @@ ffestd_R911_start (ffestvFormat format)
void
ffestd_R911_item (ffebld expr, ffelexToken expr_token)
{
+ ffestdExprItem_ item;
+
ffestd_check_item_ ();
-#if FFECOM_ONEPASS
- ffeste_R911_item (expr);
-#else
- {
- ffestdExprItem_ item
- = (ffestdExprItem_) malloc_new_kp (ffesta_output_pool, "ffestdExprItem_",
- sizeof (*item));
-
- item->next = NULL;
- item->expr = expr;
- item->token = ffelex_token_use (expr_token);
- *ffestd_expr_list_ = item;
- ffestd_expr_list_ = &item->next;
- }
-#endif
+ item = (ffestdExprItem_) malloc_new_kp (ffesta_output_pool,
+ "ffestdExprItem_", sizeof (*item));
+
+ item->next = NULL;
+ item->expr = expr;
+ item->token = ffelex_token_use (expr_token);
+ *ffestd_expr_list_ = item;
+ ffestd_expr_list_ = &item->next;
}
/* ffestd_R911_finish -- PRINT statement list complete
@@ -4027,12 +3323,6 @@ void
ffestd_R911_finish ()
{
ffestd_check_finish_ ();
-
-#if FFECOM_ONEPASS
- ffeste_R911_finish ();
-#else
- /* Nothing to do, it's implicit. */
-#endif
}
/* ffestd_R919 -- BACKSPACE statement
@@ -4044,23 +3334,16 @@ ffestd_R911_finish ()
void
ffestd_R919 ()
{
+ ffestdStmt_ stmt;
+
ffestd_check_simple_ ();
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_R919 (&ffestp_file.beru);
-#else
- {
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR919_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R919.pool = ffesta_output_pool;
- stmt->u.R919.params = ffestd_subr_copy_beru_ ();
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidR919_);
+ ffestd_stmt_append_ (stmt);
+ ffestd_subr_line_save_ (stmt);
+ stmt->u.R919.pool = ffesta_output_pool;
+ stmt->u.R919.params = ffestd_subr_copy_beru_ ();
+ ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
}
/* ffestd_R920 -- ENDFILE statement
@@ -4072,23 +3355,16 @@ ffestd_R919 ()
void
ffestd_R920 ()
{
+ ffestdStmt_ stmt;
+
ffestd_check_simple_ ();
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_R920 (&ffestp_file.beru);
-#else
- {
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR920_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R920.pool = ffesta_output_pool;
- stmt->u.R920.params = ffestd_subr_copy_beru_ ();
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidR920_);
+ ffestd_stmt_append_ (stmt);
+ ffestd_subr_line_save_ (stmt);
+ stmt->u.R920.pool = ffesta_output_pool;
+ stmt->u.R920.params = ffestd_subr_copy_beru_ ();
+ ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
}
/* ffestd_R921 -- REWIND statement
@@ -4100,23 +3376,16 @@ ffestd_R920 ()
void
ffestd_R921 ()
{
+ ffestdStmt_ stmt;
+
ffestd_check_simple_ ();
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_R921 (&ffestp_file.beru);
-#else
- {
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR921_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R921.pool = ffesta_output_pool;
- stmt->u.R921.params = ffestd_subr_copy_beru_ ();
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidR921_);
+ ffestd_stmt_append_ (stmt);
+ ffestd_subr_line_save_ (stmt);
+ stmt->u.R921.pool = ffesta_output_pool;
+ stmt->u.R921.params = ffestd_subr_copy_beru_ ();
+ ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
}
/* ffestd_R923A -- INQUIRE statement (non-IOLENGTH version)
@@ -4128,9 +3397,10 @@ ffestd_R921 ()
void
ffestd_R923A (bool by_file)
{
+ ffestdStmt_ stmt;
+
ffestd_check_simple_ ();
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
#define specified(something) \
(ffestp_file.inquire.inquire_spec[something].kw_or_val_present)
@@ -4155,24 +3425,14 @@ ffestd_R923A (bool by_file)
}
#undef specified
-#endif
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_R923A (&ffestp_file.inquire, by_file);
-#else
- {
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR923A_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R923A.pool = ffesta_output_pool;
- stmt->u.R923A.params = ffestd_subr_copy_inquire_ ();
- stmt->u.R923A.by_file = by_file;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidR923A_);
+ ffestd_stmt_append_ (stmt);
+ ffestd_subr_line_save_ (stmt);
+ stmt->u.R923A.pool = ffesta_output_pool;
+ stmt->u.R923A.params = ffestd_subr_copy_inquire_ ();
+ stmt->u.R923A.by_file = by_file;
+ ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
}
/* ffestd_R923B_start -- INQUIRE(IOLENGTH=expr) statement list begin
@@ -4185,25 +3445,18 @@ ffestd_R923A (bool by_file)
void
ffestd_R923B_start ()
{
+ ffestdStmt_ stmt;
+
ffestd_check_start_ ();
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_R923B_start (&ffestp_file.inquire);
-#else
- {
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR923B_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R923B.pool = ffesta_output_pool;
- stmt->u.R923B.params = ffestd_subr_copy_inquire_ ();
- stmt->u.R923B.list = NULL;
- ffestd_expr_list_ = &stmt->u.R923B.list;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidR923B_);
+ ffestd_stmt_append_ (stmt);
+ ffestd_subr_line_save_ (stmt);
+ stmt->u.R923B.pool = ffesta_output_pool;
+ stmt->u.R923B.params = ffestd_subr_copy_inquire_ ();
+ stmt->u.R923B.list = NULL;
+ ffestd_expr_list_ = &stmt->u.R923B.list;
+ ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
}
/* ffestd_R923B_item -- INQUIRE statement i/o item
@@ -4215,22 +3468,17 @@ ffestd_R923B_start ()
void
ffestd_R923B_item (ffebld expr)
{
+ ffestdExprItem_ item;
+
ffestd_check_item_ ();
-#if FFECOM_ONEPASS
- ffeste_R923B_item (expr);
-#else
- {
- ffestdExprItem_ item
- = (ffestdExprItem_) malloc_new_kp (ffesta_output_pool, "ffestdExprItem_",
- sizeof (*item));
-
- item->next = NULL;
- item->expr = expr;
- *ffestd_expr_list_ = item;
- ffestd_expr_list_ = &item->next;
- }
-#endif
+ item = (ffestdExprItem_) malloc_new_kp (ffesta_output_pool,
+ "ffestdExprItem_", sizeof (*item));
+
+ item->next = NULL;
+ item->expr = expr;
+ *ffestd_expr_list_ = item;
+ ffestd_expr_list_ = &item->next;
}
/* ffestd_R923B_finish -- INQUIRE statement list complete
@@ -4243,12 +3491,6 @@ void
ffestd_R923B_finish ()
{
ffestd_check_finish_ ();
-
-#if FFECOM_ONEPASS
- ffeste_R923B_finish ();
-#else
- /* Nothing to do, it's implicit. */
-#endif
}
/* ffestd_R1001 -- FORMAT statement
@@ -4260,6 +3502,7 @@ ffestd_R1001 (ffesttFormatList f)
{
ffestsHolder str;
ffests s = &str;
+ ffestdStmt_ stmt;
ffestd_check_simple_ ();
@@ -4271,35 +3514,9 @@ ffestd_R1001 (ffesttFormatList f)
ffestd_R1001dump_ (s, f); /* Build the string in s. */
ffests_putc (s, ')');
-#if FFECOM_ONEPASS
- ffeste_R1001 (s);
- ffests_kill (s); /* Kill the string in s. */
-#else
- {
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR1001_);
-#if 0
- /* Don't bother with this. After all, things like cilists also are
- declared midway through code-generation. Perhaps the only problems
- the gcc back end has with midway declarations are with stack vars,
- maybe only with vars that can be put in registers. Unless/until the
- need is established, handle FORMAT just like cilists and others; at
- that point, they'd likely *all* have to be fixed, which would be
- very painful anyway. */
- /* Insert FORMAT statement just after the first item on the
- statement list, which must be a FORMAT label, which see. */
- assert (ffestd_stmt_list_.first->id == FFESTD_stmtidFORMATLABEL_);
- stmt->previous = ffestd_stmt_list_.first;
- stmt->next = ffestd_stmt_list_.first->next;
- stmt->next->previous = stmt;
- stmt->previous->next = stmt;
-#else
- ffestd_stmt_append_ (stmt);
-#endif
- stmt->u.R1001.str = str;
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidR1001_);
+ ffestd_stmt_append_ (stmt);
+ stmt->u.R1001.str = str;
ffestd_label_formatdef_ = NULL;
}
@@ -4327,13 +3544,7 @@ ffestd_R1001dump_ (ffests s, ffesttFormatList list)
break;
case FFESTP_formattypeB:
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- ffestd_R1001dump_1005_3_ (s, next, "B");
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
ffestd_R1001error_ (next);
-#else
-#error
-#endif
break;
case FFESTP_formattypeO:
@@ -4353,13 +3564,7 @@ ffestd_R1001dump_ (ffests s, ffesttFormatList list)
break;
case FFESTP_formattypeEN:
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- ffestd_R1001dump_1005_5_ (s, next, "EN");
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
ffestd_R1001error_ (next);
-#else
-#error
-#endif
break;
case FFESTP_formattypeG:
@@ -4379,13 +3584,7 @@ ffestd_R1001dump_ (ffests s, ffesttFormatList list)
break;
case FFESTP_formattypeQ:
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- ffestd_R1001dump_1010_1_ (s, next, "Q");
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
ffestd_R1001error_ (next);
-#else
-#error
-#endif
break;
case FFESTP_formattypeDOLLAR:
@@ -4465,9 +3664,7 @@ ffestd_R1001dump_ (ffests s, ffesttFormatList list)
char *p = ffelex_token_text (next->t);
ffeTokenLength i = ffelex_token_length (next->t);
- ffests_printf_1U (s,
- "%" ffeTokenLength_f "uH",
- i);
+ ffests_printf (s, "%" ffeTokenLength_f "uH", i);
while (i-- != 0)
{
ffests_putc (s, *p);
@@ -4487,8 +3684,7 @@ ffestd_R1001dump_ (ffests s, ffesttFormatList list)
if (next->u.R1003D.R1004.rtexpr)
ffestd_R1001rtexpr_ (s, next, next->u.R1003D.R1004.u.expr);
else
- ffests_printf_1U (s, "%lu",
- next->u.R1003D.R1004.u.unsigned_val);
+ ffests_printf (s, "%lu", next->u.R1003D.R1004.u.unsigned_val);
}
ffests_putc (s, '(');
@@ -4520,7 +3716,7 @@ ffestd_R1001dump_1005_1_ (ffests s, ffesttFormatList f, const char *string)
if (f->u.R1005.R1004.rtexpr)
ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1004.u.expr);
else
- ffests_printf_1U (s, "%lu", f->u.R1005.R1004.u.unsigned_val);
+ ffests_printf (s, "%lu", f->u.R1005.R1004.u.unsigned_val);
}
ffests_puts (s, string);
@@ -4530,7 +3726,7 @@ ffestd_R1001dump_1005_1_ (ffests s, ffesttFormatList f, const char *string)
if (f->u.R1005.R1006.rtexpr)
ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1006.u.expr);
else
- ffests_printf_1U (s, "%lu", f->u.R1005.R1006.u.unsigned_val);
+ ffests_printf (s, "%lu", f->u.R1005.R1006.u.unsigned_val);
}
}
@@ -4553,7 +3749,7 @@ ffestd_R1001dump_1005_2_ (ffests s, ffesttFormatList f, const char *string)
if (f->u.R1005.R1004.rtexpr)
ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1004.u.expr);
else
- ffests_printf_1U (s, "%lu", f->u.R1005.R1004.u.unsigned_val);
+ ffests_printf (s, "%lu", f->u.R1005.R1004.u.unsigned_val);
}
ffests_puts (s, string);
@@ -4561,7 +3757,7 @@ ffestd_R1001dump_1005_2_ (ffests s, ffesttFormatList f, const char *string)
if (f->u.R1005.R1006.rtexpr)
ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1006.u.expr);
else
- ffests_printf_1U (s, "%lu", f->u.R1005.R1006.u.unsigned_val);
+ ffests_printf (s, "%lu", f->u.R1005.R1006.u.unsigned_val);
}
/* ffestd_R1001dump_1005_3_ -- Dump a particular format
@@ -4582,7 +3778,7 @@ ffestd_R1001dump_1005_3_ (ffests s, ffesttFormatList f, const char *string)
if (f->u.R1005.R1004.rtexpr)
ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1004.u.expr);
else
- ffests_printf_1U (s, "%lu", f->u.R1005.R1004.u.unsigned_val);
+ ffests_printf (s, "%lu", f->u.R1005.R1004.u.unsigned_val);
}
ffests_puts (s, string);
@@ -4590,7 +3786,7 @@ ffestd_R1001dump_1005_3_ (ffests s, ffesttFormatList f, const char *string)
if (f->u.R1005.R1006.rtexpr)
ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1006.u.expr);
else
- ffests_printf_1U (s, "%lu", f->u.R1005.R1006.u.unsigned_val);
+ ffests_printf (s, "%lu", f->u.R1005.R1006.u.unsigned_val);
if (f->u.R1005.R1007_or_R1008.present)
{
@@ -4598,8 +3794,7 @@ ffestd_R1001dump_1005_3_ (ffests s, ffesttFormatList f, const char *string)
if (f->u.R1005.R1007_or_R1008.rtexpr)
ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1007_or_R1008.u.expr);
else
- ffests_printf_1U (s, "%lu",
- f->u.R1005.R1007_or_R1008.u.unsigned_val);
+ ffests_printf (s, "%lu", f->u.R1005.R1007_or_R1008.u.unsigned_val);
}
}
@@ -4622,7 +3817,7 @@ ffestd_R1001dump_1005_4_ (ffests s, ffesttFormatList f, const char *string)
if (f->u.R1005.R1004.rtexpr)
ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1004.u.expr);
else
- ffests_printf_1U (s, "%lu", f->u.R1005.R1004.u.unsigned_val);
+ ffests_printf (s, "%lu", f->u.R1005.R1004.u.unsigned_val);
}
ffests_puts (s, string);
@@ -4630,13 +3825,13 @@ ffestd_R1001dump_1005_4_ (ffests s, ffesttFormatList f, const char *string)
if (f->u.R1005.R1006.rtexpr)
ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1006.u.expr);
else
- ffests_printf_1U (s, "%lu", f->u.R1005.R1006.u.unsigned_val);
+ ffests_printf (s, "%lu", f->u.R1005.R1006.u.unsigned_val);
ffests_putc (s, '.');
if (f->u.R1005.R1007_or_R1008.rtexpr)
ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1007_or_R1008.u.expr);
else
- ffests_printf_1U (s, "%lu", f->u.R1005.R1007_or_R1008.u.unsigned_val);
+ ffests_printf (s, "%lu", f->u.R1005.R1007_or_R1008.u.unsigned_val);
}
/* ffestd_R1001dump_1005_5_ -- Dump a particular format
@@ -4657,7 +3852,7 @@ ffestd_R1001dump_1005_5_ (ffests s, ffesttFormatList f, const char *string)
if (f->u.R1005.R1004.rtexpr)
ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1004.u.expr);
else
- ffests_printf_1U (s, "%lu", f->u.R1005.R1004.u.unsigned_val);
+ ffests_printf (s, "%lu", f->u.R1005.R1004.u.unsigned_val);
}
ffests_puts (s, string);
@@ -4665,13 +3860,13 @@ ffestd_R1001dump_1005_5_ (ffests s, ffesttFormatList f, const char *string)
if (f->u.R1005.R1006.rtexpr)
ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1006.u.expr);
else
- ffests_printf_1U (s, "%lu", f->u.R1005.R1006.u.unsigned_val);
+ ffests_printf (s, "%lu", f->u.R1005.R1006.u.unsigned_val);
ffests_putc (s, '.');
if (f->u.R1005.R1007_or_R1008.rtexpr)
ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1007_or_R1008.u.expr);
else
- ffests_printf_1U (s, "%lu", f->u.R1005.R1007_or_R1008.u.unsigned_val);
+ ffests_printf (s, "%lu", f->u.R1005.R1007_or_R1008.u.unsigned_val);
if (f->u.R1005.R1009.present)
{
@@ -4679,7 +3874,7 @@ ffestd_R1001dump_1005_5_ (ffests s, ffesttFormatList f, const char *string)
if (f->u.R1005.R1009.rtexpr)
ffestd_R1001rtexpr_ (s, f, f->u.R1005.R1009.u.expr);
else
- ffests_printf_1U (s, "%lu", f->u.R1005.R1009.u.unsigned_val);
+ ffests_printf (s, "%lu", f->u.R1005.R1009.u.unsigned_val);
}
}
@@ -4713,7 +3908,7 @@ ffestd_R1001dump_1010_2_ (ffests s, ffesttFormatList f, const char *string)
if (f->u.R1010.val.rtexpr)
ffestd_R1001rtexpr_ (s, f, f->u.R1010.val.u.expr);
else
- ffests_printf_1U (s, "%lu", f->u.R1010.val.u.unsigned_val);
+ ffests_printf (s, "%lu", f->u.R1010.val.u.unsigned_val);
}
ffests_puts (s, string);
@@ -4734,7 +3929,7 @@ ffestd_R1001dump_1010_3_ (ffests s, ffesttFormatList f, const char *string)
if (f->u.R1010.val.rtexpr)
ffestd_R1001rtexpr_ (s, f, f->u.R1010.val.u.expr);
else
- ffests_printf_1U (s, "%lu", f->u.R1010.val.u.unsigned_val);
+ ffests_printf (s, "%lu", f->u.R1010.val.u.unsigned_val);
ffests_puts (s, string);
}
@@ -4754,7 +3949,7 @@ ffestd_R1001dump_1010_4_ (ffests s, ffesttFormatList f, const char *string)
if (f->u.R1010.val.rtexpr)
ffestd_R1001rtexpr_ (s, f, f->u.R1010.val.u.expr);
else
- ffests_printf_1D (s, "%ld", f->u.R1010.val.u.signed_val);
+ ffests_printf (s, "%ld", f->u.R1010.val.u.signed_val);
ffests_puts (s, string);
}
@@ -4776,7 +3971,7 @@ ffestd_R1001dump_1010_5_ (ffests s, ffesttFormatList f, const char *string)
if (f->u.R1010.val.rtexpr)
ffestd_R1001rtexpr_ (s, f, f->u.R1010.val.u.expr);
else
- ffests_printf_1U (s, "%lu", f->u.R1010.val.u.unsigned_val);
+ ffests_printf (s, "%lu", f->u.R1010.val.u.unsigned_val);
}
/* ffestd_R1001error_ -- Complain about FORMAT specification not supported
@@ -4836,7 +4031,7 @@ ffestd_R1001rtexpr_ (ffests s, ffesttFormatList f, ffebld expr)
case FFEINFO_kindtypeANY:
return;
}
- ffests_printf_1D (s, "%ld", val);
+ ffests_printf (s, "%ld", (long) val);
}
}
@@ -4860,16 +4055,6 @@ ffestd_R1102 (ffesymbol s, ffelexToken name UNUSED)
ffe_set_is_saveall (TRUE); /* Main program always has implicit SAVE. */
ffestw_set_sym (ffestw_stack_top (), s);
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- if (name == NULL)
- fputs ("< PROGRAM_unnamed\n", dmpout);
- else
- fprintf (dmpout, "< PROGRAM %s\n", ffelex_token_text (name));
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_R1103 -- End a PROGRAM
@@ -4879,6 +4064,8 @@ ffestd_R1102 (ffesymbol s, ffelexToken name UNUSED)
void
ffestd_R1103 (bool ok UNUSED)
{
+ ffestdStmt_ stmt;
+
assert (ffestd_block_level_ == 0);
if (FFESTD_IS_END_OPTIMIZED_ && ffestd_is_reachable_)
@@ -4887,16 +4074,8 @@ ffestd_R1103 (bool ok UNUSED)
if (ffestw_state (ffestw_stack_top ()) != FFESTV_statePROGRAM5)
ffestd_subr_labels_ (FALSE);/* Handle any undefined labels. */
-#if FFECOM_ONEPASS
- ffeste_R1103 ();
-#else
- {
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR1103_);
- ffestd_stmt_append_ (stmt);
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidR1103_);
+ ffestd_stmt_append_ (stmt);
}
/* ffestd_R1105 -- MODULE statement
@@ -5025,16 +4204,6 @@ ffestd_R1111 (ffesymbol s, ffelexToken name UNUSED)
ffecom_notify_primary_entry (s);
ffestw_set_sym (ffestw_stack_top (), s);
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- if (name == NULL)
- fputs ("< BLOCK_DATA_unnamed\n", dmpout);
- else
- fprintf (dmpout, "< BLOCK_DATA %s\n", ffelex_token_text (name));
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_R1112 -- End a BLOCK DATA
@@ -5044,6 +4213,8 @@ ffestd_R1111 (ffesymbol s, ffelexToken name UNUSED)
void
ffestd_R1112 (bool ok UNUSED)
{
+ ffestdStmt_ stmt;
+
assert (ffestd_block_level_ == 0);
/* Generate any return-like code here (not likely for BLOCK DATA!). */
@@ -5051,16 +4222,8 @@ ffestd_R1112 (bool ok UNUSED)
if (ffestw_state (ffestw_stack_top ()) != FFESTV_stateBLOCKDATA5)
ffestd_subr_labels_ (TRUE); /* Handle any undefined labels. */
-#if FFECOM_ONEPASS
- ffeste_R1112 ();
-#else
- {
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR1112_);
- ffestd_stmt_append_ (stmt);
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidR1112_);
+ ffestd_stmt_append_ (stmt);
}
/* ffestd_R1202 -- INTERFACE statement
@@ -5257,13 +4420,6 @@ void
ffestd_R1207_start ()
{
ffestd_check_start_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("* EXTERNAL (", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_R1207_item -- EXTERNAL statement for name
@@ -5277,13 +4433,6 @@ ffestd_R1207_item (ffelexToken name)
{
ffestd_check_item_ ();
assert (name != NULL);
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fprintf (dmpout, "%s,", ffelex_token_text (name));
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_R1207_finish -- EXTERNAL statement list complete
@@ -5296,13 +4445,6 @@ void
ffestd_R1207_finish ()
{
ffestd_check_finish_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs (")\n", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_R1208_start -- INTRINSIC statement list begin
@@ -5315,13 +4457,6 @@ void
ffestd_R1208_start ()
{
ffestd_check_start_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("* INTRINSIC (", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_R1208_item -- INTRINSIC statement for name
@@ -5335,13 +4470,6 @@ ffestd_R1208_item (ffelexToken name)
{
ffestd_check_item_ ();
assert (name != NULL);
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fprintf (dmpout, "%s,", ffelex_token_text (name));
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_R1208_finish -- INTRINSIC statement list complete
@@ -5354,13 +4482,6 @@ void
ffestd_R1208_finish ()
{
ffestd_check_finish_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs (")\n", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_R1212 -- CALL statement
@@ -5372,23 +4493,16 @@ ffestd_R1208_finish ()
void
ffestd_R1212 (ffebld expr)
{
+ ffestdStmt_ stmt;
+
ffestd_check_simple_ ();
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_R1212 (expr);
-#else
- {
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR1212_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R1212.pool = ffesta_output_pool;
- stmt->u.R1212.expr = expr;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidR1212_);
+ ffestd_stmt_append_ (stmt);
+ ffestd_subr_line_save_ (stmt);
+ stmt->u.R1212.pool = ffesta_output_pool;
+ stmt->u.R1212.expr = expr;
+ ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
}
/* ffestd_R1213 -- Defined assignment statement
@@ -5404,15 +4518,6 @@ ffestd_R1213 (ffebld dest, ffebld source)
ffestd_check_simple_ ();
ffestd_subr_f90_ ();
- return;
-
-#ifdef FFESTD_F90
- fputs ("+ let_defined ", dmpout);
- ffebld_dump (dest);
- fputs ("=", dmpout);
- ffebld_dump (source);
- fputc ('\n', dmpout);
-#endif
}
#endif
@@ -5435,10 +4540,6 @@ ffestd_R1219 (ffesymbol s, ffelexToken funcname UNUSED,
bool recursive UNUSED, ffelexToken result UNUSED,
bool separate_result UNUSED)
{
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- char *a;
-#endif
-
assert (ffestd_block_level_ == 0);
ffestd_is_reachable_ = TRUE;
@@ -5446,97 +4547,6 @@ ffestd_R1219 (ffesymbol s, ffelexToken funcname UNUSED,
ffecom_notify_primary_entry (s);
ffestw_set_sym (ffestw_stack_top (), s);
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- switch (type)
- {
- case FFESTP_typeINTEGER:
- a = "INTEGER";
- break;
-
- case FFESTP_typeBYTE:
- a = "BYTE";
- break;
-
- case FFESTP_typeWORD:
- a = "WORD";
- break;
-
- case FFESTP_typeREAL:
- a = "REAL";
- break;
-
- case FFESTP_typeCOMPLEX:
- a = "COMPLEX";
- break;
-
- case FFESTP_typeLOGICAL:
- a = "LOGICAL";
- break;
-
- case FFESTP_typeCHARACTER:
- a = "CHARACTER";
- break;
-
- case FFESTP_typeDBLPRCSN:
- a = "DOUBLE PRECISION";
- break;
-
- case FFESTP_typeDBLCMPLX:
- a = "DOUBLE COMPLEX";
- break;
-
-#if FFESTR_F90
- case FFESTP_typeTYPE:
- a = "TYPE";
- break;
-#endif
-
- case FFESTP_typeNone:
- a = "";
- break;
-
- default:
- assert (FALSE);
- a = "?";
- break;
- }
- fprintf (dmpout, "< FUNCTION %s ", ffelex_token_text (funcname));
- if (recursive)
- fputs ("RECURSIVE ", dmpout);
- fprintf (dmpout, "%s(", a);
- if (kindt != NULL)
- {
- fputs ("kind=", dmpout);
- if (kind == NULL)
- fputs (ffelex_token_text (kindt), dmpout);
- else
- ffebld_dump (kind);
- if (lent != NULL)
- fputc (',', dmpout);
- }
- if (lent != NULL)
- {
- fputs ("len=", dmpout);
- if (len == NULL)
- fputs (ffelex_token_text (lent), dmpout);
- else
- ffebld_dump (len);
- }
- fprintf (dmpout, ")");
- if (args != NULL)
- {
- fputs (" (", dmpout);
- ffestt_tokenlist_dump (args);
- fputc (')', dmpout);
- }
- if (result != NULL)
- fprintf (dmpout, " result(%s)", ffelex_token_text (result));
- fputc ('\n', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_R1221 -- End a FUNCTION
@@ -5546,6 +4556,8 @@ ffestd_R1219 (ffesymbol s, ffelexToken funcname UNUSED,
void
ffestd_R1221 (bool ok UNUSED)
{
+ ffestdStmt_ stmt;
+
assert (ffestd_block_level_ == 0);
if (FFESTD_IS_END_OPTIMIZED_ && ffestd_is_reachable_)
@@ -5554,16 +4566,8 @@ ffestd_R1221 (bool ok UNUSED)
if (ffestw_state (ffestw_stack_top ()) != FFESTV_stateFUNCTION5)
ffestd_subr_labels_ (FALSE);/* Handle any undefined labels. */
-#if FFECOM_ONEPASS
- ffeste_R1221 ();
-#else
- {
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR1221_);
- ffestd_stmt_append_ (stmt);
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidR1221_);
+ ffestd_stmt_append_ (stmt);
}
/* ffestd_R1223 -- SUBROUTINE statement
@@ -5588,22 +4592,6 @@ ffestd_R1223 (ffesymbol s, ffelexToken subrname UNUSED,
ffecom_notify_primary_entry (s);
ffestw_set_sym (ffestw_stack_top (), s);
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fprintf (dmpout, "< SUBROUTINE %s ", ffelex_token_text (subrname));
- if (recursive)
- fputs ("recursive ", dmpout);
- if (args != NULL)
- {
- fputc ('(', dmpout);
- ffestt_tokenlist_dump (args);
- fputc (')', dmpout);
- }
- fputc ('\n', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_R1225 -- End a SUBROUTINE
@@ -5613,6 +4601,8 @@ ffestd_R1223 (ffesymbol s, ffelexToken subrname UNUSED,
void
ffestd_R1225 (bool ok UNUSED)
{
+ ffestdStmt_ stmt;
+
assert (ffestd_block_level_ == 0);
if (FFESTD_IS_END_OPTIMIZED_ && ffestd_is_reachable_)
@@ -5621,16 +4611,8 @@ ffestd_R1225 (bool ok UNUSED)
if (ffestw_state (ffestw_stack_top ()) != FFESTV_stateSUBROUTINE5)
ffestd_subr_labels_ (FALSE);/* Handle any undefined labels. */
-#if FFECOM_ONEPASS
- ffeste_R1225 ();
-#else
- {
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR1225_);
- ffestd_stmt_append_ (stmt);
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidR1225_);
+ ffestd_stmt_append_ (stmt);
}
/* ffestd_R1226 -- ENTRY statement
@@ -5645,10 +4627,6 @@ ffestd_R1226 (ffesymbol entry)
{
ffestd_check_simple_ ();
-#if (FFECOM_targetCURRENT == FFECOM_targetFFE) || FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_R1226 (entry);
-#else
if (!ffesta_seen_first_exec || ffecom_2pass_advise_entrypoint (entry))
{
ffestdStmt_ stmt;
@@ -5659,7 +4637,6 @@ ffestd_R1226 (ffesymbol entry)
stmt->u.R1226.entry = entry;
stmt->u.R1226.entrynum = ++ffestd_2pass_entrypoints_;
}
-#endif
ffestd_is_reachable_ = TRUE;
}
@@ -5674,24 +4651,17 @@ ffestd_R1226 (ffesymbol entry)
void
ffestd_R1227 (ffebld expr)
{
+ ffestdStmt_ stmt;
+
ffestd_check_simple_ ();
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_R1227 (ffestw_stack_top (), expr);
-#else
- {
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR1227_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.R1227.pool = ffesta_output_pool;
- stmt->u.R1227.block = ffestw_stack_top ();
- stmt->u.R1227.expr = expr;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidR1227_);
+ ffestd_stmt_append_ (stmt);
+ ffestd_subr_line_save_ (stmt);
+ stmt->u.R1227.pool = ffesta_output_pool;
+ stmt->u.R1227.block = ffestw_stack_top ();
+ stmt->u.R1227.expr = expr;
+ ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
if (ffestd_block_level_ == 0)
ffestd_is_reachable_ = FALSE;
@@ -5740,12 +4710,6 @@ void
ffestd_R1229_start (ffelexToken name UNUSED, ffesttTokenList args UNUSED)
{
ffestd_check_start_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_R1229_finish -- STMTFUNCTION statement list complete
@@ -5769,9 +4733,6 @@ ffestd_R1229_start (ffelexToken name UNUSED, ffesttTokenList args UNUSED)
void
ffestd_R1229_finish (ffesymbol s)
{
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- ffebld args = ffesymbol_dummyargs (s);
-#endif
ffebld expr = ffesymbol_sfexpr (s);
ffestd_check_finish_ ();
@@ -5779,37 +4740,9 @@ ffestd_R1229_finish (ffesymbol s)
if (expr == NULL)
return; /* Nothing to do, definition didn't work. */
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fprintf (dmpout, "* stmtfunction %s(", ffesymbol_text (s));
- for (; args != NULL; args = ffebld_trail (args))
- fprintf (dmpout, "%s,", ffesymbol_text (ffebld_symter (ffebld_head (args))));
- fputs (")=", dmpout);
- ffebld_dump (expr);
- fputc ('\n', dmpout);
-#if 0 /* Normally no need to preserve the
- expression. */
- ffesymbol_set_sfexpr (s, NULL); /* Except expr.c sees NULL
- as recursive reference!
- So until we can use something
- convenient, like a "permanent"
- expression, don't worry about
- wasting some memory in the
- stand-alone FFE. */
-#else
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
-#endif
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
/* With gcc, cannot do anything here, because the backend hasn't even
(necessarily) been notified that we're compiling a program unit! */
-
-#if 0 /* Must preserve the expression for gcc. */
- ffesymbol_set_sfexpr (s, NULL);
-#else
ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
-#endif
-#else
-#error
-#endif
}
/* ffestd_S3P4 -- INCLUDE line
@@ -5860,17 +4793,7 @@ void
ffestd_V003_start (ffelexToken structure_name)
{
ffestd_check_start_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- if (structure_name == NULL)
- fputs ("* STRUCTURE_unnamed ", dmpout);
- else
- fprintf (dmpout, "* STRUCTURE %s ", ffelex_token_text (structure_name));
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
ffestd_subr_vxt_ ();
-#else
-#error
-#endif
}
/* ffestd_V003_item -- STRUCTURE statement for object-name
@@ -5883,20 +4806,6 @@ void
ffestd_V003_item (ffelexToken name, ffesttDimList dims)
{
ffestd_check_item_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs (ffelex_token_text (name), dmpout);
- if (dims != NULL)
- {
- fputc ('(', dmpout);
- ffestt_dimlist_dump (dims);
- fputc (')', dmpout);
- }
- fputc (',', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_V003_finish -- STRUCTURE statement list complete
@@ -5909,13 +4818,6 @@ void
ffestd_V003_finish ()
{
ffestd_check_finish_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputc ('\n', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_V004 -- End a STRUCTURE
@@ -5925,12 +4827,6 @@ ffestd_V003_finish ()
void
ffestd_V004 (bool ok)
{
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("* END_STRUCTURE\n", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_V009 -- UNION statement
@@ -5941,13 +4837,6 @@ void
ffestd_V009 ()
{
ffestd_check_simple_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("* UNION\n", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_V010 -- End a UNION
@@ -5957,12 +4846,6 @@ ffestd_V009 ()
void
ffestd_V010 (bool ok)
{
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("* END_UNION\n", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_V012 -- MAP statement
@@ -5973,13 +4856,6 @@ void
ffestd_V012 ()
{
ffestd_check_simple_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("* MAP\n", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_V013 -- End a MAP
@@ -5989,12 +4865,6 @@ ffestd_V012 ()
void
ffestd_V013 (bool ok)
{
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("* END_MAP\n", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
#endif
@@ -6008,14 +4878,6 @@ void
ffestd_V014_start ()
{
ffestd_check_start_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("* VOLATILE (", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
- ffestd_subr_vxt_ ();
-#else
-#error
-#endif
}
/* ffestd_V014_item_object -- VOLATILE statement for object-name
@@ -6028,13 +4890,6 @@ void
ffestd_V014_item_object (ffelexToken name UNUSED)
{
ffestd_check_item_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fprintf (dmpout, "%s,", ffelex_token_text (name));
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_V014_item_cblock -- VOLATILE statement for common-block-name
@@ -6047,13 +4902,6 @@ void
ffestd_V014_item_cblock (ffelexToken name UNUSED)
{
ffestd_check_item_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fprintf (dmpout, "/%s/,", ffelex_token_text (name));
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_V014_finish -- VOLATILE statement list complete
@@ -6066,13 +4914,6 @@ void
ffestd_V014_finish ()
{
ffestd_check_finish_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs (")\n", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_V016_start -- RECORD statement list begin
@@ -6086,14 +4927,6 @@ void
ffestd_V016_start ()
{
ffestd_check_start_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("* RECORD ", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
- ffestd_subr_vxt_ ();
-#else
-#error
-#endif
}
/* ffestd_V016_item_structure -- RECORD statement for common-block-name
@@ -6106,13 +4939,6 @@ void
ffestd_V016_item_structure (ffelexToken name)
{
ffestd_check_item_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fprintf (dmpout, "/%s/,", ffelex_token_text (name));
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_V016_item_object -- RECORD statement for object-name
@@ -6125,20 +4951,6 @@ void
ffestd_V016_item_object (ffelexToken name, ffesttDimList dims)
{
ffestd_check_item_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs (ffelex_token_text (name), dmpout);
- if (dims != NULL)
- {
- fputc ('(', dmpout);
- ffestt_dimlist_dump (dims);
- fputc (')', dmpout);
- }
- fputc (',', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_V016_finish -- RECORD statement list complete
@@ -6151,13 +4963,6 @@ void
ffestd_V016_finish ()
{
ffestd_check_finish_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputc ('\n', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_V018_start -- REWRITE(...) statement list begin
@@ -6171,32 +4976,7 @@ void
ffestd_V018_start (ffestvFormat format)
{
ffestd_check_start_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_V018_start (&ffestp_file.rewrite, format);
-#else
- {
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidV018_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.V018.pool = ffesta_output_pool;
- stmt->u.V018.params = ffestd_subr_copy_rewrite_ ();
- stmt->u.V018.format = format;
- stmt->u.V018.list = NULL;
- ffestd_expr_list_ = &stmt->u.V018.list;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
- }
-#endif
-
-#endif
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
ffestd_subr_vxt_ ();
-#endif
}
/* ffestd_V018_item -- REWRITE statement i/o item
@@ -6209,27 +4989,6 @@ void
ffestd_V018_item (ffebld expr)
{
ffestd_check_item_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-
-#if FFECOM_ONEPASS
- ffeste_V018_item (expr);
-#else
- {
- ffestdExprItem_ item
- = (ffestdExprItem_) malloc_new_kp (ffesta_output_pool, "ffestdExprItem_",
- sizeof (*item));
-
- item->next = NULL;
- item->expr = expr;
- *ffestd_expr_list_ = item;
- ffestd_expr_list_ = &item->next;
- }
-#endif
-
-#endif
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
-#endif
}
/* ffestd_V018_finish -- REWRITE statement list complete
@@ -6242,18 +5001,6 @@ void
ffestd_V018_finish ()
{
ffestd_check_finish_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-
-#if FFECOM_ONEPASS
- ffeste_V018_finish ();
-#else
- /* Nothing to do, it's implicit. */
-#endif
-
-#endif
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
-#endif
}
/* ffestd_V019_start -- ACCEPT statement list begin
@@ -6267,32 +5014,7 @@ void
ffestd_V019_start (ffestvFormat format)
{
ffestd_check_start_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_V019_start (&ffestp_file.accept, format);
-#else
- {
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidV019_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.V019.pool = ffesta_output_pool;
- stmt->u.V019.params = ffestd_subr_copy_accept_ ();
- stmt->u.V019.format = format;
- stmt->u.V019.list = NULL;
- ffestd_expr_list_ = &stmt->u.V019.list;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
- }
-#endif
-
-#endif
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
ffestd_subr_vxt_ ();
-#endif
}
/* ffestd_V019_item -- ACCEPT statement i/o item
@@ -6305,27 +5027,6 @@ void
ffestd_V019_item (ffebld expr)
{
ffestd_check_item_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-
-#if FFECOM_ONEPASS
- ffeste_V019_item (expr);
-#else
- {
- ffestdExprItem_ item
- = (ffestdExprItem_) malloc_new_kp (ffesta_output_pool, "ffestdExprItem_",
- sizeof (*item));
-
- item->next = NULL;
- item->expr = expr;
- *ffestd_expr_list_ = item;
- ffestd_expr_list_ = &item->next;
- }
-#endif
-
-#endif
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
-#endif
}
/* ffestd_V019_finish -- ACCEPT statement list complete
@@ -6338,18 +5039,6 @@ void
ffestd_V019_finish ()
{
ffestd_check_finish_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-
-#if FFECOM_ONEPASS
- ffeste_V019_finish ();
-#else
- /* Nothing to do, it's implicit. */
-#endif
-
-#endif
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
-#endif
}
#endif
@@ -6364,32 +5053,7 @@ void
ffestd_V020_start (ffestvFormat format UNUSED)
{
ffestd_check_start_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_V020_start (&ffestp_file.type, format);
-#else
- {
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidV020_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.V020.pool = ffesta_output_pool;
- stmt->u.V020.params = ffestd_subr_copy_type_ ();
- stmt->u.V020.format = format;
- stmt->u.V020.list = NULL;
- ffestd_expr_list_ = &stmt->u.V020.list;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
- }
-#endif
-
-#endif
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
ffestd_subr_vxt_ ();
-#endif
}
/* ffestd_V020_item -- TYPE statement i/o item
@@ -6402,27 +5066,6 @@ void
ffestd_V020_item (ffebld expr UNUSED)
{
ffestd_check_item_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-
-#if FFECOM_ONEPASS
- ffeste_V020_item (expr);
-#else
- {
- ffestdExprItem_ item
- = (ffestdExprItem_) malloc_new_kp (ffesta_output_pool, "ffestdExprItem_",
- sizeof (*item));
-
- item->next = NULL;
- item->expr = expr;
- *ffestd_expr_list_ = item;
- ffestd_expr_list_ = &item->next;
- }
-#endif
-
-#endif
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
-#endif
}
/* ffestd_V020_finish -- TYPE statement list complete
@@ -6435,18 +5078,6 @@ void
ffestd_V020_finish ()
{
ffestd_check_finish_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-
-#if FFECOM_ONEPASS
- ffeste_V020_finish ();
-#else
- /* Nothing to do, it's implicit. */
-#endif
-
-#endif
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
-#endif
}
/* ffestd_V021 -- DELETE statement
@@ -6460,29 +5091,7 @@ void
ffestd_V021 ()
{
ffestd_check_simple_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_V021 (&ffestp_file.delete);
-#else
- {
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidV021_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.V021.pool = ffesta_output_pool;
- stmt->u.V021.params = ffestd_subr_copy_delete_ ();
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
- }
-#endif
-
-#endif
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
ffestd_subr_vxt_ ();
-#endif
}
/* ffestd_V022 -- UNLOCK statement
@@ -6495,29 +5104,7 @@ void
ffestd_V022 ()
{
ffestd_check_simple_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_V022 (&ffestp_file.beru);
-#else
- {
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidV022_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.V022.pool = ffesta_output_pool;
- stmt->u.V022.params = ffestd_subr_copy_beru_ ();
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
- }
-#endif
-
-#endif
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
ffestd_subr_vxt_ ();
-#endif
}
/* ffestd_V023_start -- ENCODE(...) statement list begin
@@ -6531,31 +5118,7 @@ void
ffestd_V023_start ()
{
ffestd_check_start_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_V023_start (&ffestp_file.vxtcode);
-#else
- {
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidV023_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.V023.pool = ffesta_output_pool;
- stmt->u.V023.params = ffestd_subr_copy_vxtcode_ ();
- stmt->u.V023.list = NULL;
- ffestd_expr_list_ = &stmt->u.V023.list;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
- }
-#endif
-
-#endif
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
ffestd_subr_vxt_ ();
-#endif
}
/* ffestd_V023_item -- ENCODE statement i/o item
@@ -6568,27 +5131,6 @@ void
ffestd_V023_item (ffebld expr)
{
ffestd_check_item_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-
-#if FFECOM_ONEPASS
- ffeste_V023_item (expr);
-#else
- {
- ffestdExprItem_ item
- = (ffestdExprItem_) malloc_new_kp (ffesta_output_pool, "ffestdExprItem_",
- sizeof (*item));
-
- item->next = NULL;
- item->expr = expr;
- *ffestd_expr_list_ = item;
- ffestd_expr_list_ = &item->next;
- }
-#endif
-
-#endif
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
-#endif
}
/* ffestd_V023_finish -- ENCODE statement list complete
@@ -6601,18 +5143,6 @@ void
ffestd_V023_finish ()
{
ffestd_check_finish_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-
-#if FFECOM_ONEPASS
- ffeste_V023_finish ();
-#else
- /* Nothing to do, it's implicit. */
-#endif
-
-#endif
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
-#endif
}
/* ffestd_V024_start -- DECODE(...) statement list begin
@@ -6626,31 +5156,7 @@ void
ffestd_V024_start ()
{
ffestd_check_start_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_V024_start (&ffestp_file.vxtcode);
-#else
- {
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidV024_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.V024.pool = ffesta_output_pool;
- stmt->u.V024.params = ffestd_subr_copy_vxtcode_ ();
- stmt->u.V024.list = NULL;
- ffestd_expr_list_ = &stmt->u.V024.list;
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
- }
-#endif
-
-#endif
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
ffestd_subr_vxt_ ();
-#endif
}
/* ffestd_V024_item -- DECODE statement i/o item
@@ -6663,27 +5169,6 @@ void
ffestd_V024_item (ffebld expr)
{
ffestd_check_item_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-
-#if FFECOM_ONEPASS
- ffeste_V024_item (expr);
-#else
- {
- ffestdExprItem_ item
- = (ffestdExprItem_) malloc_new_kp (ffesta_output_pool, "ffestdExprItem_",
- sizeof (*item));
-
- item->next = NULL;
- item->expr = expr;
- *ffestd_expr_list_ = item;
- ffestd_expr_list_ = &item->next;
- }
-#endif
-
-#endif
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
-#endif
}
/* ffestd_V024_finish -- DECODE statement list complete
@@ -6696,18 +5181,6 @@ void
ffestd_V024_finish ()
{
ffestd_check_finish_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-
-#if FFECOM_ONEPASS
- ffeste_V024_finish ();
-#else
- /* Nothing to do, it's implicit. */
-#endif
-
-#endif
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
-#endif
}
/* ffestd_V025_start -- DEFINEFILE statement list begin
@@ -6721,27 +5194,7 @@ void
ffestd_V025_start ()
{
ffestd_check_start_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_V025_start ();
-#else
- {
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidV025start_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
- }
-#endif
-
-#endif
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
ffestd_subr_vxt_ ();
-#endif
}
/* ffestd_V025_item -- DEFINE FILE statement item
@@ -6755,27 +5208,6 @@ void
ffestd_V025_item (ffebld u, ffebld m, ffebld n, ffebld asv)
{
ffestd_check_item_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-
-#if FFECOM_ONEPASS
- ffeste_V025_item (u, m, n, asv);
-#else
- {
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidV025item_);
- ffestd_stmt_append_ (stmt);
- stmt->u.V025item.u = u;
- stmt->u.V025item.m = m;
- stmt->u.V025item.n = n;
- stmt->u.V025item.asv = asv;
- }
-#endif
-
-#endif
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
-#endif
}
/* ffestd_V025_finish -- DEFINE FILE statement list complete
@@ -6788,24 +5220,6 @@ void
ffestd_V025_finish ()
{
ffestd_check_finish_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-
-#if FFECOM_ONEPASS
- ffeste_V025_finish ();
-#else
- {
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidV025finish_);
- stmt->u.V025finish.pool = ffesta_output_pool;
- ffestd_stmt_append_ (stmt);
- }
-#endif
-
-#endif
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
-#endif
}
/* ffestd_V026 -- FIND statement
@@ -6818,29 +5232,7 @@ void
ffestd_V026 ()
{
ffestd_check_simple_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_V026 (&ffestp_file.find);
-#else
- {
- ffestdStmt_ stmt;
-
- stmt = ffestd_stmt_new_ (FFESTD_stmtidV026_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- stmt->u.V026.pool = ffesta_output_pool;
- stmt->u.V026.params = ffestd_subr_copy_find_ ();
- ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
- }
-#endif
-
-#endif
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
ffestd_subr_vxt_ ();
-#endif
}
#endif
@@ -6854,14 +5246,7 @@ void
ffestd_V027_start ()
{
ffestd_check_start_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("* PARAMETER_vxt ", dmpout);
-#else
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
ffestd_subr_vxt_ ();
-#endif
-#endif
}
/* ffestd_V027_item -- VXT PARAMETER statement assignment
@@ -6875,16 +5260,6 @@ void
ffestd_V027_item (ffelexToken dest_token UNUSED, ffebld source UNUSED)
{
ffestd_check_item_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs (ffelex_token_text (dest_token), dmpout);
- fputc ('=', dmpout);
- ffebld_dump (source);
- fputc (',', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffestd_V027_finish -- VXT PARAMETER statement list complete
@@ -6897,13 +5272,6 @@ void
ffestd_V027_finish ()
{
ffestd_check_finish_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputc ('\n', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* Any executable statement. */
@@ -6911,18 +5279,11 @@ ffestd_V027_finish ()
void
ffestd_any ()
{
- ffestd_check_simple_ ();
+ ffestdStmt_ stmt;
-#if FFECOM_ONEPASS
- ffestd_subr_line_now_ ();
- ffeste_R841 ();
-#else
- {
- ffestdStmt_ stmt;
+ ffestd_check_simple_ ();
- stmt = ffestd_stmt_new_ (FFESTD_stmtidR841_);
- ffestd_stmt_append_ (stmt);
- ffestd_subr_line_save_ (stmt);
- }
-#endif
+ stmt = ffestd_stmt_new_ (FFESTD_stmtidR841_);
+ ffestd_stmt_append_ (stmt);
+ ffestd_subr_line_save_ (stmt);
}
diff --git a/contrib/gcc/f/std.h b/contrib/gcc/f/std.h
index bfad671..ea8292c 100644
--- a/contrib/gcc/f/std.h
+++ b/contrib/gcc/f/std.h
@@ -27,8 +27,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* Allow multiple inclusion to work. */
-#ifndef _H_f_std
-#define _H_f_std
+#ifndef GCC_F_STD_H
+#define GCC_F_STD_H
/* Simple definitions and enumerations. */
@@ -295,4 +295,4 @@ void ffestd_any (void);
/* End of #include file. */
-#endif
+#endif /* ! GCC_F_STD_H */
diff --git a/contrib/gcc/f/ste.c b/contrib/gcc/f/ste.c
index dbe48dd..8bb9c2d 100644
--- a/contrib/gcc/f/ste.c
+++ b/contrib/gcc/f/ste.c
@@ -1,5 +1,5 @@
/* ste.c -- Implementation File (module.c template V1.0)
- Copyright (C) 1995, 1996 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1996, 2000 Free Software Foundation, Inc.
Contributed by James Craig Burley.
This file is part of GNU Fortran.
@@ -31,12 +31,9 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* Include files. */
#include "proj.h"
-
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
-#include "rtl.j"
-#include "toplev.j"
-#endif
-
+#include "rtl.h"
+#include "toplev.h"
+#include "ggc.h"
#include "ste.h"
#include "bld.h"
#include "com.h"
@@ -78,7 +75,6 @@ typedef enum
/* Static objects accessed by functions in this module. */
static ffesteStatelet_ ffeste_statelet_ = FFESTE_stateletSIMPLE_;
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static ffelab ffeste_label_formatdef_ = NULL;
static tree (*ffeste_io_driver_) (ffebld expr); /* do?io. */
static ffecomGfrt ffeste_io_endgfrt_; /* end function to call. */
@@ -88,11 +84,9 @@ static tree ffeste_io_end_; /* END= label or NULL_TREE. */
static tree ffeste_io_err_; /* ERR= label or NULL_TREE. */
static tree ffeste_io_iostat_; /* IOSTAT= var or NULL_TREE. */
static bool ffeste_io_iostat_is_temp_; /* IOSTAT= var is a temp. */
-#endif
/* Static functions (internal). */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static void ffeste_begin_iterdo_ (ffestw block, tree *tvar, tree *tincr,
tree *xitersvar, ffebld var,
ffebld start, ffelexToken start_token,
@@ -143,18 +137,11 @@ static tree ffeste_io_olist_ (bool have_err, ffebld unit_expr,
ffestpFile *recl_spec,
ffestpFile *blank_spec);
static void ffeste_subr_beru_ (ffestpBeruStmt *info, ffecomGfrt rt);
-#elif FFECOM_targetCURRENT == FFECOM_targetFFE
-static void ffeste_subr_file_ (const char *kw, ffestpFile *spec);
-#else
-#error
-#endif
/* Internal macros. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
#define ffeste_emit_line_note_() \
emit_line_note (input_filename, lineno)
-#endif
#define ffeste_check_simple_() \
assert(ffeste_statelet_ == FFESTE_stateletSIMPLE_)
#define ffeste_check_start_() \
@@ -401,7 +388,7 @@ typedef struct gbe_block
struct gbe_block *outer;
ffestw block;
int lineno;
- char *input_filename;
+ const char *input_filename;
bool is_stmt;
} *gbe_block;
@@ -439,8 +426,6 @@ ffeste_end_block_ (ffestw block)
free (b);
- clear_momentary ();
-
ffecom_end_compstmt ();
}
@@ -481,8 +466,6 @@ ffeste_end_stmt_(void)
free (b);
- clear_momentary ();
-
ffecom_end_compstmt ();
}
@@ -492,7 +475,6 @@ ffeste_end_stmt_(void)
#define ffeste_end_block_(b) \
do \
{ \
- clear_momentary (); \
ffecom_end_compstmt (); \
} while(0)
#define ffeste_start_stmt_() ffeste_start_block_(NULL)
@@ -500,12 +482,9 @@ ffeste_end_stmt_(void)
#endif /* ! defined (ENABLE_CHECKING) */
-/* Begin an iterative DO loop. Pass the block to start if applicable.
-
- NOTE: Does _two_ push_momentary () calls, which the caller must
- undo (by calling ffeste_end_iterdo_). */
+/* Begin an iterative DO loop. Pass the block to start if
+ applicable. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static void
ffeste_begin_iterdo_ (ffestw block, tree *xtvar, tree *xtincr,
tree *xitersvar, ffebld var,
@@ -572,8 +551,6 @@ ffeste_begin_iterdo_ (ffestw block, tree *xtvar, tree *xtincr,
tincr_saved = ffecom_save_tree (tincr);
- preserve_momentary ();
-
/* Want to have tstart, tend for just this statement. */
ffeste_start_stmt_ ();
@@ -729,7 +706,7 @@ ffeste_begin_iterdo_ (ffestw block, tree *xtvar, tree *xtincr,
convert (TREE_TYPE (niters),
ffecom_integer_zero_node)));
- expand_exit_loop_if_false (0, expr);
+ expand_exit_loop_top_cond (0, expr);
}
if (block)
@@ -746,12 +723,9 @@ ffeste_begin_iterdo_ (ffestw block, tree *xtvar, tree *xtincr,
}
}
-#endif
-
/* End an iterative DO loop. Pass the same iteration variable and increment
value trees that were generated in the paired _begin_ call. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static void
ffeste_end_iterdo_ (ffestw block, tree tvar, tree tincr, tree itersvar)
{
@@ -797,11 +771,9 @@ ffeste_end_iterdo_ (ffestw block, tree tvar, tree tincr, tree itersvar)
else
ffeste_end_stmt_ ();
}
-#endif
/* Generate call to run-time I/O routine. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static void
ffeste_io_call_ (tree call, bool do_check)
{
@@ -824,7 +796,6 @@ ffeste_io_call_ (tree call, bool do_check)
expand_goto (ffeste_io_abort_);
expand_end_cond ();
}
-#endif
/* Handle implied-DO in I/O list.
@@ -832,7 +803,6 @@ ffeste_io_call_ (tree call, bool do_check)
DO loop, handles appropriately (possibly including recursively calling
itself). Then expands code to end the DO loop. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static void
ffeste_io_impdo_ (ffebld impdo, ffelexToken impdo_token)
{
@@ -911,7 +881,6 @@ ffeste_io_impdo_ (ffebld impdo, ffelexToken impdo_token)
ffeste_end_iterdo_ (NULL, tvar, tincr, titervar);
}
-#endif
/* I/O driver for formatted I/O item (do_fio)
@@ -922,7 +891,6 @@ ffeste_io_impdo_ (ffebld impdo, ffelexToken impdo_token)
of the result to an IOSTAT= variable, and emit any checking of the
result for errors. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree
ffeste_io_dofio_ (ffebld expr)
{
@@ -958,8 +926,9 @@ ffeste_io_dofio_ (ffebld expr)
if (size == NULL_TREE) /* Already filled in for CHARACTER type. */
{ /* "(ftnlen) sizeof(type)" */
size = size_binop (CEIL_DIV_EXPR,
- TYPE_SIZE (ffecom_tree_type[bt][kt]),
- size_int (TYPE_PRECISION (char_type_node)));
+ TYPE_SIZE_UNIT (ffecom_tree_type[bt][kt]),
+ size_int (TYPE_PRECISION (char_type_node)
+ / BITS_PER_UNIT));
#if 0 /* Assume that while it is possible that char * is wider than
ftnlen, no object in Fortran space can get big enough for its
size to be wider than ftnlen. I really hope nobody wastes
@@ -976,13 +945,13 @@ ffeste_io_dofio_ (ffebld expr)
= is_complex ? ffecom_f2c_ftnlen_two_node : ffecom_f2c_ftnlen_one_node;
else
{
- num_elements = size_binop (CEIL_DIV_EXPR,
- TYPE_SIZE (TREE_TYPE (TREE_TYPE (variable))),
- size);
- num_elements = size_binop (CEIL_DIV_EXPR,
- num_elements,
- size_int (TYPE_PRECISION
- (char_type_node)));
+ num_elements
+ = size_binop (CEIL_DIV_EXPR,
+ TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (variable))),
+ convert (sizetype, size));
+ num_elements = size_binop (CEIL_DIV_EXPR, num_elements,
+ size_int (TYPE_PRECISION (char_type_node)
+ / BITS_PER_UNIT));
num_elements = convert (ffecom_f2c_ftnlen_type_node,
num_elements);
}
@@ -1000,7 +969,6 @@ ffeste_io_dofio_ (ffebld expr)
return ffecom_call_gfrt (FFECOM_gfrtDOFIO, arglist, NULL_TREE);
}
-#endif
/* I/O driver for list-directed I/O item (do_lio)
Returns a tree for a CALL_EXPR to the do_lio function, which handles
@@ -1010,7 +978,6 @@ ffeste_io_dofio_ (ffebld expr)
of the result to an IOSTAT= variable, and emit any checking of the
result for errors. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree
ffeste_io_dolio_ (ffebld expr)
{
@@ -1049,8 +1016,9 @@ ffeste_io_dolio_ (ffebld expr)
if (size == NULL_TREE) /* Already filled in for CHARACTER type. */
{ /* "(ftnlen) sizeof(type)" */
size = size_binop (CEIL_DIV_EXPR,
- TYPE_SIZE (ffecom_tree_type[bt][kt]),
- size_int (TYPE_PRECISION (char_type_node)));
+ TYPE_SIZE_UNIT (ffecom_tree_type[bt][kt]),
+ size_int (TYPE_PRECISION (char_type_node)
+ / BITS_PER_UNIT));
#if 0 /* Assume that while it is possible that char * is wider than
ftnlen, no object in Fortran space can get big enough for its
size to be wider than ftnlen. I really hope nobody wastes
@@ -1066,13 +1034,13 @@ ffeste_io_dolio_ (ffebld expr)
num_elements = ffecom_integer_one_node;
else
{
- num_elements = size_binop (CEIL_DIV_EXPR,
- TYPE_SIZE (TREE_TYPE (TREE_TYPE (variable))),
- size);
- num_elements = size_binop (CEIL_DIV_EXPR,
- num_elements,
- size_int (TYPE_PRECISION
- (char_type_node)));
+ num_elements
+ = size_binop (CEIL_DIV_EXPR,
+ TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (variable))),
+ convert (sizetype, size));
+ num_elements = size_binop (CEIL_DIV_EXPR, num_elements,
+ size_int (TYPE_PRECISION (char_type_node)
+ / BITS_PER_UNIT));
num_elements = convert (ffecom_f2c_ftnlen_type_node,
num_elements);
}
@@ -1092,7 +1060,6 @@ ffeste_io_dolio_ (ffebld expr)
return ffecom_call_gfrt (FFECOM_gfrtDOLIO, arglist, NULL_TREE);
}
-#endif
/* I/O driver for unformatted I/O item (do_uio)
Returns a tree for a CALL_EXPR to the do_uio function, which handles
@@ -1102,7 +1069,6 @@ ffeste_io_dolio_ (ffebld expr)
of the result to an IOSTAT= variable, and emit any checking of the
result for errors. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree
ffeste_io_douio_ (ffebld expr)
{
@@ -1138,8 +1104,9 @@ ffeste_io_douio_ (ffebld expr)
if (size == NULL_TREE) /* Already filled in for CHARACTER type. */
{ /* "(ftnlen) sizeof(type)" */
size = size_binop (CEIL_DIV_EXPR,
- TYPE_SIZE (ffecom_tree_type[bt][kt]),
- size_int (TYPE_PRECISION (char_type_node)));
+ TYPE_SIZE_UNIT (ffecom_tree_type[bt][kt]),
+ size_int (TYPE_PRECISION (char_type_node)
+ / BITS_PER_UNIT));
#if 0 /* Assume that while it is possible that char * is wider than
ftnlen, no object in Fortran space can get big enough for its
size to be wider than ftnlen. I really hope nobody wastes
@@ -1156,12 +1123,13 @@ ffeste_io_douio_ (ffebld expr)
= is_complex ? ffecom_f2c_ftnlen_two_node : ffecom_f2c_ftnlen_one_node;
else
{
- num_elements = size_binop (CEIL_DIV_EXPR,
- TYPE_SIZE (TREE_TYPE (TREE_TYPE (variable))),
- size);
+ num_elements
+ = size_binop (CEIL_DIV_EXPR,
+ TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (variable))),
+ convert (sizetype, size));
num_elements = size_binop (CEIL_DIV_EXPR, num_elements,
- size_int (TYPE_PRECISION
- (char_type_node)));
+ size_int (TYPE_PRECISION (char_type_node)
+ / BITS_PER_UNIT));
num_elements = convert (ffecom_f2c_ftnlen_type_node,
num_elements);
}
@@ -1179,7 +1147,6 @@ ffeste_io_douio_ (ffebld expr)
return ffecom_call_gfrt (FFECOM_gfrtDOUIO, arglist, NULL_TREE);
}
-#endif
/* Make arglist with ptr to BACKSPACE/ENDFILE/REWIND control list.
Returns a tree suitable as an argument list containing a pointer to
@@ -1195,7 +1162,6 @@ ffeste_io_douio_ (ffebld expr)
declaration of variables (temporaries) to the expanding of expressions,
statements, etc. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree
ffeste_io_ialist_ (bool have_err,
ffestvUnit unit,
@@ -1205,7 +1171,6 @@ ffeste_io_ialist_ (bool have_err,
static tree f2c_alist_struct = NULL_TREE;
tree t;
tree ttype;
- int yes;
tree field;
tree inits, initn;
bool constantp = TRUE;
@@ -1218,9 +1183,6 @@ ffeste_io_ialist_ (bool have_err,
{
tree ref;
- push_obstacks_nochange ();
- end_temporary_allocation ();
-
ref = make_node (RECORD_TYPE);
errfield = ffecom_decl_field (ref, NULL_TREE, "err",
@@ -1231,8 +1193,7 @@ ffeste_io_ialist_ (bool have_err,
TYPE_FIELDS (ref) = errfield;
layout_type (ref);
- resume_temporary_allocation ();
- pop_obstacks ();
+ ggc_add_tree_root (&f2c_alist_struct, 1);
f2c_alist_struct = ref;
}
@@ -1276,18 +1237,14 @@ ffeste_io_ialist_ (bool have_err,
TREE_CONSTANT (inits) = constantp ? 1 : 0;
TREE_STATIC (inits) = 1;
- yes = suspend_momentary ();
-
t = build_decl (VAR_DECL,
- ffecom_get_invented_identifier ("__g77_alist_%d", NULL,
+ ffecom_get_invented_identifier ("__g77_alist_%d",
mynumber++),
f2c_alist_struct);
TREE_STATIC (t) = 1;
t = ffecom_start_decl (t, 1);
ffecom_finish_decl (t, inits, 0);
- resume_momentary (yes);
-
/* Prepare run-time expressions. */
if (! unitexp)
@@ -1311,7 +1268,6 @@ ffeste_io_ialist_ (bool have_err,
return t;
}
-#endif
/* Make arglist with ptr to external-I/O control list.
Returns a tree suitable as an argument list containing a pointer to
@@ -1327,7 +1283,6 @@ ffeste_io_ialist_ (bool have_err,
declaration of variables (temporaries) to the expanding of expressions,
statements, etc. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree
ffeste_io_cilist_ (bool have_err,
ffestvUnit unit,
@@ -1342,7 +1297,6 @@ ffeste_io_cilist_ (bool have_err,
static tree f2c_cilist_struct = NULL_TREE;
tree t;
tree ttype;
- int yes;
tree field;
tree inits, initn;
bool constantp = TRUE;
@@ -1355,9 +1309,6 @@ ffeste_io_cilist_ (bool have_err,
{
tree ref;
- push_obstacks_nochange ();
- end_temporary_allocation ();
-
ref = make_node (RECORD_TYPE);
errfield = ffecom_decl_field (ref, NULL_TREE, "err",
@@ -1374,8 +1325,7 @@ ffeste_io_cilist_ (bool have_err,
TYPE_FIELDS (ref) = errfield;
layout_type (ref);
- resume_temporary_allocation ();
- pop_obstacks ();
+ ggc_add_tree_root (&f2c_cilist_struct, 1);
f2c_cilist_struct = ref;
}
@@ -1492,18 +1442,14 @@ ffeste_io_cilist_ (bool have_err,
TREE_CONSTANT (inits) = constantp ? 1 : 0;
TREE_STATIC (inits) = 1;
- yes = suspend_momentary ();
-
t = build_decl (VAR_DECL,
- ffecom_get_invented_identifier ("__g77_cilist_%d", NULL,
+ ffecom_get_invented_identifier ("__g77_cilist_%d",
mynumber++),
f2c_cilist_struct);
TREE_STATIC (t) = 1;
t = ffecom_start_decl (t, 1);
ffecom_finish_decl (t, inits, 0);
- resume_momentary (yes);
-
/* Prepare run-time expressions. */
if (! unitexp)
@@ -1547,7 +1493,6 @@ ffeste_io_cilist_ (bool have_err,
return t;
}
-#endif
/* Make arglist with ptr to CLOSE control list.
Returns a tree suitable as an argument list containing a pointer to
@@ -1563,7 +1508,6 @@ ffeste_io_cilist_ (bool have_err,
declaration of variables (temporaries) to the expanding of expressions,
statements, etc. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree
ffeste_io_cllist_ (bool have_err,
ffebld unit_expr,
@@ -1572,7 +1516,6 @@ ffeste_io_cllist_ (bool have_err,
static tree f2c_close_struct = NULL_TREE;
tree t;
tree ttype;
- int yes;
tree field;
tree inits, initn;
tree ignore; /* Ignore length info for certain fields. */
@@ -1586,9 +1529,6 @@ ffeste_io_cllist_ (bool have_err,
{
tree ref;
- push_obstacks_nochange ();
- end_temporary_allocation ();
-
ref = make_node (RECORD_TYPE);
errfield = ffecom_decl_field (ref, NULL_TREE, "err",
@@ -1601,8 +1541,7 @@ ffeste_io_cllist_ (bool have_err,
TYPE_FIELDS (ref) = errfield;
layout_type (ref);
- resume_temporary_allocation ();
- pop_obstacks ();
+ ggc_add_tree_root (&f2c_close_struct, 1);
f2c_close_struct = ref;
}
@@ -1632,18 +1571,14 @@ ffeste_io_cllist_ (bool have_err,
TREE_CONSTANT (inits) = constantp ? 1 : 0;
TREE_STATIC (inits) = 1;
- yes = suspend_momentary ();
-
t = build_decl (VAR_DECL,
- ffecom_get_invented_identifier ("__g77_cllist_%d", NULL,
+ ffecom_get_invented_identifier ("__g77_cllist_%d",
mynumber++),
f2c_close_struct);
TREE_STATIC (t) = 1;
t = ffecom_start_decl (t, 1);
ffecom_finish_decl (t, inits, 0);
- resume_momentary (yes);
-
/* Prepare run-time expressions. */
if (! unitexp)
@@ -1672,7 +1607,6 @@ ffeste_io_cllist_ (bool have_err,
return t;
}
-#endif
/* Make arglist with ptr to internal-I/O control list.
Returns a tree suitable as an argument list containing a pointer to
@@ -1688,7 +1622,6 @@ ffeste_io_cllist_ (bool have_err,
declaration of variables (temporaries) to the expanding of expressions,
statements, etc. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree
ffeste_io_icilist_ (bool have_err,
ffebld unit_expr,
@@ -1699,7 +1632,6 @@ ffeste_io_icilist_ (bool have_err,
static tree f2c_icilist_struct = NULL_TREE;
tree t;
tree ttype;
- int yes;
tree field;
tree inits, initn;
bool constantp = TRUE;
@@ -1713,9 +1645,6 @@ ffeste_io_icilist_ (bool have_err,
{
tree ref;
- push_obstacks_nochange ();
- end_temporary_allocation ();
-
ref = make_node (RECORD_TYPE);
errfield = ffecom_decl_field (ref, NULL_TREE, "err",
@@ -1734,8 +1663,7 @@ ffeste_io_icilist_ (bool have_err,
TYPE_FIELDS (ref) = errfield;
layout_type (ref);
- resume_temporary_allocation ();
- pop_obstacks ();
+ ggc_add_tree_root (&f2c_icilist_struct, 1);
f2c_icilist_struct = ref;
}
@@ -1774,13 +1702,13 @@ ffeste_io_icilist_ (bool have_err,
else if (unitexp && unitlenexp)
{
/* An array, but all the info is constant, so compute now. */
- unitnuminit = size_binop (CEIL_DIV_EXPR,
- TYPE_SIZE (TREE_TYPE (TREE_TYPE (unitexp))),
- unitlenexp);
- unitnuminit = size_binop (CEIL_DIV_EXPR,
- unitnuminit,
- size_int (TYPE_PRECISION
- (char_type_node)));
+ unitnuminit
+ = size_binop (CEIL_DIV_EXPR,
+ TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (unitexp))),
+ convert (sizetype, unitlenexp));
+ unitnuminit = size_binop (CEIL_DIV_EXPR, unitnuminit,
+ size_int (TYPE_PRECISION (char_type_node)
+ / BITS_PER_UNIT));
unitnumexp = unitnuminit;
}
else
@@ -1850,18 +1778,14 @@ ffeste_io_icilist_ (bool have_err,
TREE_CONSTANT (inits) = constantp ? 1 : 0;
TREE_STATIC (inits) = 1;
- yes = suspend_momentary ();
-
t = build_decl (VAR_DECL,
- ffecom_get_invented_identifier ("__g77_icilist_%d", NULL,
+ ffecom_get_invented_identifier ("__g77_icilist_%d",
mynumber++),
f2c_icilist_struct);
TREE_STATIC (t) = 1;
t = ffecom_start_decl (t, 1);
ffecom_finish_decl (t, inits, 0);
- resume_momentary (yes);
-
/* Prepare run-time expressions. */
if (! unitexp)
@@ -1877,7 +1801,7 @@ ffeste_io_icilist_ (bool have_err,
{
int need_unitexp = (! unitexp);
int need_unitlenexp = (! unitlenexp);
-
+
unitexp = ffecom_arg_ptr_to_expr (unit_expr, &unitlenexp);
if (need_unitexp)
ffeste_f2c_compile_ (unitfield, unitexp);
@@ -1889,13 +1813,13 @@ ffeste_io_icilist_ (bool have_err,
&& unitexp != error_mark_node
&& unitlenexp != error_mark_node)
{
- unitnumexp = size_binop (CEIL_DIV_EXPR,
- TYPE_SIZE (TREE_TYPE (TREE_TYPE (unitexp))),
- unitlenexp);
- unitnumexp = size_binop (CEIL_DIV_EXPR,
- unitnumexp,
- size_int (TYPE_PRECISION
- (char_type_node)));
+ unitnumexp
+ = size_binop (CEIL_DIV_EXPR,
+ TYPE_SIZE_UNIT (TREE_TYPE (TREE_TYPE (unitexp))),
+ convert (sizetype, unitlenexp));
+ unitnumexp = size_binop (CEIL_DIV_EXPR, unitnumexp,
+ size_int (TYPE_PRECISION (char_type_node)
+ / BITS_PER_UNIT));
ffeste_f2c_compile_ (unitnumfield, unitnumexp);
}
@@ -1911,7 +1835,6 @@ ffeste_io_icilist_ (bool have_err,
return t;
}
-#endif
/* Make arglist with ptr to INQUIRE control list
@@ -1928,7 +1851,6 @@ ffeste_io_icilist_ (bool have_err,
declaration of variables (temporaries) to the expanding of expressions,
statements, etc. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree
ffeste_io_inlist_ (bool have_err,
ffestpFile *unit_spec,
@@ -1951,7 +1873,6 @@ ffeste_io_inlist_ (bool have_err,
static tree f2c_inquire_struct = NULL_TREE;
tree t;
tree ttype;
- int yes;
tree field;
tree inits, initn;
bool constantp = TRUE;
@@ -1976,9 +1897,6 @@ ffeste_io_inlist_ (bool have_err,
{
tree ref;
- push_obstacks_nochange ();
- end_temporary_allocation ();
-
ref = make_node (RECORD_TYPE);
errfield = ffecom_decl_field (ref, NULL_TREE, "err",
@@ -2041,8 +1959,7 @@ ffeste_io_inlist_ (bool have_err,
TYPE_FIELDS (ref) = errfield;
layout_type (ref);
- resume_temporary_allocation ();
- pop_obstacks ();
+ ggc_add_tree_root (&f2c_inquire_struct, 1);
f2c_inquire_struct = ref;
}
@@ -2110,18 +2027,14 @@ ffeste_io_inlist_ (bool have_err,
TREE_CONSTANT (inits) = constantp ? 1 : 0;
TREE_STATIC (inits) = 1;
- yes = suspend_momentary ();
-
t = build_decl (VAR_DECL,
- ffecom_get_invented_identifier ("__g77_inlist_%d", NULL,
+ ffecom_get_invented_identifier ("__g77_inlist_%d",
mynumber++),
f2c_inquire_struct);
TREE_STATIC (t) = 1;
t = ffecom_start_decl (t, 1);
ffecom_finish_decl (t, inits, 0);
- resume_momentary (yes);
-
/* Prepare run-time expressions. */
ffeste_f2c_prepare_int_ (unit_spec, unitexp);
@@ -2181,7 +2094,6 @@ ffeste_io_inlist_ (bool have_err,
return t;
}
-#endif
/* Make arglist with ptr to OPEN control list
Returns a tree suitable as an argument list containing a pointer to
@@ -2197,7 +2109,6 @@ ffeste_io_inlist_ (bool have_err,
declaration of variables (temporaries) to the expanding of expressions,
statements, etc. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static tree
ffeste_io_olist_ (bool have_err,
ffebld unit_expr,
@@ -2211,7 +2122,6 @@ ffeste_io_olist_ (bool have_err,
static tree f2c_open_struct = NULL_TREE;
tree t;
tree ttype;
- int yes;
tree field;
tree inits, initn;
tree ignore; /* Ignore length info for certain fields. */
@@ -2229,9 +2139,6 @@ ffeste_io_olist_ (bool have_err,
{
tree ref;
- push_obstacks_nochange ();
- end_temporary_allocation ();
-
ref = make_node (RECORD_TYPE);
errfield = ffecom_decl_field (ref, NULL_TREE, "err",
@@ -2256,8 +2163,7 @@ ffeste_io_olist_ (bool have_err,
TYPE_FIELDS (ref) = errfield;
layout_type (ref);
- resume_temporary_allocation ();
- pop_obstacks ();
+ ggc_add_tree_root (&f2c_open_struct, 1);
f2c_open_struct = ref;
}
@@ -2299,18 +2205,14 @@ ffeste_io_olist_ (bool have_err,
TREE_CONSTANT (inits) = constantp ? 1 : 0;
TREE_STATIC (inits) = 1;
- yes = suspend_momentary ();
-
t = build_decl (VAR_DECL,
- ffecom_get_invented_identifier ("__g77_olist_%d", NULL,
+ ffecom_get_invented_identifier ("__g77_olist_%d",
mynumber++),
f2c_open_struct);
TREE_STATIC (t) = 1;
t = ffecom_start_decl (t, 1);
ffecom_finish_decl (t, inits, 0);
- resume_momentary (yes);
-
/* Prepare run-time expressions. */
if (! unitexp)
@@ -2349,35 +2251,8 @@ ffeste_io_olist_ (bool have_err,
return t;
}
-#endif
-/* Display file-statement specifier. */
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-static void
-ffeste_subr_file_ (const char *kw, ffestpFile *spec)
-{
- if (!spec->kw_or_val_present)
- return;
- fputs (kw, dmpout);
- if (spec->value_present)
- {
- fputc ('=', dmpout);
- if (spec->value_is_label)
- {
- assert (spec->value_is_label == 2); /* Temporary checking only. */
- fprintf (dmpout, "%" ffelabValue_f "u",
- ffelab_value (spec->u.label));
- }
- else
- ffebld_dump (spec->u.expr);
- }
- fputc (',', dmpout);
-}
-#endif
-
/* Generate code for BACKSPACE/ENDFILE/REWIND. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
static void
ffeste_subr_beru_ (ffestpBeruStmt *info, ffecomGfrt rt)
{
@@ -2477,7 +2352,6 @@ ffeste_subr_beru_ (ffestpBeruStmt *info, ffecomGfrt rt)
ffeste_end_stmt_ ();
}
-#endif
/* END DO statement
@@ -2489,9 +2363,6 @@ ffeste_subr_beru_ (ffestpBeruStmt *info, ffecomGfrt rt)
void
ffeste_do (ffestw block)
{
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("+ END_DO\n", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
ffeste_emit_line_note_ ();
if (ffestw_do_tvar (block) == 0)
@@ -2505,9 +2376,6 @@ ffeste_do (ffestw block)
ffestw_do_tvar (block),
ffestw_do_incr_saved (block),
ffestw_do_count_var (block));
-#else
-#error
-#endif
}
/* End of statement following logical IF.
@@ -2517,17 +2385,11 @@ ffeste_do (ffestw block)
void
ffeste_end_R807 ()
{
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("+ END_IF\n", dmpout); /* Also see ffeste_R806. */
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
ffeste_emit_line_note_ ();
expand_end_cond ();
ffeste_end_block_ (NULL);
-#else
-#error
-#endif
}
/* Generate "code" for branch label definition. */
@@ -2535,30 +2397,22 @@ ffeste_end_R807 ()
void
ffeste_labeldef_branch (ffelab label)
{
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fprintf (dmpout, "+ label %lu\n", ffelab_value (label));
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
- {
- tree glabel;
+ tree glabel;
- glabel = ffecom_lookup_label (label);
- assert (glabel != NULL_TREE);
- if (TREE_CODE (glabel) == ERROR_MARK)
- return;
+ glabel = ffecom_lookup_label (label);
+ assert (glabel != NULL_TREE);
+ if (TREE_CODE (glabel) == ERROR_MARK)
+ return;
- assert (DECL_INITIAL (glabel) == NULL_TREE);
+ assert (DECL_INITIAL (glabel) == NULL_TREE);
- DECL_INITIAL (glabel) = error_mark_node;
- DECL_SOURCE_FILE (glabel) = ffelab_definition_filename (label);
- DECL_SOURCE_LINE (glabel) = ffelab_definition_filelinenum (label);
+ DECL_INITIAL (glabel) = error_mark_node;
+ DECL_SOURCE_FILE (glabel) = ffelab_definition_filename (label);
+ DECL_SOURCE_LINE (glabel) = ffelab_definition_filelinenum (label);
- emit_nop ();
+ emit_nop ();
- expand_label (glabel);
- }
-#else
-#error
-#endif
+ expand_label (glabel);
}
/* Generate "code" for FORMAT label definition. */
@@ -2566,13 +2420,7 @@ ffeste_labeldef_branch (ffelab label)
void
ffeste_labeldef_format (ffelab label)
{
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fprintf (dmpout, "$ label %lu\n", ffelab_value (label));
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
ffeste_label_formatdef_ = label;
-#else
-#error
-#endif
}
/* Assignment statement (outside of WHERE). */
@@ -2582,13 +2430,6 @@ ffeste_R737A (ffebld dest, ffebld source)
{
ffeste_check_simple_ ();
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("+ let ", dmpout);
- ffebld_dump (dest);
- fputs ("=", dmpout);
- ffebld_dump (source);
- fputc ('\n', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
ffeste_emit_line_note_ ();
ffeste_start_stmt_ ();
@@ -2596,9 +2437,6 @@ ffeste_R737A (ffebld dest, ffebld source)
ffecom_expand_let_stmt (dest, source);
ffeste_end_stmt_ ();
-#else
-#error
-#endif
}
/* Block IF (IF-THEN) statement. */
@@ -2606,54 +2444,44 @@ ffeste_R737A (ffebld dest, ffebld source)
void
ffeste_R803 (ffestw block, ffebld expr)
{
- ffeste_check_simple_ ();
+ tree temp;
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("+ IF_block (", dmpout);
- ffebld_dump (expr);
- fputs (")\n", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
- {
- tree temp;
+ ffeste_check_simple_ ();
- ffeste_emit_line_note_ ();
+ ffeste_emit_line_note_ ();
- ffeste_start_block_ (block);
+ ffeste_start_block_ (block);
- temp = ffecom_make_tempvar ("ifthen", integer_type_node,
- FFETARGET_charactersizeNONE, -1);
+ temp = ffecom_make_tempvar ("ifthen", integer_type_node,
+ FFETARGET_charactersizeNONE, -1);
- ffeste_start_stmt_ ();
+ ffeste_start_stmt_ ();
- ffecom_prepare_expr (expr);
+ ffecom_prepare_expr (expr);
- if (ffecom_prepare_end ())
- {
- tree result;
+ if (ffecom_prepare_end ())
+ {
+ tree result;
- result = ffecom_modify (void_type_node,
- temp,
- ffecom_truth_value (ffecom_expr (expr)));
+ result = ffecom_modify (void_type_node,
+ temp,
+ ffecom_truth_value (ffecom_expr (expr)));
- expand_expr_stmt (result);
+ expand_expr_stmt (result);
- ffeste_end_stmt_ ();
- }
- else
- {
- ffeste_end_stmt_ ();
+ ffeste_end_stmt_ ();
+ }
+ else
+ {
+ ffeste_end_stmt_ ();
- temp = ffecom_truth_value (ffecom_expr (expr));
- }
+ temp = ffecom_truth_value (ffecom_expr (expr));
+ }
- expand_start_cond (temp, 0);
+ expand_start_cond (temp, 0);
- /* No fake `else' constructs introduced (yet). */
- ffestw_set_ifthen_fake_else (block, 0);
- }
-#else
-#error
-#endif
+ /* No fake `else' constructs introduced (yet). */
+ ffestw_set_ifthen_fake_else (block, 0);
}
/* ELSE IF statement. */
@@ -2661,66 +2489,56 @@ ffeste_R803 (ffestw block, ffebld expr)
void
ffeste_R804 (ffestw block, ffebld expr)
{
- ffeste_check_simple_ ();
+ tree temp;
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("+ ELSE_IF (", dmpout);
- ffebld_dump (expr);
- fputs (")\n", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
- {
- tree temp;
+ ffeste_check_simple_ ();
- ffeste_emit_line_note_ ();
+ ffeste_emit_line_note_ ();
- /* Since ELSEIF(expr) might require preparations for expr,
- implement as ELSE; prepare-expr; IF (expr) THEN ...; ENDIF. */
+ /* Since ELSEIF(expr) might require preparations for expr,
+ implement as ELSE; prepare-expr; IF (expr) THEN ...; ENDIF. */
- expand_start_else ();
+ expand_start_else ();
- ffeste_start_block_ (block);
+ ffeste_start_block_ (block);
- temp = ffecom_make_tempvar ("elseif", integer_type_node,
- FFETARGET_charactersizeNONE, -1);
+ temp = ffecom_make_tempvar ("elseif", integer_type_node,
+ FFETARGET_charactersizeNONE, -1);
- ffeste_start_stmt_ ();
+ ffeste_start_stmt_ ();
- ffecom_prepare_expr (expr);
+ ffecom_prepare_expr (expr);
- if (ffecom_prepare_end ())
- {
- tree result;
+ if (ffecom_prepare_end ())
+ {
+ tree result;
- result = ffecom_modify (void_type_node,
- temp,
- ffecom_truth_value (ffecom_expr (expr)));
+ result = ffecom_modify (void_type_node,
+ temp,
+ ffecom_truth_value (ffecom_expr (expr)));
- expand_expr_stmt (result);
+ expand_expr_stmt (result);
- ffeste_end_stmt_ ();
- }
- else
- {
- /* In this case, we could probably have used expand_start_elseif
- instead, saving the need for a fake `else' construct. But,
- until it's clear that'd improve performance, it's easier this
- way, since we have to expand_start_else before we get to this
- test, given the current design. */
+ ffeste_end_stmt_ ();
+ }
+ else
+ {
+ /* In this case, we could probably have used expand_start_elseif
+ instead, saving the need for a fake `else' construct. But,
+ until it's clear that'd improve performance, it's easier this
+ way, since we have to expand_start_else before we get to this
+ test, given the current design. */
- ffeste_end_stmt_ ();
+ ffeste_end_stmt_ ();
- temp = ffecom_truth_value (ffecom_expr (expr));
- }
+ temp = ffecom_truth_value (ffecom_expr (expr));
+ }
- expand_start_cond (temp, 0);
+ expand_start_cond (temp, 0);
- /* Increment number of fake `else' constructs introduced. */
- ffestw_set_ifthen_fake_else (block,
- ffestw_ifthen_fake_else (block) + 1);
- }
-#else
-#error
-#endif
+ /* Increment number of fake `else' constructs introduced. */
+ ffestw_set_ifthen_fake_else (block,
+ ffestw_ifthen_fake_else (block) + 1);
}
/* ELSE statement. */
@@ -2730,15 +2548,9 @@ ffeste_R805 (ffestw block UNUSED)
{
ffeste_check_simple_ ();
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("+ ELSE\n", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
ffeste_emit_line_note_ ();
expand_start_else ();
-#else
-#error
-#endif
}
/* END IF statement. */
@@ -2746,24 +2558,16 @@ ffeste_R805 (ffestw block UNUSED)
void
ffeste_R806 (ffestw block)
{
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("+ END_IF_then\n", dmpout); /* Also see ffeste_shriek_if_. */
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
- {
- int i = ffestw_ifthen_fake_else (block) + 1;
+ int i = ffestw_ifthen_fake_else (block) + 1;
- ffeste_emit_line_note_ ();
+ ffeste_emit_line_note_ ();
- for (; i; --i)
- {
- expand_end_cond ();
+ for (; i; --i)
+ {
+ expand_end_cond ();
- ffeste_end_block_ (block);
- }
- }
-#else
-#error
-#endif
+ ffeste_end_block_ (block);
+ }
}
/* Logical IF statement. */
@@ -2771,51 +2575,41 @@ ffeste_R806 (ffestw block)
void
ffeste_R807 (ffebld expr)
{
+ tree temp;
+
ffeste_check_simple_ ();
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("+ IF_logical (", dmpout);
- ffebld_dump (expr);
- fputs (")\n", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
- {
- tree temp;
+ ffeste_emit_line_note_ ();
- ffeste_emit_line_note_ ();
+ ffeste_start_block_ (NULL);
- ffeste_start_block_ (NULL);
+ temp = ffecom_make_tempvar ("if", integer_type_node,
+ FFETARGET_charactersizeNONE, -1);
- temp = ffecom_make_tempvar ("if", integer_type_node,
- FFETARGET_charactersizeNONE, -1);
-
- ffeste_start_stmt_ ();
+ ffeste_start_stmt_ ();
- ffecom_prepare_expr (expr);
+ ffecom_prepare_expr (expr);
- if (ffecom_prepare_end ())
- {
- tree result;
+ if (ffecom_prepare_end ())
+ {
+ tree result;
- result = ffecom_modify (void_type_node,
- temp,
- ffecom_truth_value (ffecom_expr (expr)));
+ result = ffecom_modify (void_type_node,
+ temp,
+ ffecom_truth_value (ffecom_expr (expr)));
- expand_expr_stmt (result);
+ expand_expr_stmt (result);
- ffeste_end_stmt_ ();
- }
- else
- {
- ffeste_end_stmt_ ();
+ ffeste_end_stmt_ ();
+ }
+ else
+ {
+ ffeste_end_stmt_ ();
- temp = ffecom_truth_value (ffecom_expr (expr));
- }
+ temp = ffecom_truth_value (ffecom_expr (expr));
+ }
- expand_start_cond (temp, 0);
- }
-#else
-#error
-#endif
+ expand_start_cond (temp, 0);
}
/* SELECT CASE statement. */
@@ -2825,11 +2619,6 @@ ffeste_R809 (ffestw block, ffebld expr)
{
ffeste_check_simple_ ();
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("+ SELECT_CASE (", dmpout);
- ffebld_dump (expr);
- fputs (")\n", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
ffeste_emit_line_note_ ();
ffeste_start_block_ (block);
@@ -2881,9 +2670,6 @@ ffeste_R809 (ffestw block, ffebld expr)
ffestw_set_select_texpr (block, texpr);
ffestw_set_select_break (block, FALSE);
}
-#else
-#error
-#endif
}
/* CASE statement.
@@ -2897,6 +2683,11 @@ ffeste_R810 (ffestw block, unsigned long casenum)
{
ffestwSelect s = ffestw_select (block);
ffestwCase c;
+ tree texprlow;
+ tree texprhigh;
+ tree tlabel;
+ int pushok;
+ tree duplicate;
ffeste_check_simple_ ();
@@ -2905,100 +2696,53 @@ ffeste_R810 (ffestw block, unsigned long casenum)
else
c = s->first_stmt;
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- if ((c == NULL) || (casenum != c->casenum))
- {
- if (casenum == 0) /* Intentional CASE DEFAULT. */
- fputs ("+ CASE_DEFAULT", dmpout);
- }
- else
- {
- bool comma = FALSE;
-
- fputs ("+ CASE (", dmpout);
- do
- {
- if (comma)
- fputc (',', dmpout);
- else
- comma = TRUE;
- if (c->low != NULL)
- ffebld_constant_dump (c->low);
- if (c->low != c->high)
- {
- fputc (':', dmpout);
- if (c->high != NULL)
- ffebld_constant_dump (c->high);
- }
- c = c->next_stmt;
- /* Unlink prev. */
- c->previous_stmt->previous_stmt->next_stmt = c;
- c->previous_stmt = c->previous_stmt->previous_stmt;
- }
- while ((c != (ffestwCase) &s->first_rel) && (casenum == c->casenum));
- fputc (')', dmpout);
- }
-
- fputc ('\n', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
- {
- tree texprlow;
- tree texprhigh;
- tree tlabel;
- int pushok;
- tree duplicate;
-
- ffeste_emit_line_note_ ();
+ ffeste_emit_line_note_ ();
- if (ffestw_select_texpr (block) == error_mark_node)
- return;
+ if (ffestw_select_texpr (block) == error_mark_node)
+ return;
- /* ~~~Someday handle CHARACTER*1, CHARACTER*N */
+ /* ~~~Someday handle CHARACTER*1, CHARACTER*N */
- tlabel = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
+ tlabel = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
- if (ffestw_select_break (block))
- expand_exit_something ();
- else
- ffestw_set_select_break (block, TRUE);
+ if (ffestw_select_break (block))
+ expand_exit_something ();
+ else
+ ffestw_set_select_break (block, TRUE);
- if ((c == NULL) || (casenum != c->casenum))
+ if ((c == NULL) || (casenum != c->casenum))
+ {
+ if (casenum == 0) /* Intentional CASE DEFAULT. */
+ {
+ pushok = pushcase (NULL_TREE, 0, tlabel, &duplicate);
+ assert (pushok == 0);
+ }
+ }
+ else
+ do
{
- if (casenum == 0) /* Intentional CASE DEFAULT. */
+ texprlow = (c->low == NULL) ? NULL_TREE
+ : ffecom_constantunion (&ffebld_constant_union (c->low), s->type,
+ s->kindtype,
+ ffecom_tree_type[s->type][s->kindtype]);
+ if (c->low != c->high)
{
- pushok = pushcase (NULL_TREE, 0, tlabel, &duplicate);
- assert (pushok == 0);
+ texprhigh = (c->high == NULL) ? NULL_TREE
+ : ffecom_constantunion (&ffebld_constant_union (c->high),
+ s->type, s->kindtype,
+ ffecom_tree_type[s->type][s->kindtype]);
+ pushok = pushcase_range (texprlow, texprhigh, convert,
+ tlabel, &duplicate);
}
+ else
+ pushok = pushcase (texprlow, convert, tlabel, &duplicate);
+ assert (pushok == 0);
+ c = c->next_stmt;
+ /* Unlink prev. */
+ c->previous_stmt->previous_stmt->next_stmt = c;
+ c->previous_stmt = c->previous_stmt->previous_stmt;
}
- else
- do
- {
- texprlow = (c->low == NULL) ? NULL_TREE
- : ffecom_constantunion (&ffebld_constant_union (c->low), s->type,
- s->kindtype, ffecom_tree_type[s->type][s->kindtype]);
- if (c->low != c->high)
- {
- texprhigh = (c->high == NULL) ? NULL_TREE
- : ffecom_constantunion (&ffebld_constant_union (c->high),
- s->type, s->kindtype, ffecom_tree_type[s->type][s->kindtype]);
- pushok = pushcase_range (texprlow, texprhigh, convert,
- tlabel, &duplicate);
- }
- else
- pushok = pushcase (texprlow, convert, tlabel, &duplicate);
- assert (pushok == 0);
- c = c->next_stmt;
- /* Unlink prev. */
- c->previous_stmt->previous_stmt->next_stmt = c;
- c->previous_stmt = c->previous_stmt->previous_stmt;
- }
- while ((c != (ffestwCase) &s->first_rel) && (casenum == c->casenum));
-
- clear_momentary ();
- }
-#else
-#error
-#endif
+ while ((c != (ffestwCase) &s->first_rel) && (casenum == c->casenum));
}
/* END SELECT statement. */
@@ -3006,9 +2750,6 @@ ffeste_R810 (ffestw block, unsigned long casenum)
void
ffeste_R811 (ffestw block)
{
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("+ END_SELECT\n", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
ffeste_emit_line_note_ ();
/* ~~~Someday handle CHARACTER*1, CHARACTER*N */
@@ -3017,9 +2758,6 @@ ffeste_R811 (ffestw block)
expand_end_case (ffestw_select_texpr (block));
ffeste_end_block_ (block);
-#else
-#error
-#endif
}
/* Iterative DO statement. */
@@ -3032,44 +2770,14 @@ ffeste_R819A (ffestw block, ffelab label UNUSED, ffebld var,
{
ffeste_check_simple_ ();
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- if ((ffebld_op (incr) == FFEBLD_opCONTER)
- && (ffebld_constant_is_zero (ffebld_conter (incr))))
- {
- ffebad_start (FFEBAD_DO_STEP_ZERO);
- ffebad_here (0, ffelex_token_where_line (incr_token),
- ffelex_token_where_column (incr_token));
- ffebad_string ("Iterative DO loop");
- ffebad_finish ();
- /* Don't bother replacing it with 1 yet. */
- }
+ ffeste_emit_line_note_ ();
- if (label == NULL)
- fputs ("+ DO_iterative_nonlabeled (", dmpout);
- else
- fprintf (dmpout, "+ DO_iterative_labeled %lu (", ffelab_value (label));
- ffebld_dump (var);
- fputc ('=', dmpout);
- ffebld_dump (start);
- fputc (',', dmpout);
- ffebld_dump (end);
- fputc (',', dmpout);
- ffebld_dump (incr);
- fputs (")\n", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
- {
- ffeste_emit_line_note_ ();
-
- ffeste_begin_iterdo_ (block, NULL, NULL, NULL,
- var,
- start, start_token,
- end, end_token,
- incr, incr_token,
- "Iterative DO loop");
- }
-#else
-#error
-#endif
+ ffeste_begin_iterdo_ (block, NULL, NULL, NULL,
+ var,
+ start, start_token,
+ end, end_token,
+ incr, incr_token,
+ "Iterative DO loop");
}
/* DO WHILE statement. */
@@ -3077,56 +2785,43 @@ ffeste_R819A (ffestw block, ffelab label UNUSED, ffebld var,
void
ffeste_R819B (ffestw block, ffelab label UNUSED, ffebld expr)
{
- ffeste_check_simple_ ();
+ tree result;
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- if (label == NULL)
- fputs ("+ DO_WHILE_nonlabeled (", dmpout);
- else
- fprintf (dmpout, "+ DO_WHILE_labeled %lu (", ffelab_value (label));
- ffebld_dump (expr);
- fputs (")\n", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
- {
- tree result;
+ ffeste_check_simple_ ();
- ffeste_emit_line_note_ ();
+ ffeste_emit_line_note_ ();
- ffeste_start_block_ (block);
+ ffeste_start_block_ (block);
- if (expr)
- {
- struct nesting *loop;
- tree mod;
+ if (expr)
+ {
+ struct nesting *loop;
+ tree mod;
- result = ffecom_make_tempvar ("dowhile", integer_type_node,
- FFETARGET_charactersizeNONE, -1);
- loop = expand_start_loop (1);
+ result = ffecom_make_tempvar ("dowhile", integer_type_node,
+ FFETARGET_charactersizeNONE, -1);
+ loop = expand_start_loop (1);
- ffeste_start_stmt_ ();
+ ffeste_start_stmt_ ();
- ffecom_prepare_expr (expr);
+ ffecom_prepare_expr (expr);
- ffecom_prepare_end ();
+ ffecom_prepare_end ();
- mod = ffecom_modify (void_type_node,
- result,
- ffecom_truth_value (ffecom_expr (expr)));
- expand_expr_stmt (mod);
+ mod = ffecom_modify (void_type_node,
+ result,
+ ffecom_truth_value (ffecom_expr (expr)));
+ expand_expr_stmt (mod);
- ffeste_end_stmt_ ();
+ ffeste_end_stmt_ ();
- ffestw_set_do_hook (block, loop);
- expand_exit_loop_if_false (0, result);
- }
- else
- ffestw_set_do_hook (block, expand_start_loop (1));
+ ffestw_set_do_hook (block, loop);
+ expand_exit_loop_top_cond (0, result);
+ }
+ else
+ ffestw_set_do_hook (block, expand_start_loop (1));
- ffestw_set_do_tvar (block, NULL_TREE);
- }
-#else
-#error
-#endif
+ ffestw_set_do_tvar (block, NULL_TREE);
}
/* END DO statement.
@@ -3142,15 +2837,9 @@ ffeste_R825 ()
{
ffeste_check_simple_ ();
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("+ END_DO_sugar\n", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
ffeste_emit_line_note_ ();
emit_nop ();
-#else
-#error
-#endif
}
/* CYCLE statement. */
@@ -3160,15 +2849,9 @@ ffeste_R834 (ffestw block)
{
ffeste_check_simple_ ();
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fprintf (dmpout, "+ CYCLE block #%lu\n", ffestw_blocknum (block));
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
ffeste_emit_line_note_ ();
expand_continue_loop (ffestw_do_hook (block));
-#else
-#error
-#endif
}
/* EXIT statement. */
@@ -3178,15 +2861,9 @@ ffeste_R835 (ffestw block)
{
ffeste_check_simple_ ();
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fprintf (dmpout, "+ EXIT block #%lu\n", ffestw_blocknum (block));
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
ffeste_emit_line_note_ ();
expand_exit_loop (ffestw_do_hook (block));
-#else
-#error
-#endif
}
/* GOTO statement. */
@@ -3194,27 +2871,19 @@ ffeste_R835 (ffestw block)
void
ffeste_R836 (ffelab label)
{
- ffeste_check_simple_ ();
+ tree glabel;
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fprintf (dmpout, "+ GOTO %lu\n", ffelab_value (label));
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
- {
- tree glabel;
+ ffeste_check_simple_ ();
- ffeste_emit_line_note_ ();
+ ffeste_emit_line_note_ ();
- glabel = ffecom_lookup_label (label);
- if ((glabel != NULL_TREE)
- && (TREE_CODE (glabel) != ERROR_MARK))
- {
- expand_goto (glabel);
- TREE_USED (glabel) = 1;
- }
- }
-#else
-#error
-#endif
+ glabel = ffecom_lookup_label (label);
+ if ((glabel != NULL_TREE)
+ && (TREE_CODE (glabel) != ERROR_MARK))
+ {
+ expand_goto (glabel);
+ TREE_USED (glabel) = 1;
+ }
}
/* Computed GOTO statement. */
@@ -3223,63 +2892,45 @@ void
ffeste_R837 (ffelab *labels, int count, ffebld expr)
{
int i;
+ tree texpr;
+ tree value;
+ tree tlabel;
+ int pushok;
+ tree duplicate;
ffeste_check_simple_ ();
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("+ CGOTO (", dmpout);
- for (i = 0; i < count; ++i)
- {
- if (i != 0)
- fputc (',', dmpout);
- fprintf (dmpout, "%" ffelabValue_f "u", ffelab_value (labels[i]));
- }
- fputs ("),", dmpout);
- ffebld_dump (expr);
- fputc ('\n', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
- {
- tree texpr;
- tree value;
- tree tlabel;
- int pushok;
- tree duplicate;
-
- ffeste_emit_line_note_ ();
+ ffeste_emit_line_note_ ();
- ffeste_start_stmt_ ();
+ ffeste_start_stmt_ ();
- ffecom_prepare_expr (expr);
+ ffecom_prepare_expr (expr);
- ffecom_prepare_end ();
+ ffecom_prepare_end ();
- texpr = ffecom_expr (expr);
+ texpr = ffecom_expr (expr);
- expand_start_case (0, texpr, TREE_TYPE (texpr), "computed GOTO statement");
+ expand_start_case (0, texpr, TREE_TYPE (texpr), "computed GOTO statement");
- for (i = 0; i < count; ++i)
- {
- value = build_int_2 (i + 1, 0);
- tlabel = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
+ for (i = 0; i < count; ++i)
+ {
+ value = build_int_2 (i + 1, 0);
+ tlabel = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
- pushok = pushcase (value, convert, tlabel, &duplicate);
- assert (pushok == 0);
+ pushok = pushcase (value, convert, tlabel, &duplicate);
+ assert (pushok == 0);
- tlabel = ffecom_lookup_label (labels[i]);
- if ((tlabel == NULL_TREE)
- || (TREE_CODE (tlabel) == ERROR_MARK))
- continue;
+ tlabel = ffecom_lookup_label (labels[i]);
+ if ((tlabel == NULL_TREE)
+ || (TREE_CODE (tlabel) == ERROR_MARK))
+ continue;
- expand_goto (tlabel);
- TREE_USED (tlabel) = 1;
- }
- expand_end_case (texpr);
+ expand_goto (tlabel);
+ TREE_USED (tlabel) = 1;
+ }
+ expand_end_case (texpr);
- ffeste_end_stmt_ ();
- }
-#else
-#error
-#endif
+ ffeste_end_stmt_ ();
}
/* ASSIGN statement. */
@@ -3287,50 +2938,38 @@ ffeste_R837 (ffelab *labels, int count, ffebld expr)
void
ffeste_R838 (ffelab label, ffebld target)
{
- ffeste_check_simple_ ();
+ tree expr_tree;
+ tree label_tree;
+ tree target_tree;
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fprintf (dmpout, "+ ASSIGN %lu TO ", ffelab_value (label));
- ffebld_dump (target);
- fputc ('\n', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
- {
- tree expr_tree;
- tree label_tree;
- tree target_tree;
+ ffeste_check_simple_ ();
- ffeste_emit_line_note_ ();
+ ffeste_emit_line_note_ ();
/* No need to call ffeste_start_stmt_(), as the sorts of expressions
seen here should never require use of temporaries. */
- label_tree = ffecom_lookup_label (label);
- if ((label_tree != NULL_TREE)
- && (TREE_CODE (label_tree) != ERROR_MARK))
- {
- label_tree = ffecom_1 (ADDR_EXPR,
- build_pointer_type (void_type_node),
- label_tree);
- TREE_CONSTANT (label_tree) = 1;
-
- target_tree = ffecom_expr_assign_w (target);
- if (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (target_tree)))
- < GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (label_tree))))
- error ("ASSIGN to variable that is too small");
+ label_tree = ffecom_lookup_label (label);
+ if ((label_tree != NULL_TREE)
+ && (TREE_CODE (label_tree) != ERROR_MARK))
+ {
+ label_tree = ffecom_1 (ADDR_EXPR,
+ build_pointer_type (void_type_node),
+ label_tree);
+ TREE_CONSTANT (label_tree) = 1;
- label_tree = convert (TREE_TYPE (target_tree), label_tree);
+ target_tree = ffecom_expr_assign_w (target);
+ if (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (target_tree)))
+ < GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (label_tree))))
+ error ("ASSIGN to variable that is too small");
- expr_tree = ffecom_modify (void_type_node,
- target_tree,
- label_tree);
- expand_expr_stmt (expr_tree);
+ label_tree = convert (TREE_TYPE (target_tree), label_tree);
- clear_momentary ();
- }
- }
-#else
-#error
-#endif
+ expr_tree = ffecom_modify (void_type_node,
+ target_tree,
+ label_tree);
+ expand_expr_stmt (expr_tree);
+ }
}
/* Assigned GOTO statement. */
@@ -3338,33 +2977,21 @@ ffeste_R838 (ffelab label, ffebld target)
void
ffeste_R839 (ffebld target)
{
- ffeste_check_simple_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("+ AGOTO ", dmpout);
- ffebld_dump (target);
- fputc ('\n', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
- {
- tree t;
+ tree t;
- ffeste_emit_line_note_ ();
+ ffeste_check_simple_ ();
- /* No need to call ffeste_start_stmt_(), as the sorts of expressions
- seen here should never require use of temporaries. */
+ ffeste_emit_line_note_ ();
- t = ffecom_expr_assign (target);
- if (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (t)))
- < GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (null_pointer_node))))
- error ("ASSIGNed GOTO target variable is too small");
+ /* No need to call ffeste_start_stmt_(), as the sorts of expressions
+ seen here should never require use of temporaries. */
- expand_computed_goto (convert (TREE_TYPE (null_pointer_node), t));
+ t = ffecom_expr_assign (target);
+ if (GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (t)))
+ < GET_MODE_SIZE (TYPE_MODE (TREE_TYPE (null_pointer_node))))
+ error ("ASSIGNed GOTO target variable is too small");
- clear_momentary ();
- }
-#else
-#error
-#endif
+ expand_computed_goto (convert (TREE_TYPE (null_pointer_node), t));
}
/* Arithmetic IF statement. */
@@ -3372,112 +2999,101 @@ ffeste_R839 (ffebld target)
void
ffeste_R840 (ffebld expr, ffelab neg, ffelab zero, ffelab pos)
{
- ffeste_check_simple_ ();
+ tree gneg = ffecom_lookup_label (neg);
+ tree gzero = ffecom_lookup_label (zero);
+ tree gpos = ffecom_lookup_label (pos);
+ tree texpr;
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("+ IF_arithmetic (", dmpout);
- ffebld_dump (expr);
- fprintf (dmpout, ") %" ffelabValue_f "u,%" ffelabValue_f "u,%" ffelabValue_f "u\n",
- ffelab_value (neg), ffelab_value (zero), ffelab_value (pos));
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
- {
- tree gneg = ffecom_lookup_label (neg);
- tree gzero = ffecom_lookup_label (zero);
- tree gpos = ffecom_lookup_label (pos);
- tree texpr;
+ ffeste_check_simple_ ();
- ffeste_emit_line_note_ ();
+ ffeste_emit_line_note_ ();
- if ((gneg == NULL_TREE) || (gzero == NULL_TREE) || (gpos == NULL_TREE))
- return;
- if ((TREE_CODE (gneg) == ERROR_MARK)
- || (TREE_CODE (gzero) == ERROR_MARK)
- || (TREE_CODE (gpos) == ERROR_MARK))
- return;
+ if ((gneg == NULL_TREE) || (gzero == NULL_TREE) || (gpos == NULL_TREE))
+ return;
+ if ((TREE_CODE (gneg) == ERROR_MARK)
+ || (TREE_CODE (gzero) == ERROR_MARK)
+ || (TREE_CODE (gpos) == ERROR_MARK))
+ return;
- ffeste_start_stmt_ ();
+ ffeste_start_stmt_ ();
- ffecom_prepare_expr (expr);
+ ffecom_prepare_expr (expr);
- ffecom_prepare_end ();
+ ffecom_prepare_end ();
- if (neg == zero)
- {
- if (neg == pos)
- expand_goto (gzero);
- else
- {
- /* IF (expr.LE.0) THEN GOTO neg/zero ELSE GOTO pos. */
- texpr = ffecom_expr (expr);
- texpr = ffecom_2 (LE_EXPR, integer_type_node,
- texpr,
- convert (TREE_TYPE (texpr),
- integer_zero_node));
- expand_start_cond (ffecom_truth_value (texpr), 0);
- expand_goto (gzero);
- expand_start_else ();
- expand_goto (gpos);
- expand_end_cond ();
- }
- }
- else if (neg == pos)
- {
- /* IF (expr.NE.0) THEN GOTO neg/pos ELSE GOTO zero. */
- texpr = ffecom_expr (expr);
- texpr = ffecom_2 (NE_EXPR, integer_type_node,
- texpr,
- convert (TREE_TYPE (texpr),
- integer_zero_node));
- expand_start_cond (ffecom_truth_value (texpr), 0);
- expand_goto (gneg);
- expand_start_else ();
- expand_goto (gzero);
- expand_end_cond ();
- }
- else if (zero == pos)
- {
- /* IF (expr.GE.0) THEN GOTO zero/pos ELSE GOTO neg. */
- texpr = ffecom_expr (expr);
- texpr = ffecom_2 (GE_EXPR, integer_type_node,
- texpr,
- convert (TREE_TYPE (texpr),
- integer_zero_node));
- expand_start_cond (ffecom_truth_value (texpr), 0);
- expand_goto (gzero);
- expand_start_else ();
- expand_goto (gneg);
- expand_end_cond ();
- }
- else
- {
- /* Use a SAVE_EXPR in combo with:
- IF (expr.LT.0) THEN GOTO neg
- ELSEIF (expr.GT.0) THEN GOTO pos
- ELSE GOTO zero. */
- tree expr_saved = ffecom_save_tree (ffecom_expr (expr));
-
- texpr = ffecom_2 (LT_EXPR, integer_type_node,
- expr_saved,
- convert (TREE_TYPE (expr_saved),
- integer_zero_node));
- expand_start_cond (ffecom_truth_value (texpr), 0);
- expand_goto (gneg);
- texpr = ffecom_2 (GT_EXPR, integer_type_node,
- expr_saved,
- convert (TREE_TYPE (expr_saved),
- integer_zero_node));
- expand_start_elseif (ffecom_truth_value (texpr));
- expand_goto (gpos);
- expand_start_else ();
+ if (neg == zero)
+ {
+ if (neg == pos)
expand_goto (gzero);
- expand_end_cond ();
- }
+ else
+ {
+ /* IF (expr.LE.0) THEN GOTO neg/zero ELSE GOTO pos. */
+ texpr = ffecom_expr (expr);
+ texpr = ffecom_2 (LE_EXPR, integer_type_node,
+ texpr,
+ convert (TREE_TYPE (texpr),
+ integer_zero_node));
+ expand_start_cond (ffecom_truth_value (texpr), 0);
+ expand_goto (gzero);
+ expand_start_else ();
+ expand_goto (gpos);
+ expand_end_cond ();
+ }
+ }
+ else if (neg == pos)
+ {
+ /* IF (expr.NE.0) THEN GOTO neg/pos ELSE GOTO zero. */
+ texpr = ffecom_expr (expr);
+ texpr = ffecom_2 (NE_EXPR, integer_type_node,
+ texpr,
+ convert (TREE_TYPE (texpr),
+ integer_zero_node));
+ expand_start_cond (ffecom_truth_value (texpr), 0);
+ expand_goto (gneg);
+ expand_start_else ();
+ expand_goto (gzero);
+ expand_end_cond ();
+ }
+ else if (zero == pos)
+ {
+ /* IF (expr.GE.0) THEN GOTO zero/pos ELSE GOTO neg. */
+ texpr = ffecom_expr (expr);
+ texpr = ffecom_2 (GE_EXPR, integer_type_node,
+ texpr,
+ convert (TREE_TYPE (texpr),
+ integer_zero_node));
+ expand_start_cond (ffecom_truth_value (texpr), 0);
+ expand_goto (gzero);
+ expand_start_else ();
+ expand_goto (gneg);
+ expand_end_cond ();
+ }
+ else
+ {
+ /* Use a SAVE_EXPR in combo with:
+ IF (expr.LT.0) THEN GOTO neg
+ ELSEIF (expr.GT.0) THEN GOTO pos
+ ELSE GOTO zero. */
+ tree expr_saved = ffecom_save_tree (ffecom_expr (expr));
+
+ texpr = ffecom_2 (LT_EXPR, integer_type_node,
+ expr_saved,
+ convert (TREE_TYPE (expr_saved),
+ integer_zero_node));
+ expand_start_cond (ffecom_truth_value (texpr), 0);
+ expand_goto (gneg);
+ texpr = ffecom_2 (GT_EXPR, integer_type_node,
+ expr_saved,
+ convert (TREE_TYPE (expr_saved),
+ integer_zero_node));
+ expand_start_elseif (ffecom_truth_value (texpr));
+ expand_goto (gpos);
+ expand_start_else ();
+ expand_goto (gzero);
+ expand_end_cond ();
+ }
- ffeste_end_stmt_ ();
- }
-#else
-#error
-#endif
+ ffeste_end_stmt_ ();
}
/* CONTINUE statement. */
@@ -3487,15 +3103,9 @@ ffeste_R841 ()
{
ffeste_check_simple_ ();
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("+ CONTINUE\n", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
ffeste_emit_line_note_ ();
emit_nop ();
-#else
-#error
-#endif
}
/* STOP statement. */
@@ -3503,84 +3113,66 @@ ffeste_R841 ()
void
ffeste_R842 (ffebld expr)
{
+ tree callit;
+ ffelexToken msg;
+
ffeste_check_simple_ ();
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- if (expr == NULL)
+ ffeste_emit_line_note_ ();
+
+ if ((expr == NULL)
+ || (ffeinfo_basictype (ffebld_info (expr))
+ == FFEINFO_basictypeANY))
+ {
+ msg = ffelex_token_new_character ("",
+ ffelex_token_where_line (ffesta_tokens[0]),
+ ffelex_token_where_column (ffesta_tokens[0]));
+ expr = ffebld_new_conter (ffebld_constant_new_characterdefault
+ (msg));
+ ffelex_token_kill (msg);
+ ffebld_set_info (expr, ffeinfo_new (FFEINFO_basictypeCHARACTER,
+ FFEINFO_kindtypeCHARACTERDEFAULT,
+ 0, FFEINFO_kindENTITY,
+ FFEINFO_whereCONSTANT, 0));
+ }
+ else if (ffeinfo_basictype (ffebld_info (expr))
+ == FFEINFO_basictypeINTEGER)
{
- fputs ("+ STOP\n", dmpout);
+ char num[50];
+
+ assert (ffebld_op (expr) == FFEBLD_opCONTER);
+ assert (ffeinfo_kindtype (ffebld_info (expr))
+ == FFEINFO_kindtypeINTEGERDEFAULT);
+ sprintf (num, "%" ffetargetIntegerDefault_f "d",
+ ffebld_constant_integer1 (ffebld_conter (expr)));
+ msg = ffelex_token_new_character (num,
+ ffelex_token_where_line (ffesta_tokens[0]),
+ ffelex_token_where_column (ffesta_tokens[0]));
+ expr = ffebld_new_conter (ffebld_constant_new_characterdefault (msg));
+ ffelex_token_kill (msg);
+ ffebld_set_info (expr, ffeinfo_new (FFEINFO_basictypeCHARACTER,
+ FFEINFO_kindtypeCHARACTERDEFAULT,
+ 0, FFEINFO_kindENTITY,
+ FFEINFO_whereCONSTANT, 0));
}
else
{
- fputs ("+ STOP_coded ", dmpout);
- ffebld_dump (expr);
- fputc ('\n', dmpout);
+ assert (ffeinfo_basictype (ffebld_info (expr))
+ == FFEINFO_basictypeCHARACTER);
+ assert (ffebld_op (expr) == FFEBLD_opCONTER);
+ assert (ffeinfo_kindtype (ffebld_info (expr))
+ == FFEINFO_kindtypeCHARACTERDEFAULT);
}
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
- {
- tree callit;
- ffelexToken msg;
-
- ffeste_emit_line_note_ ();
-
- if ((expr == NULL)
- || (ffeinfo_basictype (ffebld_info (expr))
- == FFEINFO_basictypeANY))
- {
- msg = ffelex_token_new_character ("", ffelex_token_where_line
- (ffesta_tokens[0]), ffelex_token_where_column
- (ffesta_tokens[0]));
- expr = ffebld_new_conter (ffebld_constant_new_characterdefault
- (msg));
- ffelex_token_kill (msg);
- ffebld_set_info (expr, ffeinfo_new (FFEINFO_basictypeCHARACTER,
- FFEINFO_kindtypeCHARACTERDEFAULT, 0, FFEINFO_kindENTITY,
- FFEINFO_whereCONSTANT, 0));
- }
- else if (ffeinfo_basictype (ffebld_info (expr))
- == FFEINFO_basictypeINTEGER)
- {
- char num[50];
-
- assert (ffebld_op (expr) == FFEBLD_opCONTER);
- assert (ffeinfo_kindtype (ffebld_info (expr))
- == FFEINFO_kindtypeINTEGERDEFAULT);
- sprintf (num, "%" ffetargetIntegerDefault_f "d",
- ffebld_constant_integer1 (ffebld_conter (expr)));
- msg = ffelex_token_new_character (num, ffelex_token_where_line
- (ffesta_tokens[0]), ffelex_token_where_column
- (ffesta_tokens[0]));
- expr = ffebld_new_conter (ffebld_constant_new_characterdefault
- (msg));
- ffelex_token_kill (msg);
- ffebld_set_info (expr, ffeinfo_new (FFEINFO_basictypeCHARACTER,
- FFEINFO_kindtypeCHARACTERDEFAULT, 0, FFEINFO_kindENTITY,
- FFEINFO_whereCONSTANT, 0));
- }
- else
- {
- assert (ffeinfo_basictype (ffebld_info (expr))
- == FFEINFO_basictypeCHARACTER);
- assert (ffebld_op (expr) == FFEBLD_opCONTER);
- assert (ffeinfo_kindtype (ffebld_info (expr))
- == FFEINFO_kindtypeCHARACTERDEFAULT);
- }
-
- /* No need to call ffeste_start_stmt_(), as the sorts of expressions
- seen here should never require use of temporaries. */
- callit = ffecom_call_gfrt (FFECOM_gfrtSTOP,
- ffecom_list_ptr_to_expr (ffebld_new_item (expr, NULL)),
- NULL_TREE);
- TREE_SIDE_EFFECTS (callit) = 1;
+ /* No need to call ffeste_start_stmt_(), as the sorts of expressions
+ seen here should never require use of temporaries. */
- expand_expr_stmt (callit);
+ callit = ffecom_call_gfrt (FFECOM_gfrtSTOP,
+ ffecom_list_ptr_to_expr (ffebld_new_item (expr, NULL)),
+ NULL_TREE);
+ TREE_SIDE_EFFECTS (callit) = 1;
- clear_momentary ();
- }
-#else
-#error
-#endif
+ expand_expr_stmt (callit);
}
/* PAUSE statement. */
@@ -3588,112 +3180,63 @@ ffeste_R842 (ffebld expr)
void
ffeste_R843 (ffebld expr)
{
+ tree callit;
+ ffelexToken msg;
+
ffeste_check_simple_ ();
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- if (expr == NULL)
+ ffeste_emit_line_note_ ();
+
+ if ((expr == NULL)
+ || (ffeinfo_basictype (ffebld_info (expr))
+ == FFEINFO_basictypeANY))
+ {
+ msg = ffelex_token_new_character ("",
+ ffelex_token_where_line (ffesta_tokens[0]),
+ ffelex_token_where_column (ffesta_tokens[0]));
+ expr = ffebld_new_conter (ffebld_constant_new_characterdefault (msg));
+ ffelex_token_kill (msg);
+ ffebld_set_info (expr, ffeinfo_new (FFEINFO_basictypeCHARACTER,
+ FFEINFO_kindtypeCHARACTERDEFAULT,
+ 0, FFEINFO_kindENTITY,
+ FFEINFO_whereCONSTANT, 0));
+ }
+ else if (ffeinfo_basictype (ffebld_info (expr)) == FFEINFO_basictypeINTEGER)
{
- fputs ("+ PAUSE\n", dmpout);
+ char num[50];
+
+ assert (ffebld_op (expr) == FFEBLD_opCONTER);
+ assert (ffeinfo_kindtype (ffebld_info (expr))
+ == FFEINFO_kindtypeINTEGERDEFAULT);
+ sprintf (num, "%" ffetargetIntegerDefault_f "d",
+ ffebld_constant_integer1 (ffebld_conter (expr)));
+ msg = ffelex_token_new_character (num, ffelex_token_where_line (ffesta_tokens[0]),
+ ffelex_token_where_column (ffesta_tokens[0]));
+ expr = ffebld_new_conter (ffebld_constant_new_characterdefault (msg));
+ ffelex_token_kill (msg);
+ ffebld_set_info (expr, ffeinfo_new (FFEINFO_basictypeCHARACTER,
+ FFEINFO_kindtypeCHARACTERDEFAULT,
+ 0, FFEINFO_kindENTITY,
+ FFEINFO_whereCONSTANT, 0));
}
else
{
- fputs ("+ PAUSE_coded ", dmpout);
- ffebld_dump (expr);
- fputc ('\n', dmpout);
+ assert (ffeinfo_basictype (ffebld_info (expr))
+ == FFEINFO_basictypeCHARACTER);
+ assert (ffebld_op (expr) == FFEBLD_opCONTER);
+ assert (ffeinfo_kindtype (ffebld_info (expr))
+ == FFEINFO_kindtypeCHARACTERDEFAULT);
}
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
- {
- tree callit;
- ffelexToken msg;
-
- ffeste_emit_line_note_ ();
-
- if ((expr == NULL)
- || (ffeinfo_basictype (ffebld_info (expr))
- == FFEINFO_basictypeANY))
- {
- msg = ffelex_token_new_character ("", ffelex_token_where_line
- (ffesta_tokens[0]), ffelex_token_where_column
- (ffesta_tokens[0]));
- expr = ffebld_new_conter (ffebld_constant_new_characterdefault
- (msg));
- ffelex_token_kill (msg);
- ffebld_set_info (expr, ffeinfo_new (FFEINFO_basictypeCHARACTER,
- FFEINFO_kindtypeCHARACTERDEFAULT, 0, FFEINFO_kindENTITY,
- FFEINFO_whereCONSTANT, 0));
- }
- else if (ffeinfo_basictype (ffebld_info (expr))
- == FFEINFO_basictypeINTEGER)
- {
- char num[50];
-
- assert (ffebld_op (expr) == FFEBLD_opCONTER);
- assert (ffeinfo_kindtype (ffebld_info (expr))
- == FFEINFO_kindtypeINTEGERDEFAULT);
- sprintf (num, "%" ffetargetIntegerDefault_f "d",
- ffebld_constant_integer1 (ffebld_conter (expr)));
- msg = ffelex_token_new_character (num, ffelex_token_where_line
- (ffesta_tokens[0]), ffelex_token_where_column
- (ffesta_tokens[0]));
- expr = ffebld_new_conter (ffebld_constant_new_characterdefault
- (msg));
- ffelex_token_kill (msg);
- ffebld_set_info (expr, ffeinfo_new (FFEINFO_basictypeCHARACTER,
- FFEINFO_kindtypeCHARACTERDEFAULT, 0, FFEINFO_kindENTITY,
- FFEINFO_whereCONSTANT, 0));
- }
- else
- {
- assert (ffeinfo_basictype (ffebld_info (expr))
- == FFEINFO_basictypeCHARACTER);
- assert (ffebld_op (expr) == FFEBLD_opCONTER);
- assert (ffeinfo_kindtype (ffebld_info (expr))
- == FFEINFO_kindtypeCHARACTERDEFAULT);
- }
- /* No need to call ffeste_start_stmt_(), as the sorts of expressions
- seen here should never require use of temporaries. */
+ /* No need to call ffeste_start_stmt_(), as the sorts of expressions
+ seen here should never require use of temporaries. */
- callit = ffecom_call_gfrt (FFECOM_gfrtPAUSE,
- ffecom_list_ptr_to_expr (ffebld_new_item (expr, NULL)),
- NULL_TREE);
- TREE_SIDE_EFFECTS (callit) = 1;
+ callit = ffecom_call_gfrt (FFECOM_gfrtPAUSE,
+ ffecom_list_ptr_to_expr (ffebld_new_item (expr, NULL)),
+ NULL_TREE);
+ TREE_SIDE_EFFECTS (callit) = 1;
- expand_expr_stmt (callit);
-
- clear_momentary ();
- }
-#if 0 /* Old approach for phantom g77 run-time
- library. */
- {
- tree callit;
-
- ffeste_emit_line_note_ ();
-
- if (expr == NULL)
- callit = ffecom_call_gfrt (FFECOM_gfrtPAUSENIL, NULL_TREE, NULL_TREE);
- else if (ffeinfo_basictype (ffebld_info (expr))
- == FFEINFO_basictypeINTEGER)
- callit = ffecom_call_gfrt (FFECOM_gfrtPAUSEINT,
- ffecom_list_ptr_to_expr (ffebld_new_item (expr, NULL)),
- NULL_TREE);
- else if (ffeinfo_basictype (ffebld_info (expr))
- == FFEINFO_basictypeCHARACTER)
- callit = ffecom_call_gfrt (FFECOM_gfrtPAUSECHAR,
- ffecom_list_ptr_to_expr (ffebld_new_item (expr, NULL)),
- NULL_TREE);
- else
- abort ();
- TREE_SIDE_EFFECTS (callit) = 1;
-
- expand_expr_stmt (callit);
-
- clear_momentary ();
- }
-#endif
-#else
-#error
-#endif
+ expand_expr_stmt (callit);
}
/* OPEN statement. */
@@ -3701,133 +3244,95 @@ ffeste_R843 (ffebld expr)
void
ffeste_R904 (ffestpOpenStmt *info)
{
- ffeste_check_simple_ ();
+ tree args;
+ bool iostat;
+ bool errl;
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("+ OPEN (", dmpout);
- ffeste_subr_file_ ("UNIT", &info->open_spec[FFESTP_openixUNIT]);
- ffeste_subr_file_ ("ACCESS", &info->open_spec[FFESTP_openixACCESS]);
- ffeste_subr_file_ ("ACTION", &info->open_spec[FFESTP_openixACTION]);
- ffeste_subr_file_ ("ASSOCIATEVARIABLE", &info->open_spec[FFESTP_openixASSOCIATEVARIABLE]);
- ffeste_subr_file_ ("BLANK", &info->open_spec[FFESTP_openixBLANK]);
- ffeste_subr_file_ ("BLOCKSIZE", &info->open_spec[FFESTP_openixBLOCKSIZE]);
- ffeste_subr_file_ ("BUFFERCOUNT", &info->open_spec[FFESTP_openixBUFFERCOUNT]);
- ffeste_subr_file_ ("CARRIAGECONTROL", &info->open_spec[FFESTP_openixCARRIAGECONTROL]);
- ffeste_subr_file_ ("DEFAULTFILE", &info->open_spec[FFESTP_openixDEFAULTFILE]);
- ffeste_subr_file_ ("DELIM", &info->open_spec[FFESTP_openixDELIM]);
- ffeste_subr_file_ ("DISPOSE", &info->open_spec[FFESTP_openixDISPOSE]);
- ffeste_subr_file_ ("ERR", &info->open_spec[FFESTP_openixERR]);
- ffeste_subr_file_ ("EXTENDSIZE", &info->open_spec[FFESTP_openixEXTENDSIZE]);
- ffeste_subr_file_ ("FILE", &info->open_spec[FFESTP_openixFILE]);
- ffeste_subr_file_ ("FORM", &info->open_spec[FFESTP_openixFORM]);
- ffeste_subr_file_ ("INITIALSIZE", &info->open_spec[FFESTP_openixINITIALSIZE]);
- ffeste_subr_file_ ("IOSTAT", &info->open_spec[FFESTP_openixIOSTAT]);
- ffeste_subr_file_ ("KEY", &info->open_spec[FFESTP_openixKEY]);
- ffeste_subr_file_ ("MAXREC", &info->open_spec[FFESTP_openixMAXREC]);
- ffeste_subr_file_ ("NOSPANBLOCKS", &info->open_spec[FFESTP_openixNOSPANBLOCKS]);
- ffeste_subr_file_ ("ORGANIZATION", &info->open_spec[FFESTP_openixORGANIZATION]);
- ffeste_subr_file_ ("PAD", &info->open_spec[FFESTP_openixPAD]);
- ffeste_subr_file_ ("POSITION", &info->open_spec[FFESTP_openixPOSITION]);
- ffeste_subr_file_ ("READONLY", &info->open_spec[FFESTP_openixREADONLY]);
- ffeste_subr_file_ ("RECL", &info->open_spec[FFESTP_openixRECL]);
- ffeste_subr_file_ ("RECORDTYPE", &info->open_spec[FFESTP_openixRECORDTYPE]);
- ffeste_subr_file_ ("SHARED", &info->open_spec[FFESTP_openixSHARED]);
- ffeste_subr_file_ ("STATUS", &info->open_spec[FFESTP_openixSTATUS]);
- ffeste_subr_file_ ("USEROPEN", &info->open_spec[FFESTP_openixUSEROPEN]);
- fputs (")\n", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
- {
- tree args;
- bool iostat;
- bool errl;
+ ffeste_check_simple_ ();
- ffeste_emit_line_note_ ();
+ ffeste_emit_line_note_ ();
#define specified(something) (info->open_spec[something].kw_or_val_present)
- iostat = specified (FFESTP_openixIOSTAT);
- errl = specified (FFESTP_openixERR);
+ iostat = specified (FFESTP_openixIOSTAT);
+ errl = specified (FFESTP_openixERR);
#undef specified
- ffeste_start_stmt_ ();
+ ffeste_start_stmt_ ();
- if (errl)
- {
- ffeste_io_err_
- = ffeste_io_abort_
- = ffecom_lookup_label
- (info->open_spec[FFESTP_openixERR].u.label);
- ffeste_io_abort_is_temp_ = FALSE;
- }
- else
- {
- ffeste_io_err_ = NULL_TREE;
+ if (errl)
+ {
+ ffeste_io_err_
+ = ffeste_io_abort_
+ = ffecom_lookup_label
+ (info->open_spec[FFESTP_openixERR].u.label);
+ ffeste_io_abort_is_temp_ = FALSE;
+ }
+ else
+ {
+ ffeste_io_err_ = NULL_TREE;
- if ((ffeste_io_abort_is_temp_ = iostat))
- ffeste_io_abort_ = ffecom_temp_label ();
- else
- ffeste_io_abort_ = NULL_TREE;
- }
+ if ((ffeste_io_abort_is_temp_ = iostat))
+ ffeste_io_abort_ = ffecom_temp_label ();
+ else
+ ffeste_io_abort_ = NULL_TREE;
+ }
- if (iostat)
- {
- /* Have IOSTAT= specification. */
+ if (iostat)
+ {
+ /* Have IOSTAT= specification. */
- ffeste_io_iostat_is_temp_ = FALSE;
- ffeste_io_iostat_ = ffecom_expr
- (info->open_spec[FFESTP_openixIOSTAT].u.expr);
- }
- else if (ffeste_io_abort_ != NULL_TREE)
- {
- /* Have no IOSTAT= but have ERR=. */
+ ffeste_io_iostat_is_temp_ = FALSE;
+ ffeste_io_iostat_ = ffecom_expr
+ (info->open_spec[FFESTP_openixIOSTAT].u.expr);
+ }
+ else if (ffeste_io_abort_ != NULL_TREE)
+ {
+ /* Have no IOSTAT= but have ERR=. */
- ffeste_io_iostat_is_temp_ = TRUE;
- ffeste_io_iostat_
- = ffecom_make_tempvar ("open", ffecom_integer_type_node,
- FFETARGET_charactersizeNONE, -1);
- }
- else
- {
- /* No IOSTAT= or ERR= specification. */
+ ffeste_io_iostat_is_temp_ = TRUE;
+ ffeste_io_iostat_
+ = ffecom_make_tempvar ("open", ffecom_integer_type_node,
+ FFETARGET_charactersizeNONE, -1);
+ }
+ else
+ {
+ /* No IOSTAT= or ERR= specification. */
- ffeste_io_iostat_is_temp_ = FALSE;
- ffeste_io_iostat_ = NULL_TREE;
- }
+ ffeste_io_iostat_is_temp_ = FALSE;
+ ffeste_io_iostat_ = NULL_TREE;
+ }
- /* Now prescan, then convert, all the arguments. */
+ /* Now prescan, then convert, all the arguments. */
- args = ffeste_io_olist_ (errl || iostat,
- info->open_spec[FFESTP_openixUNIT].u.expr,
- &info->open_spec[FFESTP_openixFILE],
- &info->open_spec[FFESTP_openixSTATUS],
- &info->open_spec[FFESTP_openixACCESS],
- &info->open_spec[FFESTP_openixFORM],
- &info->open_spec[FFESTP_openixRECL],
- &info->open_spec[FFESTP_openixBLANK]);
+ args = ffeste_io_olist_ (errl || iostat,
+ info->open_spec[FFESTP_openixUNIT].u.expr,
+ &info->open_spec[FFESTP_openixFILE],
+ &info->open_spec[FFESTP_openixSTATUS],
+ &info->open_spec[FFESTP_openixACCESS],
+ &info->open_spec[FFESTP_openixFORM],
+ &info->open_spec[FFESTP_openixRECL],
+ &info->open_spec[FFESTP_openixBLANK]);
- /* Don't generate "if (iostat != 0) goto label;" if label is temp abort
+ /* Don't generate "if (iostat != 0) goto label;" if label is temp abort
label, since we're gonna fall through to there anyway. */
- ffeste_io_call_ (ffecom_call_gfrt (FFECOM_gfrtFOPEN, args, NULL_TREE),
- ! ffeste_io_abort_is_temp_);
+ ffeste_io_call_ (ffecom_call_gfrt (FFECOM_gfrtFOPEN, args, NULL_TREE),
+ ! ffeste_io_abort_is_temp_);
- /* If we've got a temp label, generate its code here. */
+ /* If we've got a temp label, generate its code here. */
- if (ffeste_io_abort_is_temp_)
- {
- DECL_INITIAL (ffeste_io_abort_) = error_mark_node;
- emit_nop ();
- expand_label (ffeste_io_abort_);
+ if (ffeste_io_abort_is_temp_)
+ {
+ DECL_INITIAL (ffeste_io_abort_) = error_mark_node;
+ emit_nop ();
+ expand_label (ffeste_io_abort_);
- assert (ffeste_io_err_ == NULL_TREE);
- }
+ assert (ffeste_io_err_ == NULL_TREE);
+ }
- ffeste_end_stmt_ ();
- }
-#else
-#error
-#endif
+ ffeste_end_stmt_ ();
}
/* CLOSE statement. */
@@ -3835,103 +3340,90 @@ ffeste_R904 (ffestpOpenStmt *info)
void
ffeste_R907 (ffestpCloseStmt *info)
{
- ffeste_check_simple_ ();
+ tree args;
+ bool iostat;
+ bool errl;
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("+ CLOSE (", dmpout);
- ffeste_subr_file_ ("UNIT", &info->close_spec[FFESTP_closeixUNIT]);
- ffeste_subr_file_ ("ERR", &info->close_spec[FFESTP_closeixERR]);
- ffeste_subr_file_ ("IOSTAT", &info->close_spec[FFESTP_closeixIOSTAT]);
- ffeste_subr_file_ ("STATUS", &info->close_spec[FFESTP_closeixSTATUS]);
- fputs (")\n", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
- {
- tree args;
- bool iostat;
- bool errl;
+ ffeste_check_simple_ ();
- ffeste_emit_line_note_ ();
+ ffeste_emit_line_note_ ();
#define specified(something) (info->close_spec[something].kw_or_val_present)
- iostat = specified (FFESTP_closeixIOSTAT);
- errl = specified (FFESTP_closeixERR);
+ iostat = specified (FFESTP_closeixIOSTAT);
+ errl = specified (FFESTP_closeixERR);
#undef specified
- ffeste_start_stmt_ ();
+ ffeste_start_stmt_ ();
- if (errl)
- {
- ffeste_io_err_
- = ffeste_io_abort_
- = ffecom_lookup_label
- (info->close_spec[FFESTP_closeixERR].u.label);
- ffeste_io_abort_is_temp_ = FALSE;
- }
- else
- {
- ffeste_io_err_ = NULL_TREE;
+ if (errl)
+ {
+ ffeste_io_err_
+ = ffeste_io_abort_
+ = ffecom_lookup_label
+ (info->close_spec[FFESTP_closeixERR].u.label);
+ ffeste_io_abort_is_temp_ = FALSE;
+ }
+ else
+ {
+ ffeste_io_err_ = NULL_TREE;
- if ((ffeste_io_abort_is_temp_ = iostat))
- ffeste_io_abort_ = ffecom_temp_label ();
- else
- ffeste_io_abort_ = NULL_TREE;
- }
+ if ((ffeste_io_abort_is_temp_ = iostat))
+ ffeste_io_abort_ = ffecom_temp_label ();
+ else
+ ffeste_io_abort_ = NULL_TREE;
+ }
- if (iostat)
- {
- /* Have IOSTAT= specification. */
+ if (iostat)
+ {
+ /* Have IOSTAT= specification. */
- ffeste_io_iostat_is_temp_ = FALSE;
- ffeste_io_iostat_ = ffecom_expr
- (info->close_spec[FFESTP_closeixIOSTAT].u.expr);
- }
- else if (ffeste_io_abort_ != NULL_TREE)
- {
- /* Have no IOSTAT= but have ERR=. */
+ ffeste_io_iostat_is_temp_ = FALSE;
+ ffeste_io_iostat_ = ffecom_expr
+ (info->close_spec[FFESTP_closeixIOSTAT].u.expr);
+ }
+ else if (ffeste_io_abort_ != NULL_TREE)
+ {
+ /* Have no IOSTAT= but have ERR=. */
- ffeste_io_iostat_is_temp_ = TRUE;
- ffeste_io_iostat_
- = ffecom_make_tempvar ("close", ffecom_integer_type_node,
- FFETARGET_charactersizeNONE, -1);
- }
- else
- {
- /* No IOSTAT= or ERR= specification. */
+ ffeste_io_iostat_is_temp_ = TRUE;
+ ffeste_io_iostat_
+ = ffecom_make_tempvar ("close", ffecom_integer_type_node,
+ FFETARGET_charactersizeNONE, -1);
+ }
+ else
+ {
+ /* No IOSTAT= or ERR= specification. */
- ffeste_io_iostat_is_temp_ = FALSE;
- ffeste_io_iostat_ = NULL_TREE;
- }
+ ffeste_io_iostat_is_temp_ = FALSE;
+ ffeste_io_iostat_ = NULL_TREE;
+ }
- /* Now prescan, then convert, all the arguments. */
+ /* Now prescan, then convert, all the arguments. */
- args = ffeste_io_cllist_ (errl || iostat,
- info->close_spec[FFESTP_closeixUNIT].u.expr,
- &info->close_spec[FFESTP_closeixSTATUS]);
+ args = ffeste_io_cllist_ (errl || iostat,
+ info->close_spec[FFESTP_closeixUNIT].u.expr,
+ &info->close_spec[FFESTP_closeixSTATUS]);
- /* Don't generate "if (iostat != 0) goto label;" if label is temp abort
+ /* Don't generate "if (iostat != 0) goto label;" if label is temp abort
label, since we're gonna fall through to there anyway. */
- ffeste_io_call_ (ffecom_call_gfrt (FFECOM_gfrtFCLOS, args, NULL_TREE),
- ! ffeste_io_abort_is_temp_);
+ ffeste_io_call_ (ffecom_call_gfrt (FFECOM_gfrtFCLOS, args, NULL_TREE),
+ ! ffeste_io_abort_is_temp_);
- /* If we've got a temp label, generate its code here. */
+ /* If we've got a temp label, generate its code here. */
- if (ffeste_io_abort_is_temp_)
- {
- DECL_INITIAL (ffeste_io_abort_) = error_mark_node;
- emit_nop ();
- expand_label (ffeste_io_abort_);
+ if (ffeste_io_abort_is_temp_)
+ {
+ DECL_INITIAL (ffeste_io_abort_) = error_mark_node;
+ emit_nop ();
+ expand_label (ffeste_io_abort_);
- assert (ffeste_io_err_ == NULL_TREE);
- }
+ assert (ffeste_io_err_ == NULL_TREE);
+ }
- ffeste_end_stmt_ ();
- }
-#else
-#error
-#endif
+ ffeste_end_stmt_ ();
}
/* READ(...) statement -- start. */
@@ -3941,254 +3433,174 @@ ffeste_R909_start (ffestpReadStmt *info, bool only_format UNUSED,
ffestvUnit unit, ffestvFormat format, bool rec,
bool key UNUSED)
{
+ ffecomGfrt start;
+ ffecomGfrt end;
+ tree cilist;
+ bool iostat;
+ bool errl;
+ bool endl;
+
ffeste_check_start_ ();
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
+ ffeste_emit_line_note_ ();
+
+ /* First determine the start, per-item, and end run-time functions to
+ call. The per-item function is picked by choosing an ffeste function
+ to call to handle a given item; it knows how to generate a call to the
+ appropriate run-time function, and is called an "I/O driver". */
+
switch (format)
{
- case FFESTV_formatNONE:
+ case FFESTV_formatNONE: /* no FMT= */
+ ffeste_io_driver_ = ffeste_io_douio_;
if (rec)
- fputs ("+ READ_ufdac", dmpout);
- else if (key)
- fputs ("+ READ_ufidx", dmpout);
+ start = FFECOM_gfrtSRDUE, end = FFECOM_gfrtERDUE;
else
- fputs ("+ READ_ufseq", dmpout);
+ start = FFECOM_gfrtSRSUE, end = FFECOM_gfrtERSUE;
break;
- case FFESTV_formatLABEL:
- case FFESTV_formatCHAREXPR:
- case FFESTV_formatINTEXPR:
+ case FFESTV_formatLABEL: /* FMT=10 */
+ case FFESTV_formatCHAREXPR: /* FMT='(I10)' */
+ case FFESTV_formatINTEXPR: /* FMT=I [after ASSIGN 10 TO I] */
+ ffeste_io_driver_ = ffeste_io_dofio_;
if (rec)
- fputs ("+ READ_fmdac", dmpout);
- else if (key)
- fputs ("+ READ_fmidx", dmpout);
+ start = FFECOM_gfrtSRDFE, end = FFECOM_gfrtERDFE;
else if (unit == FFESTV_unitCHAREXPR)
- fputs ("+ READ_fmint", dmpout);
+ start = FFECOM_gfrtSRSFI, end = FFECOM_gfrtERSFI;
else
- fputs ("+ READ_fmseq", dmpout);
+ start = FFECOM_gfrtSRSFE, end = FFECOM_gfrtERSFE;
break;
- case FFESTV_formatASTERISK:
+ case FFESTV_formatASTERISK: /* FMT=* */
+ ffeste_io_driver_ = ffeste_io_dolio_;
if (unit == FFESTV_unitCHAREXPR)
- fputs ("+ READ_lsint", dmpout);
+ start = FFECOM_gfrtSRSLI, end = FFECOM_gfrtERSLI;
else
- fputs ("+ READ_lsseq", dmpout);
+ start = FFECOM_gfrtSRSLE, end = FFECOM_gfrtERSLE;
break;
- case FFESTV_formatNAMELIST:
- fputs ("+ READ_nlseq", dmpout);
+ case FFESTV_formatNAMELIST: /* FMT=FOO or NML=FOO [NAMELIST
+ /FOO/] */
+ ffeste_io_driver_ = NULL; /* No start or driver function. */
+ start = FFECOM_gfrtSRSNE, end = FFECOM_gfrt;
break;
default:
- assert ("Unexpected kind of format item in R909 READ" == NULL);
- }
-
- if (only_format)
- {
- fputc (' ', dmpout);
- ffeste_subr_file_ ("FORMAT", &info->read_spec[FFESTP_readixFORMAT]);
- fputc (' ', dmpout);
-
- return;
+ assert ("Weird stuff" == NULL);
+ start = FFECOM_gfrt, end = FFECOM_gfrt;
+ break;
}
-
- fputs (" (", dmpout);
- ffeste_subr_file_ ("UNIT", &info->read_spec[FFESTP_readixUNIT]);
- ffeste_subr_file_ ("FORMAT", &info->read_spec[FFESTP_readixFORMAT]);
- ffeste_subr_file_ ("ADVANCE", &info->read_spec[FFESTP_readixADVANCE]);
- ffeste_subr_file_ ("EOR", &info->read_spec[FFESTP_readixEOR]);
- ffeste_subr_file_ ("ERR", &info->read_spec[FFESTP_readixERR]);
- ffeste_subr_file_ ("END", &info->read_spec[FFESTP_readixEND]);
- ffeste_subr_file_ ("IOSTAT", &info->read_spec[FFESTP_readixIOSTAT]);
- ffeste_subr_file_ ("KEYEQ", &info->read_spec[FFESTP_readixKEYEQ]);
- ffeste_subr_file_ ("KEYGE", &info->read_spec[FFESTP_readixKEYGE]);
- ffeste_subr_file_ ("KEYGT", &info->read_spec[FFESTP_readixKEYGT]);
- ffeste_subr_file_ ("KEYID", &info->read_spec[FFESTP_readixKEYID]);
- ffeste_subr_file_ ("NULLS", &info->read_spec[FFESTP_readixNULLS]);
- ffeste_subr_file_ ("REC", &info->read_spec[FFESTP_readixREC]);
- ffeste_subr_file_ ("SIZE", &info->read_spec[FFESTP_readixSIZE]);
- fputs (") ", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-
- ffeste_emit_line_note_ ();
-
- {
- ffecomGfrt start;
- ffecomGfrt end;
- tree cilist;
- bool iostat;
- bool errl;
- bool endl;
-
- /* First determine the start, per-item, and end run-time functions to
- call. The per-item function is picked by choosing an ffeste function
- to call to handle a given item; it knows how to generate a call to the
- appropriate run-time function, and is called an "I/O driver". */
-
- switch (format)
- {
- case FFESTV_formatNONE: /* no FMT= */
- ffeste_io_driver_ = ffeste_io_douio_;
- if (rec)
- start = FFECOM_gfrtSRDUE, end = FFECOM_gfrtERDUE;
-#if 0
- else if (key)
- start = FFECOM_gfrtSRIUE, end = FFECOM_gfrtERIUE;
-#endif
- else
- start = FFECOM_gfrtSRSUE, end = FFECOM_gfrtERSUE;
- break;
-
- case FFESTV_formatLABEL: /* FMT=10 */
- case FFESTV_formatCHAREXPR: /* FMT='(I10)' */
- case FFESTV_formatINTEXPR: /* FMT=I [after ASSIGN 10 TO I] */
- ffeste_io_driver_ = ffeste_io_dofio_;
- if (rec)
- start = FFECOM_gfrtSRDFE, end = FFECOM_gfrtERDFE;
-#if 0
- else if (key)
- start = FFECOM_gfrtSRIFE, end = FFECOM_gfrtERIFE;
-#endif
- else if (unit == FFESTV_unitCHAREXPR)
- start = FFECOM_gfrtSRSFI, end = FFECOM_gfrtERSFI;
- else
- start = FFECOM_gfrtSRSFE, end = FFECOM_gfrtERSFE;
- break;
-
- case FFESTV_formatASTERISK: /* FMT=* */
- ffeste_io_driver_ = ffeste_io_dolio_;
- if (unit == FFESTV_unitCHAREXPR)
- start = FFECOM_gfrtSRSLI, end = FFECOM_gfrtERSLI;
- else
- start = FFECOM_gfrtSRSLE, end = FFECOM_gfrtERSLE;
- break;
-
- case FFESTV_formatNAMELIST: /* FMT=FOO or NML=FOO [NAMELIST
- /FOO/] */
- ffeste_io_driver_ = NULL; /* No start or driver function. */
- start = FFECOM_gfrtSRSNE, end = FFECOM_gfrt;
- break;
-
- default:
- assert ("Weird stuff" == NULL);
- start = FFECOM_gfrt, end = FFECOM_gfrt;
- break;
- }
- ffeste_io_endgfrt_ = end;
+ ffeste_io_endgfrt_ = end;
#define specified(something) (info->read_spec[something].kw_or_val_present)
- iostat = specified (FFESTP_readixIOSTAT);
- errl = specified (FFESTP_readixERR);
- endl = specified (FFESTP_readixEND);
+ iostat = specified (FFESTP_readixIOSTAT);
+ errl = specified (FFESTP_readixERR);
+ endl = specified (FFESTP_readixEND);
#undef specified
- ffeste_start_stmt_ ();
+ ffeste_start_stmt_ ();
- if (errl)
- {
- /* Have ERR= specification. */
+ if (errl)
+ {
+ /* Have ERR= specification. */
- ffeste_io_err_
- = ffecom_lookup_label (info->read_spec[FFESTP_readixERR].u.label);
+ ffeste_io_err_
+ = ffecom_lookup_label (info->read_spec[FFESTP_readixERR].u.label);
- if (endl)
- {
- /* Have both ERR= and END=. Need a temp label to handle both. */
- ffeste_io_end_
- = ffecom_lookup_label (info->read_spec[FFESTP_readixEND].u.label);
- ffeste_io_abort_is_temp_ = TRUE;
+ if (endl)
+ {
+ /* Have both ERR= and END=. Need a temp label to handle both. */
+ ffeste_io_end_
+ = ffecom_lookup_label (info->read_spec[FFESTP_readixEND].u.label);
+ ffeste_io_abort_is_temp_ = TRUE;
+ ffeste_io_abort_ = ffecom_temp_label ();
+ }
+ else
+ {
+ /* Have ERR= but no END=. */
+ ffeste_io_end_ = NULL_TREE;
+ if ((ffeste_io_abort_is_temp_ = iostat))
ffeste_io_abort_ = ffecom_temp_label ();
- }
- else
- {
- /* Have ERR= but no END=. */
- ffeste_io_end_ = NULL_TREE;
- if ((ffeste_io_abort_is_temp_ = iostat))
- ffeste_io_abort_ = ffecom_temp_label ();
- else
- ffeste_io_abort_ = ffeste_io_err_;
- }
- }
- else
- {
- /* No ERR= specification. */
+ else
+ ffeste_io_abort_ = ffeste_io_err_;
+ }
+ }
+ else
+ {
+ /* No ERR= specification. */
- ffeste_io_err_ = NULL_TREE;
- if (endl)
- {
- /* Have END= but no ERR=. */
- ffeste_io_end_
- = ffecom_lookup_label (info->read_spec[FFESTP_readixEND].u.label);
- if ((ffeste_io_abort_is_temp_ = iostat))
- ffeste_io_abort_ = ffecom_temp_label ();
- else
- ffeste_io_abort_ = ffeste_io_end_;
- }
- else
- {
- /* Have no ERR= or END=. */
+ ffeste_io_err_ = NULL_TREE;
+ if (endl)
+ {
+ /* Have END= but no ERR=. */
+ ffeste_io_end_
+ = ffecom_lookup_label (info->read_spec[FFESTP_readixEND].u.label);
+ if ((ffeste_io_abort_is_temp_ = iostat))
+ ffeste_io_abort_ = ffecom_temp_label ();
+ else
+ ffeste_io_abort_ = ffeste_io_end_;
+ }
+ else
+ {
+ /* Have no ERR= or END=. */
- ffeste_io_end_ = NULL_TREE;
- if ((ffeste_io_abort_is_temp_ = iostat))
- ffeste_io_abort_ = ffecom_temp_label ();
- else
- ffeste_io_abort_ = NULL_TREE;
- }
- }
+ ffeste_io_end_ = NULL_TREE;
+ if ((ffeste_io_abort_is_temp_ = iostat))
+ ffeste_io_abort_ = ffecom_temp_label ();
+ else
+ ffeste_io_abort_ = NULL_TREE;
+ }
+ }
- if (iostat)
- {
- /* Have IOSTAT= specification. */
+ if (iostat)
+ {
+ /* Have IOSTAT= specification. */
- ffeste_io_iostat_is_temp_ = FALSE;
- ffeste_io_iostat_
- = ffecom_expr (info->read_spec[FFESTP_readixIOSTAT].u.expr);
- }
- else if (ffeste_io_abort_ != NULL_TREE)
- {
- /* Have no IOSTAT= but have ERR= and/or END=. */
+ ffeste_io_iostat_is_temp_ = FALSE;
+ ffeste_io_iostat_
+ = ffecom_expr (info->read_spec[FFESTP_readixIOSTAT].u.expr);
+ }
+ else if (ffeste_io_abort_ != NULL_TREE)
+ {
+ /* Have no IOSTAT= but have ERR= and/or END=. */
- ffeste_io_iostat_is_temp_ = TRUE;
- ffeste_io_iostat_
- = ffecom_make_tempvar ("read", ffecom_integer_type_node,
- FFETARGET_charactersizeNONE, -1);
- }
- else
- {
- /* No IOSTAT=, ERR=, or END= specification. */
+ ffeste_io_iostat_is_temp_ = TRUE;
+ ffeste_io_iostat_
+ = ffecom_make_tempvar ("read", ffecom_integer_type_node,
+ FFETARGET_charactersizeNONE, -1);
+ }
+ else
+ {
+ /* No IOSTAT=, ERR=, or END= specification. */
- ffeste_io_iostat_is_temp_ = FALSE;
- ffeste_io_iostat_ = NULL_TREE;
- }
+ ffeste_io_iostat_is_temp_ = FALSE;
+ ffeste_io_iostat_ = NULL_TREE;
+ }
- /* Now prescan, then convert, all the arguments. */
-
- if (unit == FFESTV_unitCHAREXPR)
- cilist = ffeste_io_icilist_ (errl || iostat,
- info->read_spec[FFESTP_readixUNIT].u.expr,
- endl || iostat, format,
- &info->read_spec[FFESTP_readixFORMAT]);
- else
- cilist = ffeste_io_cilist_ (errl || iostat, unit,
- info->read_spec[FFESTP_readixUNIT].u.expr,
- 5, endl || iostat, format,
- &info->read_spec[FFESTP_readixFORMAT],
- rec,
- info->read_spec[FFESTP_readixREC].u.expr);
-
- /* If there is no end function, then there are no item functions (i.e.
- it's a NAMELIST), and vice versa by the way. In this situation, don't
- generate the "if (iostat != 0) goto label;" if the label is temp abort
- label, since we're gonna fall through to there anyway. */
-
- ffeste_io_call_ (ffecom_call_gfrt (start, cilist, NULL_TREE),
- (! ffeste_io_abort_is_temp_) || (end != FFECOM_gfrt));
- }
-#else
-#error
-#endif
+ /* Now prescan, then convert, all the arguments. */
+
+ if (unit == FFESTV_unitCHAREXPR)
+ cilist = ffeste_io_icilist_ (errl || iostat,
+ info->read_spec[FFESTP_readixUNIT].u.expr,
+ endl || iostat, format,
+ &info->read_spec[FFESTP_readixFORMAT]);
+ else
+ cilist = ffeste_io_cilist_ (errl || iostat, unit,
+ info->read_spec[FFESTP_readixUNIT].u.expr,
+ 5, endl || iostat, format,
+ &info->read_spec[FFESTP_readixFORMAT],
+ rec,
+ info->read_spec[FFESTP_readixREC].u.expr);
+
+ /* If there is no end function, then there are no item functions (i.e.
+ it's a NAMELIST), and vice versa by the way. In this situation, don't
+ generate the "if (iostat != 0) goto label;" if the label is temp abort
+ label, since we're gonna fall through to there anyway. */
+
+ ffeste_io_call_ (ffecom_call_gfrt (start, cilist, NULL_TREE),
+ (! ffeste_io_abort_is_temp_) || (end != FFECOM_gfrt));
}
/* READ statement -- I/O item. */
@@ -4198,10 +3610,6 @@ ffeste_R909_item (ffebld expr, ffelexToken expr_token)
{
ffeste_check_item_ ();
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- ffebld_dump (expr);
- fputc (',', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
if (expr == NULL)
return;
@@ -4227,9 +3635,6 @@ ffeste_R909_item (ffebld expr, ffelexToken expr_token)
ffeste_end_stmt_ ();
}
-#else
-#error
-#endif
}
/* READ statement -- end. */
@@ -4239,10 +3644,6 @@ ffeste_R909_finish ()
{
ffeste_check_finish_ ();
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputc ('\n', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-
/* Don't generate "if (iostat != 0) goto label;" if label is temp abort
label, since we're gonna fall through to there anyway. */
@@ -4290,9 +3691,6 @@ ffeste_R909_finish ()
}
ffeste_end_stmt_ ();
-#else
-#error
-#endif
}
/* WRITE statement -- start. */
@@ -4301,195 +3699,144 @@ void
ffeste_R910_start (ffestpWriteStmt *info, ffestvUnit unit,
ffestvFormat format, bool rec)
{
+ ffecomGfrt start;
+ ffecomGfrt end;
+ tree cilist;
+ bool iostat;
+ bool errl;
+
ffeste_check_start_ ();
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
+ ffeste_emit_line_note_ ();
+
+ /* First determine the start, per-item, and end run-time functions to
+ call. The per-item function is picked by choosing an ffeste function
+ to call to handle a given item; it knows how to generate a call to the
+ appropriate run-time function, and is called an "I/O driver". */
+
switch (format)
{
- case FFESTV_formatNONE:
+ case FFESTV_formatNONE: /* no FMT= */
+ ffeste_io_driver_ = ffeste_io_douio_;
if (rec)
- fputs ("+ WRITE_ufdac (", dmpout);
+ start = FFECOM_gfrtSWDUE, end = FFECOM_gfrtEWDUE;
else
- fputs ("+ WRITE_ufseq_or_idx (", dmpout);
+ start = FFECOM_gfrtSWSUE, end = FFECOM_gfrtEWSUE;
break;
- case FFESTV_formatLABEL:
- case FFESTV_formatCHAREXPR:
- case FFESTV_formatINTEXPR:
+ case FFESTV_formatLABEL: /* FMT=10 */
+ case FFESTV_formatCHAREXPR: /* FMT='(I10)' */
+ case FFESTV_formatINTEXPR: /* FMT=I [after ASSIGN 10 TO I] */
+ ffeste_io_driver_ = ffeste_io_dofio_;
if (rec)
- fputs ("+ WRITE_fmdac (", dmpout);
+ start = FFECOM_gfrtSWDFE, end = FFECOM_gfrtEWDFE;
else if (unit == FFESTV_unitCHAREXPR)
- fputs ("+ WRITE_fmint (", dmpout);
+ start = FFECOM_gfrtSWSFI, end = FFECOM_gfrtEWSFI;
else
- fputs ("+ WRITE_fmseq_or_idx (", dmpout);
+ start = FFECOM_gfrtSWSFE, end = FFECOM_gfrtEWSFE;
break;
- case FFESTV_formatASTERISK:
+ case FFESTV_formatASTERISK: /* FMT=* */
+ ffeste_io_driver_ = ffeste_io_dolio_;
if (unit == FFESTV_unitCHAREXPR)
- fputs ("+ WRITE_lsint (", dmpout);
+ start = FFECOM_gfrtSWSLI, end = FFECOM_gfrtEWSLI;
else
- fputs ("+ WRITE_lsseq (", dmpout);
+ start = FFECOM_gfrtSWSLE, end = FFECOM_gfrtEWSLE;
break;
- case FFESTV_formatNAMELIST:
- fputs ("+ WRITE_nlseq (", dmpout);
+ case FFESTV_formatNAMELIST: /* FMT=FOO or NML=FOO [NAMELIST
+ /FOO/] */
+ ffeste_io_driver_ = NULL; /* No start or driver function. */
+ start = FFECOM_gfrtSWSNE, end = FFECOM_gfrt;
break;
default:
- assert ("Unexpected kind of format item in R910 WRITE" == NULL);
+ assert ("Weird stuff" == NULL);
+ start = FFECOM_gfrt, end = FFECOM_gfrt;
+ break;
}
-
- ffeste_subr_file_ ("UNIT", &info->write_spec[FFESTP_writeixUNIT]);
- ffeste_subr_file_ ("FORMAT", &info->write_spec[FFESTP_writeixFORMAT]);
- ffeste_subr_file_ ("ADVANCE", &info->write_spec[FFESTP_writeixADVANCE]);
- ffeste_subr_file_ ("EOR", &info->write_spec[FFESTP_writeixEOR]);
- ffeste_subr_file_ ("ERR", &info->write_spec[FFESTP_writeixERR]);
- ffeste_subr_file_ ("IOSTAT", &info->write_spec[FFESTP_writeixIOSTAT]);
- ffeste_subr_file_ ("REC", &info->write_spec[FFESTP_writeixREC]);
- fputs (") ", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-
- ffeste_emit_line_note_ ();
-
- {
- ffecomGfrt start;
- ffecomGfrt end;
- tree cilist;
- bool iostat;
- bool errl;
-
- /* First determine the start, per-item, and end run-time functions to
- call. The per-item function is picked by choosing an ffeste function
- to call to handle a given item; it knows how to generate a call to the
- appropriate run-time function, and is called an "I/O driver". */
-
- switch (format)
- {
- case FFESTV_formatNONE: /* no FMT= */
- ffeste_io_driver_ = ffeste_io_douio_;
- if (rec)
- start = FFECOM_gfrtSWDUE, end = FFECOM_gfrtEWDUE;
- else
- start = FFECOM_gfrtSWSUE, end = FFECOM_gfrtEWSUE;
- break;
-
- case FFESTV_formatLABEL: /* FMT=10 */
- case FFESTV_formatCHAREXPR: /* FMT='(I10)' */
- case FFESTV_formatINTEXPR: /* FMT=I [after ASSIGN 10 TO I] */
- ffeste_io_driver_ = ffeste_io_dofio_;
- if (rec)
- start = FFECOM_gfrtSWDFE, end = FFECOM_gfrtEWDFE;
- else if (unit == FFESTV_unitCHAREXPR)
- start = FFECOM_gfrtSWSFI, end = FFECOM_gfrtEWSFI;
- else
- start = FFECOM_gfrtSWSFE, end = FFECOM_gfrtEWSFE;
- break;
-
- case FFESTV_formatASTERISK: /* FMT=* */
- ffeste_io_driver_ = ffeste_io_dolio_;
- if (unit == FFESTV_unitCHAREXPR)
- start = FFECOM_gfrtSWSLI, end = FFECOM_gfrtEWSLI;
- else
- start = FFECOM_gfrtSWSLE, end = FFECOM_gfrtEWSLE;
- break;
-
- case FFESTV_formatNAMELIST: /* FMT=FOO or NML=FOO [NAMELIST
- /FOO/] */
- ffeste_io_driver_ = NULL; /* No start or driver function. */
- start = FFECOM_gfrtSWSNE, end = FFECOM_gfrt;
- break;
-
- default:
- assert ("Weird stuff" == NULL);
- start = FFECOM_gfrt, end = FFECOM_gfrt;
- break;
- }
- ffeste_io_endgfrt_ = end;
+ ffeste_io_endgfrt_ = end;
#define specified(something) (info->write_spec[something].kw_or_val_present)
- iostat = specified (FFESTP_writeixIOSTAT);
- errl = specified (FFESTP_writeixERR);
+ iostat = specified (FFESTP_writeixIOSTAT);
+ errl = specified (FFESTP_writeixERR);
#undef specified
- ffeste_start_stmt_ ();
+ ffeste_start_stmt_ ();
- ffeste_io_end_ = NULL_TREE;
+ ffeste_io_end_ = NULL_TREE;
- if (errl)
- {
- /* Have ERR= specification. */
+ if (errl)
+ {
+ /* Have ERR= specification. */
- ffeste_io_err_
- = ffeste_io_abort_
- = ffecom_lookup_label
- (info->write_spec[FFESTP_writeixERR].u.label);
- ffeste_io_abort_is_temp_ = FALSE;
- }
- else
- {
- /* No ERR= specification. */
+ ffeste_io_err_
+ = ffeste_io_abort_
+ = ffecom_lookup_label
+ (info->write_spec[FFESTP_writeixERR].u.label);
+ ffeste_io_abort_is_temp_ = FALSE;
+ }
+ else
+ {
+ /* No ERR= specification. */
- ffeste_io_err_ = NULL_TREE;
+ ffeste_io_err_ = NULL_TREE;
- if ((ffeste_io_abort_is_temp_ = iostat))
- ffeste_io_abort_ = ffecom_temp_label ();
- else
- ffeste_io_abort_ = NULL_TREE;
- }
+ if ((ffeste_io_abort_is_temp_ = iostat))
+ ffeste_io_abort_ = ffecom_temp_label ();
+ else
+ ffeste_io_abort_ = NULL_TREE;
+ }
- if (iostat)
- {
- /* Have IOSTAT= specification. */
+ if (iostat)
+ {
+ /* Have IOSTAT= specification. */
- ffeste_io_iostat_is_temp_ = FALSE;
- ffeste_io_iostat_ = ffecom_expr
- (info->write_spec[FFESTP_writeixIOSTAT].u.expr);
- }
- else if (ffeste_io_abort_ != NULL_TREE)
- {
- /* Have no IOSTAT= but have ERR=. */
+ ffeste_io_iostat_is_temp_ = FALSE;
+ ffeste_io_iostat_ = ffecom_expr
+ (info->write_spec[FFESTP_writeixIOSTAT].u.expr);
+ }
+ else if (ffeste_io_abort_ != NULL_TREE)
+ {
+ /* Have no IOSTAT= but have ERR=. */
- ffeste_io_iostat_is_temp_ = TRUE;
- ffeste_io_iostat_
- = ffecom_make_tempvar ("write", ffecom_integer_type_node,
- FFETARGET_charactersizeNONE, -1);
- }
- else
- {
- /* No IOSTAT= or ERR= specification. */
+ ffeste_io_iostat_is_temp_ = TRUE;
+ ffeste_io_iostat_
+ = ffecom_make_tempvar ("write", ffecom_integer_type_node,
+ FFETARGET_charactersizeNONE, -1);
+ }
+ else
+ {
+ /* No IOSTAT= or ERR= specification. */
- ffeste_io_iostat_is_temp_ = FALSE;
- ffeste_io_iostat_ = NULL_TREE;
- }
+ ffeste_io_iostat_is_temp_ = FALSE;
+ ffeste_io_iostat_ = NULL_TREE;
+ }
- /* Now prescan, then convert, all the arguments. */
-
- if (unit == FFESTV_unitCHAREXPR)
- cilist = ffeste_io_icilist_ (errl || iostat,
- info->write_spec[FFESTP_writeixUNIT].u.expr,
- FALSE, format,
- &info->write_spec[FFESTP_writeixFORMAT]);
- else
- cilist = ffeste_io_cilist_ (errl || iostat, unit,
- info->write_spec[FFESTP_writeixUNIT].u.expr,
- 6, FALSE, format,
- &info->write_spec[FFESTP_writeixFORMAT],
- rec,
- info->write_spec[FFESTP_writeixREC].u.expr);
-
- /* If there is no end function, then there are no item functions (i.e.
- it's a NAMELIST), and vice versa by the way. In this situation, don't
- generate the "if (iostat != 0) goto label;" if the label is temp abort
- label, since we're gonna fall through to there anyway. */
-
- ffeste_io_call_ (ffecom_call_gfrt (start, cilist, NULL_TREE),
- (! ffeste_io_abort_is_temp_) || (end != FFECOM_gfrt));
- }
-#else
-#error
-#endif
+ /* Now prescan, then convert, all the arguments. */
+
+ if (unit == FFESTV_unitCHAREXPR)
+ cilist = ffeste_io_icilist_ (errl || iostat,
+ info->write_spec[FFESTP_writeixUNIT].u.expr,
+ FALSE, format,
+ &info->write_spec[FFESTP_writeixFORMAT]);
+ else
+ cilist = ffeste_io_cilist_ (errl || iostat, unit,
+ info->write_spec[FFESTP_writeixUNIT].u.expr,
+ 6, FALSE, format,
+ &info->write_spec[FFESTP_writeixFORMAT],
+ rec,
+ info->write_spec[FFESTP_writeixREC].u.expr);
+
+ /* If there is no end function, then there are no item functions (i.e.
+ it's a NAMELIST), and vice versa by the way. In this situation, don't
+ generate the "if (iostat != 0) goto label;" if the label is temp abort
+ label, since we're gonna fall through to there anyway. */
+
+ ffeste_io_call_ (ffecom_call_gfrt (start, cilist, NULL_TREE),
+ (! ffeste_io_abort_is_temp_) || (end != FFECOM_gfrt));
}
/* WRITE statement -- I/O item. */
@@ -4499,10 +3846,6 @@ ffeste_R910_item (ffebld expr, ffelexToken expr_token)
{
ffeste_check_item_ ();
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- ffebld_dump (expr);
- fputc (',', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
if (expr == NULL)
return;
@@ -4523,9 +3866,6 @@ ffeste_R910_item (ffebld expr, ffelexToken expr_token)
ffeste_end_stmt_ ();
}
-#else
-#error
-#endif
}
/* WRITE statement -- end. */
@@ -4535,10 +3875,6 @@ ffeste_R910_finish ()
{
ffeste_check_finish_ ();
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputc ('\n', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-
/* Don't generate "if (iostat != 0) goto label;" if label is temp abort
label, since we're gonna fall through to there anyway. */
@@ -4559,9 +3895,6 @@ ffeste_R910_finish ()
}
ffeste_end_stmt_ ();
-#else
-#error
-#endif
}
/* PRINT statement -- start. */
@@ -4569,96 +3902,68 @@ ffeste_R910_finish ()
void
ffeste_R911_start (ffestpPrintStmt *info, ffestvFormat format)
{
+ ffecomGfrt start;
+ ffecomGfrt end;
+ tree cilist;
+
ffeste_check_start_ ();
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
+ ffeste_emit_line_note_ ();
+
+ /* First determine the start, per-item, and end run-time functions to
+ call. The per-item function is picked by choosing an ffeste function
+ to call to handle a given item; it knows how to generate a call to the
+ appropriate run-time function, and is called an "I/O driver". */
+
switch (format)
{
- case FFESTV_formatLABEL:
- case FFESTV_formatCHAREXPR:
- case FFESTV_formatINTEXPR:
- fputs ("+ PRINT_fm ", dmpout);
+ case FFESTV_formatLABEL: /* FMT=10 */
+ case FFESTV_formatCHAREXPR: /* FMT='(I10)' */
+ case FFESTV_formatINTEXPR: /* FMT=I [after ASSIGN 10 TO I] */
+ ffeste_io_driver_ = ffeste_io_dofio_;
+ start = FFECOM_gfrtSWSFE, end = FFECOM_gfrtEWSFE;
break;
- case FFESTV_formatASTERISK:
- fputs ("+ PRINT_ls ", dmpout);
+ case FFESTV_formatASTERISK: /* FMT=* */
+ ffeste_io_driver_ = ffeste_io_dolio_;
+ start = FFECOM_gfrtSWSLE, end = FFECOM_gfrtEWSLE;
break;
- case FFESTV_formatNAMELIST:
- fputs ("+ PRINT_nl ", dmpout);
+ case FFESTV_formatNAMELIST: /* FMT=FOO or NML=FOO [NAMELIST
+ /FOO/] */
+ ffeste_io_driver_ = NULL; /* No start or driver function. */
+ start = FFECOM_gfrtSWSNE, end = FFECOM_gfrt;
break;
default:
- assert ("Unexpected kind of format item in R911 PRINT" == NULL);
+ assert ("Weird stuff" == NULL);
+ start = FFECOM_gfrt, end = FFECOM_gfrt;
+ break;
}
- ffeste_subr_file_ ("FORMAT", &info->print_spec[FFESTP_printixFORMAT]);
- fputc (' ', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-
- ffeste_emit_line_note_ ();
-
- {
- ffecomGfrt start;
- ffecomGfrt end;
- tree cilist;
-
- /* First determine the start, per-item, and end run-time functions to
- call. The per-item function is picked by choosing an ffeste function
- to call to handle a given item; it knows how to generate a call to the
- appropriate run-time function, and is called an "I/O driver". */
-
- switch (format)
- {
- case FFESTV_formatLABEL: /* FMT=10 */
- case FFESTV_formatCHAREXPR: /* FMT='(I10)' */
- case FFESTV_formatINTEXPR: /* FMT=I [after ASSIGN 10 TO I] */
- ffeste_io_driver_ = ffeste_io_dofio_;
- start = FFECOM_gfrtSWSFE, end = FFECOM_gfrtEWSFE;
- break;
-
- case FFESTV_formatASTERISK: /* FMT=* */
- ffeste_io_driver_ = ffeste_io_dolio_;
- start = FFECOM_gfrtSWSLE, end = FFECOM_gfrtEWSLE;
- break;
-
- case FFESTV_formatNAMELIST: /* FMT=FOO or NML=FOO [NAMELIST
- /FOO/] */
- ffeste_io_driver_ = NULL; /* No start or driver function. */
- start = FFECOM_gfrtSWSNE, end = FFECOM_gfrt;
- break;
-
- default:
- assert ("Weird stuff" == NULL);
- start = FFECOM_gfrt, end = FFECOM_gfrt;
- break;
- }
- ffeste_io_endgfrt_ = end;
+ ffeste_io_endgfrt_ = end;
- ffeste_start_stmt_ ();
+ ffeste_start_stmt_ ();
- ffeste_io_end_ = NULL_TREE;
- ffeste_io_err_ = NULL_TREE;
- ffeste_io_abort_ = NULL_TREE;
- ffeste_io_abort_is_temp_ = FALSE;
- ffeste_io_iostat_is_temp_ = FALSE;
- ffeste_io_iostat_ = NULL_TREE;
+ ffeste_io_end_ = NULL_TREE;
+ ffeste_io_err_ = NULL_TREE;
+ ffeste_io_abort_ = NULL_TREE;
+ ffeste_io_abort_is_temp_ = FALSE;
+ ffeste_io_iostat_is_temp_ = FALSE;
+ ffeste_io_iostat_ = NULL_TREE;
- /* Now prescan, then convert, all the arguments. */
+ /* Now prescan, then convert, all the arguments. */
- cilist = ffeste_io_cilist_ (FALSE, FFESTV_unitNONE, NULL, 6, FALSE, format,
- &info->print_spec[FFESTP_printixFORMAT], FALSE, NULL);
+ cilist = ffeste_io_cilist_ (FALSE, FFESTV_unitNONE, NULL, 6, FALSE, format,
+ &info->print_spec[FFESTP_printixFORMAT],
+ FALSE, NULL);
- /* If there is no end function, then there are no item functions (i.e.
- it's a NAMELIST), and vice versa by the way. In this situation, don't
- generate the "if (iostat != 0) goto label;" if the label is temp abort
- label, since we're gonna fall through to there anyway. */
+ /* If there is no end function, then there are no item functions (i.e.
+ it's a NAMELIST), and vice versa by the way. In this situation, don't
+ generate the "if (iostat != 0) goto label;" if the label is temp abort
+ label, since we're gonna fall through to there anyway. */
- ffeste_io_call_ (ffecom_call_gfrt (start, cilist, NULL_TREE),
- (! ffeste_io_abort_is_temp_) || (end != FFECOM_gfrt));
- }
-#else
-#error
-#endif
+ ffeste_io_call_ (ffecom_call_gfrt (start, cilist, NULL_TREE),
+ (! ffeste_io_abort_is_temp_) || (end != FFECOM_gfrt));
}
/* PRINT statement -- I/O item. */
@@ -4668,10 +3973,6 @@ ffeste_R911_item (ffebld expr, ffelexToken expr_token)
{
ffeste_check_item_ ();
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- ffebld_dump (expr);
- fputc (',', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
if (expr == NULL)
return;
@@ -4692,9 +3993,6 @@ ffeste_R911_item (ffebld expr, ffelexToken expr_token)
ffeste_end_stmt_ ();
}
-#else
-#error
-#endif
}
/* PRINT statement -- end. */
@@ -4704,19 +4002,12 @@ ffeste_R911_finish ()
{
ffeste_check_finish_ ();
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputc ('\n', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-
if (ffeste_io_endgfrt_ != FFECOM_gfrt)
ffeste_io_call_ (ffecom_call_gfrt (ffeste_io_endgfrt_, NULL_TREE,
NULL_TREE),
FALSE);
ffeste_end_stmt_ ();
-#else
-#error
-#endif
}
/* BACKSPACE statement. */
@@ -4726,17 +4017,7 @@ ffeste_R919 (ffestpBeruStmt *info)
{
ffeste_check_simple_ ();
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("+ BACKSPACE (", dmpout);
- ffeste_subr_file_ ("UNIT", &info->beru_spec[FFESTP_beruixUNIT]);
- ffeste_subr_file_ ("ERR", &info->beru_spec[FFESTP_beruixERR]);
- ffeste_subr_file_ ("IOSTAT", &info->beru_spec[FFESTP_beruixIOSTAT]);
- fputs (")\n", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
ffeste_subr_beru_ (info, FFECOM_gfrtFBACK);
-#else
-#error
-#endif
}
/* ENDFILE statement. */
@@ -4746,17 +4027,7 @@ ffeste_R920 (ffestpBeruStmt *info)
{
ffeste_check_simple_ ();
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("+ ENDFILE (", dmpout);
- ffeste_subr_file_ ("UNIT", &info->beru_spec[FFESTP_beruixUNIT]);
- ffeste_subr_file_ ("ERR", &info->beru_spec[FFESTP_beruixERR]);
- ffeste_subr_file_ ("IOSTAT", &info->beru_spec[FFESTP_beruixIOSTAT]);
- fputs (")\n", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
ffeste_subr_beru_ (info, FFECOM_gfrtFEND);
-#else
-#error
-#endif
}
/* REWIND statement. */
@@ -4766,17 +4037,7 @@ ffeste_R921 (ffestpBeruStmt *info)
{
ffeste_check_simple_ ();
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("+ REWIND (", dmpout);
- ffeste_subr_file_ ("UNIT", &info->beru_spec[FFESTP_beruixUNIT]);
- ffeste_subr_file_ ("ERR", &info->beru_spec[FFESTP_beruixERR]);
- ffeste_subr_file_ ("IOSTAT", &info->beru_spec[FFESTP_beruixIOSTAT]);
- fputs (")\n", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
ffeste_subr_beru_ (info, FFECOM_gfrtFREW);
-#else
-#error
-#endif
}
/* INQUIRE statement (non-IOLENGTH version). */
@@ -4784,151 +4045,105 @@ ffeste_R921 (ffestpBeruStmt *info)
void
ffeste_R923A (ffestpInquireStmt *info, bool by_file UNUSED)
{
- ffeste_check_simple_ ();
+ tree args;
+ bool iostat;
+ bool errl;
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- if (by_file)
- {
- fputs ("+ INQUIRE_file (", dmpout);
- ffeste_subr_file_ ("FILE", &info->inquire_spec[FFESTP_inquireixFILE]);
- }
- else
- {
- fputs ("+ INQUIRE_unit (", dmpout);
- ffeste_subr_file_ ("UNIT", &info->inquire_spec[FFESTP_inquireixUNIT]);
- }
- ffeste_subr_file_ ("ACCESS", &info->inquire_spec[FFESTP_inquireixACCESS]);
- ffeste_subr_file_ ("ACTION", &info->inquire_spec[FFESTP_inquireixACTION]);
- ffeste_subr_file_ ("BLANK", &info->inquire_spec[FFESTP_inquireixBLANK]);
- ffeste_subr_file_ ("CARRIAGECONTROL", &info->inquire_spec[FFESTP_inquireixCARRIAGECONTROL]);
- ffeste_subr_file_ ("DEFAULTFILE", &info->inquire_spec[FFESTP_inquireixDEFAULTFILE]);
- ffeste_subr_file_ ("DELIM", &info->inquire_spec[FFESTP_inquireixDELIM]);
- ffeste_subr_file_ ("DIRECT", &info->inquire_spec[FFESTP_inquireixDIRECT]);
- ffeste_subr_file_ ("ERR", &info->inquire_spec[FFESTP_inquireixERR]);
- ffeste_subr_file_ ("EXIST", &info->inquire_spec[FFESTP_inquireixEXIST]);
- ffeste_subr_file_ ("FORM", &info->inquire_spec[FFESTP_inquireixFORM]);
- ffeste_subr_file_ ("FORMATTED", &info->inquire_spec[FFESTP_inquireixFORMATTED]);
- ffeste_subr_file_ ("IOSTAT", &info->inquire_spec[FFESTP_inquireixIOSTAT]);
- ffeste_subr_file_ ("KEYED", &info->inquire_spec[FFESTP_inquireixKEYED]);
- ffeste_subr_file_ ("NAME", &info->inquire_spec[FFESTP_inquireixNAME]);
- ffeste_subr_file_ ("NAMED", &info->inquire_spec[FFESTP_inquireixNAMED]);
- ffeste_subr_file_ ("NEXTREC", &info->inquire_spec[FFESTP_inquireixNEXTREC]);
- ffeste_subr_file_ ("NUMBER", &info->inquire_spec[FFESTP_inquireixNUMBER]);
- ffeste_subr_file_ ("OPENED", &info->inquire_spec[FFESTP_inquireixOPENED]);
- ffeste_subr_file_ ("ORGANIZATION", &info->inquire_spec[FFESTP_inquireixORGANIZATION]);
- ffeste_subr_file_ ("PAD", &info->inquire_spec[FFESTP_inquireixPAD]);
- ffeste_subr_file_ ("POSITION", &info->inquire_spec[FFESTP_inquireixPOSITION]);
- ffeste_subr_file_ ("READ", &info->inquire_spec[FFESTP_inquireixREAD]);
- ffeste_subr_file_ ("READWRITE", &info->inquire_spec[FFESTP_inquireixREADWRITE]);
- ffeste_subr_file_ ("RECL", &info->inquire_spec[FFESTP_inquireixRECL]);
- ffeste_subr_file_ ("RECORDTYPE", &info->inquire_spec[FFESTP_inquireixRECORDTYPE]);
- ffeste_subr_file_ ("SEQUENTIAL", &info->inquire_spec[FFESTP_inquireixSEQUENTIAL]);
- ffeste_subr_file_ ("UNFORMATTED", &info->inquire_spec[FFESTP_inquireixUNFORMATTED]);
- ffeste_subr_file_ ("WRITE", &info->inquire_spec[FFESTP_inquireixWRITE]);
- fputs (")\n", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
- {
- tree args;
- bool iostat;
- bool errl;
+ ffeste_check_simple_ ();
- ffeste_emit_line_note_ ();
+ ffeste_emit_line_note_ ();
#define specified(something) (info->inquire_spec[something].kw_or_val_present)
- iostat = specified (FFESTP_inquireixIOSTAT);
- errl = specified (FFESTP_inquireixERR);
+ iostat = specified (FFESTP_inquireixIOSTAT);
+ errl = specified (FFESTP_inquireixERR);
#undef specified
- ffeste_start_stmt_ ();
+ ffeste_start_stmt_ ();
- if (errl)
- {
- ffeste_io_err_
- = ffeste_io_abort_
- = ffecom_lookup_label
- (info->inquire_spec[FFESTP_inquireixERR].u.label);
- ffeste_io_abort_is_temp_ = FALSE;
- }
- else
- {
- ffeste_io_err_ = NULL_TREE;
+ if (errl)
+ {
+ ffeste_io_err_
+ = ffeste_io_abort_
+ = ffecom_lookup_label
+ (info->inquire_spec[FFESTP_inquireixERR].u.label);
+ ffeste_io_abort_is_temp_ = FALSE;
+ }
+ else
+ {
+ ffeste_io_err_ = NULL_TREE;
- if ((ffeste_io_abort_is_temp_ = iostat))
- ffeste_io_abort_ = ffecom_temp_label ();
- else
- ffeste_io_abort_ = NULL_TREE;
- }
+ if ((ffeste_io_abort_is_temp_ = iostat))
+ ffeste_io_abort_ = ffecom_temp_label ();
+ else
+ ffeste_io_abort_ = NULL_TREE;
+ }
- if (iostat)
- {
- /* Have IOSTAT= specification. */
+ if (iostat)
+ {
+ /* Have IOSTAT= specification. */
- ffeste_io_iostat_is_temp_ = FALSE;
- ffeste_io_iostat_ = ffecom_expr
- (info->inquire_spec[FFESTP_inquireixIOSTAT].u.expr);
- }
- else if (ffeste_io_abort_ != NULL_TREE)
- {
- /* Have no IOSTAT= but have ERR=. */
+ ffeste_io_iostat_is_temp_ = FALSE;
+ ffeste_io_iostat_ = ffecom_expr
+ (info->inquire_spec[FFESTP_inquireixIOSTAT].u.expr);
+ }
+ else if (ffeste_io_abort_ != NULL_TREE)
+ {
+ /* Have no IOSTAT= but have ERR=. */
- ffeste_io_iostat_is_temp_ = TRUE;
- ffeste_io_iostat_
- = ffecom_make_tempvar ("inquire", ffecom_integer_type_node,
- FFETARGET_charactersizeNONE, -1);
- }
- else
- {
- /* No IOSTAT= or ERR= specification. */
+ ffeste_io_iostat_is_temp_ = TRUE;
+ ffeste_io_iostat_
+ = ffecom_make_tempvar ("inquire", ffecom_integer_type_node,
+ FFETARGET_charactersizeNONE, -1);
+ }
+ else
+ {
+ /* No IOSTAT= or ERR= specification. */
- ffeste_io_iostat_is_temp_ = FALSE;
- ffeste_io_iostat_ = NULL_TREE;
- }
+ ffeste_io_iostat_is_temp_ = FALSE;
+ ffeste_io_iostat_ = NULL_TREE;
+ }
- /* Now prescan, then convert, all the arguments. */
-
- args
- = ffeste_io_inlist_ (errl || iostat,
- &info->inquire_spec[FFESTP_inquireixUNIT],
- &info->inquire_spec[FFESTP_inquireixFILE],
- &info->inquire_spec[FFESTP_inquireixEXIST],
- &info->inquire_spec[FFESTP_inquireixOPENED],
- &info->inquire_spec[FFESTP_inquireixNUMBER],
- &info->inquire_spec[FFESTP_inquireixNAMED],
- &info->inquire_spec[FFESTP_inquireixNAME],
- &info->inquire_spec[FFESTP_inquireixACCESS],
- &info->inquire_spec[FFESTP_inquireixSEQUENTIAL],
- &info->inquire_spec[FFESTP_inquireixDIRECT],
- &info->inquire_spec[FFESTP_inquireixFORM],
- &info->inquire_spec[FFESTP_inquireixFORMATTED],
- &info->inquire_spec[FFESTP_inquireixUNFORMATTED],
- &info->inquire_spec[FFESTP_inquireixRECL],
- &info->inquire_spec[FFESTP_inquireixNEXTREC],
- &info->inquire_spec[FFESTP_inquireixBLANK]);
-
- /* Don't generate "if (iostat != 0) goto label;" if label is temp abort
- label, since we're gonna fall through to there anyway. */
+ /* Now prescan, then convert, all the arguments. */
- ffeste_io_call_ (ffecom_call_gfrt (FFECOM_gfrtFINQU, args, NULL_TREE),
- ! ffeste_io_abort_is_temp_);
+ args
+ = ffeste_io_inlist_ (errl || iostat,
+ &info->inquire_spec[FFESTP_inquireixUNIT],
+ &info->inquire_spec[FFESTP_inquireixFILE],
+ &info->inquire_spec[FFESTP_inquireixEXIST],
+ &info->inquire_spec[FFESTP_inquireixOPENED],
+ &info->inquire_spec[FFESTP_inquireixNUMBER],
+ &info->inquire_spec[FFESTP_inquireixNAMED],
+ &info->inquire_spec[FFESTP_inquireixNAME],
+ &info->inquire_spec[FFESTP_inquireixACCESS],
+ &info->inquire_spec[FFESTP_inquireixSEQUENTIAL],
+ &info->inquire_spec[FFESTP_inquireixDIRECT],
+ &info->inquire_spec[FFESTP_inquireixFORM],
+ &info->inquire_spec[FFESTP_inquireixFORMATTED],
+ &info->inquire_spec[FFESTP_inquireixUNFORMATTED],
+ &info->inquire_spec[FFESTP_inquireixRECL],
+ &info->inquire_spec[FFESTP_inquireixNEXTREC],
+ &info->inquire_spec[FFESTP_inquireixBLANK]);
- /* If we've got a temp label, generate its code here. */
+ /* Don't generate "if (iostat != 0) goto label;" if label is temp abort
+ label, since we're gonna fall through to there anyway. */
- if (ffeste_io_abort_is_temp_)
- {
- DECL_INITIAL (ffeste_io_abort_) = error_mark_node;
- emit_nop ();
- expand_label (ffeste_io_abort_);
+ ffeste_io_call_ (ffecom_call_gfrt (FFECOM_gfrtFINQU, args, NULL_TREE),
+ ! ffeste_io_abort_is_temp_);
- assert (ffeste_io_err_ == NULL_TREE);
- }
+ /* If we've got a temp label, generate its code here. */
- ffeste_end_stmt_ ();
- }
-#else
-#error
-#endif
+ if (ffeste_io_abort_is_temp_)
+ {
+ DECL_INITIAL (ffeste_io_abort_) = error_mark_node;
+ emit_nop ();
+ expand_label (ffeste_io_abort_);
+
+ assert (ffeste_io_err_ == NULL_TREE);
+ }
+
+ ffeste_end_stmt_ ();
}
/* INQUIRE(IOLENGTH=expr) statement -- start. */
@@ -4938,17 +4153,9 @@ ffeste_R923B_start (ffestpInquireStmt *info UNUSED)
{
ffeste_check_start_ ();
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("+ INQUIRE (", dmpout);
- ffeste_subr_file_ ("IOLENGTH", &info->inquire_spec[FFESTP_inquireixIOLENGTH]);
- fputs (") ", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
assert ("INQUIRE(IOLENGTH=<var>) not implemented yet! ~~~" == NULL);
ffeste_emit_line_note_ ();
-#else
-#error
-#endif
}
/* INQUIRE(IOLENGTH=expr) statement -- I/O item. */
@@ -4957,14 +4164,6 @@ void
ffeste_R923B_item (ffebld expr UNUSED)
{
ffeste_check_item_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- ffebld_dump (expr);
- fputc (',', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* INQUIRE(IOLENGTH=expr) statement -- end. */
@@ -4973,13 +4172,6 @@ void
ffeste_R923B_finish ()
{
ffeste_check_finish_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputc ('\n', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ffeste_R1001 -- FORMAT statement
@@ -4989,63 +4181,49 @@ ffeste_R923B_finish ()
void
ffeste_R1001 (ffests s)
{
- ffeste_check_simple_ ();
+ tree t;
+ tree ttype;
+ tree maxindex;
+ tree var;
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fprintf (dmpout, "$ FORMAT %.*s\n", (int) ffests_length (s), ffests_text (s));
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
- {
- tree t;
- tree ttype;
- tree maxindex;
- tree var;
+ ffeste_check_simple_ ();
- assert (ffeste_label_formatdef_ != NULL);
+ assert (ffeste_label_formatdef_ != NULL);
- ffeste_emit_line_note_ ();
+ ffeste_emit_line_note_ ();
- t = build_string (ffests_length (s), ffests_text (s));
+ t = build_string (ffests_length (s), ffests_text (s));
- TREE_TYPE (t)
- = build_type_variant (build_array_type
- (char_type_node,
- build_range_type (integer_type_node,
- integer_one_node,
+ TREE_TYPE (t)
+ = build_type_variant (build_array_type
+ (char_type_node,
+ build_range_type (integer_type_node,
+ integer_one_node,
build_int_2 (ffests_length (s),
0))),
- 1, 0);
- TREE_CONSTANT (t) = 1;
- TREE_STATIC (t) = 1;
-
- push_obstacks_nochange ();
- end_temporary_allocation ();
-
- var = ffecom_lookup_label (ffeste_label_formatdef_);
- if ((var != NULL_TREE)
- && (TREE_CODE (var) == VAR_DECL))
- {
- DECL_INITIAL (var) = t;
- maxindex = build_int_2 (ffests_length (s) - 1, 0);
- ttype = TREE_TYPE (var);
- TYPE_DOMAIN (ttype) = build_range_type (integer_type_node,
- integer_zero_node,
- maxindex);
- if (!TREE_TYPE (maxindex))
- TREE_TYPE (maxindex) = TYPE_DOMAIN (ttype);
- layout_type (ttype);
- rest_of_decl_compilation (var, NULL, 1, 0);
- expand_decl (var);
- expand_decl_init (var);
- }
+ 1, 0);
+ TREE_CONSTANT (t) = 1;
+ TREE_STATIC (t) = 1;
- resume_temporary_allocation ();
- pop_obstacks ();
+ var = ffecom_lookup_label (ffeste_label_formatdef_);
+ if ((var != NULL_TREE)
+ && (TREE_CODE (var) == VAR_DECL))
+ {
+ DECL_INITIAL (var) = t;
+ maxindex = build_int_2 (ffests_length (s) - 1, 0);
+ ttype = TREE_TYPE (var);
+ TYPE_DOMAIN (ttype) = build_range_type (integer_type_node,
+ integer_zero_node,
+ maxindex);
+ if (!TREE_TYPE (maxindex))
+ TREE_TYPE (maxindex) = TYPE_DOMAIN (ttype);
+ layout_type (ttype);
+ rest_of_decl_compilation (var, NULL, 1, 0);
+ expand_decl (var);
+ expand_decl_init (var);
+ }
- ffeste_label_formatdef_ = NULL;
- }
-#else
-#error
-#endif
+ ffeste_label_formatdef_ = NULL;
}
/* END PROGRAM. */
@@ -5053,12 +4231,6 @@ ffeste_R1001 (ffests s)
void
ffeste_R1103 ()
{
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("+ END_PROGRAM\n", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* END BLOCK DATA. */
@@ -5066,12 +4238,6 @@ ffeste_R1103 ()
void
ffeste_R1112 ()
{
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("* END_BLOCK_DATA\n", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* CALL statement. */
@@ -5079,129 +4245,121 @@ ffeste_R1112 ()
void
ffeste_R1212 (ffebld expr)
{
+ ffebld args;
+ ffebld arg;
+ ffebld labels = NULL; /* First in list of LABTERs. */
+ ffebld prevlabels = NULL;
+ ffebld prevargs = NULL;
+
ffeste_check_simple_ ();
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("+ CALL ", dmpout);
- ffebld_dump (expr);
- fputc ('\n', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
- {
- ffebld args = ffebld_right (expr);
- ffebld arg;
- ffebld labels = NULL; /* First in list of LABTERs. */
- ffebld prevlabels = NULL;
- ffebld prevargs = NULL;
+ args = ffebld_right (expr);
- ffeste_emit_line_note_ ();
+ ffeste_emit_line_note_ ();
- /* Here we split the list at ffebld_right(expr) into two lists: one at
- ffebld_right(expr) consisting of all items that are not LABTERs, the
- other at labels consisting of all items that are LABTERs. Then, if
- the latter list is NULL, we have an ordinary call, else we have a call
- with alternate returns. */
+ /* Here we split the list at ffebld_right(expr) into two lists: one at
+ ffebld_right(expr) consisting of all items that are not LABTERs, the
+ other at labels consisting of all items that are LABTERs. Then, if
+ the latter list is NULL, we have an ordinary call, else we have a call
+ with alternate returns. */
- for (args = ffebld_right (expr); args != NULL; args = ffebld_trail (args))
- {
- if (((arg = ffebld_head (args)) == NULL)
- || (ffebld_op (arg) != FFEBLD_opLABTER))
- {
- if (prevargs == NULL)
- {
- prevargs = args;
- ffebld_set_right (expr, args);
- }
- else
- {
- ffebld_set_trail (prevargs, args);
- prevargs = args;
- }
- }
- else
- {
- if (prevlabels == NULL)
- {
- prevlabels = labels = args;
- }
- else
- {
- ffebld_set_trail (prevlabels, args);
- prevlabels = args;
- }
- }
- }
- if (prevlabels == NULL)
- labels = NULL;
- else
- ffebld_set_trail (prevlabels, NULL);
- if (prevargs == NULL)
- ffebld_set_right (expr, NULL);
- else
- ffebld_set_trail (prevargs, NULL);
+ for (args = ffebld_right (expr); args != NULL; args = ffebld_trail (args))
+ {
+ if (((arg = ffebld_head (args)) == NULL)
+ || (ffebld_op (arg) != FFEBLD_opLABTER))
+ {
+ if (prevargs == NULL)
+ {
+ prevargs = args;
+ ffebld_set_right (expr, args);
+ }
+ else
+ {
+ ffebld_set_trail (prevargs, args);
+ prevargs = args;
+ }
+ }
+ else
+ {
+ if (prevlabels == NULL)
+ {
+ prevlabels = labels = args;
+ }
+ else
+ {
+ ffebld_set_trail (prevlabels, args);
+ prevlabels = args;
+ }
+ }
+ }
+ if (prevlabels == NULL)
+ labels = NULL;
+ else
+ ffebld_set_trail (prevlabels, NULL);
+ if (prevargs == NULL)
+ ffebld_set_right (expr, NULL);
+ else
+ ffebld_set_trail (prevargs, NULL);
- ffeste_start_stmt_ ();
+ ffeste_start_stmt_ ();
- /* No temporaries are actually needed at this level, but we go
- through the motions anyway, just to be sure in case they do
- get made. Temporaries needed for arguments should be in the
- scopes of inner blocks, and if clean-up actions are supported,
- such as CALL-ing an intrinsic that writes to an argument of one
- type when a variable of a different type is provided (requiring
- assignment to the variable from a temporary after the library
- routine returns), the clean-up must be done by the expression
- evaluator, generally, to handle alternate returns (which we hope
- won't ever be supported by intrinsics, but might be a similar
- issue, such as CALL-ing an F90-style subroutine with an INTERFACE
- block). That implies the expression evaluator will have to
- recognize the need for its own temporary anyway, meaning it'll
- construct a block within the one constructed here. */
-
- ffecom_prepare_expr (expr);
-
- ffecom_prepare_end ();
-
- if (labels == NULL)
- expand_expr_stmt (ffecom_expr (expr));
- else
- {
- tree texpr;
- tree value;
- tree tlabel;
- int caseno;
- int pushok;
- tree duplicate;
- ffebld label;
-
- texpr = ffecom_expr (expr);
- expand_start_case (0, texpr, TREE_TYPE (texpr), "CALL statement");
-
- for (caseno = 1, label = labels;
- label != NULL;
- ++caseno, label = ffebld_trail (label))
- {
- value = build_int_2 (caseno, 0);
- tlabel = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
-
- pushok = pushcase (value, convert, tlabel, &duplicate);
- assert (pushok == 0);
-
- tlabel
- = ffecom_lookup_label (ffebld_labter (ffebld_head (label)));
- if ((tlabel == NULL_TREE)
- || (TREE_CODE (tlabel) == ERROR_MARK))
- continue;
- TREE_USED (tlabel) = 1;
- expand_goto (tlabel);
- }
+ /* No temporaries are actually needed at this level, but we go
+ through the motions anyway, just to be sure in case they do
+ get made. Temporaries needed for arguments should be in the
+ scopes of inner blocks, and if clean-up actions are supported,
+ such as CALL-ing an intrinsic that writes to an argument of one
+ type when a variable of a different type is provided (requiring
+ assignment to the variable from a temporary after the library
+ routine returns), the clean-up must be done by the expression
+ evaluator, generally, to handle alternate returns (which we hope
+ won't ever be supported by intrinsics, but might be a similar
+ issue, such as CALL-ing an F90-style subroutine with an INTERFACE
+ block). That implies the expression evaluator will have to
+ recognize the need for its own temporary anyway, meaning it'll
+ construct a block within the one constructed here. */
+
+ ffecom_prepare_expr (expr);
- expand_end_case (texpr);
- }
+ ffecom_prepare_end ();
- ffeste_end_stmt_ ();
- }
-#else
-#error
-#endif
+ if (labels == NULL)
+ expand_expr_stmt (ffecom_expr (expr));
+ else
+ {
+ tree texpr;
+ tree value;
+ tree tlabel;
+ int caseno;
+ int pushok;
+ tree duplicate;
+ ffebld label;
+
+ texpr = ffecom_expr (expr);
+ expand_start_case (0, texpr, TREE_TYPE (texpr), "CALL statement");
+
+ for (caseno = 1, label = labels;
+ label != NULL;
+ ++caseno, label = ffebld_trail (label))
+ {
+ value = build_int_2 (caseno, 0);
+ tlabel = build_decl (LABEL_DECL, NULL_TREE, NULL_TREE);
+
+ pushok = pushcase (value, convert, tlabel, &duplicate);
+ assert (pushok == 0);
+
+ tlabel
+ = ffecom_lookup_label (ffebld_labter (ffebld_head (label)));
+ if ((tlabel == NULL_TREE)
+ || (TREE_CODE (tlabel) == ERROR_MARK))
+ continue;
+ TREE_USED (tlabel) = 1;
+ expand_goto (tlabel);
+ }
+
+ expand_end_case (texpr);
+ }
+
+ ffeste_end_stmt_ ();
}
/* END FUNCTION. */
@@ -5209,12 +4367,6 @@ ffeste_R1212 (ffebld expr)
void
ffeste_R1221 ()
{
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("+ END_FUNCTION\n", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* END SUBROUTINE. */
@@ -5222,12 +4374,6 @@ ffeste_R1221 ()
void
ffeste_R1225 ()
{
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fprintf (dmpout, "+ END_SUBROUTINE\n");
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ENTRY statement. */
@@ -5235,59 +4381,20 @@ ffeste_R1225 ()
void
ffeste_R1226 (ffesymbol entry)
{
+ tree label;
+
ffeste_check_simple_ ();
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fprintf (dmpout, "+ ENTRY %s", ffesymbol_text (entry));
- if (ffesymbol_dummyargs (entry) != NULL)
- {
- ffebld argh;
+ label = ffesymbol_hook (entry).length_tree;
- fputc ('(', dmpout);
- for (argh = ffesymbol_dummyargs (entry);
- argh != NULL;
- argh = ffebld_trail (argh))
- {
- assert (ffebld_head (argh) != NULL);
- switch (ffebld_op (ffebld_head (argh)))
- {
- case FFEBLD_opSYMTER:
- fputs (ffesymbol_text (ffebld_symter (ffebld_head (argh))),
- dmpout);
- break;
-
- case FFEBLD_opSTAR:
- fputc ('*', dmpout);
- break;
-
- default:
- fputc ('?', dmpout);
- ffebld_dump (ffebld_head (argh));
- fputc ('?', dmpout);
- break;
- }
- if (ffebld_trail (argh) != NULL)
- fputc (',', dmpout);
- }
- fputc (')', dmpout);
- }
- fputc ('\n', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
- {
- tree label = ffesymbol_hook (entry).length_tree;
-
- ffeste_emit_line_note_ ();
+ ffeste_emit_line_note_ ();
- if (label == error_mark_node)
- return;
+ if (label == error_mark_node)
+ return;
- DECL_INITIAL (label) = error_mark_node;
- emit_nop ();
- expand_label (label);
- }
-#else
-#error
-#endif
+ DECL_INITIAL (label) = error_mark_node;
+ emit_nop ();
+ expand_label (label);
}
/* RETURN statement. */
@@ -5295,55 +4402,38 @@ ffeste_R1226 (ffesymbol entry)
void
ffeste_R1227 (ffestw block UNUSED, ffebld expr)
{
- ffeste_check_simple_ ();
+ tree rtn;
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- if (expr == NULL)
- {
- fputs ("+ RETURN\n", dmpout);
- }
- else
- {
- fputs ("+ RETURN_alternate ", dmpout);
- ffebld_dump (expr);
- fputc ('\n', dmpout);
- }
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
- {
- tree rtn;
+ ffeste_check_simple_ ();
- ffeste_emit_line_note_ ();
+ ffeste_emit_line_note_ ();
- ffeste_start_stmt_ ();
+ ffeste_start_stmt_ ();
- ffecom_prepare_return_expr (expr);
+ ffecom_prepare_return_expr (expr);
- ffecom_prepare_end ();
+ ffecom_prepare_end ();
- rtn = ffecom_return_expr (expr);
+ rtn = ffecom_return_expr (expr);
- if ((rtn == NULL_TREE)
- || (rtn == error_mark_node))
- expand_null_return ();
- else
- {
- tree result = DECL_RESULT (current_function_decl);
-
- if ((result != error_mark_node)
- && (TREE_TYPE (result) != error_mark_node))
- expand_return (ffecom_modify (NULL_TREE,
- result,
- convert (TREE_TYPE (result),
- rtn)));
- else
- expand_null_return ();
- }
+ if ((rtn == NULL_TREE)
+ || (rtn == error_mark_node))
+ expand_null_return ();
+ else
+ {
+ tree result = DECL_RESULT (current_function_decl);
+
+ if ((result != error_mark_node)
+ && (TREE_TYPE (result) != error_mark_node))
+ expand_return (ffecom_modify (NULL_TREE,
+ result,
+ convert (TREE_TYPE (result),
+ rtn)));
+ else
+ expand_null_return ();
+ }
- ffeste_end_stmt_ ();
- }
-#else
-#error
-#endif
+ ffeste_end_stmt_ ();
}
/* REWRITE statement -- start. */
@@ -5353,32 +4443,6 @@ void
ffeste_V018_start (ffestpRewriteStmt *info, ffestvFormat format)
{
ffeste_check_start_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- switch (format)
- {
- case FFESTV_formatNONE:
- fputs ("+ REWRITE_uf (", dmpout);
- break;
-
- case FFESTV_formatLABEL:
- case FFESTV_formatCHAREXPR:
- case FFESTV_formatINTEXPR:
- fputs ("+ REWRITE_fm (", dmpout);
- break;
-
- default:
- assert ("Unexpected kind of format item in V018 REWRITE" == NULL);
- }
- ffeste_subr_file_ ("UNIT", &info->rewrite_spec[FFESTP_rewriteixUNIT]);
- ffeste_subr_file_ ("FMT", &info->rewrite_spec[FFESTP_rewriteixFMT]);
- ffeste_subr_file_ ("ERR", &info->rewrite_spec[FFESTP_rewriteixERR]);
- ffeste_subr_file_ ("IOSTAT", &info->rewrite_spec[FFESTP_rewriteixIOSTAT]);
- fputs (") ", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* REWRITE statement -- I/O item. */
@@ -5387,14 +4451,6 @@ void
ffeste_V018_item (ffebld expr)
{
ffeste_check_item_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- ffebld_dump (expr);
- fputc (',', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* REWRITE statement -- end. */
@@ -5403,13 +4459,6 @@ void
ffeste_V018_finish ()
{
ffeste_check_finish_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputc ('\n', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ACCEPT statement -- start. */
@@ -5418,33 +4467,6 @@ void
ffeste_V019_start (ffestpAcceptStmt *info, ffestvFormat format)
{
ffeste_check_start_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- switch (format)
- {
- case FFESTV_formatLABEL:
- case FFESTV_formatCHAREXPR:
- case FFESTV_formatINTEXPR:
- fputs ("+ ACCEPT_fm ", dmpout);
- break;
-
- case FFESTV_formatASTERISK:
- fputs ("+ ACCEPT_ls ", dmpout);
- break;
-
- case FFESTV_formatNAMELIST:
- fputs ("+ ACCEPT_nl ", dmpout);
- break;
-
- default:
- assert ("Unexpected kind of format item in V019 ACCEPT" == NULL);
- }
- ffeste_subr_file_ ("FORMAT", &info->accept_spec[FFESTP_acceptixFORMAT]);
- fputc (' ', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ACCEPT statement -- I/O item. */
@@ -5453,14 +4475,6 @@ void
ffeste_V019_item (ffebld expr)
{
ffeste_check_item_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- ffebld_dump (expr);
- fputc (',', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ACCEPT statement -- end. */
@@ -5469,13 +4483,6 @@ void
ffeste_V019_finish ()
{
ffeste_check_finish_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputc ('\n', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
#endif
@@ -5486,33 +4493,6 @@ ffeste_V020_start (ffestpTypeStmt *info UNUSED,
ffestvFormat format UNUSED)
{
ffeste_check_start_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- switch (format)
- {
- case FFESTV_formatLABEL:
- case FFESTV_formatCHAREXPR:
- case FFESTV_formatINTEXPR:
- fputs ("+ TYPE_fm ", dmpout);
- break;
-
- case FFESTV_formatASTERISK:
- fputs ("+ TYPE_ls ", dmpout);
- break;
-
- case FFESTV_formatNAMELIST:
- fputs ("* TYPE_nl ", dmpout);
- break;
-
- default:
- assert ("Unexpected kind of format item in V020 TYPE" == NULL);
- }
- ffeste_subr_file_ ("FORMAT", &info->type_spec[FFESTP_typeixFORMAT]);
- fputc (' ', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* TYPE statement -- I/O item. */
@@ -5521,14 +4501,6 @@ void
ffeste_V020_item (ffebld expr UNUSED)
{
ffeste_check_item_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- ffebld_dump (expr);
- fputc (',', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* TYPE statement -- end. */
@@ -5537,13 +4509,6 @@ void
ffeste_V020_finish ()
{
ffeste_check_finish_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputc ('\n', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* DELETE statement. */
@@ -5553,18 +4518,6 @@ void
ffeste_V021 (ffestpDeleteStmt *info)
{
ffeste_check_simple_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("+ DELETE (", dmpout);
- ffeste_subr_file_ ("UNIT", &info->delete_spec[FFESTP_deleteixUNIT]);
- ffeste_subr_file_ ("REC", &info->delete_spec[FFESTP_deleteixREC]);
- ffeste_subr_file_ ("ERR", &info->delete_spec[FFESTP_deleteixERR]);
- ffeste_subr_file_ ("IOSTAT", &info->delete_spec[FFESTP_deleteixIOSTAT]);
- fputs (")\n", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* UNLOCK statement. */
@@ -5573,17 +4526,6 @@ void
ffeste_V022 (ffestpBeruStmt *info)
{
ffeste_check_simple_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("+ UNLOCK (", dmpout);
- ffeste_subr_file_ ("UNIT", &info->beru_spec[FFESTP_beruixUNIT]);
- ffeste_subr_file_ ("ERR", &info->beru_spec[FFESTP_beruixERR]);
- ffeste_subr_file_ ("IOSTAT", &info->beru_spec[FFESTP_beruixIOSTAT]);
- fputs (")\n", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ENCODE statement -- start. */
@@ -5592,19 +4534,6 @@ void
ffeste_V023_start (ffestpVxtcodeStmt *info)
{
ffeste_check_start_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("+ ENCODE (", dmpout);
- ffeste_subr_file_ ("C", &info->vxtcode_spec[FFESTP_vxtcodeixC]);
- ffeste_subr_file_ ("F", &info->vxtcode_spec[FFESTP_vxtcodeixF]);
- ffeste_subr_file_ ("B", &info->vxtcode_spec[FFESTP_vxtcodeixB]);
- ffeste_subr_file_ ("ERR", &info->vxtcode_spec[FFESTP_vxtcodeixERR]);
- ffeste_subr_file_ ("IOSTAT", &info->vxtcode_spec[FFESTP_vxtcodeixIOSTAT]);
- fputs (") ", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ENCODE statement -- I/O item. */
@@ -5613,14 +4542,6 @@ void
ffeste_V023_item (ffebld expr)
{
ffeste_check_item_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- ffebld_dump (expr);
- fputc (',', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* ENCODE statement -- end. */
@@ -5629,13 +4550,6 @@ void
ffeste_V023_finish ()
{
ffeste_check_finish_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputc ('\n', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* DECODE statement -- start. */
@@ -5644,19 +4558,6 @@ void
ffeste_V024_start (ffestpVxtcodeStmt *info)
{
ffeste_check_start_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("+ DECODE (", dmpout);
- ffeste_subr_file_ ("C", &info->vxtcode_spec[FFESTP_vxtcodeixC]);
- ffeste_subr_file_ ("F", &info->vxtcode_spec[FFESTP_vxtcodeixF]);
- ffeste_subr_file_ ("B", &info->vxtcode_spec[FFESTP_vxtcodeixB]);
- ffeste_subr_file_ ("ERR", &info->vxtcode_spec[FFESTP_vxtcodeixERR]);
- ffeste_subr_file_ ("IOSTAT", &info->vxtcode_spec[FFESTP_vxtcodeixIOSTAT]);
- fputs (") ", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* DECODE statement -- I/O item. */
@@ -5665,14 +4566,6 @@ void
ffeste_V024_item (ffebld expr)
{
ffeste_check_item_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- ffebld_dump (expr);
- fputc (',', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* DECODE statement -- end. */
@@ -5681,13 +4574,6 @@ void
ffeste_V024_finish ()
{
ffeste_check_finish_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputc ('\n', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* DEFINEFILE statement -- start. */
@@ -5696,13 +4582,6 @@ void
ffeste_V025_start ()
{
ffeste_check_start_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("+ DEFINE_FILE ", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* DEFINE FILE statement -- item. */
@@ -5711,20 +4590,6 @@ void
ffeste_V025_item (ffebld u, ffebld m, ffebld n, ffebld asv)
{
ffeste_check_item_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- ffebld_dump (u);
- fputc ('(', dmpout);
- ffebld_dump (m);
- fputc (',', dmpout);
- ffebld_dump (n);
- fputs (",U,", dmpout);
- ffebld_dump (asv);
- fputs ("),", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* DEFINE FILE statement -- end. */
@@ -5733,13 +4598,6 @@ void
ffeste_V025_finish ()
{
ffeste_check_finish_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputc ('\n', dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
/* FIND statement. */
@@ -5748,18 +4606,6 @@ void
ffeste_V026 (ffestpFindStmt *info)
{
ffeste_check_simple_ ();
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
- fputs ("+ FIND (", dmpout);
- ffeste_subr_file_ ("UNIT", &info->find_spec[FFESTP_findixUNIT]);
- ffeste_subr_file_ ("REC", &info->find_spec[FFESTP_findixREC]);
- ffeste_subr_file_ ("ERR", &info->find_spec[FFESTP_findixERR]);
- ffeste_subr_file_ ("IOSTAT", &info->find_spec[FFESTP_findixIOSTAT]);
- fputs (")\n", dmpout);
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
-#else
-#error
-#endif
}
#endif
diff --git a/contrib/gcc/f/ste.h b/contrib/gcc/f/ste.h
index 78e9881..fb32c79 100644
--- a/contrib/gcc/f/ste.h
+++ b/contrib/gcc/f/ste.h
@@ -27,8 +27,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* Allow multiple inclusion to work. */
-#ifndef _H_f_ste
-#define _H_f_ste
+#ifndef GCC_F_STE_H
+#define GCC_F_STE_H
/* Simple definitions and enumerations. */
@@ -147,16 +147,10 @@ void ffeste_V026 (ffestpFindStmt *info);
#define ffeste_init_2()
#define ffeste_init_3()
#define ffeste_init_4()
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
#define ffeste_filename() input_filename
#define ffeste_filelinenum() lineno
#define ffeste_set_line(name,num) \
(input_filename = (name), lineno = (num))
-#elif FFECOM_targetCURRENT == FFECOM_targetFFE
-#define ffeste_set_line(name,num)
-#else
-#error
-#endif /* FFECOM_targetCURRENT == FFECOM_targetFFE */
#define ffeste_terminate_0()
#define ffeste_terminate_1()
#ifdef ENABLE_CHECKING
@@ -169,4 +163,4 @@ void ffeste_terminate_2 (void);
/* End of #include file. */
-#endif
+#endif /* ! GCC_F_STE_H */
diff --git a/contrib/gcc/f/storag.h b/contrib/gcc/f/storag.h
index bc5c9e6..e4aa404 100644
--- a/contrib/gcc/f/storag.h
+++ b/contrib/gcc/f/storag.h
@@ -27,8 +27,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* Allow multiple inclusion to work. */
-#ifndef _H_f_storag
-#define _H_f_storag
+#ifndef GCC_F_STORAG_H
+#define GCC_F_STORAG_H
/* Simple definitions and enumerations. */
@@ -164,4 +164,4 @@ void ffestorag_update_save (ffestorag s);
/* End of #include file. */
-#endif
+#endif /* ! GCC_F_STORAG_H */
diff --git a/contrib/gcc/f/stp.h b/contrib/gcc/f/stp.h
index d995cf0..eca8d0d 100644
--- a/contrib/gcc/f/stp.h
+++ b/contrib/gcc/f/stp.h
@@ -27,8 +27,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* Allow multiple inclusion to work. */
-#ifndef _H_f_stp
-#define _H_f_stp
+#ifndef GCC_F_STP_H
+#define GCC_F_STP_H
/* Simple definitions and enumerations. */
@@ -505,4 +505,4 @@ extern union _ffestp_fileu_ ffestp_file;
/* End of #include file. */
-#endif
+#endif /* ! GCC_F_STP_H */
diff --git a/contrib/gcc/f/str.h b/contrib/gcc/f/str.h
index 1ed1228..543eeeb 100644
--- a/contrib/gcc/f/str.h
+++ b/contrib/gcc/f/str.h
@@ -27,8 +27,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* Allow multiple inclusion to work. */
-#ifndef _H_f_str
-#define _H_f_str
+#ifndef GCC_F_STR_H
+#define GCC_F_STR_H
/* Simple definitions and enumerations. */
@@ -82,4 +82,4 @@ ffestrSecond ffestr_second (ffelexToken t);
/* End of #include file. */
-#endif
+#endif /* ! GCC_F_STR_H */
diff --git a/contrib/gcc/f/sts.c b/contrib/gcc/f/sts.c
index 143f550..63bf77a 100644
--- a/contrib/gcc/f/sts.c
+++ b/contrib/gcc/f/sts.c
@@ -96,119 +96,25 @@ ffests_new (ffests s, mallocPool pool, ffestsLength size)
s->text_ = malloc_new_ksr (pool, "ffests", size);
}
-/* ffests_printf_1D -- printf("...%ld...",(long)) to a string
+/* ffests_printf -- printf ("...%ld...",(long)) to a string
ffests s;
- ffests_printf_1D(s,"...%ld...",1);
+ ffests_printf (s,"...%ld...",1);
Like printf, but into a string. */
void
-ffests_printf_1D (ffests s, const char *ctl, long arg1)
+ffests_printf (ffests s, const char *ctl, ...)
{
- char quickbuf[40];
- char *buff;
- ffestsLength len;
-
- if ((len = strlen (ctl) + 21) < ARRAY_SIZE (quickbuf))
- /* No # bigger than 20 digits. */
- {
- sprintf (&quickbuf[0], ctl, arg1);
- ffests_puttext (s, &quickbuf[0], strlen (quickbuf));
- }
- else
- {
- buff = malloc_new_ks (malloc_pool_image (), "ffests_printf_1D", len);
- sprintf (buff, ctl, arg1);
- ffests_puttext (s, buff, strlen (buff));
- malloc_kill_ks (malloc_pool_image (), buff, len);
- }
-}
-
-/* ffests_printf_1U -- printf("...%lu...",(unsigned long)) to a string
-
- ffests s;
- ffests_printf_1U(s,"...%lu...",1);
-
- Like printf, but into a string. */
-
-void
-ffests_printf_1U (ffests s, const char *ctl, unsigned long arg1)
-{
- char quickbuf[40];
- char *buff;
- ffestsLength len;
-
- if ((len = strlen (ctl) + 21) < ARRAY_SIZE (quickbuf))
- /* No # bigger than 20 digits. */
- {
- sprintf (&quickbuf[0], ctl, arg1);
- ffests_puttext (s, &quickbuf[0], strlen (quickbuf));
- }
- else
- {
- buff = malloc_new_ks (malloc_pool_image (), "ffests_printf_1U", len);
- sprintf (buff, ctl, arg1);
- ffests_puttext (s, buff, strlen (buff));
- malloc_kill_ks (malloc_pool_image (), buff, len);
- }
-}
-
-/* ffests_printf_1s -- printf("...%s...",(char *)) to a string
-
- ffests s;
- ffests_printf_1s(s,"...%s...","hi there!");
-
- Like printf, but into a string. */
-
-void
-ffests_printf_1s (ffests s, const char *ctl, const char *arg1)
-{
- char quickbuf[40];
- char *buff;
- ffestsLength len;
-
- if ((len = strlen (ctl) + strlen (arg1) - 1) < ARRAY_SIZE (quickbuf))
- {
- sprintf (&quickbuf[0], ctl, arg1);
- ffests_puttext (s, &quickbuf[0], strlen (quickbuf));
- }
- else
- {
- buff = malloc_new_ks (malloc_pool_image (), "ffests_printf_1s", len);
- sprintf (buff, ctl, arg1);
- ffests_puttext (s, buff, strlen (buff));
- malloc_kill_ks (malloc_pool_image (), buff, len);
- }
-}
-
-/* ffests_printf_2Us -- printf("...%lu...%s...",...) to a string
-
- ffests s;
- ffests_printf_2Us(s,"...%lu...%s...",1,"hi there!");
-
- Like printf, but into a string. */
-
-void
-ffests_printf_2Us (ffests s, const char *ctl, unsigned long arg1, const char *arg2)
-{
- char quickbuf[60];
- char *buff;
- ffestsLength len;
-
- if ((len = strlen (ctl) + 21 + strlen (arg2) - 1) < ARRAY_SIZE (quickbuf))
- /* No # bigger than 20 digits. */
- {
- sprintf (&quickbuf[0], ctl, arg1, arg2);
- ffests_puttext (s, &quickbuf[0], strlen (quickbuf));
- }
- else
- {
- buff = malloc_new_ks (malloc_pool_image (), "ffests_printf_2Us", len);
- sprintf (buff, ctl, arg1, arg2);
- ffests_puttext (s, buff, strlen (buff));
- malloc_kill_ks (malloc_pool_image (), buff, len);
- }
+ char *string;
+ va_list ap;
+
+ va_start (ap, ctl);
+ if (vasprintf (&string, ctl, ap) == 0)
+ abort ();
+ va_end (ap);
+ ffests_puts (s, string);
+ free (string);
}
/* ffests_putc -- Put a single character into string
diff --git a/contrib/gcc/f/sts.h b/contrib/gcc/f/sts.h
index 1432d41..3ca494d 100644
--- a/contrib/gcc/f/sts.h
+++ b/contrib/gcc/f/sts.h
@@ -27,8 +27,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* Allow multiple inclusion to work. */
-#ifndef _H_f_sts
-#define _H_f_sts
+#ifndef GCC_F_STS_H
+#define GCC_F_STS_H
/* Simple definitions and enumerations. */
@@ -60,11 +60,7 @@ struct _ffests_
void ffests_kill (ffests s);
void ffests_new (ffests s, mallocPool pool, ffestsLength size);
-void ffests_printf_1D (ffests s, const char *ctl, long arg1);
-void ffests_printf_1U (ffests s, const char *ctl, unsigned long arg1);
-void ffests_printf_1s (ffests s, const char *ctl, const char *arg1);
-void ffests_printf_2Us (ffests s, const char *ctl, unsigned long arg1,
- const char *arg2);
+void ffests_printf (ffests s, const char *ctl, ...) ATTRIBUTE_PRINTF_2;
void ffests_putc (ffests s, char c);
void ffests_puts (ffests s, const char *string);
void ffests_puttext (ffests s, const char *text, ffestsLength length);
@@ -86,4 +82,4 @@ void ffests_puttext (ffests s, const char *text, ffestsLength length);
/* End of #include file. */
-#endif
+#endif /* ! GCC_F_STS_H */
diff --git a/contrib/gcc/f/stt.c b/contrib/gcc/f/stt.c
index 4b008e2..c48a505 100644
--- a/contrib/gcc/f/stt.c
+++ b/contrib/gcc/f/stt.c
@@ -114,35 +114,6 @@ ffestt_caselist_create ()
return new;
}
-/* ffestt_caselist_dump -- Dump list of cases
-
- ffesttCaseList list;
- ffestt_caselist_dump(list);
-
- The cases in the list are dumped with commas separating them. */
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-void
-ffestt_caselist_dump (ffesttCaseList list)
-{
- ffesttCaseList next;
-
- for (next = list->next; next != list; next = next->next)
- {
- if (next != list->next)
- fputc (',', dmpout);
- if (next->expr1 != NULL)
- ffebld_dump (next->expr1);
- if (next->range)
- {
- fputc (':', dmpout);
- if (next->expr2 != NULL)
- ffebld_dump (next->expr2);
- }
- }
-}
-#endif
-
/* ffestt_caselist_kill -- Kill list of cases
ffesttCaseList list;
@@ -438,32 +409,6 @@ ffestt_dimlist_create ()
return new;
}
-/* ffestt_dimlist_dump -- Dump list of dims
-
- ffesttDimList list;
- ffestt_dimlist_dump(list);
-
- The dims in the list are dumped with commas separating them. */
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-void
-ffestt_dimlist_dump (ffesttDimList list)
-{
- ffesttDimList next;
-
- for (next = list->next; next != list; next = next->next)
- {
- if (next != list->next)
- fputc (',', dmpout);
- if (next->lower != NULL)
- ffebld_dump (next->lower);
- fputc (':', dmpout);
- if (next->upper != NULL)
- ffebld_dump (next->upper);
- }
-}
-#endif
-
/* ffestt_dimlist_kill -- Kill list of dims
ffesttDimList list;
@@ -611,28 +556,6 @@ ffestt_exprlist_drive (ffesttExprList list, void (*fn) (ffebld, ffelexToken))
}
}
-/* ffestt_exprlist_dump -- Dump list of exprs
-
- ffesttExprList list;
- ffestt_exprlist_dump(list);
-
- The exprs in the list are dumped with commas separating them. */
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-void
-ffestt_exprlist_dump (ffesttExprList list)
-{
- ffesttExprList next;
-
- for (next = list->next; next != list; next = next->next)
- {
- if (next != list->next)
- fputc (',', dmpout);
- ffebld_dump (next->expr);
- }
-}
-#endif
-
/* ffestt_exprlist_kill -- Kill list of exprs
ffesttExprList list;
@@ -850,35 +773,6 @@ ffestt_implist_drive (ffesttImpList list, void (*fn) (ffelexToken, ffelexToken))
}
}
-/* ffestt_implist_dump -- Dump list of token pairs
-
- ffesttImpList list;
- ffestt_implist_dump(list);
-
- The token pairs in the list are dumped with commas separating them. */
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-void
-ffestt_implist_dump (ffesttImpList list)
-{
- ffesttImpList next;
-
- for (next = list->next; next != list; next = next->next)
- {
- if (next != list->next)
- fputc (',', dmpout);
- assert (ffelex_token_type (next->first) == FFELEX_typeNAME);
- fputs (ffelex_token_text (next->first), dmpout);
- if (next->last != NULL)
- {
- fputc ('-', dmpout);
- assert (ffelex_token_type (next->last) == FFELEX_typeNAME);
- fputs (ffelex_token_text (next->last), dmpout);
- }
- }
-}
-#endif
-
/* ffestt_implist_kill -- Kill list of token pairs
ffesttImpList list;
@@ -964,44 +858,6 @@ ffestt_tokenlist_drive (ffesttTokenList tl, void (*fn) (ffelexToken))
}
}
-/* ffestt_tokenlist_dump -- Dump list of tokens
-
- ffesttTokenList tl;
- ffestt_tokenlist_dump(tl);
-
- The tokens in the list are dumped with commas separating them. */
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-void
-ffestt_tokenlist_dump (ffesttTokenList tl)
-{
- ffesttTokenItem ti;
-
- for (ti = tl->first; ti != (ffesttTokenItem) &tl->first; ti = ti->next)
- {
- if (ti != tl->first)
- fputc (',', dmpout);
- switch (ffelex_token_type (ti->t))
- {
- case FFELEX_typeNUMBER:
- case FFELEX_typeNAME:
- case FFELEX_typeNAMES:
- fputs (ffelex_token_text (ti->t), dmpout);
- break;
-
- case FFELEX_typeASTERISK:
- fputc ('*', dmpout);
- break;
-
- default:
- assert (FALSE);
- fputc ('?', dmpout);
- break;
- }
- }
-}
-#endif
-
/* ffestt_tokenlist_handle -- Handle list of tokens
ffesttTokenList tl;
diff --git a/contrib/gcc/f/stt.h b/contrib/gcc/f/stt.h
index 341daa7..56543d0 100644
--- a/contrib/gcc/f/stt.h
+++ b/contrib/gcc/f/stt.h
@@ -27,8 +27,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* Allow multiple inclusion to work. */
-#ifndef _H_f_stt
-#define _H_f_stt
+#ifndef GCC_F_STT_H
+#define GCC_F_STT_H
/* Simple definitions and enumerations. */
@@ -164,9 +164,6 @@ struct _ffest_format_list_
void ffestt_caselist_append (ffesttCaseList list, bool range, ffebld case1,
ffebld case2, ffelexToken t);
ffesttCaseList ffestt_caselist_create (void);
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-void ffestt_caselist_dump (ffesttCaseList list);
-#endif
void ffestt_caselist_kill (ffesttCaseList list);
void ffestt_dimlist_append (ffesttDimList list, ffebld lower, ffebld upper,
ffelexToken t);
@@ -174,39 +171,24 @@ ffebld ffestt_dimlist_as_expr (ffesttDimList list, ffeinfoRank *rank,
ffebld *array_size, ffebld *extents,
bool is_ugly_assumed);
ffesttDimList ffestt_dimlist_create (void);
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-void ffestt_dimlist_dump (ffesttDimList list);
-#endif
void ffestt_dimlist_kill (ffesttDimList list);
ffestpDimtype ffestt_dimlist_type (ffesttDimList dims, bool is_ugly_assumed);
void ffestt_exprlist_append (ffesttExprList list, ffebld expr, ffelexToken t);
ffesttExprList ffestt_exprlist_create (void);
void ffestt_exprlist_drive (ffesttExprList list, void (*fn) (ffebld, ffelexToken));
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-void ffestt_exprlist_dump (ffesttExprList list);
-#endif
void ffestt_exprlist_kill (ffesttExprList list);
ffesttFormatList ffestt_formatlist_append (ffesttFormatList list);
ffesttFormatList ffestt_formatlist_create (ffesttFormatList parent,
ffelexToken t);
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-void ffestt_formatlist_dump (ffesttFormatList list);
-#endif
void ffestt_formatlist_kill (ffesttFormatList list);
void ffestt_implist_append (ffesttImpList list, ffelexToken first,
ffelexToken last);
ffesttImpList ffestt_implist_create (void);
void ffestt_implist_drive (ffesttImpList list, void (*fn) (ffelexToken, ffelexToken));
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-void ffestt_implist_dump (ffesttImpList list);
-#endif
void ffestt_implist_kill (ffesttImpList list);
void ffestt_tokenlist_append (ffesttTokenList list, ffelexToken t);
ffesttTokenList ffestt_tokenlist_create (void);
void ffestt_tokenlist_drive (ffesttTokenList list, void (*fn) (ffelexToken));
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-void ffestt_tokenlist_dump (ffesttTokenList list);
-#endif
ffelexHandler ffestt_tokenlist_handle (ffesttTokenList list,
ffelexHandler handler);
void ffestt_tokenlist_kill (ffesttTokenList list);
@@ -227,4 +209,4 @@ void ffestt_tokenlist_kill (ffesttTokenList list);
/* End of #include file. */
-#endif
+#endif /* ! GCC_F_STT_H */
diff --git a/contrib/gcc/f/stu.c b/contrib/gcc/f/stu.c
index cc1d95c..bd96ee7 100644
--- a/contrib/gcc/f/stu.c
+++ b/contrib/gcc/f/stu.c
@@ -1,5 +1,5 @@
/* stu.c -- Implementation File (module.c template V1.0)
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
Contributed by James Craig Burley.
This file is part of GNU Fortran.
diff --git a/contrib/gcc/f/stu.h b/contrib/gcc/f/stu.h
index b9d9d52..e01b741 100644
--- a/contrib/gcc/f/stu.h
+++ b/contrib/gcc/f/stu.h
@@ -27,8 +27,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* Allow multiple inclusion to work. */
-#ifndef _H_f_stu
-#define _H_f_stu
+#ifndef GCC_F_STU_H
+#define GCC_F_STU_H
/* Simple definitions and enumerations. */
@@ -66,4 +66,4 @@ ffesymbol ffestu_sym_exec_transition (ffesymbol s);
/* End of #include file. */
-#endif
+#endif /* ! GCC_F_STU_H */
diff --git a/contrib/gcc/f/stv.h b/contrib/gcc/f/stv.h
index 22b177e..a3f959f 100644
--- a/contrib/gcc/f/stv.h
+++ b/contrib/gcc/f/stv.h
@@ -27,8 +27,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* Allow multiple inclusion to work. */
-#ifndef _H_f_stv
-#define _H_f_stv
+#ifndef GCC_F_STV_H
+#define GCC_F_STV_H
/* Simple definitions and enumerations. */
@@ -162,4 +162,4 @@ extern ffelabNumber ffestv_num_label_defines_;
/* End of #include file. */
-#endif
+#endif /* ! GCC_F_STV_H */
diff --git a/contrib/gcc/f/stw.h b/contrib/gcc/f/stw.h
index 554d047..080bd73 100644
--- a/contrib/gcc/f/stw.h
+++ b/contrib/gcc/f/stw.h
@@ -27,8 +27,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* Allow multiple inclusion to work. */
-#ifndef _H_f_stw
-#define _H_f_stw
+#ifndef GCC_F_STW_H
+#define GCC_F_STW_H
/* Simple definitions and enumerations. */
@@ -73,7 +73,6 @@ struct _ffestw_
int uses_; /* # uses (new+use-kill calls). */
ffestvState state_;
int substate_; /* Used on a per-block-state basis. */
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
struct nesting *do_hook_; /* backend id for given loop (EXIT/CYCLE). */
tree do_tvar_; /* tree form of do_iter_var. */
tree do_incr_saved_; /* tree SAVED_EXPR of incr expr. */
@@ -82,7 +81,6 @@ struct _ffestw_
bool select_break_; /* TRUE when CASE should start with gen
"break;". */
int ifthen_fake_else_; /* Number of fake `else' introductions. */
-#endif /* FFECOM_targetCURRENT == FFECOM_targetGCC*/
};
struct _ffestw_case_
@@ -184,4 +182,4 @@ ffestw ffestw_use (ffestw block);
/* End of #include file. */
-#endif
+#endif /* ! GCC_F_STW_H */
diff --git a/contrib/gcc/f/symbol.c b/contrib/gcc/f/symbol.c
index c4bd14d..816ad19 100644
--- a/contrib/gcc/f/symbol.c
+++ b/contrib/gcc/f/symbol.c
@@ -1,5 +1,5 @@
/* Implementation of Fortran symbol manager
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc.
Contributed by James Craig Burley.
This file is part of GNU Fortran.
@@ -47,15 +47,9 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* Choose how to handle global symbols here. */
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-#define FFESYMBOL_globalCURRENT_ FFESYMBOL_globalPROGUNIT_
-#elif FFECOM_targetCURRENT == FFECOM_targetGCC
/* Would be good to understand why PROGUNIT in this case too.
(1995-08-22). */
#define FFESYMBOL_globalCURRENT_ FFESYMBOL_globalPROGUNIT_
-#else
-#error
-#endif
/* Choose how to handle memory pools based on global symbol stuff. */
@@ -117,7 +111,7 @@ static ffesymbolRetract_ *ffesymbol_retract_list_;
/* List of state names. */
-static const char *ffesymbol_state_name_[] =
+static const char *const ffesymbol_state_name_[] =
{
"?",
"@",
@@ -127,7 +121,7 @@ static const char *ffesymbol_state_name_[] =
/* List of attribute names. */
-static const char *ffesymbol_attr_name_[] =
+static const char *const ffesymbol_attr_name_[] =
{
#define DEFATTR(ATTR,ATTRS,NAME) NAME,
#include "symbol.def"
@@ -793,45 +787,6 @@ ffesymbol_drive_sfnames (ffesymbol (*fn) (ffesymbol))
ffename_space_drive_symbol (ffesymbol_sfunc_, fn);
}
-/* Dump info on the symbol for debugging purposes. */
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-void
-ffesymbol_dump (ffesymbol s)
-{
- ffeinfoKind k;
- ffeinfoWhere w;
-
- assert (s != NULL);
-
- if (ffeinfo_size (s->info) != FFETARGET_charactersizeNONE)
- fprintf (dmpout, "%s:%d%s%s*%" ffetargetCharacterSize_f "u",
- ffesymbol_text (s),
- (int) ffeinfo_rank (s->info),
- ffeinfo_basictype_string (ffeinfo_basictype (s->info)),
- ffeinfo_kindtype_string (ffeinfo_kindtype (s->info)),
- ffeinfo_size (s->info));
- else
- fprintf (dmpout, "%s:%d%s%s",
- ffesymbol_text (s),
- (int) ffeinfo_rank (s->info),
- ffeinfo_basictype_string (ffeinfo_basictype (s->info)),
- ffeinfo_kindtype_string (ffeinfo_kindtype (s->info)));
- if ((k = ffeinfo_kind (s->info)) != FFEINFO_kindNONE)
- fprintf (dmpout, "/%s", ffeinfo_kind_string (k));
- if ((w = ffeinfo_where (s->info)) != FFEINFO_whereNONE)
- fprintf (dmpout, "@%s", ffeinfo_where_string (w));
-
- if ((s->generic != FFEINTRIN_genNONE)
- || (s->specific != FFEINTRIN_specNONE)
- || (s->implementation != FFEINTRIN_impNONE))
- fprintf (dmpout, "{%s:%s:%s}",
- ffeintrin_name_generic (s->generic),
- ffeintrin_name_specific (s->specific),
- ffeintrin_name_implementation (s->implementation));
-}
-#endif
-
/* Produce generic error message about a symbol.
For now, just output error message using symbol's name and pointing to
@@ -1012,184 +967,6 @@ ffesymbol_reference (ffesymbol s, ffelexToken t, bool explicit)
ffesymbol_error (s, NULL);
}
-/* Report info on the symbol for debugging purposes. */
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-ffesymbol
-ffesymbol_report (ffesymbol s)
-{
- ffeinfoKind k;
- ffeinfoWhere w;
-
- assert (s != NULL);
-
- if (s->reported)
- return s;
-
- s->reported = TRUE;
-
- if (ffeinfo_size (s->info) != FFETARGET_charactersizeNONE)
- fprintf (dmpout, "\"%s\": %s %s %d%s%s*%" ffetargetCharacterSize_f "u",
- ffesymbol_text (s),
- ffesymbol_state_string (s->state),
- ffesymbol_attrs_string (s->attrs),
- (int) ffeinfo_rank (s->info),
- ffeinfo_basictype_string (ffeinfo_basictype (s->info)),
- ffeinfo_kindtype_string (ffeinfo_kindtype (s->info)),
- ffeinfo_size (s->info));
- else
- fprintf (dmpout, "\"%s\": %s %s %d%s%s",
- ffesymbol_text (s),
- ffesymbol_state_string (s->state),
- ffesymbol_attrs_string (s->attrs),
- (int) ffeinfo_rank (s->info),
- ffeinfo_basictype_string (ffeinfo_basictype (s->info)),
- ffeinfo_kindtype_string (ffeinfo_kindtype (s->info)));
- if ((k = ffeinfo_kind (s->info)) != FFEINFO_kindNONE)
- fprintf (dmpout, "/%s", ffeinfo_kind_string (k));
- if ((w = ffeinfo_where (s->info)) != FFEINFO_whereNONE)
- fprintf (dmpout, "@%s", ffeinfo_where_string (w));
- fputc ('\n', dmpout);
-
- if (s->dims != NULL)
- {
- fprintf (dmpout, " dims: ");
- ffebld_dump (s->dims);
- fputs ("\n", dmpout);
- }
-
- if (s->extents != NULL)
- {
- fprintf (dmpout, " extents: ");
- ffebld_dump (s->extents);
- fputs ("\n", dmpout);
- }
-
- if (s->dim_syms != NULL)
- {
- fprintf (dmpout, " dim syms: ");
- ffebld_dump (s->dim_syms);
- fputs ("\n", dmpout);
- }
-
- if (s->array_size != NULL)
- {
- fprintf (dmpout, " array size: ");
- ffebld_dump (s->array_size);
- fputs ("\n", dmpout);
- }
-
- if (s->init != NULL)
- {
- fprintf (dmpout, " init-value: ");
- if (ffebld_op (s->init) == FFEBLD_opANY)
- fputs ("<any>\n", dmpout);
- else
- {
- ffebld_dump (s->init);
- fputs ("\n", dmpout);
- }
- }
-
- if (s->accretion != NULL)
- {
- fprintf (dmpout, " accretion (%" ffetargetOffset_f "d left): ",
- s->accretes);
- ffebld_dump (s->accretion);
- fputs ("\n", dmpout);
- }
- else if (s->accretes != 0)
- fprintf (dmpout, " accretes!! = %" ffetargetOffset_f "d left\n",
- s->accretes);
-
- if (s->dummy_args != NULL)
- {
- fprintf (dmpout, " dummies: ");
- ffebld_dump (s->dummy_args);
- fputs ("\n", dmpout);
- }
-
- if (s->namelist != NULL)
- {
- fprintf (dmpout, " namelist: ");
- ffebld_dump (s->namelist);
- fputs ("\n", dmpout);
- }
-
- if (s->common_list != NULL)
- {
- fprintf (dmpout, " common-list: ");
- ffebld_dump (s->common_list);
- fputs ("\n", dmpout);
- }
-
- if (s->sfunc_expr != NULL)
- {
- fprintf (dmpout, " sfunc expression: ");
- ffebld_dump (s->sfunc_expr);
- fputs ("\n", dmpout);
- }
-
- if (s->is_save)
- {
- fprintf (dmpout, " SAVEd\n");
- }
-
- if (s->is_init)
- {
- fprintf (dmpout, " initialized\n");
- }
-
- if (s->do_iter)
- {
- fprintf (dmpout, " DO-loop iteration variable (currently)\n");
- }
-
- if (s->explicit_where)
- {
- fprintf (dmpout, " Explicit INTRINSIC/EXTERNAL\n");
- }
-
- if (s->namelisted)
- {
- fprintf (dmpout, " Namelisted\n");
- }
-
- if (s->common != NULL)
- {
- fprintf (dmpout, " COMMON area: %s\n", ffesymbol_text (s->common));
- }
-
- if (s->equiv != NULL)
- {
- fprintf (dmpout, " EQUIVALENCE information: ");
- ffeequiv_dump (s->equiv);
- fputs ("\n", dmpout);
- }
-
- if (s->storage != NULL)
- {
- fprintf (dmpout, " Storage: ");
- ffestorag_dump (s->storage);
- fputs ("\n", dmpout);
- }
-
- return s;
-}
-#endif
-
-/* Report info on the symbols. */
-
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-void
-ffesymbol_report_all ()
-{
- ffename_space_drive_symbol (ffesymbol_sfunc_, ffesymbol_report);
- ffename_space_drive_symbol (ffesymbol_local_, ffesymbol_report);
- ffename_space_drive_symbol (ffesymbol_global_, ffesymbol_report);
-}
-#endif
-
/* Resolve symbol that has become known intrinsic or non-intrinsic. */
void
diff --git a/contrib/gcc/f/symbol.h b/contrib/gcc/f/symbol.h
index 0c7262c..c9e582a 100644
--- a/contrib/gcc/f/symbol.h
+++ b/contrib/gcc/f/symbol.h
@@ -19,8 +19,8 @@ along with GNU Fortran; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA. */
-#ifndef _H_f_symbol
-#define _H_f_symbol
+#ifndef GCC_F_SYMBOL_H
+#define GCC_F_SYMBOL_H
/* The main symbol type. */
@@ -182,9 +182,6 @@ ffesymbol ffesymbol_declare_subrunit (ffelexToken t);
void ffesymbol_drive (ffesymbol (*fn) (ffesymbol));
void ffesymbol_drive_sfnames (ffesymbol (*fn) (ffesymbol));
#define ffesymbol_dummyargs(s) ((s)->dummy_args)
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-void ffesymbol_dump (ffesymbol s);
-#endif
void ffesymbol_error (ffesymbol s, ffelexToken t);
#define ffesymbol_equiv(s) ((s)->equiv)
#define ffesymbol_explicitwhere(s) ((s)->explicit_where)
@@ -223,10 +220,6 @@ ffesymbol ffesymbol_lookup_local (ffelexToken t);
#define ffesymbol_ptr_to_namelist(s) (&(s)->namelist)
#define ffesymbol_rank(s) ffeinfo_rank((s)->info)
void ffesymbol_reference (ffesymbol s, ffelexToken t, bool explicit);
-#if FFECOM_targetCURRENT == FFECOM_targetFFE
-ffesymbol ffesymbol_report (ffesymbol s);
-void ffesymbol_report_all (void);
-#endif
void ffesymbol_resolve_intrin (ffesymbol s);
void ffesymbol_retract (bool retract);
bool ffesymbol_retractable (void);
@@ -293,4 +286,4 @@ void ffesymbol_update_save (ffesymbol s);
#define ffesymbol_where_line(s) (((s)->name == NULL) ? ffewhere_line_unknown() \
: ffename_where_line((s)->name))
-#endif
+#endif /* ! GCC_F_SYMBOL_H */
diff --git a/contrib/gcc/f/target.c b/contrib/gcc/f/target.c
index 5712bdd..11fb0b1 100644
--- a/contrib/gcc/f/target.c
+++ b/contrib/gcc/f/target.c
@@ -1,5 +1,5 @@
/* target.c -- Implementation File (module.c template V1.0)
- Copyright (C) 1995-1998 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc.
Contributed by James Craig Burley.
This file is part of GNU Fortran.
@@ -69,7 +69,7 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* Include files. */
#include "proj.h"
-#include "glimits.j"
+#include "glimits.h"
#include "target.h"
#include "bad.h"
#include "info.h"
@@ -1447,12 +1447,8 @@ ffetarget_integerhex (ffetargetIntegerDefault *val, ffelexToken integer)
bad_digit = FALSE;
while (c != '\0')
{
- if ((c >= 'A') && (c <= 'F'))
- c = c - 'A' + 10;
- else if ((c >= 'a') && (c <= 'f'))
- c = c - 'a' + 10;
- else if ((c >= '0') && (c <= '9'))
- c -= '0';
+ if (hex_p (c))
+ c = hex_value (c);
else
{
bad_digit = TRUE;
@@ -2482,12 +2478,8 @@ ffetarget_typeless_hex (ffetargetTypeless *xvalue, ffelexToken token)
new_value <<= 4;
if ((new_value >> 4) != value)
overflow = TRUE;
- if (ISDIGIT (c))
- new_value += c - '0';
- else if ((c >= 'A') && (c <= 'F'))
- new_value += c - 'A' + 10;
- else if ((c >= 'a') && (c <= 'f'))
- new_value += c - 'a' + 10;
+ if (hex_p (c))
+ new_value += hex_value (c);
else
bad_digit = TRUE;
value = new_value;
diff --git a/contrib/gcc/f/target.h b/contrib/gcc/f/target.h
index 467f102..85b385d 100644
--- a/contrib/gcc/f/target.h
+++ b/contrib/gcc/f/target.h
@@ -27,14 +27,14 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* Allow multiple inclusion to work. */
-#ifndef _H_f_target
-#define _H_f_target
+#ifndef GCC_F_TARGET_H
+#define GCC_F_TARGET_H
#ifdef FFE_STANDALONE
#define HOST_WIDE_INT long
#else
#ifndef TREE_CODE
-#include "tree.j"
+#include "tree.h"
#endif
#endif
@@ -234,6 +234,10 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#define FFETARGET_f2cTYLOGICAL2 13
#define FFETARGET_f2cTYQUAD 14
+#if !defined(__alpha__) && (!defined (_ARCH_PPC) || !defined (__64BIT__)) && (!defined(__sparc__) || (!defined(__sparcv9) && !defined(__arch64__))) && (!defined(__ia64__) || !defined(__LP64__)) && (!defined(__hppa__) || !defined(__LP64__)) && !defined(__s390x__)
+#define FFETARGET_32bit_longs
+#endif
+
/* Typedefs. */
typedef unsigned char ffetargetAlign; /* ffetargetOffset for alignment. */
@@ -247,7 +251,7 @@ typedef long long ffetargetOffset;
#define ffetargetOffset_f "ll"
#if FFETARGET_okINTEGER1
-#ifndef __alpha__
+#ifdef FFETARGET_32bit_longs
typedef long int ffetargetInteger1;
#define ffetargetInteger1_f "l"
#else
@@ -288,7 +292,7 @@ typedef ? ffetargetInteger8;
?
#endif
#if FFETARGET_okLOGICAL1
-#ifndef __alpha__
+#ifdef FFETARGET_32bit_longs
typedef long int ffetargetLogical1;
#define ffetargetLogical1_f "l"
#else
@@ -330,7 +334,7 @@ typedef ? ffetargetLogical8;
#endif
#if FFETARGET_okREAL1
#ifdef REAL_ARITHMETIC
-#ifndef __alpha__
+#ifdef FFETARGET_32bit_longs
typedef long int ffetargetReal1;
#define ffetargetReal1_f "l"
#define ffetarget_cvt_r1_to_rv_ REAL_VALUE_UNTO_TARGET_SINGLE
@@ -354,7 +358,7 @@ typedef float ffetargetReal1;
#endif
#if FFETARGET_okREAL2
#ifdef REAL_ARITHMETIC
-#ifndef __alpha__
+#ifdef FFETARGET_32bit_longs
typedef struct
{
long int v[2];
@@ -856,13 +860,9 @@ void *ffetarget_memcpy_ (void *dst, void *src, size_t len);
/* Define macros. */
-#if BUILT_FOR_280
-#define FFETARGET_REAL_VALUE_FROM_INT_(resr, lf, kt) \
- REAL_VALUE_FROM_INT (resr, (long) lf, (long) ((lf < 0) ? -1 : 0), ((kt == 1) ? SFmode : DFmode))
-#else
-#define FFETARGET_REAL_VALUE_FROM_INT_(resr, lf, kt) \
- REAL_VALUE_FROM_INT (resr, (long) lf, (long) ((lf < 0) ? -1 : 0))
-#endif
+#define FFETARGET_REAL_VALUE_FROM_INT_(resr, lf, kt) \
+ REAL_VALUE_FROM_INT (resr, (long) lf, (long) ((lf < 0) ? -1 : 0), \
+ ((kt == 1) ? SFmode : DFmode))
#ifdef REAL_ARITHMETIC
#define ffetarget_add_complex1(res,l,r) \
@@ -1496,7 +1496,7 @@ void *ffetarget_memcpy_ (void *dst, void *src, size_t len);
#define ffetarget_init_2()
#define ffetarget_init_3()
#define ffetarget_init_4()
-#ifndef __alpha__
+#ifdef FFETARGET_32bit_longs
#define ffetarget_integerdefault_is_magical(i) \
(((unsigned long int) i) == FFETARGET_integerBIG_MAGICAL)
#else
@@ -1888,4 +1888,4 @@ void *ffetarget_memcpy_ (void *dst, void *src, size_t len);
/* End of #include file. */
-#endif
+#endif /* ! GCC_F_TARGET_H */
diff --git a/contrib/gcc/f/top.c b/contrib/gcc/f/top.c
index 07ddd83..774f29f 100644
--- a/contrib/gcc/f/top.c
+++ b/contrib/gcc/f/top.c
@@ -1,5 +1,5 @@
/* top.c -- Implementation File (module.c template V1.0)
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1996, 1997, 1999, 2001 Free Software Foundation, Inc.
Contributed by James Craig Burley.
This file is part of GNU Fortran.
@@ -53,10 +53,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "symbol.h"
#include "target.h"
#include "where.h"
-#if FFECOM_targetCURRENT == FFECOM_targetGCC
-#include "flags.j"
-#include "toplev.j"
-#endif
+#include "flags.h"
+#include "toplev.h"
/* Externals defined here. */
@@ -80,10 +78,8 @@ bool ffe_is_globals_ = TRUE;
bool ffe_is_init_local_zero_ = FFETARGET_defaultIS_INIT_LOCAL_ZERO;
bool ffe_is_mainprog_; /* TRUE if current prog unit known to be
main. */
-bool ffe_is_null_version_ = FALSE;
bool ffe_is_onetrip_ = FALSE;
bool ffe_is_silent_ = TRUE;
-bool ffe_is_subscript_check_ = FALSE;
bool ffe_is_typeless_boz_ = FALSE;
bool ffe_is_pedantic_ = FFETARGET_defaultIS_PEDANTIC;
bool ffe_is_saveall_; /* TRUE if mainprog or SAVE (no args) seen. */
@@ -176,8 +172,6 @@ ffe_decode_option (argc, argv)
ffe_set_is_version (TRUE);
ffe_set_is_do_internal_checks (TRUE);
}
- else if (strcmp (&opt[2], "null-version") == 0)
- ffe_set_is_null_version (TRUE);
else if (strcmp (&opt[2], "f66") == 0)
{
ffe_set_is_onetrip (TRUE);
@@ -226,7 +220,10 @@ ffe_decode_option (argc, argv)
else if (strcmp (&opt[2], "no-free-form") == 0)
ffe_set_is_free_form (FALSE);
else if (strcmp (&opt[2], "fixed-form") == 0)
- ffe_set_is_free_form (FALSE);
+ {
+ ffe_set_is_free_form (FALSE);
+ return -1;
+ }
else if (strcmp (&opt[2], "no-fixed-form") == 0)
ffe_set_is_free_form (TRUE);
else if (strcmp (&opt[2], "pedantic") == 0)
@@ -308,9 +305,9 @@ ffe_decode_option (argc, argv)
else if (strcmp (&opt[2], "no-zeros") == 0)
ffe_set_is_zeros (FALSE);
else if (strcmp (&opt[2], "debug-kludge") == 0)
- ffe_set_is_debug_kludge (TRUE);
+ warning ("%s disabled, use normal debugging flags", opt);
else if (strcmp (&opt[2], "no-debug-kludge") == 0)
- ffe_set_is_debug_kludge (FALSE);
+ warning ("%s disabled, use normal debugging flags", opt);
else if (strcmp (&opt[2], "onetrip") == 0)
ffe_set_is_onetrip (TRUE);
else if (strcmp (&opt[2], "no-onetrip") == 0)
@@ -323,14 +320,10 @@ ffe_decode_option (argc, argv)
ffe_set_is_globals (TRUE);
else if (strcmp (&opt[2], "no-globals") == 0)
ffe_set_is_globals (FALSE);
- else if (strcmp (&opt[2], "bounds-check") == 0)
- ffe_set_is_subscript_check (TRUE);
- else if (strcmp (&opt[2], "no-bounds-check") == 0)
- ffe_set_is_subscript_check (FALSE);
else if (strcmp (&opt[2], "fortran-bounds-check") == 0)
- ffe_set_is_subscript_check (TRUE);
+ flag_bounds_check = TRUE;
else if (strcmp (&opt[2], "no-fortran-bounds-check") == 0)
- ffe_set_is_subscript_check (FALSE);
+ flag_bounds_check = FALSE;
else if (strcmp (&opt[2], "typeless-boz") == 0)
ffe_set_is_typeless_boz (TRUE);
else if (strcmp (&opt[2], "no-typeless-boz") == 0)
@@ -469,9 +462,15 @@ ffe_decode_option (argc, argv)
char *len = &opt[2] + strlen ("fixed-line-length-");
if (strcmp (len, "none") == 0)
- ffe_set_fixed_line_length (0);
+ {
+ ffe_set_fixed_line_length (0);
+ return -1;
+ }
else if (ffe_is_digit_string_ (len))
- ffe_set_fixed_line_length (atol (len));
+ {
+ ffe_set_fixed_line_length (atol (len));
+ return -1;
+ }
else
return 0;
}
@@ -515,7 +514,7 @@ ffe_decode_option (argc, argv)
warning about not using it without also specifying -O. */
if (warn_uninitialized != 1)
warn_uninitialized = 2;
- warn_unused = 1;
+ set_Wunused (1);
}
else
return 0;
diff --git a/contrib/gcc/f/top.h b/contrib/gcc/f/top.h
index c5deea8..3159b51 100644
--- a/contrib/gcc/f/top.h
+++ b/contrib/gcc/f/top.h
@@ -1,5 +1,5 @@
/* top.h -- Public #include File (module.h template V1.0)
- Copyright (C) 1995-1997 Free Software Foundation, Inc.
+ Copyright (C) 1995, 1996, 1997, 1999 Free Software Foundation, Inc.
Contributed by James Craig Burley.
This file is part of GNU Fortran.
@@ -27,8 +27,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* Allow multiple inclusion to work. */
-#ifndef _H_f_parse
-#define _H_f_parse
+#ifndef GCC_F_TOP_H
+#define GCC_F_TOP_H
/* Simple definitions and enumerations. */
@@ -95,10 +95,8 @@ extern bool ffe_is_free_form_;
extern bool ffe_is_globals_;
extern bool ffe_is_init_local_zero_;
extern bool ffe_is_mainprog_;
-extern bool ffe_is_null_version_;
extern bool ffe_is_onetrip_;
extern bool ffe_is_silent_;
-extern bool ffe_is_subscript_check_;
extern bool ffe_is_typeless_boz_;
extern bool ffe_is_pedantic_;
extern bool ffe_is_saveall_;
@@ -184,14 +182,12 @@ void ffe_terminate_4 (void);
#define ffe_is_globals() ffe_is_globals_
#define ffe_is_init_local_zero() ffe_is_init_local_zero_
#define ffe_is_mainprog() ffe_is_mainprog_
-#define ffe_is_null_version() ffe_is_null_version_
#define ffe_is_onetrip() ffe_is_onetrip_
#define ffe_is_pedantic() ffe_is_pedantic_
#define ffe_is_pedantic_not_90() (ffe_is_pedantic_ && !ffe_is_90_)
#define ffe_is_saveall() ffe_is_saveall_
#define ffe_is_second_underscore() ffe_is_second_underscore_
#define ffe_is_silent() ffe_is_silent_
-#define ffe_is_subscript_check() ffe_is_subscript_check_
#define ffe_is_typeless_boz() ffe_is_typeless_boz_
#define ffe_is_ugly_args() ffe_is_ugly_args_
#define ffe_is_ugly_assign() ffe_is_ugly_assign_
@@ -237,13 +233,11 @@ void ffe_terminate_4 (void);
#define ffe_set_is_globals(f) (ffe_is_globals_ = (f))
#define ffe_set_is_init_local_zero(f) (ffe_is_init_local_zero_ = (f))
#define ffe_set_is_mainprog(f) (ffe_is_mainprog_ = (f))
-#define ffe_set_is_null_version(f) (ffe_is_null_version_ = (f))
#define ffe_set_is_onetrip(f) (ffe_is_onetrip_ = (f))
#define ffe_set_is_pedantic(f) (ffe_is_pedantic_ = (f))
#define ffe_set_is_saveall(f) (ffe_is_saveall_ = (f))
#define ffe_set_is_second_underscore(f) (ffe_is_second_underscore_ = (f))
#define ffe_set_is_silent(f) (ffe_is_silent_ = (f))
-#define ffe_set_is_subscript_check(f) (ffe_is_subscript_check_ = (f))
#define ffe_set_is_typeless_boz(f) (ffe_is_typeless_boz_ = (f))
#define ffe_set_is_ugly_args(f) (ffe_is_ugly_args_ = (f))
#define ffe_set_is_ugly_assign(f) (ffe_is_ugly_assign_ = (f))
@@ -264,4 +258,4 @@ void ffe_terminate_4 (void);
/* End of #include file. */
-#endif
+#endif /* ! GCC_F_TOP_H */
diff --git a/contrib/gcc/f/type.h b/contrib/gcc/f/type.h
index aaae51e..9e3bd80 100644
--- a/contrib/gcc/f/type.h
+++ b/contrib/gcc/f/type.h
@@ -19,8 +19,8 @@ along with GNU Fortran; see the file COPYING. If not, write to
the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
02111-1307, USA. */
-#ifndef _H_f_type
-#define _H_f_type
+#ifndef GCC_F_TYPE_H
+#define GCC_F_TYPE_H
typedef struct _ffetype_ *ffetype;
typedef struct _ffetype_indexes_ *ffetype_indexes_;
@@ -61,4 +61,4 @@ void ffetype_set_star (ffetype base_type, int star, ffetype type);
#define ffetype_terminate_3()
#define ffetype_terminate_4()
-#endif
+#endif /* ! GCC_F_TYPE_H */
diff --git a/contrib/gcc/f/version.c b/contrib/gcc/f/version.c
index 4b695cd..12c8e84 100644
--- a/contrib/gcc/f/version.c
+++ b/contrib/gcc/f/version.c
@@ -1 +1,4 @@
-const char *ffe_version_string = "0.5.25 20010315 (release)";
+#include "ansidecl.h"
+#include "f/version.h"
+
+const char *const ffe_version_string = "0.5.27 20020201 (experimental)";
diff --git a/contrib/gcc/f/version.h b/contrib/gcc/f/version.h
index 62f941d..fe77551 100644
--- a/contrib/gcc/f/version.h
+++ b/contrib/gcc/f/version.h
@@ -1,6 +1,6 @@
-#ifndef _H_f_version
-#define _H_f_version
+#ifndef GCC_F_VERSION_H
+#define GCC_F_VERSION_H
-extern const char *ffe_version_string;
+extern const char *const ffe_version_string;
-#endif
+#endif /* ! GCC_F_VERSION_H */
diff --git a/contrib/gcc/f/where.c b/contrib/gcc/f/where.c
index 2792899..9f85354 100644
--- a/contrib/gcc/f/where.c
+++ b/contrib/gcc/f/where.c
@@ -33,6 +33,7 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
#include "where.h"
#include "lex.h"
#include "malloc.h"
+#include "ggc.h"
/* Externals defined here. */
@@ -108,6 +109,32 @@ ffewhere_ll_lookup_ (ffewhereLineNumber ln)
return NULL;
}
+/* A somewhat evil way to prevent the garbage collector
+ from collecting 'file' structures. */
+#define NUM_FFEWHERE_HEAD_FILES 31
+static struct ffewhere_ggc_tracker
+{
+ struct ffewhere_ggc_tracker *next;
+ ffewhereFile files[NUM_FFEWHERE_HEAD_FILES];
+} *ffewhere_head = NULL;
+
+static void
+mark_ffewhere_head (void *arg)
+{
+ struct ffewhere_ggc_tracker *head;
+ int i;
+
+ for (head = * (struct ffewhere_ggc_tracker **) arg;
+ head != NULL;
+ head = head->next)
+ {
+ ggc_mark (head);
+ for (i = 0; i < NUM_FFEWHERE_HEAD_FILES; i++)
+ ggc_mark (head->files[i]);
+ }
+}
+
+
/* Kill file object.
Note that this object must not have been passed in a call
@@ -117,25 +144,62 @@ ffewhere_ll_lookup_ (ffewhereLineNumber ln)
void
ffewhere_file_kill (ffewhereFile wf)
{
- malloc_kill_ks (ffe_pool_file (), wf,
- offsetof (struct _ffewhere_file_, text)
- + wf->length + 1);
+ struct ffewhere_ggc_tracker *head;
+ int i;
+
+ for (head = ffewhere_head; head != NULL; head = head->next)
+ for (i = 0; i < NUM_FFEWHERE_HEAD_FILES; i++)
+ if (head->files[i] == wf)
+ {
+ head->files[i] = NULL;
+ return;
+ }
+ /* Called on a file that has already been deallocated... */
+ abort();
}
/* Create file object. */
ffewhereFile
-ffewhere_file_new (char *name, size_t length)
+ffewhere_file_new (const char *name, size_t length)
{
ffewhereFile wf;
-
- wf = malloc_new_ks (ffe_pool_file (), "ffewhereFile",
- offsetof (struct _ffewhere_file_, text)
- + length + 1);
+ int filepos;
+
+ wf = ggc_alloc (offsetof (struct _ffewhere_file_, text)
+ + length + 1);
wf->length = length;
memcpy (&wf->text[0], name, length);
wf->text[length] = '\0';
+ if (ffewhere_head == NULL)
+ {
+ ggc_add_root (&ffewhere_head, 1, sizeof ffewhere_head,
+ mark_ffewhere_head);
+ filepos = NUM_FFEWHERE_HEAD_FILES;
+ }
+ else
+ {
+ for (filepos = 0; filepos < NUM_FFEWHERE_HEAD_FILES; filepos++)
+ if (ffewhere_head->files[filepos] == NULL)
+ {
+ ffewhere_head->files[filepos] = wf;
+ break;
+ }
+ }
+ if (filepos == NUM_FFEWHERE_HEAD_FILES)
+ {
+ /* Need to allocate a new block. */
+ struct ffewhere_ggc_tracker *old_head = ffewhere_head;
+ int i;
+
+ ffewhere_head = ggc_alloc (sizeof (*ffewhere_head));
+ ffewhere_head->next = old_head;
+ ffewhere_head->files[0] = wf;
+ for (i = 1; i < NUM_FFEWHERE_HEAD_FILES; i++)
+ ffewhere_head->files[i] = NULL;
+ }
+
return wf;
}
diff --git a/contrib/gcc/f/where.h b/contrib/gcc/f/where.h
index 32b3d4b..a3adb4b 100644
--- a/contrib/gcc/f/where.h
+++ b/contrib/gcc/f/where.h
@@ -27,8 +27,8 @@ the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA
/* Allow multiple inclusion to work. */
-#ifndef _H_f_where
-#define _H_f_where
+#ifndef GCC_F_WHERE_H
+#define GCC_F_WHERE_H
/* Simple definitions and enumerations. */
@@ -61,7 +61,7 @@ typedef unsigned int ffewhereUses_;
/* Include files needed by this one. */
-#include "glimits.j"
+#include "glimits.h"
#include "top.h"
/* Structure definitions. */
@@ -89,7 +89,7 @@ extern struct _ffewhere_line_ ffewhere_unknown_line_;
/* Declare functions with prototypes. */
void ffewhere_file_kill (ffewhereFile wf);
-ffewhereFile ffewhere_file_new (char *name, size_t length);
+ffewhereFile ffewhere_file_new (const char *name, size_t length);
void ffewhere_file_set (ffewhereFile wf, bool have_num, ffewhereLineNumber ln);
void ffewhere_init_1 (void);
char *ffewhere_line_content (ffewhereLine l);
@@ -135,4 +135,4 @@ void ffewhere_track_kill (ffewhereLine wrl, ffewhereColumn wrc, ffewhereTrack wt
/* End of #include file. */
-#endif
+#endif /* ! GCC_F_EHERE_H */
OpenPOWER on IntegriCloud