diff -Nrc3pad gcc-3.0.4/gcc/f/.cvsignore gcc-3.1/gcc/f/.cvsignore *** gcc-3.0.4/gcc/f/.cvsignore Sat Dec 9 10:22:30 2000 --- gcc-3.1/gcc/f/.cvsignore Mon Nov 19 22:56:50 2001 *************** *** 1 **** --- 1,2 ---- g77.info* + g77.1 diff -Nrc3pad gcc-3.0.4/gcc/f/BUGS gcc-3.1/gcc/f/BUGS *** gcc-3.0.4/gcc/f/BUGS Wed Feb 20 20:24:01 2002 --- gcc-3.1/gcc/f/BUGS Wed May 15 03:48:01 2002 *************** _Note:_ This file is automatically gener *** 2,9 **** `bugs0.texi' and `bugs.texi'. `BUGS' is _not_ a source file, although it is normally included within source distributions. ! This file lists known bugs in the GCC-3.0 version of the GNU Fortran ! compiler. Copyright (C) 1995,1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc. You may copy, distribute, and modify it freely as long as you preserve this copyright notice and permission notice. --- 2,9 ---- `bugs0.texi' and `bugs.texi'. `BUGS' is _not_ a source file, although it is normally included within source distributions. ! This file lists known bugs in the GCC-3.1 version of the GNU Fortran ! compiler. Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 Free Software Foundation, Inc. You may copy, distribute, and modify it freely as long as you preserve this copyright notice and permission notice. *************** Known Bugs In GNU Fortran *** 12,18 **** ************************* This section identifies bugs that `g77' _users_ might run into in ! the GCC-3.0 version of `g77'. This includes bugs that are actually in the `gcc' back end (GBE) or in `libf2c', because those sets of code are at least somewhat under the control of (and necessarily intertwined with) `g77', so it isn't worth separating them out. --- 12,18 ---- ************************* This section identifies bugs that `g77' _users_ might run into in ! the GCC-3.1 version of `g77'. This includes bugs that are actually in the `gcc' back end (GBE) or in `libf2c', because those sets of code are at least somewhat under the control of (and necessarily intertwined with) `g77', so it isn't worth separating them out. *************** the mainline, development version of `g7 *** 26,32 **** via `http://www.gnu.org/software/gcc/onlinedocs/g77_bugs.html'. Follow the "Known Bugs" link. ! The following information was last updated on 2001-06-10: * `g77' fails to warn about use of a "live" iterative-DO variable as an implied-DO variable in a `WRITE' or `PRINT' statement (although --- 26,32 ---- via `http://www.gnu.org/software/gcc/onlinedocs/g77_bugs.html'. Follow the "Known Bugs" link. ! The following information was last updated on 2002-02-01: * `g77' fails to warn about use of a "live" iterative-DO variable as an implied-DO variable in a `WRITE' or `PRINT' statement (although *************** the "Known Bugs" link. *** 52,67 **** Included with this item is the fact that `g77' doesn't recognize that, on IEEE-754/854-compliant systems, `0./0.' should produce a ! NaN and no warning instead of the value `0.' and a warning. This ! is to be fixed in version 0.6, when `g77' will use the `gcc' back ! end's constant-handling mechanisms to replace its own. * `g77' uses way too much memory and CPU time to process large aggregate areas having any initialized elements. For example, `REAL A(1000000)' followed by `DATA A(1)/1/' takes up way too much time and space, including the size of the generated ! assembler file. This is to be mitigated somewhat in version 0.6. Version 0.5.18 improves cases like this--specifically, cases of _sparse_ initialization that leave large, contiguous areas --- 52,65 ---- Included with this item is the fact that `g77' doesn't recognize that, on IEEE-754/854-compliant systems, `0./0.' should produce a ! NaN and no warning instead of the value `0.' and a warning. * `g77' uses way too much memory and CPU time to process large aggregate areas having any initialized elements. For example, `REAL A(1000000)' followed by `DATA A(1)/1/' takes up way too much time and space, including the size of the generated ! assembler file. Version 0.5.18 improves cases like this--specifically, cases of _sparse_ initialization that leave large, contiguous areas *************** the "Known Bugs" link. *** 78,92 **** Note that `g77' does display a warning message to notify the user before the compiler appears to hang. - * Previous versions of `g77' didn't emit information on variable and - array members of common blocks and equivalences for use with a - debugger (the `-g' command-line option). As of the version of - `g77' shipped with version 3.0 of `GCC', this is corrected. - - 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. - * When debugging, after starting up the debugger but before being able to see the source code for the main program unit, the user must currently set a breakpoint at `MAIN__' (or `MAIN___' or --- 76,81 ---- *************** the "Known Bugs" link. *** 114,122 **** * `g77' doesn't work perfectly on 64-bit configurations such as the Digital Semiconductor ("DEC") Alpha. ! This problem is largely resolved as of version 0.5.23. Version ! 0.6 should solve most or all remaining problems (such as ! cross-compiling involving 64-bit machines). * `g77' currently inserts needless padding for things like `COMMON A,IPAD' where `A' is `CHARACTER*1' and `IPAD' is `INTEGER(KIND=1)' --- 103,109 ---- * `g77' doesn't work perfectly on 64-bit configurations such as the Digital Semiconductor ("DEC") Alpha. ! This problem is largely resolved as of version 0.5.23. * `g77' currently inserts needless padding for things like `COMMON A,IPAD' where `A' is `CHARACTER*1' and `IPAD' is `INTEGER(KIND=1)' diff -Nrc3pad gcc-3.0.4/gcc/f/ChangeLog gcc-3.1/gcc/f/ChangeLog *** gcc-3.0.4/gcc/f/ChangeLog Wed Feb 20 18:41:51 2002 --- gcc-3.1/gcc/f/ChangeLog Wed May 15 02:19:40 2002 *************** *** 1,60 **** ! 2002-02-20 Release Manager ! * GCC 3.0.4 Released. ! 2002-02-20 Release Manager ! * GCC 3.0.4 Released. ! 2002-02-02 Richard Henderson * ste.c (ffeste_begin_iterdo_): Use expand_exit_loop_top_cond. (ffeste_R819B): Likewise. ! 2001-12-20 Release Manager ! * GCC 3.0.3 Released. ! 2001-11-25 Toon Moene PR fortran/3957 * lang-specs.h: Correct !pipe conditional in tradcpp0 invocation. ! 2001-11-15 Craig Prescott ! * target.h (FFETARGET_32bit_longs): Don't define ! for 64-bit hppa. 2001-11-14 Joseph S. Myers * Make-lang.in: Change all uses of $(manext) to $(man1ext). ! 2001-10-23 Release Manager ! * GCC 3.0.2 Released. 2001-10-23 Joseph S. Myers * g77.texi (Sending Patches): Remove. ! 2001-08-19 Release Manager ! * GCC 3.0.1 Released. ! 2001-08-19 Release Manager ! * GCC 3.0.1 Released. 2000-08-14 Ulrich Weigand ! * target.h (FFETARGET_32bit_longs): Don't define ! for 64-bit S/390. 2001-07-19 Jakub Jelinek * top.c (ffe_decode_option): Disallow lang-independent processing for -ffixed-form. 2001-07-04 Joseph S. Myers * g77.texi: Use gpl.texi and funding.texi. Remove Look and Feel --- 1,555 ---- ! 2002-05-14 Release Manager ! * GCC 3.1 Released. ! 2002-05-14 Release Manager ! * GCC 3.1 Released. ! 2002-04-29 Joseph S. Myers ! ! * invoke.texi: Use @gol at ends of lines inside @gccoptlist. ! * g77.texi: Update last update date. ! ! 2002-04-20 Toon Moene ! ! * root.texi: Remove variable version-g77. ! * g77.texi: Remove the single use of that variable. ! ! Tue Apr 16 14:55:47 2002 Mark Mitchell ! ! * com.c (ffecom_expr_power_integer): Add has_scope argument to ! call to expand_start_stmt_expr. ! ! Mon Apr 15 10:59:14 2002 Mark Mitchell ! ! * g77.texi: Remove Chill reference. ! ! 2002-04-14 Hans-Peter Nilsson ! ! * Make-lang.in (f/target.o): Depend on diagnostic.h. ! * target.c: Include diagnostic.h. ! (ffetarget_memcpy_): Call sorry if host and target endians are ! not matching. ! ! 2002-04-13 Toon Moene ! ! * news.texi: Deprecate frontend version number; ! update list of fixed bugs. ! ! 2002-04-01 Phil Edwards ! ! * version.c: Fix misplaced leading blanks on first line. ! ! 2002-03-23 Toon Moene ! ! * com.c (ffecom_check_size_overflow_): Add a test ! so that arrays too large for 32-bit byte-offset ! addressing get caught. ! * news.texi: Document the fixing of this problem. ! ! Mon Mar 18 18:43:22 CET 2002 Jan Hubicka ! ! * target.h (FFETARGET_32bit_longs): Undefine for x86-64. ! ! 2002-02-13 Toon Moene ! ! * news.texi: List Problem Reports fixed in 3.1. ! ! 2002-02-13 Toon Moene ! ! * data.c (ffedata_eval_offset_): Only convert index, ! low and high bound in data statements to default integer ! if they are constants. Use a copy of the data structure. ! ! 2002-02-09 Toon Moene ! ! * data.c (ffedata_eval_offset_): Convert non-default integer ! constants to default integer kind if necessary. ! ! 2002-02-09 Toon Moene ! ! * invoke.texi: Add a short debugging session ! as an example to the documentation of -g. ! ! 2002-02-06 Toon Moene ! ! PR fortran/4730 fortran/5473 ! * com.c (ffecom_expr_): Deal with %VAL constructs. ! * intrin.c (ffeintrin_check_): Handle 'N' constraints for intrinsics, ! to indicate "no larger than default kind" integers and logicals. ! * intrin.def: Use 'N' constraints in table of intrinsics. ! * intdoc.c: Document this constraint. ! * intdoc.texi: Regenerated. ! ! 2002-02-04 Philipp Thomas ! ! * implic.c lex.c stb.c ste.c stu.c: Update copyright dates. ! ! 2002-02-04 Philipp Thomas ! ! * bad.def com.c expr.c implic.c lex.c stb.c ste.c stu.c: ! Insert comments to mark messages as not being printf style ! where appropriate. ! ! 2002-02-03 Toon Moene ! ! * expr.c (ffeexpr_sym_impdoitem_): Allow other than ! default INTEGER implied-do loop counts. ! ! 2002-02-01 Toon Moene ! ! * bad.def: Remove non-historical reference to version 0.6. ! * bugs.texi: Ditto. ! * com.c: Ditto. ! * ffe.texi: Ditto. ! * proj.h: Ditto. ! * g77.texi: Ditto. ! ! 2002-01-31 Joseph S. Myers ! ! * g77spec.c (lang_specific_driver): Follow GNU Coding Standards ! for --version. ! ! 2002-01-30 Richard Henderson * ste.c (ffeste_begin_iterdo_): Use expand_exit_loop_top_cond. (ffeste_R819B): Likewise. ! 2002-01-30 Toon Moene ! * intrin.c (upcasecmp_): New function. ! (ffeintrin_cmp_name_): Use it to correctly compare name ! and table entry for bsearch. ! 2002-01-26 Toon Moene ! ! * intrin.c (ffeintrin_cmp_name_): Correct comparison ! for intrinsics in intrinsic table (intrin.def). ! ! 2002-01-22 Zack Weinberg ! ! * 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 ! ! 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 ! ! * g77spec.c (lookup_option): Handle -fversion. ! (lang_specific_driver): Update copyright date in --version output. ! ! Mon Jan 7 00:03:42 2002 Gerald Pfeifer ! ! * 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 ! ! * 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 ! ! * 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 ! ! * bld.c (ffebld_arity_op_): Declare array size explicitly. ! * bld.h (ffebld_arity_op_): Likewise. ! ! 2001-12-20 Joseph S. Myers ! ! * config-lang.in (diff_excludes): Remove. ! ! 2001-12-17 Joseph S. Myers ! ! * g77.texi, invoke.texi: Update links to GCC manual. ! ! Sun Dec 16 16:08:57 2001 Joseph S. Myers ! ! * news.texi: Fix spelling errors. ! ! Sun Dec 16 10:36:51 2001 Kaveh R. Ghazi ! ! * 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 ! ! * 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 ! ! * 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 ! ! * g77.texi: Don't condition menus on @ifinfo. ! ! Wed Dec 5 06:49:21 2001 Richard Kenner ! ! * com.c (ffecom_1): Properly handle TREE_READONLY for INDIRECT_REF. ! ! Mon Dec 3 18:56:04 2001 Neil Booth ! ! * com.c: Remove leading capital from diagnostic messages, as ! per GNU coding standards. ! * g77spec.c: Similarly. ! * lex.c: Similarly. ! ! 2001-12-01 Zack Weinberg ! ! * f/fini.c: Use xmalloc. ! ! Fri Nov 30 20:54:02 2001 Kaveh R. Ghazi ! ! * Make-lang.in: Delete references to proj.[co], proj-h.[co]. ! * proj.c: Delete file. ! ! 2001-11-29 Zack Weinberg ! ! * 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 ! ! * 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 PR fortran/3957 * lang-specs.h: Correct !pipe conditional in tradcpp0 invocation. ! 2001-11-21 Toon Moene ! * 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 ! ! * Make-lang.in: Complete ``Build g77.1 in $(srcdir)''. ! ! 2001-11-19 Geoffrey Keating ! ! * 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 ! ! * .cvsignore: Ignore g77.1 ! * g77.texi: Substitute `@command' for `@code' ! where appropriate. ! * invoke.texi: Ditto. ! ! 2001-11-18 Toon Moene ! ! * 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 ! ! * com.c (finish_parse): Remove. ! (ffe_finish): Move body of finish_parse. ! ! Thu Nov 15 10:06:38 2001 Neil Booth ! ! * 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 ! ! * g77.texi: Update to use `@command', `@option. ! * invoke.texi: Ditto 2001-11-14 Joseph S. Myers * Make-lang.in: Change all uses of $(manext) to $(man1ext). ! 2001-11-14 Toon Moene ! * 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 ! ! * 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 ! ! * 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 ! ! * com.c (language_string, lang_identify): Remove. ! (struct lang_hooks): Constify. ! (LANG_HOOKS_NAME): Override. ! (init_parse): Update. ! ! 2001-11-08 Andreas Franck ! ! * Make-lang.in (G77_INSTALL_NAME, G77_CROSS_NAME): Handle ! program_transform_name the way suggested by autoconf. ! ! 2001-11-08 Toon Moene ! ! * 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 ! ! * com.c: Include langhooks-def.h. ! * Make-lang.in: Update. ! ! 2001-11-04 Toon Moene ! ! * 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 ! ! * 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 ! ! * news.texi: Document new ability to compile programs with ! arrays larger than 512 Mbyte on 32-bit targets. ! ! 2001-10-24 Toon Moene ! ! * com.c (ffecom_check_size_overflow_): Only check for TREE_OVERFLOW. ! ! Tue Oct 23 14:01:27 2001 Richard Kenner ! ! * com.c (LANG_HOOKS_GET_ALIAS_SET): New macro. ! (lang_get_alias_set): Delete. 2001-10-23 Joseph S. Myers * g77.texi (Sending Patches): Remove. ! 2001-10-22 Zack Weinberg ! * Make-lang.in (f/intdoc): Depend on safe-ctype.o. ! Sun Oct 21 17:28:17 2001 Kaveh R. Ghazi ! * 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 ! ! * target.h (FFETARGET_32bit_longs): Don't define ! for 64-bit hppa. ! ! 2001-10-17 Richard Henderson ! ! * std.c (ffestd_labeldef_format): Fix variable/stmt ordering. ! (ffestd_R737A): Likewise. ! ! 2001-10-17 Richard Henderson ! ! * 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 ! ! * 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 ! ! * 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 ! ! * 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 ! ! * Make-lang.in: Remove reference to FORTRAN_INIT. ! * g77spec.c: Add reference to FORTRAN_INIT. ! ! 2001-09-29 Juergen Pfeifer ! ! 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 ! ! * expr.c (ffeexpr_sym_rhs_dimlist_): Allow array elements ! as bounds of adjustable arrays. ! ! Thu Sep 20 15:05:20 JST 2001 George Helffrich ! ! * 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 ! ! * 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 ! ! * 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 ! ! * parse.c (finput): Mark extern. ! ! 2001-09-11 Jakub Jelinek ! ! * com.c (ffe_init_options): Default to -fmerge-all-constants ! if optimizing. 2000-08-14 Ulrich Weigand ! * target.h (FFETARGET_32bit_longs): Don't define ! for 64-bit S/390. ! ! 2001-07-20 Toon Moene ! ! * 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 * top.c (ffe_decode_option): Disallow lang-independent processing for -ffixed-form. + 2001-07-19 Toon Moene + + * 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 + + * com.c (lang_print_error_function): Argument context + is unused. + + 2001-07-14 Tim Josling + + * com.c (ffecom_overlap_): Remove references to EXPON_EXPR. + (ffecom_tree_canonize_ref_): Likewise. + + 2001-07-10 James Smaby + + * intdoc.in: Fix the definition of COMPLEX ABS. + Remove `the' where inappropriate. + * intdoc.texi: Rebuilt. + 2001-07-04 Joseph S. Myers * g77.texi: Use gpl.texi and funding.texi. Remove Look and Feel *************** *** 62,70 **** * Make-lang.in ($(srcdir)/f/g77.info, f/g77.dvi): Update dependencies and use doc/include in search path. ! 20010617 Release Manager ! * GCC 3.0 Released. Wed Jun 13 11:22:39 2001 Mark Mitchell --- 557,567 ---- * 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 ! * 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 *************** Wed Jun 13 11:22:39 2001 Mark Mitchell *** 73,92 **** 2001-06-10 Toon Moene ! * g77install.texi: Remove all documentation here. Point ! to the GCC installation procedures. * g77.texi: Add documentation on how to get output always flushed and how to increase the maximum unit number. * bugs.texi: Add documentation on how to change the threshold for putting local arrays on the stack. - 2001-06-07 Theodore Papadopoulo - - * 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-06-03 Toon Moene * root.texi: Fix typo in patches e-mail address. --- 570,583 ---- 2001-06-10 Toon Moene ! * 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 * root.texi: Fix typo in patches e-mail address. *************** Wed Jun 13 11:22:39 2001 Mark Mitchell *** 109,125 **** * com.c (ffecom_init_0): Make CHARACTER*1 unsigned. 2001-05-22 Toon Moene * g77.texi: Update last-changed date. * news.texi: Update copyright years, last-changed date. 2001-05-22 Toon Moene * g77.texi: Update maintenance information for ! GNU Fortran. * news.texi: Make more news in 0.5.26 `user visible changes'. Acknowledge work by important contributors. 2001-05-20 Joseph S. Myers --- 600,635 ---- * com.c (ffecom_init_0): Make CHARACTER*1 unsigned. + 2001-05-23 Theodore Papadopoulo + + * 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 + + * 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 * 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 * 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 *************** Sun May 13 12:25:06 2001 Mark Mitchell *** 135,149 **** * Make-lang.in: Replace all uses of `touch' with $(STAMP). 2001-04-21 Toon Moene ! * news.texi: Update release information for 0.5.26. Thu Apr 19 12:49:24 2001 Mark Mitchell * top.c (ffe_decode_option): Do not permit language-independent processing for -ffixed-line-length. 2001-04-02 Jakub Jelinek * lex.c (ffelex_hash_): Avoid eating one whole line after --- 645,676 ---- * Make-lang.in: Replace all uses of `touch' with $(STAMP). + Wed May 2 10:20:08 2001 Kaveh R. Ghazi + + * com.c: NULL_PTR -> NULL. + + Sun Apr 22 20:18:01 2001 Kaveh R. Ghazi + + * com.c (ffecom_subscript_check_): Use concat in lieu of + xmalloc/sprintf. + 2001-04-21 Toon Moene ! * news.texi: Update release information for 0.5.27. Thu Apr 19 12:49:24 2001 Mark Mitchell * 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 + + * bad.c (inhibit_warnings): Delete redundant declaration. + + * com.c (skip_redundant_dir_prefix): Likewise. + + * com.h (mark_addressable): Likewise. + 2001-04-02 Jakub Jelinek * lex.c (ffelex_hash_): Avoid eating one whole line after *************** Mon Apr 2 22:38:09 2001 Toon Moene ! * com.c (duplicate_decls): Don't copy DECL_FRAME_SIZE. ! 2001-03-22 Zack Weinberg ! * lang-specs.h: Add zero initializer for cpp_spec field to ! all array elements. Mon Mar 19 15:05:39 2001 Mark Mitchell * com.c (builtin_function): Use SET_DECL_ASSEMBLER_NAME. - 2001-03-15 Zack Weinberg - - * proj.h, intdoc.c: Delete 'bool' type. Don't include - stddef.h here. - * com.c: Rename variables named 'true' and/or 'false'. - Wed Mar 14 09:29:27 2001 Mark Mitchell * com.c (ffecom_member_phase_2): Use COPY_DECL_RTL, DECL_RTL_SET_P, etc. (duplicate_decls): Likewise. (start_decl): Likewise. ! Fri Feb 23 15:28:39 2001 Richard Kenner * com.c (set_block): Set NAMES and BLOCKS from BLOCK. 2001-02-19 Joseph S. Myers ! * root.texi: Clear DEVELOPMENT. Update GCC version number to 3.0. * BUGS, NEWS: Regenerate. Sun Feb 4 15:52:44 2001 Richard Kenner --- 681,741 ---- * 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 ! * Make-lang.in: Depend on $(SYSTEM_H), not system.h. ! Mon Mar 26 18:13:30 2001 Mark Mitchell ! * com.c (duplicate_decls): Don't copy DECL_FRAME_SIZE. Mon Mar 19 15:05:39 2001 Mark Mitchell * com.c (builtin_function): Use SET_DECL_ASSEMBLER_NAME. Wed Mar 14 09:29:27 2001 Mark Mitchell * 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 ! ! * fini.c (main): Use really_call_malloc, not malloc. ! ! Thu Mar 8 13:27:47 2001 Kaveh R. Ghazi ! ! * com.c: Don't rely on the POSIX macro to define autoconf stuff. ! ! 2001-03-07 Brad Lucier ! ! * g77.texi: Document new options -funsafe-math-optimizations ! and -fno-trapping-math. Revise documentation for -ffast-math. ! ! 2001-03-01 Zack Weinberg ! ! * 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 ! ! * lang-specs.h: Add zero initializer for cpp_spec field to all ! array elements. ! ! 2001-02-24 Zack Weinberg ! ! * com.c: Don't define STDC_HEADERS, autoconf handles it. ! Fri Feb 23 15:28:39 2001 Richard Kenner * com.c (set_block): Set NAMES and BLOCKS from BLOCK. 2001-02-19 Joseph S. Myers ! * 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 *************** Sun Feb 4 15:52:44 2001 Richard Kenner *** 197,203 **** (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 * Make-lang.in: Remove all dependencies on defaults.h. --- 746,752 ---- (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 * Make-lang.in: Remove all dependencies on defaults.h. *************** Sun Jun 11 00:03:00 2000 Kaveh R. Ghazi *** 616,622 **** Wed May 17 17:27:44 2000 Andrew Cagney * top.c (ffe_decode_option): Update -Wall unused flags by calling ! set_Wunused. 2000-05-09 Zack Weinberg --- 1165,1171 ---- Wed May 17 17:27:44 2000 Andrew Cagney * top.c (ffe_decode_option): Update -Wall unused flags by calling ! set_Wunused. 2000-05-09 Zack Weinberg *************** Sun Sep 12 23:29:47 1999 Kaveh R. Ghazi *** 933,939 **** (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 --- 1482,1488 ---- (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 diff -Nrc3pad gcc-3.0.4/gcc/f/Make-lang.in gcc-3.1/gcc/f/Make-lang.in *** gcc-3.0.4/gcc/f/Make-lang.in Wed Nov 14 22:33:42 2001 --- gcc-3.1/gcc/f/Make-lang.in Sun Apr 14 16:21:51 2002 *************** *** 1,5 **** # Top level makefile fragment for GNU Fortran. -*-makefile-*- ! # Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001 Free Software Foundation, Inc. #This file is part of GNU Fortran. --- 1,5 ---- # Top level makefile fragment for GNU Fortran. -*-makefile-*- ! # Copyright (C) 1995, 1996, 1997, 1998, 2000, 2001, 2002 Free Software Foundation, Inc. #This file is part of GNU Fortran. *************** *** 39,48 **** # $(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` # Actual name to use when installing a cross-compiler. ! G77_CROSS_NAME = `t='$(program_transform_cross_name)'; echo g77 | sed $$t` # Some versions of `touch' (such as the version on Solaris 2.8) # do not correctly set the timestamp due to buggy versions of `utime' --- 39,48 ---- # $(srcdir) must be set to the gcc/ source directory (not gcc/f/). # # Actual name to use when installing a native compiler. ! G77_INSTALL_NAME = `echo g77|sed '$(program_transform_name)'` # Actual name to use when installing a cross-compiler. ! 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' *************** F77 f77: f771$(exeext) *** 65,111 **** 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 system.h $(GCC_H) \ $(CONFIG_H) ! case "$(LANGUAGES)" in \ ! *[fF]77*) $(STAMP) lang-f77;; \ ! *) rm -f lang-f77;; \ ! esac ! if [ -f lang-f77 ]; then \ ! $(CC) -c $(ALL_CFLAGS) $(ALL_CPPFLAGS) $(INCLUDES) \ ! $(srcdir)/f/g77spec.c $(OUTPUT_OPTION); \ ! else true; fi g77version.o: $(srcdir)/f/version.c ! case "$(LANGUAGES)" in \ ! *[fF]77*) $(STAMP) 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 # 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 # 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 # 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/proj.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 --- 65,97 ---- 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 $(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 ! $(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) ! $(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) ! 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 *************** f/str-op.h f/str-op.j: f/fini$(build_exe *** 143,162 **** 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 f/proj-h.o safe-ctype.o $(HOST_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) -o f/fini$(build_exeext) \ ! f/fini.o f/proj-h.o safe-ctype.o ! f/fini.o: $(HCONFIG_H) $(HOST_CC) $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) \ -c $(srcdir)/f/fini.c $(OUTPUT_OPTION) - # Like proj.o, but depends on hconfig.h instead of config.h. - f/proj-h.o: f/proj.c f/proj.h $(HCONFIG_H) $(SYSTEM_H) $(ASSERT_H) $(GLIMITS_H) - $(HOST_CC) -DUSE_HCONFIG \ - $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) \ - -c $(srcdir)/f/proj.c $(OUTPUT_OPTION) - # # Build hooks: --- 129,142 ---- 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) ! f/fini.o: $(HOST_CC) $(HOST_CFLAGS) $(HOST_CPPFLAGS) $(INCLUDES) \ -c $(srcdir)/f/fini.c $(OUTPUT_OPTION) # # Build hooks: *************** f77.rest.encap: *** 167,203 **** f77.info: $(srcdir)/f/g77.info f77.dvi: f/g77.dvi # g77 documentation. $(srcdir)/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 $(srcdir)/doc/include/fdl.texi \ $(srcdir)/doc/include/gpl.texi \ $(srcdir)/doc/include/funding.texi ! case "$(LANGUAGES)" in \ ! *[fF]77*) $(STAMP) lang-f77;; \ ! *) rm -f lang-f77;; \ ! esac ! if [ -f lang-f77 ] && [ x$(BUILD_INFO) = xinfo ]; then \ rm -f $(srcdir)/f/g77.info-*; \ 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 $(srcdir)/doc/include/fdl.texi \ $(srcdir)/doc/include/gpl.texi \ $(srcdir)/doc/include/funding.texi ! case "$(LANGUAGES)" in \ ! *[fF]77*) $(STAMP) lang-f77;; \ ! *) rm -f lang-f77;; \ ! esac ! if [ -f lang-f77 ]; then \ ! s=`cd $(srcdir); pwd`; export s; \ ! cd f && $(TEXI2DVI) -I $$s/doc/include $$s/f/g77.texi; \ ! else true; fi # This dance is all about producing accurate documentation for g77's # intrinsics with minimum fuss. f/ansify appends "\n\" to C strings --- 147,181 ---- f77.info: $(srcdir)/f/g77.info f77.dvi: f/g77.dvi + f77.generated-manpages: $(srcdir)/f/g77.1 # g77 documentation. $(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-*; \ 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/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 *************** $(srcdir)/f/intdoc.texi: $(INTDOC_DEPS) *** 233,247 **** $(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_CC) $(HOST_CFLAGS) $(HOST_LDFLAGS) $(INCLUDES) \ ! $(srcdir)/f/intdoc.c -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) --- 211,226 ---- $(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) \ ! $(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) *************** f77.install-normal: *** 264,277 **** # 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*) $(STAMP) $(libsubdir)/lang-f77.com;; \ ! *) rm -f $(libsubdir)/lang-f77.com;; \ ! esac ! -if [ -f $(libsubdir)/lang-f77.com -a -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); \ --- 243,250 ---- # Install the driver program as $(target)-g77 # and also as either g77 (if native) or $(tooldir)/bin/g77. f77.install-common: installdirs ! -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); \ *************** f77.install-common: installdirs *** 291,308 **** echo ' f77-install-ok in the source or build directory.)'; \ echo ''; \ else true; fi - rm -f $(libsubdir)/lang-f77.com # $(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*) $(STAMP) $(libsubdir)/lang-f77.info;; \ ! *) rm -f $(libsubdir)/lang-f77.info;; \ ! esac ! if [ -f $(libsubdir)/lang-f77.info -a -f $(srcdir)/f/g77.info ] ; then \ rm -f $(infodir)/g77.info*; \ for f in $(srcdir)/f/g77.info*; do \ realfile=`echo $$f | sed -e 's|.*/\([^/]*\)$$|\1|'`; \ --- 264,274 ---- echo ' f77-install-ok in the source or build directory.)'; \ echo ''; \ else true; fi # $(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. f77.install-info: f77.info installdirs ! if [ -f $(srcdir)/f/g77.info ] ; then \ rm -f $(infodir)/g77.info*; \ for f in $(srcdir)/f/g77.info*; do \ realfile=`echo $$f | sed -e 's|.*/\([^/]*\)$$|\1|'`; \ *************** f77.install-info: f77.info installdirs *** 310,331 **** done; \ chmod a-x $(infodir)/g77.info*; \ else true; fi ! @if [ -f $(libsubdir)/lang-f77.info -a -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.info ! # 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*) $(STAMP) $(libsubdir)/lang-f77.man;; \ ! *) rm -f $(libsubdir)/lang-f77.man;; \ ! esac ! -if [ -f $(libsubdir)/lang-f77.man -a -f f771$(exeext) ] ; then \ if [ -f g77-cross$(exeext) ] ; then \ rm -f $(man1dir)/$(G77_CROSS_NAME)$(man1ext); \ $(INSTALL_DATA) $(srcdir)/f/g77.1 $(man1dir)/$(G77_CROSS_NAME)$(man1ext); \ --- 276,290 ---- done; \ chmod a-x $(infodir)/g77.info*; \ else true; fi ! @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 ! f77.install-man: $(GENERATED_MANPAGES) installdirs ! -if [ -f f771$(exeext) ] ; then \ if [ -f g77-cross$(exeext) ] ; then \ rm -f $(man1dir)/$(G77_CROSS_NAME)$(man1ext); \ $(INSTALL_DATA) $(srcdir)/f/g77.1 $(man1dir)/$(G77_CROSS_NAME)$(man1ext); \ *************** f77.install-man: $(srcdir)/f/g77.1 insta *** 336,364 **** chmod a-x $(man1dir)/$(G77_INSTALL_NAME)$(man1ext); \ fi; \ else true; fi - rm -f $(libsubdir)/lang-f77.man - # 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*) $(STAMP) $(libsubdir)/lang-f77.un;; \ ! *) rm -f $(libsubdir)/lang-f77.un;; \ ! esac ! @if [ -f $(libsubdir)/lang-f77.un ] ; 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; \ else : ; fi ! -if [ -f $(libsubdir)/lang-f77.un ]; then \ ! 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*; \ ! fi ! rm -f $(libsubdir)/lang-f77.un # # Clean hooks: # A lot of the ancillary files are deleted by the main makefile. --- 295,311 ---- chmod a-x $(man1dir)/$(G77_INSTALL_NAME)$(man1ext); \ fi; \ else true; fi f77.uninstall: installdirs ! 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 ! 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. *************** f77.mostlyclean: *** 373,379 **** f77.clean: -rm -f g77spec.o g77version.o f77.distclean: ! -rm -f lang-f77 f/Makefile f77.extraclean: f77.maintainer-clean: -rm -f f/g77.info* f/g77.*aux f/TAGS f/BUGS f/NEWS f/intdoc.texi --- 320,326 ---- f77.clean: -rm -f g77spec.o g77version.o f77.distclean: ! -rm -f f/Makefile f77.extraclean: f77.maintainer-clean: -rm -f f/g77.info* f/g77.*aux f/TAGS f/BUGS f/NEWS f/intdoc.texi *************** f77.maintainer-clean: *** 382,585 **** # The main makefile has already created stage?/f. G77STAGESTUFF = f/*$(objext) f/fini$(build_exeext) f/stamp-str \ ! f/str-*.h f/str-*.j lang-f77 g77spec.o g77version.o f77.stage1: stage1-start ! -if [ -f lang-f77 ]; then \ ! mv -f $(G77STAGESTUFF) stage1/f; \ ! fi f77.stage2: stage2-start ! -if [ -f lang-f77 ]; then \ ! mv -f $(G77STAGESTUFF) stage2/f; \ ! fi f77.stage3: stage3-start ! -if [ -f lang-f77 ]; then \ ! mv -f $(G77STAGESTUFF) stage3/f; \ ! fi f77.stage4: stage4-start ! -if [ -f lang-f77 ]; then \ ! mv -f $(G77STAGESTUFF) stage4/f; \ ! 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 ! 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 ! 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 \ ! 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/proj.o: f/proj.c f/proj.h $(CONFIG_H) system.h glimits.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/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) --- 329,527 ---- # The main makefile has already created stage?/f. G77STAGESTUFF = f/*$(objext) f/fini$(build_exeext) f/stamp-str \ ! f/str-*.h f/str-*.j g77spec.o g77version.o f77.stage1: stage1-start ! -mv -f $(G77STAGESTUFF) stage1/f ! f77.stage2: stage2-start ! -mv -f $(G77STAGESTUFF) stage2/f ! f77.stage3: stage3-start ! -mv -f $(G77STAGESTUFF) stage3/f ! f77.stage4: stage4-start ! -mv -f $(G77STAGESTUFF) stage4/f # # .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 diagnostic.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 -Nrc3pad gcc-3.0.4/gcc/f/NEWS gcc-3.1/gcc/f/NEWS *** gcc-3.0.4/gcc/f/NEWS Wed Feb 20 20:24:01 2002 --- gcc-3.1/gcc/f/NEWS Wed May 15 03:48:01 2002 *************** _Note:_ This file is automatically gener *** 2,12 **** `news0.texi' and `news.texi'. `NEWS' is _not_ a source file, although it is normally included within source distributions. ! This file lists news about the GCC-3.0 version (and some other versions) of the GNU Fortran compiler. Copyright (C) ! 1995,1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc. You ! may copy, distribute, and modify it freely as long as you preserve this ! copyright notice and permission notice. News About GNU Fortran ********************** --- 2,12 ---- `news0.texi' and `news.texi'. `NEWS' is _not_ a source file, although it is normally included within source distributions. ! This file lists news about the GCC-3.1 version (and some other versions) of the GNU Fortran compiler. Copyright (C) ! 1995,1996,1997,1998,1999,2000,2001,2002 Free Software Foundation, Inc. ! You may copy, distribute, and modify it freely as long as you preserve ! this copyright notice and permission notice. News About GNU Fortran ********************** *************** somewhat more difficult. *** 49,55 **** the mainline, development version of `g77' within `gcc') is available at `http://www.gnu.org/software/gcc/onlinedocs/g77_news.html'. ! The following information was last updated on 2001-06-03: In 0.5.26, `GCC' 3.0 versus `GCC' 2.95: ======================================= --- 49,140 ---- the mainline, development version of `g77' within `gcc') is available at `http://www.gnu.org/software/gcc/onlinedocs/g77_news.html'. ! The following information was last updated on 2002-04-13: ! ! In `GCC' 3.1 (formerly known as g77-0.5.27) versus `GCC' 3.0: ! ============================================================= ! ! * Problem Reports fixed (in chronological order of submission): ! `947' ! Data statement initialization with subscript of kind INTEGER*2 ! ! `3743' ! Reference to intrinsic `ISHFT' invalid ! ! `3807' ! Function BESJN(integer,double) problems ! ! `3957' ! g77 -pipe -xf77-cpp-input sends output to stdout ! ! `4279' ! g77 -h" gives bogus output ! ! `4730' ! ICE on valid input using CALL EXIT(%VAL(...)) ! ! `4752' ! g77 -v -c -xf77-version /dev/null -xnone causes ice ! ! `4885' ! BACKSPACE example that doesn't work as of gcc/g77-3.0.x ! ! `5122' ! g77 rejects accepted use of INTEGER*2 as type of DATA ! statement loop index ! ! `5397' ! ICE on compiling source with 540 000 000 REAL array ! ! `5473' ! ICE on BESJN(integer*8,real) ! ! `5837' ! bug in loop unrolling ! ! * `g77' now has its man page generated from the texinfo ! documentation, to guarantee that it remains up to date. ! ! * `g77' used to reject the following program on 32-bit targets: ! PROGRAM PROG ! DIMENSION A(140 000 000) ! END ! with the message: ! prog.f: In program `prog': ! prog.f:2: ! DIMENSION A(140 000 000) ! ^ ! Array `a' at (^) is too large to handle ! 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. `g77 -static ...'. ! ! * Based on work done by Juergen Pfeifer () ! libf2c is now a shared library. One can still link in all objects ! with the program by specifying the `-static' option. ! ! * Robert Anderson () thought up a two line ! change that enables g77 to compile such code as: ! SUBROUTINE SUB(A, N) ! DIMENSION N(2) ! DIMENSION A(N(1),N(2)) ! A(1,1) = 1. ! END ! Note the use of array elements in the bounds of the adjustable ! array A. ! ! * George Helffrich () implemented a change ! in substring index checking (when specifying `-fbounds-check') ! that permits the use of zero length substrings of the form ! `string(1:0)'. ! ! * Based on code developed by Pedro Vazquez ! (), the `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. In 0.5.26, `GCC' 3.0 versus `GCC' 2.95: ======================================= *************** In `EGCS' 1.1 versus `EGCS' 1.0.3: *** 309,334 **** shared library. * `g77' no longer installs the `f77' command and `f77.1' man page in ! the `/usr' or `/usr/local' heirarchy, even if the `f77-install-ok' file exists in the source or build directory. See the installation documentation for more information. * `g77' no longer installs the `libf2c.a' library and `f2c.h' ! include file in the `/usr' or `/usr/local' heirarchy, even if the `f2c-install-ok' or `f2c-exists-ok' files exist in the source or build directory. See the installation documentation for more information. * The `libf2c.a' library produced by `g77' has been renamed to `libg2c.a'. It is installed only in the `gcc' "private" directory ! heirarchy, `gcc-lib'. This allows system administrators and users to choose which version of the `libf2c' library from `netlib' they wish to use on a case-by-case basis. See the installation documentation for more information. * The `f2c.h' include (header) file produced by `g77' has been renamed to `g2c.h'. It is installed only in the `gcc' "private" ! directory heirarchy, `gcc-lib'. This allows system administrators and users to choose which version of the include file from `netlib' they wish to use on a case-by-case basis. See the installation documentation for more information. --- 394,419 ---- shared library. * `g77' no longer installs the `f77' command and `f77.1' man page in ! the `/usr' or `/usr/local' hierarchy, even if the `f77-install-ok' file exists in the source or build directory. See the installation documentation for more information. * `g77' no longer installs the `libf2c.a' library and `f2c.h' ! include file in the `/usr' or `/usr/local' hierarchy, even if the `f2c-install-ok' or `f2c-exists-ok' files exist in the source or build directory. See the installation documentation for more information. * The `libf2c.a' library produced by `g77' has been renamed to `libg2c.a'. It is installed only in the `gcc' "private" directory ! hierarchy, `gcc-lib'. This allows system administrators and users to choose which version of the `libf2c' library from `netlib' they wish to use on a case-by-case basis. See the installation documentation for more information. * The `f2c.h' include (header) file produced by `g77' has been renamed to `g2c.h'. It is installed only in the `gcc' "private" ! directory hierarchy, `gcc-lib'. This allows system administrators and users to choose which version of the include file from `netlib' they wish to use on a case-by-case basis. See the installation documentation for more information. diff -Nrc3pad gcc-3.0.4/gcc/f/bad.c gcc-3.1/gcc/f/bad.c *** gcc-3.0.4/gcc/f/bad.c Fri Dec 8 03:00:25 2000 --- gcc-3.1/gcc/f/bad.c Wed Jan 23 03:01:52 2002 *************** *** 1,5 **** /* bad.c -- Implementation File (module.c template V1.0) ! Copyright (C) 1995 Free Software Foundation, Inc. Contributed by James Craig Burley. This file is part of GNU Fortran. --- 1,5 ---- /* bad.c -- Implementation File (module.c template V1.0) ! Copyright (C) 1995, 2002 Free Software Foundation, Inc. Contributed by James Craig Burley. This file is part of GNU Fortran. *************** the Free Software Foundation, 59 Temple *** 42,47 **** --- 42,48 ---- #include "com.h" #include "toplev.h" #include "where.h" + #include "intl.h" /* Externals defined here. */ *************** bool ffebad_is_inhibited_ = FALSE; *** 61,84 **** struct _ffebad_message_ { ! ffebadSeverity severity; ! const char *message; }; /* Static objects accessed by functions in this module. */ ! static struct _ffebad_message_ ffebad_messages_[] = { ! #define FFEBAD_MSGS1(KWD,SEV,MSG) { SEV, MSG }, #if FFEBAD_LONG_MSGS_ == 0 ! #define FFEBAD_MSGS2(KWD,SEV,LMSG,SMSG) { SEV, SMSG }, #else ! #define FFEBAD_MSGS2(KWD,SEV,LMSG,SMSG) { SEV, LMSG }, #endif #include "bad.def" ! #undef FFEBAD_MSGS1 ! #undef FFEBAD_MSGS2 }; static struct --- 62,88 ---- struct _ffebad_message_ { ! const ffebadSeverity severity; ! const char *const message; }; /* Static objects accessed by functions in this module. */ ! static const struct _ffebad_message_ ffebad_messages_[] = { ! #define FFEBAD_MSG(kwd,sev,msgid) { sev, msgid }, #if FFEBAD_LONG_MSGS_ == 0 ! #define LONG(m) ! #define SHORT(m) m #else ! #define LONG(m) m ! #define SHORT(m) #endif #include "bad.def" ! #undef FFEBAD_MSG ! #undef LONG ! #undef SHORT }; static struct *************** ffebad_severity (ffebad errnum) *** 161,167 **** bool ffebad_start_ (bool lex_override, ffebad errnum, ffebadSeverity sev, ! const char *message) { unsigned char i; --- 165,171 ---- bool ffebad_start_ (bool lex_override, ffebad errnum, ffebadSeverity sev, ! const char *msgid) { unsigned char i; *************** ffebad_start_ (bool lex_override, ffebad *** 174,227 **** if (errnum != FFEBAD) { ffebad_severity_ = ffebad_messages_[errnum].severity; ! ffebad_message_ = ffebad_messages_[errnum].message; } else { ffebad_severity_ = sev; ! ffebad_message_ = message; } ! #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; ! default: ! break; ! } ! } ! #endif /* FFECOM_targetCURRENT == FFECOM_targetGCC */ ffebad_is_temp_inhibited_ = FALSE; ffebad_errnum_ = errnum; --- 178,225 ---- if (errnum != FFEBAD) { ffebad_severity_ = ffebad_messages_[errnum].severity; ! ffebad_message_ = gettext (ffebad_messages_[errnum].message); } else { ffebad_severity_ = sev; ! ffebad_message_ = gettext (msgid); } ! 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; ! } ffebad_is_temp_inhibited_ = FALSE; ffebad_errnum_ = errnum; *************** void *** 351,357 **** ffebad_finish () { #define MAX_SPACES 132 ! static const char *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\ --- 349,355 ---- ffebad_finish () { #define MAX_SPACES 132 ! 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\ *************** ffebad_finish () *** 385,399 **** switch (ffebad_severity_) { case FFEBAD_severityINFORMATIONAL: ! s = "note:"; break; case FFEBAD_severityWARNING: ! s = "warning:"; break; case FFEBAD_severitySEVERE: ! s = "fatal:"; break; default: --- 383,397 ---- switch (ffebad_severity_) { case FFEBAD_severityINFORMATIONAL: ! s = _("note:"); break; case FFEBAD_severityWARNING: ! s = _("warning:"); break; case FFEBAD_severitySEVERE: ! s = _("fatal:"); break; default: *************** ffebad_finish () *** 422,448 **** { 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 :: 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):"; } else { --- 420,439 ---- { if (bi != 0) fputc ('\n', stderr); report_error_function (fn); fprintf (stderr, /* the trailing space on the :: line fools emacs19 compilation mode into finding the report */ "%s:%" ffewhereLineNumber_f "u: %s\n %s\n %s%c", fn, rn, 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):"); } else { *************** ffebad_finish () *** 486,505 **** if (c == '%') { c = ffebad_message_[++i]; ! if (ISALPHA (c) && ISUPPER (c)) { index = c - 'A'; if ((index < 0) || (index >= FFEBAD_MAX_)) { ! 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!!]"); else bufi = ffebad_bufputs_ (buf, bufi, s); } --- 477,496 ---- if (c == '%') { c = ffebad_message_[++i]; ! if (ISUPPER (c)) { index = c - 'A'; if ((index < 0) || (index >= FFEBAD_MAX_)) { ! 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!!]")); else bufi = ffebad_bufputs_ (buf, bufi, s); } *************** ffebad_finish () *** 510,516 **** if ((index < 0) || (index >= FFEBAD_MAX_)) { ! bufi = ffebad_bufputs_ (buf, bufi, "[REPORT BUG!!] %"); bufi = ffebad_bufputc_ (buf, bufi, c); } else --- 501,507 ---- if ((index < 0) || (index >= FFEBAD_MAX_)) { ! bufi = ffebad_bufputs_ (buf, bufi, _("[REPORT BUG!!] %")); bufi = ffebad_bufputc_ (buf, bufi, c); } else *************** ffebad_finish () *** 531,537 **** bufi = ffebad_bufputc_ (buf, bufi, '%'); else { ! bufi = ffebad_bufputs_ (buf, bufi, "[REPORT BUG!!]"); bufi = ffebad_bufputc_ (buf, bufi, '%'); bufi = ffebad_bufputc_ (buf, bufi, c); } --- 522,528 ---- bufi = ffebad_bufputc_ (buf, bufi, '%'); else { ! bufi = ffebad_bufputs_ (buf, bufi, _("[REPORT BUG!!]")); bufi = ffebad_bufputc_ (buf, bufi, '%'); bufi = ffebad_bufputc_ (buf, bufi, c); } diff -Nrc3pad gcc-3.0.4/gcc/f/bad.def gcc-3.1/gcc/f/bad.def *** gcc-3.0.4/gcc/f/bad.def Sat Feb 26 20:02:00 2000 --- gcc-3.1/gcc/f/bad.def Mon Feb 4 15:58:50 2002 *************** *** 1,5 **** /* bad.def -- Public #include File (module.h template V1.0) ! Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. Contributed by James Craig Burley. This file is part of GNU Fortran. --- 1,5 ---- /* bad.def -- Public #include File (module.h template V1.0) ! Copyright (C) 1995, 1996, 1997, 2002 Free Software Foundation, Inc. Contributed by James Craig Burley. This file is part of GNU Fortran. *************** the Free Software Foundation, 59 Temple *** 34,708 **** #define SEVERE FFEBAD_severitySEVERE #define DISASTER FFEBAD_severityDISASTER ! FFEBAD_MSGS1 (FFEBAD_MISSING_FIRST_BINARY_OPERAND, FATAL, "Missing first operand for binary operator at %0") ! FFEBAD_MSGS1 (FFEBAD_NULL_CHAR_CONST, WARN, "Zero-length character constant at %0") ! FFEBAD_MSGS1 (FFEBAD_INVALID_TOKEN_IN_EXPRESSION, FATAL, "Invalid token at %0 in expression or subexpression at %1") ! FFEBAD_MSGS1 (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, "Label %A already defined at %1 when redefined at %0") ! FFEBAD_MSGS1 (FFEBAD_UNRECOGNIZED_CHARACTER, FATAL, "Unrecognized character at %0 [info -f g77 M LEX]") ! FFEBAD_MSGS1 (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, "Invalid first character at %0 [info -f g77 M LEX]") ! FFEBAD_MSGS1 (FFEBAD_LINE_TOO_LONG, FATAL, "Line too long as of %0 [info -f g77 M LEX]") ! FFEBAD_MSGS1 (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, "Label number at %0 not in range 1-99999") ! FFEBAD_MSGS1 (FFEBAD_NON_ANSI_COMMENT, WARN, "At %0, '!' and '/*' are not valid comment delimiters") ! FFEBAD_MSGS1 (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, "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, "Character constant at %0 has no closing apostrophe at %1") ! FFEBAD_MSGS1 (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, "Missing close parenthese at %0 needed to match open parenthese at %1") ! FFEBAD_MSGS1 (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, "Period at %0 not followed by digits for floating-point number or by `NOT.', `TRUE.', or `FALSE.'") ! FFEBAD_MSGS1 (FFEBAD_INSERTING_PERIOD, FATAL, "Missing close-period between `.%A' at %0 and %1") ! FFEBAD_MSGS1 (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, "Missing value at %1 for real-number exponent at %0") ! FFEBAD_MSGS1 (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, "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, "Extraneous comma in FORMAT statement at %0") ! FFEBAD_MSGS1 (FFEBAD_FORMAT_MISSING_COMMA, WARN, "Missing comma in FORMAT statement at %0") ! FFEBAD_MSGS1 (FFEBAD_FORMAT_SPURIOUS_SIGN, FATAL, "Spurious sign in FORMAT statement at %0") ! FFEBAD_MSGS1 (FFEBAD_FORMAT_SPURIOUS_NUMBER, FATAL, "Spurious number in FORMAT statement at %0") ! FFEBAD_MSGS1 (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, "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, "Missing close-parenthese(s) in FORMAT statement at %0") ! FFEBAD_MSGS1 (FFEBAD_FORMAT_MISSING_DOT, FATAL, "Missing number following period in FORMAT statement at %0") ! FFEBAD_MSGS1 (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, "Spurious trailing comma preceding terminator at %0") ! FFEBAD_MSGS1 (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, "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, "Cannot specify =initialization-expr at %0 unless `::' appears before list of objects") ! FFEBAD_MSGS1 (FFEBAD_LABEL_USE_DEF, FATAL, "Reference to label at %1 inconsistent with its definition at %0") ! FFEBAD_MSGS1 (FFEBAD_LABEL_USE_USE, FATAL, "Reference to label at %1 inconsistent with earlier reference at %0") ! FFEBAD_MSGS1 (FFEBAD_LABEL_DEF_DO, FATAL, "DO-statement reference to label at %1 follows its definition at %0") ! FFEBAD_MSGS1 (FFEBAD_LABEL_BLOCK, WARN, "Reference to label at %1 is outside block containing definition at %0") ! FFEBAD_MSGS1 (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, "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, "Label definition at %0 invalid on this kind of statement") ! FFEBAD_MSGS1 (FFEBAD_ORDER_1, FATAL, "Statement at %0 invalid in this context") ! FFEBAD_MSGS1 (FFEBAD_ORDER_2, FATAL, "Statement at %0 invalid in context established by statement at %1") ! FFEBAD_MSGS1 (FFEBAD_CONSTRUCT_NAMED, FATAL, "Statement at %0 must specify construct name specified at %1") ! FFEBAD_MSGS1 (FFEBAD_CONSTRUCT_NOT_NAMED, FATAL, "Construct name at %0 superfluous, no construct name specified at %1") ! FFEBAD_MSGS1 (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, "Construct name at %0 does not match construct name for any containing DO constructs") ! FFEBAD_MSGS1 (FFEBAD_DO_HAD_LABEL, FATAL, "Label definition missing at %0 for DO construct specifying label at %1") ! FFEBAD_MSGS1 (FFEBAD_AFTER_ELSE, FATAL, "Statement at %0 follows ELSE block for IF construct at %1") ! FFEBAD_MSGS1 (FFEBAD_FORMAT_NO_LABEL_DEF, FATAL, "No label definition for FORMAT statement at %0") ! FFEBAD_MSGS1 (FFEBAD_SECOND_ELSE_WHERE, FATAL, "Second occurrence of ELSE WHERE at %0 within WHERE at %1") ! FFEBAD_MSGS1 (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, "MODULE PROCEDURE statement at %0 disallowed because INTERFACE at %1 specifies no generic name, operator, or assignment") ! FFEBAD_MSGS1 (FFEBAD_BLOCKDATA_NOT_NAMED, FATAL, "BLOCK DATA name at %0 superfluous, no name specified at %1") ! FFEBAD_MSGS1 (FFEBAD_PROGRAM_NOT_NAMED, FATAL, "Program name at %0 superfluous, no PROGRAM statement specified at %1") ! FFEBAD_MSGS1 (FFEBAD_UNIT_WRONG_NAME, FATAL, "Program unit name at %0 not the same as name at %1") ! FFEBAD_MSGS1 (FFEBAD_TYPE_WRONG_NAME, FATAL, "Type name at %0 not the same as name at %1") ! FFEBAD_MSGS1 (FFEBAD_EOF_BEFORE_BLOCK_END, FATAL, "End of source file before end of block started at %0") ! FFEBAD_MSGS1 (FFEBAD_UNDEF_LABEL, FATAL, "Undefined label, first referenced at %0") ! FFEBAD_MSGS1 (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, "PUBLIC or PRIVATE statement at %1 cannot be specified along with PUBLIC or PRIVATE statement at %0") ! FFEBAD_MSGS1 (FFEBAD_RETURN_IN_MAIN, WARN, "RETURN statement at %0 invalid within a main program unit") ! FFEBAD_MSGS1 (FFEBAD_ALTRETURN_IN_PROGRAM, FATAL, "Alternate return specifier at %0 invalid within a main program unit") ! FFEBAD_MSGS1 (FFEBAD_ALTRETURN_IN_FUNCTION, FATAL, "Alternate return specifier at %0 invalid within a function") ! FFEBAD_MSGS1 (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, "Access specifier at %0 must immediately follow derived-type statement at %1 with no intervening statements") ! FFEBAD_MSGS1 (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, "No components specified as of %0 for structure definition beginning at %1") ! FFEBAD_MSGS1 (FFEBAD_STRUCT_MISSING_NAME, FATAL, "Missing structure name for outer structure definition at %0") ! FFEBAD_MSGS1 (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, "Missing field name(s) for structure definition at %0 within structure definition at %1") ! FFEBAD_MSGS1 (FFEBAD_MAP_NO_COMPONENTS, FATAL, "No components specified as of %0 for map beginning at %1") ! FFEBAD_MSGS1 (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, "Missing %A specifier in statement at %0") ! FFEBAD_MSGS1 (FFEBAD_NAMELIST_ITEMS, FATAL, "Items in I/O list starting at %0 invalid for namelist-directed I/O") ! FFEBAD_MSGS1 (FFEBAD_CONFLICTING_SPECS, FATAL, "Conflicting I/O control specifications at %0 and %1") ! FFEBAD_MSGS1 (FFEBAD_NO_UNIT_SPEC, FATAL, "No UNIT= specifier in I/O control list at %0") ! FFEBAD_MSGS1 (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, "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, "Second occurrence of CASE DEFAULT at %0 within SELECT CASE at %1") ! FFEBAD_MSGS1 (FFEBAD_CASE_DUPLICATE, FATAL, "Duplicate or overlapping case values/ranges at %0 and %1") ! FFEBAD_MSGS1 (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, "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, "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, "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, "Null element at %0 for array reference at %1") ! FFEBAD_MSGS1 (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, "Too many elements as of %0 for array reference at %1") ! FFEBAD_MSGS1 (FFEBAD_MISSING_COLON_IN_SUBSTR, FATAL, "Missing colon as of %0 in substring reference for %1") ! FFEBAD_MSGS1 (FFEBAD_BAD_SUBSTR, FATAL, "Invalid use at %0 of substring operator on %1") ! FFEBAD_MSGS1 (FFEBAD_RANGE_SUBSTR, WARN, "Substring begin/end point at %0 out of defined range") ! FFEBAD_MSGS1 (FFEBAD_RANGE_ARRAY, WARN, "Array element value at %0 out of defined range") ! FFEBAD_MSGS1 (FFEBAD_EXPR_WRONG, FATAL, "Expression at %0 has incorrect data type or rank for its context") ! FFEBAD_MSGS1 (FFEBAD_DIV_BY_ZERO, WARN, "Division by 0 (zero) at %0 (IEEE not yet supported)") ! FFEBAD_MSGS1 (FFEBAD_DO_STEP_ZERO, FATAL, "%A step count known to be 0 (zero) at %0") ! FFEBAD_MSGS1 (FFEBAD_DO_END_OVERFLOW, WARN, "%A end value plus step count known to overflow at %0") ! FFEBAD_MSGS1 (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, "%A begin, end, and step-count values known to result in no iterations at %0") ! FFEBAD_MSGS1 (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, "No specification for implied-DO iterator `%A' at %0") ! FFEBAD_MSGS1 (FFEBAD_IMPDO_PAREN, WARN, "Gratuitous parentheses surround implied-DO construct at %0") ! FFEBAD_MSGS1 (FFEBAD_ZERO_SIZE, FATAL, "Zero-size specification invalid at %0") ! FFEBAD_MSGS1 (FFEBAD_ZERO_ARRAY, FATAL, "Zero-size array at %0") ! FFEBAD_MSGS1 (FFEBAD_BAD_COMPLEX, FATAL, "Target machine does not support complex entity of kind specified at %0") ! FFEBAD_MSGS1 (FFEBAD_BAD_DBLCMPLX, FATAL, "Target machine does not support DOUBLE COMPLEX, specified at %0") ! FFEBAD_MSGS1 (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, "Reference to generic intrinsic `%A' at %0 could be to form %B or %C") ! FFEBAD_MSGS1 (FFEBAD_INTRINSIC_CMPAMBIG, FATAL, "Ambiguous use of intrinsic `%A' at %0 [info -f g77 M CMPAMBIG]") ! FFEBAD_MSGS1 (FFEBAD_INTRINSIC_EXPIMP, WARN, "Intrinsic `%A' referenced %Bly at %0, %Cly at %1 [info -f g77 M EXPIMP]") ! FFEBAD_MSGS1 (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, "Explicit type declaration for intrinsic `%A' disagrees with invocation at %0") ! FFEBAD_MSGS1 (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, "Null argument at %0 for statement function reference at %1") ! FFEBAD_MSGS1 (FFEBAD_NULL_ARGUMENT_W, WARN, "Null argument at %0 for procedure invocation at %1") ! FFEBAD_MSGS1 (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, "%A too many arguments as of %0 for statement function reference at %1") ! FFEBAD_MSGS1 (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, "Unsupported FORMAT specifier at %0") ! FFEBAD_MSGS1 (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, "Unsupported VXT statement at %0") ! FFEBAD_MSGS1 (FFEBAD_DATA_REINIT, FATAL, "Attempt to specify second initial value for `%A' at %0") ! FFEBAD_MSGS1 (FFEBAD_DATA_TOOFEW, FATAL, "Too few initial values in list of initializers for `%A' at %0") ! FFEBAD_MSGS1 (FFEBAD_DATA_TOOMANY, FATAL, "Too many initial values in list of initializers starting at %0") ! FFEBAD_MSGS1 (FFEBAD_DATA_RANGE, FATAL, "Array or substring specification for `%A' out of range in statement at %0") ! FFEBAD_MSGS1 (FFEBAD_DATA_SUBSCRIPT, FATAL, "Array subscript #%B out of range for initialization of `%A' in statement at %0") ! FFEBAD_MSGS1 (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, "Implied do-loop iteration count of 0 (zero) for iteration variable `%A' in statement at %0") ! FFEBAD_MSGS1 (FFEBAD_DATA_EVAL, FATAL, "Not an integer constant expression in implied do-loop in statement at %0") ! FFEBAD_MSGS1 (FFEBAD_DATA_MULTIPLE, FATAL, "Attempt to specify second initial value for element of `%A' at %0") ! FFEBAD_MSGS1 (FFEBAD_EQUIV_COMMON, FATAL, "Attempt to EQUIVALENCE common areas `%A' and `%B' at %0") ! FFEBAD_MSGS1 (FFEBAD_EQUIV_ALIGN, FATAL, "Can't place `%A' as directed by EQUIVALENCE due to alignment restrictions") ! FFEBAD_MSGS1 (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, "Array or substring specification for `%A' out of range in EQUIVALENCE statement") ! FFEBAD_MSGS1 (FFEBAD_EQUIV_SUBSTR, FATAL, "Substring of non-CHARACTER entity `%A' in EQUIVALENCE statement") ! FFEBAD_MSGS1 (FFEBAD_EQUIV_ARRAY, FATAL, "Array reference to scalar variable `%A' in EQUIVALENCE statement") ! FFEBAD_MSGS1 (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, "Attempt to extend COMMON area beyond its starting point via EQUIVALENCE of `%A'") ! FFEBAD_MSGS1 (FFEBAD_EQUIV_FEW, FATAL, "Too few elements in reference to array `%A' in EQUIVALENCE statement") ! FFEBAD_MSGS1 (FFEBAD_EQUIV_MANY, FATAL, "Too many elements in reference to array `%A' in EQUIVALENCE statement") ! FFEBAD_MSGS1 (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, "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, "Common block `%A' is SAVEd, explicitly or implicitly, at %0 but not SAVEd at %1") ! FFEBAD_MSGS1 (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, "Blank common initialized at %0") ! FFEBAD_MSGS1 (FFEBAD_NEED_INTRINSIC, WARN, "Intrinsic `%A' is passed as actual argument at %0 but not explicitly declared INTRINSIC") ! FFEBAD_MSGS1 (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, "Character `%A' (for example) is upper-case in symbol name at %0") ! FFEBAD_MSGS1 (FFEBAD_SYMBOL_LOWER_CASE, WARN, "Character `%A' (for example) is lower-case in symbol name at %0") ! FFEBAD_MSGS1 (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, "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, "NAMELIST not adequately supported by run-time library for source files with case preserved") ! FFEBAD_MSGS1 (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, "Statement at %0 invalid in BLOCK DATA program unit at %1") ! FFEBAD_MSGS1 (FFEBAD_TRUNCATING_CHARACTER, FATAL, "Truncating characters on right side of character constant at %0") ! FFEBAD_MSGS1 (FFEBAD_TRUNCATING_HOLLERITH, FATAL, "Truncating characters on right side of hollerith constant at %0") ! FFEBAD_MSGS1 (FFEBAD_TRUNCATING_NUMERIC, FATAL, "Truncating non-zero data on left side of numeric constant at %0") ! FFEBAD_MSGS1 (FFEBAD_TRUNCATING_TYPELESS, FATAL, "Truncating non-zero data on left side of typeless constant at %0") ! FFEBAD_MSGS1 (FFEBAD_TYPELESS_OVERFLOW, FATAL, "Typeless constant at %0 too large") ! FFEBAD_MSGS1 (FFEBAD_AMPERSAND, WARN, "First-column ampersand continuation at %0") ! FFEBAD_MSGS1 (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, "Global name `%A' defined at %0 already defined at %1 [info -f g77 M GLOBALS]") ! FFEBAD_MSGS1 (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, "Global name `%A' is %B at %0 but is %C at %1 [info -f g77 M GLOBALS]") ! FFEBAD_MSGS1 (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, "Global name `%A' at %0 has different type at %1 [info -f g77 M GLOBALS]") ! FFEBAD_MSGS1 (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, "Too %B arguments for `%A' at %0 versus invocation at %1 [info -f g77 M GLOBALS]") ! FFEBAD_MSGS1 (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, "Argument #%B of `%A' is %C at %0 but is %D at %1 [info -f g77 M GLOBALS]") ! FFEBAD_MSGS1 (FFEBAD_ARRAY_LARGE, FATAL, "Array `%A' at %0 is too large to handle") ! FFEBAD_MSGS1 (FFEBAD_SFUNC_UNUSED, WARN, "Statement function `%A' defined at %0 is not used") ! FFEBAD_MSGS1 (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, "Internal compiler error -- cannot perform operation") #undef INFORM --- 34,1096 ---- #define SEVERE FFEBAD_severitySEVERE #define DISASTER FFEBAD_severityDISASTER ! FFEBAD_MSG (FFEBAD_MISSING_FIRST_BINARY_OPERAND, FATAL, ! /* xgettext:no-c-format */ "Missing first operand for binary operator at %0") ! FFEBAD_MSG (FFEBAD_NULL_CHAR_CONST, WARN, ! /* xgettext:no-c-format */ "Zero-length character constant at %0") ! FFEBAD_MSG (FFEBAD_INVALID_TOKEN_IN_EXPRESSION, FATAL, ! /* xgettext:no-c-format */ "Invalid token at %0 in expression or subexpression at %1") ! FFEBAD_MSG (FFEBAD_MISSING_OPERAND_FOR_OPERATOR, FATAL, ! /* xgettext:no-c-format */ "Missing operand for operator at %1 at end of expression at %0") ! FFEBAD_MSG (FFEBAD_LABEL_ALREADY_DEFINED, FATAL, ! /* xgettext:no-c-format */ "Label %A already defined at %1 when redefined at %0") ! FFEBAD_MSG (FFEBAD_UNRECOGNIZED_CHARACTER, FATAL, ! /* xgettext:no-c-format */ "Unrecognized character at %0 [info -f g77 M LEX]") ! FFEBAD_MSG (FFEBAD_LABEL_WITHOUT_STMT, WARN, ! /* xgettext:no-c-format */ "Label definition %A at %0 on empty statement (as of %1)") ! FFEBAD_MSG (FFEBAD_EXTRA_LABEL_DEF, FATAL, ! /* xgettext:no-c-format */ ! LONG("Extra label definition %A at %0 -- perhaps previous label definition %B at %1 should have CONTINUE statement?") ! /* xgettext:no-c-format */ ! SHORT("Extra label definition %A at %0 following label definition %B at %1")) ! FFEBAD_MSG (FFEBAD_FIRST_CHAR_INVALID, FATAL, ! /* xgettext:no-c-format */ "Invalid first character at %0 [info -f g77 M LEX]") ! FFEBAD_MSG (FFEBAD_LINE_TOO_LONG, FATAL, ! /* xgettext:no-c-format */ "Line too long as of %0 [info -f g77 M LEX]") ! FFEBAD_MSG (FFEBAD_LABEL_FIELD_NOT_NUMERIC, FATAL, ! /* xgettext:no-c-format */ "Non-numeric character at %0 in label field [info -f g77 M LEX]") ! FFEBAD_MSG (FFEBAD_LABEL_NUMBER_INVALID, FATAL, ! /* xgettext:no-c-format */ "Label number at %0 not in range 1-99999") ! FFEBAD_MSG (FFEBAD_NON_ANSI_COMMENT, WARN, ! /* xgettext:no-c-format */ "At %0, '!' and '/*' are not valid comment delimiters") ! FFEBAD_MSG (FFEBAD_NON_ANSI_CONTINUATION_COLUMN, WARN, ! /* xgettext:no-c-format */ "Continuation indicator at %0 must appear in column 6 [info -f g77 M LEX]") ! FFEBAD_MSG (FFEBAD_LABEL_ON_CONTINUATION, FATAL, ! /* xgettext:no-c-format */ "Label at %0 invalid with continuation line indicator at %1 [info -f g77 M LEX]") ! FFEBAD_MSG (FFEBAD_INVALID_CONTINUATION, FATAL, ! /* xgettext:no-c-format */ ! LONG("Continuation indicator at %0 invalid on first non-comment line of file or following END or INCLUDE [info -f g77 M LEX]") ! /* xgettext:no-c-format */ ! SHORT("Continuation indicator at %0 invalid here [info -f g77 M LEX]")) ! FFEBAD_MSG (FFEBAD_NO_CLOSING_APOSTROPHE, FATAL, ! /* xgettext:no-c-format */ "Character constant at %0 has no closing apostrophe at %1") ! FFEBAD_MSG (FFEBAD_NOT_ENOUGH_HOLLERITH_CHARS, FATAL, ! /* xgettext:no-c-format */ "Hollerith constant at %0 specified %A more characters than are present as of %1") ! FFEBAD_MSG (FFEBAD_MISSING_CLOSE_PAREN, FATAL, ! /* xgettext:no-c-format */ "Missing close parenthese at %0 needed to match open parenthese at %1") ! FFEBAD_MSG (FFEBAD_INTEGER_TOO_LARGE, FATAL, ! /* xgettext:no-c-format */ "Integer at %0 too large") ! FFEBAD_MSG (FFEBAD_BAD_MAGICAL, WARN, ! /* xgettext:no-c-format */ ! LONG("Integer at %0 too large except as negative number (preceded by unary minus sign)") ! /* xgettext:no-c-format */ ! SHORT("Non-negative integer at %0 too large")) ! FFEBAD_MSG (FFEBAD_BAD_MAGICAL_PRECEDENCE, WARN, ! /* xgettext:no-c-format */ ! 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") ! /* xgettext:no-c-format */ ! SHORT("Integer at %0 too large (%2 has precedence over %1)")) ! FFEBAD_MSG (FFEBAD_BAD_MAGICAL_BINARY, WARN, ! /* xgettext:no-c-format */ ! 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") ! /* xgettext:no-c-format */ ! SHORT("Integer at %0 too large (needs unary, not binary, minus at %1)")) ! FFEBAD_MSG (FFEBAD_BAD_MAGICAL_PRECEDENCE_BINARY, WARN, ! /* xgettext:no-c-format */ ! 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") ! /* xgettext:no-c-format */ ! 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, ! /* xgettext:no-c-format */ "Period at %0 not followed by digits for floating-point number or by `NOT.', `TRUE.', or `FALSE.'") ! FFEBAD_MSG (FFEBAD_INSERTING_PERIOD, FATAL, ! /* xgettext:no-c-format */ "Missing close-period between `.%A' at %0 and %1") ! FFEBAD_MSG (FFEBAD_INVALID_EXPONENT, FATAL, ! /* xgettext:no-c-format */ "Invalid exponent at %0 for real constant at %1; nondigit `%A' in exponent field") ! FFEBAD_MSG (FFEBAD_MISSING_EXPONENT_VALUE, FATAL, ! /* xgettext:no-c-format */ "Missing value at %1 for real-number exponent at %0") ! FFEBAD_MSG (FFEBAD_MISSING_BINARY_OPERATOR, FATAL, ! /* xgettext:no-c-format */ "Expected binary operator between expressions at %0 and at %1") ! FFEBAD_MSG (FFEBAD_INVALID_DOTDOT, FATAL, ! /* xgettext:no-c-format */ ! LONG("Period at %0 not followed by valid keyword forming a valid binary operator; `.%A.' is not a valid binary operator") ! /* xgettext:no-c-format */ ! SHORT("`.%A.' at %0 not a binary operator")) ! FFEBAD_MSG (FFEBAD_QUOTE_MISSES_DIGITS, FATAL, ! /* xgettext:no-c-format */ ! LONG("Double-quote at %0 not followed by a string of valid octal digits at %1") ! /* xgettext:no-c-format */ ! SHORT("Invalid octal constant at %0")) ! FFEBAD_MSG (FFEBAD_INVALID_BINARY_DIGIT, FATAL, ! /* xgettext:no-c-format */ ! LONG("Invalid binary digit(s) found in string of digits at %0") ! /* xgettext:no-c-format */ ! SHORT("Invalid binary constant at %0")) ! FFEBAD_MSG (FFEBAD_INVALID_HEX_DIGIT, FATAL, ! /* xgettext:no-c-format */ ! LONG("Invalid hexadecimal digit(s) found in string of digits at %0") ! /* xgettext:no-c-format */ ! SHORT("Invalid hexadecimal constant at %0")) ! FFEBAD_MSG (FFEBAD_INVALID_OCTAL_DIGIT, FATAL, ! /* xgettext:no-c-format */ ! LONG("Invalid octal digit(s) found in string of digits at %0") ! /* xgettext:no-c-format */ ! SHORT("Invalid octal constant at %0")) ! FFEBAD_MSG (FFEBAD_INVALID_RADIX_SPECIFIER, FATAL, ! /* xgettext:no-c-format */ ! LONG("Invalid radix specifier `%A' at %0 for typeless constant at %1") ! /* xgettext:no-c-format */ ! SHORT("Invalid typeless constant at %1")) ! FFEBAD_MSG (FFEBAD_INVALID_TYPELESS_BINARY_DIGIT, FATAL, ! /* xgettext:no-c-format */ ! LONG("Invalid binary digit(s) found in string of digits at %0") ! /* xgettext:no-c-format */ ! SHORT("Invalid binary constant at %0")) ! FFEBAD_MSG (FFEBAD_INVALID_TYPELESS_OCTAL_DIGIT, FATAL, ! /* xgettext:no-c-format */ ! LONG("Invalid octal digit(s) found in string of digits at %0") ! /* xgettext:no-c-format */ ! SHORT("Invalid octal constant at %0")) ! FFEBAD_MSG (FFEBAD_INVALID_TYPELESS_HEX_DIGIT, FATAL, ! /* xgettext:no-c-format */ ! LONG("Invalid hexadecimal digit(s) found in string of digits at %0") ! /* xgettext:no-c-format */ ! SHORT("Invalid hexadecimal constant at %0")) ! FFEBAD_MSG (FFEBAD_INVALID_COMPLEX_PART, FATAL, ! /* xgettext:no-c-format */ ! LONG("%A part of complex constant at %0 must be a real or integer constant -- otherwise use CMPLX() or COMPLEX() in place of ()") ! /* xgettext:no-c-format */ ! SHORT("%A part of complex constant at %0 not a real or integer constant")) ! FFEBAD_MSG (FFEBAD_INVALID_PERCENT, FATAL, ! /* xgettext:no-c-format */ ! LONG("Invalid keyword `%%%A' at %0 in this context") ! /* xgettext:no-c-format */ ! SHORT("Invalid keyword `%%%A' at %0")) ! FFEBAD_MSG (FFEBAD_NULL_EXPRESSION, FATAL, ! /* xgettext:no-c-format */ ! LONG("Null expression between %0 and %1 invalid in this context") ! /* xgettext:no-c-format */ ! SHORT("Invalid null expression between %0 and %1")) ! FFEBAD_MSG (FFEBAD_CONCAT_ARGS_TYPE, FATAL, ! /* xgettext:no-c-format */ ! LONG("Concatenation operator at %0 must operate on two subexpressions of character type, but neither subexpression at %1 or %2 is of character type") ! /* xgettext:no-c-format */ ! SHORT("Invalid operands at %1 and %2 for concatenation operator at %0")) ! FFEBAD_MSG (FFEBAD_CONCAT_ARG_TYPE, FATAL, ! /* xgettext:no-c-format */ ! LONG("Concatenation operator at %0 must operate on two subexpressions of character type, but the subexpression at %1 is not of character type") ! /* xgettext:no-c-format */ ! SHORT("Invalid operand at %1 for concatenation operator at %0")) ! FFEBAD_MSG (FFEBAD_CONCAT_ARG_KIND, FATAL, ! /* xgettext:no-c-format */ ! 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") ! /* xgettext:no-c-format */ ! SHORT("Invalid operand (is %A) at %1 for concatenation operator at %0")) ! FFEBAD_MSG (FFEBAD_MATH_ARGS_TYPE, FATAL, ! /* xgettext:no-c-format */ ! LONG("Arithmetic operator at %0 must operate on two subexpressions of arithmetic type, but neither subexpression at %1 or %2 is of arithmetic type") ! /* xgettext:no-c-format */ ! SHORT("Invalid operands at %1 and %2 for arithmetic operator at %0")) ! FFEBAD_MSG (FFEBAD_MATH_ARG_TYPE, FATAL, ! /* xgettext:no-c-format */ ! LONG("Arithmetic operator at %0 must operate on two subexpressions of arithmetic type, but the subexpression at %1 is not of arithmetic type") ! /* xgettext:no-c-format */ ! SHORT("Invalid operand at %1 for arithmetic operator at %0")) ! FFEBAD_MSG (FFEBAD_MATH_ARG_KIND, FATAL, ! /* xgettext:no-c-format */ ! 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") ! /* xgettext:no-c-format */ ! SHORT("Invalid operand (is %A) at %1 for arithmetic operator at %0")) ! FFEBAD_MSG (FFEBAD_NO_CLOSING_QUOTE, FATAL, ! /* xgettext:no-c-format */ ! LONG("Character constant at %0 has no closing quote at %1 [info -f g77 M LEX]") ! /* xgettext:no-c-format */ ! SHORT("Unterminated character constant at %0 [info -f g77 M LEX]")) ! FFEBAD_MSG (FFEBAD_BAD_CHAR_CONTINUE, FATAL, ! /* xgettext:no-c-format */ ! LONG("Continuation line at %0 must have initial `&' since it continues a character context [info -f g77 M LEX]") ! /* xgettext:no-c-format */ ! SHORT("Missing initial `&' on continuation line at %0 [info -f g77 M LEX]")) ! FFEBAD_MSG (FFEBAD_BAD_LEXTOK_CONTINUE, FATAL, ! /* xgettext:no-c-format */ ! LONG("Continuation line at %0 must have initial `&' since it continues a split lexical token [info -f g77 M LEX]") ! /* xgettext:no-c-format */ ! SHORT("Missing initial `&' on continuation line at %0 [info -f g77 M LEX]")) ! FFEBAD_MSG (FFEBAD_BAD_FREE_CONTINUE, FATAL, ! /* xgettext:no-c-format */ ! LONG("Continuation line at %0 invalid because it consists only of a single `&' as the only nonblank character") ! /* xgettext:no-c-format */ ! SHORT("Invalid continuation line at %0")) ! FFEBAD_MSG (FFEBAD_STMT_BEGINS_BAD, FATAL, ! /* xgettext:no-c-format */ ! LONG("Statement at %0 begins with invalid token [info -f g77 M LEX]") ! /* xgettext:no-c-format */ ! SHORT("Invalid statement at %0 [info -f g77 M LEX]")) ! FFEBAD_MSG (FFEBAD_SEMICOLON, FATAL, ! /* xgettext:no-c-format */ "Semicolon at %0 is an invalid token") ! FFEBAD_MSG (FFEBAD_UNREC_STMT, FATAL, ! /* xgettext:no-c-format */ ! LONG("Unrecognized statement name at %0 and invalid form for assignment or statement-function definition at %1") ! /* xgettext:no-c-format */ ! SHORT("Invalid statement at %0")) ! FFEBAD_MSG (FFEBAD_INVALID_STMT_FORM, FATAL, ! /* xgettext:no-c-format */ ! LONG("Invalid form for %A statement at %0") ! /* xgettext:no-c-format */ ! SHORT("Invalid %A statement at %0")) ! FFEBAD_MSG (FFEBAD_INVALID_HOLL_IN_STMT, FATAL, ! /* xgettext:no-c-format */ ! LONG("Invalid use of hollerith constant in statement at %0 -- enclose the constant in parentheses (for example, change BACKSPACE 2HAB to BACKSPACE (2HAB))") ! /* xgettext:no-c-format */ ! SHORT("Enclose hollerith constant in statement at %0 in parentheses")) ! FFEBAD_MSG (FFEBAD_FORMAT_EXTRA_COMMA, FATAL, ! /* xgettext:no-c-format */ "Extraneous comma in FORMAT statement at %0") ! FFEBAD_MSG (FFEBAD_FORMAT_MISSING_COMMA, WARN, ! /* xgettext:no-c-format */ "Missing comma in FORMAT statement at %0") ! FFEBAD_MSG (FFEBAD_FORMAT_SPURIOUS_SIGN, FATAL, ! /* xgettext:no-c-format */ "Spurious sign in FORMAT statement at %0") ! FFEBAD_MSG (FFEBAD_FORMAT_SPURIOUS_NUMBER, FATAL, ! /* xgettext:no-c-format */ "Spurious number in FORMAT statement at %0") ! FFEBAD_MSG (FFEBAD_FORMAT_TEXT_IN_NUMBER, FATAL, ! /* xgettext:no-c-format */ "Spurious text trailing number in FORMAT statement at %0") ! FFEBAD_MSG (FFEBAD_FORMAT_P_NOCOMMA, FATAL, ! /* xgettext:no-c-format */ ! LONG("nP control edit descriptor not followed by comma but followed by edit descriptor at %0 other than D, E, EN, F, or G") ! /* xgettext:no-c-format */ ! SHORT("Invalid edit descriptor at %0 following nP control edit descriptor")) ! FFEBAD_MSG (FFEBAD_FORMAT_BAD_SPEC, FATAL, ! /* xgettext:no-c-format */ "Unrecognized FORMAT specifier at %0") ! FFEBAD_MSG (FFEBAD_FORMAT_BAD_I_SPEC, FATAL, ! /* xgettext:no-c-format */ ! LONG("Invalid I specifier in FORMAT statement at %0 -- correct form: [r]Iw.[m]") ! /* xgettext:no-c-format */ ! SHORT("Invalid I specifier in FORMAT statement at %0")) ! FFEBAD_MSG (FFEBAD_FORMAT_BAD_B_SPEC, FATAL, ! /* xgettext:no-c-format */ ! LONG("Invalid B specifier in FORMAT statement at %0 -- correct form: [r]Bw.[m]") ! /* xgettext:no-c-format */ ! SHORT("Invalid B specifier in FORMAT statement at %0")) ! FFEBAD_MSG (FFEBAD_FORMAT_BAD_O_SPEC, FATAL, ! /* xgettext:no-c-format */ ! LONG("Invalid O specifier in FORMAT statement at %0 -- correct form: [r]Ow.[m]") ! /* xgettext:no-c-format */ ! SHORT("Invalid O specifier in FORMAT statement at %0")) ! FFEBAD_MSG (FFEBAD_FORMAT_BAD_Z_SPEC, FATAL, ! /* xgettext:no-c-format */ ! LONG("Invalid Z specifier in FORMAT statement at %0 -- correct form: [r]Zw.[m]") ! /* xgettext:no-c-format */ ! SHORT("Invalid Z specifier in FORMAT statement at %0")) ! FFEBAD_MSG (FFEBAD_FORMAT_BAD_F_SPEC, FATAL, ! /* xgettext:no-c-format */ ! LONG("Invalid F specifier in FORMAT statement at %0 -- correct form: [r]Fw.d") ! /* xgettext:no-c-format */ ! SHORT("Invalid F specifier in FORMAT statement at %0")) ! FFEBAD_MSG (FFEBAD_FORMAT_BAD_E_SPEC, FATAL, ! /* xgettext:no-c-format */ ! LONG("Invalid E specifier in FORMAT statement at %0 -- correct form: [r]Ew.d[Ee]") ! /* xgettext:no-c-format */ ! SHORT("Invalid E specifier in FORMAT statement at %0")) ! FFEBAD_MSG (FFEBAD_FORMAT_BAD_EN_SPEC, FATAL, ! /* xgettext:no-c-format */ ! LONG("Invalid EN specifier in FORMAT statement at %0 -- correct form: [r]ENw.d[Ee]") ! /* xgettext:no-c-format */ ! SHORT("Invalid EN specifier in FORMAT statement at %0")) ! FFEBAD_MSG (FFEBAD_FORMAT_BAD_G_SPEC, FATAL, ! /* xgettext:no-c-format */ ! LONG("Invalid G specifier in FORMAT statement at %0 -- correct form: [r]Gw.d[Ee]") ! /* xgettext:no-c-format */ ! SHORT("Invalid G specifier in FORMAT statement at %0")) ! FFEBAD_MSG (FFEBAD_FORMAT_BAD_L_SPEC, FATAL, ! /* xgettext:no-c-format */ ! LONG("Invalid L specifier in FORMAT statement at %0 -- correct form: [r]Lw") ! /* xgettext:no-c-format */ ! SHORT("Invalid L specifier in FORMAT statement at %0")) ! FFEBAD_MSG (FFEBAD_FORMAT_BAD_A_SPEC, FATAL, ! /* xgettext:no-c-format */ ! LONG("Invalid A specifier in FORMAT statement at %0 -- correct form: [r]A[w]") ! /* xgettext:no-c-format */ ! SHORT("Invalid A specifier in FORMAT statement at %0")) ! FFEBAD_MSG (FFEBAD_FORMAT_BAD_D_SPEC, FATAL, ! /* xgettext:no-c-format */ ! LONG("Invalid D specifier in FORMAT statement at %0 -- correct form: [r]Dw.d") ! /* xgettext:no-c-format */ ! SHORT("Invalid D specifier in FORMAT statement at %0")) ! FFEBAD_MSG (FFEBAD_FORMAT_BAD_Q_SPEC, FATAL, ! /* xgettext:no-c-format */ ! LONG("Invalid Q specifier in FORMAT statement at %0 -- correct form: Q") ! /* xgettext:no-c-format */ ! SHORT("Invalid Q specifier in FORMAT statement at %0")) ! FFEBAD_MSG (FFEBAD_FORMAT_BAD_DOLLAR_SPEC, FATAL, ! /* xgettext:no-c-format */ ! LONG("Invalid $ specifier in FORMAT statement at %0 -- correct form: $") ! /* xgettext:no-c-format */ ! SHORT("Invalid $ specifier in FORMAT statement at %0")) ! FFEBAD_MSG (FFEBAD_FORMAT_BAD_P_SPEC, FATAL, ! /* xgettext:no-c-format */ ! LONG("Invalid P specifier in FORMAT statement at %0 -- correct form: kP") ! /* xgettext:no-c-format */ ! SHORT("Invalid P specifier in FORMAT statement at %0")) ! FFEBAD_MSG (FFEBAD_FORMAT_BAD_T_SPEC, FATAL, ! /* xgettext:no-c-format */ ! LONG("Invalid T specifier in FORMAT statement at %0 -- correct form: Tn") ! /* xgettext:no-c-format */ ! SHORT("Invalid T specifier in FORMAT statement at %0")) ! FFEBAD_MSG (FFEBAD_FORMAT_BAD_TL_SPEC, FATAL, ! /* xgettext:no-c-format */ ! LONG("Invalid TL specifier in FORMAT statement at %0 -- correct form: TLn") ! /* xgettext:no-c-format */ ! SHORT("Invalid TL specifier in FORMAT statement at %0")) ! FFEBAD_MSG (FFEBAD_FORMAT_BAD_TR_SPEC, FATAL, ! /* xgettext:no-c-format */ ! LONG("Invalid TR specifier in FORMAT statement at %0 -- correct form: TRn") ! /* xgettext:no-c-format */ ! SHORT("Invalid TR specifier in FORMAT statement at %0")) ! FFEBAD_MSG (FFEBAD_FORMAT_BAD_X_SPEC, FATAL, ! /* xgettext:no-c-format */ ! LONG("Invalid X specifier in FORMAT statement at %0 -- correct form: nX") ! /* xgettext:no-c-format */ ! SHORT("Invalid X specifier in FORMAT statement at %0")) ! FFEBAD_MSG (FFEBAD_FORMAT_BAD_S_SPEC, FATAL, ! /* xgettext:no-c-format */ ! LONG("Invalid S specifier in FORMAT statement at %0 -- correct form: S") ! /* xgettext:no-c-format */ ! SHORT("Invalid S specifier in FORMAT statement at %0")) ! FFEBAD_MSG (FFEBAD_FORMAT_BAD_SP_SPEC, FATAL, ! /* xgettext:no-c-format */ ! LONG("Invalid SP specifier in FORMAT statement at %0 -- correct form: SP") ! /* xgettext:no-c-format */ ! SHORT("Invalid SP specifier in FORMAT statement at %0")) ! FFEBAD_MSG (FFEBAD_FORMAT_BAD_SS_SPEC, FATAL, ! /* xgettext:no-c-format */ ! LONG("Invalid SS specifier in FORMAT statement at %0 -- correct form: SS") ! /* xgettext:no-c-format */ ! SHORT("Invalid SS specifier in FORMAT statement at %0")) ! FFEBAD_MSG (FFEBAD_FORMAT_BAD_BN_SPEC, FATAL, ! /* xgettext:no-c-format */ ! LONG("Invalid BN specifier in FORMAT statement at %0 -- correct form: BN") ! /* xgettext:no-c-format */ ! SHORT("Invalid BN specifier in FORMAT statement at %0")) ! FFEBAD_MSG (FFEBAD_FORMAT_BAD_BZ_SPEC, FATAL, ! /* xgettext:no-c-format */ ! LONG("Invalid BZ specifier in FORMAT statement at %0 -- correct form: BZ") ! /* xgettext:no-c-format */ ! SHORT("Invalid BZ specifier in FORMAT statement at %0")) ! FFEBAD_MSG (FFEBAD_FORMAT_BAD_COLON_SPEC, FATAL, ! /* xgettext:no-c-format */ ! LONG("Invalid : specifier in FORMAT statement at %0 -- correct form: :") ! /* xgettext:no-c-format */ ! SHORT("Invalid : specifier in FORMAT statement at %0")) ! FFEBAD_MSG (FFEBAD_FORMAT_BAD_H_SPEC, FATAL, ! /* xgettext:no-c-format */ ! 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)") ! /* xgettext:no-c-format */ ! SHORT("Invalid H specifier in FORMAT statement at %0")) ! FFEBAD_MSG (FFEBAD_FORMAT_MISSING_PAREN, FATAL, ! /* xgettext:no-c-format */ "Missing close-parenthese(s) in FORMAT statement at %0") ! FFEBAD_MSG (FFEBAD_FORMAT_MISSING_DOT, FATAL, ! /* xgettext:no-c-format */ "Missing number following period in FORMAT statement at %0") ! FFEBAD_MSG (FFEBAD_FORMAT_MISSING_EXP, FATAL, ! /* xgettext:no-c-format */ "Missing number following `E' in FORMAT statement at %0") ! FFEBAD_MSG (FFEBAD_FORMAT_EXPR_TOKEN, FATAL, ! /* xgettext:no-c-format */ ! 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") ! /* xgettext:no-c-format */ ! SHORT("Invalid token with FORMAT run-time expression at %0")) ! FFEBAD_MSG (FFEBAD_TRAILING_COMMA, WARN, ! /* xgettext:no-c-format */ "Spurious trailing comma preceding terminator at %0") ! FFEBAD_MSG (FFEBAD_INTERFACE_ASSIGNMENT, WARN, ! /* xgettext:no-c-format */ "At %0, specify OPERATOR instead of ASSIGNMENT for INTERFACE statement not specifying the assignment operator (=)") ! FFEBAD_MSG (FFEBAD_INTERFACE_OPERATOR, WARN, ! /* xgettext:no-c-format */ "At %0, specify ASSIGNMENT instead of OPERATOR for INTERFACE statement specifying the assignment operator (=)") ! FFEBAD_MSG (FFEBAD_INTERFACE_NONLETTER, FATAL, ! /* xgettext:no-c-format */ ! LONG("Defined operator at %0 contains a nonletter -- must contain only letters A-Z (or a-z)") ! /* xgettext:no-c-format */ ! SHORT("Nonletter in defined operator at %0")) ! FFEBAD_MSG (FFEBAD_INVALID_TYPEDECL_ATTR, FATAL, ! /* xgettext:no-c-format */ ! LONG("Invalid type-declaration attribute at %0 -- must be one of: DIMENSION(array-spec), EXTERNAL, INTRINSIC, PARAMETER, or SAVE") ! /* xgettext:no-c-format */ ! SHORT("Invalid type-declaration attribute at %0")) ! FFEBAD_MSG (FFEBAD_INVALID_TYPEDECL_INIT, FATAL, ! /* xgettext:no-c-format */ "Cannot specify =initialization-expr at %0 unless `::' appears before list of objects") ! FFEBAD_MSG (FFEBAD_LABEL_USE_DEF, FATAL, ! /* xgettext:no-c-format */ "Reference to label at %1 inconsistent with its definition at %0") ! FFEBAD_MSG (FFEBAD_LABEL_USE_USE, FATAL, ! /* xgettext:no-c-format */ "Reference to label at %1 inconsistent with earlier reference at %0") ! FFEBAD_MSG (FFEBAD_LABEL_DEF_DO, FATAL, ! /* xgettext:no-c-format */ "DO-statement reference to label at %1 follows its definition at %0") ! FFEBAD_MSG (FFEBAD_LABEL_BLOCK, WARN, ! /* xgettext:no-c-format */ "Reference to label at %1 is outside block containing definition at %0") ! FFEBAD_MSG (FFEBAD_LABEL_DO_BLOCK_DO, FATAL, ! /* xgettext:no-c-format */ "DO-statement references to label at %0 and %2 separated by unterminated block starting at %1") ! FFEBAD_MSG (FFEBAD_LABEL_DO_BLOCK_END, FATAL, ! /* xgettext:no-c-format */ "DO-statement reference to label at %0 and label definition at %2 separated by unterminated block starting at %1") ! FFEBAD_MSG (FFEBAD_INVALID_LABEL_DEF, FATAL, ! /* xgettext:no-c-format */ "Label definition at %0 invalid on this kind of statement") ! FFEBAD_MSG (FFEBAD_ORDER_1, FATAL, ! /* xgettext:no-c-format */ "Statement at %0 invalid in this context") ! FFEBAD_MSG (FFEBAD_ORDER_2, FATAL, ! /* xgettext:no-c-format */ "Statement at %0 invalid in context established by statement at %1") ! FFEBAD_MSG (FFEBAD_CONSTRUCT_NAMED, FATAL, ! /* xgettext:no-c-format */ "Statement at %0 must specify construct name specified at %1") ! FFEBAD_MSG (FFEBAD_CONSTRUCT_NOT_NAMED, FATAL, ! /* xgettext:no-c-format */ "Construct name at %0 superfluous, no construct name specified at %1") ! FFEBAD_MSG (FFEBAD_CONSTRUCT_WRONG_NAME, FATAL, ! /* xgettext:no-c-format */ "Construct name at %0 not the same as construct name at %1") ! FFEBAD_MSG (FFEBAD_CONSTRUCT_NO_DO_NAME, FATAL, ! /* xgettext:no-c-format */ "Construct name at %0 does not match construct name for any containing DO constructs") ! FFEBAD_MSG (FFEBAD_DO_HAD_LABEL, FATAL, ! /* xgettext:no-c-format */ "Label definition missing at %0 for DO construct specifying label at %1") ! FFEBAD_MSG (FFEBAD_AFTER_ELSE, FATAL, ! /* xgettext:no-c-format */ "Statement at %0 follows ELSE block for IF construct at %1") ! FFEBAD_MSG (FFEBAD_FORMAT_NO_LABEL_DEF, FATAL, ! /* xgettext:no-c-format */ "No label definition for FORMAT statement at %0") ! FFEBAD_MSG (FFEBAD_SECOND_ELSE_WHERE, FATAL, ! /* xgettext:no-c-format */ "Second occurrence of ELSE WHERE at %0 within WHERE at %1") ! FFEBAD_MSG (FFEBAD_END_WO, WARN, ! /* xgettext:no-c-format */ "END statement at %0 missing `%A' keyword required for internal or module procedure(s) bounded by %1") ! FFEBAD_MSG (FFEBAD_INVALID_MODULE_PROCEDURE, FATAL, ! /* xgettext:no-c-format */ "MODULE PROCEDURE statement at %0 disallowed because INTERFACE at %1 specifies no generic name, operator, or assignment") ! FFEBAD_MSG (FFEBAD_BLOCKDATA_NOT_NAMED, FATAL, ! /* xgettext:no-c-format */ "BLOCK DATA name at %0 superfluous, no name specified at %1") ! FFEBAD_MSG (FFEBAD_PROGRAM_NOT_NAMED, FATAL, ! /* xgettext:no-c-format */ "Program name at %0 superfluous, no PROGRAM statement specified at %1") ! FFEBAD_MSG (FFEBAD_UNIT_WRONG_NAME, FATAL, ! /* xgettext:no-c-format */ "Program unit name at %0 not the same as name at %1") ! FFEBAD_MSG (FFEBAD_TYPE_WRONG_NAME, FATAL, ! /* xgettext:no-c-format */ "Type name at %0 not the same as name at %1") ! FFEBAD_MSG (FFEBAD_EOF_BEFORE_BLOCK_END, FATAL, ! /* xgettext:no-c-format */ "End of source file before end of block started at %0") ! FFEBAD_MSG (FFEBAD_UNDEF_LABEL, FATAL, ! /* xgettext:no-c-format */ "Undefined label, first referenced at %0") ! FFEBAD_MSG (FFEBAD_CONFLICTING_SAVES, WARN, ! /* xgettext:no-c-format */ "SAVE statement or attribute at %1 cannot be specified along with SAVE statement or attribute at %0") ! FFEBAD_MSG (FFEBAD_CONFLICTING_ACCESSES, FATAL, ! /* xgettext:no-c-format */ "PUBLIC or PRIVATE statement at %1 cannot be specified along with PUBLIC or PRIVATE statement at %0") ! FFEBAD_MSG (FFEBAD_RETURN_IN_MAIN, WARN, ! /* xgettext:no-c-format */ "RETURN statement at %0 invalid within a main program unit") ! FFEBAD_MSG (FFEBAD_ALTRETURN_IN_PROGRAM, FATAL, ! /* xgettext:no-c-format */ "Alternate return specifier at %0 invalid within a main program unit") ! FFEBAD_MSG (FFEBAD_ALTRETURN_IN_FUNCTION, FATAL, ! /* xgettext:no-c-format */ "Alternate return specifier at %0 invalid within a function") ! FFEBAD_MSG (FFEBAD_DERIVTYP_ACCESS, FATAL, ! /* xgettext:no-c-format */ "Access specifier or PRIVATE statement at %0 invalid for derived-type definition within other than the specification part of a module") ! FFEBAD_MSG (FFEBAD_DERIVTYP_ACCESS_FIRST, FATAL, ! /* xgettext:no-c-format */ "Access specifier at %0 must immediately follow derived-type statement at %1 with no intervening statements") ! FFEBAD_MSG (FFEBAD_DERIVTYP_NO_COMPONENTS, FATAL, ! /* xgettext:no-c-format */ "No components specified as of %0 for derived-type definition beginning at %1") ! FFEBAD_MSG (FFEBAD_STRUCT_NO_COMPONENTS, FATAL, ! /* xgettext:no-c-format */ "No components specified as of %0 for structure definition beginning at %1") ! FFEBAD_MSG (FFEBAD_STRUCT_MISSING_NAME, FATAL, ! /* xgettext:no-c-format */ "Missing structure name for outer structure definition at %0") ! FFEBAD_MSG (FFEBAD_STRUCT_IGNORING_FIELD, FATAL, ! /* xgettext:no-c-format */ "Field names at %0 for outer structure definition -- specify them in a subsequent RECORD statement instead") ! FFEBAD_MSG (FFEBAD_STRUCT_MISSING_FIELD, FATAL, ! /* xgettext:no-c-format */ "Missing field name(s) for structure definition at %0 within structure definition at %1") ! FFEBAD_MSG (FFEBAD_MAP_NO_COMPONENTS, FATAL, ! /* xgettext:no-c-format */ "No components specified as of %0 for map beginning at %1") ! FFEBAD_MSG (FFEBAD_UNION_NO_TWO_MAPS, FATAL, ! /* xgettext:no-c-format */ "Zero or one maps specified as of %0 for union beginning at %1 -- at least two are required") ! FFEBAD_MSG (FFEBAD_MISSING_SPECIFIER, FATAL, ! /* xgettext:no-c-format */ "Missing %A specifier in statement at %0") ! FFEBAD_MSG (FFEBAD_NAMELIST_ITEMS, FATAL, ! /* xgettext:no-c-format */ "Items in I/O list starting at %0 invalid for namelist-directed I/O") ! FFEBAD_MSG (FFEBAD_CONFLICTING_SPECS, FATAL, ! /* xgettext:no-c-format */ "Conflicting I/O control specifications at %0 and %1") ! FFEBAD_MSG (FFEBAD_NO_UNIT_SPEC, FATAL, ! /* xgettext:no-c-format */ "No UNIT= specifier in I/O control list at %0") ! FFEBAD_MSG (FFEBAD_MISSING_ADVANCE_SPEC, FATAL, ! /* xgettext:no-c-format */ "Specification at %0 requires ADVANCE=`NO' specification in same I/O control list") ! FFEBAD_MSG (FFEBAD_MISSING_FORMAT_SPEC, FATAL, ! /* xgettext:no-c-format */ "Specification at %0 requires explicit FMT= specification in same I/O control list") ! FFEBAD_MSG (FFEBAD_SPEC_VALUE, FATAL, ! /* xgettext:no-c-format */ ! LONG("Unrecognized value for character constant at %0 -- expecting %A") ! /* xgettext:no-c-format */ ! SHORT("Unrecognized value for character constant at %0")) ! FFEBAD_MSG (FFEBAD_CASE_SECOND_DEFAULT, FATAL, ! /* xgettext:no-c-format */ "Second occurrence of CASE DEFAULT at %0 within SELECT CASE at %1") ! FFEBAD_MSG (FFEBAD_CASE_DUPLICATE, FATAL, ! /* xgettext:no-c-format */ "Duplicate or overlapping case values/ranges at %0 and %1") ! FFEBAD_MSG (FFEBAD_CASE_TYPE_DISAGREE, FATAL, ! /* xgettext:no-c-format */ "Type and/or kind-type parameter disagreement between CASE value or value within range at %0 and SELECT CASE at %1") ! FFEBAD_MSG (FFEBAD_CASE_LOGICAL_RANGE, FATAL, ! /* xgettext:no-c-format */ "Range specification at %0 invalid for CASE statement within logical-type SELECT CASE statement") ! FFEBAD_MSG (FFEBAD_CASE_BAD_RANGE, FATAL, ! /* xgettext:no-c-format */ ! LONG("Range specification at %0 invalid -- at least one expression must be specified, or use CASE DEFAULT") ! /* xgettext:no-c-format */ ! SHORT("Range specification at %0 invalid")) ! FFEBAD_MSG (FFEBAD_CASE_RANGE_USELESS, INFORM, ! /* xgettext:no-c-format */ ! LONG("Range specification at %0 useless; first expression greater than second expression in range, so range can never be matched by any selection expression") ! /* xgettext:no-c-format */ ! SHORT("Useless range at %0")) ! FFEBAD_MSG (FFEBAD_F90, FATAL, ! /* xgettext:no-c-format */ "Fortran 90 feature at %0 unsupported") ! FFEBAD_MSG (FFEBAD_KINDTYPE, FATAL, ! /* xgettext:no-c-format */ ! LONG("Invalid kind at %0 for type at %1 -- unsupported or not permitted") ! /* xgettext:no-c-format */ ! SHORT("Invalid kind at %0 for type at %1")) ! FFEBAD_MSG (FFEBAD_BAD_IMPLICIT, FATAL, ! /* xgettext:no-c-format */ ! 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") ! /* xgettext:no-c-format */ ! SHORT("Cannot establish implicit type for initial letter `%A' at %0")) ! FFEBAD_MSG (FFEBAD_SYMERR, FATAL, ! /* xgettext:no-c-format */ "Invalid declaration of or reference to symbol `%A' at %0 [initially seen at %1]") ! FFEBAD_MSG (FFEBAD_LABEL_WRONG_PLACE, FATAL, ! /* xgettext:no-c-format */ ! LONG("Label definition %A (at %0) invalid -- must be in columns 1-5") ! /* xgettext:no-c-format */ ! SHORT("Invalid label definition %A (at %0)")) ! FFEBAD_MSG (FFEBAD_NULL_ELEMENT, FATAL, ! /* xgettext:no-c-format */ "Null element at %0 for array reference at %1") ! FFEBAD_MSG (FFEBAD_TOO_FEW_ELEMENTS, FATAL, ! /* xgettext:no-c-format */ "Too few elements (%A missing) as of %0 for array reference at %1") ! FFEBAD_MSG (FFEBAD_TOO_MANY_ELEMENTS, FATAL, ! /* xgettext:no-c-format */ "Too many elements as of %0 for array reference at %1") ! FFEBAD_MSG (FFEBAD_MISSING_COLON_IN_SUBSTR, FATAL, ! /* xgettext:no-c-format */ "Missing colon as of %0 in substring reference for %1") ! FFEBAD_MSG (FFEBAD_BAD_SUBSTR, FATAL, ! /* xgettext:no-c-format */ "Invalid use at %0 of substring operator on %1") ! FFEBAD_MSG (FFEBAD_RANGE_SUBSTR, WARN, ! /* xgettext:no-c-format */ "Substring begin/end point at %0 out of defined range") ! FFEBAD_MSG (FFEBAD_RANGE_ARRAY, WARN, ! /* xgettext:no-c-format */ "Array element value at %0 out of defined range") ! FFEBAD_MSG (FFEBAD_EXPR_WRONG, FATAL, ! /* xgettext:no-c-format */ "Expression at %0 has incorrect data type or rank for its context") ! FFEBAD_MSG (FFEBAD_DIV_BY_ZERO, WARN, ! /* xgettext:no-c-format */ "Division by 0 (zero) at %0 (IEEE not yet supported)") ! FFEBAD_MSG (FFEBAD_DO_STEP_ZERO, FATAL, ! /* xgettext:no-c-format */ "%A step count known to be 0 (zero) at %0") ! FFEBAD_MSG (FFEBAD_DO_END_OVERFLOW, WARN, ! /* xgettext:no-c-format */ "%A end value plus step count known to overflow at %0") ! FFEBAD_MSG (FFEBAD_DO_IMP_OVERFLOW, WARN, ! /* xgettext:no-c-format */ "%A begin, end, and step-count values known to result in implementation-dependent behavior due to overflow(s) in intermediate calculations at %0") ! FFEBAD_MSG (FFEBAD_DO_NULL, WARN, ! /* xgettext:no-c-format */ "%A begin, end, and step-count values known to result in no iterations at %0") ! FFEBAD_MSG (FFEBAD_BAD_TYPES, FATAL, ! /* xgettext:no-c-format */ "Type disagreement between expressions at %0 and %1") ! FFEBAD_MSG (FFEBAD_FORMAT_EXPR_SPEC, FATAL, ! /* xgettext:no-c-format */ ! LONG("Run-time expression at %0 in FORMAT statement that does not follow the first executable statement in the program unit -- move the statement") ! /* xgettext:no-c-format */ ! SHORT("FORMAT at %0 with run-time expression must follow first executable statement")) ! FFEBAD_MSG (FFEBAD_BAD_IMPDO, FATAL, ! /* xgettext:no-c-format */ ! LONG("Unexpected token at %0 in implied-DO construct at %1 -- form of implied-DO is `(item-list,do-var=start,end[,incr])'") ! /* xgettext:no-c-format */ ! SHORT("Unexpected token at %0 in implied-DO construct at %1")) ! FFEBAD_MSG (FFEBAD_BAD_IMPDCL, FATAL, ! /* xgettext:no-c-format */ "No specification for implied-DO iterator `%A' at %0") ! FFEBAD_MSG (FFEBAD_IMPDO_PAREN, WARN, ! /* xgettext:no-c-format */ "Gratuitous parentheses surround implied-DO construct at %0") ! FFEBAD_MSG (FFEBAD_ZERO_SIZE, FATAL, ! /* xgettext:no-c-format */ "Zero-size specification invalid at %0") ! FFEBAD_MSG (FFEBAD_ZERO_ARRAY, FATAL, ! /* xgettext:no-c-format */ "Zero-size array at %0") ! FFEBAD_MSG (FFEBAD_BAD_COMPLEX, FATAL, ! /* xgettext:no-c-format */ "Target machine does not support complex entity of kind specified at %0") ! FFEBAD_MSG (FFEBAD_BAD_DBLCMPLX, FATAL, ! /* xgettext:no-c-format */ "Target machine does not support DOUBLE COMPLEX, specified at %0") ! FFEBAD_MSG (FFEBAD_BAD_POWER, WARN, ! /* xgettext:no-c-format */ "Attempt to raise constant zero to a power at %0") ! FFEBAD_MSG (FFEBAD_BOOL_ARGS_TYPE, FATAL, ! /* xgettext:no-c-format */ ! 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") ! /* xgettext:no-c-format */ ! SHORT("Invalid operands at %1 and %2 for boolean operator at %0")) ! FFEBAD_MSG (FFEBAD_BOOL_ARG_TYPE, FATAL, ! /* xgettext:no-c-format */ ! LONG("Boolean/logical operator at %0 must operate on two subexpressions of logical type, but the subexpression at %1 is not of logical type") ! /* xgettext:no-c-format */ ! SHORT("Invalid operand at %1 for boolean operator at %0")) ! FFEBAD_MSG (FFEBAD_BOOL_ARG_KIND, FATAL, ! /* xgettext:no-c-format */ ! 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") ! /* xgettext:no-c-format */ ! SHORT("Invalid operand (is %A) at %1 for boolean operator at %0")) ! FFEBAD_MSG (FFEBAD_NOT_ARG_TYPE, FATAL, ! /* xgettext:no-c-format */ ! LONG(".NOT. operator at %0 must operate on subexpression of logical type, but the subexpression at %1 is not of logical type") ! /* xgettext:no-c-format */ ! SHORT("Invalid operand at %1 for .NOT. operator at %0")) ! FFEBAD_MSG (FFEBAD_NOT_ARG_KIND, FATAL, ! /* xgettext:no-c-format */ ! LONG(".NOT. operator at %0 must operate on scalar subexpressions -- but the subexpression at %1 is %A") ! /* xgettext:no-c-format */ ! SHORT("Invalid operand (is %A) at %1 for .NOT. operator at %0")) ! FFEBAD_MSG (FFEBAD_EQOP_ARGS_TYPE, FATAL, ! /* xgettext:no-c-format */ ! 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") ! /* xgettext:no-c-format */ ! SHORT("Invalid operands at %1 and %2 for equality operator at %0")) ! FFEBAD_MSG (FFEBAD_EQOP_ARG_TYPE, FATAL, ! /* xgettext:no-c-format */ ! 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") ! /* xgettext:no-c-format */ ! SHORT("Invalid operand at %1 for equality operator at %0")) ! FFEBAD_MSG (FFEBAD_EQOP_ARG_KIND, FATAL, ! /* xgettext:no-c-format */ ! 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") ! /* xgettext:no-c-format */ ! SHORT("Invalid operand (is %A) at %1 for equality operator at %0")) ! FFEBAD_MSG (FFEBAD_RELOP_ARGS_TYPE, FATAL, ! /* xgettext:no-c-format */ ! 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") ! /* xgettext:no-c-format */ ! SHORT("Invalid operands at %1 and %2 for relational operator at %0")) ! FFEBAD_MSG (FFEBAD_RELOP_ARG_TYPE, FATAL, ! /* xgettext:no-c-format */ ! 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") ! /* xgettext:no-c-format */ ! SHORT("Invalid operand at %1 for relational operator at %0")) ! FFEBAD_MSG (FFEBAD_RELOP_ARG_KIND, FATAL, ! /* xgettext:no-c-format */ ! 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") ! /* xgettext:no-c-format */ ! SHORT("Invalid operand (is %A) at %1 for relational operator at %0")) ! FFEBAD_MSG (FFEBAD_INTRINSIC_REF, FATAL, ! /* xgettext:no-c-format */ ! LONG("Reference to intrinsic `%A' at %0 invalid -- one or more arguments have incorrect type") ! /* xgettext:no-c-format */ ! SHORT("Invalid reference to intrinsic `%A' at %0")) ! FFEBAD_MSG (FFEBAD_INTRINSIC_TOOFEW, FATAL, ! /* xgettext:no-c-format */ ! LONG("Too few arguments passed to intrinsic `%A' at %0") ! /* xgettext:no-c-format */ ! SHORT("Too few arguments for intrinsic `%A' at %0")) ! FFEBAD_MSG (FFEBAD_INTRINSIC_TOOMANY, FATAL, ! /* xgettext:no-c-format */ ! LONG("Too many arguments passed to intrinsic `%A' at %0") ! /* xgettext:no-c-format */ ! SHORT("Too many arguments for intrinsic `%A' at %0")) ! FFEBAD_MSG (FFEBAD_INTRINSIC_DISABLED, FATAL, ! /* xgettext:no-c-format */ ! LONG("Reference to disabled intrinsic `%A' at %0") ! /* xgettext:no-c-format */ ! SHORT("Disabled intrinsic `%A' at %0")) ! FFEBAD_MSG (FFEBAD_INTRINSIC_IS_SUBR, FATAL, ! /* xgettext:no-c-format */ ! LONG("Reference to intrinsic subroutine `%A' as if it were a function at %0") ! /* xgettext:no-c-format */ ! SHORT("Function reference to intrinsic subroutine `%A' at %0")) ! FFEBAD_MSG (FFEBAD_INTRINSIC_IS_FUNC, FATAL, ! /* xgettext:no-c-format */ ! LONG("Reference to intrinsic function `%A' as if it were a subroutine at %0") ! /* xgettext:no-c-format */ ! SHORT("Subroutine reference to intrinsic function `%A' at %0")) ! FFEBAD_MSG (FFEBAD_INTRINSIC_UNIMPL, FATAL, ! /* xgettext:no-c-format */ ! LONG("Reference to unimplemented intrinsic `%A' at %0 -- use EXTERNAL to reference user-written procedure with this name") ! /* xgettext:no-c-format */ ! SHORT("Unimplemented intrinsic `%A' at %0")) ! FFEBAD_MSG (FFEBAD_INTRINSIC_UNIMPLW, WARN, ! /* xgettext:no-c-format */ ! LONG("Reference to unimplemented intrinsic `%A' at %0 (assumed EXTERNAL)") ! /* xgettext:no-c-format */ ! SHORT("Unimplemented intrinsic `%A' at %0 (assumed EXTERNAL)")) ! FFEBAD_MSG (FFEBAD_INTRINSIC_AMBIG, FATAL, ! /* xgettext:no-c-format */ "Reference to generic intrinsic `%A' at %0 could be to form %B or %C") ! FFEBAD_MSG (FFEBAD_INTRINSIC_CMPAMBIG, FATAL, ! /* xgettext:no-c-format */ "Ambiguous use of intrinsic `%A' at %0 [info -f g77 M CMPAMBIG]") ! FFEBAD_MSG (FFEBAD_INTRINSIC_EXPIMP, WARN, ! /* xgettext:no-c-format */ "Intrinsic `%A' referenced %Bly at %0, %Cly at %1 [info -f g77 M EXPIMP]") ! FFEBAD_MSG (FFEBAD_INTRINSIC_GLOBAL, WARN, ! /* xgettext:no-c-format */ "Same name `%A' used for %B at %0 and %C at %1 [info -f g77 M INTGLOB]") ! FFEBAD_MSG (FFEBAD_INTRINSIC_TYPE, WARN, ! /* xgettext:no-c-format */ "Explicit type declaration for intrinsic `%A' disagrees with invocation at %0") ! FFEBAD_MSG (FFEBAD_OPEN_INCLUDE, FATAL, ! /* xgettext:no-c-format */ "Unable to open INCLUDE file `%A' at %0") ! FFEBAD_MSG (FFEBAD_DOITER, FATAL, ! /* xgettext:no-c-format */ ! LONG("Attempt to modify variable `%A' at %0 while it serves as DO-loop iterator at %1") ! /* xgettext:no-c-format */ ! SHORT("Modification of DO-loop iterator `%A' at %0")) ! FFEBAD_MSG (FFEBAD_DOITER_IMPDO, FATAL, ! /* xgettext:no-c-format */ ! LONG("Attempt to modify variable `%A' via item #%B in list at %0 while it serves as implied-DO iterator at %1") ! /* xgettext:no-c-format */ ! SHORT("Modification of DO-loop iterator `%A' at %0")) ! FFEBAD_MSG (FFEBAD_TOO_MANY_DIMS, FATAL, ! /* xgettext:no-c-format */ ! LONG("Array has too many dimensions, as of dimension specifier at %0") ! /* xgettext:no-c-format */ ! SHORT("Too many dimensions at %0")) ! FFEBAD_MSG (FFEBAD_NULL_ARGUMENT, FATAL, ! /* xgettext:no-c-format */ "Null argument at %0 for statement function reference at %1") ! FFEBAD_MSG (FFEBAD_NULL_ARGUMENT_W, WARN, ! /* xgettext:no-c-format */ "Null argument at %0 for procedure invocation at %1") ! FFEBAD_MSG (FFEBAD_TOO_FEW_ARGUMENTS, FATAL, ! /* xgettext:no-c-format */ "%A too few arguments (starting with dummy argument `%B') as of %0 for statement function reference at %1") ! FFEBAD_MSG (FFEBAD_TOO_MANY_ARGUMENTS, FATAL, ! /* xgettext:no-c-format */ "%A too many arguments as of %0 for statement function reference at %1") ! FFEBAD_MSG (FFEBAD_ARRAY_AS_SFARG, FATAL, ! /* xgettext:no-c-format */ "Array supplied at %1 for dummy argument `%A' in statement function reference at %0") ! FFEBAD_MSG (FFEBAD_FORMAT_UNSUPPORTED, FATAL, ! /* xgettext:no-c-format */ "Unsupported FORMAT specifier at %0") ! FFEBAD_MSG (FFEBAD_FORMAT_VARIABLE, FATAL, ! /* xgettext:no-c-format */ "Variable-expression FORMAT specifier at %0 -- unsupported") ! FFEBAD_MSG (FFEBAD_OPEN_UNSUPPORTED, FATAL, ! /* xgettext:no-c-format */ ! 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") ! /* xgettext:no-c-format */ ! SHORT("Unsupported OPEN control item at %0")) ! FFEBAD_MSG (FFEBAD_INQUIRE_UNSUPPORTED, FATAL, ! /* xgettext:no-c-format */ ! LONG("Unsupported INQUIRE control item at %0 -- ACTION=, CARRIAGECONTROL=, DEFAULTFILE=, DELIM=, KEYED=, ORGANIZATION=, PAD=, POSITION=, READ=, READWRITE=, RECORDTYPE=, and WRITE= are not supported") ! /* xgettext:no-c-format */ ! SHORT("Unsupported INQUIRE control item at %0")) ! FFEBAD_MSG (FFEBAD_READ_UNSUPPORTED, FATAL, ! /* xgettext:no-c-format */ ! LONG("Unsupported READ control item at %0 -- ADVANCE=, EOR=, KEYEQ=, KEYGE=, KEYGT=, KEYID=, NULLS=, and SIZE= are not supported") ! /* xgettext:no-c-format */ ! SHORT("Unsupported READ control item at %0")) ! FFEBAD_MSG (FFEBAD_WRITE_UNSUPPORTED, FATAL, ! /* xgettext:no-c-format */ ! LONG("Unsupported WRITE control item at %0 -- ADVANCE= and EOR= are not supported") ! /* xgettext:no-c-format */ ! SHORT("Unsupported WRITE control item at %0")) ! FFEBAD_MSG (FFEBAD_VXT_UNSUPPORTED, FATAL, ! /* xgettext:no-c-format */ "Unsupported VXT statement at %0") ! FFEBAD_MSG (FFEBAD_DATA_REINIT, FATAL, ! /* xgettext:no-c-format */ "Attempt to specify second initial value for `%A' at %0") ! FFEBAD_MSG (FFEBAD_DATA_TOOFEW, FATAL, ! /* xgettext:no-c-format */ "Too few initial values in list of initializers for `%A' at %0") ! FFEBAD_MSG (FFEBAD_DATA_TOOMANY, FATAL, ! /* xgettext:no-c-format */ "Too many initial values in list of initializers starting at %0") ! FFEBAD_MSG (FFEBAD_DATA_RANGE, FATAL, ! /* xgettext:no-c-format */ "Array or substring specification for `%A' out of range in statement at %0") ! FFEBAD_MSG (FFEBAD_DATA_SUBSCRIPT, FATAL, ! /* xgettext:no-c-format */ "Array subscript #%B out of range for initialization of `%A' in statement at %0") ! FFEBAD_MSG (FFEBAD_DATA_ZERO, FATAL, ! /* xgettext:no-c-format */ "Implied do-loop step count of 0 (zero) for iteration variable `%A' in statement at %0") ! FFEBAD_MSG (FFEBAD_DATA_EMPTY, FATAL, ! /* xgettext:no-c-format */ "Implied do-loop iteration count of 0 (zero) for iteration variable `%A' in statement at %0") ! FFEBAD_MSG (FFEBAD_DATA_EVAL, FATAL, ! /* xgettext:no-c-format */ "Not an integer constant expression in implied do-loop in statement at %0") ! FFEBAD_MSG (FFEBAD_DATA_MULTIPLE, FATAL, ! /* xgettext:no-c-format */ "Attempt to specify second initial value for element of `%A' at %0") ! FFEBAD_MSG (FFEBAD_EQUIV_COMMON, FATAL, ! /* xgettext:no-c-format */ "Attempt to EQUIVALENCE common areas `%A' and `%B' at %0") ! FFEBAD_MSG (FFEBAD_EQUIV_ALIGN, FATAL, ! /* xgettext:no-c-format */ "Can't place `%A' as directed by EQUIVALENCE due to alignment restrictions") ! FFEBAD_MSG (FFEBAD_EQUIV_MISMATCH, FATAL, ! /* xgettext:no-c-format */ "Mismatched EQUIVALENCE requirements for placement of `%A' at both %C and %D bytes offset from `%B'") ! FFEBAD_MSG (FFEBAD_EQUIV_RANGE, FATAL, ! /* xgettext:no-c-format */ "Array or substring specification for `%A' out of range in EQUIVALENCE statement") ! FFEBAD_MSG (FFEBAD_EQUIV_SUBSTR, FATAL, ! /* xgettext:no-c-format */ "Substring of non-CHARACTER entity `%A' in EQUIVALENCE statement") ! FFEBAD_MSG (FFEBAD_EQUIV_ARRAY, FATAL, ! /* xgettext:no-c-format */ "Array reference to scalar variable `%A' in EQUIVALENCE statement") ! FFEBAD_MSG (FFEBAD_EQUIV_SUBSCRIPT, WARN, ! /* xgettext:no-c-format */ "Array subscript #%B out of range for EQUIVALENCE of `%A'") ! FFEBAD_MSG (FFEBAD_COMMON_PAD, WARN, ! /* xgettext:no-c-format */ ! LONG("Padding of %A %D required before `%B' in common block `%C' at %0 -- consider reordering members, largest-type-size first") ! /* xgettext:no-c-format */ ! SHORT("Padding of %A %D required before `%B' in common block `%C' at %0")) ! FFEBAD_MSG (FFEBAD_COMMON_NEG, FATAL, ! /* xgettext:no-c-format */ "Attempt to extend COMMON area beyond its starting point via EQUIVALENCE of `%A'") ! FFEBAD_MSG (FFEBAD_EQUIV_FEW, FATAL, ! /* xgettext:no-c-format */ "Too few elements in reference to array `%A' in EQUIVALENCE statement") ! FFEBAD_MSG (FFEBAD_EQUIV_MANY, FATAL, ! /* xgettext:no-c-format */ "Too many elements in reference to array `%A' in EQUIVALENCE statement") ! FFEBAD_MSG (FFEBAD_MIXED_TYPES, WARN, ! /* xgettext:no-c-format */ "Mixed CHARACTER and non-CHARACTER types via COMMON/EQUIVALENCE -- for example, `%A' and `%B'") ! FFEBAD_MSG (FFEBAD_IMPLICIT_ADJLEN, FATAL, ! /* xgettext:no-c-format */ ! LONG("Invalid length specification at %0 for IMPLICIT statement -- must be integer constant expression") ! /* xgettext:no-c-format */ ! SHORT("Invalid length specification at %0")) ! FFEBAD_MSG (FFEBAD_ENTRY_CONFLICTS, FATAL, ! /* xgettext:no-c-format */ ! 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") ! /* xgettext:no-c-format */ ! SHORT("Type of ENTRY point at %0 to function conflicts with type(s) of previous entrypoint(s)")) ! FFEBAD_MSG (FFEBAD_RETURN_VALUE_UNSET, WARN, ! /* xgettext:no-c-format */ "Return value `%A' for FUNCTION at %0 not referenced in subprogram") ! FFEBAD_MSG (FFEBAD_COMMON_ALREADY_INIT, FATAL, ! /* xgettext:no-c-format */ ! LONG("Common block `%A' initialized at %0 already initialized at %1 -- only one program unit may specify initial values for a particular common block") ! /* xgettext:no-c-format */ ! SHORT("Common block `%A' initialized at %0 already initialized at %1")) ! FFEBAD_MSG (FFEBAD_COMMON_INIT_PAD, WARN, ! /* xgettext:no-c-format */ ! LONG("Initial padding for common block `%A' is %B %C at %0 -- consider reordering members, largest-type-size first") ! /* xgettext:no-c-format */ ! SHORT("Initial padding for common block `%A' is %B %C at %0")) ! FFEBAD_MSG (FFEBAD_COMMON_DIFF_PAD, FATAL, ! /* xgettext:no-c-format */ ! LONG("Initial padding for common block `%A' is %B %D at %0 but %C %E at %1 -- consider reordering members, largest-type-size first") ! /* xgettext:no-c-format */ ! SHORT("Initial padding for common block `%A' is %B %D at %0 but %C %E at %1")) ! FFEBAD_MSG (FFEBAD_COMMON_DIFF_SAVE, WARN, ! /* xgettext:no-c-format */ "Common block `%A' is SAVEd, explicitly or implicitly, at %0 but not SAVEd at %1") ! FFEBAD_MSG (FFEBAD_COMMON_DIFF_SIZE, WARN, ! /* xgettext:no-c-format */ "Common block `%A' is %B %D in length at %0 but %C %E at %1") ! FFEBAD_MSG (FFEBAD_COMMON_ENLARGED, FATAL, ! /* xgettext:no-c-format */ ! 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") ! /* xgettext:no-c-format */ ! 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, ! /* xgettext:no-c-format */ "Blank common initialized at %0") ! FFEBAD_MSG (FFEBAD_NEED_INTRINSIC, WARN, ! /* xgettext:no-c-format */ "Intrinsic `%A' is passed as actual argument at %0 but not explicitly declared INTRINSIC") ! FFEBAD_MSG (FFEBAD_NEED_EXTERNAL, WARN, ! /* xgettext:no-c-format */ "External procedure `%A' is passed as actual argument at %0 but not explicitly declared EXTERNAL") ! FFEBAD_MSG (FFEBAD_SYMBOL_UPPER_CASE, WARN, ! /* xgettext:no-c-format */ "Character `%A' (for example) is upper-case in symbol name at %0") ! FFEBAD_MSG (FFEBAD_SYMBOL_LOWER_CASE, WARN, ! /* xgettext:no-c-format */ "Character `%A' (for example) is lower-case in symbol name at %0") ! FFEBAD_MSG (FFEBAD_SYMBOL_NOLOWER_INITCAP, WARN, ! /* xgettext:no-c-format */ "Character `%A' not followed at some point by lower-case character in symbol name at %0") ! FFEBAD_MSG (FFEBAD_SYMBOL_LOWER_INITCAP, WARN, ! /* xgettext:no-c-format */ "Initial character `%A' is lower-case in symbol name at %0") ! FFEBAD_MSG (FFEBAD_DO_REAL, WARN, ! /* xgettext:no-c-format */ ! LONG("DO-variable `%A' is type REAL or DOUBLE PRECISION at %0 -- unexpected behavior likely") ! /* xgettext:no-c-format */ ! SHORT("DO-variable `%A' is type REAL or DOUBLE PRECISION at %0")) ! FFEBAD_MSG (FFEBAD_NAMELIST_CASE, WARN, ! /* xgettext:no-c-format */ "NAMELIST not adequately supported by run-time library for source files with case preserved") ! FFEBAD_MSG (FFEBAD_NESTED_PERCENT, WARN, ! /* xgettext:no-c-format */ "Nested %% construct (%%VAL, %%REF, or %%DESCR) at %0") ! FFEBAD_MSG (FFEBAD_ACTUALARG, WARN, ! /* xgettext:no-c-format */ ! 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") ! /* xgettext:no-c-format */ ! SHORT("Invalid actual argument at %0")) ! FFEBAD_MSG (FFEBAD_QUAD_UNSUPPORTED, FATAL, ! /* xgettext:no-c-format */ ! LONG("Quadruple-precision floating-point unsupported -- treating constant at %0 as double-precision") ! /* xgettext:no-c-format */ ! SHORT("Quadruple-precision floating-point unsupported")) ! FFEBAD_MSG (FFEBAD_TOO_BIG_INIT, WARN, ! /* xgettext:no-c-format */ ! LONG("Initialization of large (%B-unit) aggregate area `%A' at %0 slow and takes lots of memory during g77 compile") ! /* xgettext:no-c-format */ ! SHORT("This could take a while (initializing `%A' at %0)...")) ! FFEBAD_MSG (FFEBAD_BLOCKDATA_STMT, FATAL, ! /* xgettext:no-c-format */ "Statement at %0 invalid in BLOCK DATA program unit at %1") ! FFEBAD_MSG (FFEBAD_TRUNCATING_CHARACTER, FATAL, ! /* xgettext:no-c-format */ "Truncating characters on right side of character constant at %0") ! FFEBAD_MSG (FFEBAD_TRUNCATING_HOLLERITH, FATAL, ! /* xgettext:no-c-format */ "Truncating characters on right side of hollerith constant at %0") ! FFEBAD_MSG (FFEBAD_TRUNCATING_NUMERIC, FATAL, ! /* xgettext:no-c-format */ "Truncating non-zero data on left side of numeric constant at %0") ! FFEBAD_MSG (FFEBAD_TRUNCATING_TYPELESS, FATAL, ! /* xgettext:no-c-format */ "Truncating non-zero data on left side of typeless constant at %0") ! FFEBAD_MSG (FFEBAD_TYPELESS_OVERFLOW, FATAL, ! /* xgettext:no-c-format */ "Typeless constant at %0 too large") ! FFEBAD_MSG (FFEBAD_AMPERSAND, WARN, ! /* xgettext:no-c-format */ "First-column ampersand continuation at %0") ! FFEBAD_MSG (FFEBAD_FILEWIDE_ALREADY_SEEN, FATAL, ! /* xgettext:no-c-format */ "Global name `%A' defined at %0 already defined at %1 [info -f g77 M GLOBALS]") ! FFEBAD_MSG (FFEBAD_FILEWIDE_ALREADY_SEEN_W, WARN, ! /* xgettext:no-c-format */ "Global name `%A' defined at %0 already defined at %1 [info -f g77 M GLOBALS]") ! FFEBAD_MSG (FFEBAD_FILEWIDE_DISAGREEMENT, FATAL, ! /* xgettext:no-c-format */ "Global name `%A' is %B at %0 but is %C at %1 [info -f g77 M GLOBALS]") ! FFEBAD_MSG (FFEBAD_FILEWIDE_DISAGREEMENT_W, WARN, ! /* xgettext:no-c-format */ "Global name `%A' is %B at %0 but is %C at %1 [info -f g77 M GLOBALS]") ! FFEBAD_MSG (FFEBAD_FILEWIDE_TYPE_MISMATCH, FATAL, ! /* xgettext:no-c-format */ "Global name `%A' at %0 has different type at %1 [info -f g77 M GLOBALS]") ! FFEBAD_MSG (FFEBAD_FILEWIDE_TYPE_MISMATCH_W, WARN, ! /* xgettext:no-c-format */ "Global name `%A' at %0 has different type at %1 [info -f g77 M GLOBALS]") ! FFEBAD_MSG (FFEBAD_FILEWIDE_NARGS, FATAL, ! /* xgettext:no-c-format */ "Too %B arguments passed to `%A' at %0 versus definition at %1 [info -f g77 M GLOBALS]") ! FFEBAD_MSG (FFEBAD_FILEWIDE_NARGS_W, WARN, ! /* xgettext:no-c-format */ "Too %B arguments for `%A' at %0 versus invocation at %1 [info -f g77 M GLOBALS]") ! FFEBAD_MSG (FFEBAD_FILEWIDE_ARG, FATAL, ! /* xgettext:no-c-format */ "Argument #%B of `%A' is %C at %0 but is %D at %1 [info -f g77 M GLOBALS]") ! FFEBAD_MSG (FFEBAD_FILEWIDE_ARG_W, WARN, ! /* xgettext:no-c-format */ "Argument #%B of `%A' is %C at %0 but is %D at %1 [info -f g77 M GLOBALS]") ! FFEBAD_MSG (FFEBAD_ARRAY_LARGE, FATAL, ! /* xgettext:no-c-format */ "Array `%A' at %0 is too large to handle") ! FFEBAD_MSG (FFEBAD_SFUNC_UNUSED, WARN, ! /* xgettext:no-c-format */ "Statement function `%A' defined at %0 is not used") ! FFEBAD_MSG (FFEBAD_INTRINSIC_Y2KBAD, WARN, ! /* xgettext:no-c-format */ "Intrinsic `%A', invoked at %0, known to be non-Y2K-compliant [info -f g77 M Y2KBAD]") ! FFEBAD_MSG (FFEBAD_NOCANDO, DISASTER, ! /* xgettext:no-c-format */ "Internal compiler error -- cannot perform operation") #undef INFORM diff -Nrc3pad gcc-3.0.4/gcc/f/bad.h gcc-3.1/gcc/f/bad.h *** gcc-3.0.4/gcc/f/bad.h Sat Mar 27 10:23:38 1999 --- gcc-3.1/gcc/f/bad.h Wed Jan 23 03:01:52 2002 *************** *** 1,5 **** /* bad.h -- Public #include File (module.h template V1.0) ! Copyright (C) 1995 Free Software Foundation, Inc. Contributed by James Craig Burley. This file is part of GNU Fortran. --- 1,5 ---- /* bad.h -- Public #include File (module.h template V1.0) ! Copyright (C) 1995, 2002 Free Software Foundation, Inc. Contributed by James Craig Burley. This file is part of GNU Fortran. *************** the Free Software Foundation, 59 Temple *** 27,44 **** /* Allow multiple inclusion to work. */ ! #ifndef _H_f_bad ! #define _H_f_bad /* Simple definitions and enumerations. */ typedef enum { ! #define FFEBAD_MSGS1(KWD,SEV,MSG) KWD, ! #define FFEBAD_MSGS2(KWD,SEV,LMSG,SMSG) KWD, #include "bad.def" ! #undef FFEBAD_MSGS1 ! #undef FFEBAD_MSGS2 FFEBAD } ffebad; --- 27,42 ---- /* Allow multiple inclusion to work. */ ! #ifndef GCC_F_BAD_H ! #define GCC_F_BAD_H /* Simple definitions and enumerations. */ typedef enum { ! #define FFEBAD_MSG(KWD,SEV,MSG) KWD, #include "bad.def" ! #undef FFEBAD_MSG FFEBAD } ffebad; *************** void ffebad_init_0 (void); *** 82,88 **** bool ffebad_is_fatal (ffebad errnum); ffebadSeverity ffebad_severity (ffebad errnum); bool ffebad_start_ (bool lex_override, ffebad errnum, ffebadSeverity sev, ! const char *message); void ffebad_string (const char *string); /* Define macros. */ --- 80,86 ---- bool ffebad_is_fatal (ffebad errnum); ffebadSeverity ffebad_severity (ffebad errnum); bool ffebad_start_ (bool lex_override, ffebad errnum, ffebadSeverity sev, ! const char *msgid); void ffebad_string (const char *string); /* Define macros. */ *************** void ffebad_string (const char *string); *** 95,102 **** #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_terminate_0() #define ffebad_terminate_1() #define ffebad_terminate_2() --- 93,100 ---- #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(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() *************** void ffebad_string (const char *string); *** 105,108 **** /* End of #include file. */ ! #endif --- 103,106 ---- /* End of #include file. */ ! #endif /* ! GCC_F_BAD_H */ diff -Nrc3pad gcc-3.0.4/gcc/f/bit.h gcc-3.1/gcc/f/bit.h *** gcc-3.0.4/gcc/f/bit.h Mon Feb 15 18:16:27 1999 --- gcc-3.1/gcc/f/bit.h Sat May 26 01:31:46 2001 *************** the Free Software Foundation, 59 Temple *** 27,34 **** /* Allow multiple inclusion to work. */ ! #ifndef _H_f_bit ! #define _H_f_bit /* Simple definitions and enumerations. */ --- 27,34 ---- /* Allow multiple inclusion to work. */ ! #ifndef GCC_F_BIT_H ! #define GCC_F_BIT_H /* Simple definitions and enumerations. */ *************** void ffebit_test (ffebit b, ffebitCount *** 81,84 **** /* End of #include file. */ ! #endif --- 81,84 ---- /* End of #include file. */ ! #endif /* ! GCC_F_BIT_H */ diff -Nrc3pad gcc-3.0.4/gcc/f/bld.c gcc-3.1/gcc/f/bld.c *** gcc-3.0.4/gcc/f/bld.c Sat Apr 17 10:58:21 1999 --- gcc-3.1/gcc/f/bld.c Sun Dec 23 04:59:08 2001 *************** the Free Software Foundation, 59 Temple *** 46,52 **** /* Externals defined here. */ ! ffebldArity ffebld_arity_op_[] = { #define FFEBLD_OP(KWD,NAME,ARITY) ARITY, --- 46,52 ---- /* Externals defined here. */ ! const ffebldArity ffebld_arity_op_[(int) FFEBLD_op] = { #define FFEBLD_OP(KWD,NAME,ARITY) ARITY, *************** static ffebldConstant ffebld_constant_ho *** 203,209 **** static ffebldConstant ffebld_constant_typeless_[FFEBLD_constTYPELESS_LAST - FFEBLD_constTYPELESS_FIRST + 1]; ! static const char *ffebld_op_string_[] = { #define FFEBLD_OP(KWD,NAME,ARITY) NAME, --- 203,209 ---- static ffebldConstant ffebld_constant_typeless_[FFEBLD_constTYPELESS_LAST - FFEBLD_constTYPELESS_FIRST + 1]; ! static const char *const ffebld_op_string_[] = { #define FFEBLD_OP(KWD,NAME,ARITY) NAME, *************** ffebld_constant_cmp (ffebldConstant c1, *** 438,870 **** } } - /* 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; --- 438,443 ---- *************** ffebld_constant_new_typeless_val (ffebld *** 1991,2066 **** 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. */ --- 1564,1569 ---- *************** ffebld_constantarray_put (ffebldConstant *** 4408,5187 **** } } - /* 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(); */ --- 3911,3916 ---- diff -Nrc3pad gcc-3.0.4/gcc/f/bld.h gcc-3.1/gcc/f/bld.h *** gcc-3.0.4/gcc/f/bld.h Sat Apr 17 10:58:22 1999 --- gcc-3.1/gcc/f/bld.h Sun Dec 23 04:59:08 2001 *************** the Free Software Foundation, 59 Temple *** 27,34 **** /* Allow multiple inclusion to work. */ ! #ifndef _H_f_bld ! #define _H_f_bld /* Simple definitions and enumerations. */ --- 27,34 ---- /* Allow multiple inclusion to work. */ ! #ifndef GCC_F_BLD_H ! #define GCC_F_BLD_H /* Simple definitions and enumerations. */ *************** typedef struct _ffebld_pool_stack_ *ffeb *** 124,136 **** #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. */ --- 124,130 ---- *************** struct _ffebld_pool_stack_ *** 480,494 **** /* Global objects accessed by users of this module. */ ! extern ffebldArity ffebld_arity_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 --- 474,485 ---- /* Global objects accessed by users of this module. */ ! 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); bool ffebld_constant_is_magical (ffebldConstant c); bool ffebld_constant_is_zero (ffebldConstant c); #if FFETARGET_okCHARACTER1 *************** ffebldConstant ffebld_constant_new_typel *** 691,700 **** 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, --- 682,687 ---- *************** void ffebld_constantarray_preparray (voi *** 711,722 **** 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); --- 698,703 ---- *************** ffetargetCharacterSize ffebld_size_max ( *** 1036,1039 **** /* End of #include file. */ ! #endif --- 1017,1020 ---- /* End of #include file. */ ! #endif /* ! GCC_F_BLD_H */ diff -Nrc3pad gcc-3.0.4/gcc/f/bugs.texi gcc-3.1/gcc/f/bugs.texi *** gcc-3.0.4/gcc/f/bugs.texi Sun Jun 10 11:12:57 2001 --- gcc-3.1/gcc/f/bugs.texi Sat Feb 2 11:42:19 2002 *************** *** 7,15 **** @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,1996,1997,1998,1999,2000,2001 ! @set last-update-bugs 2001-06-10 @include root.texi --- 7,15 ---- @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,1996,1997,1998,1999,2000,2001,2002 ! @set last-update-bugs 2002-02-01 @include root.texi *************** configuration that it no longer makes re *** 120,127 **** Included with this item is the fact that @code{g77} doesn't recognize that, on IEEE-754/854-compliant systems, @samp{0./0.} should produce a NaN and no warning instead of the value @samp{0.} and a warning. - This is to be fixed in version 0.6, when @code{g77} will use the - @code{gcc} back end's constant-handling mechanisms to replace its own. @cindex compiler speed @cindex speed, of compiler --- 120,125 ---- *************** areas having any initialized elements. *** 138,144 **** For example, @samp{REAL A(1000000)} followed by @samp{DATA A(1)/1/} takes up way too much time and space, including the size of the generated assembler file. - This is to be mitigated somewhat in version 0.6. Version 0.5.18 improves cases like this---specifically, cases of @emph{sparse} initialization that leave large, contiguous --- 136,141 ---- *************** initialized arrays begin to cause respon *** 191,216 **** than linear performance would suggest. @end ifset - @cindex debugging - @cindex common blocks - @cindex equivalence areas - @cindex local equivalence areas - @item - Previous versions of @code{g77} didn't emit information on - variable and array members of common blocks and equivalences - for use with a debugger (the @samp{-g} command-line option). - As of the version of @code{g77} shipped with version 3.0 of - @code{GCC}, this is corrected. - - 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. - @end ifset - @cindex code, displaying main source @cindex displaying main source code @cindex debugging main source code --- 188,193 ---- *************** working together properly sooner. *** 252,259 **** such as the Digital Semiconductor (``DEC'') Alpha. This problem is largely resolved as of version 0.5.23. - Version 0.6 should solve most or all remaining problems - (such as cross-compiling involving 64-bit machines). @cindex padding @cindex structures --- 229,234 ---- diff -Nrc3pad gcc-3.0.4/gcc/f/com-rt.def gcc-3.1/gcc/f/com-rt.def *** gcc-3.0.4/gcc/f/com-rt.def Wed Aug 23 21:16:19 2000 --- gcc-3.1/gcc/f/com-rt.def Fri Dec 14 21:06:18 2001 *************** DEFGFRT (FFECOM_gfrtL_LOG10, "log10", FF *** 273,279 **** 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_fsqrt", 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) --- 273,279 ---- 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) diff -Nrc3pad gcc-3.0.4/gcc/f/com.c gcc-3.1/gcc/f/com.c *** gcc-3.0.4/gcc/f/com.c Sat Jun 2 15:39:46 2001 --- gcc-3.1/gcc/f/com.c Wed Apr 17 01:44:02 2002 *************** *** 1,5 **** /* com.c -- Implementation File (module.c template V1.0) ! Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001 Free Software Foundation, Inc. Contributed by James Craig Burley. --- 1,5 ---- /* com.c -- Implementation File (module.c template V1.0) ! Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by James Craig Burley. *************** the Free Software Foundation, 59 Temple *** 81,87 **** /* Include files. */ #include "proj.h" - #if FFECOM_targetCURRENT == FFECOM_targetGCC #include "flags.h" #include "rtl.h" #include "toplev.h" --- 81,86 ---- *************** the Free Software Foundation, 59 Temple *** 89,148 **** #include "output.h" /* Must follow tree.h so TREE_CODE is defined! */ #include "convert.h" #include "ggc.h" ! #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 ! ! #ifdef RLIMIT_STACK ! # include ! #endif ! ! #if HAVE_FCNTL_H ! # include ! #endif ! ! /* This defines "errno" properly for VMS, and gives us EACCES. */ ! #include ! ! #if HAVE_STDLIB_H ! # include ! #else ! char *getenv (); ! #endif ! ! #if HAVE_UNISTD_H ! # include ! #endif /* VMS-specific definitions */ #ifdef VMS --- 88,97 ---- #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 *************** typedef struct { unsigned :16, :16, :16; *** 169,180 **** #define INCLUDE_LEN_FUDGE 10 /* leave room for VMS syntax conversion */ #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" --- 118,123 ---- *************** typedef struct { unsigned :16, :16, :16; *** 194,206 **** /* Externals defined here. */ - #if FFECOM_targetCURRENT == FFECOM_targetGCC - - /* ~~gcc/tree.h *should* declare this, because toplev.c and dwarfout.c - reference it. */ - - const char * const language_string = "GNU F77"; - /* Stream for reading from the input file. */ FILE *finput; --- 137,142 ---- *************** tree ffecom_f2c_ftnlen_two_node; *** 268,274 **** 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. */ --- 204,209 ---- *************** typedef enum *** 308,323 **** /* 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; --- 243,255 ---- *************** struct _ffecom_concat_list_ *** 326,336 **** ffetargetCharacterSize minlen; ffetargetCharacterSize maxlen; }; - #endif /* FFECOM_targetCURRENT == FFECOM_targetGCC */ /* Static functions (internal). */ ! #if FFECOM_targetCURRENT == FFECOM_targetGCC 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, --- 258,267 ---- ffetargetCharacterSize minlen; ffetargetCharacterSize maxlen; }; /* Static functions (internal). */ ! 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, *************** static tree ffecom_vardesc_array_ (ffesy *** 423,434 **** 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 void delete_block (tree block); --- 354,363 ---- *************** static tree storedecls (tree decls); *** 447,461 **** 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_ (const char *name); - static void ffecom_initialize_char_syntax_ (void); 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. */ --- 376,386 ---- *************** static ffesymbol ffecom_primary_entry_ = *** 463,469 **** 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_; --- 388,393 ---- *************** static tree ffecom_gfrt_[FFECOM_gfrt] *** 504,510 **** /* Holds the external names of the functions. */ ! static const char *ffecom_gfrt_name_[FFECOM_gfrt] = { #define DEFGFRT(CODE,NAME,TYPE,ARGS,VOLATILE,COMPLEX,CONST) NAME, --- 428,434 ---- /* Holds the external names of the functions. */ ! static const char *const ffecom_gfrt_name_[FFECOM_gfrt] = { #define DEFGFRT(CODE,NAME,TYPE,ARGS,VOLATILE,COMPLEX,CONST) NAME, *************** static const char *ffecom_gfrt_name_[FFE *** 514,520 **** /* Whether the function returns. */ ! static bool ffecom_gfrt_volatile_[FFECOM_gfrt] = { #define DEFGFRT(CODE,NAME,TYPE,ARGS,VOLATILE,COMPLEX,CONST) VOLATILE, --- 438,444 ---- /* Whether the function returns. */ ! static const bool ffecom_gfrt_volatile_[FFECOM_gfrt] = { #define DEFGFRT(CODE,NAME,TYPE,ARGS,VOLATILE,COMPLEX,CONST) VOLATILE, *************** static bool ffecom_gfrt_volatile_[FFECOM *** 524,530 **** /* Whether the function returns type complex. */ ! static bool ffecom_gfrt_complex_[FFECOM_gfrt] = { #define DEFGFRT(CODE,NAME,TYPE,ARGS,VOLATILE,COMPLEX,CONST) COMPLEX, --- 448,454 ---- /* Whether the function returns type complex. */ ! static const bool ffecom_gfrt_complex_[FFECOM_gfrt] = { #define DEFGFRT(CODE,NAME,TYPE,ARGS,VOLATILE,COMPLEX,CONST) COMPLEX, *************** static bool ffecom_gfrt_complex_[FFECOM_ *** 535,541 **** /* Whether the function is const (i.e., has no side effects and only depends on its arguments). */ ! static bool ffecom_gfrt_const_[FFECOM_gfrt] = { #define DEFGFRT(CODE,NAME,TYPE,ARGS,VOLATILE,COMPLEX,CONST) CONST, --- 459,465 ---- /* 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, *************** static bool ffecom_gfrt_const_[FFECOM_gf *** 545,551 **** /* Type code for the function return value. */ ! static ffecomRttype_ ffecom_gfrt_type_[FFECOM_gfrt] = { #define DEFGFRT(CODE,NAME,TYPE,ARGS,VOLATILE,COMPLEX,CONST) TYPE, --- 469,475 ---- /* Type code for the function return value. */ ! static const ffecomRttype_ ffecom_gfrt_type_[FFECOM_gfrt] = { #define DEFGFRT(CODE,NAME,TYPE,ARGS,VOLATILE,COMPLEX,CONST) TYPE, *************** static ffecomRttype_ ffecom_gfrt_type_[F *** 555,573 **** /* String of codes for the function's arguments. */ ! static const char *ffecom_gfrt_argstring_[FFECOM_gfrt] = { #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, --- 479,494 ---- /* String of codes for the function's arguments. */ ! static const char *const ffecom_gfrt_argstring_[FFECOM_gfrt] = { #define DEFGFRT(CODE,NAME,TYPE,ARGS,VOLATILE,COMPLEX,CONST) ARGS, #include "com-rt.def" #undef DEFGFRT }; /* Internal macros. */ /* 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, *************** static struct binding_level *global_bind *** 643,649 **** /* Binding level structures are initialized by copying this one. */ ! static struct binding_level clear_binding_level = {NULL, NULL, NULL, NULL_BINDING_LEVEL, 0}; --- 564,570 ---- /* Binding level structures are initialized by copying this one. */ ! static const struct binding_level clear_binding_level = {NULL, NULL, NULL, NULL_BINDING_LEVEL, 0}; *************** static tree named_labels; *** 689,696 **** /* 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. --- 610,615 ---- *************** ffecom_subscript_check_ (tree array, tre *** 727,742 **** } element = ffecom_save_tree (element); ! 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)); } { --- 646,691 ---- } element = ffecom_save_tree (element); ! 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 3 ! || TREE_OVERFLOW (TYPE_SIZE (type))))) { ffebad_start (FFEBAD_ARRAY_LARGE); ffebad_string (ffesymbol_text (s)); *************** ffecom_check_size_overflow_ (ffesymbol s *** 2362,2374 **** return type; } - #endif /* Builds a length argument (PARM_DECL). Also wraps type in an array type where the dimension info is (1:size) where 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) { --- 2280,2290 ---- *************** ffecom_char_enhance_arg_ (tree *xtype, f *** 2387,2395 **** else 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) --- 2303,2309 ---- *************** ffecom_char_enhance_arg_ (tree *xtype, f *** 2412,2418 **** return tlen; } - #endif /* ffecom_concat_list_gather_ -- Gather list of concatenated string exprs ffecomConcatList_ catlist; --- 2326,2331 ---- *************** ffecom_char_enhance_arg_ (tree *xtype, f *** 2423,2436 **** 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: /* :::::::::::::::::::: */ if (expr == NULL) return catlist; --- 2336,2348 ---- Scans expr for character subexpressions, updates and returns catlist accordingly. */ static ffecomConcatList_ ffecom_concat_list_gather_ (ffecomConcatList_ catlist, ffebld expr, ffetargetCharacterSize max) { ffetargetCharacterSize sz; ! recurse: if (expr == NULL) return catlist; *************** recurse: /* :::::::::::::::::::: */ *** 2526,2532 **** } } - #endif /* ffecom_concat_list_kill_ -- Kill list of concatenated string exprs ffecomConcatList_ catlist; --- 2438,2443 ---- *************** recurse: /* :::::::::::::::::::: */ *** 2534,2540 **** Anything allocated within the list info is deallocated. */ - #if FFECOM_targetCURRENT == FFECOM_targetGCC static void ffecom_concat_list_kill_ (ffecomConcatList_ catlist) { --- 2445,2450 ---- *************** ffecom_concat_list_kill_ (ffecomConcatLi *** 2543,2555 **** 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) { --- 2453,2463 ---- *************** ffecom_concat_list_new_ (ffebld expr, ff *** 2559,2571 **** 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) --- 2467,2476 ---- *************** ffecom_debug_kludge_ (tree aggr, const c *** 2644,2650 **** if (buff != &space[0]) malloc_kill_ks (malloc_pool_image (), buff, len + 1); } - #endif /* ffecom_do_entry_ -- Do compilation of a particular entrypoint --- 2549,2554 ---- *************** ffecom_debug_kludge_ (tree aggr, const c *** 2655,2661 **** 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) { --- 2559,2564 ---- *************** ffecom_do_entry_ (ffesymbol fn, int entr *** 3012,3018 **** ffecom_doing_entry_ = FALSE; } - #endif /* Transform expr into gcc tree with possible destination Recursive descent on expr while making corresponding tree nodes and --- 2915,2920 ---- *************** ffecom_do_entry_ (ffesymbol fn, int entr *** 3020,3026 **** 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) --- 2922,2927 ---- *************** ffecom_expr_ (ffebld expr, tree dest_tre *** 3217,3222 **** --- 3118,3124 ---- if (ffesymbol_hook (s).assign_tree == NULL_TREE) { + /* xgettext:no-c-format */ ffebad_start_msg ("ASSIGN'ed label cannot fit into `%A' at %0 -- using wider sibling", FFEBAD_severityWARNING); ffebad_string (ffesymbol_text (s)); *************** ffecom_expr_ (ffebld expr, tree dest_tre *** 3271,3277 **** case FFEBLD_opUMINUS: left = ffecom_expr_ (ffebld_left (expr), NULL, NULL, NULL, FALSE, widenp); ! if (tree_type_x) { tree_type = tree_type_x; left = convert (tree_type, left); --- 3173,3179 ---- case FFEBLD_opUMINUS: left = ffecom_expr_ (ffebld_left (expr), NULL, NULL, NULL, FALSE, widenp); ! if (tree_type_x) { tree_type = tree_type_x; left = convert (tree_type, left); *************** ffecom_expr_ (ffebld expr, tree dest_tre *** 3281,3287 **** 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) { tree_type = tree_type_x; left = convert (tree_type, left); --- 3183,3189 ---- 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) { tree_type = tree_type_x; left = convert (tree_type, left); *************** ffecom_expr_ (ffebld expr, tree dest_tre *** 3292,3298 **** 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) { tree_type = tree_type_x; left = convert (tree_type, left); --- 3194,3200 ---- 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) { tree_type = tree_type_x; left = convert (tree_type, left); *************** ffecom_expr_ (ffebld expr, tree dest_tre *** 3303,3309 **** 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) { tree_type = tree_type_x; left = convert (tree_type, left); --- 3205,3211 ---- 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) { tree_type = tree_type_x; left = convert (tree_type, left); *************** ffecom_expr_ (ffebld expr, tree dest_tre *** 3314,3320 **** 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) { tree_type = tree_type_x; left = convert (tree_type, left); --- 3216,3222 ---- 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) { tree_type = tree_type_x; left = convert (tree_type, left); *************** ffecom_expr_ (ffebld expr, tree dest_tre *** 3833,3838 **** --- 3735,3744 ---- item = ffecom_arg_ptr_to_expr (ffebld_left (expr), &list); return convert (tree_type, item); + case FFEBLD_opPERCENT_VAL: + item = ffecom_arg_expr (ffebld_left (expr), &list); + return convert (tree_type, item); + case FFEBLD_opITEM: case FFEBLD_opSTAR: case FFEBLD_opBOUNDS: *************** ffecom_expr_ (ffebld expr, tree dest_tre *** 3876,3889 **** #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) --- 3782,3793 ---- *************** ffecom_expr_intrinsic_ (ffebld expr, tre *** 4586,4592 **** integer_type_node, TYPE_SIZE (uns_type), arg3_tree)))); ! #if !defined(TREE_SHIFT_FULLWIDTH) || !TREE_SHIFT_FULLWIDTH expr_tree = ffecom_3 (COND_EXPR, tree_type, ffecom_truth_value --- 4490,4496 ---- integer_type_node, TYPE_SIZE (uns_type), arg3_tree)))); ! /* Fix up, because the RSHIFT_EXPR above can't shift over TYPE_SIZE. */ expr_tree = ffecom_3 (COND_EXPR, tree_type, ffecom_truth_value *************** ffecom_expr_intrinsic_ (ffebld expr, tre *** 4595,4601 **** integer_zero_node)), expr_tree, convert (tree_type, integer_zero_node)); - #endif } return expr_tree; --- 4499,4504 ---- *************** ffecom_expr_intrinsic_ (ffebld expr, tre *** 4631,4646 **** ffecom_1 (NEGATE_EXPR, integer_type_node, arg2_tree)))); ! #if !defined(TREE_SHIFT_FULLWIDTH) || !TREE_SHIFT_FULLWIDTH expr_tree = ffecom_3 (COND_EXPR, tree_type, ffecom_truth_value (ffecom_2 (NE_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, --- 4534,4550 ---- ffecom_1 (NEGATE_EXPR, integer_type_node, arg2_tree)))); ! /* 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, ! ffecom_1 (ABS_EXPR, ! integer_type_node, ! arg2_tree), TYPE_SIZE (uns_type))), expr_tree, convert (tree_type, integer_zero_node)); /* Make sure SAVE_EXPRs get referenced early enough. */ expr_tree = ffecom_2 (COMPOUND_EXPR, tree_type, *************** ffecom_expr_intrinsic_ (ffebld expr, tre *** 4670,4676 **** ffecom_1 (BIT_NOT_EXPR, tree_type, convert (tree_type, integer_zero_node)), arg3_tree); ! #if !defined(TREE_SHIFT_FULLWIDTH) || !TREE_SHIFT_FULLWIDTH mask_arg1 = ffecom_3 (COND_EXPR, tree_type, ffecom_truth_value --- 4574,4580 ---- ffecom_1 (BIT_NOT_EXPR, tree_type, convert (tree_type, integer_zero_node)), arg3_tree); ! /* Fix up, because LSHIFT_EXPR above can't shift over TYPE_SIZE. */ mask_arg1 = ffecom_3 (COND_EXPR, tree_type, ffecom_truth_value *************** ffecom_expr_intrinsic_ (ffebld expr, tre *** 4679,4685 **** 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, --- 4583,4588 ---- *************** ffecom_expr_intrinsic_ (ffebld expr, tre *** 4828,4834 **** convert (arg4_type, integer_zero_node)), arg5_plus_arg3); ! #if !defined(TREE_SHIFT_FULLWIDTH) || !TREE_SHIFT_FULLWIDTH prep_arg4 = ffecom_3 (COND_EXPR, arg4_type, ffecom_truth_value --- 4731,4737 ---- convert (arg4_type, integer_zero_node)), arg5_plus_arg3); ! /* Fix up, because LSHIFT_EXPR above can't shift over TYPE_SIZE. */ prep_arg4 = ffecom_3 (COND_EXPR, arg4_type, ffecom_truth_value *************** ffecom_expr_intrinsic_ (ffebld expr, tre *** 4838,4844 **** TYPE_SIZE (arg4_type)))), prep_arg4, convert (arg4_type, integer_zero_node)); - #endif prep_arg4 = ffecom_2 (BIT_AND_EXPR, arg4_type, arg4_tree, --- 4741,4746 ---- *************** ffecom_expr_intrinsic_ (ffebld expr, tre *** 4856,4862 **** = ffecom_2 (BIT_IOR_EXPR, arg4_type, prep_arg1, prep_arg4); ! #if !defined(TREE_SHIFT_FULLWIDTH) || !TREE_SHIFT_FULLWIDTH prep_arg1 = ffecom_3 (COND_EXPR, arg4_type, ffecom_truth_value --- 4758,4765 ---- = ffecom_2 (BIT_IOR_EXPR, arg4_type, prep_arg1, prep_arg4); ! /* Fix up (twice), because LSHIFT_EXPR above ! can't shift over TYPE_SIZE. */ prep_arg1 = ffecom_3 (COND_EXPR, arg4_type, ffecom_truth_value *************** ffecom_expr_intrinsic_ (ffebld expr, tre *** 4875,4881 **** TYPE_SIZE (arg4_type)))), prep_arg1, arg1_tree); - #endif expr_tree = ffecom_2s (MODIFY_EXPR, void_type_node, arg4_tree, --- 4778,4783 ---- *************** ffecom_expr_intrinsic_ (ffebld expr, tre *** 5511,5522 **** 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) { --- 5413,5422 ---- *************** ffecom_expr_power_integer_ (ffebld expr) *** 5695,5701 **** basetypeof_l_is_int = build_int_2 ((TREE_CODE (ltype) == INTEGER_TYPE), 0); ! se = expand_start_stmt_expr (); ffecom_start_compstmt (); --- 5595,5601 ---- basetypeof_l_is_int = build_int_2 ((TREE_CODE (ltype) == INTEGER_TYPE), 0); ! se = expand_start_stmt_expr (/*has_scope=*/1); ffecom_start_compstmt (); *************** ffecom_expr_power_integer_ (ffebld expr) *** 5884,5890 **** return result; } - #endif /* ffecom_expr_transform_ -- Transform symbols in expr ffebld expr; // FFE expression. --- 5784,5789 ---- *************** ffecom_expr_power_integer_ (ffebld expr) *** 5892,5905 **** 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: /* :::::::::::::::::::: */ if (expr == NULL) return; --- 5791,5803 ---- Recursive descent on expr while transforming any untransformed SYMTERs. */ static void ffecom_expr_transform_ (ffebld expr) { tree t; ffesymbol s; ! tail_recurse: if (expr == NULL) return; *************** tail_recurse: /* :::::::::::::::::::: *** 5947,5956 **** 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) { --- 5845,5852 ---- *************** ffecom_f2c_make_type_ (tree *type, int t *** 6019,6026 **** *type)); } - #endif - #if FFECOM_targetCURRENT == FFECOM_targetGCC /* Set the f2c list-directed-I/O code for whatever (integral) type has the given size. */ --- 5915,5920 ---- *************** ffecom_f2c_set_lio_code_ (ffeinfoBasicty *** 6041,6052 **** } } - #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) { --- 5935,5944 ---- *************** ffecom_finish_global_ (ffeglobal global) *** 6089,6098 **** return global; } - #endif /* Finish up any untransformed symbols. */ - #if FFECOM_targetCURRENT == FFECOM_targetGCC static ffesymbol ffecom_finish_symbol_transform_ (ffesymbol s) { --- 5981,5988 ---- *************** ffecom_finish_symbol_transform_ (ffesymb *** 6136,6147 **** 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) { --- 6026,6035 ---- *************** ffecom_get_appended_identifier_ (char us *** 6163,6173 **** 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) { --- 6051,6059 ---- *************** ffecom_get_external_identifier_ (ffesymb *** 6193,6199 **** return ffecom_get_appended_identifier_ (us, name); } - #endif /* Decide whether to append underscore to internal name before calling get_identifier. --- 6079,6084 ---- *************** ffecom_get_external_identifier_ (ffesymb *** 6209,6215 **** 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) { --- 6094,6099 ---- *************** ffecom_get_identifier_ (const char *name *** 6223,6229 **** name); } - #endif /* ffecom_gen_sfuncdef_ -- Generate definition of statement function tree t; --- 6107,6112 ---- *************** ffecom_get_identifier_ (const char *name *** 6234,6240 **** 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) { --- 6117,6122 ---- *************** ffecom_gen_sfuncdef_ (ffesymbol s, ffein *** 6363,6379 **** 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) { --- 6245,6256 ---- *************** ffecom_gfrt_tree_ (ffecomGfrt ix) *** 6385,6409 **** 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) --- 6262,6284 ---- ffecom_gfrt_[ix]); } /* Return initialize-to-zero expression for this VAR_DECL. */ /* 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) *************** ffecom_save_tree_forever (tree t) *** 6429,6435 **** { /* 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; --- 6304,6310 ---- { /* 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; *************** ffecom_init_zero_ (tree decl) *** 6471,6478 **** return init; } - #endif - #if FFECOM_targetCURRENT == FFECOM_targetGCC static tree ffecom_intrinsic_ichar_ (tree tree_type, ffebld arg, tree *maybe_tree) --- 6346,6351 ---- *************** ffecom_intrinsic_ichar_ (tree tree_type, *** 6576,6582 **** } } - #endif /* ffecom_intrinsic_len_ -- Return length info for char arg (LEN()) tree length_arg; --- 6449,6454 ---- *************** ffecom_intrinsic_ichar_ (tree tree_type, *** 6587,6593 **** 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) { --- 6459,6464 ---- *************** ffecom_intrinsic_len_ (ffebld expr) *** 6728,6741 **** 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) --- 6599,6610 ---- *************** ffecom_let_char_ (tree dest_tree, tree d *** 6937,6943 **** ffecom_concat_list_kill_ (catlist); } - #endif /* ffecom_make_gfrt_ -- Make initial info for run-time routine ffecomGfrt ix; --- 6806,6811 ---- *************** ffecom_let_char_ (tree dest_tree, tree d *** 6946,6952 **** 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) { --- 6814,6819 ---- *************** ffecom_make_gfrt_ (ffecomGfrt ix) *** 7045,7054 **** 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) { --- 6912,6919 ---- *************** ffecom_member_phase1_ (ffestorag mst UNU *** 7058,7069 **** 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 static void ffecom_member_phase2_ (ffestorag mst, ffestorag st) { --- 6923,6932 ---- *************** ffecom_member_phase2_ (ffestorag mst, ff *** 7108,7114 **** finish_decl (t, NULL_TREE, FALSE); } - #endif /* Prepare source expression for assignment into a destination perhaps known to be of a specific size. */ --- 6971,6976 ---- *************** ffecom_prepare_let_char_ (ffetargetChara *** 7164,7170 **** 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) { --- 7026,7031 ---- *************** ffecom_push_dummy_decls_ (ffebld dummy_l *** 7234,7246 **** 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_ () { --- 7095,7105 ---- *************** ffecom_start_progunit_ () *** 7463,7469 **** ffesymbol_drive (ffecom_finish_symbol_transform_); } - #endif /* ffecom_sym_transform_ -- Transform FFE sym into backend sym ffesymbol s; --- 7322,7327 ---- *************** ffecom_start_progunit_ () *** 7472,7478 **** 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) { --- 7330,7335 ---- *************** ffecom_sym_transform_ (ffesymbol s) *** 7536,7544 **** 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; --- 7393,7399 ---- *************** ffecom_sym_transform_ (ffesymbol s) *** 8005,8013 **** } 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. */ --- 7860,7866 ---- *************** ffecom_sym_transform_ (ffesymbol s) *** 8227,8235 **** t = build_decl (PARM_DECL, ffecom_get_identifier_ (ffesymbol_text (s)), t); - #if BUILT_FOR_270 DECL_ARTIFICIAL (t) = 1; - #endif addr = TRUE; break; --- 8080,8086 ---- *************** ffecom_sym_transform_ (ffesymbol s) *** 8297,8305 **** 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; --- 8148,8154 ---- *************** ffecom_sym_transform_ (ffesymbol s) *** 8492,8498 **** return s; } - #endif /* Transform into ASSIGNable symbol. Symbol has already been transformed, but for whatever reason, the --- 8341,8346 ---- *************** ffecom_sym_transform_ (ffesymbol s) *** 8501,8507 **** 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) { --- 8349,8354 ---- *************** ffecom_sym_transform_assign_ (ffesymbol *** 8575,8581 **** return s; } - #endif /* Implement COMMON area in back end. Because COMMON-based variables can be referenced in the dimension --- 8422,8427 ---- *************** ffecom_sym_transform_assign_ (ffesymbol *** 8604,8610 **** 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) { --- 8450,8455 ---- *************** ffecom_transform_common_ (ffesymbol s) *** 8756,8765 **** ffecom_save_tree_forever (cbt); } - #endif /* Make master area for local EQUIVALENCE. */ - #if FFECOM_targetCURRENT == FFECOM_targetGCC static void ffecom_transform_equiv_ (ffestorag eqst) { --- 8601,8608 ---- *************** ffecom_transform_equiv_ (ffestorag eqst) *** 8889,8898 **** eqst); } - #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) { --- 8732,8739 ---- *************** ffecom_transform_namelist_ (ffesymbol s) *** 8972,8985 **** 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) --- 8813,8823 ---- *************** ffecom_tree_canonize_ptr_ (tree *decl, t *** 9034,9040 **** 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 --- 8872,8877 ---- *************** ffecom_tree_canonize_ptr_ (tree *decl, t *** 9067,9073 **** 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) --- 8904,8909 ---- *************** ffecom_tree_canonize_ref_ (tree *decl, t *** 9105,9111 **** case FIX_FLOOR_EXPR: case FIX_ROUND_EXPR: case FLOAT_EXPR: - case EXPON_EXPR: case NEGATE_EXPR: case MIN_EXPR: case MAX_EXPR: --- 8941,8946 ---- *************** ffecom_tree_canonize_ref_ (tree *decl, t *** 9220,9230 **** 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, --- 9055,9063 ---- *************** ffecom_tree_divide_ (tree tree_type, tre *** 9312,9321 **** } } - #endif /* Build type info for non-dummy variable. */ - #if FFECOM_targetCURRENT == FFECOM_targetGCC static tree ffecom_type_localvar_ (ffesymbol s, ffeinfoBasictype bt, ffeinfoKindtype kt) --- 9145,9152 ---- *************** ffecom_type_localvar_ (ffesymbol s, ffei *** 9372,9381 **** return type; } - #endif /* Build Namelist type. */ - #if FFECOM_targetCURRENT == FFECOM_targetGCC static tree ffecom_type_namelist_ () { --- 9203,9210 ---- *************** ffecom_type_namelist_ () *** 9407,9417 **** return type; } - #endif - /* Build Vardesc type. */ - #if FFECOM_targetCURRENT == FFECOM_targetGCC static tree ffecom_type_vardesc_ () { --- 9236,9243 ---- *************** ffecom_type_vardesc_ () *** 9440,9448 **** return type; } - #endif - - #if FFECOM_targetCURRENT == FFECOM_targetGCC static tree ffecom_vardesc_ (ffebld expr) { --- 9266,9271 ---- *************** ffecom_vardesc_ (ffebld expr) *** 9531,9538 **** return ffesymbol_hook (s).vardesc_tree; } - #endif - #if FFECOM_targetCURRENT == FFECOM_targetGCC static tree ffecom_vardesc_array_ (ffesymbol s) { --- 9354,9359 ---- *************** ffecom_vardesc_array_ (ffesymbol s) *** 9578,9585 **** return var; } - #endif - #if FFECOM_targetCURRENT == FFECOM_targetGCC static tree ffecom_vardesc_dims_ (ffesymbol s) { --- 9399,9404 ---- *************** ffecom_vardesc_dims_ (ffesymbol s) *** 9689,9702 **** } } - #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) { --- 9508,9519 ---- *************** ffecom_1 (enum tree_code code, tree type *** 9750,9760 **** if (TREE_SIDE_EFFECTS (node)) TREE_SIDE_EFFECTS (item) = 1; ! if ((code == ADDR_EXPR) && staticp (node)) TREE_CONSTANT (item) = 1; return fold (item); } - #endif /* Like ffecom_1 (ADDR_EXPR, TREE_TYPE (node), node), except handles TREE_CODE (node) == FUNCTION_DECL. In particular, --- 9567,9578 ---- if (TREE_SIDE_EFFECTS (node)) TREE_SIDE_EFFECTS (item) = 1; ! if (code == ADDR_EXPR && staticp (node)) TREE_CONSTANT (item) = 1; + else if (code == INDIRECT_REF) + TREE_READONLY (item) = TYPE_READONLY (type); return fold (item); } /* Like ffecom_1 (ADDR_EXPR, TREE_TYPE (node), node), except handles TREE_CODE (node) == FUNCTION_DECL. In particular, *************** ffecom_1 (enum tree_code code, tree type *** 9762,9768 **** function does not mean the function needs to be separately compiled). */ - #if FFECOM_targetCURRENT == FFECOM_targetGCC tree ffecom_1_fn (tree node) { --- 9580,9585 ---- *************** ffecom_1_fn (tree node) *** 9783,9794 **** 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) --- 9600,9609 ---- *************** ffecom_2 (enum tree_code code, tree type *** 9957,9963 **** return fold (item); } - #endif /* ffecom_2pass_advise_entrypoint -- Advise that there's this entrypoint ffesymbol s; // the ENTRY point itself --- 9772,9777 ---- *************** ffecom_2 (enum tree_code code, tree type *** 9976,9982 **** 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) { --- 9790,9795 ---- *************** ffecom_2pass_advise_entrypoint (ffesymbo *** 10114,10120 **** return TRUE; } - #endif /* ffecom_2pass_do_entrypoint -- Do compilation of entrypoint ffesymbol s; // the ENTRY point itself --- 9927,9932 ---- *************** ffecom_2pass_advise_entrypoint (ffesymbo *** 10124,10130 **** 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) { --- 9936,9941 ---- *************** ffecom_2pass_do_entrypoint (ffesymbol en *** 10145,10157 **** 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) --- 9956,9965 ---- *************** ffecom_2s (enum tree_code code, tree typ *** 10168,10178 **** 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) --- 9976,9984 ---- *************** ffecom_3 (enum tree_code code, tree type *** 10192,10203 **** 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) --- 9998,10007 ---- *************** ffecom_3s (enum tree_code code, tree typ *** 10215,10222 **** return fold (item); } - #endif - /* ffecom_arg_expr -- Transform argument expr into gcc tree See use by ffecom_list_expr. --- 10019,10024 ---- *************** ffecom_3s (enum tree_code code, tree typ *** 10234,10240 **** we allow CHARACTER*(*) dummies to statement functions, we'll need it). */ - #if FFECOM_targetCURRENT == FFECOM_targetGCC tree ffecom_arg_expr (ffebld expr, tree *length) { --- 10036,10041 ---- *************** ffecom_arg_expr (ffebld expr, tree *leng *** 10251,10257 **** 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 --- 10052,10057 ---- *************** ffecom_arg_ptr_to_const_expr (ffebld exp *** 10320,10326 **** 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) { --- 10120,10125 ---- *************** ffecom_arg_ptr_to_expr (ffebld expr, tre *** 10563,10569 **** return item; } - #endif /* Generate call to run-time function. The first arg is the GNU Fortran Run-Time function index, the second --- 10362,10367 ---- *************** ffecom_arg_ptr_to_expr (ffebld expr, tre *** 10571,10577 **** (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) { --- 10369,10374 ---- *************** ffecom_call_gfrt (ffecomGfrt ix, tree ar *** 10581,10591 **** 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) --- 10378,10386 ---- *************** ffecom_constantunion (ffebldConstantUnio *** 10853,10860 **** return item; } - #endif - /* Transform expression into constant tree. If the expression can be transformed into a tree that is constant, --- 10648,10653 ---- *************** ffecom_const_expr (ffebld expr) *** 10894,10900 **** /* 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) --- 10687,10692 ---- *************** ffecom_decl_field (tree context, tree pr *** 10911,10945 **** 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 --- 10703,10727 ---- *************** ffecom_end_compstmt (void) *** 10950,10977 **** 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_; --- 10732,10751 ---- *************** ffecom_end_transition () *** 11022,11028 **** ffecom_transform_common_ (ffebld_symter (ffebld_head (item))); ffecom_list_common_ = NULL; - #endif } /* ffecom_exec_transition -- Perform exec transition on all symbols --- 10796,10801 ---- *************** ffecom_exec_transition () *** 11048,11056 **** if (ffe_is_ffedebug ()) { ffestorag_report (); - #if FFECOM_targetCURRENT == FFECOM_targetFFE - ffesymbol_report_all (); - #endif } if (inhibited) --- 10821,10826 ---- *************** ffecom_exec_transition () *** 11062,11068 **** 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) { --- 10832,10837 ---- *************** ffecom_expand_let_stmt (ffebld dest, ffe *** 11172,11178 **** source); } - #endif /* ffecom_expr -- Transform expr into gcc tree tree t; --- 10941,10946 ---- *************** ffecom_expand_let_stmt (ffebld dest, ffe *** 11182,11222 **** 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) { --- 10950,10983 ---- *************** ffecom_expr_rw (tree type, ffebld expr) *** 11227,11240 **** 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) { --- 10988,10999 ---- *************** ffecom_expr_w (tree type, ffebld expr) *** 11245,11254 **** return stabilize_reference (ffecom_expr (expr)); } - #endif /* Do global stuff. */ - #if FFECOM_targetCURRENT == FFECOM_targetGCC void ffecom_finish_compile () { --- 11004,11011 ---- *************** ffecom_finish_compile () *** 11258,11267 **** 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) { --- 11015,11022 ---- *************** ffecom_finish_decl (tree decl, tree init *** 11269,11278 **** finish_decl (decl, init, FALSE); } - #endif /* Finish a program unit. */ - #if FFECOM_targetCURRENT == FFECOM_targetGCC void ffecom_finish_progunit () { --- 11024,11031 ---- *************** ffecom_finish_progunit () *** 11284,11294 **** finish_function (0); } - #endif - /* Wrapper for get_identifier. pattern is sprintf-like. */ - #if FFECOM_targetCURRENT == FFECOM_targetGCC tree ffecom_get_invented_identifier (const char *pattern, ...) { --- 11037,11044 ---- *************** ffecom_init_0 () *** 11421,11436 **** if (ffe_is_do_internal_checks ()) { ! static char names[][12] = {"bar", "bletch", "foo", "foobar"}; ! char *name; unsigned long ul; double fl; name = bsearch ("foo", &names[0], ARRAY_SIZE (names), sizeof (names[0]), (int (*)(const void *, const void *)) strcmp); ! if (name != (char *) &names[2]) { assert ("bsearch doesn't work, #define FFEPROJ_BSEARCH 0 in proj.h" == NULL); --- 11171,11186 ---- if (ffe_is_do_internal_checks ()) { ! static const char names[][12] = {"bar", "bletch", "foo", "foobar"}; ! const char *name; unsigned long ul; double fl; name = bsearch ("foo", &names[0], ARRAY_SIZE (names), sizeof (names[0]), (int (*)(const void *, const void *)) strcmp); ! if (name != &names[0][2]) { assert ("bsearch doesn't work, #define FFEPROJ_BSEARCH 0 in proj.h" == NULL); *************** ffecom_init_0 () *** 11454,11463 **** } } - #if FFECOM_GCC_INCLUDE - ffecom_initialize_char_syntax_ (); - #endif - ffecom_outer_function_decl_ = NULL_TREE; current_function_decl = NULL_TREE; named_labels = NULL_TREE; --- 11204,11209 ---- *************** ffecom_init_0 () *** 11978,12004 **** = build_function_type (void_type_node, NULL_TREE); builtin_function ("__builtin_sqrtf", float_ftype_float, ! BUILT_IN_FSQRT, BUILT_IN_NORMAL, "sqrtf"); ! builtin_function ("__builtin_fsqrt", double_ftype_double, ! BUILT_IN_FSQRT, BUILT_IN_NORMAL, "sqrt"); builtin_function ("__builtin_sqrtl", ldouble_ftype_ldouble, ! BUILT_IN_FSQRT, BUILT_IN_NORMAL, "sqrtl"); builtin_function ("__builtin_sinf", float_ftype_float, ! BUILT_IN_SIN, BUILT_IN_NORMAL, "sinf"); builtin_function ("__builtin_sin", double_ftype_double, BUILT_IN_SIN, BUILT_IN_NORMAL, "sin"); builtin_function ("__builtin_sinl", ldouble_ftype_ldouble, ! BUILT_IN_SIN, BUILT_IN_NORMAL, "sinl"); builtin_function ("__builtin_cosf", float_ftype_float, ! BUILT_IN_COS, BUILT_IN_NORMAL, "cosf"); builtin_function ("__builtin_cos", double_ftype_double, BUILT_IN_COS, BUILT_IN_NORMAL, "cos"); builtin_function ("__builtin_cosl", ldouble_ftype_ldouble, ! BUILT_IN_COS, BUILT_IN_NORMAL, "cosl"); - #if BUILT_FOR_270 pedantic_lvalues = FALSE; - #endif ffecom_f2c_make_type_ (&ffecom_f2c_integer_type_node, FFECOM_f2cINTEGER, --- 11724,11748 ---- = build_function_type (void_type_node, NULL_TREE); builtin_function ("__builtin_sqrtf", float_ftype_float, ! 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_SQRTL, BUILT_IN_NORMAL, "sqrtl"); builtin_function ("__builtin_sinf", float_ftype_float, ! BUILT_IN_SINF, BUILT_IN_NORMAL, "sinf"); builtin_function ("__builtin_sin", double_ftype_double, BUILT_IN_SIN, BUILT_IN_NORMAL, "sin"); builtin_function ("__builtin_sinl", ldouble_ftype_ldouble, ! BUILT_IN_SINL, BUILT_IN_NORMAL, "sinl"); builtin_function ("__builtin_cosf", float_ftype_float, ! BUILT_IN_COSF, BUILT_IN_NORMAL, "cosf"); builtin_function ("__builtin_cos", double_ftype_double, BUILT_IN_COS, BUILT_IN_NORMAL, "cos"); builtin_function ("__builtin_cosl", ldouble_ftype_ldouble, ! BUILT_IN_COSL, BUILT_IN_NORMAL, "cosl"); pedantic_lvalues = FALSE; ffecom_f2c_make_type_ (&ffecom_f2c_integer_type_node, FFECOM_f2cINTEGER, *************** ffecom_init_0 () *** 12088,12096 **** (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 ("Please keep this in mind before you report bugs. g77 should"); ! warning ("support non-32-bit machines better as of version 0.6."); } #endif --- 11832,11839 ---- (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 ("Please keep this in mind before you report bugs."); } #endif *************** ffecom_init_0 () *** 12114,12125 **** #endif } - #endif /* ffecom_init_2 -- Initialize ffecom_init_2(); */ - #if FFECOM_targetCURRENT == FFECOM_targetGCC void ffecom_init_2 () { --- 11857,11866 ---- *************** ffecom_init_2 () *** 12135,12141 **** ffecom_multi_retval_ = NULL_TREE; } - #endif /* ffecom_list_expr -- Transform list of exprs into gcc tree tree t; --- 11876,11881 ---- *************** ffecom_init_2 () *** 12144,12150 **** List of actual args is transformed into corresponding gcc backend list. */ - #if FFECOM_targetCURRENT == FFECOM_targetGCC tree ffecom_list_expr (ffebld expr) { --- 11884,11889 ---- *************** ffecom_list_expr (ffebld expr) *** 12176,12182 **** return list; } - #endif /* ffecom_list_ptr_to_expr -- Transform list of exprs into gcc tree tree t; --- 11915,11920 ---- *************** ffecom_list_expr (ffebld expr) *** 12186,12192 **** 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) { --- 11924,11929 ---- *************** ffecom_list_ptr_to_expr (ffebld expr) *** 12218,12227 **** return list; } - #endif /* Obtain gcc's LABEL_DECL tree for label. */ - #if FFECOM_targetCURRENT == FFECOM_targetGCC tree ffecom_lookup_label (ffelab label) { --- 11955,11962 ---- *************** ffecom_lookup_label (ffelab label) *** 12281,12293 **** 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) --- 12016,12026 ---- *************** ffecom_modify (tree newtype, tree lhs, *** 12304,12319 **** return ffecom_2s (MODIFY_EXPR, newtype, lhs, rhs); } - #endif - /* Register source file name. */ void 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 --- 12037,12048 ---- *************** void *** 12348,12357 **** 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) { --- 12077,12082 ---- *************** ffecom_notify_init_storage (ffestorag st *** 12359,12408 **** 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 --- 12084,12091 ---- *************** void *** 12437,12446 **** 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 --- 12120,12125 ---- *************** ffecom_notify_init_symbol (ffesymbol s) *** 12451,12490 **** { 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 --- 12130,12137 ---- *************** ffecom_notify_primary_entry (ffesymbol s *** 12516,12522 **** fprintf (stderr, " %s:\n", ffesymbol_text (s)); } - #if FFECOM_targetCURRENT == FFECOM_targetGCC if (ffecom_primary_entry_kind_ == FFEINFO_kindSUBROUTINE) { ffebld list; --- 12163,12168 ---- *************** ffecom_notify_primary_entry (ffesymbol s *** 12534,12550 **** } } } - #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 --- 12180,12191 ---- *************** ffecom_open_include (char *name, ffewher *** 12555,12561 **** Like ffecom_expr, but sticks address-of in front of most things. */ - #if FFECOM_targetCURRENT == FFECOM_targetGCC tree ffecom_ptr_to_expr (ffebld expr) { --- 12196,12201 ---- *************** ffecom_ptr_to_expr (ffebld expr) *** 12658,12664 **** return error_mark_node; } - #endif /* Obtain a temp var with given data type. size is FFETARGET_charactersizeNONE for a non-CHARACTER type --- 12298,12303 ---- *************** ffecom_ptr_to_expr (ffebld expr) *** 12666,12672 **** 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) --- 12305,12310 ---- *************** ffecom_make_tempvar (const char *comment *** 12701,12707 **** return t; } - #endif /* Prepare argument pointer to expression. --- 12339,12344 ---- *************** ffecom_ptr_to_const_expr (ffebld expr) *** 13074,13080 **** 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) { --- 12711,12716 ---- *************** ffecom_return_expr (ffebld expr) *** 13145,13174 **** 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) { --- 12781,12804 ---- *************** ffecom_start_decl (tree decl, bool is_in *** 13176,13182 **** return start_decl (decl, FALSE); } - #endif /* ffecom_sym_commit -- Symbol's state being committed to reality ffesymbol s; --- 12806,12811 ---- *************** ffecom_start_decl (tree decl, bool is_in *** 13185,13198 **** 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(); --- 12814,12825 ---- *************** ffecom_sym_end_transition (ffesymbol s) *** 13212,13218 **** s = ffest_sym_end_transition (s); - #if FFECOM_targetCURRENT == FFECOM_targetGCC if ((ffesymbol_kind (s) == FFEINFO_kindBLOCKDATA) && (ffesymbol_where (s) == FFEINFO_whereGLOBAL)) { --- 12839,12844 ---- *************** ffecom_sym_end_transition (ffesymbol s) *** 13222,13228 **** FFEINTRIN_impNONE), ffecom_list_blockdata_); } - #endif /* This is where we finally notice that a symbol has partial initialization and finalize it. */ --- 12848,12853 ---- *************** ffecom_sym_end_transition (ffesymbol s) *** 13240,13246 **** 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)) --- 12865,12870 ---- *************** ffecom_sym_end_transition (ffesymbol s) *** 13251,13257 **** FFEINTRIN_impNONE), ffecom_list_common_); } - #endif return s; } --- 12875,12880 ---- *************** ffecom_sym_learned (ffesymbol s) *** 13329,13335 **** 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) { --- 12952,12957 ---- *************** ffecom_sym_retract (ffesymbol s UNUSED) *** 13361,13370 **** #endif } - #endif /* Create temporary gcc label. */ - #if FFECOM_targetCURRENT == FFECOM_targetGCC tree ffecom_temp_label () { --- 12983,12990 ---- *************** ffecom_temp_label () *** 13381,13415 **** 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. */ --- 13001,13029 ---- *************** ffecom_type_expr (ffebld expr) *** 13485,13491 **** 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 () { --- 13099,13104 ---- *************** ffecom_which_entrypoint_decl () *** 13493,13500 **** 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 --- 13106,13111 ---- *************** ffecom_which_entrypoint_decl () *** 13511,13518 **** 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_ () { --- 13122,13127 ---- *************** builtin_function (const char *name, tree *** 13557,13563 **** TREE_PUBLIC (decl) = 1; if (library_name) SET_DECL_ASSEMBLER_NAME (decl, get_identifier (library_name)); ! make_decl_rtl (decl, NULL_PTR); pushdecl (decl); DECL_BUILT_IN_CLASS (decl) = class; DECL_FUNCTION_CODE (decl) = function_code; --- 13166,13172 ---- TREE_PUBLIC (decl) = 1; if (library_name) SET_DECL_ASSEMBLER_NAME (decl, get_identifier (library_name)); ! make_decl_rtl (decl, NULL); pushdecl (decl); DECL_BUILT_IN_CLASS (decl) = class; DECL_FUNCTION_CODE (decl) = function_code; *************** duplicate_decls (tree newdecl, tree oldd *** 13733,13745 **** 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 } /* If cannot merge, then use the new type and qualifiers, and don't preserve the old rtl. */ --- 13342,13352 ---- *************** finish_decl (tree decl, tree init, bool *** 13935,13941 **** } else if (TREE_CODE (decl) == TYPE_DECL) { ! rest_of_decl_compilation (decl, NULL_PTR, DECL_CONTEXT (decl) == 0, 0); } --- 13542,13548 ---- } else if (TREE_CODE (decl) == TYPE_DECL) { ! rest_of_decl_compilation (decl, NULL, DECL_CONTEXT (decl) == 0, 0); } *************** lang_printable_name (tree decl, int v) *** 14049,14057 **** /* g77's function to print out name of current function that caused an error. */ - #if BUILT_FOR_270 static void ! lang_print_error_function (const char *file) { static ffeglobal last_g = NULL; static ffesymbol last_s = NULL; --- 13656,13664 ---- /* g77's function to print out name of current function that caused an error. */ static void ! lang_print_error_function (diagnostic_context *context __attribute__((unused)), ! const char *file) { static ffeglobal last_g = NULL; static ffesymbol last_s = NULL; *************** lang_print_error_function (const char *f *** 14072,14104 **** 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; ! } } else { s = ffecom_nested_entry_; ! kind = "statement function"; } } --- 13679,13690 ---- if (ffecom_nested_entry_ == NULL) { s = ffecom_primary_entry_; ! kind = _(ffeinfo_kind_message (ffesymbol_kind (s))); } else { s = ffecom_nested_entry_; ! kind = _("In statement function"); } } *************** lang_print_error_function (const char *f *** 14108,14126 **** fprintf (stderr, "%s: ", file); if (s == NULL) ! fprintf (stderr, "Outside of any program unit:\n"); else { const char *name = ffesymbol_text (s); ! fprintf (stderr, "In %s `%s':\n", kind, name); } last_g = g; last_s = s; } } - #endif /* Similar to `lookup_name' but look only at current binding level. */ --- 13694,13711 ---- fprintf (stderr, "%s: ", file); if (s == NULL) ! fprintf (stderr, _("Outside of any program unit:\n")); else { const char *name = ffesymbol_text (s); ! fprintf (stderr, "%s `%s':\n", kind, name); } last_g = g; last_s = s; } } /* Similar to `lookup_name' but look only at current binding level. */ *************** incomplete_type_error (value, type) *** 14513,14519 **** } /* Mark ARG for GC. */ ! static void mark_binding_level (void *arg) { struct binding_level *level = *(struct binding_level **) arg; --- 14098,14104 ---- } /* Mark ARG for GC. */ ! static void mark_binding_level (void *arg) { struct binding_level *level = *(struct binding_level **) arg; *************** mark_binding_level (void *arg) *** 14527,14534 **** } } ! void ! init_decl_processing () { static tree *const tree_roots[] = { ¤t_function_decl, --- 14112,14119 ---- } } ! static void ! ffecom_init_decl_processing () { static tree *const tree_roots[] = { ¤t_function_decl, *************** init_decl_processing () *** 14579,14589 **** /* 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 (¤t_binding_level, 1, sizeof current_binding_level, --- 14164,14174 ---- /* 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 (¤t_binding_level, 1, sizeof current_binding_level, *************** init_decl_processing () *** 14595,14635 **** ffe_init_0 (); } - const char * - init_parse (filename) - const char *filename; - { - /* 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); - - #ifdef IO_BUFFER_SIZE - setvbuf (finput, (char *) xmalloc (IO_BUFFER_SIZE), _IOFBF, IO_BUFFER_SIZE); - #endif - - /* 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 - - return filename; - } - - void - finish_parse () - { - fclose (finput); - } - /* Delete the node BLOCK from the current binding level. This is used for the block inside a stmt expr ({...}) so that the block can be reinserted where appropriate. */ --- 14180,14185 ---- *************** insert_block (block) *** 14664,14687 **** } /* Each front end provides its own. */ ! static void ffe_init PARAMS ((void)); static void ffe_finish PARAMS ((void)); static void ffe_init_options PARAMS ((void)); ! struct lang_hooks lang_hooks = {ffe_init, ! ffe_finish, ! ffe_init_options, ! ffe_decode_option, ! NULL /* post_options */}; ! /* used by print-tree.c */ ! void ! lang_print_xnode (file, node, indent) ! FILE *file UNUSED; ! tree node UNUSED; ! int indent UNUSED; { } static void --- 14214,14284 ---- } /* 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; { + /* 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); + + #ifdef IO_BUFFER_SIZE + setvbuf (finput, (char *) xmalloc (IO_BUFFER_SIZE), _IOFBF, IO_BUFFER_SIZE); + #endif + + 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; } static void *************** ffe_finish () *** 14691,14717 **** if (ffe_is_ffedebug ()) malloc_pool_display (malloc_pool_image ()); - } - - const char * - lang_identify () - { - return "f77"; - } ! /* Return the typed-based alias set for T, which may be an expression ! or a type. Return -1 if we don't do anything special. */ ! ! HOST_WIDE_INT ! lang_get_alias_set (t) ! tree t ATTRIBUTE_UNUSED; ! { ! /* 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. */ ! return 0; } static void --- 14288,14295 ---- if (ffe_is_ffedebug ()) malloc_pool_display (malloc_pool_image ()); ! fclose (finput); } static void *************** ffe_init_options () *** 14721,14742 **** flag_move_all_movables = 1; flag_reduce_all_givs = 1; flag_argument_noalias = 2; flag_errno_math = 0; flag_complex_divide_method = 1; } - static void - ffe_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; --- 14299,14309 ---- 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; } int mark_addressable (exp) tree exp; *************** poplevel (keep, reverse, functionbody) *** 14958,14973 **** 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) FILE *file; tree node; int indent; --- 14525,14532 ---- return block; } ! static void ! ffe_print_identifier (file, node, indent) FILE *file; tree node; int indent; *************** print_lang_identifier (file, node, inden *** 14976,14994 **** 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). --- 14535,14540 ---- *************** pushdecl (x) *** 15016,15024 **** { if (IDENTIFIER_INVENTED (name)) { - #if BUILT_FOR_270 DECL_ARTIFICIAL (x) = 1; - #endif DECL_IN_SYSTEM_HEADER (x) = 1; } --- 14562,14568 ---- *************** set_block (block) *** 15180,15197 **** BLOCK_SUBBLOCKS (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"); - } - tree signed_or_unsigned_type (unsignedp, type) int unsignedp; --- 14724,14729 ---- *************** unsigned_type (type) *** 15584,15590 **** return type; } ! void lang_mark_tree (t) union tree_node *t ATTRIBUTE_UNUSED; { --- 15116,15122 ---- return type; } ! void lang_mark_tree (t) union tree_node *t ATTRIBUTE_UNUSED; { *************** lang_mark_tree (t) *** 15598,15608 **** else if (TYPE_P (t) && TYPE_LANG_SPECIFIC (t)) ggc_mark (TYPE_LANG_SPECIFIC (t)); } - - #endif /* FFECOM_targetCURRENT == FFECOM_targetGCC */ - #if FFECOM_GCC_INCLUDE - /* From gcc/cccp.c, the code to handle -I. */ /* Skip leading "./" from a directory name. --- 15130,15136 ---- *************** static int indepth = -1; *** 15680,15699 **** 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; --- 15208,15213 ---- *************** static void append_include_chain (struct *** 15707,15713 **** 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); --- 15221,15226 ---- *************** print_containing_files (ffebadSeverity s *** 15869,15874 **** --- 15382,15388 ---- else str2 = ""; + /* xgettext:no-c-format */ ffebad_start_msg ("%A from %B at %0%C", sev); ffebad_here (0, ip->line, ip->column); ffebad_string (str1); *************** read_filename_string (ch, f) *** 15894,15903 **** len = 20; set = alloc = xmalloc (len + 1); ! if (! is_space[ch]) { *set++ = ch; ! while ((ch = getc (f)) != EOF && ! is_space[ch]) { if (set - alloc == len) { --- 15408,15417 ---- len = 20; set = alloc = xmalloc (len + 1); ! if (! ISSPACE (ch)) { *set++ = ch; ! while ((ch = getc (f)) != EOF && ! ISSPACE (ch)) { if (set - alloc == len) { *************** read_name_map (dirname) *** 15965,15974 **** char *from, *to; struct file_name_map *ptr; ! if (is_space[ch]) continue; from = read_filename_string (ch, f); ! while ((ch = getc (f)) != EOF && is_hor_space[ch]) ; to = read_filename_string (ch, f); --- 15479,15488 ---- char *from, *to; struct file_name_map *ptr; ! if (ISSPACE (ch)) continue; from = read_filename_string (ch, f); ! while ((ch = getc (f)) != EOF && ISSPACE (ch) && ch != '\n') ; to = read_filename_string (ch, f); *************** ffecom_file_ (const char *name) *** 16019,16063 **** 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) { --- 15533,15538 ---- *************** ffecom_decode_include_option_ (char *spe *** 16085,16091 **** dirtmp->fname = spec; dirtmp->got_name_map = 0; if (spec[0] == 0) ! error ("Directory name must immediately follow -I"); else append_include_chain (dirtmp, dirtmp); } --- 15560,15566 ---- dirtmp->fname = spec; dirtmp->got_name_map = 0; if (spec[0] == 0) ! error ("directory name must immediately follow -I"); else append_include_chain (dirtmp, dirtmp); } *************** ffecom_open_include_ (char *name, ffewhe *** 16175,16181 **** { strncpy (fname, (char *) fbeg, flen); fname[flen] = 0; ! f = open_include_file (fname, NULL_PTR); } else { --- 15650,15656 ---- { strncpy (fname, (char *) fbeg, flen); fname[flen] = 0; ! f = open_include_file (fname, NULL); } else { *************** ffecom_open_include_ (char *name, ffewhe *** 16227,16232 **** --- 15702,15708 ---- if (f == NULL && errno == EACCES) { print_containing_files (FFEBAD_severityWARNING); + /* xgettext:no-c-format */ ffebad_start_msg ("At %0, INCLUDE file %A exists, but is not readable", FFEBAD_severityWARNING); ffebad_string (fname); *************** ffecom_open_include_ (char *name, ffewhe *** 16261,16266 **** --- 15737,15743 ---- if (indepth >= (INPUT_STACK_MAX - 1)) { print_containing_files (FFEBAD_severityFATAL); + /* xgettext:no-c-format */ ffebad_start_msg ("At %0, INCLUDE nesting too deep", FFEBAD_severityFATAL); ffebad_string (fname); *************** ffecom_open_include_ (char *name, ffewhe *** 16282,16288 **** 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 --- 15759,15764 ---- *************** typedef doublereal E_f; // real function *** 16768,16779 **** void pow_ci(); double pow_dd(); void pow_zz(); ! 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(), 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(); --- 16244,16255 ---- void pow_ci(); double pow_dd(); void pow_zz(); ! 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(), 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(); *************** typedef doublereal E_f; // real function *** 16781,16787 **** double r_sign(); // Local variables // ! extern // Subroutine // int fooa_(), fooc_(), food_(), fooi_(), foor_(), fool_(), fooz_(), getem_(); static char a1[10], a2[10]; static complex c1, c2; --- 16257,16263 ---- double r_sign(); // Local variables // ! extern // Subroutine // int fooa_(), fooc_(), food_(), fooi_(), foor_(), fool_(), fooz_(), getem_(); static char a1[10], a2[10]; static complex c1, c2; diff -Nrc3pad gcc-3.0.4/gcc/f/com.h gcc-3.1/gcc/f/com.h *** gcc-3.0.4/gcc/f/com.h Mon Sep 11 01:50:49 2000 --- gcc-3.1/gcc/f/com.h Wed Oct 17 22:34:51 2001 *************** the Free Software Foundation, 59 Temple *** 27,60 **** /* Allow multiple inclusion to work. */ ! #ifndef _H_f_com ! #define _H_f_com /* 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 --- 27,42 ---- /* Allow multiple inclusion to work. */ ! #ifndef GCC_F_COM_H ! #define GCC_F_COM_H /* Simple definitions and enumerations. */ #define FFECOM_dimensionsMAX 7 /* Max # dimensions (quick hack). */ #define FFECOM_SIZE_UNIT "byte" /* Singular form. */ #define FFECOM_SIZE_UNITS "bytes" /* Plural form. */ #define FFECOM_constantNULL NULL_TREE #define FFECOM_nonterNULL NULL_TREE #define FFECOM_globalNULL NULL_TREE *************** typedef enum *** 139,169 **** FFECOM_gfrt } ffecomGfrt; - #endif /* FFECOM_targetCURRENT == FFECOM_targetGCC */ - /* Typedefs. */ - #if FFECOM_targetCURRENT == FFECOM_targetGCC #ifndef TREE_CODE #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; --- 121,132 ---- *************** struct _ffecom_symbol_ *** 185,191 **** 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. */ --- 148,153 ---- *************** struct _ffecom_symbol_ *** 200,206 **** /* Global objects accessed by users of this module. */ - #if FFECOM_targetCURRENT == FFECOM_targetGCC extern tree string_type_node; extern tree ffecom_integer_type_node; extern tree ffecom_integer_zero_node; --- 162,167 ---- *************** extern tree ffecom_f2c_ftnlen_two_node; *** 227,237 **** 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); --- 188,196 ---- *************** tree ffecom_constantunion (ffebldConstan *** 251,266 **** 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); --- 210,221 ---- *************** tree ffecom_make_tempvar (const char *co *** 282,294 **** ffetargetCharacterSize size, int elements); tree ffecom_modify (tree newtype, tree lhs, tree rhs); void ffecom_save_tree_forever (tree t); - #endif /* FFECOM_targetCURRENT == FFECOM_targetGCC */ 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); --- 237,247 ---- *************** tree ffecom_save_tree (tree t); *** 303,313 **** 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); --- 256,264 ---- *************** tree ffecom_truth_value_invert (tree exp *** 315,345 **** 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() --- 266,277 ---- *************** int mark_addressable (tree expr); *** 352,355 **** /* End of #include file. */ ! #endif --- 284,287 ---- /* End of #include file. */ ! #endif /* ! GCC_F_COM_H */ diff -Nrc3pad gcc-3.0.4/gcc/f/config-lang.in gcc-3.1/gcc/f/config-lang.in *** gcc-3.0.4/gcc/f/config-lang.in Tue Dec 12 20:28:51 2000 --- gcc-3.1/gcc/f/config-lang.in Thu Dec 20 00:20:46 2001 *************** *** 1,5 **** # Top level configure fragment for GNU FORTRAN. ! # Copyright (C) 1995, 1996, 1997, 2000 Free Software Foundation, Inc. #This file is part of GNU Fortran. --- 1,5 ---- # Top level configure fragment for GNU FORTRAN. ! # Copyright (C) 1995, 1996, 1997, 2000, 2001 Free Software Foundation, Inc. #This file is part of GNU Fortran. *************** *** 24,30 **** # 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" --- 24,29 ---- *************** compilers="f771\$(exeext)" *** 32,37 **** stagestuff="g77\$(exeext) g77-cross\$(exeext) f771\$(exeext)" - diff_excludes="-x f/BUGS -x f/NEWS -x f/INSTALL -x f/intdoc.texi" - target_libs=target-libf2c --- 31,34 ---- diff -Nrc3pad gcc-3.0.4/gcc/f/data.c gcc-3.1/gcc/f/data.c *** gcc-3.0.4/gcc/f/data.c Sat Mar 27 10:23:44 1999 --- gcc-3.1/gcc/f/data.c Wed Feb 13 07:39:56 2002 *************** *** 1,5 **** /* data.c -- Implementation File (module.c template V1.0) ! Copyright (C) 1995, 1996 Free Software Foundation, Inc. Contributed by James Craig Burley. This file is part of GNU Fortran. --- 1,5 ---- /* data.c -- Implementation File (module.c template V1.0) ! Copyright (C) 1995, 1996, 2002 Free Software Foundation, Inc. Contributed by James Craig Burley. This file is part of GNU Fortran. *************** ffedata_eval_offset_ (ffebld subscripts, *** 977,982 **** --- 977,985 ---- while (subscripts != NULL) { + ffeinfoKindtype sub_kind, low_kind, hi_kind; + ffebld sub1, low1, hi1; + ++rank; assert (dims != NULL); *************** ffedata_eval_offset_ (ffebld subscripts, *** 984,991 **** dim = ffebld_head (dims); assert (ffeinfo_basictype (ffebld_info (subscript)) == FFEINFO_basictypeINTEGER); ! assert (ffeinfo_kindtype (ffebld_info (subscript)) == FFEINFO_kindtypeINTEGER1); ! value = ffedata_eval_integer1_ (subscript); assert (ffebld_op (dim) == FFEBLD_opBOUNDS); low = ffebld_left (dim); --- 987,1005 ---- dim = ffebld_head (dims); assert (ffeinfo_basictype (ffebld_info (subscript)) == FFEINFO_basictypeINTEGER); ! if (ffebld_op (subscript) == FFEBLD_opCONTER) ! { ! /* Force to default - it's a constant expression ! */ ! sub_kind = ffeinfo_kindtype (ffebld_info (subscript)); ! sub1 = ffebld_new_conter_with_orig (ffebld_constant_new_integer1_val ( ! sub_kind == FFEINFO_kindtypeINTEGER2 ? subscript->u.conter.expr->u.integer2 : ! sub_kind == FFEINFO_kindtypeINTEGER3 ? subscript->u.conter.expr->u.integer3 : ! sub_kind == FFEINFO_kindtypeINTEGER4 ? subscript->u.conter.expr->u.integer4 : ! subscript->u.conter.expr->u.integer1), NULL); ! value = ffedata_eval_integer1_ (sub1); ! } ! else ! value = ffedata_eval_integer1_ (subscript); assert (ffebld_op (dim) == FFEBLD_opBOUNDS); low = ffebld_left (dim); *************** ffedata_eval_offset_ (ffebld subscripts, *** 996,1008 **** else { assert (ffeinfo_basictype (ffebld_info (low)) == FFEINFO_basictypeINTEGER); ! assert (ffeinfo_kindtype (ffebld_info (low)) == FFEINFO_kindtypeINTEGERDEFAULT); ! lowbound = ffedata_eval_integer1_ (low); } assert (ffeinfo_basictype (ffebld_info (high)) == FFEINFO_basictypeINTEGER); ! assert (ffeinfo_kindtype (ffebld_info (high)) == FFEINFO_kindtypeINTEGERDEFAULT); ! highbound = ffedata_eval_integer1_ (high); if ((value < lowbound) || (value > highbound)) { --- 1010,1044 ---- else { assert (ffeinfo_basictype (ffebld_info (low)) == FFEINFO_basictypeINTEGER); ! if (ffebld_op (low) == FFEBLD_opCONTER) ! { ! /* Force to default - it's a constant expression ! */ ! low_kind = ffeinfo_kindtype (ffebld_info (low)); ! low1 = ffebld_new_conter_with_orig (ffebld_constant_new_integer1_val ( ! low_kind == FFEINFO_kindtypeINTEGER2 ? low->u.conter.expr->u.integer2 : ! low_kind == FFEINFO_kindtypeINTEGER3 ? low->u.conter.expr->u.integer3 : ! low_kind == FFEINFO_kindtypeINTEGER4 ? low->u.conter.expr->u.integer4 : ! low->u.conter.expr->u.integer1), NULL); ! lowbound = ffedata_eval_integer1_ (low1); ! } ! else ! lowbound = ffedata_eval_integer1_ (low); } assert (ffeinfo_basictype (ffebld_info (high)) == FFEINFO_basictypeINTEGER); ! if (ffebld_op (high) == FFEBLD_opCONTER) ! { ! /* Force to default - it's a constant expression ! */ ! hi_kind = ffeinfo_kindtype (ffebld_info (high)); ! hi1 = ffebld_new_conter_with_orig (ffebld_constant_new_integer1_val ( ! hi_kind == FFEINFO_kindtypeINTEGER2 ? high->u.conter.expr->u.integer2 : ! hi_kind == FFEINFO_kindtypeINTEGER3 ? high->u.conter.expr->u.integer3 : ! hi_kind == FFEINFO_kindtypeINTEGER4 ? high->u.conter.expr->u.integer4 : ! high->u.conter.expr->u.integer1), NULL); ! highbound = ffedata_eval_integer1_ (hi1); ! } ! else ! highbound = ffedata_eval_integer1_ (high); if ((value < lowbound) || (value > highbound)) { diff -Nrc3pad gcc-3.0.4/gcc/f/data.h gcc-3.1/gcc/f/data.h *** gcc-3.0.4/gcc/f/data.h Mon Feb 15 18:16:38 1999 --- gcc-3.1/gcc/f/data.h Sat May 26 01:31:46 2001 *************** the Free Software Foundation, 59 Temple *** 27,34 **** /* Allow multiple inclusion to work. */ ! #ifndef _H_f_data ! #define _H_f_data /* Simple definitions and enumerations. */ --- 27,34 ---- /* Allow multiple inclusion to work. */ ! #ifndef GCC_F_DATA_H ! #define GCC_F_DATA_H /* Simple definitions and enumerations. */ *************** bool ffedata_value (ffetargetIntegerDefa *** 71,74 **** /* End of #include file. */ ! #endif --- 71,74 ---- /* End of #include file. */ ! #endif /* ! GCC_F_DATA_H */ diff -Nrc3pad gcc-3.0.4/gcc/f/equiv.c gcc-3.1/gcc/f/equiv.c *** gcc-3.0.4/gcc/f/equiv.c Sat Feb 26 20:02:00 2000 --- gcc-3.1/gcc/f/equiv.c Wed Oct 17 22:34:51 2001 *************** ffeequiv_add (ffeequiv eq, ffebld list, *** 913,933 **** 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(); */ --- 913,918 ---- diff -Nrc3pad gcc-3.0.4/gcc/f/equiv.h gcc-3.1/gcc/f/equiv.h *** gcc-3.0.4/gcc/f/equiv.h Mon Feb 15 18:16:41 1999 --- gcc-3.1/gcc/f/equiv.h Wed Oct 17 22:34:52 2001 *************** the Free Software Foundation, 59 Temple *** 27,34 **** /* Allow multiple inclusion to work. */ ! #ifndef _H_f_equiv ! #define _H_f_equiv /* Simple definitions and enumerations. */ --- 27,34 ---- /* Allow multiple inclusion to work. */ ! #ifndef GCC_F_EQUIV_H ! #define GCC_F_EQUIV_H /* Simple definitions and enumerations. */ *************** struct _ffeequiv_ *** 62,70 **** /* 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); --- 62,67 ---- *************** void ffeequiv_update_save (ffeequiv eq); *** 100,103 **** /* End of #include file. */ ! #endif --- 97,100 ---- /* End of #include file. */ ! #endif /* ! GCC_F_EQUIV_H */ diff -Nrc3pad gcc-3.0.4/gcc/f/expr.c gcc-3.1/gcc/f/expr.c *** gcc-3.0.4/gcc/f/expr.c Wed Aug 2 17:01:13 2000 --- gcc-3.1/gcc/f/expr.c Mon Feb 4 15:58:50 2002 *************** *** 1,5 **** /* expr.c -- Implementation File (module.c template V1.0) ! Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. Contributed by James Craig Burley. This file is part of GNU Fortran. --- 1,6 ---- /* expr.c -- Implementation File (module.c template V1.0) ! Copyright (C) 1995, 1996, 1997, 1998, 2001, 2002 ! Free Software Foundation, Inc. Contributed by James Craig Burley. This file is part of GNU Fortran. *************** ffeexpr_exprstack_push_unary_ (ffeexprEx *** 9608,9613 **** --- 9609,9615 ---- <= FFEEXPR_operatorprecedenceLOWARITH_) && (e->u.operator.prec <= FFEEXPR_operatorprecedenceLOWARITH_)) { + /* xgettext:no-c-format */ ffebad_start_msg ("Two arithmetic operators in a row at %0 and %1 -- use parentheses", ffe_is_pedantic () ? FFEBAD_severityPEDANTIC *************** ffeexpr_exprstack_push_binary_ (ffeexprE *** 9657,9662 **** --- 9659,9665 ---- && (e->u.operator.prec < ffeexpr_stack_->exprstack->previous->u.operator.prec)) { + /* xgettext:no-c-format */ ffebad_start_msg ("Operator at %0 has lower precedence than that at %1 -- use parentheses", FFEBAD_severityWARNING); ffebad_here (0, ffelex_token_where_line (ffeexpr_stack_->exprstack->previous->token), *************** ffeexpr_reduced_eqop2_ (ffebld reduced, *** 10517,10522 **** --- 10520,10526 ---- if ((lbt == FFEINFO_basictypeLOGICAL) && (rbt == FFEINFO_basictypeLOGICAL)) { + /* xgettext:no-c-format */ if (ffebad_start_msg ("Use .EQV./.NEQV. instead of .EQ./.NE. at %0 for LOGICAL operands at %1 and %2", FFEBAD_severityFATAL)) { *************** ffeexpr_reduced_power_ (ffebld reduced, *** 10887,10892 **** --- 10891,10897 ---- } if (rkt == FFEINFO_kindtypeINTEGER4) { + /* xgettext:no-c-format */ ffebad_start_msg ("Unsupported operand for ** at %1 -- converting to default INTEGER", FFEBAD_severityWARNING); ffebad_here (0, ffelex_token_where_line (r->token), ffelex_token_where_column (r->token)); *************** ffeexpr_sym_impdoitem_ (ffesymbol sp, ff *** 16489,16498 **** FFETARGET_charactersizeNONE)); ffesymbol_signal_unreported (s); ! if (((ffesymbol_basictype (sp) != FFEINFO_basictypeINTEGER) && (ffesymbol_basictype (sp) != FFEINFO_basictypeANY)) - || ((ffesymbol_kindtype (sp) != FFEINFO_kindtypeINTEGERDEFAULT) - && (ffesymbol_kindtype (sp) != FFEINFO_kindtypeANY))) ffesymbol_error (s, t); return s; --- 16494,16501 ---- FFETARGET_charactersizeNONE)); ffesymbol_signal_unreported (s); ! if ((ffesymbol_basictype (sp) != FFEINFO_basictypeINTEGER) && (ffesymbol_basictype (sp) != FFEINFO_basictypeANY)) ffesymbol_error (s, t); return s; *************** ffeexpr_sym_rhs_dimlist_ (ffesymbol s, f *** 17323,17328 **** --- 17326,17332 ---- | FFESYMBOL_attrsINIT | FFESYMBOL_attrsNAMELIST | FFESYMBOL_attrsSFARG + | FFESYMBOL_attrsARRAY | FFESYMBOL_attrsTYPE))) na = sa | FFESYMBOL_attrsADJUSTS; else *************** ffeexpr_declare_parenthesized_ (ffelexTo *** 17958,17963 **** --- 17962,17968 ---- case FFEEXPR_contextDIMLIST: s = ffeexpr_sym_rhs_dimlist_ (s, t); + bad = FALSE; break; case FFEEXPR_contextCHARACTERSIZE: diff -Nrc3pad gcc-3.0.4/gcc/f/expr.h gcc-3.1/gcc/f/expr.h *** gcc-3.0.4/gcc/f/expr.h Mon Feb 15 18:16:43 1999 --- gcc-3.1/gcc/f/expr.h Sat May 26 01:31:46 2001 *************** the Free Software Foundation, 59 Temple *** 27,34 **** /* Allow multiple inclusion to work. */ ! #ifndef _H_f_expr ! #define _H_f_expr /* Simple definitions and enumerations. */ --- 27,34 ---- /* Allow multiple inclusion to work. */ ! #ifndef GCC_F_EXPR_H ! #define GCC_F_EXPR_H /* Simple definitions and enumerations. */ *************** void ffeexpr_type_combine (ffeinfoBasict *** 191,194 **** /* End of #include file. */ ! #endif --- 191,194 ---- /* End of #include file. */ ! #endif /* ! GCC_F_EXPR_H */ diff -Nrc3pad gcc-3.0.4/gcc/f/ffe.texi gcc-3.1/gcc/f/ffe.texi *** gcc-3.0.4/gcc/f/ffe.texi Wed Nov 17 18:36:40 1999 --- gcc-3.1/gcc/f/ffe.texi Fri Feb 1 22:43:03 2002 *************** *** 11,20 **** This chapter describes some aspects of the design and implementation of the @code{g77} front end. - Much of the information below applies not to current - releases of @code{g77}, - but to the 0.6 rewrite being designed and implemented - as of late May, 1999. To find about things that are ``To Be Determined'' or ``To Be Done'', search for the string TBD. --- 11,16 ---- *************** Preserving case seems necessary to provi *** 589,599 **** to facilities outside of @code{g77}, such as to C or Pascal code. Names of intrinsics will probably be matchable in any case, - However, there probably won't be any option to require - a particular mixed-case appearance of intrinsics - (as there was for @code{g77} prior to version 0.6), - because that's painful to maintain, - and probably nobody uses it. (How @samp{external SiN; r = sin(x)} would be handled is TBD. I think old @code{g77} might already handle that pretty elegantly, --- 585,590 ---- diff -Nrc3pad gcc-3.0.4/gcc/f/fini.c gcc-3.1/gcc/f/fini.c *** gcc-3.0.4/gcc/f/fini.c Fri Dec 8 03:00:25 2000 --- gcc-3.1/gcc/f/fini.c Sat Dec 1 08:16:25 2001 *************** static FILE *out; *** 62,68 **** static char prefix[32]; static char postfix[32]; static char storage[32]; ! static const char *xspaces[] = { "", /* 0 */ --- 62,68 ---- static char prefix[32]; static char postfix[32]; static char storage[32]; ! static const char *const xspaces[] = { "", /* 0 */ *************** main (int argc, char **argv) *** 367,373 **** /* Make new name object to store name and its keyword. */ ! newname = (name) malloc (sizeof (*newname)); newname->namelen = strlen (buf); newname->kwlen = strlen (kwname); total_length = newname->kwlen + fixlengths; --- 367,373 ---- /* Make new name object to store name and its keyword. */ ! newname = (name) xmalloc (sizeof (*newname)); newname->namelen = strlen (buf); newname->kwlen = strlen (kwname); total_length = newname->kwlen + fixlengths; diff -Nrc3pad gcc-3.0.4/gcc/f/g77.1 gcc-3.1/gcc/f/g77.1 *** gcc-3.0.4/gcc/f/g77.1 Sat Feb 26 20:02:01 2000 --- gcc-3.1/gcc/f/g77.1 Wed May 15 02:46:01 2002 *************** *** 1,365 **** ! .\" Copyright (c) 1995, 1996, 1997, Free Software Foundation -*-Text-*- ! .\" See section COPYING for conditions for redistribution ! .\" FIXME: no info here on predefines. Should there be? extra for F77... ! .TH G77 1 "1999-02-14" "GNU Tools" "GNU Tools" ! .de BP ! .sp ! .ti \-.2i ! \(** .. ! .SH NAME ! g77 \- GNU project Fortran Compiler (v0.5.24) ! .SH SYNOPSIS ! .RB g77 " [" \c ! .IR option " | " "filename " ].\|.\|. ! .SH WARNING ! The information in this man page is an extract from the full ! documentation of the GNU Fortran compiler (version 0.5.24), ! and is limited to the meaning of some of the options. .PP ! This man page is not up to date, since no volunteers want to ! maintain it. If you find a discrepancy between the man page and the ! software, please check the Info file, which is the authoritative ! documentation. ! .\" .PP ! .\" The version of GNU Fortran documented by the Info file is 0.5.24, ! .\" which includes substantial improvements and changes since 0.5.24, ! .\" the version documented in this man page. .PP ! If we find that the things in this man page that are out of date cause ! significant confusion or complaints, we will stop distributing the man ! page. The alternative, updating the man page when we update the Info ! file, is impractical because the rest of the work of maintaining GNU Fortran ! leaves us no time for that. The GNU project regards man pages as ! obsolete and should not let them take time away from other things. .PP ! For complete and current documentation, refer to the Info file `\|\c ! .B g77\c ! \&\|' or the manual ! .I ! Using and Porting GNU Fortran (for version 0.5.24)\c ! \&. Both are made from the Texinfo source file ! .BR g77.texi . .PP ! If your system has the `\|\c ! .B info\c ! \&\|' command installed, the command `\|\c ! .B info g77\c ! \&\|' should work, unless ! .B g77 ! has not been properly installed. ! If your system lacks `\|\c ! .B info\c ! \&\|', or you wish to avoid using it for now, ! the command `\|\c ! .B more /usr/info/g77.info*\c ! \&\|' should work, unless ! .B g77 ! has not been properly installed. .PP ! If ! .B g77 ! has not been properly installed, so that you ! cannot easily access the Info file for it, ! ask your system administrator, or the installer ! of ! .B g77 ! (if you know who that is) to fix the problem. ! .SH DESCRIPTION ! The C and F77 compilers are integrated; ! .B g77 ! is a program to call ! .B gcc ! with options to recognize programs written in Fortran (ANSI FORTRAN 77, ! also called F77). ! .B gcc ! processes input files ! through one or more of four stages: preprocessing, compilation, ! assembly, and linking. This man page contains full descriptions for ! .I only ! F77-specific aspects of the compiler, though it also contains ! summaries of some general-purpose options. For a fuller explanation ! of the compiler, see ! .BR gcc ( 1 ). ! ! For complete documentation on GNU Fortran, type `\|\c ! .B info g77\c ! \&\|'. ! ! F77 source files use the suffix `\|\c ! .B .f\c ! \&\|', `\|\c ! .B .for\c ! \&\|', or `\|\c ! .B .FOR\c ! \&\|'; F77 files to be preprocessed by ! .BR cpp ( 1 ) ! use the suffix `\|\c ! .B .F\c ! \&\|', `\|\c ! .B .fpp\c ! \&\|', or `\|\c ! .B .FPP\c ! \&\|'; Ratfor source files use the suffix `\|\c ! .B .r\c ! \&\|' (though ! .B ratfor ! itself is not supplied as part of ! .B g77\c ! \&). ! .SH OPTIONS ! There are many command-line options, including options to control ! details of optimization, warnings, and code generation, which are ! common to both ! .B gcc ! and ! .B g77\c ! \&. For full information on all options, see ! .BR gcc ( 1 ). ! ! Options must be separate: `\|\c ! .B \-dr\c ! \&\|' is quite different from `\|\c ! .B \-d \-r ! \&\|'. ! ! Most `\|\c ! .B \-f\c ! \&\|' and `\|\c ! .B \-W\c ! \&\|' options have two contrary forms: ! .BI \-f name ! and ! .BI \-fno\- name\c ! \& (or ! .BI \-W name ! and ! .BI \-Wno\- name\c ! \&). Only the non-default forms are shown here. ! ! .TP ! .B \-c ! Compile or assemble the source files, but do not link. The compiler ! output is an object file corresponding to each source file. ! .TP ! .BI \-D macro ! Define macro \c ! .I macro\c ! \& with the string `\|\c ! .B 1\c ! \&\|' as its definition. ! .TP ! .BI \-D macro = defn ! Define macro \c ! .I macro\c ! \& as \c ! .I defn\c ! \&. ! .TP ! .B \-E ! Stop after the preprocessing stage; do not run the compiler proper. The ! output is preprocessed source code, which is sent to the ! standard output. ! .TP ! .B \-g Produce debugging information in the operating system's native format ! (for DBX or SDB or DWARF). GDB also can work with this debugging ! information. On most systems that use DBX format, `\|\c ! .B \-g\c ! \&\|' enables use ! of extra debugging information that only GDB can use. ! ! Unlike most other Fortran compilers, GNU Fortran allows you to use `\|\c ! .B \-g\c ! \&\|' with ! `\|\c ! .B \-O\c ! \&\|'. The shortcuts taken by optimized code may occasionally ! produce surprising results: some variables you declared may not exist ! at all; flow of control may briefly move where you did not expect it; ! some statements may not be executed because they compute constant ! results or their values were already at hand; some statements may ! execute in different places because they were moved out of loops. ! ! Nevertheless it proves possible to debug optimized output. This makes ! it reasonable to use the optimizer for programs that might have bugs. ! .TP ! .BI "\-I" "dir"\c ! \& ! Append directory \c ! .I dir\c ! \& to the list of directories searched for include files. ! .TP ! .BI "\-L" "dir"\c ! \& ! Add directory \c ! .I dir\c ! \& to the list of directories to be searched ! for `\|\c ! .B \-l\c ! \&\|'. ! .TP ! .BI \-l library\c ! \& ! Use the library named \c ! .I library\c ! \& when linking. ! .TP ! .B \-nostdinc ! Do not search the standard system directories for header files. Only ! the directories you have specified with ! .B \-I ! options (and the current directory, if appropriate) are searched. ! .TP ! .B \-O ! Optimize. Optimizing compilation takes somewhat more time, and a lot ! more memory for a large function. See the GCC documentation for ! further optimisation options. Loop unrolling, in particular, may be ! worth investigating for typical numerical Fortran programs. ! .TP ! .BI "\-o " file\c ! \& ! Place output in file \c ! .I file\c ! \&. ! .TP ! .B \-S ! Stop after the stage of compilation proper; do not assemble. The output ! is an assembler code file for each non-assembler input ! file specified. ! .TP ! .BI \-U macro ! Undefine macro \c ! .I macro\c ! \&. ! .TP ! .B \-v ! Print (on standard error output) the commands executed to run the ! stages of compilation. Also print the version number of the compiler ! driver program and of the preprocessor and the compiler proper. The ! version numbers of g77 itself and the GCC distribution on which it is ! based are distinct. ! .TP ! .B \-Wall ! Issue warnings for conditions which pertain to usage that we recommend ! avoiding and that we believe is easy to avoid, even in conjunction ! with macros. .PP ! ! .SH FILES ! .ta \w'LIBDIR/g77\-include 'u ! file.h C header (preprocessor) file ! .br ! file.f Fortran source file ! .br ! file.for Fortran source file ! .br ! file.FOR Fortran source file ! .br ! file.F preprocessed Fortran source file ! .br ! file.fpp preprocessed Fortran source file ! .br ! file.FPP preprocessed Fortran source file ! .br ! file.r Ratfor source file (ratfor not included) ! .br ! file.s assembly language file ! .br ! file.o object file ! .br ! a.out link edited output ! .br ! \fITMPDIR\fR/cc\(** temporary files ! .br ! \fILIBDIR\fR/cpp preprocessor ! .br ! \fILIBDIR\fR/f771 compiler ! .br ! \fILIBDIR\fR/libg2c.a Fortran run-time library ! .br ! \fILIBDIR\fR/libgcc.a GCC subroutine library ! .br ! /lib/crt[01n].o start-up routine ! .br ! /lib/libc.a standard C library, see ! .IR intro (3) ! .br ! /usr/include standard directory for ! .B #include ! files ! .br ! \fILIBDIR\fR/include standard gcc directory for ! .B #include ! .br ! files. ! .sp ! .I LIBDIR ! is usually ! .B /usr/local/lib/\c ! .IR machine / version . ! .sp ! .I TMPDIR ! comes from the environment variable ! .B TMPDIR ! (default ! .B /usr/tmp ! if available, else ! .B /tmp\c ! \&). .SH "SEE ALSO" ! gcc(1), cpp(1), as(1), ld(1), gdb(1), adb(1), dbx(1), sdb(1). ! .br ! .RB "`\|" g77 "\|', `\|" gcc "\|', `\|" cpp "\|'," ! .RB "`\|" as "\|', `\|" ld "\|'," ! and ! .RB "`\|" gdb "\|'" ! entries in ! .B info\c ! \&. ! .br ! .I ! Using and Porting GNU Fortran (for version 0.5.24)\c ! , James Craig Burley; ! .I ! Using and Porting GNU CC (for version 2.0)\c ! , Richard M. Stallman; ! .I ! The C Preprocessor\c ! , Richard M. Stallman; ! .I ! Debugging with GDB: the GNU Source-Level Debugger\c ! , Richard M. Stallman and Roland H. Pesch; ! .I ! Using as: the GNU Assembler\c ! , Dean Elsner, Jay Fenlason & friends; ! .I ! gld: the GNU linker\c ! , Steve Chamberlain and Roland Pesch. ! ! .SH BUGS ! For instructions on how to report bugs, type `\|\c ! .B info g77 -n Bugs\c ! \&\|'. ! ! .SH COPYING ! Copyright (c) 1991-1998 Free Software Foundation, Inc. .PP ! 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. .PP ! Permission is granted to copy and distribute modified versions of this ! manual under the conditions for verbatim copying, provided that the ! entire resulting derived work is distributed under the terms of a ! permission notice identical to this one. .PP ! Permission is granted to copy and distribute translations of this ! manual into another language, under the above conditions for modified ! versions, except that this permission notice may be included in ! translations approved by the Free Software Foundation instead of in ! the original English. ! .SH AUTHORS ! See the GNU CC Manual for the contributors to GNU CC. ! See the GNU Fortran Manual for the contributors to ! GNU Fortran. --- 1,1724 ---- ! .\" Automatically generated by Pod::Man version 1.15 ! .\" Wed May 15 02:46:00 2002 ! .\" ! .\" Standard preamble: ! .\" ====================================================================== ! .de Sh \" Subsection heading ! .br ! .if t .Sp ! .ne 5 ! .PP ! \fB\\$1\fR ! .PP .. ! .de Sp \" Vertical space (when we can't use .PP) ! .if t .sp .5v ! .if n .sp ! .. ! .de Ip \" List item ! .br ! .ie \\n(.$>=3 .ne \\$3 ! .el .ne 3 ! .IP "\\$1" \\$2 ! .. ! .de Vb \" Begin verbatim text ! .ft CW ! .nf ! .ne \\$1 ! .. ! .de Ve \" End verbatim text ! .ft R ! ! .fi ! .. ! .\" Set up some character translations and predefined strings. \*(-- will ! .\" give an unbreakable dash, \*(PI will give pi, \*(L" will give a left ! .\" double quote, and \*(R" will give a right double quote. | will give a ! .\" real vertical bar. \*(C+ will give a nicer C++. Capital omega is used ! .\" to do unbreakable dashes and therefore won't be available. \*(C` and ! .\" \*(C' expand to `' in nroff, nothing in troff, for use with C<> ! .tr \(*W-|\(bv\*(Tr ! .ds C+ C\v'-.1v'\h'-1p'\s-2+\h'-1p'+\s0\v'.1v'\h'-1p' ! .ie n \{\ ! . ds -- \(*W- ! . ds PI pi ! . if (\n(.H=4u)&(1m=24u) .ds -- \(*W\h'-12u'\(*W\h'-12u'-\" diablo 10 pitch ! . if (\n(.H=4u)&(1m=20u) .ds -- \(*W\h'-12u'\(*W\h'-8u'-\" diablo 12 pitch ! . ds L" "" ! . ds R" "" ! . ds C` "" ! . ds C' "" ! 'br\} ! .el\{\ ! . ds -- \|\(em\| ! . ds PI \(*p ! . ds L" `` ! . ds R" '' ! 'br\} ! .\" ! .\" If the F register is turned on, we'll generate index entries on stderr ! .\" for titles (.TH), headers (.SH), subsections (.Sh), items (.Ip), and ! .\" index entries marked with X<> in POD. Of course, you'll have to process ! .\" the output yourself in some meaningful fashion. ! .if \nF \{\ ! . de IX ! . tm Index:\\$1\t\\n%\t"\\$2" ! .. ! . nr % 0 ! . rr F ! .\} ! .\" ! .\" For nroff, turn off justification. Always turn off hyphenation; it ! .\" makes way too many mistakes in technical documents. ! .hy 0 ! .if n .na ! .\" ! .\" Accent mark definitions (@(#)ms.acc 1.5 88/02/08 SMI; from UCB 4.2). ! .\" Fear. Run. Save yourself. No user-serviceable parts. ! .bd B 3 ! . \" fudge factors for nroff and troff ! .if n \{\ ! . ds #H 0 ! . ds #V .8m ! . ds #F .3m ! . ds #[ \f1 ! . ds #] \fP ! .\} ! .if t \{\ ! . ds #H ((1u-(\\\\n(.fu%2u))*.13m) ! . ds #V .6m ! . ds #F 0 ! . ds #[ \& ! . ds #] \& ! .\} ! . \" simple accents for nroff and troff ! .if n \{\ ! . ds ' \& ! . ds ` \& ! . ds ^ \& ! . ds , \& ! . ds ~ ~ ! . ds / ! .\} ! .if t \{\ ! . ds ' \\k:\h'-(\\n(.wu*8/10-\*(#H)'\'\h"|\\n:u" ! . ds ` \\k:\h'-(\\n(.wu*8/10-\*(#H)'\`\h'|\\n:u' ! . ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'^\h'|\\n:u' ! . ds , \\k:\h'-(\\n(.wu*8/10)',\h'|\\n:u' ! . ds ~ \\k:\h'-(\\n(.wu-\*(#H-.1m)'~\h'|\\n:u' ! . ds / \\k:\h'-(\\n(.wu*8/10-\*(#H)'\z\(sl\h'|\\n:u' ! .\} ! . \" troff and (daisy-wheel) nroff accents ! .ds : \\k:\h'-(\\n(.wu*8/10-\*(#H+.1m+\*(#F)'\v'-\*(#V'\z.\h'.2m+\*(#F'.\h'|\\n:u'\v'\*(#V' ! .ds 8 \h'\*(#H'\(*b\h'-\*(#H' ! .ds o \\k:\h'-(\\n(.wu+\w'\(de'u-\*(#H)/2u'\v'-.3n'\*(#[\z\(de\v'.3n'\h'|\\n:u'\*(#] ! .ds d- \h'\*(#H'\(pd\h'-\w'~'u'\v'-.25m'\f2\(hy\fP\v'.25m'\h'-\*(#H' ! .ds D- D\\k:\h'-\w'D'u'\v'-.11m'\z\(hy\v'.11m'\h'|\\n:u' ! .ds th \*(#[\v'.3m'\s+1I\s-1\v'-.3m'\h'-(\w'I'u*2/3)'\s-1o\s+1\*(#] ! .ds Th \*(#[\s+2I\s-2\h'-\w'I'u*3/5'\v'-.3m'o\v'.3m'\*(#] ! .ds ae a\h'-(\w'a'u*4/10)'e ! .ds Ae A\h'-(\w'A'u*4/10)'E ! . \" corrections for vroff ! .if v .ds ~ \\k:\h'-(\\n(.wu*9/10-\*(#H)'\s-2\u~\d\s+2\h'|\\n:u' ! .if v .ds ^ \\k:\h'-(\\n(.wu*10/11-\*(#H)'\v'-.4m'^\v'.4m'\h'|\\n:u' ! . \" for low resolution devices (crt and lpr) ! .if \n(.H>23 .if \n(.V>19 \ ! \{\ ! . ds : e ! . ds 8 ss ! . ds o a ! . ds d- d\h'-1'\(ga ! . ds D- D\h'-1'\(hy ! . ds th \o'bp' ! . ds Th \o'LP' ! . ds ae ae ! . ds Ae AE ! .\} ! .rm #[ #] #H #V #F C ! .\" ====================================================================== ! .\" ! .IX Title "G77 1" ! .TH G77 1 "gcc-3.1" "2002-05-15" "GNU" ! .UC ! .SH "NAME" ! g77 \- \s-1GNU\s0 project Fortran 77 compiler ! .SH "SYNOPSIS" ! .IX Header "SYNOPSIS" ! g77 [\fB\-c\fR|\fB\-S\fR|\fB\-E\fR] ! [\fB\-g\fR] [\fB\-pg\fR] [\fB\-O\fR\fIlevel\fR] ! [\fB\-W\fR\fIwarn\fR...] [\fB\-pedantic\fR] ! [\fB\-I\fR\fIdir\fR...] [\fB\-L\fR\fIdir\fR...] ! [\fB\-D\fR\fImacro\fR[=\fIdefn\fR]...] [\fB\-U\fR\fImacro\fR] ! [\fB\-f\fR\fIoption\fR...] [\fB\-m\fR\fImachine-option\fR...] ! [\fB\-o\fR \fIoutfile\fR] \fIinfile\fR... .PP ! Only the most useful options are listed here; see below for the ! remainder. ! .SH "DESCRIPTION" ! .IX Header "DESCRIPTION" ! The \fBg77\fR command supports all the options supported by the ! \&\fBgcc\fR command. .PP ! All \fBgcc\fR and \fBg77\fR options ! are accepted both by \fBg77\fR and by \fBgcc\fR ! (as well as any other drivers built at the same time, ! such as \fBg++\fR), ! since adding \fBg77\fR to the \fBgcc\fR distribution ! enables acceptance of \fBg77\fR options ! by all of the relevant drivers. .PP ! In some cases, options have positive and negative forms; ! the negative form of \fB\-ffoo\fR would be \fB\-fno-foo\fR. ! This manual documents only one of these two forms, whichever ! one is not the default. ! .SH "OPTIONS" ! .IX Header "OPTIONS" ! Here is a summary of all the options specific to \s-1GNU\s0 Fortran, grouped ! by type. Explanations are in the following sections. ! .Ip "\fIOverall Options\fR" 4 ! .IX Item "Overall Options" ! \&\fB\-fversion \-fset-g77\-defaults \-fno-silent\fR ! .Ip "\fIShorthand Options\fR" 4 ! .IX Item "Shorthand Options" ! \&\fB\-ff66 \-fno-f66 \-ff77 \-fno-f77 \-fno-ugly\fR ! .Ip "\fIFortran Language Options\fR" 4 ! .IX Item "Fortran Language Options" ! \&\fB\-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-\fR\fIn\fR \fB\-ffixed-line-length-none\fR ! .Ip "\fIWarning Options\fR" 4 ! .IX Item "Warning Options" ! \&\fB\-fsyntax-only \-pedantic \-pedantic-errors \-fpedantic ! \&\-w \-Wno-globals \-Wimplicit \-Wunused \-Wuninitialized ! \&\-Wall \-Wsurprising ! \&\-Werror \-W\fR ! .Ip "\fIDebugging Options\fR" 4 ! .IX Item "Debugging Options" ! \&\fB\-g\fR ! .Ip "\fIOptimization Options\fR" 4 ! .IX Item "Optimization Options" ! \&\fB\-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\fR ! .Ip "\fIDirectory Options\fR" 4 ! .IX Item "Directory Options" ! \&\fB\-I\fR\fIdir\fR \fB\-I-\fR ! .Ip "\fICode Generation Options\fR" 4 ! .IX Item "Code Generation Options" ! \&\fB\-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\fR .PP ! 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. .PP ! 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 \s-1GNU\s0 Fortran are listed below. ! .Ip "\fIfile\fR\fB.f\fR" 4 ! .IX Item "file.f" ! .PD 0 ! .Ip "\fIfile\fR\fB.for\fR" 4 ! .IX Item "file.for" ! .Ip "\fIfile\fR\fB.FOR\fR" 4 ! .IX Item "file.FOR" ! .PD ! Fortran source code that should not be preprocessed. ! .Sp ! Such source code cannot contain any preprocessor directives, such ! as \f(CW\*(C`#include\*(C'\fR, \f(CW\*(C`#define\*(C'\fR, \f(CW\*(C`#if\*(C'\fR, and so on. ! .Sp ! You can force \fB.f\fR files to be preprocessed by \fBcpp\fR by using ! \&\fB\-x f77\-cpp-input\fR. ! .Ip "\fIfile\fR\fB.F\fR" 4 ! .IX Item "file.F" ! .PD 0 ! .Ip "\fIfile\fR\fB.fpp\fR" 4 ! .IX Item "file.fpp" ! .Ip "\fIfile\fR\fB.FPP\fR" 4 ! .IX Item "file.FPP" ! .PD ! Fortran source code that must be preprocessed (by the C preprocessor ! \&\fBcpp\fR, which is part of \s-1GNU\s0 \s-1CC\s0). ! .Sp ! Note that preprocessing is not extended to the contents of ! files included by the \f(CW\*(C`INCLUDE\*(C'\fR directive\-\-\-the \f(CW\*(C`#include\*(C'\fR ! preprocessor directive must be used instead. ! .Ip "\fIfile\fR\fB.r\fR" 4 ! .IX Item "file.r" ! Ratfor source code, which must be preprocessed by the \fBratfor\fR ! command, which is available separately (as it is not yet part of the \s-1GNU\s0 ! Fortran distribution). ! One version in Fortran, adapted for use with \fBg77\fR is at ! <\fBftp://members.aol.com/n8tm/rat7.uue\fR> (of uncertain copyright ! status). Another, public domain version in C is at ! <\fBhttp://sepwww.stanford.edu/sep/prof/ratfor.shar.2\fR>. ! .PP ! \&\s-1UNIX\s0 users typically use the \fI\fIfile\fI.f\fR and \fI\fIfile\fI.F\fR ! 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 \fI\fIfile\fI.for\fR and \fI\fIfile\fI.fpp\fR nomenclature. ! .PP ! Use of the preprocessor \fBcpp\fR allows use of C-like ! constructs such as \f(CW\*(C`#define\*(C'\fR and \f(CW\*(C`#include\*(C'\fR, 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 \f(CW\*(C`#include\*(C'\fR and, in ! conjunction with \f(CW\*(C`#define\*(C'\fR, only \f(CW\*(C`#if\*(C'\fR 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. ! .PP ! 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! ! .PP ! \&\fINote:\fR The \fB\-traditional\fR and \fB\-undef\fR flags are supplied ! to \fBcpp\fR by default, to help avoid unpleasant surprises. ! .PP ! This means that \s-1ANSI\s0 C preprocessor features (such as the \fB#\fR ! 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, \fB#ifdef _\|_linux_\|_\fR rather than \fB#ifdef linux\fR. ! Use the \fB\-v\fR option to see exactly how the preprocessor is invoked. ! .PP ! Unfortunately, the \fB\-traditional\fR flag will not avoid an error from ! anything that \fBcpp\fR sees as an unterminated C comment, such as: ! .PP ! .Vb 2 ! \& C Some Fortran compilers accept /* as starting ! \& C an inline comment. ! .Ve ! The following options that affect overall processing are recognized ! by the \fBg77\fR and \fBgcc\fR commands in a \s-1GNU\s0 Fortran installation: ! .Ip "\fB\-fversion\fR" 4 ! .IX Item "-fversion" ! Ensure that the \fBg77\fR version of the compiler phase is reported, ! if run, ! and, starting in \f(CW\*(C`egcs\*(C'\fR version 1.1, ! that internal consistency checks in the \fIf771\fR program are run. ! .Sp ! This option is supplied automatically when \fB\-v\fR or \fB\*(--verbose\fR ! is specified as a command-line option for \fBg77\fR or \fBgcc\fR ! and when the resulting commands compile Fortran source files. ! .Sp ! In \s-1GCC\s0 3.1, this is changed back to the behaviour \fBgcc\fR displays ! for \fB.c\fR files. ! .Ip "\fB\-fset-g77\-defaults\fR" 4 ! .IX Item "-fset-g77-defaults" ! \&\fIVersion info:\fR ! This option was obsolete as of \f(CW\*(C`egcs\*(C'\fR ! version 1.1. ! The effect is instead achieved ! by the \f(CW\*(C`lang_init_options\*(C'\fR routine ! in \fIgcc/gcc/f/com.c\fR. ! .Sp ! Set up whatever \fBgcc\fR options are to apply to Fortran ! compilations, and avoid running internal consistency checks ! that might take some time. ! .Sp ! This option is supplied automatically when compiling Fortran code ! via the \fBg77\fR or \fBgcc\fR command. ! The description of this option is provided so that users seeing ! it in the output of, say, \fBg77 \-v\fR understand why it is ! there. ! .Sp ! Also, developers who run \f(CW\*(C`f771\*(C'\fR directly might want to specify it ! by hand to get the same defaults as they would running \f(CW\*(C`f771\*(C'\fR ! via \fBg77\fR or \fBgcc\fR ! However, such developers should, after linking a new \f(CW\*(C`f771\*(C'\fR ! executable, invoke it without this option once, ! e.g. via \f(CW\*(C`./f771 \-quiet < /dev/null\*(C'\fR, ! to ensure that they have not introduced any ! internal inconsistencies (such as in the table of ! intrinsics) before proceeding\-\--\fBg77\fR will crash ! with a diagnostic if it detects an inconsistency. ! .Ip "\fB\-fno-silent\fR" 4 ! .IX Item "-fno-silent" ! Print (to \f(CW\*(C`stderr\*(C'\fR) the names of the program units as ! they are compiled, in a form similar to that used by popular ! \&\s-1UNIX\s0 \fBf77\fR implementations and \fBf2c\fR ! .Sh "Shorthand Options" ! .IX Subsection "Shorthand Options" ! The following options serve as ``shorthand'' ! for other options accepted by the compiler: ! .Ip "\fB\-fugly\fR" 4 ! .IX Item "-fugly" ! \&\fINote:\fR This option is no longer supported. ! The information, below, is provided to aid ! in the conversion of old scripts. ! .Sp ! Specify that certain ``ugly'' constructs are to be quietly accepted. ! Same as: ! .Sp ! .Vb 3 ! \& -fugly-args -fugly-assign -fugly-assumed ! \& -fugly-comma -fugly-complex -fugly-init ! \& -fugly-logint ! .Ve ! These constructs are considered inappropriate to use in new ! or well-maintained portable Fortran code, but widely used ! in old code. ! .Ip "\fB\-fno-ugly\fR" 4 ! .IX Item "-fno-ugly" ! Specify that all ``ugly'' constructs are to be noisily rejected. ! Same as: ! .Sp ! .Vb 3 ! \& -fno-ugly-args -fno-ugly-assign -fno-ugly-assumed ! \& -fno-ugly-comma -fno-ugly-complex -fno-ugly-init ! \& -fno-ugly-logint ! .Ve ! .Ip "\fB\-ff66\fR" 4 ! .IX Item "-ff66" ! Specify that the program is written in idiomatic \s-1FORTRAN\s0 66. ! Same as \fB\-fonetrip \-fugly-assumed\fR. ! .Sp ! The \fB\-fno-f66\fR option is the inverse of \fB\-ff66\fR. ! As such, it is the same as \fB\-fno-onetrip \-fno-ugly-assumed\fR. ! .Sp ! The meaning of this option is likely to be refined as future ! versions of \fBg77\fR provide more compatibility with other ! existing and obsolete Fortran implementations. ! .Ip "\fB\-ff77\fR" 4 ! .IX Item "-ff77" ! Specify that the program is written in idiomatic \s-1UNIX\s0 \s-1FORTRAN\s0 77 ! and/or the dialect accepted by the \fBf2c\fR product. ! Same as \fB\-fbackslash \-fno-typeless-boz\fR. ! .Sp ! The meaning of this option is likely to be refined as future ! versions of \fBg77\fR provide more compatibility with other ! existing and obsolete Fortran implementations. ! .Ip "\fB\-fno-f77\fR" 4 ! .IX Item "-fno-f77" ! The \fB\-fno-f77\fR option is \fInot\fR the inverse ! of \fB\-ff77\fR. ! It specifies that the program is not written in idiomatic \s-1UNIX\s0 ! \&\s-1FORTRAN\s0 77 or \fBf2c\fR but in a more widely portable dialect. ! \&\fB\-fno-f77\fR is the same as \fB\-fno-backslash\fR. ! .Sp ! The meaning of this option is likely to be refined as future ! versions of \fBg77\fR provide more compatibility with other ! existing and obsolete Fortran implementations. ! .Sh "Options Controlling Fortran Dialect" ! .IX Subsection "Options Controlling Fortran Dialect" ! The following options control the dialect of Fortran ! that the compiler accepts: ! .Ip "\fB\-ffree-form\fR" 4 ! .IX Item "-ffree-form" ! .PD 0 ! .Ip "\fB\-fno-fixed-form\fR" 4 ! .IX Item "-fno-fixed-form" ! .PD ! Specify that the source file is written in free form ! (introduced in Fortran 90) instead of the more-traditional fixed form. ! .Ip "\fB\-ff90\fR" 4 ! .IX Item "-ff90" ! Allow certain Fortran-90 constructs. ! .Sp ! 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 ! \&\fB\-fvxt\fR, \fB\-ff90\-intrinsics-enable\fR, and the ! current level of support for Fortran 90.) ! .Ip "\fB\-fvxt\fR" 4 ! .IX Item "-fvxt" ! Specify the treatment of certain constructs that have different ! meanings depending on whether the code is written in ! \&\s-1GNU\s0 Fortran (based on \s-1FORTRAN\s0 77 and akin to Fortran 90) ! or \s-1VXT\s0 Fortran (more like \s-1VAX\s0 \s-1FORTRAN\s0). ! .Sp ! The default is \fB\-fno-vxt\fR. ! \&\fB\-fvxt\fR specifies that the \s-1VXT\s0 Fortran interpretations ! for those constructs are to be chosen. ! .Ip "\fB\-fdollar-ok\fR" 4 ! .IX Item "-fdollar-ok" ! Allow \fB$\fR as a valid character in a symbol name. ! .Ip "\fB\-fno-backslash\fR" 4 ! .IX Item "-fno-backslash" ! Specify that \fB\e\fR is not to be specially interpreted in character ! and Hollerith constants a la C and many \s-1UNIX\s0 Fortran compilers. ! .Sp ! For example, with \fB\-fbackslash\fR in effect, \fBA\enB\fR specifies ! three characters, with the second one being newline. ! With \fB\-fno-backslash\fR, it specifies four characters, ! \&\fBA\fR, \fB\e\fR, \fBn\fR, and \fBB\fR. ! .Sp ! Note that \fBg77\fR implements a fairly general form of backslash ! processing that is incompatible with the narrower forms supported ! by some other compilers. ! For example, \fB'A\e003B'\fR is a three-character string in \fBg77\fR ! whereas other compilers that support backslash might not support ! the three-octal-digit form, and thus treat that string as longer ! than three characters. ! .Ip "\fB\-fno-ugly-args\fR" 4 ! .IX Item "-fno-ugly-args" ! Disallow passing Hollerith and typeless constants as actual ! arguments (for example, \fB\s-1CALL\s0 FOO(4HABCD)\fR). ! .Ip "\fB\-fugly-assign\fR" 4 ! .IX 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 \fB\s-1ASSIGN\s0 10 \s-1TO\s0 I\fR) or used to hold numeric data ! (as in \fBI = 3\fR). ! .Ip "\fB\-fugly-assumed\fR" 4 ! .IX Item "-fugly-assumed" ! Assume any dummy array with a final dimension specified as \fB1\fR ! is really an assumed-size array, as if \fB*\fR had been specified ! for the final dimension instead of \fB1\fR. ! .Sp ! For example, \fB\s-1DIMENSION\s0 X(1)\fR is treated as if it ! had read \fB\s-1DIMENSION\s0 X(*)\fR. ! .Ip "\fB\-fugly-comma\fR" 4 ! .IX 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. ! .Sp ! For example, \fB\s-1CALL\s0 \f(BIFOO\fB\|(,)\fR is treated as ! \&\fB\s-1CALL\s0 FOO(%\f(BIVAL\fB\|(0), %\f(BIVAL\fB\|(0))\fR. ! That is, \fItwo\fR null arguments are specified ! by the procedure call when \fB\-fugly-comma\fR is in force. ! And \fBF = \f(BIFUNC()\fB\fR is treated as \fBF = FUNC(%\f(BIVAL\fB\|(0))\fR. ! .Sp ! The default behavior, \fB\-fno-ugly-comma\fR, is to ignore ! a single trailing comma in an argument list. ! So, by default, \fB\s-1CALL\s0 FOO(X,)\fR is treated ! exactly the same as \fB\s-1CALL\s0 \f(BIFOO\fB\|(X)\fR. ! .Ip "\fB\-fugly-complex\fR" 4 ! .IX Item "-fugly-complex" ! Do not complain about \fBREAL(\fR\fIexpr\fR\fB)\fR or ! \&\fBAIMAG(\fR\fIexpr\fR\fB)\fR when \fIexpr\fR is a \f(CW\*(C`COMPLEX\*(C'\fR ! type other than \f(CW\*(C`COMPLEX(KIND=1)\*(C'\fR\-\-\-usually ! this is used to permit \f(CW\*(C`COMPLEX(KIND=2)\*(C'\fR ! (\f(CW\*(C`DOUBLE COMPLEX\*(C'\fR) operands. ! .Sp ! The \fB\-ff90\fR option controls the interpretation ! of this construct. ! .Ip "\fB\-fno-ugly-init\fR" 4 ! .IX Item "-fno-ugly-init" ! Disallow use of Hollerith and typeless constants as initial ! values (in \f(CW\*(C`PARAMETER\*(C'\fR and \f(CW\*(C`DATA\*(C'\fR statements), and ! use of character constants to ! initialize numeric types and vice versa. ! .Sp ! For example, \fB\s-1DATA\s0 I/'F'/, \s-1CHRVAR/65/\s0, J/4HABCD/\fR is disallowed by ! \&\fB\-fno-ugly-init\fR. ! .Ip "\fB\-fugly-logint\fR" 4 ! .IX Item "-fugly-logint" ! Treat \f(CW\*(C`INTEGER\*(C'\fR and \f(CW\*(C`LOGICAL\*(C'\fR variables and ! expressions as potential stand-ins for each other. ! .Sp ! For example, automatic conversion between \f(CW\*(C`INTEGER\*(C'\fR and ! \&\f(CW\*(C`LOGICAL\*(C'\fR is enabled, for many contexts, via this option. ! .Ip "\fB\-fonetrip\fR" 4 ! .IX Item "-fonetrip" ! Executable iterative \f(CW\*(C`DO\*(C'\fR loops are to be executed at ! least once each time they are reached. ! .Sp ! \&\s-1ANSI\s0 \s-1FORTRAN\s0 77 and more recent versions of the Fortran standard ! specify that the body of an iterative \f(CW\*(C`DO\*(C'\fR loop is not executed ! if the number of iterations calculated from the parameters of the ! loop is less than 1. ! (For example, \fB\s-1DO\s0 10 I = 1, 0\fR.) ! Such a loop is called a \fIzero-trip loop\fR. ! .Sp ! Prior to \s-1ANSI\s0 \s-1FORTRAN\s0 77, many compilers implemented \f(CW\*(C`DO\*(C'\fR 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 ! \&\fIone-trip loops\fR. ! For example, some code written to the \s-1FORTRAN\s0 66 standard ! expects this behavior from its \f(CW\*(C`DO\*(C'\fR loops, although that ! standard did not specify this behavior. ! .Sp ! The \fB\-fonetrip\fR option specifies that the source \fIfile\fR\|(s) being ! compiled require one-trip loops. ! .Sp ! This option affects only those loops specified by the (iterative) \f(CW\*(C`DO\*(C'\fR ! statement and by implied-\f(CW\*(C`DO\*(C'\fR lists in I/O statements. ! Loops specified by implied-\f(CW\*(C`DO\*(C'\fR lists in \f(CW\*(C`DATA\*(C'\fR and ! specification (non-executable) statements are not affected. ! .Ip "\fB\-ftypeless-boz\fR" 4 ! .IX Item "-ftypeless-boz" ! Specifies that prefix-radix non-decimal constants, such as ! \&\fBZ'\s-1ABCD\s0'\fR, are typeless instead of \f(CW\*(C`INTEGER(KIND=1)\*(C'\fR. ! .Sp ! You can test for yourself whether a particular compiler treats ! the prefix form as \f(CW\*(C`INTEGER(KIND=1)\*(C'\fR or typeless by running the ! following program: ! .Sp ! .Vb 6 ! \& 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 ! .Ve ! Reports indicate that many compilers process this form as ! \&\f(CW\*(C`INTEGER(KIND=1)\*(C'\fR, though a few as typeless, and at least one ! based on a command-line option specifying some kind of ! compatibility. ! .Ip "\fB\-fintrin-case-initcap\fR" 4 ! .IX Item "-fintrin-case-initcap" ! .PD 0 ! .Ip "\fB\-fintrin-case-upper\fR" 4 ! .IX Item "-fintrin-case-upper" ! .Ip "\fB\-fintrin-case-lower\fR" 4 ! .IX Item "-fintrin-case-lower" ! .Ip "\fB\-fintrin-case-any\fR" 4 ! .IX Item "-fintrin-case-any" ! .PD ! Specify expected case for intrinsic names. ! \&\fB\-fintrin-case-lower\fR is the default. ! .Ip "\fB\-fmatch-case-initcap\fR" 4 ! .IX Item "-fmatch-case-initcap" ! .PD 0 ! .Ip "\fB\-fmatch-case-upper\fR" 4 ! .IX Item "-fmatch-case-upper" ! .Ip "\fB\-fmatch-case-lower\fR" 4 ! .IX Item "-fmatch-case-lower" ! .Ip "\fB\-fmatch-case-any\fR" 4 ! .IX Item "-fmatch-case-any" ! .PD ! Specify expected case for keywords. ! \&\fB\-fmatch-case-lower\fR is the default. ! .Ip "\fB\-fsource-case-upper\fR" 4 ! .IX Item "-fsource-case-upper" ! .PD 0 ! .Ip "\fB\-fsource-case-lower\fR" 4 ! .IX Item "-fsource-case-lower" ! .Ip "\fB\-fsource-case-preserve\fR" 4 ! .IX Item "-fsource-case-preserve" ! .PD ! Specify whether source text other than character and Hollerith constants ! is to be translated to uppercase, to lowercase, or preserved as is. ! \&\fB\-fsource-case-lower\fR is the default. ! .Ip "\fB\-fsymbol-case-initcap\fR" 4 ! .IX Item "-fsymbol-case-initcap" ! .PD 0 ! .Ip "\fB\-fsymbol-case-upper\fR" 4 ! .IX Item "-fsymbol-case-upper" ! .Ip "\fB\-fsymbol-case-lower\fR" 4 ! .IX Item "-fsymbol-case-lower" ! .Ip "\fB\-fsymbol-case-any\fR" 4 ! .IX Item "-fsymbol-case-any" ! .PD ! Specify valid cases for user-defined symbol names. ! \&\fB\-fsymbol-case-any\fR is the default. ! .Ip "\fB\-fcase-strict-upper\fR" 4 ! .IX Item "-fcase-strict-upper" ! Same as \fB\-fintrin-case-upper \-fmatch-case-upper \-fsource-case-preserve ! \&\-fsymbol-case-upper\fR. ! (Requires all pertinent source to be in uppercase.) ! .Ip "\fB\-fcase-strict-lower\fR" 4 ! .IX Item "-fcase-strict-lower" ! Same as \fB\-fintrin-case-lower \-fmatch-case-lower \-fsource-case-preserve ! \&\-fsymbol-case-lower\fR. ! (Requires all pertinent source to be in lowercase.) ! .Ip "\fB\-fcase-initcap\fR" 4 ! .IX Item "-fcase-initcap" ! Same as \fB\-fintrin-case-initcap \-fmatch-case-initcap \-fsource-case-preserve ! \&\-fsymbol-case-initcap\fR. ! (Requires all pertinent source to be in initial capitals, ! as in \fBPrint *,SqRt(Value)\fR.) ! .Ip "\fB\-fcase-upper\fR" 4 ! .IX Item "-fcase-upper" ! Same as \fB\-fintrin-case-any \-fmatch-case-any \-fsource-case-upper ! \&\-fsymbol-case-any\fR. ! (Maps all pertinent source to uppercase.) ! .Ip "\fB\-fcase-lower\fR" 4 ! .IX Item "-fcase-lower" ! Same as \fB\-fintrin-case-any \-fmatch-case-any \-fsource-case-lower ! \&\-fsymbol-case-any\fR. ! (Maps all pertinent source to lowercase.) ! .Ip "\fB\-fcase-preserve\fR" 4 ! .IX Item "-fcase-preserve" ! Same as \fB\-fintrin-case-any \-fmatch-case-any \-fsource-case-preserve ! \&\-fsymbol-case-any\fR. ! (Preserves all case in user-defined symbols, ! while allowing any-case matching of intrinsics and keywords. ! For example, \fBcall Foo(i,I)\fR would pass two \fIdifferent\fR ! variables named \fBi\fR and \fBI\fR to a procedure named \fBFoo\fR.) ! .Ip "\fB\-fbadu77\-intrinsics-delete\fR" 4 ! .IX Item "-fbadu77-intrinsics-delete" ! .PD 0 ! .Ip "\fB\-fbadu77\-intrinsics-hide\fR" 4 ! .IX Item "-fbadu77-intrinsics-hide" ! .Ip "\fB\-fbadu77\-intrinsics-disable\fR" 4 ! .IX Item "-fbadu77-intrinsics-disable" ! .Ip "\fB\-fbadu77\-intrinsics-enable\fR" 4 ! .IX Item "-fbadu77-intrinsics-enable" ! .PD ! Specify status of \s-1UNIX\s0 intrinsics having inappropriate forms. ! \&\fB\-fbadu77\-intrinsics-enable\fR is the default. ! .Ip "\fB\-ff2c-intrinsics-delete\fR" 4 ! .IX Item "-ff2c-intrinsics-delete" ! .PD 0 ! .Ip "\fB\-ff2c-intrinsics-hide\fR" 4 ! .IX Item "-ff2c-intrinsics-hide" ! .Ip "\fB\-ff2c-intrinsics-disable\fR" 4 ! .IX Item "-ff2c-intrinsics-disable" ! .Ip "\fB\-ff2c-intrinsics-enable\fR" 4 ! .IX Item "-ff2c-intrinsics-enable" ! .PD ! Specify status of f2c-specific intrinsics. ! \&\fB\-ff2c-intrinsics-enable\fR is the default. ! .Ip "\fB\-ff90\-intrinsics-delete\fR" 4 ! .IX Item "-ff90-intrinsics-delete" ! .PD 0 ! .Ip "\fB\-ff90\-intrinsics-hide\fR" 4 ! .IX Item "-ff90-intrinsics-hide" ! .Ip "\fB\-ff90\-intrinsics-disable\fR" 4 ! .IX Item "-ff90-intrinsics-disable" ! .Ip "\fB\-ff90\-intrinsics-enable\fR" 4 ! .IX Item "-ff90-intrinsics-enable" ! .PD ! Specify status of F90\-specific intrinsics. ! \&\fB\-ff90\-intrinsics-enable\fR is the default. ! .Ip "\fB\-fgnu-intrinsics-delete\fR" 4 ! .IX Item "-fgnu-intrinsics-delete" ! .PD 0 ! .Ip "\fB\-fgnu-intrinsics-hide\fR" 4 ! .IX Item "-fgnu-intrinsics-hide" ! .Ip "\fB\-fgnu-intrinsics-disable\fR" 4 ! .IX Item "-fgnu-intrinsics-disable" ! .Ip "\fB\-fgnu-intrinsics-enable\fR" 4 ! .IX Item "-fgnu-intrinsics-enable" ! .PD ! Specify status of Digital's COMPLEX-related intrinsics. ! \&\fB\-fgnu-intrinsics-enable\fR is the default. ! .Ip "\fB\-fmil-intrinsics-delete\fR" 4 ! .IX Item "-fmil-intrinsics-delete" ! .PD 0 ! .Ip "\fB\-fmil-intrinsics-hide\fR" 4 ! .IX Item "-fmil-intrinsics-hide" ! .Ip "\fB\-fmil-intrinsics-disable\fR" 4 ! .IX Item "-fmil-intrinsics-disable" ! .Ip "\fB\-fmil-intrinsics-enable\fR" 4 ! .IX Item "-fmil-intrinsics-enable" ! .PD ! Specify status of MIL-STD-1753\-specific intrinsics. ! \&\fB\-fmil-intrinsics-enable\fR is the default. ! .Ip "\fB\-funix-intrinsics-delete\fR" 4 ! .IX Item "-funix-intrinsics-delete" ! .PD 0 ! .Ip "\fB\-funix-intrinsics-hide\fR" 4 ! .IX Item "-funix-intrinsics-hide" ! .Ip "\fB\-funix-intrinsics-disable\fR" 4 ! .IX Item "-funix-intrinsics-disable" ! .Ip "\fB\-funix-intrinsics-enable\fR" 4 ! .IX Item "-funix-intrinsics-enable" ! .PD ! Specify status of \s-1UNIX\s0 intrinsics. ! \&\fB\-funix-intrinsics-enable\fR is the default. ! .Ip "\fB\-fvxt-intrinsics-delete\fR" 4 ! .IX Item "-fvxt-intrinsics-delete" ! .PD 0 ! .Ip "\fB\-fvxt-intrinsics-hide\fR" 4 ! .IX Item "-fvxt-intrinsics-hide" ! .Ip "\fB\-fvxt-intrinsics-disable\fR" 4 ! .IX Item "-fvxt-intrinsics-disable" ! .Ip "\fB\-fvxt-intrinsics-enable\fR" 4 ! .IX Item "-fvxt-intrinsics-enable" ! .PD ! Specify status of \s-1VXT\s0 intrinsics. ! \&\fB\-fvxt-intrinsics-enable\fR is the default. ! .Ip "\fB\-ffixed-line-length-\fR\fIn\fR" 4 ! .IX Item "-ffixed-line-length-n" ! 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. ! .Sp ! Popular values for \fIn\fR include 72 (the ! standard and the default), 80 (card image), and 132 (corresponds ! to ``extended-source'' options in some popular compilers). ! \&\fIn\fR may be \fBnone\fR, meaning that the entire line is meaningful ! and that continued character constants never have implicit spaces appended ! to them to fill out the line. ! \&\fB\-ffixed-line-length-0\fR means the same thing as ! \&\fB\-ffixed-line-length-none\fR. ! .Sh "Options to Request or Suppress Warnings" ! .IX Subsection "Options to Request or Suppress 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. ! .PP ! You can request many specific warnings with options beginning \fB\-W\fR, ! for example \fB\-Wimplicit\fR to request warnings on implicit ! declarations. Each of these specific warning options also has a ! negative form beginning \fB\-Wno-\fR to turn off warnings; ! for example, \fB\-Wno-implicit\fR. This manual lists only one of the ! two forms, whichever is not the default. ! .PP ! These options control the amount and kinds of warnings produced by \s-1GNU\s0 ! Fortran: ! .Ip "\fB\-fsyntax-only\fR" 4 ! .IX Item "-fsyntax-only" ! Check the code for syntax errors, but don't do anything beyond that. ! .Ip "\fB\-pedantic\fR" 4 ! .IX Item "-pedantic" ! Issue warnings for uses of extensions to \s-1ANSI\s0 \s-1FORTRAN\s0 77. ! \&\fB\-pedantic\fR also applies to C-language constructs where they ! occur in \s-1GNU\s0 Fortran source files, such as use of \fB\ee\fR in a ! character constant within a directive like \fB#include\fR. ! .Sp ! Valid \s-1ANSI\s0 \s-1FORTRAN\s0 77 programs should compile properly with or without ! this option. ! However, without this option, certain \s-1GNU\s0 extensions and traditional ! Fortran features are supported as well. ! With this option, many of them are rejected. ! .Sp ! Some users try to use \fB\-pedantic\fR to check programs for strict \s-1ANSI\s0 ! 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 \fBg77\fR in this area are welcome. ! .Ip "\fB\-pedantic-errors\fR" 4 ! .IX Item "-pedantic-errors" ! Like \fB\-pedantic\fR, except that errors are produced rather than ! warnings. ! .Ip "\fB\-fpedantic\fR" 4 ! .IX Item "-fpedantic" ! Like \fB\-pedantic\fR, but applies only to Fortran constructs. ! .Ip "\fB\-w\fR" 4 ! .IX Item "-w" ! Inhibit all warning messages. ! .Ip "\fB\-Wno-globals\fR" 4 ! .IX Item "-Wno-globals" ! 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. ! .Sp ! 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. ! .Ip "\fB\-Wimplicit\fR" 4 ! .IX Item "-Wimplicit" ! Warn whenever a variable, array, or function is implicitly ! declared. ! Has an effect similar to using the \f(CW\*(C`IMPLICIT NONE\*(C'\fR statement ! in every program unit. ! (Some Fortran compilers provide this feature by an option ! named \fB\-u\fR or \fB/WARNINGS=DECLARATIONS\fR.) ! .Ip "\fB\-Wunused\fR" 4 ! .IX Item "-Wunused" ! Warn whenever a variable is unused aside from its declaration. ! .Ip "\fB\-Wuninitialized\fR" 4 ! .IX Item "-Wuninitialized" ! Warn whenever an automatic variable is used without first being initialized. ! .Sp ! 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 \fB\-O\fR, you simply won't ! get these warnings. ! .Sp ! These warnings occur only for variables that are candidates for ! register allocation. Therefore, they do not occur for a variable ! 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. ! .Sp ! 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. ! .Sp ! These warnings are made optional because \s-1GNU\s0 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: ! .Sp ! .Vb 6 ! \& 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 ! .Ve ! If the value of \f(CW\*(C`J\*(C'\fR is always 1, 2 or 3, then \f(CW\*(C`I\*(C'\fR is ! always initialized, but \s-1GNU\s0 Fortran doesn't know this. Here is ! another common case: ! .Sp ! .Vb 6 ! \& SUBROUTINE MAYBE(FLAG) ! \& LOGICAL FLAG ! \& IF (FLAG) VALUE = 9.4 ! \& ... ! \& IF (FLAG) PRINT *, VALUE ! \& END ! .Ve ! This has no bug because \f(CW\*(C`VALUE\*(C'\fR is used only if it is set. ! .Ip "\fB\-Wall\fR" 4 ! .IX Item "-Wall" ! The \fB\-Wunused\fR and \fB\-Wuninitialized\fR 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 \fBg77\fR some might ! be added to the list enabled by \fB\-Wall\fR.) ! .PP ! The remaining \fB\-W...\fR options are not implied by \fB\-Wall\fR ! because they warn about constructions that we consider reasonable to ! use, on occasion, in clean programs. ! .Ip "\fB\-Wsurprising\fR" 4 ! .IX 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: ! .RS 4 ! .Ip "\(bu" 4 ! Expressions having two arithmetic operators in a row, such ! as \fBX*\-Y\fR. ! Such a construct is nonstandard, and can produce ! unexpected results in more complicated situations such ! as \fBX**\-Y*Z\fR. ! \&\fBg77\fR along with many other compilers, interprets ! this example differently than many programmers, and a few ! other compilers. ! Specifically, \fBg77\fR interprets \fBX**\-Y*Z\fR as ! \&\fB(X**(\-Y))*Z\fR, while others might think it should ! be interpreted as \fBX**(\-(Y*Z))\fR. ! .Sp ! A revealing example is the constant expression \fB2**\-2*1.\fR, ! which \fBg77\fR evaluates to .25, while others might evaluate ! it to 0., the difference resulting from the way precedence affects ! type promotion. ! .Sp ! (The \fB\-fpedantic\fR option also warns about expressions ! having two arithmetic operators in a row.) ! .Ip "\(bu" 4 ! Expressions with a unary minus followed by an operand and then ! a binary operator other than plus or minus. ! For example, \fB\-2**2\fR produces a warning, because ! the precedence is \fB\-(2**2)\fR, yielding \-4, not ! \&\fB(\-2)**2\fR, which yields 4, and which might represent ! what a programmer expects. ! .Sp ! An example of an expression producing different results ! in a surprising way is \fB\-I*S\fR, where \fII\fR holds ! the value \fB\-2147483648\fR and \fIS\fR holds \fB0.5\fR. ! On many systems, negating \fII\fR results in the same ! value, not a positive number, because it is already the ! lower bound of what an \f(CW\*(C`INTEGER(KIND=1)\*(C'\fR variable can hold. ! So, the expression evaluates to a positive number, while ! the ``expected'' interpretation, \fB(\-I)*S\fR, would ! evaluate to a negative number. ! .Sp ! Even cases such as \fB\-I*J\fR 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. ! .Ip "\(bu" 4 ! \&\f(CW\*(C`DO\*(C'\fR loops with \f(CW\*(C`DO\*(C'\fR variables that are not ! of integral type\-\-\-that is, using \f(CW\*(C`REAL\*(C'\fR ! variables as loop control variables. ! Although such loops can be written to work in the ! ``obvious'' way, the way \fBg77\fR 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 \f(CW\*(C`DO\*(C'\fR loops, but the differences ! are pronounced for non-integral loop control variables.) ! .RE ! .RS 4 ! .RE ! .Ip "\fB\-Werror\fR" 4 ! .IX Item "-Werror" ! Make all warnings into errors. ! .Ip "\fB\-W\fR" 4 ! .IX Item "-W" ! Turns on ``extra warnings'' and, if optimization is specified ! via \fB\-O\fR, the \fB\-Wuninitialized\fR option. ! (This might change in future versions of \fBg77\fR ! .Sp ! ``Extra warnings'' are issued for: ! .RS 4 ! .Ip "\(bu" 4 ! Unused parameters to a procedure (when \fB\-Wunused\fR also is ! specified). ! .Ip "\(bu" 4 ! Overflows involving floating-point constants (not available ! for certain configurations). ! .RE ! .RS 4 ! .RE ! .PP ! Some of these have no effect when compiling programs written in Fortran: ! .Ip "\fB\-Wcomment\fR" 4 ! .IX Item "-Wcomment" ! .PD 0 ! .Ip "\fB\-Wformat\fR" 4 ! .IX Item "-Wformat" ! .Ip "\fB\-Wparentheses\fR" 4 ! .IX Item "-Wparentheses" ! .Ip "\fB\-Wswitch\fR" 4 ! .IX Item "-Wswitch" ! .Ip "\fB\-Wtraditional\fR" 4 ! .IX Item "-Wtraditional" ! .Ip "\fB\-Wshadow\fR" 4 ! .IX Item "-Wshadow" ! .Ip "\fB\-Wid-clash-\fR\fIlen\fR" 4 ! .IX Item "-Wid-clash-len" ! .Ip "\fB\-Wlarger-than-\fR\fIlen\fR" 4 ! .IX Item "-Wlarger-than-len" ! .Ip "\fB\-Wconversion\fR" 4 ! .IX Item "-Wconversion" ! .Ip "\fB\-Waggregate-return\fR" 4 ! .IX Item "-Waggregate-return" ! .Ip "\fB\-Wredundant-decls\fR" 4 ! .IX Item "-Wredundant-decls" ! .PD ! These options all could have some relevant meaning for ! \&\s-1GNU\s0 Fortran programs, but are not yet supported. ! .Sh "Options for Debugging Your Program or \s-1GNU\s0 Fortran" ! .IX Subsection "Options for Debugging Your Program or GNU Fortran" ! \&\s-1GNU\s0 Fortran has various special options that are used for debugging ! either your program or \fBg77\fR ! .Ip "\fB\-g\fR" 4 ! .IX Item "-g" Produce debugging information in the operating system's native format ! (stabs, \s-1COFF\s0, \s-1XCOFF\s0, or \s-1DWARF\s0). \s-1GDB\s0 can work with this debugging ! information. ! .Sp ! A sample debugging session looks like this (note the use of the breakpoint): ! .Sp ! .Vb 24 ! \& $ cat gdb.f ! \& PROGRAM PROG ! \& DIMENSION A(10) ! \& DATA A /1.,2.,3.,4.,5.,6.,7.,8.,9.,10./ ! \& A(5) = 4. ! \& PRINT*,A ! \& END ! \& $ g77 -g -O gdb.f ! \& $ gdb a.out ! \& ... ! \& (gdb) break MAIN__ ! \& Breakpoint 1 at 0x8048e96: file gdb.f, line 4. ! \& (gdb) run ! \& Starting program: /home/toon/g77-bugs/./a.out ! \& Breakpoint 1, MAIN__ () at gdb.f:4 ! \& 4 A(5) = 4. ! \& Current language: auto; currently fortran ! \& (gdb) print a(5) ! \& $1 = 5 ! \& (gdb) step ! \& 5 PRINT*,A ! \& (gdb) print a(5) ! \& $2 = 4 ! \& ... ! .Ve ! One could also add the setting of the breakpoint and the first run command ! to the file \fI.gdbinit\fR in the current directory, to simplify the debugging ! session. ! .Sh "Options That Control Optimization" ! .IX Subsection "Options That Control Optimization" ! Most Fortran users will want to use no optimization when ! developing and testing programs, and use \fB\-O\fR or \fB\-O2\fR 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 \fB\-O\fR, i.e. you ! must use \fB\-O\fR or \fB\-O2\fR to get such diagnostics. .PP ! The following flags have particular applicability when ! compiling Fortran programs: ! .Ip "\fB\-malign-double\fR" 4 ! .IX Item "-malign-double" ! (Intel x86 architecture only.) ! .Sp ! Noticeably improves performance of \fBg77\fR programs making ! heavy use of \f(CW\*(C`REAL(KIND=2)\*(C'\fR (\f(CW\*(C`DOUBLE PRECISION\*(C'\fR) data ! on some systems. ! In particular, systems using Pentium, Pentium Pro, 586, and ! 686 implementations ! of the i386 architecture execute programs faster when ! \&\f(CW\*(C`REAL(KIND=2)\*(C'\fR (\f(CW\*(C`DOUBLE PRECISION\*(C'\fR) data are ! aligned on 64\-bit boundaries ! in memory. ! .Sp ! This option can, at least, make benchmark results more consistent ! across various system configurations, versions of the program, ! and data sets. ! .Sp ! \&\fINote:\fR The warning in the \fBgcc\fR documentation about ! this option does not apply, generally speaking, to Fortran ! code compiled by \fBg77\fR ! .Sp ! \&\fIAlso also note:\fR The negative form of \fB\-malign-double\fR ! is \fB\-mno-align-double\fR, not \fB\-benign-double\fR. ! .Ip "\fB\-ffloat-store\fR" 4 ! .IX Item "-ffloat-store" ! Might help a Fortran program that depends on exact \s-1IEEE\s0 conformance on ! some machines, but might slow down a program that doesn't. ! .Sp ! This option is effective when the floating-point unit is set to work in ! \&\s-1IEEE\s0 854 `extended precision'\-\-\-as it typically is on x86 and m68k \s-1GNU\s0 ! systems\-\-\-rather than \s-1IEEE\s0 754 double precision. \fB\-ffloat-store\fR ! 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: ! .Sp ! .Vb 2 ! \& a = b + c ! \& d = a * e ! .Ve ! but not in code like: ! .Sp ! .Vb 1 ! \& d = (b + c) * e ! .Ve ! For another, potentially better, way of controlling the precision, ! see \f(CW@ref\fR{Floating-point precision}. ! .Ip "\fB\-fforce-mem\fR" 4 ! .IX Item "-fforce-mem" ! .PD 0 ! .Ip "\fB\-fforce-addr\fR" 4 ! .IX Item "-fforce-addr" ! .PD ! Might improve optimization of loops. ! .Ip "\fB\-fno-inline\fR" 4 ! .IX Item "-fno-inline" ! 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. ! .Ip "\fB\-ffast-math\fR" 4 ! .IX Item "-ffast-math" ! Might allow some programs designed to not be too dependent ! on \s-1IEEE\s0 behavior for floating-point to run faster, or die trying. ! Sets \fB\-funsafe-math-optimizations\fR, and ! \&\fB\-fno-trapping-math\fR. ! .Ip "\fB\-funsafe-math-optimizations\fR" 4 ! .IX Item "-funsafe-math-optimizations" ! Allow optimizations that may be give incorrect results ! for certain \s-1IEEE\s0 inputs. ! .Ip "\fB\-fno-trapping-math\fR" 4 ! .IX 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 \s-1IEEE\s0 \*(L"non-stop\*(R" ! floating-point arithmetic. ! .Ip "\fB\-fstrength-reduce\fR" 4 ! .IX Item "-fstrength-reduce" ! Might make some loops run faster. ! .Ip "\fB\-frerun-cse-after-loop\fR" 4 ! .IX Item "-frerun-cse-after-loop" ! .PD 0 ! .Ip "\fB\-fexpensive-optimizations\fR" 4 ! .IX Item "-fexpensive-optimizations" ! .Ip "\fB\-fdelayed-branch\fR" 4 ! .IX Item "-fdelayed-branch" ! .Ip "\fB\-fschedule-insns\fR" 4 ! .IX Item "-fschedule-insns" ! .Ip "\fB\-fschedule-insns2\fR" 4 ! .IX Item "-fschedule-insns2" ! .Ip "\fB\-fcaller-saves\fR" 4 ! .IX Item "-fcaller-saves" ! .PD ! Might improve performance on some code. ! .Ip "\fB\-funroll-loops\fR" 4 ! .IX Item "-funroll-loops" ! Typically improves performance on code using iterative \f(CW\*(C`DO\*(C'\fR 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. ! .Sp ! Also, no `loop discovery'[1] is done, so only loops written with \f(CW\*(C`DO\*(C'\fR ! benefit from loop optimizations, including\-\-\-but not limited ! to\-\-\-unrolling. Loops written with \f(CW\*(C`IF\*(C'\fR and \f(CW\*(C`GOTO\*(C'\fR are not ! currently recognized as such. This option unrolls only iterative ! \&\f(CW\*(C`DO\*(C'\fR loops, not \f(CW\*(C`DO WHILE\*(C'\fR loops. ! .Ip "\fB\-funroll-all-loops\fR" 4 ! .IX Item "-funroll-all-loops" ! Probably improves performance on code using \f(CW\*(C`DO WHILE\*(C'\fR loops by ! unrolling them in addition to iterative \f(CW\*(C`DO\*(C'\fR loops. In the absence ! of \f(CW\*(C`DO WHILE\*(C'\fR, this option is equivalent to \fB\-funroll-loops\fR ! but possibly slower. ! .Ip "\fB\-fno-move-all-movables\fR" 4 ! .IX Item "-fno-move-all-movables" ! .PD 0 ! .Ip "\fB\-fno-reduce-all-givs\fR" 4 ! .IX Item "-fno-reduce-all-givs" ! .Ip "\fB\-fno-rerun-loop-opt\fR" 4 ! .IX Item "-fno-rerun-loop-opt" ! .PD ! \&\fIVersion info:\fR ! These options are not supported by ! versions of \fBg77\fR based on \fBgcc\fR version 2.8. ! .Sp ! Each of these might improve performance on some code. ! .Sp ! Analysis of Fortran code optimization and the resulting ! optimizations triggered by the above options were ! contributed by Toon Moene (<\fBtoon@moene.indiv.nluug.nl\fR>). ! .Sp ! 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. ! .Sp ! 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 \fIdisabled\fR, and in ! non-Fortran code that benefits when they are ! \&\fIenabled\fR via the above \fBgcc\fR command-line options. ! .Sh "Options Controlling the Preprocessor" ! .IX Subsection "Options Controlling the Preprocessor" ! These options control the C preprocessor, which is run on each C source ! file before actual compilation. ! .PP ! Some of these options also affect how \fBg77\fR processes the ! \&\f(CW\*(C`INCLUDE\*(C'\fR directive. ! Since this directive is processed even when preprocessing ! is not requested, it is not described in this section. ! .PP ! However, the \f(CW\*(C`INCLUDE\*(C'\fR directive does not apply ! preprocessing to the contents of the included file itself. ! .PP ! Therefore, any file that contains preprocessor directives ! (such as \f(CW\*(C`#include\*(C'\fR, \f(CW\*(C`#define\*(C'\fR, and \f(CW\*(C`#if\*(C'\fR) ! must be included via the \f(CW\*(C`#include\*(C'\fR directive, not ! via the \f(CW\*(C`INCLUDE\*(C'\fR directive. ! Therefore, any file containing preprocessor directives, ! if included, is necessarily included by a file that itself ! contains preprocessor directives. ! .Sh "Options for Directory Search" ! .IX Subsection "Options for Directory Search" ! These options affect how the \fBcpp\fR preprocessor searches ! for files specified via the \f(CW\*(C`#include\*(C'\fR directive. ! Therefore, when compiling Fortran programs, they are meaningful ! when the preprocessor is used. ! .PP ! Some of these options also affect how \fBg77\fR searches ! for files specified via the \f(CW\*(C`INCLUDE\*(C'\fR directive, ! although files included by that directive are not, ! themselves, preprocessed. ! These options are: ! .Ip "\fB\-I-\fR" 4 ! .IX Item "-I-" ! .PD 0 ! .Ip "\fB\-I\fR\fIdir\fR" 4 ! .IX Item "-Idir" ! .PD ! These affect interpretation of the \f(CW\*(C`INCLUDE\*(C'\fR directive ! (as well as of the \f(CW\*(C`#include\*(C'\fR directive of the \fBcpp\fR ! preprocessor). ! .Sp ! Note that \fB\-I\fR\fIdir\fR must be specified \fIwithout\fR any ! spaces between \fB\-I\fR and the directory name\-\-\-that is, ! \&\fB\-Ifoo/bar\fR is valid, but \fB\-I foo/bar\fR ! is rejected by the \fBg77\fR compiler (though the preprocessor supports ! the latter form). ! Also note that the general behavior of \fB\-I\fR and ! \&\f(CW\*(C`INCLUDE\*(C'\fR is pretty much the same as of \fB\-I\fR with ! \&\f(CW\*(C`#include\*(C'\fR in the \fBcpp\fR preprocessor, with regard to ! looking for \fIheader.gcc\fR files and other such things. ! .Sh "Options for Code Generation Conventions" ! .IX Subsection "Options for Code Generation Conventions" ! These machine-independent options control the interface conventions ! used in code generation. ! .PP ! Most of them have both positive and negative forms; the negative form ! of \fB\-ffoo\fR would be \fB\-fno-foo\fR. 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 \fBno-\fR or adding ! it. ! .Ip "\fB\-fno-automatic\fR" 4 ! .IX Item "-fno-automatic" ! Treat each program unit as if the \f(CW\*(C`SAVE\*(C'\fR 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 \fB\-static\fR.) ! .Ip "\fB\-finit-local-zero\fR" 4 ! .IX Item "-finit-local-zero" ! 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. ! .Sp ! Since there is a run-time penalty for initialization of variables ! that are not given the \f(CW\*(C`SAVE\*(C'\fR attribute, it might be a ! good idea to also use \fB\-fno-automatic\fR with \fB\-finit-local-zero\fR. ! .Ip "\fB\-fno-f2c\fR" 4 ! .IX Item "-fno-f2c" ! Do not generate code designed to be compatible with code generated ! by \fBf2c\fR use the \s-1GNU\s0 calling conventions instead. ! .Sp ! The \fBf2c\fR calling conventions require functions that return ! type \f(CW\*(C`REAL(KIND=1)\*(C'\fR to actually return the C type \f(CW\*(C`double\*(C'\fR, ! and functions that return type \f(CW\*(C`COMPLEX\*(C'\fR to return the ! values via an extra argument in the calling sequence that points ! to where to store the return value. ! Under the \s-1GNU\s0 calling conventions, such functions simply return ! their results as they would in \s-1GNU\s0 C\-\--\f(CW\*(C`REAL(KIND=1)\*(C'\fR functions ! return the C type \f(CW\*(C`float\*(C'\fR, and \f(CW\*(C`COMPLEX\*(C'\fR functions ! return the \s-1GNU\s0 C type \f(CW\*(C`complex\*(C'\fR (or its \f(CW\*(C`struct\*(C'\fR ! equivalent). ! .Sp ! This does not affect the generation of code that interfaces with the ! \&\f(CW\*(C`libg2c\*(C'\fR library. ! .Sp ! However, because the \f(CW\*(C`libg2c\*(C'\fR library uses \fBf2c\fR ! calling conventions, \fBg77\fR rejects attempts to pass ! intrinsics implemented by routines in this library as actual ! arguments when \fB\-fno-f2c\fR is used, to avoid bugs when ! they are actually called by code expecting the \s-1GNU\s0 calling ! conventions to work. ! .Sp ! For example, \fB\s-1INTRINSIC\s0 \s-1ABS\s0;CALL FOO(\s-1ABS\s0)\fR is ! rejected when \fB\-fno-f2c\fR is in force. ! (Future versions of the \fBg77\fR run-time library might ! offer routines that provide GNU-callable versions of the ! routines that implement the \fBf2c\fR intrinsics ! that may be passed as actual arguments, so that ! valid programs need not be rejected when \fB\-fno-f2c\fR ! is used.) ! .Sp ! \&\fBCaution:\fR If \fB\-fno-f2c\fR is used when compiling any ! source file used in a program, it must be used when compiling ! \&\fIall\fR Fortran source files used in that program. ! .Ip "\fB\-ff2c-library\fR" 4 ! .IX Item "-ff2c-library" ! Specify that use of \f(CW\*(C`libg2c\*(C'\fR (or the original \f(CW\*(C`libf2c\*(C'\fR) ! is required. ! This is the default for the current version of \fBg77\fR ! .Sp ! Currently it is not ! valid to specify \fB\-fno-f2c-library\fR. ! This option is provided so users can specify it in shell ! scripts that build programs and libraries that require the ! \&\f(CW\*(C`libf2c\*(C'\fR library, even when being compiled by future ! versions of \fBg77\fR that might otherwise default to ! generating code for an incompatible library. ! .Ip "\fB\-fno-underscoring\fR" 4 ! .IX Item "-fno-underscoring" ! Do not transform names of entities specified in the Fortran ! source file by appending underscores to them. ! .Sp ! With \fB\-funderscoring\fR in effect, \fBg77\fR appends two underscores ! to names with underscores and one underscore to external names with ! no underscores. (\fBg77\fR also appends two underscores to internal ! names with underscores to avoid naming collisions with external names. ! The \fB\-fno-second-underscore\fR option disables appending of the ! second underscore in all cases.) ! .Sp ! This is done to ensure compatibility with code produced by many ! \&\s-1UNIX\s0 Fortran compilers, including \fBf2c\fR which perform the ! same transformations. ! .Sp ! Use of \fB\-fno-underscoring\fR is not recommended unless you are ! experimenting with issues such as integration of (\s-1GNU\s0) Fortran into ! existing system environments (vis-a-vis existing libraries, tools, and ! so on). ! .Sp ! For example, with \fB\-funderscoring\fR, and assuming other defaults like ! \&\fB\-fcase-lower\fR and that \fB\f(BIj()\fB\fR and \fB\f(BImax_count()\fB\fR are ! external functions while \fBmy_var\fR and \fBlvar\fR are local variables, ! a statement like ! .Sp ! .Vb 1 ! \& I = J() + MAX_COUNT (MY_VAR, LVAR) ! .Ve ! is implemented as something akin to: ! .Sp ! .Vb 1 ! \& i = j_() + max_count__(&my_var__, &lvar); ! .Ve ! With \fB\-fno-underscoring\fR, the same statement is implemented as: ! .Sp ! .Vb 1 ! \& i = j() + max_count(&my_var, &lvar); ! .Ve ! Use of \fB\-fno-underscoring\fR allows direct specification of ! user-defined names while debugging and when interfacing \fBg77\fR ! code with other languages. ! .Sp ! Note that just because the names match does \fInot\fR mean that the ! interface implemented by \fBg77\fR for an external name matches the ! interface implemented by some other language for that same name. ! That is, getting code produced by \fBg77\fR 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. ! .Sp ! Also, note that with \fB\-fno-underscoring\fR, 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. ! .Sp ! In future versions of \fBg77\fR 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. ! .Ip "\fB\-fno-second-underscore\fR" 4 ! .IX Item "-fno-second-underscore" ! Do not append a second underscore to names of entities specified ! in the Fortran source file. ! .Sp ! This option has no effect if \fB\-fno-underscoring\fR is ! in effect. ! .Sp ! Otherwise, with this option, an external name such as \fB\s-1MAX_COUNT\s0\fR ! is implemented as a reference to the link-time external symbol ! \&\fBmax_count_\fR, instead of \fBmax_count_\|_\fR. ! .Ip "\fB\-fno-ident\fR" 4 ! .IX Item "-fno-ident" ! Ignore the \fB#ident\fR directive. ! .Ip "\fB\-fzeros\fR" 4 ! .IX Item "-fzeros" ! Treat initial values of zero as if they were any other value. ! .Sp ! As of version 0.5.18, \fBg77\fR normally treats \f(CW\*(C`DATA\*(C'\fR 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. ! .Sp ! This is done to speed up compiling of programs that initialize ! large arrays to zeros. ! .Sp ! Use \fB\-fzeros\fR to revert to the simpler, slower behavior ! that can catch multiple initializations by keeping track of ! all initializations, zero or otherwise. ! .Sp ! \&\fICaution:\fR Future versions of \fBg77\fR 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. ! .Ip "\fB\-femulate-complex\fR" 4 ! .IX Item "-femulate-complex" ! Implement \f(CW\*(C`COMPLEX\*(C'\fR arithmetic via emulation, ! instead of using the facilities of ! the \fBgcc\fR back end that provide direct support of ! \&\f(CW\*(C`complex\*(C'\fR arithmetic. ! .Sp ! (\fBgcc\fR had some bugs in its back-end support ! for \f(CW\*(C`complex\*(C'\fR arithmetic, due primarily to the support not being ! completed as of version 2.8.1 and \f(CW\*(C`egcs\*(C'\fR 1.1.2.) ! .Sp ! Use \fB\-femulate-complex\fR if you suspect code-generation bugs, ! or experience compiler crashes, ! that might result from \fBg77\fR using the \f(CW\*(C`COMPLEX\*(C'\fR support ! in the \fBgcc\fR back end. ! If using that option fixes the bugs or crashes you are seeing, ! that indicates a likely \fBg77\fR 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.) ! .Sp ! Use of this option should not affect how Fortran code compiled ! by \fBg77\fR works in terms of its interfaces to other code, ! e.g. that compiled by \fBf2c\fR ! .Sp ! As of \s-1GCC\s0 version 3.0, this option is not necessary anymore. ! .Sp ! \&\fICaution:\fR Future versions of \fBg77\fR might ignore both forms ! of this option. ! .Ip "\fB\-falias-check\fR" 4 ! .IX Item "-falias-check" ! .PD 0 ! .Ip "\fB\-fargument-alias\fR" 4 ! .IX Item "-fargument-alias" ! .Ip "\fB\-fargument-noalias\fR" 4 ! .IX Item "-fargument-noalias" ! .Ip "\fB\-fno-argument-noalias-global\fR" 4 ! .IX Item "-fno-argument-noalias-global" ! .PD ! \&\fIVersion info:\fR ! These options are not supported by ! versions of \fBg77\fR based on \fBgcc\fR version 2.8. ! .Sp ! These options specify to what degree aliasing ! (overlap) ! is permitted between ! arguments (passed as pointers) and \f(CW\*(C`COMMON\*(C'\fR (external, or ! public) storage. ! .Sp ! The default for Fortran code, as mandated by the \s-1FORTRAN\s0 77 and ! Fortran 90 standards, is \fB\-fargument-noalias-global\fR. ! The default for code written in the C language family is ! \&\fB\-fargument-alias\fR. ! .Sp ! Note that, on some systems, compiling with \fB\-fforce-addr\fR in ! effect can produce more optimal code when the default aliasing ! options are in effect (and when optimization is enabled). ! .Ip "\fB\-fno-globals\fR" 4 ! .IX Item "-fno-globals" ! 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 \fB\-Wno-globals\fR is specified, ! in which case no relevant diagnostics are produced.) ! .Sp ! Further, this option disables such inlining, to ! avoid compiler crashes resulting from incorrect ! code that would otherwise be diagnosed. ! .Sp ! 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 \fBg77\fR diagnoses. ! .Sp ! Use of this option therefore has the effect of ! instructing \fBg77\fR 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). ! .Sp ! Without this option, \fBg77\fR 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. ! .Ip "\fB\-fflatten-arrays\fR" 4 ! .IX Item "-fflatten-arrays" ! Use back end's C-like constructs ! (pointer plus offset) ! instead of its \f(CW\*(C`ARRAY_REF\*(C'\fR construct ! to handle all array references. ! .Sp ! \&\fINote:\fR This option is not supported. ! It is intended for use only by \fBg77\fR developers, ! to evaluate code-generation issues. ! It might be removed at any time. ! .Ip "\fB\-fbounds-check\fR" 4 ! .IX Item "-fbounds-check" ! .PD 0 ! .Ip "\fB\-ffortran-bounds-check\fR" 4 ! .IX Item "-ffortran-bounds-check" ! .PD ! Enable generation of run-time checks for array subscripts ! and substring start and end points ! against the (locally) declared minimum and maximum values. ! .Sp ! The current implementation uses the \f(CW\*(C`libf2c\*(C'\fR ! library routine \f(CW\*(C`s_rnge\*(C'\fR to print the diagnostic. ! .Sp ! However, whereas \fBf2c\fR 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), ! \&\fBg77\fR generates a single check per \fIsubscript\fR expression. ! This catches some cases of potential bugs that \fBf2c\fR does not, ! such as references to below the beginning of an assumed-size array. ! .Sp ! \&\fBg77\fR also generates checks for \f(CW\*(C`CHARACTER\*(C'\fR substring references, ! something \fBf2c\fR currently does not do. ! .Sp ! Use the new \fB\-ffortran-bounds-check\fR option ! to specify bounds-checking for only the Fortran code you are compiling, ! not necessarily for code written in other languages. ! .Sp ! \&\fINote:\fR To provide more detailed information on the offending subscript, ! \&\fBg77\fR provides the \f(CW\*(C`libg2c\*(C'\fR run-time library routine \f(CW\*(C`s_rnge\*(C'\fR ! with somewhat differently-formatted information. ! Here's a sample diagnostic: ! .Sp ! .Vb 3 ! \& 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 ! .Ve ! The above message indicates that the offending source line is ! line 4 of the file \fIrnge.f\fR, ! within the program unit (or statement function) named \fBbf\fR. ! The offended array is named \fBb\fR. ! The offended array dimension is the second for a two-dimensional array, ! and the offending, computed subscript expression was \fB\-6\fR. ! .Sp ! For a \f(CW\*(C`CHARACTER\*(C'\fR substring reference, the second line has ! this appearance: ! .Sp ! .Vb 1 ! \& Attempt to access the 11-th element of variable a[start-substring]. ! .Ve ! This indicates that the offended \f(CW\*(C`CHARACTER\*(C'\fR variable or array ! is named \fBa\fR, ! the offended substring position is the starting (leftmost) position, ! and the offending substring expression is \fB11\fR. ! .Sp ! (Though the verbage of \f(CW\*(C`s_rnge\*(C'\fR is not ideal ! for the purpose of the \fBg77\fR compiler, ! the above information should provide adequate diagnostic abilities ! to it users.) ! .PP ! Some of these do \fInot\fR work when compiling programs written in Fortran: ! .Ip "\fB\-fpcc-struct-return\fR" 4 ! .IX Item "-fpcc-struct-return" ! .PD 0 ! .Ip "\fB\-freg-struct-return\fR" 4 ! .IX Item "-freg-struct-return" ! .PD ! You should not use these except strictly the same way as you ! used them to build the version of \f(CW\*(C`libg2c\*(C'\fR with which ! you will be linking all code compiled by \fBg77\fR with the ! same option. ! .Ip "\fB\-fshort-double\fR" 4 ! .IX Item "-fshort-double" ! This probably either has no effect on Fortran programs, or ! makes them act loopy. ! .Ip "\fB\-fno-common\fR" 4 ! .IX Item "-fno-common" ! Do not use this when compiling Fortran programs, ! or there will be Trouble. ! .Ip "\fB\-fpack-struct\fR" 4 ! .IX Item "-fpack-struct" ! This probably will break any calls to the \f(CW\*(C`libg2c\*(C'\fR library, ! at the very least, even if it is built with the same option. ! .SH "ENVIRONMENT" ! .IX Header "ENVIRONMENT" ! \&\s-1GNU\s0 Fortran currently does not make use of any environment ! variables to control its operation above and beyond those ! that affect the operation of \fBgcc\fR. ! .SH "BUGS" ! .IX Header "BUGS" ! For instructions on reporting bugs, see ! <\fBhttp://gcc.gnu.org/bugs.html\fR>. Use of the \fBgccbug\fR ! script to report bugs is recommended. ! .SH "FOOTNOTES" ! .IX Header "FOOTNOTES" ! .Ip "1." 4 ! \&\fIloop discovery\fR 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 \f(CW\*(C`DO\*(C'\fR). For some programs, ``discovering'' loops ! constructed out of lower-level constructs (such as \f(CW\*(C`IF\*(C'\fR and ! \&\f(CW\*(C`GOTO\*(C'\fR) can lead to generation of more optimal code ! than otherwise. .SH "SEE ALSO" ! .IX Header "SEE ALSO" ! \&\fIgpl\fR\|(7), \fIgfdl\fR\|(7), \fIfsf-funding\fR\|(7), ! \&\fIcpp\fR\|(1), \fIgcov\fR\|(1), \fIgcc\fR\|(1), \fIas\fR\|(1), \fIld\fR\|(1), \fIgdb\fR\|(1), \fIadb\fR\|(1), \fIdbx\fR\|(1), \fIsdb\fR\|(1) ! and the Info entries for \fIgcc\fR, \fIcpp\fR, \fIg77\fR, \fIas\fR, ! \&\fIld\fR, \fIbinutils\fR and \fIgdb\fR. ! .SH "AUTHOR" ! .IX Header "AUTHOR" ! See the Info entry for \fBg77\fR for contributors to \s-1GCC\s0 and G77. ! .SH "COPYRIGHT" ! .IX Header "COPYRIGHT" ! Copyright (c) 1996, 1997, 1998, 1999, 2000, 2001, 2002 ! Free Software Foundation, Inc. .PP ! Permission is granted to copy, distribute and/or modify this document ! under the terms of the \s-1GNU\s0 Free Documentation License, Version 1.1 or ! any later version published by the Free Software Foundation; with the ! Invariant Sections being ``\s-1GNU\s0 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 \fIgfdl\fR\|(7) man page. .PP ! (a) The \s-1FSF\s0's Front-Cover Text is: .PP ! .Vb 1 ! \& A GNU Manual ! .Ve ! (b) The \s-1FSF\s0's Back-Cover Text is: ! .PP ! .Vb 3 ! \& 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. ! .Ve diff -Nrc3pad gcc-3.0.4/gcc/f/g77.info gcc-3.1/gcc/f/g77.info *** gcc-3.0.4/gcc/f/g77.info Wed Feb 20 19:57:12 2002 --- gcc-3.1/gcc/f/g77.info Wed May 15 02:45:53 2002 *************** *** 1,16 **** ! This is g77.info, produced by makeinfo version 4.0b from g77.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * g77: (g77). The GNU Fortran compiler. END-INFO-DIR-ENTRY This file documents the use and the internals of the GNU Fortran ! (`g77') compiler. It corresponds to the GCC-3.0 version of `g77'. Published by the Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA ! Copyright (C) 1995,1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document --- 1,16 ---- ! This is g77.info, produced by makeinfo version 4.2 from g77.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * g77: (g77). The GNU Fortran compiler. END-INFO-DIR-ENTRY This file documents the use and the internals of the GNU Fortran ! (`g77') compiler. It corresponds to the GCC-3.1 version of `g77'. Published by the Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA ! Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document *************** Craig by David Ronis () provided the patch to add rudimentary support for `INTEGER*1', `INTEGER*2', and `LOGICAL*1'. This inspired Craig to add further support, even though the ! resulting support would still be incomplete, because version 0.6 ! is still a ways off. * David Ronis () inspired and encouraged Craig to rewrite the documentation in texinfo format by --- 886,898 ---- Ian Watson + * Dave Love () wrote the libU77 part of the + run-time library. + * Scott Snyder () provided the patch to add rudimentary support for `INTEGER*1', `INTEGER*2', and `LOGICAL*1'. This inspired Craig to add further support, even though the ! resulting support would still be incomplete. * David Ronis () inspired and encouraged Craig to rewrite the documentation in texinfo format by *************** File: g77.info, Node: Funding GNU Fortr *** 976,983 **** Funding GNU Fortran ******************* ! James Craig Burley (), the original author of g77, ! stopped working on it in September 1999 (He has a web page at `http://world.std.com/%7Eburley'.) GNU Fortran is currently maintained by Toon Moene --- 977,984 ---- Funding GNU Fortran ******************* ! James Craig Burley (), the original author of ! `g77', stopped working on it in September 1999 (He has a web page at `http://world.std.com/%7Eburley'.) GNU Fortran is currently maintained by Toon Moene *************** the "GNUS Bulletin". Email to volunteer for this work. *Note Funding Free Software: Funding, for more information. --- 994,1007 ---- the FSF. Another important way to support work on GNU Fortran is to volunteer ! to help out. ! ! Email to volunteer for this work. ! ! However, we strongly expect that there will never be a version 0.6 ! of `g77'. Work on this compiler has stopped as of the release of GCC ! 3.1, except for bug fixing. `g77' will be succeeded by `g95' - see ! `http://g95.sourceforge.net'. *Note Funding Free Software: Funding, for more information. diff -Nrc3pad gcc-3.0.4/gcc/f/g77.info-10 gcc-3.1/gcc/f/g77.info-10 *** gcc-3.0.4/gcc/f/g77.info-10 Wed Feb 20 19:57:12 2002 --- gcc-3.1/gcc/f/g77.info-10 Wed May 15 02:45:53 2002 *************** *** 1,16 **** ! This is g77.info, produced by makeinfo version 4.0b from g77.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * g77: (g77). The GNU Fortran compiler. END-INFO-DIR-ENTRY This file documents the use and the internals of the GNU Fortran ! (`g77') compiler. It corresponds to the GCC-3.0 version of `g77'. Published by the Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA ! Copyright (C) 1995,1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document --- 1,16 ---- ! This is g77.info, produced by makeinfo version 4.2 from g77.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * g77: (g77). The GNU Fortran compiler. END-INFO-DIR-ENTRY This file documents the use and the internals of the GNU Fortran ! (`g77') compiler. It corresponds to the GCC-3.1 version of `g77'. Published by the Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA ! Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document *************** a first pass at translating `g77-0.5.16/ *** 36,41 **** --- 36,369 ---- Craig by David Ronis ().  + File: g77.info, Node: Real Intrinsic, Next: RealPart Intrinsic, Prev: Range Intrinsic, Up: Table of Intrinsic Functions + + Real Intrinsic + .............. + + Real(A) + + Real: `REAL' function. The exact type is `REAL(KIND=1)' when argument + A is any type other than `COMPLEX', or when it is `COMPLEX(KIND=1)'. + When A is any `COMPLEX' type other than `COMPLEX(KIND=1)', this + intrinsic is valid only when used as the argument to `REAL()', as + explained below. + + A: `INTEGER', `REAL', or `COMPLEX'; scalar; INTENT(IN). + + Intrinsic groups: (standard FORTRAN 77). + + Description: + + Converts A to `REAL(KIND=1)'. + + Use of `REAL()' with a `COMPLEX' argument (other than + `COMPLEX(KIND=1)') is restricted to the following case: + + REAL(REAL(A)) + + This expression converts the real part of A to `REAL(KIND=1)'. + + *Note RealPart Intrinsic::, for information on a GNU Fortran + intrinsic that extracts the real part of an arbitrary `COMPLEX' value. + + *Note REAL() and AIMAG() of Complex::, for more information. + +  + File: g77.info, Node: RealPart Intrinsic, Next: Rename Intrinsic (subroutine), Prev: Real Intrinsic, Up: Table of Intrinsic Functions + + RealPart Intrinsic + .................. + + RealPart(Z) + + RealPart: `REAL' function, the `KIND=' value of the type being that of + argument Z. + + Z: `COMPLEX'; scalar; INTENT(IN). + + Intrinsic groups: `gnu'. + + Description: + + The real part of Z is returned, without conversion. + + _Note:_ The way to do this in standard Fortran 90 is `REAL(Z)'. + However, when, for example, Z is `COMPLEX(KIND=2)', `REAL(Z)' means + something different for some compilers that are not true Fortran 90 + compilers but offer some extensions standardized by Fortran 90 (such as + the `DOUBLE COMPLEX' type, also known as `COMPLEX(KIND=2)'). + + The advantage of `REALPART()' is that, while not necessarily more or + less portable than `REAL()', it is more likely to cause a compiler that + doesn't support it to produce a diagnostic than generate incorrect code. + + *Note REAL() and AIMAG() of Complex::, for more information. + +  + File: g77.info, Node: Rename Intrinsic (subroutine), Next: Repeat Intrinsic, Prev: RealPart Intrinsic, Up: Table of Intrinsic Functions + + Rename Intrinsic (subroutine) + ............................. + + CALL Rename(PATH1, PATH2, STATUS) + + PATH1: `CHARACTER'; scalar; INTENT(IN). + + PATH2: `CHARACTER'; scalar; INTENT(IN). + + STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT). + + Intrinsic groups: `unix'. + + Description: + + Renames the file PATH1 to PATH2. A null character (`CHAR(0)') marks + the end of the names in PATH1 and PATH2--otherwise, trailing blanks in + PATH1 and PATH2 are ignored. See `rename(2)'. If the STATUS argument + is supplied, it contains 0 on success or a non-zero error code upon + return. + + Some non-GNU implementations of Fortran provide this intrinsic as + only a function, not as a subroutine, or do not support the (optional) + STATUS argument. + + For information on other intrinsics with the same name: *Note Rename + Intrinsic (function)::. + +  + File: g77.info, Node: Repeat Intrinsic, Next: Reshape Intrinsic, Prev: Rename Intrinsic (subroutine), Up: Table of Intrinsic Functions + + Repeat Intrinsic + ................ + + This intrinsic is not yet implemented. The name is, however, + reserved as an intrinsic. Use `EXTERNAL Repeat' to use this name for an + external procedure. + +  + File: g77.info, Node: Reshape Intrinsic, Next: RRSpacing Intrinsic, Prev: Repeat Intrinsic, Up: Table of Intrinsic Functions + + Reshape Intrinsic + ................. + + This intrinsic is not yet implemented. The name is, however, + reserved as an intrinsic. Use `EXTERNAL Reshape' to use this name for + an external procedure. + +  + File: g77.info, Node: RRSpacing Intrinsic, Next: RShift Intrinsic, Prev: Reshape Intrinsic, Up: Table of Intrinsic Functions + + RRSpacing Intrinsic + ................... + + This intrinsic is not yet implemented. The name is, however, + reserved as an intrinsic. Use `EXTERNAL RRSpacing' to use this name + for an external procedure. + +  + File: g77.info, Node: RShift Intrinsic, Next: Scale Intrinsic, Prev: RRSpacing Intrinsic, Up: Table of Intrinsic Functions + + RShift Intrinsic + ................ + + RShift(I, SHIFT) + + RShift: `INTEGER' function, the `KIND=' value of the type being that of + argument I. + + I: `INTEGER'; scalar; INTENT(IN). + + SHIFT: `INTEGER'; scalar; INTENT(IN). + + Intrinsic groups: `f2c'. + + Description: + + Returns I shifted to the right SHIFT bits. + + Although similar to the expression `I/(2**SHIFT)', there are + important differences. For example, the sign of the result is + undefined. + + Currently this intrinsic is defined assuming the underlying + representation of I is as a two's-complement integer. It is unclear at + this point whether that definition will apply when a different + representation is involved. + + *Note RShift Intrinsic::, for the inverse of this function. + + *Note IShft Intrinsic::, for information on a more widely available + right-shifting intrinsic that is also more precisely defined. + +  + File: g77.info, Node: Scale Intrinsic, Next: Scan Intrinsic, Prev: RShift Intrinsic, Up: Table of Intrinsic Functions + + Scale Intrinsic + ............... + + This intrinsic is not yet implemented. The name is, however, + reserved as an intrinsic. Use `EXTERNAL Scale' to use this name for an + external procedure. + +  + File: g77.info, Node: Scan Intrinsic, Next: Second Intrinsic (function), Prev: Scale Intrinsic, Up: Table of Intrinsic Functions + + Scan Intrinsic + .............. + + This intrinsic is not yet implemented. The name is, however, + reserved as an intrinsic. Use `EXTERNAL Scan' to use this name for an + external procedure. + +  + File: g77.info, Node: Second Intrinsic (function), Next: Second Intrinsic (subroutine), Prev: Scan Intrinsic, Up: Table of Intrinsic Functions + + Second Intrinsic (function) + ........................... + + Second() + + Second: `REAL(KIND=1)' function. + + Intrinsic groups: `unix'. + + Description: + + Returns the process's runtime in seconds--the same value as the UNIX + function `etime' returns. + + On some systems, the underlying timings are represented using types + with sufficiently small limits that overflows (wraparounds) are + possible, such as 32-bit types. Therefore, the values returned by this + intrinsic might be, or become, negative, or numerically less than + previous values, during a single run of the compiled program. + + For information on other intrinsics with the same name: *Note Second + Intrinsic (subroutine)::. + +  + File: g77.info, Node: Second Intrinsic (subroutine), Next: Selected_Int_Kind Intrinsic, Prev: Second Intrinsic (function), Up: Table of Intrinsic Functions + + Second Intrinsic (subroutine) + ............................. + + CALL Second(SECONDS) + + SECONDS: `REAL'; scalar; INTENT(OUT). + + Intrinsic groups: `unix'. + + Description: + + Returns the process's runtime in seconds in SECONDS--the same value + as the UNIX function `etime' returns. + + On some systems, the underlying timings are represented using types + with sufficiently small limits that overflows (wraparounds) are + possible, such as 32-bit types. Therefore, the values returned by this + intrinsic might be, or become, negative, or numerically less than + previous values, during a single run of the compiled program. + + This routine is known from Cray Fortran. *Note CPU_Time Intrinsic::, + for a standard equivalent. + + For information on other intrinsics with the same name: *Note Second + Intrinsic (function)::. + +  + File: g77.info, Node: Selected_Int_Kind Intrinsic, Next: Selected_Real_Kind Intrinsic, Prev: Second Intrinsic (subroutine), Up: Table of Intrinsic Functions + + Selected_Int_Kind Intrinsic + ........................... + + This intrinsic is not yet implemented. The name is, however, + reserved as an intrinsic. Use `EXTERNAL Selected_Int_Kind' to use this + name for an external procedure. + +  + File: g77.info, Node: Selected_Real_Kind Intrinsic, Next: Set_Exponent Intrinsic, Prev: Selected_Int_Kind Intrinsic, Up: Table of Intrinsic Functions + + Selected_Real_Kind Intrinsic + ............................ + + This intrinsic is not yet implemented. The name is, however, + reserved as an intrinsic. Use `EXTERNAL Selected_Real_Kind' to use + this name for an external procedure. + +  + File: g77.info, Node: Set_Exponent Intrinsic, Next: Shape Intrinsic, Prev: Selected_Real_Kind Intrinsic, Up: Table of Intrinsic Functions + + Set_Exponent Intrinsic + ...................... + + This intrinsic is not yet implemented. The name is, however, + reserved as an intrinsic. Use `EXTERNAL Set_Exponent' to use this name + for an external procedure. + +  + File: g77.info, Node: Shape Intrinsic, Next: Short Intrinsic, Prev: Set_Exponent Intrinsic, Up: Table of Intrinsic Functions + + Shape Intrinsic + ............... + + This intrinsic is not yet implemented. The name is, however, + reserved as an intrinsic. Use `EXTERNAL Shape' to use this name for an + external procedure. + +  + File: g77.info, Node: Short Intrinsic, Next: Sign Intrinsic, Prev: Shape Intrinsic, Up: Table of Intrinsic Functions + + Short Intrinsic + ............... + + Short(A) + + Short: `INTEGER(KIND=6)' function. + + A: `INTEGER'; scalar; INTENT(IN). + + Intrinsic groups: `unix'. + + Description: + + Returns A with the fractional portion of its magnitude truncated and + its sign preserved, converted to type `INTEGER(KIND=6)'. + + If A is type `COMPLEX', its real part is truncated and converted, + and its imaginary part is disgregarded. + + *Note Int Intrinsic::. + + The precise meaning of this intrinsic might change in a future + version of the GNU Fortran language, as more is learned about how it is + used. + +  + File: g77.info, Node: Sign Intrinsic, Next: Signal Intrinsic (subroutine), Prev: Short Intrinsic, Up: Table of Intrinsic Functions + + Sign Intrinsic + .............. + + Sign(A, B) + + Sign: `INTEGER' or `REAL' function, the exact type being the result of + cross-promoting the types of all the arguments. + + A: `INTEGER' or `REAL'; scalar; INTENT(IN). + + B: `INTEGER' or `REAL'; scalar; INTENT(IN). + + Intrinsic groups: (standard FORTRAN 77). + + Description: + + Returns `ABS(A)*S', where S is +1 if `B.GE.0', -1 otherwise. + + *Note Abs Intrinsic::, for the function that returns the magnitude + of a value. + +  File: g77.info, Node: Signal Intrinsic (subroutine), Next: Sin Intrinsic, Prev: Sign Intrinsic, Up: Table of Intrinsic Functions Signal Intrinsic (subroutine) *************** constant in `R = 3 . 1'). *** 1051,1059 **** 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 (`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 `g77' interprets source lines. --- 1379,1385 ---- 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 (`f2c', Digital ("DEC") Fortran, and so on). This section describes how `g77' interprets source lines. *************** any other processing, other than (curren *** 1096,1114 **** found on a line and using this information to decide how to interpret the length of the line and continued constants. - Note that this default behavior probably will change for version 0.6, - when it will presumably be available via a command-line option. The - default as of version 0.6 is planned to be a "pure visual" model, where - tabs are immediately converted to spaces and otherwise have no effect, - so the way a typical user sees source lines produces a consistent - result no matter how the spacing in those source lines is actually - implemented via tabs, spaces, and trailing tabs/spaces before newline. - Command-line options are likely to be added to specify whether all or - just-tabbed lines are to be extended to 132 or full input-line length, - and perhaps even an option will be added to specify the truncated-line - behavior to which some Digital compilers default (and which affects the - way continued character/Hollerith constants are interpreted). -  File: g77.info, Node: Short Lines, Next: Long Lines, Prev: Tabs, Up: Source Form --- 1422,1427 ---- *************** Dollar Signs in Symbol Names *** 1206,1553 **** Dollar signs (`$') are allowed in symbol names (after the first character) when the `-fdollar-ok' option is specified. -  - File: g77.info, Node: Case Sensitivity, Next: VXT Fortran, Prev: Dollar Signs, Up: Other Dialects - - Case Sensitivity - ================ - - GNU Fortran offers the programmer way too much flexibility in - deciding how source files are to be treated vis-a-vis uppercase and - lowercase characters. There are 66 useful settings that affect case - sensitivity, plus 10 settings that are nearly useless, with the - remaining 116 settings being either redundant or useless. - - None of these settings have any effect on the contents of comments - (the text after a `c' or `C' in Column 1, for example) or of character - or Hollerith constants. Note that things like the `E' in the statement - `CALL FOO(3.2E10)' and the `TO' in `ASSIGN 10 TO LAB' are considered - built-in keywords, and so are affected by these settings. - - Low-level switches are identified in this section as follows: - - A Source Case Conversion: - - 0 Preserve (see Note 1) - - 1 Convert to Upper Case - - 2 Convert to Lower Case - - B Built-in Keyword Matching: - - 0 Match Any Case (per-character basis) - - 1 Match Upper Case Only - - 2 Match Lower Case Only - - 3 Match InitialCaps Only (see tables for spellings) - - C Built-in Intrinsic Matching: - - 0 Match Any Case (per-character basis) - - 1 Match Upper Case Only - - 2 Match Lower Case Only - - 3 Match InitialCaps Only (see tables for spellings) - - D User-defined Symbol Possibilities (warnings only): - - 0 Allow Any Case (per-character basis) - - 1 Allow Upper Case Only - - 2 Allow Lower Case Only - - 3 Allow InitialCaps Only (see Note 2) - - Note 1: `g77' eventually will support `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). - - Currently, however, `NAMELIST' is supported by `libg2c', which - uppercases `NAMELIST' input and symbol names for matching. This means - not only that `NAMELIST' output currently shows symbol (and keyword) - names in uppercase even if lower-case source conversion (option A2) is - selected, but that `NAMELIST' cannot be adequately supported when - source case preservation (option A0) is selected. - - If A0 is selected, a warning message will be output for each - `NAMELIST' statement to this effect. The behavior of the program is - undefined at run time if two or more symbol names appear in a given - `NAMELIST' such that the names are identical when converted to upper - case (e.g. `NAMELIST /X/ VAR, Var, var'). For complete and total - elegance, perhaps there should be a warning when option A2 is selected, - since the output of NAMELIST is currently in uppercase but will someday - be lowercase (when a `libg77' is written), but that seems to be - overkill for a product in beta test. - - Note 2: Rules for InitialCaps names are: - - - Must be a single uppercase letter, *or* - - - Must start with an uppercase letter and contain at least one - lowercase letter. - - So `A', `Ab', `ABc', `AbC', and `Abc' are valid InitialCaps names, - but `AB', `A2', and `ABC' are not. Note that most, but not all, - built-in names meet these requirements--the exceptions are some of the - two-letter format specifiers, such as `BN' and `BZ'. - - Here are the names of the corresponding command-line options: - - A0: -fsource-case-preserve - A1: -fsource-case-upper - A2: -fsource-case-lower - - B0: -fmatch-case-any - B1: -fmatch-case-upper - B2: -fmatch-case-lower - B3: -fmatch-case-initcap - - C0: -fintrin-case-any - C1: -fintrin-case-upper - C2: -fintrin-case-lower - C3: -fintrin-case-initcap - - D0: -fsymbol-case-any - D1: -fsymbol-case-upper - D2: -fsymbol-case-lower - D3: -fsymbol-case-initcap - - Useful combinations of the above settings, along with abbreviated - option names that set some of these combinations all at once: - - 1: A0-- B0--- C0--- D0--- -fcase-preserve - 2: A0-- B0--- C0--- D-1-- - 3: A0-- B0--- C0--- D--2- - 4: A0-- B0--- C0--- D---3 - 5: A0-- B0--- C-1-- D0--- - 6: A0-- B0--- C-1-- D-1-- - 7: A0-- B0--- C-1-- D--2- - 8: A0-- B0--- C-1-- D---3 - 9: A0-- B0--- C--2- D0--- - 10: A0-- B0--- C--2- D-1-- - 11: A0-- B0--- C--2- D--2- - 12: A0-- B0--- C--2- D---3 - 13: A0-- B0--- C---3 D0--- - 14: A0-- B0--- C---3 D-1-- - 15: A0-- B0--- C---3 D--2- - 16: A0-- B0--- C---3 D---3 - 17: A0-- B-1-- C0--- D0--- - 18: A0-- B-1-- C0--- D-1-- - 19: A0-- B-1-- C0--- D--2- - 20: A0-- B-1-- C0--- D---3 - 21: A0-- B-1-- C-1-- D0--- - 22: A0-- B-1-- C-1-- D-1-- -fcase-strict-upper - 23: A0-- B-1-- C-1-- D--2- - 24: A0-- B-1-- C-1-- D---3 - 25: A0-- B-1-- C--2- D0--- - 26: A0-- B-1-- C--2- D-1-- - 27: A0-- B-1-- C--2- D--2- - 28: A0-- B-1-- C--2- D---3 - 29: A0-- B-1-- C---3 D0--- - 30: A0-- B-1-- C---3 D-1-- - 31: A0-- B-1-- C---3 D--2- - 32: A0-- B-1-- C---3 D---3 - 33: A0-- B--2- C0--- D0--- - 34: A0-- B--2- C0--- D-1-- - 35: A0-- B--2- C0--- D--2- - 36: A0-- B--2- C0--- D---3 - 37: A0-- B--2- C-1-- D0--- - 38: A0-- B--2- C-1-- D-1-- - 39: A0-- B--2- C-1-- D--2- - 40: A0-- B--2- C-1-- D---3 - 41: A0-- B--2- C--2- D0--- - 42: A0-- B--2- C--2- D-1-- - 43: A0-- B--2- C--2- D--2- -fcase-strict-lower - 44: A0-- B--2- C--2- D---3 - 45: A0-- B--2- C---3 D0--- - 46: A0-- B--2- C---3 D-1-- - 47: A0-- B--2- C---3 D--2- - 48: A0-- B--2- C---3 D---3 - 49: A0-- B---3 C0--- D0--- - 50: A0-- B---3 C0--- D-1-- - 51: A0-- B---3 C0--- D--2- - 52: A0-- B---3 C0--- D---3 - 53: A0-- B---3 C-1-- D0--- - 54: A0-- B---3 C-1-- D-1-- - 55: A0-- B---3 C-1-- D--2- - 56: A0-- B---3 C-1-- D---3 - 57: A0-- B---3 C--2- D0--- - 58: A0-- B---3 C--2- D-1-- - 59: A0-- B---3 C--2- D--2- - 60: A0-- B---3 C--2- D---3 - 61: A0-- B---3 C---3 D0--- - 62: A0-- B---3 C---3 D-1-- - 63: A0-- B---3 C---3 D--2- - 64: A0-- B---3 C---3 D---3 -fcase-initcap - 65: A-1- B01-- C01-- D01-- -fcase-upper - 66: A--2 B0-2- C0-2- D0-2- -fcase-lower - - 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 `-fcase-strict-upper' to specify this - combination. - - Number 43 is like Number 22 except all input must be lowercase. Use - `-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 `-fcase-upper' to specify this combination. - - Number 66 is the "canonical" UNIX model whereby all the source is - translated to lowercase. Use `-fcase-lower' to specify this - combination. - - There are a few nearly useless combinations: - - 67: A-1- B01-- C01-- D--2- - 68: A-1- B01-- C01-- D---3 - 69: A-1- B01-- C--23 D01-- - 70: A-1- B01-- C--23 D--2- - 71: A-1- B01-- C--23 D---3 - 72: A--2 B01-- C0-2- D-1-- - 73: A--2 B01-- C0-2- D---3 - 74: A--2 B01-- C-1-3 D0-2- - 75: A--2 B01-- C-1-3 D-1-- - 76: A--2 B01-- C-1-3 D---3 - - The above allow some programs to be compiled but with restrictions - that make most useful programs impossible: Numbers 67 and 72 warn about - _any_ user-defined symbol names (such as `SUBROUTINE FOO'); Numbers 68 - and 73 warn about any user-defined symbol names longer than one - character that don't have at least one non-alphabetic character after - the first; Numbers 69 and 74 disallow any references to intrinsics; and - Numbers 70, 71, 75, and 76 are combinations of the restrictions in - 67+69, 68+69, 72+74, and 73+74, respectively. - - All redundant combinations are shown in the above tables anyplace - where more than one setting is shown for a low-level switch. For - example, `B0-2-' means either setting 0 or 2 is valid for switch B. - The "proper" setting in such a case is the one that copies the setting - of switch A--any other setting might slightly reduce the speed of the - compiler, though possibly to an unmeasurable extent. - - All remaining combinations are useless in that they prevent - successful compilation of non-null source files (source files with - something other than comments). - -  - File: g77.info, Node: VXT Fortran, Next: Fortran 90, Prev: Case Sensitivity, Up: Other Dialects - - VXT Fortran - =========== - - `g77' supports certain constructs that have different meanings in - VXT Fortran than they do in the GNU Fortran language. - - Generally, this manual uses the invented term VXT Fortran to refer - VAX FORTRAN (circa v4). That compiler offered many popular features, - though not necessarily those that are specific to the VAX processor - architecture, the VMS operating system, or Digital Equipment - Corporation's Fortran product line. (VAX and VMS probably are - trademarks of Digital Equipment 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 `g77' - someday, and is considered a VXT Fortran feature. - - The `-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. - - * Menu: - - * Double Quote Meaning:: `"2000' as octal constant. - * Exclamation Point:: `!' in column 6. - -  - File: g77.info, Node: Double Quote Meaning, Next: Exclamation Point, Up: VXT Fortran - - Meaning of Double Quote - ----------------------- - - `g77' treats double-quote (`"') as beginning an octal constant of - `INTEGER(KIND=1)' type when the `-fvxt' option is specified. The form - of this octal constant is - - "OCTAL-DIGITS - - where OCTAL-DIGITS is a nonempty string of characters in the set - `01234567'. - - For example, the `-fvxt' option permits this: - - PRINT *, "20 - END - - The above program would print the value `16'. - - *Note Integer Type::, for information on the preferred construct for - integer constants specified using GNU Fortran's octal notation. - - (In the GNU Fortran language, the double-quote character (`"') - delimits a character constant just as does apostrophe (`''). There is - no way to allow both constructs in the general case, since statements - like `PRINT *,"2000 !comment?"' would be ambiguous.) - -  - File: g77.info, Node: Exclamation Point, Prev: Double Quote Meaning, Up: VXT Fortran - - Meaning of Exclamation Point in Column 6 - ---------------------------------------- - - `g77' treats an exclamation point (`!') 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 `-fvxt' option is - specified. - - The following program, when run, prints a message indicating whether - it is interpreted according to GNU Fortran (and Fortran 90) rules or - VXT Fortran rules: - - C234567 (This line begins in column 1.) - I = 0 - !1 - IF (I.EQ.0) PRINT *, ' I am a VXT Fortran program' - IF (I.EQ.1) PRINT *, ' I am a Fortran 90 program' - IF (I.LT.0 .OR. I.GT.1) PRINT *, ' I am a HAL 9000 computer' - END - - (In the GNU Fortran and Fortran 90 languages, exclamation point is a - valid character and, unlike space () or zero (`0'), marks a line - as a continuation line when it appears in column 6.) - -  - File: g77.info, Node: Fortran 90, Next: Pedantic Compilation, Prev: VXT Fortran, Up: Other Dialects - - Fortran 90 - ========== - - The GNU Fortran language includes a number of features that are part - of Fortran 90, even when the `-ff90' option is not specified. The - features enabled by `-ff90' are intended to be those that, when `-ff90' - is not specified, would have another meaning to `g77'--usually meaning - something invalid in the GNU Fortran language. - - So, the purpose of `-ff90' is not to specify whether `g77' is to - gratuitously reject Fortran 90 constructs. The `-pedantic' option - specified with `-fno-f90' is intended to do that, although its - implementation is certainly incomplete at this point. - - When `-ff90' is specified: - - * The type of `REAL(EXPR)' and `AIMAG(EXPR)', where EXPR is - `COMPLEX' type, is the same type as the real part of EXPR. - - For example, assuming `Z' is type `COMPLEX(KIND=2)', `REAL(Z)' - would return a value of type `REAL(KIND=2)', not of type - `REAL(KIND=1)', since `-ff90' is specified. - --- 1519,1521 ---- diff -Nrc3pad gcc-3.0.4/gcc/f/g77.info-11 gcc-3.1/gcc/f/g77.info-11 *** gcc-3.0.4/gcc/f/g77.info-11 Wed Feb 20 19:57:12 2002 --- gcc-3.1/gcc/f/g77.info-11 Wed May 15 02:45:53 2002 *************** *** 1,16 **** ! This is g77.info, produced by makeinfo version 4.0b from g77.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * g77: (g77). The GNU Fortran compiler. END-INFO-DIR-ENTRY This file documents the use and the internals of the GNU Fortran ! (`g77') compiler. It corresponds to the GCC-3.0 version of `g77'. Published by the Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA ! Copyright (C) 1995,1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document --- 1,16 ---- ! This is g77.info, produced by makeinfo version 4.2 from g77.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * g77: (g77). The GNU Fortran compiler. END-INFO-DIR-ENTRY This file documents the use and the internals of the GNU Fortran ! (`g77') compiler. It corresponds to the GCC-3.1 version of `g77'. Published by the Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA ! Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document *************** a first pass at translating `g77-0.5.16/ *** 36,41 **** --- 36,386 ---- Craig by David Ronis ().  + File: g77.info, Node: Case Sensitivity, Next: VXT Fortran, Prev: Dollar Signs, Up: Other Dialects + + Case Sensitivity + ================ + + GNU Fortran offers the programmer way too much flexibility in + deciding how source files are to be treated vis-a-vis uppercase and + lowercase characters. There are 66 useful settings that affect case + sensitivity, plus 10 settings that are nearly useless, with the + remaining 116 settings being either redundant or useless. + + None of these settings have any effect on the contents of comments + (the text after a `c' or `C' in Column 1, for example) or of character + or Hollerith constants. Note that things like the `E' in the statement + `CALL FOO(3.2E10)' and the `TO' in `ASSIGN 10 TO LAB' are considered + built-in keywords, and so are affected by these settings. + + Low-level switches are identified in this section as follows: + + A Source Case Conversion: + + 0 Preserve (see Note 1) + + 1 Convert to Upper Case + + 2 Convert to Lower Case + + B Built-in Keyword Matching: + + 0 Match Any Case (per-character basis) + + 1 Match Upper Case Only + + 2 Match Lower Case Only + + 3 Match InitialCaps Only (see tables for spellings) + + C Built-in Intrinsic Matching: + + 0 Match Any Case (per-character basis) + + 1 Match Upper Case Only + + 2 Match Lower Case Only + + 3 Match InitialCaps Only (see tables for spellings) + + D User-defined Symbol Possibilities (warnings only): + + 0 Allow Any Case (per-character basis) + + 1 Allow Upper Case Only + + 2 Allow Lower Case Only + + 3 Allow InitialCaps Only (see Note 2) + + Note 1: `g77' eventually will support `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). + + Currently, however, `NAMELIST' is supported by `libg2c', which + uppercases `NAMELIST' input and symbol names for matching. This means + not only that `NAMELIST' output currently shows symbol (and keyword) + names in uppercase even if lower-case source conversion (option A2) is + selected, but that `NAMELIST' cannot be adequately supported when + source case preservation (option A0) is selected. + + If A0 is selected, a warning message will be output for each + `NAMELIST' statement to this effect. The behavior of the program is + undefined at run time if two or more symbol names appear in a given + `NAMELIST' such that the names are identical when converted to upper + case (e.g. `NAMELIST /X/ VAR, Var, var'). For complete and total + elegance, perhaps there should be a warning when option A2 is selected, + since the output of NAMELIST is currently in uppercase but will someday + be lowercase (when a `libg77' is written), but that seems to be + overkill for a product in beta test. + + Note 2: Rules for InitialCaps names are: + + - Must be a single uppercase letter, *or* + + - Must start with an uppercase letter and contain at least one + lowercase letter. + + So `A', `Ab', `ABc', `AbC', and `Abc' are valid InitialCaps names, + but `AB', `A2', and `ABC' are not. Note that most, but not all, + built-in names meet these requirements--the exceptions are some of the + two-letter format specifiers, such as `BN' and `BZ'. + + Here are the names of the corresponding command-line options: + + A0: -fsource-case-preserve + A1: -fsource-case-upper + A2: -fsource-case-lower + + B0: -fmatch-case-any + B1: -fmatch-case-upper + B2: -fmatch-case-lower + B3: -fmatch-case-initcap + + C0: -fintrin-case-any + C1: -fintrin-case-upper + C2: -fintrin-case-lower + C3: -fintrin-case-initcap + + D0: -fsymbol-case-any + D1: -fsymbol-case-upper + D2: -fsymbol-case-lower + D3: -fsymbol-case-initcap + + Useful combinations of the above settings, along with abbreviated + option names that set some of these combinations all at once: + + 1: A0-- B0--- C0--- D0--- -fcase-preserve + 2: A0-- B0--- C0--- D-1-- + 3: A0-- B0--- C0--- D--2- + 4: A0-- B0--- C0--- D---3 + 5: A0-- B0--- C-1-- D0--- + 6: A0-- B0--- C-1-- D-1-- + 7: A0-- B0--- C-1-- D--2- + 8: A0-- B0--- C-1-- D---3 + 9: A0-- B0--- C--2- D0--- + 10: A0-- B0--- C--2- D-1-- + 11: A0-- B0--- C--2- D--2- + 12: A0-- B0--- C--2- D---3 + 13: A0-- B0--- C---3 D0--- + 14: A0-- B0--- C---3 D-1-- + 15: A0-- B0--- C---3 D--2- + 16: A0-- B0--- C---3 D---3 + 17: A0-- B-1-- C0--- D0--- + 18: A0-- B-1-- C0--- D-1-- + 19: A0-- B-1-- C0--- D--2- + 20: A0-- B-1-- C0--- D---3 + 21: A0-- B-1-- C-1-- D0--- + 22: A0-- B-1-- C-1-- D-1-- -fcase-strict-upper + 23: A0-- B-1-- C-1-- D--2- + 24: A0-- B-1-- C-1-- D---3 + 25: A0-- B-1-- C--2- D0--- + 26: A0-- B-1-- C--2- D-1-- + 27: A0-- B-1-- C--2- D--2- + 28: A0-- B-1-- C--2- D---3 + 29: A0-- B-1-- C---3 D0--- + 30: A0-- B-1-- C---3 D-1-- + 31: A0-- B-1-- C---3 D--2- + 32: A0-- B-1-- C---3 D---3 + 33: A0-- B--2- C0--- D0--- + 34: A0-- B--2- C0--- D-1-- + 35: A0-- B--2- C0--- D--2- + 36: A0-- B--2- C0--- D---3 + 37: A0-- B--2- C-1-- D0--- + 38: A0-- B--2- C-1-- D-1-- + 39: A0-- B--2- C-1-- D--2- + 40: A0-- B--2- C-1-- D---3 + 41: A0-- B--2- C--2- D0--- + 42: A0-- B--2- C--2- D-1-- + 43: A0-- B--2- C--2- D--2- -fcase-strict-lower + 44: A0-- B--2- C--2- D---3 + 45: A0-- B--2- C---3 D0--- + 46: A0-- B--2- C---3 D-1-- + 47: A0-- B--2- C---3 D--2- + 48: A0-- B--2- C---3 D---3 + 49: A0-- B---3 C0--- D0--- + 50: A0-- B---3 C0--- D-1-- + 51: A0-- B---3 C0--- D--2- + 52: A0-- B---3 C0--- D---3 + 53: A0-- B---3 C-1-- D0--- + 54: A0-- B---3 C-1-- D-1-- + 55: A0-- B---3 C-1-- D--2- + 56: A0-- B---3 C-1-- D---3 + 57: A0-- B---3 C--2- D0--- + 58: A0-- B---3 C--2- D-1-- + 59: A0-- B---3 C--2- D--2- + 60: A0-- B---3 C--2- D---3 + 61: A0-- B---3 C---3 D0--- + 62: A0-- B---3 C---3 D-1-- + 63: A0-- B---3 C---3 D--2- + 64: A0-- B---3 C---3 D---3 -fcase-initcap + 65: A-1- B01-- C01-- D01-- -fcase-upper + 66: A--2 B0-2- C0-2- D0-2- -fcase-lower + + 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 `-fcase-strict-upper' to specify this + combination. + + Number 43 is like Number 22 except all input must be lowercase. Use + `-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 `-fcase-upper' to specify this combination. + + Number 66 is the "canonical" UNIX model whereby all the source is + translated to lowercase. Use `-fcase-lower' to specify this + combination. + + There are a few nearly useless combinations: + + 67: A-1- B01-- C01-- D--2- + 68: A-1- B01-- C01-- D---3 + 69: A-1- B01-- C--23 D01-- + 70: A-1- B01-- C--23 D--2- + 71: A-1- B01-- C--23 D---3 + 72: A--2 B01-- C0-2- D-1-- + 73: A--2 B01-- C0-2- D---3 + 74: A--2 B01-- C-1-3 D0-2- + 75: A--2 B01-- C-1-3 D-1-- + 76: A--2 B01-- C-1-3 D---3 + + The above allow some programs to be compiled but with restrictions + that make most useful programs impossible: Numbers 67 and 72 warn about + _any_ user-defined symbol names (such as `SUBROUTINE FOO'); Numbers 68 + and 73 warn about any user-defined symbol names longer than one + character that don't have at least one non-alphabetic character after + the first; Numbers 69 and 74 disallow any references to intrinsics; and + Numbers 70, 71, 75, and 76 are combinations of the restrictions in + 67+69, 68+69, 72+74, and 73+74, respectively. + + All redundant combinations are shown in the above tables anyplace + where more than one setting is shown for a low-level switch. For + example, `B0-2-' means either setting 0 or 2 is valid for switch B. + The "proper" setting in such a case is the one that copies the setting + of switch A--any other setting might slightly reduce the speed of the + compiler, though possibly to an unmeasurable extent. + + All remaining combinations are useless in that they prevent + successful compilation of non-null source files (source files with + something other than comments). + +  + File: g77.info, Node: VXT Fortran, Next: Fortran 90, Prev: Case Sensitivity, Up: Other Dialects + + VXT Fortran + =========== + + `g77' supports certain constructs that have different meanings in + VXT Fortran than they do in the GNU Fortran language. + + Generally, this manual uses the invented term VXT Fortran to refer + VAX FORTRAN (circa v4). That compiler offered many popular features, + though not necessarily those that are specific to the VAX processor + architecture, the VMS operating system, or Digital Equipment + Corporation's Fortran product line. (VAX and VMS probably are + trademarks of Digital Equipment 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 `g77' + someday, and is considered a VXT Fortran feature. + + The `-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. + + * Menu: + + * Double Quote Meaning:: `"2000' as octal constant. + * Exclamation Point:: `!' in column 6. + +  + File: g77.info, Node: Double Quote Meaning, Next: Exclamation Point, Up: VXT Fortran + + Meaning of Double Quote + ----------------------- + + `g77' treats double-quote (`"') as beginning an octal constant of + `INTEGER(KIND=1)' type when the `-fvxt' option is specified. The form + of this octal constant is + + "OCTAL-DIGITS + + where OCTAL-DIGITS is a nonempty string of characters in the set + `01234567'. + + For example, the `-fvxt' option permits this: + + PRINT *, "20 + END + + The above program would print the value `16'. + + *Note Integer Type::, for information on the preferred construct for + integer constants specified using GNU Fortran's octal notation. + + (In the GNU Fortran language, the double-quote character (`"') + delimits a character constant just as does apostrophe (`''). There is + no way to allow both constructs in the general case, since statements + like `PRINT *,"2000 !comment?"' would be ambiguous.) + +  + File: g77.info, Node: Exclamation Point, Prev: Double Quote Meaning, Up: VXT Fortran + + Meaning of Exclamation Point in Column 6 + ---------------------------------------- + + `g77' treats an exclamation point (`!') 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 `-fvxt' option is + specified. + + The following program, when run, prints a message indicating whether + it is interpreted according to GNU Fortran (and Fortran 90) rules or + VXT Fortran rules: + + C234567 (This line begins in column 1.) + I = 0 + !1 + IF (I.EQ.0) PRINT *, ' I am a VXT Fortran program' + IF (I.EQ.1) PRINT *, ' I am a Fortran 90 program' + IF (I.LT.0 .OR. I.GT.1) PRINT *, ' I am a HAL 9000 computer' + END + + (In the GNU Fortran and Fortran 90 languages, exclamation point is a + valid character and, unlike space () or zero (`0'), marks a line + as a continuation line when it appears in column 6.) + +  + File: g77.info, Node: Fortran 90, Next: Pedantic Compilation, Prev: VXT Fortran, Up: Other Dialects + + Fortran 90 + ========== + + The GNU Fortran language includes a number of features that are part + of Fortran 90, even when the `-ff90' option is not specified. The + features enabled by `-ff90' are intended to be those that, when `-ff90' + is not specified, would have another meaning to `g77'--usually meaning + something invalid in the GNU Fortran language. + + So, the purpose of `-ff90' is not to specify whether `g77' is to + gratuitously reject Fortran 90 constructs. The `-pedantic' option + specified with `-fno-f90' is intended to do that, although its + implementation is certainly incomplete at this point. + + When `-ff90' is specified: + + * The type of `REAL(EXPR)' and `AIMAG(EXPR)', where EXPR is + `COMPLEX' type, is the same type as the real part of EXPR. + + For example, assuming `Z' is type `COMPLEX(KIND=2)', `REAL(Z)' + would return a value of type `REAL(KIND=2)', not of type + `REAL(KIND=1)', since `-ff90' is specified. + +  File: g77.info, Node: Pedantic Compilation, Next: Distensions, Prev: Fortran 90, Up: Other Dialects Pedantic Compilation *************** enabled, and so on. *** 970,1387 **** `vxt' VAX/VMS FORTRAN (current as of v4) intrinsics. -  - File: g77.info, Node: Other Intrinsics, Prev: Intrinsic Groups, Up: Compiler Intrinsics - - Other Intrinsics - ---------------- - - `g77' supports intrinsics other than those in the GNU Fortran - language proper. This set of intrinsics is described below. - - (Note that the empty lines appearing in the menu below are not - intentional--they result from a bug in the `makeinfo' program.) - - * Menu: - - - * ACosD Intrinsic:: (Reserved for future use.) - - * AIMax0 Intrinsic:: (Reserved for future use.) - * AIMin0 Intrinsic:: (Reserved for future use.) - - * AJMax0 Intrinsic:: (Reserved for future use.) - * AJMin0 Intrinsic:: (Reserved for future use.) - - * ASinD Intrinsic:: (Reserved for future use.) - - * ATan2D Intrinsic:: (Reserved for future use.) - * ATanD Intrinsic:: (Reserved for future use.) - - * BITest Intrinsic:: (Reserved for future use.) - - * BJTest Intrinsic:: (Reserved for future use.) - - * CDAbs Intrinsic:: Absolute value (archaic). - * CDCos Intrinsic:: Cosine (archaic). - * CDExp Intrinsic:: Exponential (archaic). - * CDLog Intrinsic:: Natural logarithm (archaic). - * CDSin Intrinsic:: Sine (archaic). - * CDSqRt Intrinsic:: Square root (archaic). - - * ChDir Intrinsic (function):: Change directory. - - * ChMod Intrinsic (function):: Change file modes. - - * CosD Intrinsic:: (Reserved for future use.) - - * DACosD Intrinsic:: (Reserved for future use.) - - * DASinD Intrinsic:: (Reserved for future use.) - - * DATan2D Intrinsic:: (Reserved for future use.) - * DATanD Intrinsic:: (Reserved for future use.) - * Date Intrinsic:: Get current date as dd-Mon-yy. - - * DbleQ Intrinsic:: (Reserved for future use.) - - * DCmplx Intrinsic:: Construct `COMPLEX(KIND=2)' value. - * DConjg Intrinsic:: Complex conjugate (archaic). - - * DCosD Intrinsic:: (Reserved for future use.) - - * DFloat Intrinsic:: Conversion (archaic). - - * DFlotI Intrinsic:: (Reserved for future use.) - * DFlotJ Intrinsic:: (Reserved for future use.) - - * DImag Intrinsic:: Convert/extract imaginary part of complex (archaic). - - * DReal Intrinsic:: Convert value to type `REAL(KIND=2)'. - - * DSinD Intrinsic:: (Reserved for future use.) - - * DTanD Intrinsic:: (Reserved for future use.) - - * DTime Intrinsic (function):: Get elapsed time since last time. - - * FGet Intrinsic (function):: Read a character from unit 5 stream-wise. - - * FGetC Intrinsic (function):: Read a character stream-wise. - - * FloatI Intrinsic:: (Reserved for future use.) - * FloatJ Intrinsic:: (Reserved for future use.) - - * FPut Intrinsic (function):: Write a character to unit 6 stream-wise. - - * FPutC Intrinsic (function):: Write a character stream-wise. - - * IDate Intrinsic (VXT):: Get local time info (VAX/VMS). - - * IIAbs Intrinsic:: (Reserved for future use.) - * IIAnd Intrinsic:: (Reserved for future use.) - * IIBClr Intrinsic:: (Reserved for future use.) - * IIBits Intrinsic:: (Reserved for future use.) - * IIBSet Intrinsic:: (Reserved for future use.) - * IIDiM Intrinsic:: (Reserved for future use.) - * IIDInt Intrinsic:: (Reserved for future use.) - * IIDNnt Intrinsic:: (Reserved for future use.) - * IIEOr Intrinsic:: (Reserved for future use.) - * IIFix Intrinsic:: (Reserved for future use.) - * IInt Intrinsic:: (Reserved for future use.) - * IIOr Intrinsic:: (Reserved for future use.) - * IIQint Intrinsic:: (Reserved for future use.) - * IIQNnt Intrinsic:: (Reserved for future use.) - * IIShftC Intrinsic:: (Reserved for future use.) - * IISign Intrinsic:: (Reserved for future use.) - - * IMax0 Intrinsic:: (Reserved for future use.) - * IMax1 Intrinsic:: (Reserved for future use.) - * IMin0 Intrinsic:: (Reserved for future use.) - * IMin1 Intrinsic:: (Reserved for future use.) - * IMod Intrinsic:: (Reserved for future use.) - - * INInt Intrinsic:: (Reserved for future use.) - * INot Intrinsic:: (Reserved for future use.) - - * IZExt Intrinsic:: (Reserved for future use.) - * JIAbs Intrinsic:: (Reserved for future use.) - * JIAnd Intrinsic:: (Reserved for future use.) - * JIBClr Intrinsic:: (Reserved for future use.) - * JIBits Intrinsic:: (Reserved for future use.) - * JIBSet Intrinsic:: (Reserved for future use.) - * JIDiM Intrinsic:: (Reserved for future use.) - * JIDInt Intrinsic:: (Reserved for future use.) - * JIDNnt Intrinsic:: (Reserved for future use.) - * JIEOr Intrinsic:: (Reserved for future use.) - * JIFix Intrinsic:: (Reserved for future use.) - * JInt Intrinsic:: (Reserved for future use.) - * JIOr Intrinsic:: (Reserved for future use.) - * JIQint Intrinsic:: (Reserved for future use.) - * JIQNnt Intrinsic:: (Reserved for future use.) - * JIShft Intrinsic:: (Reserved for future use.) - * JIShftC Intrinsic:: (Reserved for future use.) - * JISign Intrinsic:: (Reserved for future use.) - * JMax0 Intrinsic:: (Reserved for future use.) - * JMax1 Intrinsic:: (Reserved for future use.) - * JMin0 Intrinsic:: (Reserved for future use.) - * JMin1 Intrinsic:: (Reserved for future use.) - * JMod Intrinsic:: (Reserved for future use.) - * JNInt Intrinsic:: (Reserved for future use.) - * JNot Intrinsic:: (Reserved for future use.) - * JZExt Intrinsic:: (Reserved for future use.) - - * Kill Intrinsic (function):: Signal a process. - - * Link Intrinsic (function):: Make hard link in file system. - - * QAbs Intrinsic:: (Reserved for future use.) - * QACos Intrinsic:: (Reserved for future use.) - * QACosD Intrinsic:: (Reserved for future use.) - * QASin Intrinsic:: (Reserved for future use.) - * QASinD Intrinsic:: (Reserved for future use.) - * QATan Intrinsic:: (Reserved for future use.) - * QATan2 Intrinsic:: (Reserved for future use.) - * QATan2D Intrinsic:: (Reserved for future use.) - * QATanD Intrinsic:: (Reserved for future use.) - * QCos Intrinsic:: (Reserved for future use.) - * QCosD Intrinsic:: (Reserved for future use.) - * QCosH Intrinsic:: (Reserved for future use.) - * QDiM Intrinsic:: (Reserved for future use.) - * QExp Intrinsic:: (Reserved for future use.) - * QExt Intrinsic:: (Reserved for future use.) - * QExtD Intrinsic:: (Reserved for future use.) - * QFloat Intrinsic:: (Reserved for future use.) - * QInt Intrinsic:: (Reserved for future use.) - * QLog Intrinsic:: (Reserved for future use.) - * QLog10 Intrinsic:: (Reserved for future use.) - * QMax1 Intrinsic:: (Reserved for future use.) - * QMin1 Intrinsic:: (Reserved for future use.) - * QMod Intrinsic:: (Reserved for future use.) - * QNInt Intrinsic:: (Reserved for future use.) - * QSin Intrinsic:: (Reserved for future use.) - * QSinD Intrinsic:: (Reserved for future use.) - * QSinH Intrinsic:: (Reserved for future use.) - * QSqRt Intrinsic:: (Reserved for future use.) - * QTan Intrinsic:: (Reserved for future use.) - * QTanD Intrinsic:: (Reserved for future use.) - * QTanH Intrinsic:: (Reserved for future use.) - - * Rename Intrinsic (function):: Rename file. - - * Secnds Intrinsic:: Get local time offset since midnight. - - * Signal Intrinsic (function):: Muck with signal handling. - - * SinD Intrinsic:: (Reserved for future use.) - - * SnglQ Intrinsic:: (Reserved for future use.) - - * SymLnk Intrinsic (function):: Make symbolic link in file system. - - * System Intrinsic (function):: Invoke shell (system) command. - - * TanD Intrinsic:: (Reserved for future use.) - - * Time Intrinsic (VXT):: Get the time as a character value. - - * UMask Intrinsic (function):: Set file creation permissions mask. - - * Unlink Intrinsic (function):: Unlink file. - - * ZExt Intrinsic:: (Reserved for future use.) - -  - File: g77.info, Node: ACosD Intrinsic, Next: AIMax0 Intrinsic, Up: Other Intrinsics - - ACosD Intrinsic - ............... - - This intrinsic is not yet implemented. The name is, however, - reserved as an intrinsic. Use `EXTERNAL ACosD' to use this name for an - external procedure. - -  - File: g77.info, Node: AIMax0 Intrinsic, Next: AIMin0 Intrinsic, Prev: ACosD Intrinsic, Up: Other Intrinsics - - AIMax0 Intrinsic - ................ - - This intrinsic is not yet implemented. The name is, however, - reserved as an intrinsic. Use `EXTERNAL AIMax0' to use this name for an - external procedure. - -  - File: g77.info, Node: AIMin0 Intrinsic, Next: AJMax0 Intrinsic, Prev: AIMax0 Intrinsic, Up: Other Intrinsics - - AIMin0 Intrinsic - ................ - - This intrinsic is not yet implemented. The name is, however, - reserved as an intrinsic. Use `EXTERNAL AIMin0' to use this name for an - external procedure. - -  - File: g77.info, Node: AJMax0 Intrinsic, Next: AJMin0 Intrinsic, Prev: AIMin0 Intrinsic, Up: Other Intrinsics - - AJMax0 Intrinsic - ................ - - This intrinsic is not yet implemented. The name is, however, - reserved as an intrinsic. Use `EXTERNAL AJMax0' to use this name for an - external procedure. - -  - File: g77.info, Node: AJMin0 Intrinsic, Next: ASinD Intrinsic, Prev: AJMax0 Intrinsic, Up: Other Intrinsics - - AJMin0 Intrinsic - ................ - - This intrinsic is not yet implemented. The name is, however, - reserved as an intrinsic. Use `EXTERNAL AJMin0' to use this name for an - external procedure. - -  - File: g77.info, Node: ASinD Intrinsic, Next: ATan2D Intrinsic, Prev: AJMin0 Intrinsic, Up: Other Intrinsics - - ASinD Intrinsic - ............... - - This intrinsic is not yet implemented. The name is, however, - reserved as an intrinsic. Use `EXTERNAL ASinD' to use this name for an - external procedure. - -  - File: g77.info, Node: ATan2D Intrinsic, Next: ATanD Intrinsic, Prev: ASinD Intrinsic, Up: Other Intrinsics - - ATan2D Intrinsic - ................ - - This intrinsic is not yet implemented. The name is, however, - reserved as an intrinsic. Use `EXTERNAL ATan2D' to use this name for an - external procedure. - -  - File: g77.info, Node: ATanD Intrinsic, Next: BITest Intrinsic, Prev: ATan2D Intrinsic, Up: Other Intrinsics - - ATanD Intrinsic - ............... - - This intrinsic is not yet implemented. The name is, however, - reserved as an intrinsic. Use `EXTERNAL ATanD' to use this name for an - external procedure. - -  - File: g77.info, Node: BITest Intrinsic, Next: BJTest Intrinsic, Prev: ATanD Intrinsic, Up: Other Intrinsics - - BITest Intrinsic - ................ - - This intrinsic is not yet implemented. The name is, however, - reserved as an intrinsic. Use `EXTERNAL BITest' to use this name for an - external procedure. - -  - File: g77.info, Node: BJTest Intrinsic, Next: CDAbs Intrinsic, Prev: BITest Intrinsic, Up: Other Intrinsics - - BJTest Intrinsic - ................ - - This intrinsic is not yet implemented. The name is, however, - reserved as an intrinsic. Use `EXTERNAL BJTest' to use this name for an - external procedure. - -  - File: g77.info, Node: CDAbs Intrinsic, Next: CDCos Intrinsic, Prev: BJTest Intrinsic, Up: Other Intrinsics - - CDAbs Intrinsic - ............... - - CDAbs(A) - - CDAbs: `REAL(KIND=2)' function. - - A: `COMPLEX(KIND=2)'; scalar; INTENT(IN). - - Intrinsic groups: `f2c', `vxt'. - - Description: - - Archaic form of `ABS()' that is specific to one type for A. *Note - Abs Intrinsic::. - -  - File: g77.info, Node: CDCos Intrinsic, Next: CDExp Intrinsic, Prev: CDAbs Intrinsic, Up: Other Intrinsics - - CDCos Intrinsic - ............... - - CDCos(X) - - CDCos: `COMPLEX(KIND=2)' function. - - X: `COMPLEX(KIND=2)'; scalar; INTENT(IN). - - Intrinsic groups: `f2c', `vxt'. - - Description: - - Archaic form of `COS()' that is specific to one type for X. *Note - Cos Intrinsic::. - -  - File: g77.info, Node: CDExp Intrinsic, Next: CDLog Intrinsic, Prev: CDCos Intrinsic, Up: Other Intrinsics - - CDExp Intrinsic - ............... - - CDExp(X) - - CDExp: `COMPLEX(KIND=2)' function. - - X: `COMPLEX(KIND=2)'; scalar; INTENT(IN). - - Intrinsic groups: `f2c', `vxt'. - - Description: - - Archaic form of `EXP()' that is specific to one type for X. *Note - Exp Intrinsic::. - -  - File: g77.info, Node: CDLog Intrinsic, Next: CDSin Intrinsic, Prev: CDExp Intrinsic, Up: Other Intrinsics - - CDLog Intrinsic - ............... - - CDLog(X) - - CDLog: `COMPLEX(KIND=2)' function. - - X: `COMPLEX(KIND=2)'; scalar; INTENT(IN). - - Intrinsic groups: `f2c', `vxt'. - - Description: - - Archaic form of `LOG()' that is specific to one type for X. *Note - Log Intrinsic::. - -  - File: g77.info, Node: CDSin Intrinsic, Next: CDSqRt Intrinsic, Prev: CDLog Intrinsic, Up: Other Intrinsics - - CDSin Intrinsic - ............... - - CDSin(X) - - CDSin: `COMPLEX(KIND=2)' function. - - X: `COMPLEX(KIND=2)'; scalar; INTENT(IN). - - Intrinsic groups: `f2c', `vxt'. - - Description: - - Archaic form of `SIN()' that is specific to one type for X. *Note - Sin Intrinsic::. - -  - File: g77.info, Node: CDSqRt Intrinsic, Next: ChDir Intrinsic (function), Prev: CDSin Intrinsic, Up: Other Intrinsics - - CDSqRt Intrinsic - ................ - - CDSqRt(X) - - CDSqRt: `COMPLEX(KIND=2)' function. - - X: `COMPLEX(KIND=2)'; scalar; INTENT(IN). - - Intrinsic groups: `f2c', `vxt'. - - Description: - - Archaic form of `SQRT()' that is specific to one type for X. *Note - SqRt Intrinsic::. - --- 1315,1317 ---- diff -Nrc3pad gcc-3.0.4/gcc/f/g77.info-12 gcc-3.1/gcc/f/g77.info-12 *** gcc-3.0.4/gcc/f/g77.info-12 Wed Feb 20 19:57:12 2002 --- gcc-3.1/gcc/f/g77.info-12 Wed May 15 02:45:53 2002 *************** *** 1,16 **** ! This is g77.info, produced by makeinfo version 4.0b from g77.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * g77: (g77). The GNU Fortran compiler. END-INFO-DIR-ENTRY This file documents the use and the internals of the GNU Fortran ! (`g77') compiler. It corresponds to the GCC-3.0 version of `g77'. Published by the Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA ! Copyright (C) 1995,1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document --- 1,16 ---- ! This is g77.info, produced by makeinfo version 4.2 from g77.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * g77: (g77). The GNU Fortran compiler. END-INFO-DIR-ENTRY This file documents the use and the internals of the GNU Fortran ! (`g77') compiler. It corresponds to the GCC-3.1 version of `g77'. Published by the Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA ! Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document *************** a first pass at translating `g77-0.5.16/ *** 36,41 **** --- 36,456 ---- Craig by David Ronis ().  + File: g77.info, Node: Other Intrinsics, Prev: Intrinsic Groups, Up: Compiler Intrinsics + + Other Intrinsics + ---------------- + + `g77' supports intrinsics other than those in the GNU Fortran + language proper. This set of intrinsics is described below. + + (Note that the empty lines appearing in the menu below are not + intentional--they result from a bug in the `makeinfo' program.) + + * Menu: + + + * ACosD Intrinsic:: (Reserved for future use.) + + * AIMax0 Intrinsic:: (Reserved for future use.) + * AIMin0 Intrinsic:: (Reserved for future use.) + + * AJMax0 Intrinsic:: (Reserved for future use.) + * AJMin0 Intrinsic:: (Reserved for future use.) + + * ASinD Intrinsic:: (Reserved for future use.) + + * ATan2D Intrinsic:: (Reserved for future use.) + * ATanD Intrinsic:: (Reserved for future use.) + + * BITest Intrinsic:: (Reserved for future use.) + + * BJTest Intrinsic:: (Reserved for future use.) + + * CDAbs Intrinsic:: Absolute value (archaic). + * CDCos Intrinsic:: Cosine (archaic). + * CDExp Intrinsic:: Exponential (archaic). + * CDLog Intrinsic:: Natural logarithm (archaic). + * CDSin Intrinsic:: Sine (archaic). + * CDSqRt Intrinsic:: Square root (archaic). + + * ChDir Intrinsic (function):: Change directory. + + * ChMod Intrinsic (function):: Change file modes. + + * CosD Intrinsic:: (Reserved for future use.) + + * DACosD Intrinsic:: (Reserved for future use.) + + * DASinD Intrinsic:: (Reserved for future use.) + + * DATan2D Intrinsic:: (Reserved for future use.) + * DATanD Intrinsic:: (Reserved for future use.) + * Date Intrinsic:: Get current date as dd-Mon-yy. + + * DbleQ Intrinsic:: (Reserved for future use.) + + * DCmplx Intrinsic:: Construct `COMPLEX(KIND=2)' value. + * DConjg Intrinsic:: Complex conjugate (archaic). + + * DCosD Intrinsic:: (Reserved for future use.) + + * DFloat Intrinsic:: Conversion (archaic). + + * DFlotI Intrinsic:: (Reserved for future use.) + * DFlotJ Intrinsic:: (Reserved for future use.) + + * DImag Intrinsic:: Convert/extract imaginary part of complex (archaic). + + * DReal Intrinsic:: Convert value to type `REAL(KIND=2)'. + + * DSinD Intrinsic:: (Reserved for future use.) + + * DTanD Intrinsic:: (Reserved for future use.) + + * DTime Intrinsic (function):: Get elapsed time since last time. + + * FGet Intrinsic (function):: Read a character from unit 5 stream-wise. + + * FGetC Intrinsic (function):: Read a character stream-wise. + + * FloatI Intrinsic:: (Reserved for future use.) + * FloatJ Intrinsic:: (Reserved for future use.) + + * FPut Intrinsic (function):: Write a character to unit 6 stream-wise. + + * FPutC Intrinsic (function):: Write a character stream-wise. + + * IDate Intrinsic (VXT):: Get local time info (VAX/VMS). + + * IIAbs Intrinsic:: (Reserved for future use.) + * IIAnd Intrinsic:: (Reserved for future use.) + * IIBClr Intrinsic:: (Reserved for future use.) + * IIBits Intrinsic:: (Reserved for future use.) + * IIBSet Intrinsic:: (Reserved for future use.) + * IIDiM Intrinsic:: (Reserved for future use.) + * IIDInt Intrinsic:: (Reserved for future use.) + * IIDNnt Intrinsic:: (Reserved for future use.) + * IIEOr Intrinsic:: (Reserved for future use.) + * IIFix Intrinsic:: (Reserved for future use.) + * IInt Intrinsic:: (Reserved for future use.) + * IIOr Intrinsic:: (Reserved for future use.) + * IIQint Intrinsic:: (Reserved for future use.) + * IIQNnt Intrinsic:: (Reserved for future use.) + * IIShftC Intrinsic:: (Reserved for future use.) + * IISign Intrinsic:: (Reserved for future use.) + + * IMax0 Intrinsic:: (Reserved for future use.) + * IMax1 Intrinsic:: (Reserved for future use.) + * IMin0 Intrinsic:: (Reserved for future use.) + * IMin1 Intrinsic:: (Reserved for future use.) + * IMod Intrinsic:: (Reserved for future use.) + + * INInt Intrinsic:: (Reserved for future use.) + * INot Intrinsic:: (Reserved for future use.) + + * IZExt Intrinsic:: (Reserved for future use.) + * JIAbs Intrinsic:: (Reserved for future use.) + * JIAnd Intrinsic:: (Reserved for future use.) + * JIBClr Intrinsic:: (Reserved for future use.) + * JIBits Intrinsic:: (Reserved for future use.) + * JIBSet Intrinsic:: (Reserved for future use.) + * JIDiM Intrinsic:: (Reserved for future use.) + * JIDInt Intrinsic:: (Reserved for future use.) + * JIDNnt Intrinsic:: (Reserved for future use.) + * JIEOr Intrinsic:: (Reserved for future use.) + * JIFix Intrinsic:: (Reserved for future use.) + * JInt Intrinsic:: (Reserved for future use.) + * JIOr Intrinsic:: (Reserved for future use.) + * JIQint Intrinsic:: (Reserved for future use.) + * JIQNnt Intrinsic:: (Reserved for future use.) + * JIShft Intrinsic:: (Reserved for future use.) + * JIShftC Intrinsic:: (Reserved for future use.) + * JISign Intrinsic:: (Reserved for future use.) + * JMax0 Intrinsic:: (Reserved for future use.) + * JMax1 Intrinsic:: (Reserved for future use.) + * JMin0 Intrinsic:: (Reserved for future use.) + * JMin1 Intrinsic:: (Reserved for future use.) + * JMod Intrinsic:: (Reserved for future use.) + * JNInt Intrinsic:: (Reserved for future use.) + * JNot Intrinsic:: (Reserved for future use.) + * JZExt Intrinsic:: (Reserved for future use.) + + * Kill Intrinsic (function):: Signal a process. + + * Link Intrinsic (function):: Make hard link in file system. + + * QAbs Intrinsic:: (Reserved for future use.) + * QACos Intrinsic:: (Reserved for future use.) + * QACosD Intrinsic:: (Reserved for future use.) + * QASin Intrinsic:: (Reserved for future use.) + * QASinD Intrinsic:: (Reserved for future use.) + * QATan Intrinsic:: (Reserved for future use.) + * QATan2 Intrinsic:: (Reserved for future use.) + * QATan2D Intrinsic:: (Reserved for future use.) + * QATanD Intrinsic:: (Reserved for future use.) + * QCos Intrinsic:: (Reserved for future use.) + * QCosD Intrinsic:: (Reserved for future use.) + * QCosH Intrinsic:: (Reserved for future use.) + * QDiM Intrinsic:: (Reserved for future use.) + * QExp Intrinsic:: (Reserved for future use.) + * QExt Intrinsic:: (Reserved for future use.) + * QExtD Intrinsic:: (Reserved for future use.) + * QFloat Intrinsic:: (Reserved for future use.) + * QInt Intrinsic:: (Reserved for future use.) + * QLog Intrinsic:: (Reserved for future use.) + * QLog10 Intrinsic:: (Reserved for future use.) + * QMax1 Intrinsic:: (Reserved for future use.) + * QMin1 Intrinsic:: (Reserved for future use.) + * QMod Intrinsic:: (Reserved for future use.) + * QNInt Intrinsic:: (Reserved for future use.) + * QSin Intrinsic:: (Reserved for future use.) + * QSinD Intrinsic:: (Reserved for future use.) + * QSinH Intrinsic:: (Reserved for future use.) + * QSqRt Intrinsic:: (Reserved for future use.) + * QTan Intrinsic:: (Reserved for future use.) + * QTanD Intrinsic:: (Reserved for future use.) + * QTanH Intrinsic:: (Reserved for future use.) + + * Rename Intrinsic (function):: Rename file. + + * Secnds Intrinsic:: Get local time offset since midnight. + + * Signal Intrinsic (function):: Muck with signal handling. + + * SinD Intrinsic:: (Reserved for future use.) + + * SnglQ Intrinsic:: (Reserved for future use.) + + * SymLnk Intrinsic (function):: Make symbolic link in file system. + + * System Intrinsic (function):: Invoke shell (system) command. + + * TanD Intrinsic:: (Reserved for future use.) + + * Time Intrinsic (VXT):: Get the time as a character value. + + * UMask Intrinsic (function):: Set file creation permissions mask. + + * Unlink Intrinsic (function):: Unlink file. + + * ZExt Intrinsic:: (Reserved for future use.) + +  + File: g77.info, Node: ACosD Intrinsic, Next: AIMax0 Intrinsic, Up: Other Intrinsics + + ACosD Intrinsic + ............... + + This intrinsic is not yet implemented. The name is, however, + reserved as an intrinsic. Use `EXTERNAL ACosD' to use this name for an + external procedure. + +  + File: g77.info, Node: AIMax0 Intrinsic, Next: AIMin0 Intrinsic, Prev: ACosD Intrinsic, Up: Other Intrinsics + + AIMax0 Intrinsic + ................ + + This intrinsic is not yet implemented. The name is, however, + reserved as an intrinsic. Use `EXTERNAL AIMax0' to use this name for an + external procedure. + +  + File: g77.info, Node: AIMin0 Intrinsic, Next: AJMax0 Intrinsic, Prev: AIMax0 Intrinsic, Up: Other Intrinsics + + AIMin0 Intrinsic + ................ + + This intrinsic is not yet implemented. The name is, however, + reserved as an intrinsic. Use `EXTERNAL AIMin0' to use this name for an + external procedure. + +  + File: g77.info, Node: AJMax0 Intrinsic, Next: AJMin0 Intrinsic, Prev: AIMin0 Intrinsic, Up: Other Intrinsics + + AJMax0 Intrinsic + ................ + + This intrinsic is not yet implemented. The name is, however, + reserved as an intrinsic. Use `EXTERNAL AJMax0' to use this name for an + external procedure. + +  + File: g77.info, Node: AJMin0 Intrinsic, Next: ASinD Intrinsic, Prev: AJMax0 Intrinsic, Up: Other Intrinsics + + AJMin0 Intrinsic + ................ + + This intrinsic is not yet implemented. The name is, however, + reserved as an intrinsic. Use `EXTERNAL AJMin0' to use this name for an + external procedure. + +  + File: g77.info, Node: ASinD Intrinsic, Next: ATan2D Intrinsic, Prev: AJMin0 Intrinsic, Up: Other Intrinsics + + ASinD Intrinsic + ............... + + This intrinsic is not yet implemented. The name is, however, + reserved as an intrinsic. Use `EXTERNAL ASinD' to use this name for an + external procedure. + +  + File: g77.info, Node: ATan2D Intrinsic, Next: ATanD Intrinsic, Prev: ASinD Intrinsic, Up: Other Intrinsics + + ATan2D Intrinsic + ................ + + This intrinsic is not yet implemented. The name is, however, + reserved as an intrinsic. Use `EXTERNAL ATan2D' to use this name for an + external procedure. + +  + File: g77.info, Node: ATanD Intrinsic, Next: BITest Intrinsic, Prev: ATan2D Intrinsic, Up: Other Intrinsics + + ATanD Intrinsic + ............... + + This intrinsic is not yet implemented. The name is, however, + reserved as an intrinsic. Use `EXTERNAL ATanD' to use this name for an + external procedure. + +  + File: g77.info, Node: BITest Intrinsic, Next: BJTest Intrinsic, Prev: ATanD Intrinsic, Up: Other Intrinsics + + BITest Intrinsic + ................ + + This intrinsic is not yet implemented. The name is, however, + reserved as an intrinsic. Use `EXTERNAL BITest' to use this name for an + external procedure. + +  + File: g77.info, Node: BJTest Intrinsic, Next: CDAbs Intrinsic, Prev: BITest Intrinsic, Up: Other Intrinsics + + BJTest Intrinsic + ................ + + This intrinsic is not yet implemented. The name is, however, + reserved as an intrinsic. Use `EXTERNAL BJTest' to use this name for an + external procedure. + +  + File: g77.info, Node: CDAbs Intrinsic, Next: CDCos Intrinsic, Prev: BJTest Intrinsic, Up: Other Intrinsics + + CDAbs Intrinsic + ............... + + CDAbs(A) + + CDAbs: `REAL(KIND=2)' function. + + A: `COMPLEX(KIND=2)'; scalar; INTENT(IN). + + Intrinsic groups: `f2c', `vxt'. + + Description: + + Archaic form of `ABS()' that is specific to one type for A. *Note + Abs Intrinsic::. + +  + File: g77.info, Node: CDCos Intrinsic, Next: CDExp Intrinsic, Prev: CDAbs Intrinsic, Up: Other Intrinsics + + CDCos Intrinsic + ............... + + CDCos(X) + + CDCos: `COMPLEX(KIND=2)' function. + + X: `COMPLEX(KIND=2)'; scalar; INTENT(IN). + + Intrinsic groups: `f2c', `vxt'. + + Description: + + Archaic form of `COS()' that is specific to one type for X. *Note + Cos Intrinsic::. + +  + File: g77.info, Node: CDExp Intrinsic, Next: CDLog Intrinsic, Prev: CDCos Intrinsic, Up: Other Intrinsics + + CDExp Intrinsic + ............... + + CDExp(X) + + CDExp: `COMPLEX(KIND=2)' function. + + X: `COMPLEX(KIND=2)'; scalar; INTENT(IN). + + Intrinsic groups: `f2c', `vxt'. + + Description: + + Archaic form of `EXP()' that is specific to one type for X. *Note + Exp Intrinsic::. + +  + File: g77.info, Node: CDLog Intrinsic, Next: CDSin Intrinsic, Prev: CDExp Intrinsic, Up: Other Intrinsics + + CDLog Intrinsic + ............... + + CDLog(X) + + CDLog: `COMPLEX(KIND=2)' function. + + X: `COMPLEX(KIND=2)'; scalar; INTENT(IN). + + Intrinsic groups: `f2c', `vxt'. + + Description: + + Archaic form of `LOG()' that is specific to one type for X. *Note + Log Intrinsic::. + +  + File: g77.info, Node: CDSin Intrinsic, Next: CDSqRt Intrinsic, Prev: CDLog Intrinsic, Up: Other Intrinsics + + CDSin Intrinsic + ............... + + CDSin(X) + + CDSin: `COMPLEX(KIND=2)' function. + + X: `COMPLEX(KIND=2)'; scalar; INTENT(IN). + + Intrinsic groups: `f2c', `vxt'. + + Description: + + Archaic form of `SIN()' that is specific to one type for X. *Note + Sin Intrinsic::. + +  + File: g77.info, Node: CDSqRt Intrinsic, Next: ChDir Intrinsic (function), Prev: CDSin Intrinsic, Up: Other Intrinsics + + CDSqRt Intrinsic + ................ + + CDSqRt(X) + + CDSqRt: `COMPLEX(KIND=2)' function. + + X: `COMPLEX(KIND=2)'; scalar; INTENT(IN). + + Intrinsic groups: `f2c', `vxt'. + + Description: + + Archaic form of `SQRT()' that is specific to one type for X. *Note + SqRt Intrinsic::. + +  File: g77.info, Node: ChDir Intrinsic (function), Next: ChMod Intrinsic (function), Prev: CDSqRt Intrinsic, Up: Other Intrinsics ChDir Intrinsic (function) *************** QExt Intrinsic *** 1270,1660 **** reserved as an intrinsic. Use `EXTERNAL QExt' to use this name for an external procedure. -  - File: g77.info, Node: QExtD Intrinsic, Next: QFloat Intrinsic, Prev: QExt Intrinsic, Up: Other Intrinsics - - QExtD Intrinsic - ............... - - This intrinsic is not yet implemented. The name is, however, - reserved as an intrinsic. Use `EXTERNAL QExtD' to use this name for an - external procedure. - -  - File: g77.info, Node: QFloat Intrinsic, Next: QInt Intrinsic, Prev: QExtD Intrinsic, Up: Other Intrinsics - - QFloat Intrinsic - ................ - - This intrinsic is not yet implemented. The name is, however, - reserved as an intrinsic. Use `EXTERNAL QFloat' to use this name for an - external procedure. - -  - File: g77.info, Node: QInt Intrinsic, Next: QLog Intrinsic, Prev: QFloat Intrinsic, Up: Other Intrinsics - - QInt Intrinsic - .............. - - This intrinsic is not yet implemented. The name is, however, - reserved as an intrinsic. Use `EXTERNAL QInt' to use this name for an - external procedure. - -  - File: g77.info, Node: QLog Intrinsic, Next: QLog10 Intrinsic, Prev: QInt Intrinsic, Up: Other Intrinsics - - QLog Intrinsic - .............. - - This intrinsic is not yet implemented. The name is, however, - reserved as an intrinsic. Use `EXTERNAL QLog' to use this name for an - external procedure. - -  - File: g77.info, Node: QLog10 Intrinsic, Next: QMax1 Intrinsic, Prev: QLog Intrinsic, Up: Other Intrinsics - - QLog10 Intrinsic - ................ - - This intrinsic is not yet implemented. The name is, however, - reserved as an intrinsic. Use `EXTERNAL QLog10' to use this name for an - external procedure. - -  - File: g77.info, Node: QMax1 Intrinsic, Next: QMin1 Intrinsic, Prev: QLog10 Intrinsic, Up: Other Intrinsics - - QMax1 Intrinsic - ............... - - This intrinsic is not yet implemented. The name is, however, - reserved as an intrinsic. Use `EXTERNAL QMax1' to use this name for an - external procedure. - -  - File: g77.info, Node: QMin1 Intrinsic, Next: QMod Intrinsic, Prev: QMax1 Intrinsic, Up: Other Intrinsics - - QMin1 Intrinsic - ............... - - This intrinsic is not yet implemented. The name is, however, - reserved as an intrinsic. Use `EXTERNAL QMin1' to use this name for an - external procedure. - -  - File: g77.info, Node: QMod Intrinsic, Next: QNInt Intrinsic, Prev: QMin1 Intrinsic, Up: Other Intrinsics - - QMod Intrinsic - .............. - - This intrinsic is not yet implemented. The name is, however, - reserved as an intrinsic. Use `EXTERNAL QMod' to use this name for an - external procedure. - -  - File: g77.info, Node: QNInt Intrinsic, Next: QSin Intrinsic, Prev: QMod Intrinsic, Up: Other Intrinsics - - QNInt Intrinsic - ............... - - This intrinsic is not yet implemented. The name is, however, - reserved as an intrinsic. Use `EXTERNAL QNInt' to use this name for an - external procedure. - -  - File: g77.info, Node: QSin Intrinsic, Next: QSinD Intrinsic, Prev: QNInt Intrinsic, Up: Other Intrinsics - - QSin Intrinsic - .............. - - This intrinsic is not yet implemented. The name is, however, - reserved as an intrinsic. Use `EXTERNAL QSin' to use this name for an - external procedure. - -  - File: g77.info, Node: QSinD Intrinsic, Next: QSinH Intrinsic, Prev: QSin Intrinsic, Up: Other Intrinsics - - QSinD Intrinsic - ............... - - This intrinsic is not yet implemented. The name is, however, - reserved as an intrinsic. Use `EXTERNAL QSinD' to use this name for an - external procedure. - -  - File: g77.info, Node: QSinH Intrinsic, Next: QSqRt Intrinsic, Prev: QSinD Intrinsic, Up: Other Intrinsics - - QSinH Intrinsic - ............... - - This intrinsic is not yet implemented. The name is, however, - reserved as an intrinsic. Use `EXTERNAL QSinH' to use this name for an - external procedure. - -  - File: g77.info, Node: QSqRt Intrinsic, Next: QTan Intrinsic, Prev: QSinH Intrinsic, Up: Other Intrinsics - - QSqRt Intrinsic - ............... - - This intrinsic is not yet implemented. The name is, however, - reserved as an intrinsic. Use `EXTERNAL QSqRt' to use this name for an - external procedure. - -  - File: g77.info, Node: QTan Intrinsic, Next: QTanD Intrinsic, Prev: QSqRt Intrinsic, Up: Other Intrinsics - - QTan Intrinsic - .............. - - This intrinsic is not yet implemented. The name is, however, - reserved as an intrinsic. Use `EXTERNAL QTan' to use this name for an - external procedure. - -  - File: g77.info, Node: QTanD Intrinsic, Next: QTanH Intrinsic, Prev: QTan Intrinsic, Up: Other Intrinsics - - QTanD Intrinsic - ............... - - This intrinsic is not yet implemented. The name is, however, - reserved as an intrinsic. Use `EXTERNAL QTanD' to use this name for an - external procedure. - -  - File: g77.info, Node: QTanH Intrinsic, Next: Rename Intrinsic (function), Prev: QTanD Intrinsic, Up: Other Intrinsics - - QTanH Intrinsic - ............... - - This intrinsic is not yet implemented. The name is, however, - reserved as an intrinsic. Use `EXTERNAL QTanH' to use this name for an - external procedure. - -  - File: g77.info, Node: Rename Intrinsic (function), Next: Secnds Intrinsic, Prev: QTanH Intrinsic, Up: Other Intrinsics - - Rename Intrinsic (function) - ........................... - - Rename(PATH1, PATH2) - - Rename: `INTEGER(KIND=1)' function. - - PATH1: `CHARACTER'; scalar; INTENT(IN). - - PATH2: `CHARACTER'; scalar; INTENT(IN). - - Intrinsic groups: `badu77'. - - Description: - - Renames the file PATH1 to PATH2. A null character (`CHAR(0)') marks - the end of the names in PATH1 and PATH2--otherwise, trailing blanks in - PATH1 and PATH2 are ignored. See `rename(2)'. Returns 0 on success or - a non-zero error code. - - Due to the side effects performed by this intrinsic, the function - form is not recommended. - - For information on other intrinsics with the same name: *Note Rename - Intrinsic (subroutine)::. - -  - File: g77.info, Node: Secnds Intrinsic, Next: Signal Intrinsic (function), Prev: Rename Intrinsic (function), Up: Other Intrinsics - - Secnds Intrinsic - ................ - - Secnds(T) - - Secnds: `REAL(KIND=1)' function. - - T: `REAL(KIND=1)'; scalar; INTENT(IN). - - Intrinsic groups: `vxt'. - - Description: - - Returns the local time in seconds since midnight minus the value T. - - This values returned by this intrinsic become numerically less than - previous values (they wrap around) during a single run of the compiler - program, under normal circumstances (such as running through the - midnight hour). - -  - File: g77.info, Node: Signal Intrinsic (function), Next: SinD Intrinsic, Prev: Secnds Intrinsic, Up: Other Intrinsics - - Signal Intrinsic (function) - ........................... - - Signal(NUMBER, HANDLER) - - Signal: `INTEGER(KIND=7)' function. - - NUMBER: `INTEGER'; scalar; INTENT(IN). - - HANDLER: Signal handler (`INTEGER FUNCTION' or `SUBROUTINE') or - dummy/global `INTEGER(KIND=1)' scalar. - - Intrinsic groups: `badu77'. - - Description: - - If HANDLER is a an `EXTERNAL' routine, arranges for it to be invoked - with a single integer argument (of system-dependent length) when signal - NUMBER occurs. If HANDLER is an integer, it can be used to turn off - handling of signal NUMBER or revert to its default action. See - `signal(2)'. - - Note that HANDLER will be called using C conventions, so the value - of its argument in Fortran terms is obtained by applying `%LOC()' (or - LOC()) to it. - - The value returned by `signal(2)' is returned. - - Due to the side effects performed by this intrinsic, the function - form is not recommended. - - _Warning:_ If the returned value is stored in an `INTEGER(KIND=1)' - (default `INTEGER') argument, truncation of the original return value - occurs on some systems (such as Alphas, which have 64-bit pointers but - 32-bit default integers), with no warning issued by `g77' under normal - circumstances. - - Therefore, the following code fragment might silently fail on some - systems: - - INTEGER RTN - EXTERNAL MYHNDL - RTN = SIGNAL(SIGNUM, MYHNDL) - ... - ! Restore original handler: - RTN = SIGNAL(SIGNUM, RTN) - - The reason for the failure is that `RTN' might not hold all the - information on the original handler for the signal, thus restoring an - invalid handler. This bug could manifest itself as a spurious run-time - failure at an arbitrary point later during the program's execution, for - example. - - _Warning:_ Use of the `libf2c' run-time library function `signal_' - directly (such as via `EXTERNAL SIGNAL') requires use of the `%VAL()' - construct to pass an `INTEGER' value (such as `SIG_IGN' or `SIG_DFL') - for the HANDLER argument. - - However, while `RTN = SIGNAL(SIGNUM, %VAL(SIG_IGN))' works when - `SIGNAL' is treated as an external procedure (and resolves, at link - time, to `libf2c''s `signal_' routine), this construct is not valid - when `SIGNAL' is recognized as the intrinsic of that name. - - Therefore, for maximum portability and reliability, code such - references to the `SIGNAL' facility as follows: - - INTRINSIC SIGNAL - ... - RTN = SIGNAL(SIGNUM, SIG_IGN) - - `g77' will compile such a call correctly, while other compilers will - generally either do so as well or reject the `INTRINSIC SIGNAL' - statement via a diagnostic, allowing you to take appropriate action. - - For information on other intrinsics with the same name: *Note Signal - Intrinsic (subroutine)::. - -  - File: g77.info, Node: SinD Intrinsic, Next: SnglQ Intrinsic, Prev: Signal Intrinsic (function), Up: Other Intrinsics - - SinD Intrinsic - .............. - - This intrinsic is not yet implemented. The name is, however, - reserved as an intrinsic. Use `EXTERNAL SinD' to use this name for an - external procedure. - -  - File: g77.info, Node: SnglQ Intrinsic, Next: SymLnk Intrinsic (function), Prev: SinD Intrinsic, Up: Other Intrinsics - - SnglQ Intrinsic - ............... - - This intrinsic is not yet implemented. The name is, however, - reserved as an intrinsic. Use `EXTERNAL SnglQ' to use this name for an - external procedure. - -  - File: g77.info, Node: SymLnk Intrinsic (function), Next: System Intrinsic (function), Prev: SnglQ Intrinsic, Up: Other Intrinsics - - SymLnk Intrinsic (function) - ........................... - - SymLnk(PATH1, PATH2) - - SymLnk: `INTEGER(KIND=1)' function. - - PATH1: `CHARACTER'; scalar; INTENT(IN). - - PATH2: `CHARACTER'; scalar; INTENT(IN). - - Intrinsic groups: `badu77'. - - Description: - - Makes a symbolic link from file PATH1 to PATH2. A null character - (`CHAR(0)') marks the end of the names in PATH1 and PATH2--otherwise, - trailing blanks in PATH1 and PATH2 are ignored. Returns 0 on success - or a non-zero error code (`ENOSYS' if the system does not provide - `symlink(2)'). - - Due to the side effects performed by this intrinsic, the function - form is not recommended. - - For information on other intrinsics with the same name: *Note SymLnk - Intrinsic (subroutine)::. - -  - File: g77.info, Node: System Intrinsic (function), Next: TanD Intrinsic, Prev: SymLnk Intrinsic (function), Up: Other Intrinsics - - System Intrinsic (function) - ........................... - - System(COMMAND) - - System: `INTEGER(KIND=1)' function. - - COMMAND: `CHARACTER'; scalar; INTENT(IN). - - Intrinsic groups: `badu77'. - - Description: - - Passes the command COMMAND to a shell (see `system(3)'). Returns - the value returned by `system(3)', presumably 0 if the shell command - succeeded. Note that which shell is used to invoke the command is - system-dependent and environment-dependent. - - Due to the side effects performed by this intrinsic, the function - form is not recommended. However, the function form can be valid in - cases where the actual side effects performed by the call are - unimportant to the application. - - For example, on a UNIX system, `SAME = SYSTEM('cmp a b')' does not - perform any side effects likely to be important to the program, so the - programmer would not care if the actual system call (and invocation of - `cmp') was optimized away in a situation where the return value could - be determined otherwise, or was not actually needed (`SAME' not - actually referenced after the sample assignment statement). - - For information on other intrinsics with the same name: *Note System - Intrinsic (subroutine)::. - -  - File: g77.info, Node: TanD Intrinsic, Next: Time Intrinsic (VXT), Prev: System Intrinsic (function), Up: Other Intrinsics - - TanD Intrinsic - .............. - - This intrinsic is not yet implemented. The name is, however, - reserved as an intrinsic. Use `EXTERNAL TanD' to use this name for an - external procedure. - --- 1685,1687 ---- diff -Nrc3pad gcc-3.0.4/gcc/f/g77.info-13 gcc-3.1/gcc/f/g77.info-13 *** gcc-3.0.4/gcc/f/g77.info-13 Wed Feb 20 19:57:12 2002 --- gcc-3.1/gcc/f/g77.info-13 Wed May 15 02:45:53 2002 *************** *** 1,16 **** ! This is g77.info, produced by makeinfo version 4.0b from g77.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * g77: (g77). The GNU Fortran compiler. END-INFO-DIR-ENTRY This file documents the use and the internals of the GNU Fortran ! (`g77') compiler. It corresponds to the GCC-3.0 version of `g77'. Published by the Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA ! Copyright (C) 1995,1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document --- 1,16 ---- ! This is g77.info, produced by makeinfo version 4.2 from g77.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * g77: (g77). The GNU Fortran compiler. END-INFO-DIR-ENTRY This file documents the use and the internals of the GNU Fortran ! (`g77') compiler. It corresponds to the GCC-3.1 version of `g77'. Published by the Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA ! Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document *************** a first pass at translating `g77-0.5.16/ *** 36,41 **** --- 36,429 ---- Craig by David Ronis ().  + File: g77.info, Node: QExtD Intrinsic, Next: QFloat Intrinsic, Prev: QExt Intrinsic, Up: Other Intrinsics + + QExtD Intrinsic + ............... + + This intrinsic is not yet implemented. The name is, however, + reserved as an intrinsic. Use `EXTERNAL QExtD' to use this name for an + external procedure. + +  + File: g77.info, Node: QFloat Intrinsic, Next: QInt Intrinsic, Prev: QExtD Intrinsic, Up: Other Intrinsics + + QFloat Intrinsic + ................ + + This intrinsic is not yet implemented. The name is, however, + reserved as an intrinsic. Use `EXTERNAL QFloat' to use this name for an + external procedure. + +  + File: g77.info, Node: QInt Intrinsic, Next: QLog Intrinsic, Prev: QFloat Intrinsic, Up: Other Intrinsics + + QInt Intrinsic + .............. + + This intrinsic is not yet implemented. The name is, however, + reserved as an intrinsic. Use `EXTERNAL QInt' to use this name for an + external procedure. + +  + File: g77.info, Node: QLog Intrinsic, Next: QLog10 Intrinsic, Prev: QInt Intrinsic, Up: Other Intrinsics + + QLog Intrinsic + .............. + + This intrinsic is not yet implemented. The name is, however, + reserved as an intrinsic. Use `EXTERNAL QLog' to use this name for an + external procedure. + +  + File: g77.info, Node: QLog10 Intrinsic, Next: QMax1 Intrinsic, Prev: QLog Intrinsic, Up: Other Intrinsics + + QLog10 Intrinsic + ................ + + This intrinsic is not yet implemented. The name is, however, + reserved as an intrinsic. Use `EXTERNAL QLog10' to use this name for an + external procedure. + +  + File: g77.info, Node: QMax1 Intrinsic, Next: QMin1 Intrinsic, Prev: QLog10 Intrinsic, Up: Other Intrinsics + + QMax1 Intrinsic + ............... + + This intrinsic is not yet implemented. The name is, however, + reserved as an intrinsic. Use `EXTERNAL QMax1' to use this name for an + external procedure. + +  + File: g77.info, Node: QMin1 Intrinsic, Next: QMod Intrinsic, Prev: QMax1 Intrinsic, Up: Other Intrinsics + + QMin1 Intrinsic + ............... + + This intrinsic is not yet implemented. The name is, however, + reserved as an intrinsic. Use `EXTERNAL QMin1' to use this name for an + external procedure. + +  + File: g77.info, Node: QMod Intrinsic, Next: QNInt Intrinsic, Prev: QMin1 Intrinsic, Up: Other Intrinsics + + QMod Intrinsic + .............. + + This intrinsic is not yet implemented. The name is, however, + reserved as an intrinsic. Use `EXTERNAL QMod' to use this name for an + external procedure. + +  + File: g77.info, Node: QNInt Intrinsic, Next: QSin Intrinsic, Prev: QMod Intrinsic, Up: Other Intrinsics + + QNInt Intrinsic + ............... + + This intrinsic is not yet implemented. The name is, however, + reserved as an intrinsic. Use `EXTERNAL QNInt' to use this name for an + external procedure. + +  + File: g77.info, Node: QSin Intrinsic, Next: QSinD Intrinsic, Prev: QNInt Intrinsic, Up: Other Intrinsics + + QSin Intrinsic + .............. + + This intrinsic is not yet implemented. The name is, however, + reserved as an intrinsic. Use `EXTERNAL QSin' to use this name for an + external procedure. + +  + File: g77.info, Node: QSinD Intrinsic, Next: QSinH Intrinsic, Prev: QSin Intrinsic, Up: Other Intrinsics + + QSinD Intrinsic + ............... + + This intrinsic is not yet implemented. The name is, however, + reserved as an intrinsic. Use `EXTERNAL QSinD' to use this name for an + external procedure. + +  + File: g77.info, Node: QSinH Intrinsic, Next: QSqRt Intrinsic, Prev: QSinD Intrinsic, Up: Other Intrinsics + + QSinH Intrinsic + ............... + + This intrinsic is not yet implemented. The name is, however, + reserved as an intrinsic. Use `EXTERNAL QSinH' to use this name for an + external procedure. + +  + File: g77.info, Node: QSqRt Intrinsic, Next: QTan Intrinsic, Prev: QSinH Intrinsic, Up: Other Intrinsics + + QSqRt Intrinsic + ............... + + This intrinsic is not yet implemented. The name is, however, + reserved as an intrinsic. Use `EXTERNAL QSqRt' to use this name for an + external procedure. + +  + File: g77.info, Node: QTan Intrinsic, Next: QTanD Intrinsic, Prev: QSqRt Intrinsic, Up: Other Intrinsics + + QTan Intrinsic + .............. + + This intrinsic is not yet implemented. The name is, however, + reserved as an intrinsic. Use `EXTERNAL QTan' to use this name for an + external procedure. + +  + File: g77.info, Node: QTanD Intrinsic, Next: QTanH Intrinsic, Prev: QTan Intrinsic, Up: Other Intrinsics + + QTanD Intrinsic + ............... + + This intrinsic is not yet implemented. The name is, however, + reserved as an intrinsic. Use `EXTERNAL QTanD' to use this name for an + external procedure. + +  + File: g77.info, Node: QTanH Intrinsic, Next: Rename Intrinsic (function), Prev: QTanD Intrinsic, Up: Other Intrinsics + + QTanH Intrinsic + ............... + + This intrinsic is not yet implemented. The name is, however, + reserved as an intrinsic. Use `EXTERNAL QTanH' to use this name for an + external procedure. + +  + File: g77.info, Node: Rename Intrinsic (function), Next: Secnds Intrinsic, Prev: QTanH Intrinsic, Up: Other Intrinsics + + Rename Intrinsic (function) + ........................... + + Rename(PATH1, PATH2) + + Rename: `INTEGER(KIND=1)' function. + + PATH1: `CHARACTER'; scalar; INTENT(IN). + + PATH2: `CHARACTER'; scalar; INTENT(IN). + + Intrinsic groups: `badu77'. + + Description: + + Renames the file PATH1 to PATH2. A null character (`CHAR(0)') marks + the end of the names in PATH1 and PATH2--otherwise, trailing blanks in + PATH1 and PATH2 are ignored. See `rename(2)'. Returns 0 on success or + a non-zero error code. + + Due to the side effects performed by this intrinsic, the function + form is not recommended. + + For information on other intrinsics with the same name: *Note Rename + Intrinsic (subroutine)::. + +  + File: g77.info, Node: Secnds Intrinsic, Next: Signal Intrinsic (function), Prev: Rename Intrinsic (function), Up: Other Intrinsics + + Secnds Intrinsic + ................ + + Secnds(T) + + Secnds: `REAL(KIND=1)' function. + + T: `REAL(KIND=1)'; scalar; INTENT(IN). + + Intrinsic groups: `vxt'. + + Description: + + Returns the local time in seconds since midnight minus the value T. + + This values returned by this intrinsic become numerically less than + previous values (they wrap around) during a single run of the compiler + program, under normal circumstances (such as running through the + midnight hour). + +  + File: g77.info, Node: Signal Intrinsic (function), Next: SinD Intrinsic, Prev: Secnds Intrinsic, Up: Other Intrinsics + + Signal Intrinsic (function) + ........................... + + Signal(NUMBER, HANDLER) + + Signal: `INTEGER(KIND=7)' function. + + NUMBER: `INTEGER'; scalar; INTENT(IN). + + HANDLER: Signal handler (`INTEGER FUNCTION' or `SUBROUTINE') or + dummy/global `INTEGER(KIND=1)' scalar. + + Intrinsic groups: `badu77'. + + Description: + + If HANDLER is a an `EXTERNAL' routine, arranges for it to be invoked + with a single integer argument (of system-dependent length) when signal + NUMBER occurs. If HANDLER is an integer, it can be used to turn off + handling of signal NUMBER or revert to its default action. See + `signal(2)'. + + Note that HANDLER will be called using C conventions, so the value + of its argument in Fortran terms is obtained by applying `%LOC()' (or + LOC()) to it. + + The value returned by `signal(2)' is returned. + + Due to the side effects performed by this intrinsic, the function + form is not recommended. + + _Warning:_ If the returned value is stored in an `INTEGER(KIND=1)' + (default `INTEGER') argument, truncation of the original return value + occurs on some systems (such as Alphas, which have 64-bit pointers but + 32-bit default integers), with no warning issued by `g77' under normal + circumstances. + + Therefore, the following code fragment might silently fail on some + systems: + + INTEGER RTN + EXTERNAL MYHNDL + RTN = SIGNAL(SIGNUM, MYHNDL) + ... + ! Restore original handler: + RTN = SIGNAL(SIGNUM, RTN) + + The reason for the failure is that `RTN' might not hold all the + information on the original handler for the signal, thus restoring an + invalid handler. This bug could manifest itself as a spurious run-time + failure at an arbitrary point later during the program's execution, for + example. + + _Warning:_ Use of the `libf2c' run-time library function `signal_' + directly (such as via `EXTERNAL SIGNAL') requires use of the `%VAL()' + construct to pass an `INTEGER' value (such as `SIG_IGN' or `SIG_DFL') + for the HANDLER argument. + + However, while `RTN = SIGNAL(SIGNUM, %VAL(SIG_IGN))' works when + `SIGNAL' is treated as an external procedure (and resolves, at link + time, to `libf2c''s `signal_' routine), this construct is not valid + when `SIGNAL' is recognized as the intrinsic of that name. + + Therefore, for maximum portability and reliability, code such + references to the `SIGNAL' facility as follows: + + INTRINSIC SIGNAL + ... + RTN = SIGNAL(SIGNUM, SIG_IGN) + + `g77' will compile such a call correctly, while other compilers will + generally either do so as well or reject the `INTRINSIC SIGNAL' + statement via a diagnostic, allowing you to take appropriate action. + + For information on other intrinsics with the same name: *Note Signal + Intrinsic (subroutine)::. + +  + File: g77.info, Node: SinD Intrinsic, Next: SnglQ Intrinsic, Prev: Signal Intrinsic (function), Up: Other Intrinsics + + SinD Intrinsic + .............. + + This intrinsic is not yet implemented. The name is, however, + reserved as an intrinsic. Use `EXTERNAL SinD' to use this name for an + external procedure. + +  + File: g77.info, Node: SnglQ Intrinsic, Next: SymLnk Intrinsic (function), Prev: SinD Intrinsic, Up: Other Intrinsics + + SnglQ Intrinsic + ............... + + This intrinsic is not yet implemented. The name is, however, + reserved as an intrinsic. Use `EXTERNAL SnglQ' to use this name for an + external procedure. + +  + File: g77.info, Node: SymLnk Intrinsic (function), Next: System Intrinsic (function), Prev: SnglQ Intrinsic, Up: Other Intrinsics + + SymLnk Intrinsic (function) + ........................... + + SymLnk(PATH1, PATH2) + + SymLnk: `INTEGER(KIND=1)' function. + + PATH1: `CHARACTER'; scalar; INTENT(IN). + + PATH2: `CHARACTER'; scalar; INTENT(IN). + + Intrinsic groups: `badu77'. + + Description: + + Makes a symbolic link from file PATH1 to PATH2. A null character + (`CHAR(0)') marks the end of the names in PATH1 and PATH2--otherwise, + trailing blanks in PATH1 and PATH2 are ignored. Returns 0 on success + or a non-zero error code (`ENOSYS' if the system does not provide + `symlink(2)'). + + Due to the side effects performed by this intrinsic, the function + form is not recommended. + + For information on other intrinsics with the same name: *Note SymLnk + Intrinsic (subroutine)::. + +  + File: g77.info, Node: System Intrinsic (function), Next: TanD Intrinsic, Prev: SymLnk Intrinsic (function), Up: Other Intrinsics + + System Intrinsic (function) + ........................... + + System(COMMAND) + + System: `INTEGER(KIND=1)' function. + + COMMAND: `CHARACTER'; scalar; INTENT(IN). + + Intrinsic groups: `badu77'. + + Description: + + Passes the command COMMAND to a shell (see `system(3)'). Returns + the value returned by `system(3)', presumably 0 if the shell command + succeeded. Note that which shell is used to invoke the command is + system-dependent and environment-dependent. + + Due to the side effects performed by this intrinsic, the function + form is not recommended. However, the function form can be valid in + cases where the actual side effects performed by the call are + unimportant to the application. + + For example, on a UNIX system, `SAME = SYSTEM('cmp a b')' does not + perform any side effects likely to be important to the program, so the + programmer would not care if the actual system call (and invocation of + `cmp') was optimized away in a situation where the return value could + be determined otherwise, or was not actually needed (`SAME' not + actually referenced after the sample assignment statement). + + For information on other intrinsics with the same name: *Note System + Intrinsic (subroutine)::. + +  + File: g77.info, Node: TanD Intrinsic, Next: Time Intrinsic (VXT), Prev: System Intrinsic (function), Up: Other Intrinsics + + TanD Intrinsic + .............. + + This intrinsic is not yet implemented. The name is, however, + reserved as an intrinsic. Use `EXTERNAL TanD' to use this name for an + external procedure. + +  File: g77.info, Node: Time Intrinsic (VXT), Next: UMask Intrinsic (function), Prev: TanD Intrinsic, Up: Other Intrinsics Time Intrinsic (VXT) *************** recompiled with `g77' to be used with `g *** 276,282 **** -lF77 -lV77' to the link command.  ! File: g77.info, Node: Other Languages, Next: Installation, Prev: Other Compilers, Up: Top Other Languages *************** --- 664,670 ---- -lF77 -lV77' to the link command.  ! File: g77.info, Node: Other Languages, Next: Debugging and Interfacing, Prev: Other Compilers, Up: Top Other Languages *************** *************** These are in `gcc/libf2c/libF77/', named *** 511,526 **** open-code (inline) references to `IARGC'.  ! File: g77.info, Node: Installation, Next: Debugging and Interfacing, Prev: Other Languages, Up: Top ! ! Installing GNU Fortran ! ********************** ! ! The information describing how to install `g77' is contained in the ! GCC installation procedures. ! !  ! File: g77.info, Node: Debugging and Interfacing, Next: Collected Fortran Wisdom, Prev: Installation, Up: Top Debugging and Interfacing ************************* --- 899,905 ---- open-code (inline) references to `IARGC'.  ! File: g77.info, Node: Debugging and Interfacing, Next: Collected Fortran Wisdom, Prev: Other Languages, Up: Top Debugging and Interfacing ************************* *************** Common Blocks (COMMON) *** 816,863 **** `g77' names and lays out `COMMON' areas the same way `f2c' does, for compatibility with `f2c'. - Currently, `g77' does not emit "true" debugging information for - members of a `COMMON' area, due to an apparent bug in the GBE. - - (As of Version 0.5.19, `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 `-fdebug-kludge' option to enable this behavior. - In `gdb', use `set language c' before printing the value of the member, - then `set language fortran' to restore the default language, since - `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 `g77' that, in - conjunction with a contemporary version of `gdb', properly supports - Fortran-language debugging, including access to members of `COMMON' - areas.) - - Version 0.5.26 of `g77' is believed to provide correct and complete - debug information for COMMON BLOCK and EQUIVALENCE items - hence the - `-fdebug-kludge' option has been disabled. - - *Note Options for Code Generation Conventions: Code Gen Options, for - information on the `-fdebug-kludge' option. - - Moreover, `g77' currently implements a `COMMON' area such that its - type is an array of the C `char' data type. - - So, when debugging, you must know the offset into a `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 `char' type. - - For example, using default implicit typing, the statement - - COMMON I(15), R(20), T - - results in a public 144-byte `char' array named `_BLNK__' with `I' - placed at `_BLNK__[0]', `R' at `_BLNK__[60]', and `T' at `_BLNK__[140]'. - (This is assuming that the target machine for the compilation has - 4-byte `INTEGER(KIND=1)' and `REAL(KIND=1)' types.) -  File: g77.info, Node: Local Equivalence Areas, Next: Complex Variables, Prev: Common Blocks, Up: Debugging and Interfacing --- 1195,1200 ---- *************** explained in the section on common block *** 871,911 **** connected to each other in any way via `EQUIVALENCE', none of which are listed in a `COMMON' statement. - Currently, `g77' does not emit "true" debugging information for - members in a local `EQUIVALENCE' area, due to an apparent bug in the - GBE. - - (As of Version 0.5.19, `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 `-fdebug-kludge' option to enable this behavior. - In `gdb', use `set language c' before printing the value of the member, - then `set language fortran' to restore the default language, since - `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 `g77' that, in - conjunction with a contemporary version of `gdb', properly supports - Fortran-language debugging, including access to members of - `EQUIVALENCE' areas.) - - *Note Options for Code Generation Conventions: Code Gen Options, for - information on the `-fdebug-kludge' option. - - Moreover, `g77' implements a local `EQUIVALENCE' area such that its - type is an array of the C `char' data type. - - The name `g77' gives this array of `char' type is `__g77_equiv_X', - where 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, 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 `EQUIVALENCE' - areas by specifying the appropriate `__g77_equiv_X' array section with - the appropriate offset. See the explanation of debugging `COMMON' - blocks for info applicable to debugging local `EQUIVALENCE' areas. - (_Note:_ `g77' version 0.5.18 and earlier chose the name for 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 --- 1208,1213 ---- *************** of `COMPLEX' type and then switch back t *** 941,1078 **** afterward. (In `gdb', this is accomplished via `set lang c' and either `set lang fortran' or `set lang auto'.) -  - File: g77.info, Node: Arrays, Next: Adjustable Arrays, Prev: Complex Variables, Up: Debugging and Interfacing - - Arrays (DIMENSION) - ================== - - Fortran uses "column-major ordering" in its arrays. This differs - from other languages, such as C, which use "row-major ordering". The - difference is that, with Fortran, array elements adjacent to each other - in memory differ in the _first_ subscript instead of the last; - `A(5,10,20)' immediately follows `A(4,10,20)', whereas with row-major - ordering it would follow `A(5,10,19)'. - - This consideration affects not only interfacing with and debugging - Fortran code, it can greatly affect how code is designed and written, - especially when code speed and size is a concern. - - Fortran also differs from C, a popular language for interfacing and - to support directly in debuggers, in the way arrays are treated. In C, - arrays are single-dimensional and have interesting relationships to - pointers, neither of which is true for Fortran. As a result, dealing - with Fortran arrays from within an environment limited to C concepts - can be challenging. - - For example, accessing the array element `A(5,10,20)' is easy enough - in Fortran (use `A(5,10,20)'), but in C some difficult machinations are - needed. First, C would treat the A array as a single-dimension array. - Second, C does not understand low bounds for arrays as does Fortran. - Third, C assumes a low bound of zero (0), while Fortran defaults to a - low bound of one (1) and can supports an arbitrary low bound. - Therefore, calculations must be done to determine what the C equivalent - of `A(5,10,20)' would be, and these calculations require knowing the - dimensions of `A'. - - For `DIMENSION A(2:11,21,0:29)', the calculation of the offset of - `A(5,10,20)' would be: - - (5-2) - + (10-1)*(11-2+1) - + (20-0)*(11-2+1)*(21-1+1) - = 4293 - - So the C equivalent in this case would be `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 `f2c', `g77' does inform - the GBE that a multi-dimensional array (like `A' in the above example) - is really multi-dimensional, rather than a single-dimensional array, so - at least the dimensionality of the array is preserved. - - Debuggers that understand Fortran should have no trouble with - non-zero low bounds, but for non-Fortran debuggers, especially C - debuggers, the above example might have a C equivalent of `a[4305]'. - This calculation is arrived at by eliminating the subtraction of the - lower bound in the first parenthesized expression on each line--that - is, for `(5-2)' substitute `(5)', for `(10-1)' substitute `(10)', and - for `(20-0)' substitute `(20)'. Actually, the implication of this can - be that the expression `*(&a[2][1][0] + 4293)' works fine, but that - `a[20][10][5]' produces the equivalent of `*(&a[0][0][0] + 4305)' - because of the missing lower bounds. - - Come to think of it, perhaps the behavior is due to the debugger - internally compensating for the lower bounds by offsetting the base - address of `a', leaving `&a' set lower, in this case, than - `&a[2][1][0]' (the address of its first element as identified by - subscripts equal to the corresponding lower bounds). - - You know, maybe nobody really needs to use arrays. - -  - File: g77.info, Node: Adjustable Arrays, Next: Alternate Entry Points, Prev: Arrays, Up: Debugging and Interfacing - - Adjustable Arrays (DIMENSION) - ============================= - - Adjustable and automatic arrays in Fortran require the implementation - (in this case, the `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 have any effect on the - dimensions of those arrays. - - For example: - - REAL ARRAY(5) - DATA ARRAY/5*2/ - CALL X(ARRAY, 5) - END - SUBROUTINE X(A, N) - DIMENSION A(N) - N = 20 - PRINT *, N, A - END - - Here, the implementation should, when running the program, print - something like: - - 20 2. 2. 2. 2. 2. - - Note that this shows that while the value of `N' was successfully - changed, the size of the `A' array remained at 5 elements. - - To support this, `g77' generates code that executes before any user - code (and before the internally generated computed `GOTO' to handle - alternate entry points, as described below) that evaluates each - (nonconstant) expression in the list of subscripts for an array, and - saves the result of each such evaluation to be used when determining - the size of the array (instead of re-evaluating the expressions). - - So, in the above example, when `X' is first invoked, code is - executed that copies the value of `N' to a temporary. And that same - temporary serves as the actual high bound for the single dimension of - the `A' array (the low bound being the constant 1). 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 `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 `NULL' pointer where a pointer to that adjustable array would be - expected. The `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 `NULL' at run time in such cases. (Don't depend on this - particular implementation by writing code that purposely passes `NULL' - pointers where the callee expects adjustable arrays, even if you know - the callee won't reference the arrays--nor should you pass `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 `g77' implements these things might change in - the future!) - --- 1243,1245 ---- diff -Nrc3pad gcc-3.0.4/gcc/f/g77.info-14 gcc-3.1/gcc/f/g77.info-14 *** gcc-3.0.4/gcc/f/g77.info-14 Wed Feb 20 19:57:12 2002 --- gcc-3.1/gcc/f/g77.info-14 Wed May 15 02:45:53 2002 *************** *** 1,16 **** ! This is g77.info, produced by makeinfo version 4.0b from g77.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * g77: (g77). The GNU Fortran compiler. END-INFO-DIR-ENTRY This file documents the use and the internals of the GNU Fortran ! (`g77') compiler. It corresponds to the GCC-3.0 version of `g77'. Published by the Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA ! Copyright (C) 1995,1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document --- 1,16 ---- ! This is g77.info, produced by makeinfo version 4.2 from g77.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * g77: (g77). The GNU Fortran compiler. END-INFO-DIR-ENTRY This file documents the use and the internals of the GNU Fortran ! (`g77') compiler. It corresponds to the GCC-3.1 version of `g77'. Published by the Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA ! Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document *************** a first pass at translating `g77-0.5.16/ *** 36,41 **** --- 36,176 ---- Craig by David Ronis ().  + File: g77.info, Node: Arrays, Next: Adjustable Arrays, Prev: Complex Variables, Up: Debugging and Interfacing + + Arrays (DIMENSION) + ================== + + Fortran uses "column-major ordering" in its arrays. This differs + from other languages, such as C, which use "row-major ordering". The + difference is that, with Fortran, array elements adjacent to each other + in memory differ in the _first_ subscript instead of the last; + `A(5,10,20)' immediately follows `A(4,10,20)', whereas with row-major + ordering it would follow `A(5,10,19)'. + + This consideration affects not only interfacing with and debugging + Fortran code, it can greatly affect how code is designed and written, + especially when code speed and size is a concern. + + Fortran also differs from C, a popular language for interfacing and + to support directly in debuggers, in the way arrays are treated. In C, + arrays are single-dimensional and have interesting relationships to + pointers, neither of which is true for Fortran. As a result, dealing + with Fortran arrays from within an environment limited to C concepts + can be challenging. + + For example, accessing the array element `A(5,10,20)' is easy enough + in Fortran (use `A(5,10,20)'), but in C some difficult machinations are + needed. First, C would treat the A array as a single-dimension array. + Second, C does not understand low bounds for arrays as does Fortran. + Third, C assumes a low bound of zero (0), while Fortran defaults to a + low bound of one (1) and can supports an arbitrary low bound. + Therefore, calculations must be done to determine what the C equivalent + of `A(5,10,20)' would be, and these calculations require knowing the + dimensions of `A'. + + For `DIMENSION A(2:11,21,0:29)', the calculation of the offset of + `A(5,10,20)' would be: + + (5-2) + + (10-1)*(11-2+1) + + (20-0)*(11-2+1)*(21-1+1) + = 4293 + + So the C equivalent in this case would be `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 `f2c', `g77' does inform + the GBE that a multi-dimensional array (like `A' in the above example) + is really multi-dimensional, rather than a single-dimensional array, so + at least the dimensionality of the array is preserved. + + Debuggers that understand Fortran should have no trouble with + non-zero low bounds, but for non-Fortran debuggers, especially C + debuggers, the above example might have a C equivalent of `a[4305]'. + This calculation is arrived at by eliminating the subtraction of the + lower bound in the first parenthesized expression on each line--that + is, for `(5-2)' substitute `(5)', for `(10-1)' substitute `(10)', and + for `(20-0)' substitute `(20)'. Actually, the implication of this can + be that the expression `*(&a[2][1][0] + 4293)' works fine, but that + `a[20][10][5]' produces the equivalent of `*(&a[0][0][0] + 4305)' + because of the missing lower bounds. + + Come to think of it, perhaps the behavior is due to the debugger + internally compensating for the lower bounds by offsetting the base + address of `a', leaving `&a' set lower, in this case, than + `&a[2][1][0]' (the address of its first element as identified by + subscripts equal to the corresponding lower bounds). + + You know, maybe nobody really needs to use arrays. + +  + File: g77.info, Node: Adjustable Arrays, Next: Alternate Entry Points, Prev: Arrays, Up: Debugging and Interfacing + + Adjustable Arrays (DIMENSION) + ============================= + + Adjustable and automatic arrays in Fortran require the implementation + (in this case, the `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 have any effect on the + dimensions of those arrays. + + For example: + + REAL ARRAY(5) + DATA ARRAY/5*2/ + CALL X(ARRAY, 5) + END + SUBROUTINE X(A, N) + DIMENSION A(N) + N = 20 + PRINT *, N, A + END + + Here, the implementation should, when running the program, print + something like: + + 20 2. 2. 2. 2. 2. + + Note that this shows that while the value of `N' was successfully + changed, the size of the `A' array remained at 5 elements. + + To support this, `g77' generates code that executes before any user + code (and before the internally generated computed `GOTO' to handle + alternate entry points, as described below) that evaluates each + (nonconstant) expression in the list of subscripts for an array, and + saves the result of each such evaluation to be used when determining + the size of the array (instead of re-evaluating the expressions). + + So, in the above example, when `X' is first invoked, code is + executed that copies the value of `N' to a temporary. And that same + temporary serves as the actual high bound for the single dimension of + the `A' array (the low bound being the constant 1). 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 `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 `NULL' pointer where a pointer to that adjustable array would be + expected. The `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 `NULL' at run time in such cases. (Don't depend on this + particular implementation by writing code that purposely passes `NULL' + pointers where the callee expects adjustable arrays, even if you know + the callee won't reference the arrays--nor should you pass `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 `g77' implements these things might change in + the future!) + +  File: g77.info, Node: Alternate Entry Points, Next: Alternate Returns, Prev: Adjustable Arrays, Up: Debugging and Interfacing Alternate Entry Points (ENTRY) *************** might have expected it to do, so `g77' a *** 929,1181 **** likely to follow the programmer's expectations, might be worthwhile, especially if such changes make the program work better. -  - File: g77.info, Node: Aliasing Assumed To Work, Next: Output Assumed To Flush, Prev: Surprising Interpretations of Code, Up: Working Programs - - Aliasing Assumed To Work - ------------------------ - - The `-falias-check', `-fargument-alias', `-fargument-noalias', and - `-fno-argument-noalias-global' options, introduced in version 0.5.20 and - `g77''s version 2.7.2.2.f.2 of `gcc', were withdrawn as of `g77' - version 0.5.23 due to their not being supported by `gcc' version 2.8. - - These options control the assumptions regarding aliasing - (overlapping) of writes and reads to main memory (core) made by the - `gcc' back end. - - The information below still is useful, but applies to only those - versions of `g77' that support the alias analysis implied by support - for these options. - - These options are effective only when compiling with `-O' - (specifying any level other than `-O0') or with `-falias-check'. - - The default for Fortran code is `-fargument-noalias-global'. (The - default for C code and code written in other C-based languages is - `-fargument-alias'. These defaults apply regardless of whether you use - `g77' or `gcc' to compile your code.) - - Note that, on some systems, compiling with `-fforce-addr' in effect - can produce more optimal code when the default aliasing options are in - effect (and when optimization is enabled). - - If your program is not working when compiled with optimization, it - is possible it is violating the Fortran standards (77 and 90) by - relying on the ability to "safely" modify variables and arrays that are - aliased, via procedure calls, to other variables and arrays, without - using `EQUIVALENCE' to explicitly 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 - `g77', to, for example, implement the passing of procedures and even - values in `COMMON' via copy operations into local, perhaps more - efficiently accessed temporaries at entry to a procedure, and, where - appropriate, via copy operations back out to their original locations - in memory at exit from that procedure, without having to take into - consideration the order in which the local copies are updated by the - code, among other things.) - - To test this hypothesis, try compiling your program with the - `-fargument-alias' option, which causes the compiler to revert to - assumptions essentially the same as made by versions of `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 `g77' in a way that results in a faster executable. - - (You might want to try compiling with `-fargument-noalias', a kind - of half-way point, to see if the problem is limited to aliasing between - dummy arguments and `COMMON' variables--this option assumes that such - aliasing is not done, while still allowing aliasing among dummy - arguments.) - - An example of aliasing that is invalid according to the standards is - shown in the following program, which might _not_ produce the expected - results when executed: - - I = 1 - CALL FOO(I, I) - PRINT *, I - END - - SUBROUTINE FOO(J, K) - J = J + K - K = J * K - PRINT *, J, K - END - - The above program attempts to use the temporary aliasing of the `J' - and `K' arguments in `FOO' to effect a pathological behavior--the - simultaneous changing of the values of _both_ `J' and `K' when either - one of them is written. - - The programmer likely expects the program to print these values: - - 2 4 - 4 - - However, since the program is not standard-conforming, an - implementation's behavior when running it is undefined, because - subroutine `FOO' modifies at least one of the arguments, and they are - aliased with each other. (Even if one of the assignment statements was - deleted, the program would still violate these rules. This kind of - on-the-fly aliasing is permitted by the standard only when none of the - aliased items are defined, or written, while the aliasing is in effect.) - - As a practical example, an optimizing compiler might schedule the `J - =' part of the second line of `FOO' _after_ the reading of `J' and `K' - for the `J * K' expression, resulting in the following output: - - 2 2 - 2 - - Essentially, compilers are promised (by the standard and, therefore, - by programmers who write code they claim to be standard-conforming) - that if they cannot detect aliasing via static analysis of a single - program unit's `EQUIVALENCE' and `COMMON' statements, no such aliasing - exists. In such cases, compilers are free to assume that an assignment - to one variable will not change the value of another variable, allowing - it to avoid generating code to re-read the value of the other variable, - to re-schedule reads and writes, and so on, to produce a faster - executable. - - The same promise holds true for arrays (as seen by the called - procedure)--an element of one dummy array cannot be aliased with, or - overlap, any element of another dummy array or be in a `COMMON' area - known to the procedure. - - (These restrictions apply only when the procedure defines, or writes - to, one of the aliased variables or arrays.) - - Unfortunately, there is no way to find _all_ possible cases of - violations of the prohibitions against aliasing in Fortran code. - Static analysis is certainly imperfect, as is run-time analysis, since - neither can catch all violations. (Static analysis can catch all - likely violations, and some that might never actually happen, while - run-time analysis can catch 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, `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 - `g77', though patches improving `g77' so that it provides either form - of detection are welcome. - -  - File: g77.info, Node: Output Assumed To Flush, Next: Large File Unit Numbers, Prev: Aliasing Assumed To Work, Up: Working Programs - - Output Assumed To Flush - ----------------------- - - For several versions prior to 0.5.20, `g77' configured its version - of the `libf2c' run-time library so that one of its configuration - macros, `ALWAYS_FLUSH', was defined. - - This was done as a result of a belief that many programs expected - output to be flushed to the operating system (under UNIX, via the - `fflush()' library call) with the result that errors, such as disk - full, would be immediately flagged via the relevant `ERR=' and - `IOSTAT=' mechanism. - - Because of the adverse effects this approach had on the performance - of many programs, `g77' no longer configures `libf2c' (now named - `libg2c' in its `g77' incarnation) to always flush output. - - If your program depends on this behavior, either insert the - appropriate `CALL FLUSH' statements, or modify the sources to the - `libg2c', rebuild and reinstall `g77', and relink your programs with - the modified library. - - (Ideally, `libg2c' would offer the choice at run-time, so that a - compile-time option to `g77' or `f2c' could result in generating the - appropriate calls to flushing or non-flushing library routines.) - - Some Fortran programs require output (writes) to be flushed to the - operating system (under UNIX, via the `fflush()' library call) so that - errors, such as disk full, are immediately flagged via the relevant - `ERR=' and `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). - - `libg2c' supports flagging write errors immediately when it is built - with the `ALWAYS_FLUSH' macro defined. This results in a `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 `g77' you - are building, you might wish to modify the `g77' source tree so that - the version of `libg2c' is built with the `ALWAYS_FLUSH' macro defined, - enabling this behavior. - - To do this, find this line in `gcc/libf2c/f2c.h' in your `g77' - source tree: - - /* #define ALWAYS_FLUSH */ - - Remove the leading `/* ', so the line begins with `#define', and the - trailing ` */'. - - Then build or rebuild `g77' as appropriate. - -  - File: g77.info, Node: Large File Unit Numbers, Next: Floating-point precision, Prev: Output Assumed To Flush, Up: Working Programs - - Large File Unit Numbers - ----------------------- - - If your program crashes at run time with a message including the - text `illegal unit number', that probably is a message from the - run-time library, `libg2c'. - - The message means that your program has attempted to use a file unit - number that is out of the range accepted by `libg2c'. Normally, this - range is 0 through 99, and the high end of the range is controlled by a - `libg2c' source-file macro named `MXUNIT'. - - If you can easily change your program to use unit numbers in the - range 0 through 99, you should do so. - - As distributed, whether as part of `f2c' or `g77', `libf2c' accepts - file unit numbers only in the range 0 through 99. For example, a - statement such as `WRITE (UNIT=100)' causes a run-time crash in - `libf2c', because the unit number, 100, is out of range. - - 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 - `MXUNIT' macro, which represents the maximum unit number, to an - appropriately higher value. - - To do this, edit the file `gcc/libf2c/libI77/fio.h' in your `g77' - source tree, changing the following line: - - #define MXUNIT 100 - - Change the line so that the value of `MXUNIT' is defined to be at - least one _greater_ than the maximum unit number used by the Fortran - programs on your system. - - (For example, a program that does `WRITE (UNIT=255)' would require - `MXUNIT' set to at least 256 to avoid crashing.) - - Then build or rebuild `g77' as appropriate. - - _Note:_ Changing this macro has _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 `WRITE (UNIT=100)', but the - library and operating system underlying `libf2c' might disallow it if - many other files have already been opened (via `OPEN' or implicitly via - `READ', `WRITE', and so on). Information on how to increase these - other limits should be found in your system's documentation. - --- 1064,1066 ---- diff -Nrc3pad gcc-3.0.4/gcc/f/g77.info-15 gcc-3.1/gcc/f/g77.info-15 *** gcc-3.0.4/gcc/f/g77.info-15 Wed Feb 20 19:57:12 2002 --- gcc-3.1/gcc/f/g77.info-15 Wed May 15 02:45:53 2002 *************** *** 1,16 **** ! This is g77.info, produced by makeinfo version 4.0b from g77.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * g77: (g77). The GNU Fortran compiler. END-INFO-DIR-ENTRY This file documents the use and the internals of the GNU Fortran ! (`g77') compiler. It corresponds to the GCC-3.0 version of `g77'. Published by the Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA ! Copyright (C) 1995,1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document --- 1,16 ---- ! This is g77.info, produced by makeinfo version 4.2 from g77.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * g77: (g77). The GNU Fortran compiler. END-INFO-DIR-ENTRY This file documents the use and the internals of the GNU Fortran ! (`g77') compiler. It corresponds to the GCC-3.1 version of `g77'. Published by the Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA ! Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document *************** a first pass at translating `g77-0.5.16/ *** 36,41 **** --- 36,291 ---- Craig by David Ronis ().  + File: g77.info, Node: Aliasing Assumed To Work, Next: Output Assumed To Flush, Prev: Surprising Interpretations of Code, Up: Working Programs + + Aliasing Assumed To Work + ------------------------ + + The `-falias-check', `-fargument-alias', `-fargument-noalias', and + `-fno-argument-noalias-global' options, introduced in version 0.5.20 and + `g77''s version 2.7.2.2.f.2 of `gcc', were withdrawn as of `g77' + version 0.5.23 due to their not being supported by `gcc' version 2.8. + + These options control the assumptions regarding aliasing + (overlapping) of writes and reads to main memory (core) made by the + `gcc' back end. + + The information below still is useful, but applies to only those + versions of `g77' that support the alias analysis implied by support + for these options. + + These options are effective only when compiling with `-O' + (specifying any level other than `-O0') or with `-falias-check'. + + The default for Fortran code is `-fargument-noalias-global'. (The + default for C code and code written in other C-based languages is + `-fargument-alias'. These defaults apply regardless of whether you use + `g77' or `gcc' to compile your code.) + + Note that, on some systems, compiling with `-fforce-addr' in effect + can produce more optimal code when the default aliasing options are in + effect (and when optimization is enabled). + + If your program is not working when compiled with optimization, it + is possible it is violating the Fortran standards (77 and 90) by + relying on the ability to "safely" modify variables and arrays that are + aliased, via procedure calls, to other variables and arrays, without + using `EQUIVALENCE' to explicitly 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 + `g77', to, for example, implement the passing of procedures and even + values in `COMMON' via copy operations into local, perhaps more + efficiently accessed temporaries at entry to a procedure, and, where + appropriate, via copy operations back out to their original locations + in memory at exit from that procedure, without having to take into + consideration the order in which the local copies are updated by the + code, among other things.) + + To test this hypothesis, try compiling your program with the + `-fargument-alias' option, which causes the compiler to revert to + assumptions essentially the same as made by versions of `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 `g77' in a way that results in a faster executable. + + (You might want to try compiling with `-fargument-noalias', a kind + of half-way point, to see if the problem is limited to aliasing between + dummy arguments and `COMMON' variables--this option assumes that such + aliasing is not done, while still allowing aliasing among dummy + arguments.) + + An example of aliasing that is invalid according to the standards is + shown in the following program, which might _not_ produce the expected + results when executed: + + I = 1 + CALL FOO(I, I) + PRINT *, I + END + + SUBROUTINE FOO(J, K) + J = J + K + K = J * K + PRINT *, J, K + END + + The above program attempts to use the temporary aliasing of the `J' + and `K' arguments in `FOO' to effect a pathological behavior--the + simultaneous changing of the values of _both_ `J' and `K' when either + one of them is written. + + The programmer likely expects the program to print these values: + + 2 4 + 4 + + However, since the program is not standard-conforming, an + implementation's behavior when running it is undefined, because + subroutine `FOO' modifies at least one of the arguments, and they are + aliased with each other. (Even if one of the assignment statements was + deleted, the program would still violate these rules. This kind of + on-the-fly aliasing is permitted by the standard only when none of the + aliased items are defined, or written, while the aliasing is in effect.) + + As a practical example, an optimizing compiler might schedule the `J + =' part of the second line of `FOO' _after_ the reading of `J' and `K' + for the `J * K' expression, resulting in the following output: + + 2 2 + 2 + + Essentially, compilers are promised (by the standard and, therefore, + by programmers who write code they claim to be standard-conforming) + that if they cannot detect aliasing via static analysis of a single + program unit's `EQUIVALENCE' and `COMMON' statements, no such aliasing + exists. In such cases, compilers are free to assume that an assignment + to one variable will not change the value of another variable, allowing + it to avoid generating code to re-read the value of the other variable, + to re-schedule reads and writes, and so on, to produce a faster + executable. + + The same promise holds true for arrays (as seen by the called + procedure)--an element of one dummy array cannot be aliased with, or + overlap, any element of another dummy array or be in a `COMMON' area + known to the procedure. + + (These restrictions apply only when the procedure defines, or writes + to, one of the aliased variables or arrays.) + + Unfortunately, there is no way to find _all_ possible cases of + violations of the prohibitions against aliasing in Fortran code. + Static analysis is certainly imperfect, as is run-time analysis, since + neither can catch all violations. (Static analysis can catch all + likely violations, and some that might never actually happen, while + run-time analysis can catch 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, `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 + `g77', though patches improving `g77' so that it provides either form + of detection are welcome. + +  + File: g77.info, Node: Output Assumed To Flush, Next: Large File Unit Numbers, Prev: Aliasing Assumed To Work, Up: Working Programs + + Output Assumed To Flush + ----------------------- + + For several versions prior to 0.5.20, `g77' configured its version + of the `libf2c' run-time library so that one of its configuration + macros, `ALWAYS_FLUSH', was defined. + + This was done as a result of a belief that many programs expected + output to be flushed to the operating system (under UNIX, via the + `fflush()' library call) with the result that errors, such as disk + full, would be immediately flagged via the relevant `ERR=' and + `IOSTAT=' mechanism. + + Because of the adverse effects this approach had on the performance + of many programs, `g77' no longer configures `libf2c' (now named + `libg2c' in its `g77' incarnation) to always flush output. + + If your program depends on this behavior, either insert the + appropriate `CALL FLUSH' statements, or modify the sources to the + `libg2c', rebuild and reinstall `g77', and relink your programs with + the modified library. + + (Ideally, `libg2c' would offer the choice at run-time, so that a + compile-time option to `g77' or `f2c' could result in generating the + appropriate calls to flushing or non-flushing library routines.) + + Some Fortran programs require output (writes) to be flushed to the + operating system (under UNIX, via the `fflush()' library call) so that + errors, such as disk full, are immediately flagged via the relevant + `ERR=' and `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). + + `libg2c' supports flagging write errors immediately when it is built + with the `ALWAYS_FLUSH' macro defined. This results in a `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 `g77' you + are building, you might wish to modify the `g77' source tree so that + the version of `libg2c' is built with the `ALWAYS_FLUSH' macro defined, + enabling this behavior. + + To do this, find this line in `gcc/libf2c/f2c.h' in your `g77' + source tree: + + /* #define ALWAYS_FLUSH */ + + Remove the leading `/* ', so the line begins with `#define', and the + trailing ` */'. + + Then build or rebuild `g77' as appropriate. + +  + File: g77.info, Node: Large File Unit Numbers, Next: Floating-point precision, Prev: Output Assumed To Flush, Up: Working Programs + + Large File Unit Numbers + ----------------------- + + If your program crashes at run time with a message including the + text `illegal unit number', that probably is a message from the + run-time library, `libg2c'. + + The message means that your program has attempted to use a file unit + number that is out of the range accepted by `libg2c'. Normally, this + range is 0 through 99, and the high end of the range is controlled by a + `libg2c' source-file macro named `MXUNIT'. + + If you can easily change your program to use unit numbers in the + range 0 through 99, you should do so. + + As distributed, whether as part of `f2c' or `g77', `libf2c' accepts + file unit numbers only in the range 0 through 99. For example, a + statement such as `WRITE (UNIT=100)' causes a run-time crash in + `libf2c', because the unit number, 100, is out of range. + + 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 + `MXUNIT' macro, which represents the maximum unit number, to an + appropriately higher value. + + To do this, edit the file `gcc/libf2c/libI77/fio.h' in your `g77' + source tree, changing the following line: + + #define MXUNIT 100 + + Change the line so that the value of `MXUNIT' is defined to be at + least one _greater_ than the maximum unit number used by the Fortran + programs on your system. + + (For example, a program that does `WRITE (UNIT=255)' would require + `MXUNIT' set to at least 256 to avoid crashing.) + + Then build or rebuild `g77' as appropriate. + + _Note:_ Changing this macro has _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 `WRITE (UNIT=100)', but the + library and operating system underlying `libf2c' might disallow it if + many other files have already been opened (via `OPEN' or implicitly via + `READ', `WRITE', and so on). Information on how to increase these + other limits should be found in your system's documentation. + +  File: g77.info, Node: Floating-point precision, Next: Inconsistent Calling Sequences, Prev: Large File Unit Numbers, Up: Working Programs Floating-point precision *************** possible workarounds for them, see `ftp: *** 349,355 **** (Note that some of this portion of the manual is lifted directly from the `gcc' manual, with minor modifications to tailor it to users of `g77'. Anytime a bug seems to have more to do with the `gcc' ! portion of `g77', see *Note Known Causes of Trouble with GNU CC: (gcc)Trouble.) * Menu: --- 599,605 ---- (Note that some of this portion of the manual is lifted directly from the `gcc' manual, with minor modifications to tailor it to users of `g77'. Anytime a bug seems to have more to do with the `gcc' ! portion of `g77', see *Note Known Causes of Trouble with GCC: (gcc)Trouble.) * Menu: *************** other documentation about this. *** 835,1138 **** *Note Floating-point precision::, regarding IEEE 754 conformance. -  - File: g77.info, Node: Known Bugs, Next: Missing Features, Prev: But-bugs, Up: Trouble - - Known Bugs In GNU Fortran - ========================= - - This section identifies bugs that `g77' _users_ might run into in - the GCC-3.0 version of `g77'. This includes bugs that are actually in - the `gcc' back end (GBE) or in `libf2c', because those sets of code are - at least somewhat under the control of (and necessarily intertwined - with) `g77', so it isn't worth separating them out. - - For information on bugs in _other_ versions of `g77', see *Note News - About GNU Fortran: News. There, lists of bugs fixed in various - versions of `g77' can help determine what bugs existed in prior - versions. - - An online, "live" version of this document (derived directly from - the mainline, development version of `g77' within `gcc') is available - via `http://www.gnu.org/software/gcc/onlinedocs/g77_bugs.html'. Follow - the "Known Bugs" link. - - The following information was last updated on 2001-06-10: - - * `g77' fails to warn about use of a "live" iterative-DO variable as - an implied-DO variable in a `WRITE' or `PRINT' statement (although - it does warn about this in a `READ' statement). - - * Something about `g77''s straightforward handling of label - references and definitions sometimes prevents the GBE from - unrolling loops. Until this is solved, try inserting or removing - `CONTINUE' statements as the terminal statement, using the `END DO' - form instead, and so on. - - * Some confusion in diagnostics concerning failing `INCLUDE' - statements from within `INCLUDE''d or `#include''d files. - - * `g77' assumes that `INTEGER(KIND=1)' constants range from `-2**31' - to `2**31-1' (the range for two's-complement 32-bit values), - instead of determining their range from the actual range of the - type for the configuration (and, someday, for the constant). - - Further, it generally doesn't implement the handling of constants - very well in that it makes assumptions about the configuration - that it no longer makes regarding variables (types). - - Included with this item is the fact that `g77' doesn't recognize - that, on IEEE-754/854-compliant systems, `0./0.' should produce a - NaN and no warning instead of the value `0.' and a warning. This - is to be fixed in version 0.6, when `g77' will use the `gcc' back - end's constant-handling mechanisms to replace its own. - - * `g77' uses way too much memory and CPU time to process large - aggregate areas having any initialized elements. - - For example, `REAL A(1000000)' followed by `DATA A(1)/1/' takes up - way too much time and space, including the size of the generated - assembler file. This is to be mitigated somewhat in version 0.6. - - Version 0.5.18 improves cases like this--specifically, cases of - _sparse_ initialization that leave large, contiguous areas - uninitialized--significantly. However, even with the - improvements, these cases still require too much memory and CPU - time. - - (Version 0.5.18 also improves cases where the initial values are - zero to a much greater degree, so if the above example ends with - `DATA A(1)/0/', the compile-time performance will be about as good - as it will ever get, aside from unrelated improvements to the - compiler.) - - Note that `g77' does display a warning message to notify the user - before the compiler appears to hang. A warning message is issued - when `g77' sees code that provides initial values (e.g. via - `DATA') to an aggregate area (`COMMON' or `EQUIVALENCE', or even a - large enough array or `CHARACTER' variable) that is large enough - to increase `g77''s compile time by roughly a factor of 10. - - This size currently is quite small, since `g77' currently has a - known bug requiring too much memory and time to handle such cases. - In `gcc/gcc/f/data.c', the macro `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 `g77' for the change to take effect. - - Note that, as of version 0.5.18, improvements have reduced the - scope of the problem for _sparse_ initialization of large arrays, - especially those with large, contiguous uninitialized areas. - However, the warning is issued at a point prior to when `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. - - * Previous versions of `g77' didn't emit information on variable and - array members of common blocks and equivalences for use with a - debugger (the `-g' command-line option). As of the version of - `g77' shipped with version 3.0 of `GCC', this is corrected. - - 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. - - *Note Options for Code Generation Conventions: Code Gen Options, - for information on the `-fdebug-kludge' option. - - * When debugging, after starting up the debugger but before being - able to see the source code for the main program unit, the user - must currently set a breakpoint at `MAIN__' (or `MAIN___' or - `MAIN_' if `MAIN__' doesn't exist) and run the program until it - hits the breakpoint. At that point, the main program unit is - activated and about to execute its first executable statement, but - that's the state in which the debugger should start up, as is the - case for languages like C. - - * Debugging `g77'-compiled code using debuggers other than `gdb' is - likely not to work. - - Getting `g77' and `gdb' to work together is a known - problem--getting `g77' to work properly with other debuggers, for - which source code often is unavailable to `g77' developers, seems - like a much larger, unknown problem, and is a lower priority than - making `g77' and `gdb' work together properly. - - On the other hand, information about problems other debuggers have - with `g77' output might make it easier to properly fix `g77', and - perhaps even improve `gdb', so it is definitely welcome. Such - information might even lead to all relevant products working - together properly sooner. - - * `g77' doesn't work perfectly on 64-bit configurations such as the - Digital Semiconductor ("DEC") Alpha. - - This problem is largely resolved as of version 0.5.23. Version - 0.6 should solve most or all remaining problems (such as - cross-compiling involving 64-bit machines). - - * `g77' currently inserts needless padding for things like `COMMON - A,IPAD' where `A' is `CHARACTER*1' and `IPAD' is `INTEGER(KIND=1)' - on machines like x86, because the back end insists that `IPAD' be - aligned to a 4-byte boundary, but the processor has no such - requirement (though it is usually good for performance). - - The `gcc' back end needs to provide a wider array of - specifications of alignment requirements and preferences for - targets, and front ends like `g77' should take advantage of this - when it becomes available. - - * The `libf2c' routines that perform some run-time arithmetic on - `COMPLEX' operands were modified circa version 0.5.20 of `g77' to - work properly even in the presence of aliased operands. - - While the `g77' and `netlib' versions of `libf2c' differ on how - this is accomplished, the main differences are that we believe the - `g77' version works properly even in the presence of _partially_ - aliased operands. - - However, these modifications have reduced performance on targets - such as x86, due to the extra copies of operands involved. - -  - File: g77.info, Node: Missing Features, Next: Disappointments, Prev: Known Bugs, Up: Trouble - - Missing Features - ================ - - This section lists features we know are missing from `g77', and - which we want to add someday. (There is no priority implied in the - ordering below.) - - * Menu: - - GNU Fortran language: - * Better Source Model:: - * Fortran 90 Support:: - * Intrinsics in PARAMETER Statements:: - * Arbitrary Concatenation:: - * SELECT CASE on CHARACTER Type:: - * RECURSIVE Keyword:: - * Popular Non-standard Types:: - * Full Support for Compiler Types:: - * Array Bounds Expressions:: - * POINTER Statements:: - * Sensible Non-standard Constructs:: - * READONLY Keyword:: - * FLUSH Statement:: - * Expressions in FORMAT Statements:: - * Explicit Assembler Code:: - * Q Edit Descriptor:: - - GNU Fortran dialects: - * Old-style PARAMETER Statements:: - * TYPE and ACCEPT I/O Statements:: - * STRUCTURE UNION RECORD MAP:: - * OPEN CLOSE and INQUIRE Keywords:: - * ENCODE and DECODE:: - * AUTOMATIC Statement:: - * Suppressing Space Padding:: - * Fortran Preprocessor:: - * Bit Operations on Floating-point Data:: - * Really Ugly Character Assignments:: - - New facilities: - * POSIX Standard:: - * Floating-point Exception Handling:: - * Nonportable Conversions:: - * Large Automatic Arrays:: - * Support for Threads:: - * Increasing Precision/Range:: - * Enabling Debug Lines:: - - Better diagnostics: - * Better Warnings:: - * Gracefully Handle Sensible Bad Code:: - * Non-standard Conversions:: - * Non-standard Intrinsics:: - * Modifying DO Variable:: - * Better Pedantic Compilation:: - * Warn About Implicit Conversions:: - * Invalid Use of Hollerith Constant:: - * Dummy Array Without Dimensioning Dummy:: - * Invalid FORMAT Specifiers:: - * Ambiguous Dialects:: - * Unused Labels:: - * Informational Messages:: - - Run-time facilities: - * Uninitialized Variables at Run Time:: - * Portable Unformatted Files:: - * Better List-directed I/O:: - * Default to Console I/O:: - - Debugging: - * Labels Visible to Debugger:: - -  - File: g77.info, Node: Better Source Model, Next: Fortran 90 Support, Up: Missing Features - - Better Source Model - ------------------- - - `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 of the program (assuming the user knows whether the - program is fixed or free form). - - The design should assume the user cannot tell tabs from spaces and - cannot see trailing spaces on lines, but has canonical tab stops and, - for fixed-form source, has the ability to always know exactly where - column 72 is (since the Fortran standard itself requires this for - fixed-form source). - - This would change the default treatment of fixed-form source 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, `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 various limits and diagnostics as appropriate. - - Also, `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 - would be rejected, and there's a lot of that kind of code around, 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 `-Wno-col73to80' option. - -  - File: g77.info, Node: Fortran 90 Support, Next: Intrinsics in PARAMETER Statements, Prev: Better Source Model, Up: Missing Features - - Fortran 90 Support - ------------------ - - `g77' does not support many of the features that distinguish Fortran - 90 (and, now, Fortran 95) from ANSI FORTRAN 77. - - 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 `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 `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 to fund a comprehensive - project to create GNU Fortran 95. - --- 1085,1087 ---- diff -Nrc3pad gcc-3.0.4/gcc/f/g77.info-16 gcc-3.1/gcc/f/g77.info-16 *** gcc-3.0.4/gcc/f/g77.info-16 Wed Feb 20 19:57:12 2002 --- gcc-3.1/gcc/f/g77.info-16 Wed May 15 02:45:53 2002 *************** *** 1,16 **** ! This is g77.info, produced by makeinfo version 4.0b from g77.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * g77: (g77). The GNU Fortran compiler. END-INFO-DIR-ENTRY This file documents the use and the internals of the GNU Fortran ! (`g77') compiler. It corresponds to the GCC-3.0 version of `g77'. Published by the Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA ! Copyright (C) 1995,1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document --- 1,16 ---- ! This is g77.info, produced by makeinfo version 4.2 from g77.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * g77: (g77). The GNU Fortran compiler. END-INFO-DIR-ENTRY This file documents the use and the internals of the GNU Fortran ! (`g77') compiler. It corresponds to the GCC-3.1 version of `g77'. Published by the Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA ! Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document *************** a first pass at translating `g77-0.5.16/ *** 36,49 **** Craig by David Ronis ().  File: g77.info, Node: Intrinsics in PARAMETER Statements, Next: Arbitrary Concatenation, Prev: Fortran 90 Support, Up: Missing Features Intrinsics in `PARAMETER' Statements ------------------------------------ ! `g77' doesn't allow intrinsics in `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, `g77' doesn't allow non-integral exponentiation in `PARAMETER' statements, such as `PARAMETER (R=2**.25)'. It is unlikely --- 36,332 ---- Craig by David Ronis ().  + File: g77.info, Node: Known Bugs, Next: Missing Features, Prev: But-bugs, Up: Trouble + + Known Bugs In GNU Fortran + ========================= + + This section identifies bugs that `g77' _users_ might run into in + the GCC-3.1 version of `g77'. This includes bugs that are actually in + the `gcc' back end (GBE) or in `libf2c', because those sets of code are + at least somewhat under the control of (and necessarily intertwined + with) `g77', so it isn't worth separating them out. + + For information on bugs in _other_ versions of `g77', see *Note News + About GNU Fortran: News. There, lists of bugs fixed in various + versions of `g77' can help determine what bugs existed in prior + versions. + + An online, "live" version of this document (derived directly from + the mainline, development version of `g77' within `gcc') is available + via `http://www.gnu.org/software/gcc/onlinedocs/g77_bugs.html'. Follow + the "Known Bugs" link. + + The following information was last updated on 2002-02-01: + + * `g77' fails to warn about use of a "live" iterative-DO variable as + an implied-DO variable in a `WRITE' or `PRINT' statement (although + it does warn about this in a `READ' statement). + + * Something about `g77''s straightforward handling of label + references and definitions sometimes prevents the GBE from + unrolling loops. Until this is solved, try inserting or removing + `CONTINUE' statements as the terminal statement, using the `END DO' + form instead, and so on. + + * Some confusion in diagnostics concerning failing `INCLUDE' + statements from within `INCLUDE''d or `#include''d files. + + * `g77' assumes that `INTEGER(KIND=1)' constants range from `-2**31' + to `2**31-1' (the range for two's-complement 32-bit values), + instead of determining their range from the actual range of the + type for the configuration (and, someday, for the constant). + + Further, it generally doesn't implement the handling of constants + very well in that it makes assumptions about the configuration + that it no longer makes regarding variables (types). + + Included with this item is the fact that `g77' doesn't recognize + that, on IEEE-754/854-compliant systems, `0./0.' should produce a + NaN and no warning instead of the value `0.' and a warning. + + * `g77' uses way too much memory and CPU time to process large + aggregate areas having any initialized elements. + + For example, `REAL A(1000000)' followed by `DATA A(1)/1/' takes up + way too much time and space, including the size of the generated + assembler file. + + Version 0.5.18 improves cases like this--specifically, cases of + _sparse_ initialization that leave large, contiguous areas + uninitialized--significantly. However, even with the + improvements, these cases still require too much memory and CPU + time. + + (Version 0.5.18 also improves cases where the initial values are + zero to a much greater degree, so if the above example ends with + `DATA A(1)/0/', the compile-time performance will be about as good + as it will ever get, aside from unrelated improvements to the + compiler.) + + Note that `g77' does display a warning message to notify the user + before the compiler appears to hang. A warning message is issued + when `g77' sees code that provides initial values (e.g. via + `DATA') to an aggregate area (`COMMON' or `EQUIVALENCE', or even a + large enough array or `CHARACTER' variable) that is large enough + to increase `g77''s compile time by roughly a factor of 10. + + This size currently is quite small, since `g77' currently has a + known bug requiring too much memory and time to handle such cases. + In `gcc/gcc/f/data.c', the macro `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 `g77' for the change to take effect. + + Note that, as of version 0.5.18, improvements have reduced the + scope of the problem for _sparse_ initialization of large arrays, + especially those with large, contiguous uninitialized areas. + However, the warning is issued at a point prior to when `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. + + * When debugging, after starting up the debugger but before being + able to see the source code for the main program unit, the user + must currently set a breakpoint at `MAIN__' (or `MAIN___' or + `MAIN_' if `MAIN__' doesn't exist) and run the program until it + hits the breakpoint. At that point, the main program unit is + activated and about to execute its first executable statement, but + that's the state in which the debugger should start up, as is the + case for languages like C. + + * Debugging `g77'-compiled code using debuggers other than `gdb' is + likely not to work. + + Getting `g77' and `gdb' to work together is a known + problem--getting `g77' to work properly with other debuggers, for + which source code often is unavailable to `g77' developers, seems + like a much larger, unknown problem, and is a lower priority than + making `g77' and `gdb' work together properly. + + On the other hand, information about problems other debuggers have + with `g77' output might make it easier to properly fix `g77', and + perhaps even improve `gdb', so it is definitely welcome. Such + information might even lead to all relevant products working + together properly sooner. + + * `g77' doesn't work perfectly on 64-bit configurations such as the + Digital Semiconductor ("DEC") Alpha. + + This problem is largely resolved as of version 0.5.23. + + * `g77' currently inserts needless padding for things like `COMMON + A,IPAD' where `A' is `CHARACTER*1' and `IPAD' is `INTEGER(KIND=1)' + on machines like x86, because the back end insists that `IPAD' be + aligned to a 4-byte boundary, but the processor has no such + requirement (though it is usually good for performance). + + The `gcc' back end needs to provide a wider array of + specifications of alignment requirements and preferences for + targets, and front ends like `g77' should take advantage of this + when it becomes available. + + * The `libf2c' routines that perform some run-time arithmetic on + `COMPLEX' operands were modified circa version 0.5.20 of `g77' to + work properly even in the presence of aliased operands. + + While the `g77' and `netlib' versions of `libf2c' differ on how + this is accomplished, the main differences are that we believe the + `g77' version works properly even in the presence of _partially_ + aliased operands. + + However, these modifications have reduced performance on targets + such as x86, due to the extra copies of operands involved. + +  + File: g77.info, Node: Missing Features, Next: Disappointments, Prev: Known Bugs, Up: Trouble + + Missing Features + ================ + + This section lists features we know are missing from `g77', and + which we want to add someday. (There is no priority implied in the + ordering below.) + + * Menu: + + GNU Fortran language: + * Better Source Model:: + * Fortran 90 Support:: + * Intrinsics in PARAMETER Statements:: + * Arbitrary Concatenation:: + * SELECT CASE on CHARACTER Type:: + * RECURSIVE Keyword:: + * Popular Non-standard Types:: + * Full Support for Compiler Types:: + * Array Bounds Expressions:: + * POINTER Statements:: + * Sensible Non-standard Constructs:: + * READONLY Keyword:: + * FLUSH Statement:: + * Expressions in FORMAT Statements:: + * Explicit Assembler Code:: + * Q Edit Descriptor:: + + GNU Fortran dialects: + * Old-style PARAMETER Statements:: + * TYPE and ACCEPT I/O Statements:: + * STRUCTURE UNION RECORD MAP:: + * OPEN CLOSE and INQUIRE Keywords:: + * ENCODE and DECODE:: + * AUTOMATIC Statement:: + * Suppressing Space Padding:: + * Fortran Preprocessor:: + * Bit Operations on Floating-point Data:: + * Really Ugly Character Assignments:: + + New facilities: + * POSIX Standard:: + * Floating-point Exception Handling:: + * Nonportable Conversions:: + * Large Automatic Arrays:: + * Support for Threads:: + * Increasing Precision/Range:: + * Enabling Debug Lines:: + + Better diagnostics: + * Better Warnings:: + * Gracefully Handle Sensible Bad Code:: + * Non-standard Conversions:: + * Non-standard Intrinsics:: + * Modifying DO Variable:: + * Better Pedantic Compilation:: + * Warn About Implicit Conversions:: + * Invalid Use of Hollerith Constant:: + * Dummy Array Without Dimensioning Dummy:: + * Invalid FORMAT Specifiers:: + * Ambiguous Dialects:: + * Unused Labels:: + * Informational Messages:: + + Run-time facilities: + * Uninitialized Variables at Run Time:: + * Portable Unformatted Files:: + * Better List-directed I/O:: + * Default to Console I/O:: + + Debugging: + * Labels Visible to Debugger:: + +  + File: g77.info, Node: Better Source Model, Next: Fortran 90 Support, Up: Missing Features + + Better Source Model + ------------------- + + `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 of the program (assuming the user knows whether the + program is fixed or free form). + + The design should assume the user cannot tell tabs from spaces and + cannot see trailing spaces on lines, but has canonical tab stops and, + for fixed-form source, has the ability to always know exactly where + column 72 is (since the Fortran standard itself requires this for + fixed-form source). + + This would change the default treatment of fixed-form source 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, `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 various limits and diagnostics as appropriate. + + Also, `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 + would be rejected, and there's a lot of that kind of code around, 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 `-Wno-col73to80' option. + +  + File: g77.info, Node: Fortran 90 Support, Next: Intrinsics in PARAMETER Statements, Prev: Better Source Model, Up: Missing Features + + Fortran 90 Support + ------------------ + + `g77' does not support many of the features that distinguish Fortran + 90 (and, now, Fortran 95) from ANSI FORTRAN 77. + + 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 `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 `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 to fund a comprehensive + project to create GNU Fortran 95. + +  File: g77.info, Node: Intrinsics in PARAMETER Statements, Next: Arbitrary Concatenation, Prev: Fortran 90 Support, Up: Missing Features Intrinsics in `PARAMETER' Statements ------------------------------------ ! `g77' doesn't allow intrinsics in `PARAMETER' statements. Related to this, `g77' doesn't allow non-integral exponentiation in `PARAMETER' statements, such as `PARAMETER (R=2**.25)'. It is unlikely *************** Popular Non-standard Types *** 129,137 **** -------------------------- `g77' doesn't fully support `INTEGER*2', `LOGICAL*1', and similar. ! Version 0.6 will provide full support for this very popular set of ! features. In the meantime, version 0.5.18 provides rudimentary support ! for them.  File: g77.info, Node: Full Support for Compiler Types, Next: Array Bounds Expressions, Prev: Popular Non-standard Types, Up: Missing Features --- 412,418 ---- -------------------------- `g77' doesn't fully support `INTEGER*2', `LOGICAL*1', and similar. ! In the meantime, version 0.5.18 provides rudimentary support for them.  File: g77.info, Node: Full Support for Compiler Types, Next: Array Bounds Expressions, Prev: Popular Non-standard Types, Up: Missing Features *************** for _all_ applicable back-end-supported *** 145,151 **** providing intrinsic support, and maybe constant support (using F90 syntax) as well, and, for most machines will result in automatic support of `INTEGER*1', `INTEGER*2', `INTEGER*8', maybe even `REAL*16', ! and so on. This is scheduled for version 0.6.  File: g77.info, Node: Array Bounds Expressions, Next: POINTER Statements, Prev: Full Support for Compiler Types, Up: Missing Features --- 426,432 ---- providing intrinsic support, and maybe constant support (using F90 syntax) as well, and, for most machines will result in automatic support of `INTEGER*1', `INTEGER*2', `INTEGER*8', maybe even `REAL*16', ! and so on.  File: g77.info, Node: Array Bounds Expressions, Next: POINTER Statements, Prev: Full Support for Compiler Types, Up: Missing Features *************** would!) *** 662,669 **** modified (a la `const' in C). Probably the best solution for now, but not quite trivial to ! implement in the general case. Worth considering after `g77' 0.6 ! is considered pretty solid.  File: g77.info, Node: Gracefully Handle Sensible Bad Code, Next: Non-standard Conversions, Prev: Better Warnings, Up: Missing Features --- 943,949 ---- modified (a la `const' in C). Probably the best solution for now, but not quite trivial to ! implement in the general case.  File: g77.info, Node: Gracefully Handle Sensible Bad Code, Next: Non-standard Conversions, Prev: Better Warnings, Up: Missing Features *************** fully controls, such as the Hurd, and pr *** 1001,1236 **** compatibility with existing systems and interoperability with popular existing compilers. -  - File: g77.info, Node: Multiple Definitions of External Names, Next: Limitation on Implicit Declarations, Prev: Mangling of Names, Up: Disappointments - - Multiple Definitions of External Names - -------------------------------------- - - `g77' doesn't allow a common block and an external procedure or - `BLOCK DATA' to have the same name. Some systems allow this, but `g77' - does not, to be compatible with `f2c'. - - `g77' could special-case the way it handles `BLOCK DATA', since it - is not compatible with `f2c' in this particular area (necessarily, - since `g77' offers an important feature here), but it is likely that - such special-casing would be very annoying to people with programs that - use `EXTERNAL FOO', with no other mention of `FOO' in the same program - unit, to refer to external procedures, since the result would be that - `g77' would treat these references as requests to force-load BLOCK DATA - program units. - - In that case, if `g77' modified names of `BLOCK DATA' so they could - have the same names as `COMMON', users would find that their programs - wouldn't link because the `FOO' procedure didn't have its name - translated the same way. - - (Strictly speaking, `g77' could emit a - null-but-externally-satisfying definition of `FOO' with its name - transformed as if it had been a `BLOCK DATA', but that probably invites - more trouble than it's worth.) - -  - File: g77.info, Node: Limitation on Implicit Declarations, Prev: Multiple Definitions of External Names, Up: Disappointments - - Limitation on Implicit Declarations - ----------------------------------- - - `g77' disallows `IMPLICIT CHARACTER*(*)'. This is not - standard-conforming. - -  - File: g77.info, Node: Non-bugs, Next: Warnings and Errors, Prev: Disappointments, Up: Trouble - - Certain Changes We Don't Want to Make - ===================================== - - This section lists changes that people frequently request, but which - we do not make because we think GNU Fortran is better without them. - - * Menu: - - * Backslash in Constants:: Why `'\\'' is a constant that - is one, not two, characters long. - * Initializing Before Specifying:: Why `DATA VAR/1/' can't precede - `COMMON VAR'. - * Context-Sensitive Intrinsicness:: Why `CALL SQRT' won't work. - * Context-Sensitive Constants:: Why `9.435784839284958' is a - single-precision constant, - and might be interpreted as - `9.435785' or similar. - * Equivalence Versus Equality:: Why `.TRUE. .EQ. .TRUE.' won't work. - * Order of Side Effects:: Why `J = IFUNC() - IFUNC()' might - not behave as expected. - -  - File: g77.info, Node: Backslash in Constants, Next: Initializing Before Specifying, Up: Non-bugs - - Backslash in Constants - ---------------------- - - In the opinion of many experienced Fortran users, `-fno-backslash' - should be the default, not `-fbackslash', as currently set by `g77'. - - First of all, you can always specify `-fno-backslash' to turn off - this processing. - - Despite not being within the spirit (though apparently within the - letter) of the ANSI FORTRAN 77 standard, `g77' defaults to - `-fbackslash' because that is what most UNIX `f77' commands default to, - and apparently lots of code depends on this feature. - - This is a particularly troubling issue. 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 `-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 `-fno-backslash' the default for GNU Fortran and thus require - users of UNIX `f77' and `f2c' to specify `-fbackslash' to get the UNIX - behavior. - - However, the realization that `g77' is intended as a replacement for - _UNIX_ `f77', caused the author to choose to make `g77' as compatible - with `f77' as feasible, which meant making `-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 `f77' to - do, by default?" Although at least one UNIX `f77' does not provide - `-fbackslash' as a default, it appears that the majority of them do, - which suggests that the majority of code that is compiled by UNIX `f77' - compilers expects `-fbackslash' to be the default. - - It is probably the case that more code exists that would _not_ work - with `-fbackslash' in force than code that requires it be in force. - - However, most of _that_ code is not being compiled with `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 `g77''s default of `-fbackslash' than would exist - for the majority of UNIX `f77' users who would have to modify existing, - working build procedures to explicitly specify `-fbackslash' if that was - not the default. - - One suggestion has been to configure the default for `-fbackslash' - (and perhaps other options as well) based on the configuration of `g77'. - - This is technically quite straightforward, but will be avoided even - in cases where not configuring defaults to be dependent on a particular - configuration greatly inconveniences some users of legacy code. - - Many users appreciate the GNU compilers because they provide an - environment that is uniform across machines. These users would be - inconvenienced if the compiler treated things like the format of the - source code differently on certain machines. - - Occasionally users write programs intended only for a particular - machine type. On these occasions, the users would benefit if the GNU - Fortran compiler were to support by default the same dialect as the - other compilers on that machine. 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 `gcc'. To change them for `g77', you must - first change them for `gcc'. Do not ask the maintainers of `g77' to do - this for you, or to disassociate `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 - fashion on all types of machines (by default). *Note Direction of - Language Development::, for more information on this overall philosophy - guiding the development of the GNU Fortran language. - - Of course, users strongly concerned about portability should indicate - explicitly in their build procedures which options are expected by - their source code, or write source code that has as few such - expectations as possible. - - For example, avoid writing code that depends on backslash (`\') - being interpreted either way in particular, such as by starting a - program unit with: - - CHARACTER BACKSL - PARAMETER (BACKSL = '\\') - - Then, use concatenation of `BACKSL' anyplace a backslash is desired. - In this way, users can write programs which have the same meaning in - many Fortran dialects. - - (However, this technique does not work for Hollerith constants--which - is just as well, since the only generally portable uses for Hollerith - constants are in places where character constants can and should be - used instead, for readability.) - -  - File: g77.info, Node: Initializing Before Specifying, Next: Context-Sensitive Intrinsicness, Prev: Backslash in Constants, Up: Non-bugs - - Initializing Before Specifying - ------------------------------ - - `g77' does not allow `DATA VAR/1/' to appear in the source code - before `COMMON VAR', `DIMENSION VAR(10)', `INTEGER VAR', and so on. In - general, `g77' requires initialization of a variable or array to be - specified _after_ all other specifications of attributes (type, size, - placement, and so on) of that variable or array are specified (though - _confirmation_ of data type is permitted). - - It is _possible_ `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 `g77' always require - placement of `DATA' so that it can possibly immediately write constants - to the output file, thus saving time and space. - - That is, `DATA A/1000000*1/' should perhaps always be immediately - writable to canonical assembler, unless it's already known to be in a - `COMMON' area following as-yet-uninitialized stuff, and to do this it - cannot be followed by `COMMON A'. - -  - File: g77.info, Node: Context-Sensitive Intrinsicness, Next: Context-Sensitive Constants, Prev: Initializing Before Specifying, Up: Non-bugs - - Context-Sensitive Intrinsicness - ------------------------------- - - `g77' treats procedure references to _possible_ intrinsic names as - always enabling their intrinsic nature, regardless of whether the - _form_ of the reference is valid for that intrinsic. - - For example, `CALL SQRT' is interpreted by `g77' as an invalid - reference to the `SQRT' intrinsic function, because the reference is a - subroutine invocation. - - First, `g77' recognizes the statement `CALL SQRT' as a reference to - a _procedure_ named `SQRT', not to a _variable_ with that name (as it - would for a statement such as `V = SQRT'). - - Next, `g77' establishes that, in the program unit being compiled, - `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, `EXTERNAL - SQRT' was present). - - Finally, `g77' recognizes that the _form_ of the reference is - invalid for that particular intrinsic. That is, it recognizes that it - is invalid for an intrinsic _function_, such as `SQRT', to be invoked as - a _subroutine_. - - At that point, `g77' issues a diagnostic. - - Some users claim that it is "obvious" that `CALL SQRT' references an - external subroutine of their own, not an intrinsic function. - - However, `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, `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) of arguments. - - So, use the `EXTERNAL SQRT' statement in a program unit that calls a - user-written subroutine named `SQRT'. - --- 1281,1283 ---- diff -Nrc3pad gcc-3.0.4/gcc/f/g77.info-17 gcc-3.1/gcc/f/g77.info-17 *** gcc-3.0.4/gcc/f/g77.info-17 Wed Feb 20 19:57:12 2002 --- gcc-3.1/gcc/f/g77.info-17 Wed May 15 02:45:53 2002 *************** *** 1,16 **** ! This is g77.info, produced by makeinfo version 4.0b from g77.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * g77: (g77). The GNU Fortran compiler. END-INFO-DIR-ENTRY This file documents the use and the internals of the GNU Fortran ! (`g77') compiler. It corresponds to the GCC-3.0 version of `g77'. Published by the Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA ! Copyright (C) 1995,1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document --- 1,16 ---- ! This is g77.info, produced by makeinfo version 4.2 from g77.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * g77: (g77). The GNU Fortran compiler. END-INFO-DIR-ENTRY This file documents the use and the internals of the GNU Fortran ! (`g77') compiler. It corresponds to the GCC-3.1 version of `g77'. Published by the Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA ! Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document *************** a first pass at translating `g77-0.5.16/ *** 36,41 **** --- 36,274 ---- Craig by David Ronis ().  + File: g77.info, Node: Multiple Definitions of External Names, Next: Limitation on Implicit Declarations, Prev: Mangling of Names, Up: Disappointments + + Multiple Definitions of External Names + -------------------------------------- + + `g77' doesn't allow a common block and an external procedure or + `BLOCK DATA' to have the same name. Some systems allow this, but `g77' + does not, to be compatible with `f2c'. + + `g77' could special-case the way it handles `BLOCK DATA', since it + is not compatible with `f2c' in this particular area (necessarily, + since `g77' offers an important feature here), but it is likely that + such special-casing would be very annoying to people with programs that + use `EXTERNAL FOO', with no other mention of `FOO' in the same program + unit, to refer to external procedures, since the result would be that + `g77' would treat these references as requests to force-load BLOCK DATA + program units. + + In that case, if `g77' modified names of `BLOCK DATA' so they could + have the same names as `COMMON', users would find that their programs + wouldn't link because the `FOO' procedure didn't have its name + translated the same way. + + (Strictly speaking, `g77' could emit a + null-but-externally-satisfying definition of `FOO' with its name + transformed as if it had been a `BLOCK DATA', but that probably invites + more trouble than it's worth.) + +  + File: g77.info, Node: Limitation on Implicit Declarations, Prev: Multiple Definitions of External Names, Up: Disappointments + + Limitation on Implicit Declarations + ----------------------------------- + + `g77' disallows `IMPLICIT CHARACTER*(*)'. This is not + standard-conforming. + +  + File: g77.info, Node: Non-bugs, Next: Warnings and Errors, Prev: Disappointments, Up: Trouble + + Certain Changes We Don't Want to Make + ===================================== + + This section lists changes that people frequently request, but which + we do not make because we think GNU Fortran is better without them. + + * Menu: + + * Backslash in Constants:: Why `'\\'' is a constant that + is one, not two, characters long. + * Initializing Before Specifying:: Why `DATA VAR/1/' can't precede + `COMMON VAR'. + * Context-Sensitive Intrinsicness:: Why `CALL SQRT' won't work. + * Context-Sensitive Constants:: Why `9.435784839284958' is a + single-precision constant, + and might be interpreted as + `9.435785' or similar. + * Equivalence Versus Equality:: Why `.TRUE. .EQ. .TRUE.' won't work. + * Order of Side Effects:: Why `J = IFUNC() - IFUNC()' might + not behave as expected. + +  + File: g77.info, Node: Backslash in Constants, Next: Initializing Before Specifying, Up: Non-bugs + + Backslash in Constants + ---------------------- + + In the opinion of many experienced Fortran users, `-fno-backslash' + should be the default, not `-fbackslash', as currently set by `g77'. + + First of all, you can always specify `-fno-backslash' to turn off + this processing. + + Despite not being within the spirit (though apparently within the + letter) of the ANSI FORTRAN 77 standard, `g77' defaults to + `-fbackslash' because that is what most UNIX `f77' commands default to, + and apparently lots of code depends on this feature. + + This is a particularly troubling issue. 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 `-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 `-fno-backslash' the default for GNU Fortran and thus require + users of UNIX `f77' and `f2c' to specify `-fbackslash' to get the UNIX + behavior. + + However, the realization that `g77' is intended as a replacement for + _UNIX_ `f77', caused the author to choose to make `g77' as compatible + with `f77' as feasible, which meant making `-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 `f77' to + do, by default?" Although at least one UNIX `f77' does not provide + `-fbackslash' as a default, it appears that the majority of them do, + which suggests that the majority of code that is compiled by UNIX `f77' + compilers expects `-fbackslash' to be the default. + + It is probably the case that more code exists that would _not_ work + with `-fbackslash' in force than code that requires it be in force. + + However, most of _that_ code is not being compiled with `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 `g77''s default of `-fbackslash' than would exist + for the majority of UNIX `f77' users who would have to modify existing, + working build procedures to explicitly specify `-fbackslash' if that was + not the default. + + One suggestion has been to configure the default for `-fbackslash' + (and perhaps other options as well) based on the configuration of `g77'. + + This is technically quite straightforward, but will be avoided even + in cases where not configuring defaults to be dependent on a particular + configuration greatly inconveniences some users of legacy code. + + Many users appreciate the GNU compilers because they provide an + environment that is uniform across machines. These users would be + inconvenienced if the compiler treated things like the format of the + source code differently on certain machines. + + Occasionally users write programs intended only for a particular + machine type. On these occasions, the users would benefit if the GNU + Fortran compiler were to support by default the same dialect as the + other compilers on that machine. 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 `gcc'. To change them for `g77', you must + first change them for `gcc'. Do not ask the maintainers of `g77' to do + this for you, or to disassociate `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 + fashion on all types of machines (by default). *Note Direction of + Language Development::, for more information on this overall philosophy + guiding the development of the GNU Fortran language. + + Of course, users strongly concerned about portability should indicate + explicitly in their build procedures which options are expected by + their source code, or write source code that has as few such + expectations as possible. + + For example, avoid writing code that depends on backslash (`\') + being interpreted either way in particular, such as by starting a + program unit with: + + CHARACTER BACKSL + PARAMETER (BACKSL = '\\') + + Then, use concatenation of `BACKSL' anyplace a backslash is desired. + In this way, users can write programs which have the same meaning in + many Fortran dialects. + + (However, this technique does not work for Hollerith constants--which + is just as well, since the only generally portable uses for Hollerith + constants are in places where character constants can and should be + used instead, for readability.) + +  + File: g77.info, Node: Initializing Before Specifying, Next: Context-Sensitive Intrinsicness, Prev: Backslash in Constants, Up: Non-bugs + + Initializing Before Specifying + ------------------------------ + + `g77' does not allow `DATA VAR/1/' to appear in the source code + before `COMMON VAR', `DIMENSION VAR(10)', `INTEGER VAR', and so on. In + general, `g77' requires initialization of a variable or array to be + specified _after_ all other specifications of attributes (type, size, + placement, and so on) of that variable or array are specified (though + _confirmation_ of data type is permitted). + + It is _possible_ `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 `g77' always require + placement of `DATA' so that it can possibly immediately write constants + to the output file, thus saving time and space. + + That is, `DATA A/1000000*1/' should perhaps always be immediately + writable to canonical assembler, unless it's already known to be in a + `COMMON' area following as-yet-uninitialized stuff, and to do this it + cannot be followed by `COMMON A'. + +  + File: g77.info, Node: Context-Sensitive Intrinsicness, Next: Context-Sensitive Constants, Prev: Initializing Before Specifying, Up: Non-bugs + + Context-Sensitive Intrinsicness + ------------------------------- + + `g77' treats procedure references to _possible_ intrinsic names as + always enabling their intrinsic nature, regardless of whether the + _form_ of the reference is valid for that intrinsic. + + For example, `CALL SQRT' is interpreted by `g77' as an invalid + reference to the `SQRT' intrinsic function, because the reference is a + subroutine invocation. + + First, `g77' recognizes the statement `CALL SQRT' as a reference to + a _procedure_ named `SQRT', not to a _variable_ with that name (as it + would for a statement such as `V = SQRT'). + + Next, `g77' establishes that, in the program unit being compiled, + `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, `EXTERNAL + SQRT' was present). + + Finally, `g77' recognizes that the _form_ of the reference is + invalid for that particular intrinsic. That is, it recognizes that it + is invalid for an intrinsic _function_, such as `SQRT', to be invoked as + a _subroutine_. + + At that point, `g77' issues a diagnostic. + + Some users claim that it is "obvious" that `CALL SQRT' references an + external subroutine of their own, not an intrinsic function. + + However, `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, `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) of arguments. + + So, use the `EXTERNAL SQRT' statement in a program unit that calls a + user-written subroutine named `SQRT'. + +  File: g77.info, Node: Context-Sensitive Constants, Next: Equivalence Versus Equality, Prev: Context-Sensitive Intrinsicness, Up: Non-bugs Context-Sensitive Constants *************** Many warnings are issued only if you ask *** 241,251 **** options (for instance, `-Wall' requests a variety of useful warnings). _Note:_ Currently, the text of the line and a pointer to the column ! is printed in most `g77' diagnostics. Probably, as of version 0.6, ! `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 `g77' compiler. *Note Options to Request or Suppress Warnings: Warning Options, for more detail on these and related command-line options. --- 474,480 ---- options (for instance, `-Wall' requests a variety of useful warnings). _Note:_ Currently, the text of the line and a pointer to the column ! is printed in most `g77' diagnostics. *Note Options to Request or Suppress Warnings: Warning Options, for more detail on these and related command-line options. *************** might be available from `ftp://alpha.gnu *** 892,1124 **** * Internals Improvements:: Make internals more robust. * Better Diagnostics:: Make using `g77' on new code easier. -  - File: g77.info, Node: Efficiency, Next: Better Optimization, Up: Projects - - Improve Efficiency - ================== - - Don't bother doing any performance analysis until most of the - following items are taken care of, because there's no question they - represent serious space/time problems, although some of them show up - only given certain kinds of (popular) input. - - * Improve `malloc' package and its uses to specify more info about - memory pools and, where feasible, use obstacks to implement them. - - * Skip over uninitialized portions of aggregate areas (arrays, - `COMMON' areas, `EQUIVALENCE' areas) so zeros need not be output. - This would reduce memory usage for large initialized aggregate - areas, even ones with only one initialized element. - - As of version 0.5.18, a portion of this item has already been - accomplished. - - * Prescan the statement (in `sta.c') so that the nature of the - statement is determined as much as possible by looking entirely at - its form, and not looking at any context (previous statements, - including types of symbols). This would allow ripping out of the - statement-confirmation, symbol retraction/confirmation, and - diagnostic inhibition mechanisms. Plus, it would result in - much-improved diagnostics. For example, `CALL - some-intrinsic(...)', where the intrinsic is not a subroutine - intrinsic, would result actual error instead of the - unimplemented-statement catch-all. - - * Throughout `g77', don't pass line/column pairs where a simple - `ffewhere' type, which points to the error as much as is desired - by the configuration, will do, and don't pass `ffelexToken' types - where a simple `ffewhere' type will do. Then, allow new default - configuration of `ffewhere' such that the source line text is not - preserved, and leave it to things like Emacs' next-error function - to point to them (now that `next-error' supports column, or, - perhaps, character-offset, numbers). The change in calling - sequences should improve performance somewhat, as should not - having to save source lines. (Whether this whole item will - improve performance is questionable, but it should improve - maintainability.) - - * Handle `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 `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 `2' into `2.'). - - * If analysis shows it to be worthwhile, optimize `lex.c'. - - * Consider redesigning `lex.c' to not need any feedback during - tokenization, by keeping track of enough parse state on its own. - -  - File: g77.info, Node: Better Optimization, Next: Simplify Porting, Prev: Efficiency, Up: Projects - - Better Optimization - =================== - - Much of this work should be put off until after `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 - the feature-adding work. - - * Do the equivalent of the trick of putting `extern inline' in front - of every function definition in `libg2c' and #include'ing the - resulting file in `f2c'+`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.) - - * When doing `CHAR_VAR = CHAR_FUNC(...)', and it's clear that types - line up and `CHAR_VAR' is addressable or not a `VAR_DECL', make - `CHAR_VAR', not a temporary, be the receiver for `CHAR_FUNC'. - (This is now done for `COMPLEX' variables.) - - * Design and implement Fortran-specific optimizations that don't - really belong in the back end, or where the front end needs to - give the back end more info than it currently does. - - * Design and implement a new run-time library interface, with the - code going into `libgcc' so no special linking is required to link - Fortran programs using standard language features. This library - would speed up lots of things, from I/O (using precompiled formats, - doing just one, or, at most, very few, calls for arrays or array - sections, and so on) to general computing (array/section - implementations of various intrinsics, implementation of commonly - performed loops that aren't likely to be optimally compiled - otherwise, etc.). - - 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 - `libg2c' would be moved at least to the `g77' compile phase, - if not to finer grains (such as choosing how list-directed - I/O formatting is done by default at `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 devices). - - * Probably requiring the new library design, change interface to - normally have `COMPLEX' functions return their values in the way - `gcc' would if they were declared `__complex__ float', rather than - using the mechanism currently used by `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 `COMPLEX' functions in - some cases once `g77' uses `gcc' rather than `f2c' calling - conventions.) - - * Do something useful with `doiter' references where possible. For - example, `CALL FOO(I)' cannot modify `I' if within a `DO' loop - that uses `I' as the iteration variable, and the back end might - find that info useful in determining whether it needs to read `I' - back into a register after the call. (It normally has to do that, - unless it knows `FOO' never modifies its passed-by-reference - argument, which is rarely the case for Fortran-77 code.) - -  - File: g77.info, Node: Simplify Porting, Next: More Extensions, Prev: Better Optimization, Up: Projects - - Simplify Porting - ================ - - Making `g77' easier to configure, port, build, and install, either - as a single-system compiler or as a cross-compiler, would be very - useful. - - * A new library (replacing `libg2c') should improve portability as - well as produce more optimal code. Further, `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. - - Also, it should make multi-language applications more feasible, - such as by providing Fortran intrinsics that get Fortran unit - numbers given C `FILE *' descriptors. - - * Possibly related to a new library, `g77' should produce the - equivalent of a `gcc' `main(argc, argv)' function when it compiles - a main program unit, instead of compiling something that must be - called by a library implementation of `main()'. - - This would do many useful things such as provide more flexibility - in terms of setting up exception handling, not requiring - programmers to start their debugging sessions with `breakpoint - MAIN__' followed by `run', and so on. - - * The GBE needs to understand the difference between alignment - requirements and desires. For example, on Intel x86 machines, - `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 _recommendations_ as long - as they don't violate the actual processor _requirements_. - -  - File: g77.info, Node: More Extensions, Next: Machine Model, Prev: Simplify Porting, Up: Projects - - More Extensions - =============== - - These extensions are not the sort of things users ask for "by name", - but they might improve the usability of `g77', and Fortran in general, - in the long run. Some of these items really pertain to improving `g77' - internals so that some popular extensions can be more easily supported. - - * Look through all the documentation on the GNU Fortran language, - dialects, compiler, missing features, bugs, and so on. Many - mentions of incomplete or missing features are sprinkled - throughout. It is not worth repeating them here. - - * Consider adding a `NUMERIC' type to designate typeless numeric - constants, named and unnamed. The idea is to provide a - forward-looking, effective replacement for things like the - old-style `PARAMETER' statement when people really need - typelessness in a maintainable, portable, clearly documented way. - Maybe `TYPELESS' would include `CHARACTER', `POINTER', and - whatever else might come along. (This is not really a call for - polymorphism per se, just an ability to express limited, syntactic - polymorphism.) - - * Support `OPEN(...,KEY=(...),...)'. - - * Support arbitrary file unit numbers, instead of limiting them to 0 - through `MXUNIT-1'. (This is a `libg2c' issue.) - - * `OPEN(NOSPANBLOCKS,...)' is treated as - `OPEN(UNIT=NOSPANBLOCKS,...)', so a later `UNIT=' in the first - example is invalid. Make sure this is what users of this feature - would expect. - - * Currently `g77' disallows `READ(1'10)' since it is an obnoxious - syntax, but supporting it might be pretty easy if needed. More - details are needed, such as whether general expressions separated - by an apostrophe are supported, or maybe the record number can be - a general expression, and so on. - - * Support `STRUCTURE', `UNION', `MAP', and `RECORD' fully. - Currently there is no support at all for `%FILL' in `STRUCTURE' - and related syntax, whereas the rest of the stuff has at least - some parsing support. This requires either major changes to - `libg2c' or its replacement. - - * F90 and `g77' probably disagree about label scoping relative to - `INTERFACE' and `END INTERFACE', and their contained procedure - interface bodies (blocks?). - - * `ENTRY' doesn't support F90 `RESULT()' yet, since that was added - after S8.112. - - * Empty-statement handling (10 ;;CONTINUE;;) probably isn't - consistent with the final form of the standard (it was vague at - S8.112). - - * It seems to be an "open" question whether a file, immediately - after being `OPEN'ed,is positioned at the beginning, the end, or - wherever--it might be nice to offer an option of opening to - "undefined" status, requiring an explicit absolute-positioning - operation to be performed before any other (besides `CLOSE') to - assist in making applications port to systems (some IBM?) that - `OPEN' to the end of a file or some such thing. - --- 1121,1123 ---- diff -Nrc3pad gcc-3.0.4/gcc/f/g77.info-18 gcc-3.1/gcc/f/g77.info-18 *** gcc-3.0.4/gcc/f/g77.info-18 Wed Feb 20 19:57:12 2002 --- gcc-3.1/gcc/f/g77.info-18 Wed May 15 02:45:53 2002 *************** *** 1,16 **** ! This is g77.info, produced by makeinfo version 4.0b from g77.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * g77: (g77). The GNU Fortran compiler. END-INFO-DIR-ENTRY This file documents the use and the internals of the GNU Fortran ! (`g77') compiler. It corresponds to the GCC-3.0 version of `g77'. Published by the Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA ! Copyright (C) 1995,1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document --- 1,16 ---- ! This is g77.info, produced by makeinfo version 4.2 from g77.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * g77: (g77). The GNU Fortran compiler. END-INFO-DIR-ENTRY This file documents the use and the internals of the GNU Fortran ! (`g77') compiler. It corresponds to the GCC-3.1 version of `g77'. Published by the Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA ! Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document *************** a first pass at translating `g77-0.5.16/ *** 36,41 **** --- 36,271 ---- Craig by David Ronis ().  + File: g77.info, Node: Efficiency, Next: Better Optimization, Up: Projects + + Improve Efficiency + ================== + + Don't bother doing any performance analysis until most of the + following items are taken care of, because there's no question they + represent serious space/time problems, although some of them show up + only given certain kinds of (popular) input. + + * Improve `malloc' package and its uses to specify more info about + memory pools and, where feasible, use obstacks to implement them. + + * Skip over uninitialized portions of aggregate areas (arrays, + `COMMON' areas, `EQUIVALENCE' areas) so zeros need not be output. + This would reduce memory usage for large initialized aggregate + areas, even ones with only one initialized element. + + As of version 0.5.18, a portion of this item has already been + accomplished. + + * Prescan the statement (in `sta.c') so that the nature of the + statement is determined as much as possible by looking entirely at + its form, and not looking at any context (previous statements, + including types of symbols). This would allow ripping out of the + statement-confirmation, symbol retraction/confirmation, and + diagnostic inhibition mechanisms. Plus, it would result in + much-improved diagnostics. For example, `CALL + some-intrinsic(...)', where the intrinsic is not a subroutine + intrinsic, would result actual error instead of the + unimplemented-statement catch-all. + + * Throughout `g77', don't pass line/column pairs where a simple + `ffewhere' type, which points to the error as much as is desired + by the configuration, will do, and don't pass `ffelexToken' types + where a simple `ffewhere' type will do. Then, allow new default + configuration of `ffewhere' such that the source line text is not + preserved, and leave it to things like Emacs' next-error function + to point to them (now that `next-error' supports column, or, + perhaps, character-offset, numbers). The change in calling + sequences should improve performance somewhat, as should not + having to save source lines. (Whether this whole item will + improve performance is questionable, but it should improve + maintainability.) + + * Handle `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 `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 `2' into `2.'). + + * If analysis shows it to be worthwhile, optimize `lex.c'. + + * Consider redesigning `lex.c' to not need any feedback during + tokenization, by keeping track of enough parse state on its own. + +  + File: g77.info, Node: Better Optimization, Next: Simplify Porting, Prev: Efficiency, Up: Projects + + Better Optimization + =================== + + Much of this work should be put off until after `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 + the feature-adding work. + + * Do the equivalent of the trick of putting `extern inline' in front + of every function definition in `libg2c' and #include'ing the + resulting file in `f2c'+`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.) + + * When doing `CHAR_VAR = CHAR_FUNC(...)', and it's clear that types + line up and `CHAR_VAR' is addressable or not a `VAR_DECL', make + `CHAR_VAR', not a temporary, be the receiver for `CHAR_FUNC'. + (This is now done for `COMPLEX' variables.) + + * Design and implement Fortran-specific optimizations that don't + really belong in the back end, or where the front end needs to + give the back end more info than it currently does. + + * Design and implement a new run-time library interface, with the + code going into `libgcc' so no special linking is required to link + Fortran programs using standard language features. This library + would speed up lots of things, from I/O (using precompiled formats, + doing just one, or, at most, very few, calls for arrays or array + sections, and so on) to general computing (array/section + implementations of various intrinsics, implementation of commonly + performed loops that aren't likely to be optimally compiled + otherwise, etc.). + + 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 + `libg2c' would be moved at least to the `g77' compile phase, + if not to finer grains (such as choosing how list-directed + I/O formatting is done by default at `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 devices). + + * Probably requiring the new library design, change interface to + normally have `COMPLEX' functions return their values in the way + `gcc' would if they were declared `__complex__ float', rather than + using the mechanism currently used by `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 `COMPLEX' functions in + some cases once `g77' uses `gcc' rather than `f2c' calling + conventions.) + + * Do something useful with `doiter' references where possible. For + example, `CALL FOO(I)' cannot modify `I' if within a `DO' loop + that uses `I' as the iteration variable, and the back end might + find that info useful in determining whether it needs to read `I' + back into a register after the call. (It normally has to do that, + unless it knows `FOO' never modifies its passed-by-reference + argument, which is rarely the case for Fortran-77 code.) + +  + File: g77.info, Node: Simplify Porting, Next: More Extensions, Prev: Better Optimization, Up: Projects + + Simplify Porting + ================ + + Making `g77' easier to configure, port, build, and install, either + as a single-system compiler or as a cross-compiler, would be very + useful. + + * A new library (replacing `libg2c') should improve portability as + well as produce more optimal code. Further, `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. + + Also, it should make multi-language applications more feasible, + such as by providing Fortran intrinsics that get Fortran unit + numbers given C `FILE *' descriptors. + + * Possibly related to a new library, `g77' should produce the + equivalent of a `gcc' `main(argc, argv)' function when it compiles + a main program unit, instead of compiling something that must be + called by a library implementation of `main()'. + + This would do many useful things such as provide more flexibility + in terms of setting up exception handling, not requiring + programmers to start their debugging sessions with `breakpoint + MAIN__' followed by `run', and so on. + + * The GBE needs to understand the difference between alignment + requirements and desires. For example, on Intel x86 machines, + `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 _recommendations_ as long + as they don't violate the actual processor _requirements_. + +  + File: g77.info, Node: More Extensions, Next: Machine Model, Prev: Simplify Porting, Up: Projects + + More Extensions + =============== + + These extensions are not the sort of things users ask for "by name", + but they might improve the usability of `g77', and Fortran in general, + in the long run. Some of these items really pertain to improving `g77' + internals so that some popular extensions can be more easily supported. + + * Look through all the documentation on the GNU Fortran language, + dialects, compiler, missing features, bugs, and so on. Many + mentions of incomplete or missing features are sprinkled + throughout. It is not worth repeating them here. + + * Consider adding a `NUMERIC' type to designate typeless numeric + constants, named and unnamed. The idea is to provide a + forward-looking, effective replacement for things like the + old-style `PARAMETER' statement when people really need + typelessness in a maintainable, portable, clearly documented way. + Maybe `TYPELESS' would include `CHARACTER', `POINTER', and + whatever else might come along. (This is not really a call for + polymorphism per se, just an ability to express limited, syntactic + polymorphism.) + + * Support `OPEN(...,KEY=(...),...)'. + + * Support arbitrary file unit numbers, instead of limiting them to 0 + through `MXUNIT-1'. (This is a `libg2c' issue.) + + * `OPEN(NOSPANBLOCKS,...)' is treated as + `OPEN(UNIT=NOSPANBLOCKS,...)', so a later `UNIT=' in the first + example is invalid. Make sure this is what users of this feature + would expect. + + * Currently `g77' disallows `READ(1'10)' since it is an obnoxious + syntax, but supporting it might be pretty easy if needed. More + details are needed, such as whether general expressions separated + by an apostrophe are supported, or maybe the record number can be + a general expression, and so on. + + * Support `STRUCTURE', `UNION', `MAP', and `RECORD' fully. + Currently there is no support at all for `%FILL' in `STRUCTURE' + and related syntax, whereas the rest of the stuff has at least + some parsing support. This requires either major changes to + `libg2c' or its replacement. + + * F90 and `g77' probably disagree about label scoping relative to + `INTERFACE' and `END INTERFACE', and their contained procedure + interface bodies (blocks?). + + * `ENTRY' doesn't support F90 `RESULT()' yet, since that was added + after S8.112. + + * Empty-statement handling (10 ;;CONTINUE;;) probably isn't + consistent with the final form of the standard (it was vague at + S8.112). + + * It seems to be an "open" question whether a file, immediately + after being `OPEN'ed,is positioned at the beginning, the end, or + wherever--it might be nice to offer an option of opening to + "undefined" status, requiring an explicit absolute-positioning + operation to be performed before any other (besides `CLOSE') to + assist in making applications port to systems (some IBM?) that + `OPEN' to the end of a file or some such thing. + +  File: g77.info, Node: Machine Model, Next: Internals Documentation, Prev: More Extensions, Up: Projects Machine Model *************** File: g77.info, Node: Internals Documen *** 69,77 **** Internals Documentation ======================= ! Better info on how `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. *Note Front End::, which contains some information on `g77' internals. --- 299,305 ---- Internals Documentation ======================= ! Better info on how `g77' works and how to port it is needed. *Note Front End::, which contains some information on `g77' internals. *************** Front End *** 185,193 **** ********* This chapter describes some aspects of the design and implementation ! of the `g77' front end. Much of the information below applies not to ! current releases of `g77', but to the 0.6 rewrite being designed and ! implemented 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 --- 413,419 ---- ********* This chapter describes some aspects of the design and implementation ! of the `g77' front end. 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 *************** compiling that kind of code: *** 679,688 **** facilities outside of `g77', such as to C or Pascal code. Names of intrinsics will probably be matchable in any case, - However, there probably won't be any option to require a - particular mixed-case appearance of intrinsics (as there was for - `g77' prior to version 0.6), because that's painful to maintain, - and probably nobody uses it. (How `external SiN; r = sin(x)' would be handled is TBD. I think old `g77' might already handle that pretty elegantly, but whether --- 905,910 ---- *************** File: g77.info, Node: ste.c, Next: Got *** 827,1285 **** ste.c ----- -  - File: g77.info, Node: Gotchas (Transforming), Next: TBD (Transforming), Prev: ste.c, Up: Overview of Translation Process - - Gotchas (Transforming) - ---------------------- - - This section is not about transforming "gotchas" into something else. - It is about the weirder aspects of transforming Fortran, however that's - defined, into a more modern, canonical form. - - Multi-character Lexemes - ....................... - - Each lexeme carries with it a pointer to where it appears in the - source. - - To provide the ability for diagnostics to point to column numbers, - in addition to line numbers and names, lexemes that represent more than - one (significant) character in the source code need, generally, to - provide pointers to where each _character_ appears in the source. - - This provides the ability to properly identify the precise location - of the problem in code like - - SUBROUTINE X - END - BLOCK DATA X - END - - which, in fixed-form source, would result in single lexemes - consisting of the strings `SUBROUTINEX' and `BLOCKDATAX'. (The problem - is that `X' is defined twice, so a pointer to the `X' in the second - definition, as well as a follow-up pointer to the corresponding pointer - in the first, would be preferable to pointing to the beginnings of the - statements.) - - This need also arises when parsing (and diagnosing) `FORMAT' - statements. - - Further, it arises when diagnosing `FMT=' specifiers that contain - constants (or partial constants, or even propagated constants!) in I/O - statements, as in: - - PRINT '(I2, 3HAB)', J - - (A pointer to the beginning of the prematurely-terminated Hollerith - constant, and/or to the close parenthese, is preferable to a pointer to - the open-parenthese or the apostrophe that precedes it.) - - Multi-character lexemes, which would seem to naturally include at - least digit strings, alphanumeric strings, `CHARACTER' constants, and - Hollerith constants, therefore need to provide location information on - each character. (Maybe Hollerith constants don't, but it's unnecessary - to except them.) - - The question then arises, what about _other_ multi-character lexemes, - such as `**' and `//', and Fortran 90's `(/', `/)', `::', and so on? - - Turns out there's a need to identify the location of the second - character of these two-character lexemes. For example, in `I(/J) = K', - the slash needs to be diagnosed as the problem, not the open parenthese. - Similarly, it is preferable to diagnose the second slash in `I = J // - K' rather than the first, given the implicit typing rules, which would - result in the compiler disallowing the attempted concatenation of two - integers. (Though, since that's more of a semantic issue, it's not - _that_ much preferable.) - - Even sequences that could be parsed as digit strings could use - location info, for example, to diagnose the `9' in the octal constant - `O'129''. (This probably will be parsed as a character string, to be - consistent with the parsing of `Z'129A''.) - - To avoid the hassle of recording the location of the second - character, while also preserving the general rule that each significant - character is distinctly pointed to by the lexeme that contains it, it's - best to simply not have any fixed-size lexemes larger than one - character. - - This new design is expected to make checking for two `*' lexemes in - a row much easier than the old design, so this is not much of a - sacrifice. It probably makes the lexer much easier to implement than - it makes the parser harder. - - Space-padding Lexemes - ..................... - - Certain lexemes need to be padded with virtual spaces when the end - of the line (or file) is encountered. - - This is necessary in fixed form, to handle lines that don't extend - to column 72, assuming that's the line length in effect. - - Bizarre Free-form Hollerith Constants - ..................................... - - Last I checked, the Fortran 90 standard actually required the - compiler to silently accept something like - - FORMAT ( 1 2 Htwelve chars ) - - as a valid `FORMAT' statement specifying a twelve-character - Hollerith constant. - - The implication here is that, since the new lexer is a zero-feedback - one, it won't know that the special case of a `FORMAT' statement being - parsed requires apparently distinct lexemes `1' and `2' to be treated as - a single lexeme. - - (This is a horrible misfeature of the Fortran 90 language. It's one - of many such misfeatures that almost make me want to not support them, - and forge ahead with designing a new "GNU Fortran" language that has - the features, but not the misfeatures, of Fortran 90, and provide - utility programs to do the conversion automatically.) - - So, the lexer must gather distinct chunks of decimal strings into a - single lexeme in contexts where a single decimal lexeme might start a - Hollerith constant. - - (Which probably means it might as well do that all the time for all - multi-character lexemes, even in free-form mode, leaving it to - subsequent phases to pull them apart as they see fit.) - - Compare the treatment of this to how - - CHARACTER * 4 5 HEY - - and - - CHARACTER * 12 HEY - - must be treated--the former must be diagnosed, due to the separation - between lexemes, the latter must be accepted as a proper declaration. - - Hollerith Constants - ................... - - Recognizing a Hollerith constant--specifically, that an `H' or `h' - after a digit string begins such a constant--requires some knowledge of - context. - - Hollerith constants (such as `2HAB') can appear after: - - * `(' - - * `,' - - * `=' - - * `+', `-', `/' - - * `*', except as noted below - - Hollerith constants don't appear after: - - * `CHARACTER*', which can be treated generally as any `*' that is - the second lexeme of a statement - - Confusing Function Keyword - .......................... - - While - - REAL FUNCTION FOO () - - must be a `FUNCTION' statement and - - REAL FUNCTION FOO (5) - - must be a type-definition statement, - - REAL FUNCTION FOO (NAMES) - - where NAMES is a comma-separated list of names, can be one or the - other. - - The only way to disambiguate that statement (short of mandating - free-form source or a short maximum length for name for external - procedures) is based on the context of the statement. - - In particular, the statement is known to be within an - already-started program unit (but not at the outer level of the - `CONTAINS' block), it is a type-declaration statement. - - Otherwise, the statement is a `FUNCTION' statement, in that it - begins a function program unit (external, or, within `CONTAINS', - nested). - - Weird READ - .......... - - The statement - - READ (N) - - is equivalent to either - - READ (UNIT=(N)) - - or - - READ (FMT=(N)) - - depending on which would be valid in context. - - Specifically, if `N' is type `INTEGER', `READ (FMT=(N))' would not - be valid, because parentheses may not be used around `N', whereas they - may around it in `READ (UNIT=(N))'. - - Further, if `N' is type `CHARACTER', the opposite is true--`READ - (UNIT=(N))' is not valid, but `READ (FMT=(N))' is. - - Strictly speaking, if anything follows - - READ (N) - - in the statement, whether the first lexeme after the close - parenthese is a comma could be used to disambiguate the two cases, - without looking at the type of `N', because the comma is required for - the `READ (FMT=(N))' interpretation and disallowed for the `READ - (UNIT=(N))' interpretation. - - However, in practice, many Fortran compilers allow the comma for the - `READ (UNIT=(N))' interpretation anyway (in that they generally allow a - leading comma before an I/O list in an I/O statement), and much code - takes advantage of this allowance. - - (This is quite a reasonable allowance, since the juxtaposition of a - comma-separated list immediately after an I/O control-specification - list, which is also comma-separated, without an intervening comma, - looks sufficiently "wrong" to programmers that they can't resist the - itch to insert the comma. `READ (I, J), K, L' simply looks cleaner than - `READ (I, J) K, L'.) - - So, type-based disambiguation is needed unless strict adherence to - the standard is always assumed, and we're not going to assume that. - -  - File: g77.info, Node: TBD (Transforming), Prev: Gotchas (Transforming), Up: Overview of Translation Process - - TBD (Transforming) - ------------------ - - Continue researching gotchas, designing the transformational process, - and implementing it. - - Specific issues to resolve: - - * Just where should (if it was implemented) `USE' processing take - place? - - This gets into the whole issue of how `g77' should handle the - concept of modules. I think GNAT already takes on this issue, but - don't know more than that. Jim Giles has written extensively on - `comp.lang.fortran' about his opinions on module handling, as have - others. Jim's views should be taken into account. - - Actually, Richard M. Stallman (RMS) also has written up some - guidelines for implementing such things, but I'm not sure where I - read them. Perhaps the old list. - - If someone could dig references to these up and get them to me, - that would be much appreciated! Even though modules are not on - the short-term list for implementation, it'd be helpful to know - _now_ how to avoid making them harder to implement them _later_. - - * Should the `g77' command become just a script that invokes all the - various preprocessing that might be needed, thus making it seem - slower than necessary for legacy code that people are unwilling to - convert, or should we provide a separate script for that, thus - encouraging people to convert their code once and for all? - - At least, a separate script to behave as old `g77' did, perhaps - named `g77old', might ease the transition, as might a - corresponding one that converts source codes named `g77oldnew'. - - These scripts would take all the pertinent options `g77' used to - take and run the appropriate filters, passing the results to `g77' - or just making new sources out of them (in a subdirectory, leaving - the user to do the dirty deed of moving or copying them over the - old sources). - - * Do other Fortran compilers provide a prefix syntax to govern the - treatment of backslashes in `CHARACTER' (or Hollerith) constants? - - Knowing what other compilers provide would help. - - * Is it okay to drop support for the `-fintrin-case-initcap', - `-fmatch-case-initcap', `-fsymbol-case-initcap', and - `-fcase-initcap' options? - - I've asked 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. - -  - File: g77.info, Node: Philosophy of Code Generation, Next: Two-pass Design, Prev: Overview of Translation Process, Up: Front End - - Philosophy of Code Generation - ============================= - - Don't poke the bear. - - The `g77' front end generates code via the `gcc' back end. - - The `gcc' back end (GBE) is a large, complex labyrinth of intricate - code written in a combination of the C language and specialized - languages internal to `gcc'. - - While the _code_ that implements the GBE is written in a combination - of languages, the GBE itself is, to the front end for a language like - Fortran, best viewed as a _compiler_ that compiles its own, unique, - language. - - The GBE's "source", then, is written in this language, which - consists primarily of a combination of calls to GBE functions and - "tree" nodes (which are, themselves, created by calling GBE functions). - - So, the `g77' generates code by, in effect, translating the Fortran - code it reads into a form "written" in the "language" of the `gcc' back - end. - - This language will heretofore be referred to as "GBEL", for GNU Back - End Language. - - GBEL is an evolving language, not fully specified in any published - form as of this writing. It offers many facilities, but its "core" - facilities are those that corresponding most directly to those needed - to support `gcc' (compiling code written in GNU C). - - The `g77' Fortran Front End (FFE) is designed and implemented to - navigate the currents and eddies of ongoing GBEL and `gcc' development - while also delivering on the potential of an integrated FFE (as - compared to using a converter like `f2c' and feeding the output into - `gcc'). - - Goals of the FFE's code-generation strategy include: - - * High likelihood of generation of correct code, or, failing that, - producing a fatal diagnostic or crashing. - - * Generation of highly optimized code, as directed by the user via - GBE-specific (versus `g77'-specific) constructs, such as - command-line options. - - * Fast overall (FFE plus GBE) compilation. - - * Preservation of source-level debugging information. - - The strategies historically, and currently, used by the FFE to - achieve these goals include: - - * Use of GBEL constructs that most faithfully encapsulate the - semantics of Fortran. - - * Avoidance of GBEL constructs that are so rarely used, or limited - to use in specialized situations not related to Fortran, that - their reliability and performance has not yet been established as - sufficient for use by the FFE. - - * Flexible design, to readily accommodate changes to specific - code-generation strategies, perhaps governed by command-line - options. - - "Don't poke the bear" somewhat summarizes the above strategies. The - GBE is the bear. The FFE is designed and implemented to avoid poking it - in ways that are likely to just annoy it. The FFE usually either - tackles it head-on, or avoids treating it in ways dissimilar to how the - `gcc' front end treats it. - - For example, the FFE uses the native array facility in the back end - instead of the lower-level pointer-arithmetic facility used by `gcc' - when compiling `f2c' output). Theoretically, this presents more - opportunities for optimization, faster compile times, and the - production of more faithful debugging information. These benefits were - not, however, immediately realized, mainly because `gcc' itself makes - little or no use of the native array facility. - - Complex arithmetic is a case study of the evolution of this strategy. - When originally implemented, the GBEL had just evolved its own native - complex-arithmetic facility, so the FFE took advantage of that. - - When porting `g77' to 64-bit systems, it was discovered that the GBE - didn't really implement its native complex-arithmetic facility properly. - - The short-term solution was to rewrite the FFE to instead use the - lower-level facilities that'd be used by `gcc'-compiled code (assuming - that code, itself, didn't use the native complex type provided, as an - extension, by `gcc'), since these were known to work, and, in any case, - if shown to not work, would likely be rapidly fixed (since they'd - likely not work for vanilla C code in similar circumstances). - - However, the rewrite accommodated the original, native approach as - well by offering a command-line option to select it over the emulated - approach. This allowed users, and especially GBE maintainers, to try - out fixes to complex-arithmetic support in the GBE while `g77' - continued to default to compiling more code correctly, albeit producing - (typically) slower executables. - - As of April 1999, it appeared that the last few bugs in the GBE's - support of its native complex-arithmetic facility 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, `COMMON' and `EQUIVALENCE' aggregates, and so on--involve - issues similar to those pertaining to complex arithmetic. - - So, it is possible that the history of how the FFE handled complex - arithmetic will be repeated, probably in modified form (and hopefully - over shorter timeframes), for some of these other facilities. - -  - File: g77.info, Node: Two-pass Design, Next: Challenges Posed, Prev: Philosophy of Code Generation, Up: Front End - - Two-pass Design - =============== - - The FFE does not tell the GBE anything about a program unit until - after the last statement in that unit has been parsed. (A program unit - is a Fortran concept that corresponds, in the C world, mostly closely - to functions definitions in ISO C. That is, a program unit in Fortran - is like a top-level function in C. Nested functions, found among the - extensions offered by GNU C, correspond roughly to Fortran's statement - functions.) - - So, while parsing the code in a program unit, the FFE saves up all - the information on statements, expressions, names, and so on, until it - has seen the last statement. - - At that point, the FFE revisits the saved information (in what - amounts to a second "pass" over the program unit) to perform the actual - translation of the program unit into GBEL, ultimating in the generation - of assembly code for it. - - Some lookahead is performed during this second pass, so the FFE - could be viewed as a "two-plus-pass" design. - - * Menu: - - * Two-pass Code:: - * Why Two Passes:: - --- 1049,1051 ---- diff -Nrc3pad gcc-3.0.4/gcc/f/g77.info-19 gcc-3.1/gcc/f/g77.info-19 *** gcc-3.0.4/gcc/f/g77.info-19 Wed Feb 20 19:57:12 2002 --- gcc-3.1/gcc/f/g77.info-19 Wed May 15 02:45:53 2002 *************** *** 1,16 **** ! This is g77.info, produced by makeinfo version 4.0b from g77.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * g77: (g77). The GNU Fortran compiler. END-INFO-DIR-ENTRY This file documents the use and the internals of the GNU Fortran ! (`g77') compiler. It corresponds to the GCC-3.0 version of `g77'. Published by the Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA ! Copyright (C) 1995,1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document --- 1,16 ---- ! This is g77.info, produced by makeinfo version 4.2 from g77.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * g77: (g77). The GNU Fortran compiler. END-INFO-DIR-ENTRY This file documents the use and the internals of the GNU Fortran ! (`g77') compiler. It corresponds to the GCC-3.1 version of `g77'. Published by the Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA ! Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document *************** a first pass at translating `g77-0.5.16/ *** 36,41 **** --- 36,497 ---- Craig by David Ronis ().  + File: g77.info, Node: Gotchas (Transforming), Next: TBD (Transforming), Prev: ste.c, Up: Overview of Translation Process + + Gotchas (Transforming) + ---------------------- + + This section is not about transforming "gotchas" into something else. + It is about the weirder aspects of transforming Fortran, however that's + defined, into a more modern, canonical form. + + Multi-character Lexemes + ....................... + + Each lexeme carries with it a pointer to where it appears in the + source. + + To provide the ability for diagnostics to point to column numbers, + in addition to line numbers and names, lexemes that represent more than + one (significant) character in the source code need, generally, to + provide pointers to where each _character_ appears in the source. + + This provides the ability to properly identify the precise location + of the problem in code like + + SUBROUTINE X + END + BLOCK DATA X + END + + which, in fixed-form source, would result in single lexemes + consisting of the strings `SUBROUTINEX' and `BLOCKDATAX'. (The problem + is that `X' is defined twice, so a pointer to the `X' in the second + definition, as well as a follow-up pointer to the corresponding pointer + in the first, would be preferable to pointing to the beginnings of the + statements.) + + This need also arises when parsing (and diagnosing) `FORMAT' + statements. + + Further, it arises when diagnosing `FMT=' specifiers that contain + constants (or partial constants, or even propagated constants!) in I/O + statements, as in: + + PRINT '(I2, 3HAB)', J + + (A pointer to the beginning of the prematurely-terminated Hollerith + constant, and/or to the close parenthese, is preferable to a pointer to + the open-parenthese or the apostrophe that precedes it.) + + Multi-character lexemes, which would seem to naturally include at + least digit strings, alphanumeric strings, `CHARACTER' constants, and + Hollerith constants, therefore need to provide location information on + each character. (Maybe Hollerith constants don't, but it's unnecessary + to except them.) + + The question then arises, what about _other_ multi-character lexemes, + such as `**' and `//', and Fortran 90's `(/', `/)', `::', and so on? + + Turns out there's a need to identify the location of the second + character of these two-character lexemes. For example, in `I(/J) = K', + the slash needs to be diagnosed as the problem, not the open parenthese. + Similarly, it is preferable to diagnose the second slash in `I = J // + K' rather than the first, given the implicit typing rules, which would + result in the compiler disallowing the attempted concatenation of two + integers. (Though, since that's more of a semantic issue, it's not + _that_ much preferable.) + + Even sequences that could be parsed as digit strings could use + location info, for example, to diagnose the `9' in the octal constant + `O'129''. (This probably will be parsed as a character string, to be + consistent with the parsing of `Z'129A''.) + + To avoid the hassle of recording the location of the second + character, while also preserving the general rule that each significant + character is distinctly pointed to by the lexeme that contains it, it's + best to simply not have any fixed-size lexemes larger than one + character. + + This new design is expected to make checking for two `*' lexemes in + a row much easier than the old design, so this is not much of a + sacrifice. It probably makes the lexer much easier to implement than + it makes the parser harder. + + Space-padding Lexemes + ..................... + + Certain lexemes need to be padded with virtual spaces when the end + of the line (or file) is encountered. + + This is necessary in fixed form, to handle lines that don't extend + to column 72, assuming that's the line length in effect. + + Bizarre Free-form Hollerith Constants + ..................................... + + Last I checked, the Fortran 90 standard actually required the + compiler to silently accept something like + + FORMAT ( 1 2 Htwelve chars ) + + as a valid `FORMAT' statement specifying a twelve-character + Hollerith constant. + + The implication here is that, since the new lexer is a zero-feedback + one, it won't know that the special case of a `FORMAT' statement being + parsed requires apparently distinct lexemes `1' and `2' to be treated as + a single lexeme. + + (This is a horrible misfeature of the Fortran 90 language. It's one + of many such misfeatures that almost make me want to not support them, + and forge ahead with designing a new "GNU Fortran" language that has + the features, but not the misfeatures, of Fortran 90, and provide + utility programs to do the conversion automatically.) + + So, the lexer must gather distinct chunks of decimal strings into a + single lexeme in contexts where a single decimal lexeme might start a + Hollerith constant. + + (Which probably means it might as well do that all the time for all + multi-character lexemes, even in free-form mode, leaving it to + subsequent phases to pull them apart as they see fit.) + + Compare the treatment of this to how + + CHARACTER * 4 5 HEY + + and + + CHARACTER * 12 HEY + + must be treated--the former must be diagnosed, due to the separation + between lexemes, the latter must be accepted as a proper declaration. + + Hollerith Constants + ................... + + Recognizing a Hollerith constant--specifically, that an `H' or `h' + after a digit string begins such a constant--requires some knowledge of + context. + + Hollerith constants (such as `2HAB') can appear after: + + * `(' + + * `,' + + * `=' + + * `+', `-', `/' + + * `*', except as noted below + + Hollerith constants don't appear after: + + * `CHARACTER*', which can be treated generally as any `*' that is + the second lexeme of a statement + + Confusing Function Keyword + .......................... + + While + + REAL FUNCTION FOO () + + must be a `FUNCTION' statement and + + REAL FUNCTION FOO (5) + + must be a type-definition statement, + + REAL FUNCTION FOO (NAMES) + + where NAMES is a comma-separated list of names, can be one or the + other. + + The only way to disambiguate that statement (short of mandating + free-form source or a short maximum length for name for external + procedures) is based on the context of the statement. + + In particular, the statement is known to be within an + already-started program unit (but not at the outer level of the + `CONTAINS' block), it is a type-declaration statement. + + Otherwise, the statement is a `FUNCTION' statement, in that it + begins a function program unit (external, or, within `CONTAINS', + nested). + + Weird READ + .......... + + The statement + + READ (N) + + is equivalent to either + + READ (UNIT=(N)) + + or + + READ (FMT=(N)) + + depending on which would be valid in context. + + Specifically, if `N' is type `INTEGER', `READ (FMT=(N))' would not + be valid, because parentheses may not be used around `N', whereas they + may around it in `READ (UNIT=(N))'. + + Further, if `N' is type `CHARACTER', the opposite is true--`READ + (UNIT=(N))' is not valid, but `READ (FMT=(N))' is. + + Strictly speaking, if anything follows + + READ (N) + + in the statement, whether the first lexeme after the close + parenthese is a comma could be used to disambiguate the two cases, + without looking at the type of `N', because the comma is required for + the `READ (FMT=(N))' interpretation and disallowed for the `READ + (UNIT=(N))' interpretation. + + However, in practice, many Fortran compilers allow the comma for the + `READ (UNIT=(N))' interpretation anyway (in that they generally allow a + leading comma before an I/O list in an I/O statement), and much code + takes advantage of this allowance. + + (This is quite a reasonable allowance, since the juxtaposition of a + comma-separated list immediately after an I/O control-specification + list, which is also comma-separated, without an intervening comma, + looks sufficiently "wrong" to programmers that they can't resist the + itch to insert the comma. `READ (I, J), K, L' simply looks cleaner than + `READ (I, J) K, L'.) + + So, type-based disambiguation is needed unless strict adherence to + the standard is always assumed, and we're not going to assume that. + +  + File: g77.info, Node: TBD (Transforming), Prev: Gotchas (Transforming), Up: Overview of Translation Process + + TBD (Transforming) + ------------------ + + Continue researching gotchas, designing the transformational process, + and implementing it. + + Specific issues to resolve: + + * Just where should (if it was implemented) `USE' processing take + place? + + This gets into the whole issue of how `g77' should handle the + concept of modules. I think GNAT already takes on this issue, but + don't know more than that. Jim Giles has written extensively on + `comp.lang.fortran' about his opinions on module handling, as have + others. Jim's views should be taken into account. + + Actually, Richard M. Stallman (RMS) also has written up some + guidelines for implementing such things, but I'm not sure where I + read them. Perhaps the old list. + + If someone could dig references to these up and get them to me, + that would be much appreciated! Even though modules are not on + the short-term list for implementation, it'd be helpful to know + _now_ how to avoid making them harder to implement them _later_. + + * Should the `g77' command become just a script that invokes all the + various preprocessing that might be needed, thus making it seem + slower than necessary for legacy code that people are unwilling to + convert, or should we provide a separate script for that, thus + encouraging people to convert their code once and for all? + + At least, a separate script to behave as old `g77' did, perhaps + named `g77old', might ease the transition, as might a + corresponding one that converts source codes named `g77oldnew'. + + These scripts would take all the pertinent options `g77' used to + take and run the appropriate filters, passing the results to `g77' + or just making new sources out of them (in a subdirectory, leaving + the user to do the dirty deed of moving or copying them over the + old sources). + + * Do other Fortran compilers provide a prefix syntax to govern the + treatment of backslashes in `CHARACTER' (or Hollerith) constants? + + Knowing what other compilers provide would help. + + * Is it okay to drop support for the `-fintrin-case-initcap', + `-fmatch-case-initcap', `-fsymbol-case-initcap', and + `-fcase-initcap' options? + + I've asked 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. + +  + File: g77.info, Node: Philosophy of Code Generation, Next: Two-pass Design, Prev: Overview of Translation Process, Up: Front End + + Philosophy of Code Generation + ============================= + + Don't poke the bear. + + The `g77' front end generates code via the `gcc' back end. + + The `gcc' back end (GBE) is a large, complex labyrinth of intricate + code written in a combination of the C language and specialized + languages internal to `gcc'. + + While the _code_ that implements the GBE is written in a combination + of languages, the GBE itself is, to the front end for a language like + Fortran, best viewed as a _compiler_ that compiles its own, unique, + language. + + The GBE's "source", then, is written in this language, which + consists primarily of a combination of calls to GBE functions and + "tree" nodes (which are, themselves, created by calling GBE functions). + + So, the `g77' generates code by, in effect, translating the Fortran + code it reads into a form "written" in the "language" of the `gcc' back + end. + + This language will heretofore be referred to as "GBEL", for GNU Back + End Language. + + GBEL is an evolving language, not fully specified in any published + form as of this writing. It offers many facilities, but its "core" + facilities are those that corresponding most directly to those needed + to support `gcc' (compiling code written in GNU C). + + The `g77' Fortran Front End (FFE) is designed and implemented to + navigate the currents and eddies of ongoing GBEL and `gcc' development + while also delivering on the potential of an integrated FFE (as + compared to using a converter like `f2c' and feeding the output into + `gcc'). + + Goals of the FFE's code-generation strategy include: + + * High likelihood of generation of correct code, or, failing that, + producing a fatal diagnostic or crashing. + + * Generation of highly optimized code, as directed by the user via + GBE-specific (versus `g77'-specific) constructs, such as + command-line options. + + * Fast overall (FFE plus GBE) compilation. + + * Preservation of source-level debugging information. + + The strategies historically, and currently, used by the FFE to + achieve these goals include: + + * Use of GBEL constructs that most faithfully encapsulate the + semantics of Fortran. + + * Avoidance of GBEL constructs that are so rarely used, or limited + to use in specialized situations not related to Fortran, that + their reliability and performance has not yet been established as + sufficient for use by the FFE. + + * Flexible design, to readily accommodate changes to specific + code-generation strategies, perhaps governed by command-line + options. + + "Don't poke the bear" somewhat summarizes the above strategies. The + GBE is the bear. The FFE is designed and implemented to avoid poking it + in ways that are likely to just annoy it. The FFE usually either + tackles it head-on, or avoids treating it in ways dissimilar to how the + `gcc' front end treats it. + + For example, the FFE uses the native array facility in the back end + instead of the lower-level pointer-arithmetic facility used by `gcc' + when compiling `f2c' output). Theoretically, this presents more + opportunities for optimization, faster compile times, and the + production of more faithful debugging information. These benefits were + not, however, immediately realized, mainly because `gcc' itself makes + little or no use of the native array facility. + + Complex arithmetic is a case study of the evolution of this strategy. + When originally implemented, the GBEL had just evolved its own native + complex-arithmetic facility, so the FFE took advantage of that. + + When porting `g77' to 64-bit systems, it was discovered that the GBE + didn't really implement its native complex-arithmetic facility properly. + + The short-term solution was to rewrite the FFE to instead use the + lower-level facilities that'd be used by `gcc'-compiled code (assuming + that code, itself, didn't use the native complex type provided, as an + extension, by `gcc'), since these were known to work, and, in any case, + if shown to not work, would likely be rapidly fixed (since they'd + likely not work for vanilla C code in similar circumstances). + + However, the rewrite accommodated the original, native approach as + well by offering a command-line option to select it over the emulated + approach. This allowed users, and especially GBE maintainers, to try + out fixes to complex-arithmetic support in the GBE while `g77' + continued to default to compiling more code correctly, albeit producing + (typically) slower executables. + + As of April 1999, it appeared that the last few bugs in the GBE's + support of its native complex-arithmetic facility 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, `COMMON' and `EQUIVALENCE' aggregates, and so on--involve + issues similar to those pertaining to complex arithmetic. + + So, it is possible that the history of how the FFE handled complex + arithmetic will be repeated, probably in modified form (and hopefully + over shorter timeframes), for some of these other facilities. + +  + File: g77.info, Node: Two-pass Design, Next: Challenges Posed, Prev: Philosophy of Code Generation, Up: Front End + + Two-pass Design + =============== + + The FFE does not tell the GBE anything about a program unit until + after the last statement in that unit has been parsed. (A program unit + is a Fortran concept that corresponds, in the C world, mostly closely + to functions definitions in ISO C. That is, a program unit in Fortran + is like a top-level function in C. Nested functions, found among the + extensions offered by GNU C, correspond roughly to Fortran's statement + functions.) + + So, while parsing the code in a program unit, the FFE saves up all + the information on statements, expressions, names, and so on, until it + has seen the last statement. + + At that point, the FFE revisits the saved information (in what + amounts to a second "pass" over the program unit) to perform the actual + translation of the program unit into GBEL, ultimating in the generation + of assembly code for it. + + Some lookahead is performed during this second pass, so the FFE + could be viewed as a "two-plus-pass" design. + + * Menu: + + * Two-pass Code:: + * Why Two Passes:: + +  File: g77.info, Node: Two-pass Code, Next: Why Two Passes, Up: Two-pass Design Two-pass Code *************** text you're reading now), `FOOEY' is the *** 751,1227 **** * LINKFAIL:: When linking `f771' fails. * Y2KBAD:: Use of non-Y2K-compliant intrinsic. -  - File: g77.info, Node: CMPAMBIG, Next: EXPIMP, Up: Diagnostics - - `CMPAMBIG' - ========== - - Ambiguous use of intrinsic INTRINSIC ... - - The type of the argument to the invocation of the INTRINSIC - intrinsic is a `COMPLEX' type other than `COMPLEX(KIND=1)'. Typically, - it is `COMPLEX(KIND=2)', also known as `DOUBLE COMPLEX'. - - The interpretation of this invocation depends on the particular - dialect of Fortran for which the code was written. Some dialects - convert the real part of the argument to `REAL(KIND=1)', thus losing - precision; other dialects, and Fortran 90, do no such conversion. - - So, GNU Fortran rejects such invocations except under certain - circumstances, to avoid making an incorrect assumption that results in - generating the wrong code. - - To determine the dialect of the program unit, perhaps even whether - that particular invocation is properly coded, determine how the result - of the intrinsic is used. - - The result of INTRINSIC is expected (by the original programmer) to - be `REAL(KIND=1)' (the non-Fortran-90 interpretation) if: - - * It is passed as an argument to a procedure that explicitly or - implicitly declares that argument `REAL(KIND=1)'. - - For example, a procedure with no `DOUBLE PRECISION' or `IMPLICIT - DOUBLE PRECISION' statement specifying the dummy argument - corresponding to an actual argument of `REAL(Z)', where `Z' is - declared `DOUBLE COMPLEX', strongly suggests that the programmer - expected `REAL(Z)' to return `REAL(KIND=1)' instead of - `REAL(KIND=2)'. - - * It is used in a context that would otherwise not include any - `REAL(KIND=2)' but where treating the INTRINSIC invocation as - `REAL(KIND=2)' would result in unnecessary promotions and - (typically) more expensive operations on the wider type. - - For example: - - DOUBLE COMPLEX Z - ... - R(1) = T * REAL(Z) - - The above example suggests the programmer expected the real part - of `Z' to be converted to `REAL(KIND=1)' before being multiplied - by `T' (presumed, along with `R' above, to be type `REAL(KIND=1)'). - - Otherwise, the conversion would have to be delayed until after the - multiplication, requiring not only an extra conversion (of `T' to - `REAL(KIND=2)'), but a (typically) more expensive multiplication - (a double-precision multiplication instead of a single-precision - one). - - The result of INTRINSIC is expected (by the original programmer) to - be `REAL(KIND=2)' (the Fortran 90 interpretation) if: - - * It is passed as an argument to a procedure that explicitly or - implicitly declares that argument `REAL(KIND=2)'. - - For example, a procedure specifying a `DOUBLE PRECISION' dummy - argument corresponding to an actual argument of `REAL(Z)', where - `Z' is declared `DOUBLE COMPLEX', strongly suggests that the - programmer expected `REAL(Z)' to return `REAL(KIND=2)' instead of - `REAL(KIND=1)'. - - * It is used in an expression context that includes other - `REAL(KIND=2)' operands, or is assigned to a `REAL(KIND=2)' - variable or array element. - - For example: - - DOUBLE COMPLEX Z - DOUBLE PRECISION R, T - ... - R(1) = T * REAL(Z) - - The above example suggests the programmer expected the real part - of `Z' to _not_ be converted to `REAL(KIND=1)' by the `REAL()' - intrinsic. - - Otherwise, the conversion would have to be immediately followed by - a conversion back to `REAL(KIND=2)', losing the original, full - precision of the real part of `Z', before being multiplied by `T'. - - Once you have determined whether a particular invocation of INTRINSIC - expects the Fortran 90 interpretation, you can: - - * Change it to `DBLE(EXPR)' (if INTRINSIC is `REAL') or - `DIMAG(EXPR)' (if INTRINSIC is `AIMAG') if it expected the Fortran - 90 interpretation. - - This assumes EXPR is `COMPLEX(KIND=2)'--if it is some other type, - such as `COMPLEX*32', you should use the appropriate intrinsic, - such as the one to convert to `REAL*16' (perhaps `DBLEQ()' in - place of `DBLE()', and `QIMAG()' in place of `DIMAG()'). - - * Change it to `REAL(INTRINSIC(EXPR))', otherwise. This converts to - `REAL(KIND=1)' in all working Fortran compilers. - - If you don't want to change the code, and you are certain that all - ambiguous invocations of INTRINSIC in the source file have the same - expectation regarding interpretation, you can: - - * Compile with the `g77' option `-ff90', to enable the Fortran 90 - interpretation. - - * Compile with the `g77' options `-fno-f90 -fugly-complex', to - enable the non-Fortran-90 interpretations. - - *Note REAL() and AIMAG() of Complex::, for more information on this - issue. - - Note: If the above suggestions don't produce enough evidence as to - whether a particular program expects the Fortran 90 interpretation of - this ambiguous invocation of INTRINSIC, there is one more thing you can - try. - - If you have access to most or all the compilers used on the program - to create successfully tested and deployed executables, read the - documentation for, and _also_ test out, each compiler to determine how - it treats the INTRINSIC intrinsic in this case. (If all the compilers - don't agree on an interpretation, there might be lurking bugs in the - deployed versions of the program.) - - The following sample program might help: - - PROGRAM JCB003 - C - C Written by James Craig Burley 1997-02-23. - C - C Determine how compilers handle non-standard REAL - C and AIMAG on DOUBLE COMPLEX operands. - C - DOUBLE COMPLEX Z - REAL R - Z = (3.3D0, 4.4D0) - R = Z - CALL DUMDUM(Z, R) - R = REAL(Z) - R - IF (R .NE. 0.) PRINT *, 'REAL() is Fortran 90' - IF (R .EQ. 0.) PRINT *, 'REAL() is not Fortran 90' - R = 4.4D0 - CALL DUMDUM(Z, R) - R = AIMAG(Z) - R - IF (R .NE. 0.) PRINT *, 'AIMAG() is Fortran 90' - IF (R .EQ. 0.) PRINT *, 'AIMAG() is not Fortran 90' - END - C - C Just to make sure compiler doesn't use naive flow - C analysis to optimize away careful work above, - C which might invalidate results.... - C - SUBROUTINE DUMDUM(Z, R) - DOUBLE COMPLEX Z - REAL R - END - - If the above program prints contradictory results on a particular - compiler, run away! - -  - File: g77.info, Node: EXPIMP, Next: INTGLOB, Prev: CMPAMBIG, Up: Diagnostics - - `EXPIMP' - ======== - - Intrinsic INTRINSIC referenced ... - - The INTRINSIC is explicitly declared in one program unit in the - source file and implicitly used as an intrinsic 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 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 `g77' recognizes the name as an intrinsic in both cases. - - After verifying that the program unit making implicit use of the - intrinsic is indeed written expecting the intrinsic, add an `INTRINSIC - INTRINSIC' statement to that program unit to prevent this warning. - - This and related warnings are disabled by using the `-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 `-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 - `g77'. - -  - File: g77.info, Node: INTGLOB, Next: LEX, Prev: EXPIMP, Up: Diagnostics - - `INTGLOB' - ========= - - Same name `INTRINSIC' given ... - - The name INTRINSIC is used for a global entity (a common 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 `g77' recognizes the name - as an intrinsic in the program unit that references the name, a - situation that would likely produce incorrect code. - - For example: - - INTEGER FUNCTION TIME() - ... - END - ... - PROGRAM SAMP - INTEGER TIME - PRINT *, 'Time is ', TIME() - END - - The above example defines a program unit named `TIME', but the - reference to `TIME' in the main program unit `SAMP' is normally treated - by `g77' as a reference to the intrinsic `TIME()' (unless a - command-line option that prevents such treatment has been specified). - - As a result, the program `SAMP' will _not_ invoke the `TIME' - function in the same source file. - - Since `g77' recognizes `libU77' procedures as intrinsics, and since - some existing code uses the same names for its own procedures as used - by some `libU77' procedures, this situation is expected to arise often - enough to make this sort of warning worth issuing. - - After verifying that the program unit making implicit use of the - intrinsic is indeed written expecting the intrinsic, add an `INTRINSIC - INTRINSIC' statement to that 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 - `g77'), add an `EXTERNAL INTRINSIC' statement to the program unit that - references the name to prevent this warning. - - This and related warnings are disabled by using the `-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 `-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 - `g77'. - -  - File: g77.info, Node: LEX, Next: GLOBALS, Prev: INTGLOB, Up: Diagnostics - - `LEX' - ===== - - Unrecognized character ... - Invalid first character ... - Line too long ... - Non-numeric character ... - Continuation indicator ... - Label at ... invalid with continuation line indicator ... - Character constant ... - Continuation line ... - Statement at ... begins with invalid token - - Although the diagnostics identify specific problems, they can be - produced when general problems such as the following occur: - - * The source file contains something other than Fortran code. - - If the code in the file does not look like many of the examples - elsewhere in this document, it might not be Fortran code. (Note - that Fortran code often is written in lower case letters, while - the examples in this document use upper case letters, for - stylistic reasons.) - - For example, if the file contains lots of strange-looking - characters, it might be APL source code; if it contains lots of - parentheses, it might be Lisp source code; if it contains lots of - bugs, it might be C++ source code. - - * The source file contains free-form Fortran code, but `-ffree-form' - was not specified on the command line to compile it. - - Free form is a newer form for Fortran code. The older, classic - form is called fixed form. - - Fixed-form code is visually fairly distinctive, because numerical - labels and comments are all that appear in the first five columns - of a line, the sixth column is reserved to denote continuation - lines, and actual statements start at or beyond column 7. Spaces - generally are not significant, so if you see statements such as - `REALX,Y' and `DO10I=1,100', you are looking at fixed-form code. - Comment lines are indicated by the letter `C' or the symbol `*' in - column 1. (Some code uses `!' or `/*' to begin in-line comments, - which many compilers support.) - - Free-form code is distinguished from fixed-form source primarily - by the fact that statements may start anywhere. (If lots of - statements start in columns 1 through 6, that's a strong indicator - of free-form source.) Consecutive keywords must be separated by - spaces, so `REALX,Y' is not valid, while `REAL X,Y' is. There are - no comment lines per se, but `!' starts a comment anywhere in a - line (other than within a character or Hollerith constant). - - *Note Source Form::, for more information. - - * The source file is in fixed form and has been edited without - sensitivity to the column requirements. - - Statements in fixed-form code must be entirely contained within - columns 7 through 72 on a given line. Starting them "early" is - more likely to result in diagnostics than finishing them "late", - though both kinds of errors are often caught at compile time. - - For example, if the following code fragment is edited by following - the commented instructions literally, the result, shown afterward, - would produce a diagnostic when compiled: - - C On XYZZY systems, remove "C" on next line: - C CALL XYZZY_RESET - - The result of editing the above line might be: - - C On XYZZY systems, remove "C" on next line: - CALL XYZZY_RESET - - However, that leaves the first `C' in the `CALL' statement in - column 6, making it a comment line, which is not really what the - author intended, and which is likely to result in one of the - above-listed diagnostics. - - _Replacing_ the `C' in column 1 with a space is the proper change - to make, to ensure the `CALL' keyword starts in or after column 7. - - Another common mistake like this is to forget that fixed-form - source lines are significant through only column 72, and that, - normally, any text beyond column 72 is ignored or is diagnosed at - compile time. - - *Note Source Form::, for more information. - - * The source file requires preprocessing, and the preprocessing is - not being specified at compile time. - - A source file containing lines beginning with `#define', - `#include', `#if', and so on is likely one that requires - preprocessing. - - If the file's suffix is `.f', `.for', or `.FOR', the file normally - will be compiled _without_ preprocessing by `g77'. - - Change the file's suffix from `.f' to `.F' (or, on systems with - case-insensitive file names, to `.fpp' or `.FPP'), from `.for' to - `.fpp', or from `.FOR' to `.FPP'. `g77' compiles files with such - names _with_ preprocessing. - - Or, learn how to use `gcc''s `-x' option to specify the language - `f77-cpp-input' for Fortran files that require preprocessing. - *Note gcc: (Using and Porting GNU CC)Overall Options. - - * The source file is preprocessed, and the results of preprocessing - result in syntactic errors that are not necessarily obvious to - someone examining the source file itself. - - Examples of errors resulting from preprocessor macro expansion - include exceeding the line-length limit, improperly starting, - terminating, or incorporating the apostrophe or double-quote in a - character constant, improperly forming a Hollerith constant, and - so on. - - *Note Options Controlling the Kind of Output: Overall Options, for - suggestions about how to use, and not use, preprocessing for - Fortran code. - -  - File: g77.info, Node: GLOBALS, Next: LINKFAIL, Prev: LEX, Up: Diagnostics - - `GLOBALS' - ========= - - Global name NAME defined at ... already defined... - Global name NAME at ... has different type... - Too many arguments passed to NAME at ... - Too few arguments passed to NAME at ... - Argument #N of NAME is ... - - These messages all identify disagreements about the global procedure - named NAME among different program units (usually including NAME - itself). - - Whether a particular disagreement is reported as a warning or an - error can depend on the relative order of the disagreeing portions of - the source file. - - Disagreements between a procedure invocation and the _subsequent_ - procedure itself are, usually, diagnosed as errors when the procedure - itself _precedes_ the invocation. Other disagreements are diagnosed - via warnings. - - This distinction, between warnings and errors, is due primarily to - the present tendency of the `gcc' back end to inline only those - procedure invocations that are _preceded_ by the corresponding - procedure definitions. If the `gcc' back end is changed to inline - "forward references", in which invocations precede definitions, the - `g77' front end will be changed to treat both orderings as errors, - accordingly. - - The sorts of disagreements that are diagnosed by `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; and the type of each argument. - - Disagreements regarding global names among program units in a - Fortran program _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 `-fno-globals' - option. - - The `-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 - `-Wno-globals' option as well as `-fno-globals' suppresses all of these - diagnostics. (`-Wno-globals' by itself disables only the warnings, not - the errors.) - - After using `-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 is not as portable as it could be. - In particular, the code might appear to work on a particular system, - but have bugs that affect the reliability of the data without - exhibiting any other outward manifestations of the bugs. - -  - File: g77.info, Node: LINKFAIL, Next: Y2KBAD, Prev: GLOBALS, Up: Diagnostics - - `LINKFAIL' - ========== - - On AIX 4.1, `g77' might not build with the native (non-GNU) tools due - to a linker bug in coping with the `-bbigtoc' option which leads to a - `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 `-mminimal-toc' might solve this problem, e.g. by - adding - BOOT_CFLAGS='-mminimal-toc -O2 -g' - to the `make bootstrap' command line. - -  - File: g77.info, Node: Y2KBAD, Prev: LINKFAIL, Up: Diagnostics - - `Y2KBAD' - ======== - - Intrinsic `NAME', invoked at (^), known to be non-Y2K-compliant... - - This diagnostic indicates that the specific intrinsic invoked by the - name NAME is known to have an interface that is not Year-2000 (Y2K) - compliant. - - *Note Year 2000 (Y2K) Problems::. - --- 1207,1209 ---- diff -Nrc3pad gcc-3.0.4/gcc/f/g77.info-2 gcc-3.1/gcc/f/g77.info-2 *** gcc-3.0.4/gcc/f/g77.info-2 Wed Feb 20 19:57:12 2002 --- gcc-3.1/gcc/f/g77.info-2 Wed May 15 02:45:53 2002 *************** *** 1,16 **** ! This is g77.info, produced by makeinfo version 4.0b from g77.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * g77: (g77). The GNU Fortran compiler. END-INFO-DIR-ENTRY This file documents the use and the internals of the GNU Fortran ! (`g77') compiler. It corresponds to the GCC-3.0 version of `g77'. Published by the Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA ! Copyright (C) 1995,1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document --- 1,16 ---- ! This is g77.info, produced by makeinfo version 4.2 from g77.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * g77: (g77). The GNU Fortran compiler. END-INFO-DIR-ENTRY This file documents the use and the internals of the GNU Fortran ! (`g77') compiler. It corresponds to the GCC-3.1 version of `g77'. Published by the Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA ! Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document *************** see *Note Changes::. *** 67,75 **** strictly conforming ANSI FORTRAN 77--and this is probably everyone--you should see *Note Language::. - If you don't already have `g77' installed on your system, you must - see *Note Installation::. - If you run into trouble getting Fortran code to compile, link, run, or work properly, you might find answers if you see *Note Debugging and Interfacing::, see *Note Collected Fortran Wisdom::, and see *Note --- 67,72 ---- *************** files and accepts Fortran-specific comma *** 301,309 **** command-line options that are designed to cater to Fortran users but apply to other languages as well. ! *Note Compile C; C++; or Objective-C: (gcc)G++ and GCC, for ! information on the way different languages are handled by the GNU CC ! compiler (`gcc'). Also provided as part of GNU Fortran is the `g77' command. The `g77' command is designed to make compiling and linking Fortran --- 298,306 ---- command-line options that are designed to cater to Fortran users but apply to other languages as well. ! *Note Compile C; C++; Objective-C; Ada; Fortran; or Java: (gcc)G++ ! and GCC, for information on the way different languages are handled by ! the GNU CC compiler (`gcc'). Also provided as part of GNU Fortran is the `g77' command. The `g77' command is designed to make compiling and linking Fortran *************** GNU Fortran Command Options *** 321,334 **** *************************** The `g77' command supports all the options supported by the `gcc' ! command. *Note GNU CC Command Options: (gcc)Invoking GCC, for ! information on the non-Fortran-specific aspects of the `gcc' command ! (and, therefore, the `g77' command). All `gcc' and `g77' options are accepted both by `g77' and by `gcc' (as well as any other drivers built at the same time, such as `g++'), since adding `g77' to the `gcc' distribution enables acceptance of ! `g77'-specific options by all of the relevant drivers. In some cases, options have positive and negative forms; the negative form of `-ffoo' would be `-fno-foo'. This manual documents --- 318,331 ---- *************************** The `g77' command supports all the options supported by the `gcc' ! command. *Note GCC Command Options: (gcc)Invoking GCC, for information ! on the non-Fortran-specific aspects of the `gcc' command (and, ! therefore, the `g77' command). All `gcc' and `g77' options are accepted both by `g77' and by `gcc' (as well as any other drivers built at the same time, such as `g++'), since adding `g77' to the `gcc' distribution enables acceptance of ! `g77' options by all of the relevant drivers. In some cases, options have positive and negative forms; the negative form of `-ffoo' would be `-fno-foo'. This manual documents *************** _Shorthand Options_ *** 374,415 **** _Fortran Language Options_ *Note Options Controlling Fortran Dialect: Fortran Dialect Options. ! -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-N -ffixed-line-length-none _Warning Options_ *Note Options to Request or Suppress Warnings: Warning Options. ! -fsyntax-only -pedantic -pedantic-errors -fpedantic ! -w -Wno-globals -Wimplicit -Wunused -Wuninitialized ! -Wall -Wsurprising -Werror -W _Debugging Options_ --- 371,412 ---- _Fortran Language Options_ *Note Options Controlling Fortran Dialect: Fortran Dialect Options. ! -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-N -ffixed-line-length-none _Warning Options_ *Note Options to Request or Suppress Warnings: Warning Options. ! -fsyntax-only -pedantic -pedantic-errors -fpedantic ! -w -Wno-globals -Wimplicit -Wunused -Wuninitialized ! -Wall -Wsurprising -Werror -W _Debugging Options_ *************** _Debugging Options_ *** 418,430 **** _Optimization Options_ *Note Options that Control Optimization: Optimize Options. ! -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 _Directory Options_ --- 415,428 ---- _Optimization Options_ *Note Options that Control Optimization: Optimize Options. ! -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 _Directory Options_ *************** _Directory Options_ *** 433,447 **** _Code Generation Options_ *Note Options for Code Generation Conventions: Code Gen Options. ! -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 * Menu: --- 431,445 ---- _Code Generation Options_ *Note Options for Code Generation Conventions: Code Gen Options. ! -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 * Menu: *************** those specified as input) into an execut *** 478,486 **** 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. *Note gcc: (Using and ! Porting GNU CC)Overall Options, for information on suffixes recognized ! by GNU CC. `FILE.f' --- 476,484 ---- 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. *Note Options Controlling ! the Kind of Output: (gcc)Overall Options, for information on suffixes ! recognized by GNU CC. `FILE.f' *************** by GNU CC. *** 511,519 **** Ratfor source code, which must be preprocessed by the `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 `g77', is at `ftp://members.aol.com/n8tm/rat7.uue' ! (of uncertain copyright status). Another, public domain version ! in C is at `http://sepwww.stanford.edu/sep/prof/ratfor.shar.2'. UNIX users typically use the `FILE.f' and `FILE.F' nomenclature. Users of other operating systems, especially those that cannot --- 509,517 ---- Ratfor source code, which must be preprocessed by the `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 `g77' is at `ftp://members.aol.com/n8tm/rat7.uue' (of ! uncertain copyright status). Another, public domain version in C ! is at `http://sepwww.stanford.edu/sep/prof/ratfor.shar.2'. UNIX users typically use the `FILE.f' and `FILE.F' nomenclature. Users of other operating systems, especially those that cannot *************** anything that `cpp' sees as an untermina *** 564,577 **** by the `g77' and `gcc' commands in a GNU Fortran installation: `-fversion' ! Ensure that the `g77'-specific version of the compiler phase is ! reported, if run, and, starting in `egcs' version 1.1, that ! internal consistency checks in the `f771' program are run. This option is supplied automatically when `-v' or `--verbose' is specified as a command-line option for `g77' or `gcc' and when the resulting commands compile Fortran source files. `-fset-g77-defaults' _Version info:_ This option was obsolete as of `egcs' version 1.1. The effect is instead achieved by the `lang_init_options' routine --- 562,578 ---- by the `g77' and `gcc' commands in a GNU Fortran installation: `-fversion' ! Ensure that the `g77' version of the compiler phase is reported, ! if run, and, starting in `egcs' version 1.1, that internal ! consistency checks in the `f771' program are run. This option is supplied automatically when `-v' or `--verbose' is specified as a command-line option for `g77' or `gcc' and when the resulting commands compile Fortran source files. + In GCC 3.1, this is changed back to the behaviour `gcc' displays + for `.c' files. + `-fset-g77-defaults' _Version info:_ This option was obsolete as of `egcs' version 1.1. The effect is instead achieved by the `lang_init_options' routine *************** by the `g77' and `gcc' commands in a GNU *** 588,594 **** Also, developers who run `f771' directly might want to specify it by hand to get the same defaults as they would running `f771' via ! `g77' or `gcc'. However, such developers should, after linking a new `f771' executable, invoke it without this option once, e.g. via `./f771 -quiet < /dev/null', to ensure that they have not introduced any internal inconsistencies (such as in the table of --- 589,595 ---- Also, developers who run `f771' directly might want to specify it by hand to get the same defaults as they would running `f771' via ! `g77' or `gcc' However, such developers should, after linking a new `f771' executable, invoke it without this option once, e.g. via `./f771 -quiet < /dev/null', to ensure that they have not introduced any internal inconsistencies (such as in the table of *************** by the `g77' and `gcc' commands in a GNU *** 598,604 **** `-fno-silent' Print (to `stderr') the names of the program units as they are compiled, in a form similar to that used by popular UNIX `f77' ! implementations and `f2c'. *Note Options Controlling the Kind of Output: (gcc)Overall Options, for information on more options that control the overall operation of --- 599,605 ---- `-fno-silent' Print (to `stderr') the names of the program units as they are compiled, in a form similar to that used by popular UNIX `f77' ! implementations and `f2c' *Note Options Controlling the Kind of Output: (gcc)Overall Options, for information on more options that control the overall operation of *************** accepted by the compiler: *** 661,667 **** `-fno-f77' The `-fno-f77' option is _not_ the inverse of `-ff77'. It specifies that the program is not written in idiomatic UNIX ! FORTRAN 77 or `f2c', but in a more widely portable dialect. `-fno-f77' is the same as `-fno-backslash'. The meaning of this option is likely to be refined as future --- 662,668 ---- `-fno-f77' The `-fno-f77' option is _not_ the inverse of `-ff77'. It specifies that the program is not written in idiomatic UNIX ! FORTRAN 77 or `f2c' but in a more widely portable dialect. `-fno-f77' is the same as `-fno-backslash'. The meaning of this option is likely to be refined as future *************** compiler accepts: *** 720,726 **** Note that `g77' implements a fairly general form of backslash processing that is incompatible with the narrower forms supported by some other compilers. For example, `'A\003B'' is a ! three-character string in `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. --- 721,727 ---- Note that `g77' implements a fairly general form of backslash processing that is incompatible with the narrower forms supported by some other compilers. For example, `'A\003B'' is a ! three-character string in `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. *************** GNU Fortran: *** 1119,1125 **** The `-Wunused' and `-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 `g77', some might be added to the list enabled by `-Wall'.) The remaining `-W...' options are not implied by `-Wall' because they warn about constructions that we consider reasonable to use, on --- 1120,1126 ---- The `-Wunused' and `-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 `g77' some might be added to the list enabled by `-Wall'.) The remaining `-W...' options are not implied by `-Wall' because they warn about constructions that we consider reasonable to use, on *************** occasion, in clean programs. *** 1135,1141 **** * Expressions having two arithmetic operators in a row, such as `X*-Y'. Such a construct is nonstandard, and can produce unexpected results in more complicated situations such as ! `X**-Y*Z'. `g77', along with many other compilers, interprets this example differently than many programmers, and a few other compilers. Specifically, `g77' interprets `X**-Y*Z' as `(X**(-Y))*Z', while others might think it should be --- 1136,1142 ---- * Expressions having two arithmetic operators in a row, such as `X*-Y'. Such a construct is nonstandard, and can produce unexpected results in more complicated situations such as ! `X**-Y*Z'. `g77' along with many other compilers, interprets this example differently than many programmers, and a few other compilers. Specifically, `g77' interprets `X**-Y*Z' as `(X**(-Y))*Z', while others might think it should be *************** occasion, in clean programs. *** 1189,1195 **** `-W' Turns on "extra warnings" and, if optimization is specified via `-O', the `-Wuninitialized' option. (This might change in future ! versions of `g77'.) "Extra warnings" are issued for: --- 1190,1196 ---- `-W' Turns on "extra warnings" and, if optimization is specified via `-O', the `-Wuninitialized' option. (This might change in future ! versions of `g77' "Extra warnings" are issued for: *************** occasion, in clean programs. *** 1200,1207 **** for certain configurations). *Note Options to Request or Suppress Warnings: (gcc)Warning Options, ! for information on more options offered by the GBE shared by `g77', ! `gcc', and other GNU compilers. Some of these have no effect when compiling programs written in Fortran: --- 1201,1208 ---- for certain configurations). *Note Options to Request or Suppress Warnings: (gcc)Warning Options, ! for information on more options offered by the GBE shared by `g77' ! `gcc' and other GNU compilers. Some of these have no effect when compiling programs written in Fortran: diff -Nrc3pad gcc-3.0.4/gcc/f/g77.info-20 gcc-3.1/gcc/f/g77.info-20 *** gcc-3.0.4/gcc/f/g77.info-20 Wed Feb 20 19:57:12 2002 --- gcc-3.1/gcc/f/g77.info-20 Wed May 15 02:45:53 2002 *************** *** 1,16 **** ! This is g77.info, produced by makeinfo version 4.0b from g77.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * g77: (g77). The GNU Fortran compiler. END-INFO-DIR-ENTRY This file documents the use and the internals of the GNU Fortran ! (`g77') compiler. It corresponds to the GCC-3.0 version of `g77'. Published by the Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA ! Copyright (C) 1995,1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document --- 1,16 ---- ! This is g77.info, produced by makeinfo version 4.2 from g77.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * g77: (g77). The GNU Fortran compiler. END-INFO-DIR-ENTRY This file documents the use and the internals of the GNU Fortran ! (`g77') compiler. It corresponds to the GCC-3.1 version of `g77'. Published by the Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA ! Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document *************** a first pass at translating `g77-0.5.16/ *** 36,2273 **** Craig by David Ronis ().  ! File: g77.info, Node: Index, Prev: Diagnostics, Up: Top ! Index ! ***** ! * Menu: ! * ! <1>: LEX. ! * ! <2>: Exclamation Point. ! * ! <3>: Trailing Comment. ! * ! <4>: Character Set. ! * !: Statements Comments Lines. ! * ": Character Set. ! * # <1>: Cpp-style directives. ! * #: Character Set. ! * #define: Overall Options. ! * #if: Overall Options. ! * #include: Overall Options. ! * #include directive: Bug Reporting. ! * $: Dollar Signs. ! * %: Character Set. ! * %DESCR() construct: %DESCR(). ! * %LOC() construct: %LOC(). ! * %REF() construct: %REF(). ! * %VAL() construct: %VAL(). ! * &: Character Set. ! * *: LEX. ! * *N notation <1>: Compiler Types. ! * *N notation: Star Notation. ! * --driver option <1>: Changes. ! * --driver option: News. ! * -falias-check option <1>: Aliasing Assumed To Work. ! * -falias-check option: Code Gen Options. ! * -fargument-alias option <1>: Aliasing Assumed To Work. ! * -fargument-alias option: Code Gen Options. ! * -fargument-noalias option <1>: Aliasing Assumed To Work. ! * -fargument-noalias option: Code Gen Options. ! * -fbadu77-intrinsics-delete option: Fortran Dialect Options. ! * -fbadu77-intrinsics-disable option: Fortran Dialect Options. ! * -fbadu77-intrinsics-enable option: Fortran Dialect Options. ! * -fbadu77-intrinsics-hide option: Fortran Dialect Options. ! * -fbounds-check option: Code Gen Options. ! * -fcaller-saves option: Optimize Options. ! * -fcase-initcap option: Fortran Dialect Options. ! * -fcase-lower option: Fortran Dialect Options. ! * -fcase-preserve option: Fortran Dialect Options. ! * -fcase-strict-lower option: Fortran Dialect Options. ! * -fcase-strict-upper option: Fortran Dialect Options. ! * -fcase-upper option: Fortran Dialect Options. ! * -fdebug-kludge option: Code Gen Options. ! * -fdelayed-branch option: Optimize Options. ! * -fdollar-ok option: Fortran Dialect Options. ! * -femulate-complex option: Code Gen Options. ! * -fexpensive-optimizations option: Optimize Options. ! * -ff2c-intrinsics-delete option: Fortran Dialect Options. ! * -ff2c-intrinsics-disable option: Fortran Dialect Options. ! * -ff2c-intrinsics-enable option: Fortran Dialect Options. ! * -ff2c-intrinsics-hide option: Fortran Dialect Options. ! * -ff2c-library option: Code Gen Options. ! * -ff66 option: Shorthand Options. ! * -ff77 option: Shorthand Options. ! * -ff90: Fortran 90 Features. ! * -ff90 option: Fortran Dialect Options. ! * -ff90-intrinsics-delete option: Fortran Dialect Options. ! * -ff90-intrinsics-disable option: Fortran Dialect Options. ! * -ff90-intrinsics-enable option: Fortran Dialect Options. ! * -ff90-intrinsics-hide option: Fortran Dialect Options. ! * -ffast-math option: Optimize Options. ! * -ffixed-line-length-N option: Fortran Dialect Options. ! * -fflatten-arrays option: Code Gen Options. ! * -ffloat-store option: Optimize Options. ! * -fforce-addr option: Optimize Options. ! * -fforce-mem option: Optimize Options. ! * -ffortran-bounds-check option: Code Gen Options. ! * -ffree-form: Fortran 90 Features. ! * -ffree-form option: Fortran Dialect Options. ! * -fgnu-intrinsics-delete option: Fortran Dialect Options. ! * -fgnu-intrinsics-disable option: Fortran Dialect Options. ! * -fgnu-intrinsics-enable option: Fortran Dialect Options. ! * -fgnu-intrinsics-hide option: Fortran Dialect Options. ! * -fGROUP-intrinsics-hide option: Overly Convenient Options. ! * -finit-local-zero option <1>: Overly Convenient Options. ! * -finit-local-zero option: Code Gen Options. ! * -fintrin-case-any option: Fortran Dialect Options. ! * -fintrin-case-initcap option: Fortran Dialect Options. ! * -fintrin-case-lower option: Fortran Dialect Options. ! * -fintrin-case-upper option: Fortran Dialect Options. ! * -fmatch-case-any option: Fortran Dialect Options. ! * -fmatch-case-initcap option: Fortran Dialect Options. ! * -fmatch-case-lower option: Fortran Dialect Options. ! * -fmatch-case-upper option: Fortran Dialect Options. ! * -fmil-intrinsics-delete option: Fortran Dialect Options. ! * -fmil-intrinsics-disable option: Fortran Dialect Options. ! * -fmil-intrinsics-enable option: Fortran Dialect Options. ! * -fmil-intrinsics-hide option: Fortran Dialect Options. ! * -fno-argument-noalias-global option <1>: Aliasing Assumed To Work. ! * -fno-argument-noalias-global option: Code Gen Options. ! * -fno-automatic option <1>: Overly Convenient Options. ! * -fno-automatic option: Code Gen Options. ! * -fno-backslash option: Fortran Dialect Options. ! * -fno-common option: Code Gen Options. ! * -fno-f2c option <1>: Avoid f2c Compatibility. ! * -fno-f2c option: Code Gen Options. ! * -fno-f77 option: Shorthand Options. ! * -fno-fixed-form option: Fortran Dialect Options. ! * -fno-globals option: Code Gen Options. ! * -fno-ident option: Code Gen Options. ! * -fno-inline option: Optimize Options. ! * -fno-move-all-movables option: Optimize Options. ! * -fno-reduce-all-givs option: Optimize Options. ! * -fno-rerun-loop-opt option: Optimize Options. ! * -fno-second-underscore: f2c Skeletons and Prototypes. ! * -fno-second-underscore option <1>: Names. ! * -fno-second-underscore option: Code Gen Options. ! * -fno-silent option: Overall Options. ! * -fno-ugly option: Shorthand Options. ! * -fno-ugly-args option: Fortran Dialect Options. ! * -fno-ugly-init option: Fortran Dialect Options. ! * -fno-underscoring option <1>: Names. ! * -fno-underscoring option: Code Gen Options. ! * -fonetrip option: Fortran Dialect Options. ! * -fpack-struct option: Code Gen Options. ! * -fpcc-struct-return option: Code Gen Options. ! * -fpedantic option: Warning Options. ! * -fPIC option: News. ! * -freg-struct-return option: Code Gen Options. ! * -frerun-cse-after-loop option: Optimize Options. ! * -fschedule-insns option: Optimize Options. ! * -fschedule-insns2 option: Optimize Options. ! * -fset-g77-defaults option: Overall Options. ! * -fshort-double option: Code Gen Options. ! * -fsource-case-lower option: Fortran Dialect Options. ! * -fsource-case-preserve option: Fortran Dialect Options. ! * -fsource-case-upper option: Fortran Dialect Options. ! * -fstrength-reduce option: Optimize Options. ! * -fsymbol-case-any option: Fortran Dialect Options. ! * -fsymbol-case-initcap option: Fortran Dialect Options. ! * -fsymbol-case-lower option: Fortran Dialect Options. ! * -fsymbol-case-upper option: Fortran Dialect Options. ! * -fsyntax-only option: Warning Options. ! * -ftypeless-boz option: Fortran Dialect Options. ! * -fugly option: Shorthand Options. ! * -fugly-assign option: Fortran Dialect Options. ! * -fugly-assumed option: Fortran Dialect Options. ! * -fugly-comma option: Fortran Dialect Options. ! * -fugly-complex option: Fortran Dialect Options. ! * -fugly-logint option: Fortran Dialect Options. ! * -funix-intrinsics-delete option: Fortran Dialect Options. ! * -funix-intrinsics-disable option: Fortran Dialect Options. ! * -funix-intrinsics-enable option: Fortran Dialect Options. ! * -funix-intrinsics-hide option: Fortran Dialect Options. ! * -funroll-all-loops option: Optimize Options. ! * -funroll-loops option: Optimize Options. ! * -fversion option: Overall Options. ! * -fvxt option: Fortran Dialect Options. ! * -fvxt-intrinsics-delete option: Fortran Dialect Options. ! * -fvxt-intrinsics-disable option: Fortran Dialect Options. ! * -fvxt-intrinsics-enable option: Fortran Dialect Options. ! * -fvxt-intrinsics-hide option: Fortran Dialect Options. ! * -fzeros option: Code Gen Options. ! * -g option: Debugging Options. ! * -I- option: Directory Options. ! * -i8: Increasing Precision/Range. ! * -Idir option: Directory Options. ! * -malign-double <1>: Changes. ! * -malign-double: News. ! * -malign-double option <1>: Aligned Data. ! * -malign-double option: Optimize Options. ! * -Nl option: Compiler Limits. ! * -Nx option: Compiler Limits. ! * -O2: News. ! * -pedantic option: Warning Options. ! * -pedantic-errors option: Warning Options. ! * -qrealsize=8: Increasing Precision/Range. ! * -r8: Increasing Precision/Range. ! * -u option: Warning Options. ! * -v option: G77 and GCC. ! * -W option: Warning Options. ! * -w option: Warning Options. ! * -Waggregate-return option: Warning Options. ! * -Wall option: Warning Options. ! * -Wcomment option: Warning Options. ! * -Wconversion option: Warning Options. ! * -Werror option: Warning Options. ! * -Wformat option: Warning Options. ! * -Wid-clash-LEN option: Warning Options. ! * -Wimplicit option: Warning Options. ! * -Wlarger-than-LEN option: Warning Options. ! * -Wno-globals option: Warning Options. ! * -Wparentheses option: Warning Options. ! * -Wredundant-decls option: Warning Options. ! * -Wshadow option: Warning Options. ! * -Wsurprising option: Warning Options. ! * -Wswitch option: Warning Options. ! * -Wtraditional option: Warning Options. ! * -Wuninitialized option: Warning Options. ! * -Wunused option: Warning Options. ! * -x f77-cpp-input option: LEX. ! * .EQV., with integer operands: Equivalence Versus Equality. ! * .F filename suffix: Overall Options. ! * .f filename suffix: Overall Options. ! * .FOR filename suffix: Overall Options. ! * .for filename suffix: Overall Options. ! * .FPP filename suffix: Overall Options. ! * .fpp filename suffix: Overall Options. ! * .gdbinit: Main Program Unit. ! * .r filename suffix: Overall Options. ! * /* <1>: Trailing Comment. ! * /*: Overall Options. ! * /WARNINGS=DECLARATIONS switch: Warning Options. ! * 80-bit spills: Floating-point Errors. ! * ; <1>: Character Set. ! * ;: Statements Comments Lines. ! * <: Character Set. ! * <> edit descriptor: I/O. ! * >: Character Set. ! * ?: Character Set. ! * \: Character Set. ! * _: Character Set. ! * Abort intrinsic: Abort Intrinsic. ! * Abs intrinsic: Abs Intrinsic. ! * ACCEPT statement: TYPE and ACCEPT I/O Statements. ! * Access intrinsic: Access Intrinsic. ! * AChar intrinsic: AChar Intrinsic. ! * ACos intrinsic: ACos Intrinsic. ! * ACosD intrinsic: ACosD Intrinsic. ! * adding options: Adding Options. ! * adjustable arrays: Adjustable Arrays. ! * AdjustL intrinsic: AdjustL Intrinsic. ! * AdjustR intrinsic: AdjustR Intrinsic. ! * AImag intrinsic <1>: AImag Intrinsic. ! * AImag intrinsic: REAL() and AIMAG() of Complex. ! * AIMax0 intrinsic: AIMax0 Intrinsic. ! * AIMin0 intrinsic: AIMin0 Intrinsic. ! * AInt intrinsic: AInt Intrinsic. ! * AJMax0 intrinsic: AJMax0 Intrinsic. ! * AJMin0 intrinsic: AJMin0 Intrinsic. ! * Alarm intrinsic: Alarm Intrinsic. ! * aliasing <1>: Known Bugs. ! * aliasing: Aliasing Assumed To Work. ! * aligned data: Aligned Data. ! * aligned stack: Aligned Data. ! * alignment <1>: Aligned Data. ! * alignment <2>: Changes. ! * alignment: News. ! * alignment testing: Aligned Data. ! * All intrinsic: All Intrinsic. ! * all warnings: Warning Options. ! * Allocated intrinsic: Allocated Intrinsic. ! * ALog intrinsic: ALog Intrinsic. ! * ALog10 intrinsic: ALog10 Intrinsic. ! * Alpha, support: Known Bugs. ! * alternate entry points: Alternate Entry Points. ! * alternate returns: Alternate Returns. ! * ALWAYS_FLUSH: Output Assumed To Flush. ! * AMax0 intrinsic: AMax0 Intrinsic. ! * AMax1 intrinsic: AMax1 Intrinsic. ! * AMin0 intrinsic: AMin0 Intrinsic. ! * AMin1 intrinsic: AMin1 Intrinsic. ! * AMod intrinsic: AMod Intrinsic. ! * ampersand: Character Set. ! * ampersand continuation line: Ampersands. ! * And intrinsic <1>: Bit Operations on Floating-point Data. ! * And intrinsic: And Intrinsic. ! * ANInt intrinsic: ANInt Intrinsic. ! * ANS carriage control: OPEN CLOSE and INQUIRE Keywords. ! * ANSI FORTRAN 77 standard: Language. ! * ANSI FORTRAN 77 support: Standard Support. ! * anti-aliasing: Aliasing Assumed To Work. ! * Any intrinsic: Any Intrinsic. ! * arguments, null: Ugly Null Arguments. ! * arguments, omitting: Ugly Null Arguments. ! * arguments, unused <1>: Unused Arguments. ! * arguments, unused: Warning Options. ! * array bounds checking: Code Gen Options. ! * array bounds, adjustable: Array Bounds Expressions. ! * array elements, in adjustable array bounds: Array Bounds Expressions. ! * array ordering: Arrays. ! * array performance: Code Gen Options. ! * array size: Array Size. ! * arrays: Arrays. ! * arrays, adjustable: Adjustable Arrays. ! * arrays, assumed-size: Ugly Assumed-Size Arrays. ! * arrays, automatic <1>: Large Automatic Arrays. ! * arrays, automatic <2>: Stack Overflow. ! * arrays, automatic <3>: Overly Convenient Options. ! * arrays, automatic: Adjustable Arrays. ! * arrays, dimensioning <1>: Adjustable Arrays. ! * arrays, dimensioning: Array Size. ! * arrays, flattening: Code Gen Options. ! * as command: What is GNU Fortran?. ! * ASin intrinsic: ASin Intrinsic. ! * ASinD intrinsic: ASinD Intrinsic. ! * assembler: What is GNU Fortran?. ! * assembly code: What is GNU Fortran?. ! * assembly code, invalid: Bug Criteria. ! * ASSIGN statement <1>: Assigned Statement Labels. ! * ASSIGN statement: Ugly Assigned Labels. ! * assigned labels: Ugly Assigned Labels. ! * assigned statement labels: Assigned Statement Labels. ! * Associated intrinsic: Associated Intrinsic. ! * association, storage: Aliasing Assumed To Work. ! * assumed-size arrays: Ugly Assumed-Size Arrays. ! * asterisk: LEX. ! * ATan intrinsic: ATan Intrinsic. ! * ATan2 intrinsic: ATan2 Intrinsic. ! * ATan2D intrinsic: ATan2D Intrinsic. ! * ATanD intrinsic: ATanD Intrinsic. ! * automatic arrays <1>: Large Automatic Arrays. ! * automatic arrays <2>: Stack Overflow. ! * automatic arrays <3>: Overly Convenient Options. ! * automatic arrays: Adjustable Arrays. ! * AUTOMATIC statement: AUTOMATIC Statement. ! * automatic variables: AUTOMATIC Statement. ! * back end, gcc <1>: Philosophy of Code Generation. ! * back end, gcc: What is GNU Fortran?. ! * backslash <1>: Backslash in Constants. ! * backslash <2>: Character Set. ! * backslash: Fortran Dialect Options. ! * backtrace for bug reports: Bug Reporting. ! * badu77 intrinsics: Fortran Dialect Options. ! * badu77 intrinsics group: Intrinsic Groups. ! * basic concepts: What is GNU Fortran?. ! * Bear-poking: Philosophy of Code Generation. ! * beginners: Getting Started. ! * BesJ0 intrinsic: BesJ0 Intrinsic. ! * BesJ1 intrinsic: BesJ1 Intrinsic. ! * BesJN intrinsic: BesJN Intrinsic. ! * BesY0 intrinsic: BesY0 Intrinsic. ! * BesY1 intrinsic: BesY1 Intrinsic. ! * BesYN intrinsic: BesYN Intrinsic. ! * binary data: Portable Unformatted Files. ! * Bit_Size intrinsic: Bit_Size Intrinsic. ! * BITest intrinsic: BITest Intrinsic. ! * BJTest intrinsic: BJTest Intrinsic. ! * blank <1>: Lines. ! * blank: Character Set. ! * block data: Multiple Definitions of External Names. ! * block data and libraries: Block Data and Libraries. ! * BLOCK DATA statement <1>: Multiple Definitions of External Names. ! * BLOCK DATA statement: Block Data and Libraries. ! * bounds checking: Code Gen Options. ! * BTest intrinsic: BTest Intrinsic. ! * bug criteria: Bug Criteria. ! * bug report mailing lists: Bug Lists. ! * bugs: Bugs. ! * bugs, finding: What is GNU Fortran?. ! * bugs, known: Trouble. ! * bus error <1>: Strange Behavior at Run Time. ! * bus error: NeXTStep Problems. ! * but-bugs: But-bugs. ! * byte ordering: Portable Unformatted Files. ! * C library: Strange Behavior at Run Time. ! * C preprocessor: Overall Options. ! * C routines calling Fortran: Debugging and Interfacing. ! * C++: C++ Considerations. ! * C++, linking with: Interoperating with C and C++. ! * C, linking with: Interoperating with C and C++. ! * CAbs intrinsic: CAbs Intrinsic. ! * calling C routines: Debugging and Interfacing. ! * card image: Fortran Dialect Options. ! * carriage control: OPEN CLOSE and INQUIRE Keywords. ! * carriage returns: Carriage Returns. ! * case sensitivity: Case Sensitivity. ! * cc1 program: What is GNU Fortran?. ! * cc1plus program: What is GNU Fortran?. ! * CCos intrinsic: CCos Intrinsic. ! * CDAbs intrinsic: CDAbs Intrinsic. ! * CDCos intrinsic: CDCos Intrinsic. ! * CDExp intrinsic: CDExp Intrinsic. ! * CDLog intrinsic: CDLog Intrinsic. ! * CDSin intrinsic: CDSin Intrinsic. ! * CDSqRt intrinsic: CDSqRt Intrinsic. ! * Ceiling intrinsic: Ceiling Intrinsic. ! * CExp intrinsic: CExp Intrinsic. ! * cfortran.h: C Interfacing Tools. ! * changes, user-visible: Changes. ! * Char intrinsic: Char Intrinsic. ! * character assignments: Fortran 90 Features. ! * character constants <1>: Character and Hollerith Constants. ! * character constants <2>: Ugly Conversion of Initializers. ! * character constants <3>: Double Quote Meaning. ! * character constants: Fortran Dialect Options. ! * character set: Fortran Dialect Options. ! * CHARACTER*(*): Arbitrary Concatenation. ! * CHARACTER, null: Character Type. ! * character-variable length: Character-variable Length. ! * characters: Character Set. ! * characters, comma: Ugly Null Arguments. ! * characters, comment <1>: LEX. ! * characters, comment <2>: Exclamation Point. ! * characters, comment <3>: Trailing Comment. ! * characters, comment: Statements Comments Lines. ! * characters, continuation <1>: LEX. ! * characters, continuation <2>: Exclamation Point. ! * characters, continuation: Statements Comments Lines. ! * ChDir intrinsic <1>: ChDir Intrinsic (function). ! * ChDir intrinsic: ChDir Intrinsic (subroutine). ! * checking subscripts: Code Gen Options. ! * checking substrings: Code Gen Options. ! * checks, of internal consistency: Overall Options. ! * ChMod intrinsic <1>: ChMod Intrinsic (function). ! * ChMod intrinsic: ChMod Intrinsic (subroutine). ! * CLog intrinsic: CLog Intrinsic. ! * close angle: Character Set. ! * close bracket: Character Set. ! * CLOSE statement: OPEN CLOSE and INQUIRE Keywords. ! * Cmplx intrinsic <1>: Cmplx Intrinsic. ! * Cmplx intrinsic: CMPLX() of DOUBLE PRECISION. ! * code generation, conventions: Code Gen Options. ! * code generation, improving: Better Optimization. ! * code generator <1>: Philosophy of Code Generation. ! * code generator: What is GNU Fortran?. ! * code, assembly: What is GNU Fortran?. ! * code, displaying main source: Known Bugs. ! * code, in-line: What is GNU Fortran?. ! * code, legacy: Collected Fortran Wisdom. ! * code, machine: What is GNU Fortran?. ! * code, modifying: Overall Options. ! * code, source <1>: Case Sensitivity. ! * code, source <2>: Source Form. ! * code, source <3>: Lines. ! * code, source: What is GNU Fortran?. ! * code, user: Cannot Link Fortran Programs. ! * code, writing: Collected Fortran Wisdom. ! * column-major ordering: Arrays. ! * columns 73 through 80: Better Source Model. ! * comma, trailing: Ugly Null Arguments. ! * command options: Invoking G77. ! * commands, as: What is GNU Fortran?. ! * commands, g77 <1>: G77 and GCC. ! * commands, g77: What is GNU Fortran?. ! * commands, gcc <1>: G77 and GCC. ! * commands, gcc: What is GNU Fortran?. ! * commands, gdb: What is GNU Fortran?. ! * commands, ld: What is GNU Fortran?. ! * comment <1>: LEX. ! * comment <2>: Trailing Comment. ! * comment: Statements Comments Lines. ! * comment character: Exclamation Point. ! * comment line, debug <1>: Enabling Debug Lines. ! * comment line, debug: Debug Line. ! * common blocks <1>: Mangling of Names. ! * common blocks <2>: Known Bugs. ! * common blocks <3>: Common Blocks. ! * common blocks: Debugging Options. ! * common blocks, large: Large Common Blocks. ! * COMMON layout: Aligned Data. ! * COMMON statement <1>: Multiple Definitions of External Names. ! * COMMON statement: Common Blocks. ! * comparing logical expressions: Equivalence Versus Equality. ! * compatibility, f2c <1>: Avoid f2c Compatibility. ! * compatibility, f2c <2>: Block Data and Libraries. ! * compatibility, f2c <3>: Code Gen Options. ! * compatibility, f2c <4>: Shorthand Options. ! * compatibility, f2c: Overall Options. ! * compatibility, f77: Shorthand Options. ! * compatibility, FORTRAN 66 <1>: Fortran Dialect Options. ! * compatibility, FORTRAN 66: Shorthand Options. ! * compatibility, FORTRAN 77: Standard Support. ! * compatibility, Fortran 90: Fortran 90. ! * compilation, in-line <1>: GLOBALS. ! * compilation, in-line <2>: Code Gen Options. ! * compilation, in-line: Optimize Options. ! * compilation, pedantic: Pedantic Compilation. ! * compilation, status: Overall Options. ! * compiler bugs, reporting: Bug Reporting. ! * compiler limits: Compiler Limits. ! * compiler memory usage: Known Bugs. ! * compiler speed: Known Bugs. ! * compilers: What is GNU Fortran?. ! * compiling programs: G77 and GCC. ! * Complex intrinsic: Complex Intrinsic. ! * COMPLEX intrinsics: Fortran Dialect Options. ! * complex performance: Known Bugs. ! * COMPLEX statement: Complex Variables. ! * complex values: Ugly Complex Part Extraction. ! * complex variables: Complex Variables. ! * COMPLEX(KIND=1) type: Compiler Types. ! * COMPLEX(KIND=2) type: Compiler Types. ! * components of g77: What is GNU Fortran?. ! * concatenation: Arbitrary Concatenation. ! * concepts, basic: What is GNU Fortran?. ! * conformance, IEEE 754 <1>: Floating-point precision. ! * conformance, IEEE 754: Optimize Options. ! * Conjg intrinsic: Conjg Intrinsic. ! * consistency checks: Overall Options. ! * constants <1>: Compiler Constants. ! * constants: Constants. ! * constants, character <1>: Character and Hollerith Constants. ! * constants, character <2>: Ugly Conversion of Initializers. ! * constants, character: Double Quote Meaning. ! * constants, context-sensitive: Context-Sensitive Constants. ! * constants, Hollerith <1>: Character and Hollerith Constants. ! * constants, Hollerith <2>: Ugly Conversion of Initializers. ! * constants, Hollerith: Ugly Implicit Argument Conversion. ! * constants, integer: Known Bugs. ! * constants, octal: Double Quote Meaning. ! * constants, prefix-radix: Fortran Dialect Options. ! * constants, types: Fortran Dialect Options. ! * construct names: Construct Names. ! * context-sensitive constants: Context-Sensitive Constants. ! * context-sensitive intrinsics: Context-Sensitive Intrinsicness. ! * continuation character <1>: LEX. ! * continuation character <2>: Exclamation Point. ! * continuation character: Statements Comments Lines. ! * continuation line, ampersand: Ampersands. ! * continuation line, number of: Continuation Line. ! * contributors: Contributors. ! * conversions, nonportable: Nonportable Conversions. ! * core dump: Bug Criteria. ! * Cos intrinsic: Cos Intrinsic. ! * CosD intrinsic: CosD Intrinsic. ! * CosH intrinsic: CosH Intrinsic. ! * Count intrinsic: Count Intrinsic. ! * cpp preprocessor: Overall Options. ! * cpp program <1>: LEX. ! * cpp program <2>: Bug Reporting. ! * cpp program <3>: Preprocessor Options. ! * cpp program <4>: Overall Options. ! * cpp program: What is GNU Fortran?. ! * CPU_Time intrinsic: CPU_Time Intrinsic. ! * Cray pointers: POINTER Statements. ! * credits: Contributors. ! * CShift intrinsic: CShift Intrinsic. ! * CSin intrinsic: CSin Intrinsic. ! * CSqRt intrinsic: CSqRt Intrinsic. ! * CTime intrinsic <1>: CTime Intrinsic (function). ! * CTime intrinsic: CTime Intrinsic (subroutine). ! * CYCLE statement: CYCLE and EXIT. ! * DAbs intrinsic: DAbs Intrinsic. ! * DACos intrinsic: DACos Intrinsic. ! * DACosD intrinsic: DACosD Intrinsic. ! * DASin intrinsic: DASin Intrinsic. ! * DASinD intrinsic: DASinD Intrinsic. ! * DATA statement <1>: Known Bugs. ! * DATA statement: Code Gen Options. ! * data types: Compiler Types. ! * data, aligned: Aligned Data. ! * data, overwritten: Strange Behavior at Run Time. ! * DATan intrinsic: DATan Intrinsic. ! * DATan2 intrinsic: DATan2 Intrinsic. ! * DATan2D intrinsic: DATan2D Intrinsic. ! * DATanD intrinsic: DATanD Intrinsic. ! * Date intrinsic: Date Intrinsic. ! * Date_and_Time intrinsic: Date_and_Time Intrinsic. ! * date_y2kbuggy_0: Year 2000 (Y2K) Problems. ! * DbesJ0 intrinsic: DbesJ0 Intrinsic. ! * DbesJ1 intrinsic: DbesJ1 Intrinsic. ! * DbesJN intrinsic: DbesJN Intrinsic. ! * DbesY0 intrinsic: DbesY0 Intrinsic. ! * DbesY1 intrinsic: DbesY1 Intrinsic. ! * DbesYN intrinsic: DbesYN Intrinsic. ! * Dble intrinsic: Dble Intrinsic. ! * DbleQ intrinsic: DbleQ Intrinsic. ! * DCmplx intrinsic: DCmplx Intrinsic. ! * DConjg intrinsic: DConjg Intrinsic. ! * DCos intrinsic: DCos Intrinsic. ! * DCosD intrinsic: DCosD Intrinsic. ! * DCosH intrinsic: DCosH Intrinsic. ! * DDiM intrinsic: DDiM Intrinsic. ! * debug line <1>: Enabling Debug Lines. ! * debug line: Debug Line. ! * debug_rtx: Bug Reporting. ! * debugger <1>: Known Bugs. ! * debugger: What is GNU Fortran?. ! * debugging <1>: Known Bugs. ! * debugging <2>: Names. ! * debugging <3>: Main Program Unit. ! * debugging: Debugging and Interfacing. ! * debugging information options: Debugging Options. ! * debugging main source code: Known Bugs. ! * DECODE statement: ENCODE and DECODE. ! * deleted intrinsics: Intrinsic Groups. ! * DErF intrinsic: DErF Intrinsic. ! * DErFC intrinsic: DErFC Intrinsic. ! * DExp intrinsic: DExp Intrinsic. ! * DFloat intrinsic: DFloat Intrinsic. ! * DFlotI intrinsic: DFlotI Intrinsic. ! * DFlotJ intrinsic: DFlotJ Intrinsic. ! * diagnostics: Diagnostics. ! * diagnostics, incorrect: What is GNU Fortran?. ! * dialect options: Fortran Dialect Options. ! * Digital Fortran features: Fortran Dialect Options. ! * Digits intrinsic: Digits Intrinsic. ! * DiM intrinsic: DiM Intrinsic. ! * DImag intrinsic: DImag Intrinsic. ! * DIMENSION statement <1>: Array Bounds Expressions. ! * DIMENSION statement <2>: Adjustable Arrays. ! * DIMENSION statement: Arrays. ! * DIMENSION X(1): Ugly Assumed-Size Arrays. ! * dimensioning arrays: Adjustable Arrays. ! * DInt intrinsic: DInt Intrinsic. ! * direction of language development: Direction of Language Development. ! * directive, #include: Bug Reporting. ! * directive, INCLUDE <1>: Bug Reporting. ! * directive, INCLUDE <2>: Directory Options. ! * directive, INCLUDE: Preprocessor Options. ! * directory, options: Directory Options. ! * directory, search paths for inclusion: Directory Options. ! * disabled intrinsics: Intrinsic Groups. ! * disk full: Output Assumed To Flush. ! * displaying main source code: Known Bugs. ! * disposition of files: OPEN CLOSE and INQUIRE Keywords. ! * distensions: Distensions. ! * DLog intrinsic: DLog Intrinsic. ! * DLog10 intrinsic: DLog10 Intrinsic. ! * DMax1 intrinsic: DMax1 Intrinsic. ! * DMin1 intrinsic: DMin1 Intrinsic. ! * DMod intrinsic: DMod Intrinsic. ! * DNInt intrinsic: DNInt Intrinsic. ! * DNRM2: News. ! * DO: DO WHILE. ! * DO loops, one-trip: Fortran Dialect Options. ! * DO loops, zero-trip: Fortran Dialect Options. ! * DO statement <1>: Loops. ! * DO statement: Warning Options. ! * DO WHILE <1>: DO WHILE. ! * DO WHILE: Optimize Options. ! * dollar sign <1>: Dollar Signs. ! * dollar sign <2>: I/O. ! * dollar sign: Fortran Dialect Options. ! * Dot_Product intrinsic: Dot_Product Intrinsic. ! * DOUBLE COMPLEX: DOUBLE COMPLEX. ! * DOUBLE COMPLEX type: Compiler Types. ! * DOUBLE PRECISION type: Compiler Types. ! * double quote: Character Set. ! * double quoted character constants <1>: Fortran 90 Features. ! * double quoted character constants: Character Type. ! * double quotes: Double Quote Meaning. ! * double-precision performance <1>: Changes. ! * double-precision performance: News. ! * DProd intrinsic: DProd Intrinsic. ! * DReal intrinsic: DReal Intrinsic. ! * driver, gcc command as: What is GNU Fortran?. ! * DSign intrinsic: DSign Intrinsic. ! * DSin intrinsic: DSin Intrinsic. ! * DSinD intrinsic: DSinD Intrinsic. ! * DSinH intrinsic: DSinH Intrinsic. ! * DSqRt intrinsic: DSqRt Intrinsic. ! * DTan intrinsic: DTan Intrinsic. ! * DTanD intrinsic: DTanD Intrinsic. ! * DTanH intrinsic: DTanH Intrinsic. ! * DTime intrinsic <1>: DTime Intrinsic (function). ! * DTime intrinsic: DTime Intrinsic (subroutine). ! * dummies, unused: Warning Options. ! * edit descriptor, <>: I/O. ! * edit descriptor, O: I/O. ! * edit descriptor, Q: Q Edit Descriptor. ! * edit descriptor, Z <1>: Fortran 90 Features. ! * edit descriptor, Z: I/O. ! * effecting IMPLICIT NONE: Warning Options. ! * efficiency: Efficiency. ! * ELF support: News. ! * empty CHARACTER strings: Character Type. ! * enabled intrinsics: Intrinsic Groups. ! * ENCODE statement: ENCODE and DECODE. ! * END DO: END DO. ! * entry points: Alternate Entry Points. ! * ENTRY statement: Alternate Entry Points. ! * environment variables: Environment Variables. ! * EOShift intrinsic: EOShift Intrinsic. ! * Epsilon intrinsic: Epsilon Intrinsic. ! * equivalence areas <1>: Known Bugs. ! * equivalence areas <2>: Local Equivalence Areas. ! * equivalence areas: Debugging Options. ! * EQUIVALENCE statement: Local Equivalence Areas. ! * ErF intrinsic: ErF Intrinsic. ! * ErFC intrinsic: ErFC Intrinsic. ! * error messages <1>: Warnings and Errors. ! * error messages: Run-time Library Errors. ! * error messages, incorrect: What is GNU Fortran?. ! * error values: Run-time Library Errors. ! * errors, linker: Large Common Blocks. ! * ETime intrinsic <1>: ETime Intrinsic (function). ! * ETime intrinsic: ETime Intrinsic (subroutine). ! * exceptions, floating-point: Floating-point Exception Handling. ! * exclamation point <1>: LEX. ! * exclamation point <2>: Exclamation Point. ! * exclamation point <3>: Trailing Comment. ! * exclamation point <4>: Character Set. ! * exclamation point: Statements Comments Lines. ! * executable file: What is GNU Fortran?. ! * Exit intrinsic: Exit Intrinsic. ! * EXIT statement: CYCLE and EXIT. ! * Exp intrinsic: Exp Intrinsic. ! * Exponent intrinsic: Exponent Intrinsic. ! * extended-source option: Fortran Dialect Options. ! * extensions, file name: Overall Options. ! * extensions, from Fortran 90: Fortran 90 Features. ! * extensions, more: More Extensions. ! * extensions, VXT: VXT Fortran. ! * external names: Mangling of Names. ! * extra warnings: Warning Options. ! * f2c: Increasing Precision/Range. ! * f2c compatibility <1>: Avoid f2c Compatibility. ! * f2c compatibility <2>: Block Data and Libraries. ! * f2c compatibility <3>: Debugging and Interfacing. ! * f2c compatibility <4>: Code Gen Options. ! * f2c compatibility <5>: Shorthand Options. ! * f2c compatibility: Overall Options. ! * f2c intrinsics: Fortran Dialect Options. ! * f2c intrinsics group: Intrinsic Groups. ! * f77 compatibility: Shorthand Options. ! * f77 support: Backslash in Constants. ! * f771, program: What is GNU Fortran?. ! * f90 intrinsics group: Intrinsic Groups. ! * fatal signal: Bug Criteria. ! * FDate intrinsic <1>: FDate Intrinsic (function). ! * FDate intrinsic: FDate Intrinsic (subroutine). ! * FDL, GNU Free Documentation License: GNU Free Documentation License. ! * features, language: Direction of Language Development. ! * features, ugly <1>: Distensions. ! * features, ugly: Shorthand Options. ! * FFE <1>: Front End. ! * FFE: What is GNU Fortran?. ! * fflush(): Output Assumed To Flush. ! * FGet intrinsic <1>: FGet Intrinsic (function). ! * FGet intrinsic: FGet Intrinsic (subroutine). ! * FGetC intrinsic <1>: FGetC Intrinsic (function). ! * FGetC intrinsic: FGetC Intrinsic (subroutine). ! * file format not recognized: What is GNU Fortran?. ! * file formats: Portable Unformatted Files. ! * file name extension: Overall Options. ! * file name suffix: Overall Options. ! * file type: Overall Options. ! * file, source <1>: Source Form. ! * file, source <2>: Lines. ! * file, source: What is GNU Fortran?. ! * files, executable: What is GNU Fortran?. ! * fixed form <1>: Source Form. ! * fixed form <2>: Lines. ! * fixed form: Fortran Dialect Options. ! * Float intrinsic: Float Intrinsic. ! * FloatI intrinsic: FloatI Intrinsic. ! * floating-point errors: Floating-point Errors. ! * floating-point, errors: Inconsistent Calling Sequences. ! * floating-point, exceptions: Floating-point Exception Handling. ! * floating-point, precision <1>: Floating-point precision. ! * floating-point, precision: Optimize Options. ! * FloatJ intrinsic: FloatJ Intrinsic. ! * Floor intrinsic: Floor Intrinsic. ! * Flush intrinsic: Flush Intrinsic. ! * flushing output: Output Assumed To Flush. ! * FNum intrinsic: FNum Intrinsic. ! * FORM='PRINT': OPEN CLOSE and INQUIRE Keywords. ! * FORMAT descriptors <1>: Fortran 90 Features. ! * FORMAT descriptors: I/O. ! * FORMAT statement <1>: Q Edit Descriptor. ! * FORMAT statement: Expressions in FORMAT Statements. ! * FORTRAN 66 <1>: Fortran Dialect Options. ! * FORTRAN 66: Shorthand Options. ! * FORTRAN 77 compatibility: Standard Support. ! * Fortran 90: Fortran 90 Features. ! * Fortran 90, compatibility: Fortran 90. ! * Fortran 90, features: Fortran Dialect Options. ! * Fortran 90, intrinsics: Fortran Dialect Options. ! * Fortran 90, support: Fortran 90 Support. ! * Fortran preprocessor: Overall Options. ! * forward references: GLOBALS. ! * FPE handling: Floating-point Exception Handling. ! * FPut intrinsic <1>: FPut Intrinsic (function). ! * FPut intrinsic: FPut Intrinsic (subroutine). ! * FPutC intrinsic <1>: FPutC Intrinsic (function). ! * FPutC intrinsic: FPutC Intrinsic (subroutine). ! * Fraction intrinsic: Fraction Intrinsic. ! * free form <1>: Source Form. ! * free form <2>: Lines. ! * free form: Fortran Dialect Options. ! * front end, g77 <1>: Front End. ! * front end, g77: What is GNU Fortran?. ! * FSeek intrinsic: FSeek Intrinsic. ! * FSF, funding the: Funding GNU Fortran. ! * FStat intrinsic <1>: FStat Intrinsic (function). ! * FStat intrinsic: FStat Intrinsic (subroutine). ! * FTell intrinsic <1>: FTell Intrinsic (function). ! * FTell intrinsic: FTell Intrinsic (subroutine). ! * function references, in adjustable array bounds: Array Bounds Expressions. ! * FUNCTION statement <1>: Functions. ! * FUNCTION statement: Procedures. ! * functions: Functions. ! * functions, mistyped: Not My Type. ! * funding improvements: Funding GNU Fortran. ! * funding the FSF: Funding GNU Fortran. ! * g77 options, --driver <1>: Changes. ! * g77 options, --driver: News. ! * g77 options, -v: G77 and GCC. ! * g77, command <1>: G77 and GCC. ! * g77, command: What is GNU Fortran?. ! * g77, components of: What is GNU Fortran?. ! * g77, front end <1>: Front End. ! * g77, front end: What is GNU Fortran?. ! * G77_date_y2kbuggy_0: Year 2000 (Y2K) Problems. ! * G77_vxtidate_y2kbuggy_0: Year 2000 (Y2K) Problems. ! * GBE <1>: Philosophy of Code Generation. ! * GBE: What is GNU Fortran?. ! * GBEL: Philosophy of Code Generation. ! * gcc, back end <1>: Philosophy of Code Generation. ! * gcc, back end: What is GNU Fortran?. ! * gcc, command <1>: G77 and GCC. ! * gcc, command: What is GNU Fortran?. ! * gcc, command as driver: What is GNU Fortran?. ! * gcc, not recognizing Fortran source: What is GNU Fortran?. ! * gdb, command: What is GNU Fortran?. ! * gdb, support: Debugger Problems. ! * generic intrinsics: Generics and Specifics. ! * GError intrinsic: GError Intrinsic. ! * GetArg intrinsic <1>: Main Program Unit. ! * GetArg intrinsic: GetArg Intrinsic. ! * GetCWD intrinsic <1>: GetCWD Intrinsic (function). ! * GetCWD intrinsic: GetCWD Intrinsic (subroutine). ! * GetEnv intrinsic: GetEnv Intrinsic. ! * GetGId intrinsic: GetGId Intrinsic. ! * GetLog intrinsic: GetLog Intrinsic. ! * GetPId intrinsic: GetPId Intrinsic. ! * getting started: Getting Started. ! * GetUId intrinsic: GetUId Intrinsic. ! * global names, warning <1>: Code Gen Options. ! * global names, warning: Warning Options. ! * GMTime intrinsic: GMTime Intrinsic. ! * GNU Back End (GBE) <1>: Philosophy of Code Generation. ! * GNU Back End (GBE): What is GNU Fortran?. ! * GNU Back End Language (GBEL): Philosophy of Code Generation. ! * GNU Fortran command options: Invoking G77. ! * GNU Fortran Front End (FFE) <1>: Front End. ! * GNU Fortran Front End (FFE): What is GNU Fortran?. ! * gnu intrinsics group: Intrinsic Groups. ! * GOTO statement: Assigned Statement Labels. ! * groups of intrinsics: Intrinsic Groups. ! * hardware errors: Signal 11 and Friends. ! * hash mark: Character Set. ! * HDF: Portable Unformatted Files. ! * hidden intrinsics: Intrinsic Groups. ! * Hollerith constants <1>: Character and Hollerith Constants. ! * Hollerith constants <2>: Ugly Conversion of Initializers. ! * Hollerith constants <3>: Ugly Implicit Argument Conversion. ! * Hollerith constants: Fortran Dialect Options. ! * horizontal tab: Tabs. ! * HostNm intrinsic <1>: HostNm Intrinsic (function). ! * HostNm intrinsic: HostNm Intrinsic (subroutine). ! * Huge intrinsic: Huge Intrinsic. ! * I/O, errors: Run-time Library Errors. ! * I/O, flushing: Output Assumed To Flush. ! * IAbs intrinsic: IAbs Intrinsic. ! * IAChar intrinsic: IAChar Intrinsic. ! * IAnd intrinsic: IAnd Intrinsic. ! * IArgC intrinsic <1>: Main Program Unit. ! * IArgC intrinsic: IArgC Intrinsic. ! * IBClr intrinsic: IBClr Intrinsic. ! * IBits intrinsic: IBits Intrinsic. ! * IBSet intrinsic: IBSet Intrinsic. ! * IChar intrinsic: IChar Intrinsic. ! * IDate intrinsic <1>: IDate Intrinsic (VXT). ! * IDate intrinsic: IDate Intrinsic (UNIX). ! * IDiM intrinsic: IDiM Intrinsic. ! * IDInt intrinsic: IDInt Intrinsic. ! * IDNInt intrinsic: IDNInt Intrinsic. ! * IEEE 754 conformance <1>: Floating-point precision. ! * IEEE 754 conformance: Optimize Options. ! * IEOr intrinsic: IEOr Intrinsic. ! * IErrNo intrinsic: IErrNo Intrinsic. ! * IFix intrinsic: IFix Intrinsic. ! * IIAbs intrinsic: IIAbs Intrinsic. ! * IIAnd intrinsic: IIAnd Intrinsic. ! * IIBClr intrinsic: IIBClr Intrinsic. ! * IIBits intrinsic: IIBits Intrinsic. ! * IIBSet intrinsic: IIBSet Intrinsic. ! * IIDiM intrinsic: IIDiM Intrinsic. ! * IIDInt intrinsic: IIDInt Intrinsic. ! * IIDNnt intrinsic: IIDNnt Intrinsic. ! * IIEOr intrinsic: IIEOr Intrinsic. ! * IIFix intrinsic: IIFix Intrinsic. ! * IInt intrinsic: IInt Intrinsic. ! * IIOr intrinsic: IIOr Intrinsic. ! * IIQint intrinsic: IIQint Intrinsic. ! * IIQNnt intrinsic: IIQNnt Intrinsic. ! * IIShftC intrinsic: IIShftC Intrinsic. ! * IISign intrinsic: IISign Intrinsic. ! * illegal unit number: Large File Unit Numbers. ! * Imag intrinsic: Imag Intrinsic. ! * imaginary part <1>: Complex Variables. ! * imaginary part: Ugly Complex Part Extraction. ! * ImagPart intrinsic: ImagPart Intrinsic. ! * IMax0 intrinsic: IMax0 Intrinsic. ! * IMax1 intrinsic: IMax1 Intrinsic. ! * IMin0 intrinsic: IMin0 Intrinsic. ! * IMin1 intrinsic: IMin1 Intrinsic. ! * IMod intrinsic: IMod Intrinsic. ! * IMPLICIT CHARACTER*(*) statement: Limitation on Implicit Declarations. ! * implicit declaration, warning: Warning Options. ! * IMPLICIT NONE, similar effect: Warning Options. ! * implicit typing: Not My Type. ! * improvements, funding: Funding GNU Fortran. ! * in-line code <1>: GLOBALS. ! * in-line code <2>: Code Gen Options. ! * in-line code <3>: Optimize Options. ! * in-line code: What is GNU Fortran?. ! * INCLUDE directive <1>: Bug Reporting. ! * INCLUDE directive <2>: INCLUDE. ! * INCLUDE directive <3>: Directory Options. ! * INCLUDE directive: Preprocessor Options. ! * included files: Bug Reporting. ! * inclusion, directory search paths for: Directory Options. ! * inconsistent floating-point results: Floating-point Errors. ! * incorrect diagnostics: What is GNU Fortran?. ! * incorrect error messages: What is GNU Fortran?. ! * incorrect use of language: What is GNU Fortran?. ! * increasing maximum unit number: Large File Unit Numbers. ! * increasing precision: Increasing Precision/Range. ! * increasing range: Increasing Precision/Range. ! * Index intrinsic: Index Intrinsic. ! * indexed (iterative) DO: Optimize Options. ! * infinite spaces printed: Strange Behavior at Run Time. ! * INInt intrinsic: INInt Intrinsic. ! * initialization, bug: Known Bugs. ! * initialization, of local variables: Code Gen Options. ! * initialization, run-time: Startup Code. ! * initialization, statement placement: Initializing Before Specifying. ! * INot intrinsic: INot Intrinsic. ! * INQUIRE statement: OPEN CLOSE and INQUIRE Keywords. ! * installation trouble: Trouble. ! * installing, GNU Fortran: Installation. ! * Int intrinsic: Int Intrinsic. ! * Int2 intrinsic: Int2 Intrinsic. ! * Int8 intrinsic: Int8 Intrinsic. ! * integer constants: Known Bugs. ! * INTEGER(KIND=1) type: Compiler Types. ! * INTEGER(KIND=2) type: Compiler Types. ! * INTEGER(KIND=3) type: Compiler Types. ! * INTEGER(KIND=6) type: Compiler Types. ! * INTEGER*2 support: Popular Non-standard Types. ! * INTEGER*8 support: Full Support for Compiler Types. ! * Intel x86: News. ! * interfacing: Debugging and Interfacing. ! * internal consistency checks: Overall Options. ! * intrinsics, Abort: Abort Intrinsic. ! * intrinsics, Abs: Abs Intrinsic. ! * intrinsics, Access: Access Intrinsic. ! * intrinsics, AChar: AChar Intrinsic. ! * intrinsics, ACos: ACos Intrinsic. ! * intrinsics, ACosD: ACosD Intrinsic. ! * intrinsics, AdjustL: AdjustL Intrinsic. ! * intrinsics, AdjustR: AdjustR Intrinsic. ! * intrinsics, AImag <1>: AImag Intrinsic. ! * intrinsics, AImag: REAL() and AIMAG() of Complex. ! * intrinsics, AIMax0: AIMax0 Intrinsic. ! * intrinsics, AIMin0: AIMin0 Intrinsic. ! * intrinsics, AInt: AInt Intrinsic. ! * intrinsics, AJMax0: AJMax0 Intrinsic. ! * intrinsics, AJMin0: AJMin0 Intrinsic. ! * intrinsics, Alarm: Alarm Intrinsic. ! * intrinsics, All: All Intrinsic. ! * intrinsics, Allocated: Allocated Intrinsic. ! * intrinsics, ALog: ALog Intrinsic. ! * intrinsics, ALog10: ALog10 Intrinsic. ! * intrinsics, AMax0: AMax0 Intrinsic. ! * intrinsics, AMax1: AMax1 Intrinsic. ! * intrinsics, AMin0: AMin0 Intrinsic. ! * intrinsics, AMin1: AMin1 Intrinsic. ! * intrinsics, AMod: AMod Intrinsic. ! * intrinsics, And <1>: Bit Operations on Floating-point Data. ! * intrinsics, And: And Intrinsic. ! * intrinsics, ANInt: ANInt Intrinsic. ! * intrinsics, Any: Any Intrinsic. ! * intrinsics, ASin: ASin Intrinsic. ! * intrinsics, ASinD: ASinD Intrinsic. ! * intrinsics, Associated: Associated Intrinsic. ! * intrinsics, ATan: ATan Intrinsic. ! * intrinsics, ATan2: ATan2 Intrinsic. ! * intrinsics, ATan2D: ATan2D Intrinsic. ! * intrinsics, ATanD: ATanD Intrinsic. ! * intrinsics, badu77: Fortran Dialect Options. ! * intrinsics, BesJ0: BesJ0 Intrinsic. ! * intrinsics, BesJ1: BesJ1 Intrinsic. ! * intrinsics, BesJN: BesJN Intrinsic. ! * intrinsics, BesY0: BesY0 Intrinsic. ! * intrinsics, BesY1: BesY1 Intrinsic. ! * intrinsics, BesYN: BesYN Intrinsic. ! * intrinsics, Bit_Size: Bit_Size Intrinsic. ! * intrinsics, BITest: BITest Intrinsic. ! * intrinsics, BJTest: BJTest Intrinsic. ! * intrinsics, BTest: BTest Intrinsic. ! * intrinsics, CAbs: CAbs Intrinsic. ! * intrinsics, CCos: CCos Intrinsic. ! * intrinsics, CDAbs: CDAbs Intrinsic. ! * intrinsics, CDCos: CDCos Intrinsic. ! * intrinsics, CDExp: CDExp Intrinsic. ! * intrinsics, CDLog: CDLog Intrinsic. ! * intrinsics, CDSin: CDSin Intrinsic. ! * intrinsics, CDSqRt: CDSqRt Intrinsic. ! * intrinsics, Ceiling: Ceiling Intrinsic. ! * intrinsics, CExp: CExp Intrinsic. ! * intrinsics, Char: Char Intrinsic. ! * intrinsics, ChDir <1>: ChDir Intrinsic (function). ! * intrinsics, ChDir: ChDir Intrinsic (subroutine). ! * intrinsics, ChMod <1>: ChMod Intrinsic (function). ! * intrinsics, ChMod: ChMod Intrinsic (subroutine). ! * intrinsics, CLog: CLog Intrinsic. ! * intrinsics, Cmplx <1>: Cmplx Intrinsic. ! * intrinsics, Cmplx: CMPLX() of DOUBLE PRECISION. ! * intrinsics, Complex: Complex Intrinsic. ! * intrinsics, COMPLEX: Fortran Dialect Options. ! * intrinsics, Conjg: Conjg Intrinsic. ! * intrinsics, context-sensitive: Context-Sensitive Intrinsicness. ! * intrinsics, Cos: Cos Intrinsic. ! * intrinsics, CosD: CosD Intrinsic. ! * intrinsics, CosH: CosH Intrinsic. ! * intrinsics, Count: Count Intrinsic. ! * intrinsics, CPU_Time: CPU_Time Intrinsic. ! * intrinsics, CShift: CShift Intrinsic. ! * intrinsics, CSin: CSin Intrinsic. ! * intrinsics, CSqRt: CSqRt Intrinsic. ! * intrinsics, CTime <1>: CTime Intrinsic (function). ! * intrinsics, CTime: CTime Intrinsic (subroutine). ! * intrinsics, DAbs: DAbs Intrinsic. ! * intrinsics, DACos: DACos Intrinsic. ! * intrinsics, DACosD: DACosD Intrinsic. ! * intrinsics, DASin: DASin Intrinsic. ! * intrinsics, DASinD: DASinD Intrinsic. ! * intrinsics, DATan: DATan Intrinsic. ! * intrinsics, DATan2: DATan2 Intrinsic. ! * intrinsics, DATan2D: DATan2D Intrinsic. ! * intrinsics, DATanD: DATanD Intrinsic. ! * intrinsics, Date: Date Intrinsic. ! * intrinsics, Date_and_Time: Date_and_Time Intrinsic. ! * intrinsics, DbesJ0: DbesJ0 Intrinsic. ! * intrinsics, DbesJ1: DbesJ1 Intrinsic. ! * intrinsics, DbesJN: DbesJN Intrinsic. ! * intrinsics, DbesY0: DbesY0 Intrinsic. ! * intrinsics, DbesY1: DbesY1 Intrinsic. ! * intrinsics, DbesYN: DbesYN Intrinsic. ! * intrinsics, Dble: Dble Intrinsic. ! * intrinsics, DbleQ: DbleQ Intrinsic. ! * intrinsics, DCmplx: DCmplx Intrinsic. ! * intrinsics, DConjg: DConjg Intrinsic. ! * intrinsics, DCos: DCos Intrinsic. ! * intrinsics, DCosD: DCosD Intrinsic. ! * intrinsics, DCosH: DCosH Intrinsic. ! * intrinsics, DDiM: DDiM Intrinsic. ! * intrinsics, deleted: Intrinsic Groups. ! * intrinsics, DErF: DErF Intrinsic. ! * intrinsics, DErFC: DErFC Intrinsic. ! * intrinsics, DExp: DExp Intrinsic. ! * intrinsics, DFloat: DFloat Intrinsic. ! * intrinsics, DFlotI: DFlotI Intrinsic. ! * intrinsics, DFlotJ: DFlotJ Intrinsic. ! * intrinsics, Digits: Digits Intrinsic. ! * intrinsics, DiM: DiM Intrinsic. ! * intrinsics, DImag: DImag Intrinsic. ! * intrinsics, DInt: DInt Intrinsic. ! * intrinsics, disabled: Intrinsic Groups. ! * intrinsics, DLog: DLog Intrinsic. ! * intrinsics, DLog10: DLog10 Intrinsic. ! * intrinsics, DMax1: DMax1 Intrinsic. ! * intrinsics, DMin1: DMin1 Intrinsic. ! * intrinsics, DMod: DMod Intrinsic. ! * intrinsics, DNInt: DNInt Intrinsic. ! * intrinsics, Dot_Product: Dot_Product Intrinsic. ! * intrinsics, DProd: DProd Intrinsic. ! * intrinsics, DReal: DReal Intrinsic. ! * intrinsics, DSign: DSign Intrinsic. ! * intrinsics, DSin: DSin Intrinsic. ! * intrinsics, DSinD: DSinD Intrinsic. ! * intrinsics, DSinH: DSinH Intrinsic. ! * intrinsics, DSqRt: DSqRt Intrinsic. ! * intrinsics, DTan: DTan Intrinsic. ! * intrinsics, DTanD: DTanD Intrinsic. ! * intrinsics, DTanH: DTanH Intrinsic. ! * intrinsics, DTime <1>: DTime Intrinsic (function). ! * intrinsics, DTime: DTime Intrinsic (subroutine). ! * intrinsics, enabled: Intrinsic Groups. ! * intrinsics, EOShift: EOShift Intrinsic. ! * intrinsics, Epsilon: Epsilon Intrinsic. ! * intrinsics, ErF: ErF Intrinsic. ! * intrinsics, ErFC: ErFC Intrinsic. ! * intrinsics, ETime <1>: ETime Intrinsic (function). ! * intrinsics, ETime: ETime Intrinsic (subroutine). ! * intrinsics, Exit: Exit Intrinsic. ! * intrinsics, Exp: Exp Intrinsic. ! * intrinsics, Exponent: Exponent Intrinsic. ! * intrinsics, f2c: Fortran Dialect Options. ! * intrinsics, FDate <1>: FDate Intrinsic (function). ! * intrinsics, FDate: FDate Intrinsic (subroutine). ! * intrinsics, FGet <1>: FGet Intrinsic (function). ! * intrinsics, FGet: FGet Intrinsic (subroutine). ! * intrinsics, FGetC <1>: FGetC Intrinsic (function). ! * intrinsics, FGetC: FGetC Intrinsic (subroutine). ! * intrinsics, Float: Float Intrinsic. ! * intrinsics, FloatI: FloatI Intrinsic. ! * intrinsics, FloatJ: FloatJ Intrinsic. ! * intrinsics, Floor: Floor Intrinsic. ! * intrinsics, Flush: Flush Intrinsic. ! * intrinsics, FNum: FNum Intrinsic. ! * intrinsics, Fortran 90: Fortran Dialect Options. ! * intrinsics, FPut <1>: FPut Intrinsic (function). ! * intrinsics, FPut: FPut Intrinsic (subroutine). ! * intrinsics, FPutC <1>: FPutC Intrinsic (function). ! * intrinsics, FPutC: FPutC Intrinsic (subroutine). ! * intrinsics, Fraction: Fraction Intrinsic. ! * intrinsics, FSeek: FSeek Intrinsic. ! * intrinsics, FStat <1>: FStat Intrinsic (function). ! * intrinsics, FStat: FStat Intrinsic (subroutine). ! * intrinsics, FTell <1>: FTell Intrinsic (function). ! * intrinsics, FTell: FTell Intrinsic (subroutine). ! * intrinsics, generic: Generics and Specifics. ! * intrinsics, GError: GError Intrinsic. ! * intrinsics, GetArg <1>: Main Program Unit. ! * intrinsics, GetArg: GetArg Intrinsic. ! * intrinsics, GetCWD <1>: GetCWD Intrinsic (function). ! * intrinsics, GetCWD: GetCWD Intrinsic (subroutine). ! * intrinsics, GetEnv: GetEnv Intrinsic. ! * intrinsics, GetGId: GetGId Intrinsic. ! * intrinsics, GetLog: GetLog Intrinsic. ! * intrinsics, GetPId: GetPId Intrinsic. ! * intrinsics, GetUId: GetUId Intrinsic. ! * intrinsics, GMTime: GMTime Intrinsic. ! * intrinsics, groups: Intrinsic Groups. ! * intrinsics, groups of: Intrinsic Groups. ! * intrinsics, hidden: Intrinsic Groups. ! * intrinsics, HostNm <1>: HostNm Intrinsic (function). ! * intrinsics, HostNm: HostNm Intrinsic (subroutine). ! * intrinsics, Huge: Huge Intrinsic. ! * intrinsics, IAbs: IAbs Intrinsic. ! * intrinsics, IAChar: IAChar Intrinsic. ! * intrinsics, IAnd: IAnd Intrinsic. ! * intrinsics, IArgC <1>: Main Program Unit. ! * intrinsics, IArgC: IArgC Intrinsic. ! * intrinsics, IBClr: IBClr Intrinsic. ! * intrinsics, IBits: IBits Intrinsic. ! * intrinsics, IBSet: IBSet Intrinsic. ! * intrinsics, IChar: IChar Intrinsic. ! * intrinsics, IDate <1>: IDate Intrinsic (VXT). ! * intrinsics, IDate: IDate Intrinsic (UNIX). ! * intrinsics, IDiM: IDiM Intrinsic. ! * intrinsics, IDInt: IDInt Intrinsic. ! * intrinsics, IDNInt: IDNInt Intrinsic. ! * intrinsics, IEOr: IEOr Intrinsic. ! * intrinsics, IErrNo: IErrNo Intrinsic. ! * intrinsics, IFix: IFix Intrinsic. ! * intrinsics, IIAbs: IIAbs Intrinsic. ! * intrinsics, IIAnd: IIAnd Intrinsic. ! * intrinsics, IIBClr: IIBClr Intrinsic. ! * intrinsics, IIBits: IIBits Intrinsic. ! * intrinsics, IIBSet: IIBSet Intrinsic. ! * intrinsics, IIDiM: IIDiM Intrinsic. ! * intrinsics, IIDInt: IIDInt Intrinsic. ! * intrinsics, IIDNnt: IIDNnt Intrinsic. ! * intrinsics, IIEOr: IIEOr Intrinsic. ! * intrinsics, IIFix: IIFix Intrinsic. ! * intrinsics, IInt: IInt Intrinsic. ! * intrinsics, IIOr: IIOr Intrinsic. ! * intrinsics, IIQint: IIQint Intrinsic. ! * intrinsics, IIQNnt: IIQNnt Intrinsic. ! * intrinsics, IIShftC: IIShftC Intrinsic. ! * intrinsics, IISign: IISign Intrinsic. ! * intrinsics, Imag: Imag Intrinsic. ! * intrinsics, ImagPart: ImagPart Intrinsic. ! * intrinsics, IMax0: IMax0 Intrinsic. ! * intrinsics, IMax1: IMax1 Intrinsic. ! * intrinsics, IMin0: IMin0 Intrinsic. ! * intrinsics, IMin1: IMin1 Intrinsic. ! * intrinsics, IMod: IMod Intrinsic. ! * intrinsics, Index: Index Intrinsic. ! * intrinsics, INInt: INInt Intrinsic. ! * intrinsics, INot: INot Intrinsic. ! * intrinsics, Int: Int Intrinsic. ! * intrinsics, Int2: Int2 Intrinsic. ! * intrinsics, Int8: Int8 Intrinsic. ! * intrinsics, IOr: IOr Intrinsic. ! * intrinsics, IRand: IRand Intrinsic. ! * intrinsics, IsaTty: IsaTty Intrinsic. ! * intrinsics, IShft: IShft Intrinsic. ! * intrinsics, IShftC: IShftC Intrinsic. ! * intrinsics, ISign: ISign Intrinsic. ! * intrinsics, ITime: ITime Intrinsic. ! * intrinsics, IZExt: IZExt Intrinsic. ! * intrinsics, JIAbs: JIAbs Intrinsic. ! * intrinsics, JIAnd: JIAnd Intrinsic. ! * intrinsics, JIBClr: JIBClr Intrinsic. ! * intrinsics, JIBits: JIBits Intrinsic. ! * intrinsics, JIBSet: JIBSet Intrinsic. ! * intrinsics, JIDiM: JIDiM Intrinsic. ! * intrinsics, JIDInt: JIDInt Intrinsic. ! * intrinsics, JIDNnt: JIDNnt Intrinsic. ! * intrinsics, JIEOr: JIEOr Intrinsic. ! * intrinsics, JIFix: JIFix Intrinsic. ! * intrinsics, JInt: JInt Intrinsic. ! * intrinsics, JIOr: JIOr Intrinsic. ! * intrinsics, JIQint: JIQint Intrinsic. ! * intrinsics, JIQNnt: JIQNnt Intrinsic. ! * intrinsics, JIShft: JIShft Intrinsic. ! * intrinsics, JIShftC: JIShftC Intrinsic. ! * intrinsics, JISign: JISign Intrinsic. ! * intrinsics, JMax0: JMax0 Intrinsic. ! * intrinsics, JMax1: JMax1 Intrinsic. ! * intrinsics, JMin0: JMin0 Intrinsic. ! * intrinsics, JMin1: JMin1 Intrinsic. ! * intrinsics, JMod: JMod Intrinsic. ! * intrinsics, JNInt: JNInt Intrinsic. ! * intrinsics, JNot: JNot Intrinsic. ! * intrinsics, JZExt: JZExt Intrinsic. ! * intrinsics, Kill <1>: Kill Intrinsic (function). ! * intrinsics, Kill: Kill Intrinsic (subroutine). ! * intrinsics, Kind: Kind Intrinsic. ! * intrinsics, LBound: LBound Intrinsic. ! * intrinsics, Len: Len Intrinsic. ! * intrinsics, Len_Trim: Len_Trim Intrinsic. ! * intrinsics, LGe: LGe Intrinsic. ! * intrinsics, LGt: LGt Intrinsic. ! * intrinsics, Link <1>: Link Intrinsic (function). ! * intrinsics, Link: Link Intrinsic (subroutine). ! * intrinsics, LLe: LLe Intrinsic. ! * intrinsics, LLt: LLt Intrinsic. ! * intrinsics, LnBlnk: LnBlnk Intrinsic. ! * intrinsics, Loc: Loc Intrinsic. ! * intrinsics, Log: Log Intrinsic. ! * intrinsics, Log10: Log10 Intrinsic. ! * intrinsics, Logical: Logical Intrinsic. ! * intrinsics, Long: Long Intrinsic. ! * intrinsics, LShift: LShift Intrinsic. ! * intrinsics, LStat <1>: LStat Intrinsic (function). ! * intrinsics, LStat: LStat Intrinsic (subroutine). ! * intrinsics, LTime: LTime Intrinsic. ! * intrinsics, MatMul: MatMul Intrinsic. ! * intrinsics, Max: Max Intrinsic. ! * intrinsics, Max0: Max0 Intrinsic. ! * intrinsics, Max1: Max1 Intrinsic. ! * intrinsics, MaxExponent: MaxExponent Intrinsic. ! * intrinsics, MaxLoc: MaxLoc Intrinsic. ! * intrinsics, MaxVal: MaxVal Intrinsic. ! * intrinsics, MClock: MClock Intrinsic. ! * intrinsics, MClock8: MClock8 Intrinsic. ! * intrinsics, Merge: Merge Intrinsic. ! * intrinsics, MIL-STD 1753: Fortran Dialect Options. ! * intrinsics, Min: Min Intrinsic. ! * intrinsics, Min0: Min0 Intrinsic. ! * intrinsics, Min1: Min1 Intrinsic. ! * intrinsics, MinExponent: MinExponent Intrinsic. ! * intrinsics, MinLoc: MinLoc Intrinsic. ! * intrinsics, MinVal: MinVal Intrinsic. ! * intrinsics, Mod: Mod Intrinsic. ! * intrinsics, Modulo: Modulo Intrinsic. ! * intrinsics, MvBits: MvBits Intrinsic. ! * intrinsics, Nearest: Nearest Intrinsic. ! * intrinsics, NInt: NInt Intrinsic. ! * intrinsics, Not: Not Intrinsic. ! * intrinsics, Or <1>: Bit Operations on Floating-point Data. ! * intrinsics, Or: Or Intrinsic. ! * intrinsics, others: Other Intrinsics. ! * intrinsics, Pack: Pack Intrinsic. ! * intrinsics, PError: PError Intrinsic. ! * intrinsics, Precision: Precision Intrinsic. ! * intrinsics, Present: Present Intrinsic. ! * intrinsics, Product: Product Intrinsic. ! * intrinsics, QAbs: QAbs Intrinsic. ! * intrinsics, QACos: QACos Intrinsic. ! * intrinsics, QACosD: QACosD Intrinsic. ! * intrinsics, QASin: QASin Intrinsic. ! * intrinsics, QASinD: QASinD Intrinsic. ! * intrinsics, QATan: QATan Intrinsic. ! * intrinsics, QATan2: QATan2 Intrinsic. ! * intrinsics, QATan2D: QATan2D Intrinsic. ! * intrinsics, QATanD: QATanD Intrinsic. ! * intrinsics, QCos: QCos Intrinsic. ! * intrinsics, QCosD: QCosD Intrinsic. ! * intrinsics, QCosH: QCosH Intrinsic. ! * intrinsics, QDiM: QDiM Intrinsic. ! * intrinsics, QExp: QExp Intrinsic. ! * intrinsics, QExt: QExt Intrinsic. ! * intrinsics, QExtD: QExtD Intrinsic. ! * intrinsics, QFloat: QFloat Intrinsic. ! * intrinsics, QInt: QInt Intrinsic. ! * intrinsics, QLog: QLog Intrinsic. ! * intrinsics, QLog10: QLog10 Intrinsic. ! * intrinsics, QMax1: QMax1 Intrinsic. ! * intrinsics, QMin1: QMin1 Intrinsic. ! * intrinsics, QMod: QMod Intrinsic. ! * intrinsics, QNInt: QNInt Intrinsic. ! * intrinsics, QSin: QSin Intrinsic. ! * intrinsics, QSinD: QSinD Intrinsic. ! * intrinsics, QSinH: QSinH Intrinsic. ! * intrinsics, QSqRt: QSqRt Intrinsic. ! * intrinsics, QTan: QTan Intrinsic. ! * intrinsics, QTanD: QTanD Intrinsic. ! * intrinsics, QTanH: QTanH Intrinsic. ! * intrinsics, Radix: Radix Intrinsic. ! * intrinsics, Rand: Rand Intrinsic. ! * intrinsics, Random_Number: Random_Number Intrinsic. ! * intrinsics, Random_Seed: Random_Seed Intrinsic. ! * intrinsics, Range: Range Intrinsic. ! * intrinsics, Real <1>: Real Intrinsic. ! * intrinsics, Real: REAL() and AIMAG() of Complex. ! * intrinsics, RealPart: RealPart Intrinsic. ! * intrinsics, Rename <1>: Rename Intrinsic (function). ! * intrinsics, Rename: Rename Intrinsic (subroutine). ! * intrinsics, Repeat: Repeat Intrinsic. ! * intrinsics, Reshape: Reshape Intrinsic. ! * intrinsics, RRSpacing: RRSpacing Intrinsic. ! * intrinsics, RShift: RShift Intrinsic. ! * intrinsics, Scale: Scale Intrinsic. ! * intrinsics, Scan: Scan Intrinsic. ! * intrinsics, Secnds: Secnds Intrinsic. ! * intrinsics, Second <1>: Second Intrinsic (subroutine). ! * intrinsics, Second: Second Intrinsic (function). ! * intrinsics, Selected_Int_Kind: Selected_Int_Kind Intrinsic. ! * intrinsics, Selected_Real_Kind: Selected_Real_Kind Intrinsic. ! * intrinsics, Set_Exponent: Set_Exponent Intrinsic. ! * intrinsics, Shape: Shape Intrinsic. ! * intrinsics, Shift: Bit Operations on Floating-point Data. ! * intrinsics, Short: Short Intrinsic. ! * intrinsics, Sign: Sign Intrinsic. ! * intrinsics, Signal <1>: Signal Intrinsic (function). ! * intrinsics, Signal: Signal Intrinsic (subroutine). ! * intrinsics, Sin: Sin Intrinsic. ! * intrinsics, SinD: SinD Intrinsic. ! * intrinsics, SinH: SinH Intrinsic. ! * intrinsics, Sleep: Sleep Intrinsic. ! * intrinsics, Sngl: Sngl Intrinsic. ! * intrinsics, SnglQ: SnglQ Intrinsic. ! * intrinsics, Spacing: Spacing Intrinsic. ! * intrinsics, Spread: Spread Intrinsic. ! * intrinsics, SqRt: SqRt Intrinsic. ! * intrinsics, SRand: SRand Intrinsic. ! * intrinsics, Stat <1>: Stat Intrinsic (function). ! * intrinsics, Stat: Stat Intrinsic (subroutine). ! * intrinsics, Sum: Sum Intrinsic. ! * intrinsics, SymLnk <1>: SymLnk Intrinsic (function). ! * intrinsics, SymLnk: SymLnk Intrinsic (subroutine). ! * intrinsics, System <1>: System Intrinsic (function). ! * intrinsics, System: System Intrinsic (subroutine). ! * intrinsics, System_Clock: System_Clock Intrinsic. ! * intrinsics, table of: Table of Intrinsic Functions. ! * intrinsics, Tan: Tan Intrinsic. ! * intrinsics, TanD: TanD Intrinsic. ! * intrinsics, TanH: TanH Intrinsic. ! * intrinsics, Time <1>: Time Intrinsic (VXT). ! * intrinsics, Time: Time Intrinsic (UNIX). ! * intrinsics, Time8: Time8 Intrinsic. ! * intrinsics, Tiny: Tiny Intrinsic. ! * intrinsics, Transfer: Transfer Intrinsic. ! * intrinsics, Transpose: Transpose Intrinsic. ! * intrinsics, Trim: Trim Intrinsic. ! * intrinsics, TtyNam <1>: TtyNam Intrinsic (function). ! * intrinsics, TtyNam: TtyNam Intrinsic (subroutine). ! * intrinsics, UBound: UBound Intrinsic. ! * intrinsics, UMask <1>: UMask Intrinsic (function). ! * intrinsics, UMask: UMask Intrinsic (subroutine). ! * intrinsics, UNIX: Fortran Dialect Options. ! * intrinsics, Unlink <1>: Unlink Intrinsic (function). ! * intrinsics, Unlink: Unlink Intrinsic (subroutine). ! * intrinsics, Unpack: Unpack Intrinsic. ! * intrinsics, Verify: Verify Intrinsic. ! * intrinsics, VXT: Fortran Dialect Options. ! * intrinsics, XOr: XOr Intrinsic. ! * intrinsics, ZAbs: ZAbs Intrinsic. ! * intrinsics, ZCos: ZCos Intrinsic. ! * intrinsics, ZExp: ZExp Intrinsic. ! * intrinsics, ZExt: ZExt Intrinsic. ! * intrinsics, ZLog: ZLog Intrinsic. ! * intrinsics, ZSin: ZSin Intrinsic. ! * intrinsics, ZSqRt: ZSqRt Intrinsic. ! * Introduction: Top. ! * invalid assembly code: Bug Criteria. ! * invalid input: Bug Criteria. ! * IOr intrinsic: IOr Intrinsic. ! * IOSTAT=: Run-time Library Errors. ! * IRand intrinsic: IRand Intrinsic. ! * IsaTty intrinsic: IsaTty Intrinsic. ! * IShft intrinsic: IShft Intrinsic. ! * IShftC intrinsic: IShftC Intrinsic. ! * ISign intrinsic: ISign Intrinsic. ! * iterative DO: Optimize Options. ! * ITime intrinsic: ITime Intrinsic. ! * ix86 floating-point: Floating-point precision. ! * ix86 FPU stack: Inconsistent Calling Sequences. ! * IZExt intrinsic: IZExt Intrinsic. ! * JCB002 program: Generics and Specifics. ! * JCB003 program: CMPAMBIG. ! * JIAbs intrinsic: JIAbs Intrinsic. ! * JIAnd intrinsic: JIAnd Intrinsic. ! * JIBClr intrinsic: JIBClr Intrinsic. ! * JIBits intrinsic: JIBits Intrinsic. ! * JIBSet intrinsic: JIBSet Intrinsic. ! * JIDiM intrinsic: JIDiM Intrinsic. ! * JIDInt intrinsic: JIDInt Intrinsic. ! * JIDNnt intrinsic: JIDNnt Intrinsic. ! * JIEOr intrinsic: JIEOr Intrinsic. ! * JIFix intrinsic: JIFix Intrinsic. ! * JInt intrinsic: JInt Intrinsic. ! * JIOr intrinsic: JIOr Intrinsic. ! * JIQint intrinsic: JIQint Intrinsic. ! * JIQNnt intrinsic: JIQNnt Intrinsic. ! * JIShft intrinsic: JIShft Intrinsic. ! * JIShftC intrinsic: JIShftC Intrinsic. ! * JISign intrinsic: JISign Intrinsic. ! * JMax0 intrinsic: JMax0 Intrinsic. ! * JMax1 intrinsic: JMax1 Intrinsic. ! * JMin0 intrinsic: JMin0 Intrinsic. ! * JMin1 intrinsic: JMin1 Intrinsic. ! * JMod intrinsic: JMod Intrinsic. ! * JNInt intrinsic: JNInt Intrinsic. ! * JNot intrinsic: JNot Intrinsic. ! * JZExt intrinsic: JZExt Intrinsic. ! * keywords, RECURSIVE: RECURSIVE Keyword. ! * Kill intrinsic <1>: Kill Intrinsic (function). ! * Kill intrinsic: Kill Intrinsic (subroutine). ! * Kind intrinsic: Kind Intrinsic. ! * KIND= notation: Kind Notation. ! * known causes of trouble: Trouble. ! * lack of recursion: RECURSIVE Keyword. ! * language, dialect options: Fortran Dialect Options. ! * language, features: Direction of Language Development. ! * language, incorrect use of: What is GNU Fortran?. ! * large aggregate areas: Known Bugs. ! * large common blocks: Large Common Blocks. ! * layout of COMMON blocks: Aligned Data. ! * LBound intrinsic: LBound Intrinsic. ! * ld command: What is GNU Fortran?. ! * ld, can't find _main: Cannot Link Fortran Programs. ! * ld, can't find strange names: Cannot Link Fortran Programs. ! * ld, error linking user code: Cannot Link Fortran Programs. ! * ld, errors: Large Common Blocks. ! * left angle: Character Set. ! * left bracket: Character Set. ! * legacy code: Collected Fortran Wisdom. ! * Len intrinsic: Len Intrinsic. ! * Len_Trim intrinsic: Len_Trim Intrinsic. ! * length of source lines: Fortran Dialect Options. ! * letters, lowercase: Case Sensitivity. ! * letters, uppercase: Case Sensitivity. ! * LGe intrinsic: LGe Intrinsic. ! * LGt intrinsic: LGt Intrinsic. ! * libc, non-ANSI or non-default: Strange Behavior at Run Time. ! * libf2c library: What is GNU Fortran?. ! * libg2c library: What is GNU Fortran?. ! * libraries: What is GNU Fortran?. ! * libraries, containing BLOCK DATA: Block Data and Libraries. ! * libraries, libf2c: What is GNU Fortran?. ! * libraries, libg2c: What is GNU Fortran?. ! * limits, array dimensions: Compiler Limits. ! * limits, array size: Array Size. ! * limits, compiler: Compiler Limits. ! * limits, continuation lines <1>: Compiler Limits. ! * limits, continuation lines: Continuation Line. ! * limits, lengths of names <1>: Compiler Limits. ! * limits, lengths of names: Syntactic Items. ! * limits, lengths of source lines: Fortran Dialect Options. ! * limits, multi-dimension arrays: Array Size. ! * limits, on character-variable length: Character-variable Length. ! * limits, rank: Compiler Limits. ! * limits, run-time library: Run-time Environment Limits. ! * limits, timings <1>: Secnds Intrinsic. ! * limits, timings <2>: DTime Intrinsic (function). ! * limits, timings <3>: Time8 Intrinsic. ! * limits, timings <4>: Time Intrinsic (UNIX). ! * limits, timings <5>: System_Clock Intrinsic. ! * limits, timings <6>: Second Intrinsic (subroutine). ! * limits, timings <7>: Second Intrinsic (function). ! * limits, timings <8>: MClock8 Intrinsic. ! * limits, timings <9>: MClock Intrinsic. ! * limits, timings <10>: ETime Intrinsic (function). ! * limits, timings <11>: ETime Intrinsic (subroutine). ! * limits, timings <12>: DTime Intrinsic (subroutine). ! * limits, timings: CPU_Time Intrinsic. ! * limits, Y10K <1>: Time Intrinsic (VXT). ! * limits, Y10K <2>: IDate Intrinsic (UNIX). ! * limits, Y10K <3>: FDate Intrinsic (function). ! * limits, Y10K <4>: FDate Intrinsic (subroutine). ! * limits, Y10K: Date_and_Time Intrinsic. ! * limits, Y2K: IDate Intrinsic (VXT). ! * lines: Lines. ! * lines, continuation: Continuation Line. ! * lines, length: Fortran Dialect Options. ! * lines, long: Long Lines. ! * lines, short: Short Lines. ! * Link intrinsic <1>: Link Intrinsic (function). ! * Link intrinsic: Link Intrinsic (subroutine). ! * linking: What is GNU Fortran?. ! * linking against non-standard library: Strange Behavior at Run Time. ! * linking error for user code: Cannot Link Fortran Programs. ! * linking error, user code: Cannot Link Fortran Programs. ! * linking with C: Interoperating with C and C++. ! * linking, errors: Large Common Blocks. ! * LLe intrinsic: LLe Intrinsic. ! * LLt intrinsic: LLt Intrinsic. ! * LnBlnk intrinsic: LnBlnk Intrinsic. ! * Loc intrinsic: Loc Intrinsic. ! * local equivalence areas <1>: Known Bugs. ! * local equivalence areas: Local Equivalence Areas. ! * Log intrinsic: Log Intrinsic. ! * Log10 intrinsic: Log10 Intrinsic. ! * logical expressions, comparing: Equivalence Versus Equality. ! * Logical intrinsic: Logical Intrinsic. ! * LOGICAL(KIND=1) type: Compiler Types. ! * LOGICAL(KIND=2) type: Compiler Types. ! * LOGICAL(KIND=3) type: Compiler Types. ! * LOGICAL(KIND=6) type: Compiler Types. ! * LOGICAL*1 support: Popular Non-standard Types. ! * Long intrinsic: Long Intrinsic. ! * long source lines: Long Lines. ! * long time: Timer Wraparounds. ! * loops, optimizing: Optimize Options. ! * loops, speeding up: Optimize Options. ! * loops, unrolling: Optimize Options. ! * lowercase letters: Case Sensitivity. ! * LShift intrinsic: LShift Intrinsic. ! * LStat intrinsic <1>: LStat Intrinsic (function). ! * LStat intrinsic: LStat Intrinsic (subroutine). ! * LTime intrinsic: LTime Intrinsic. ! * machine code: What is GNU Fortran?. ! * macro options: Shorthand Options. ! * main program unit, debugging: Main Program Unit. ! * main(): Main Program Unit. ! * MAIN__(): Main Program Unit. ! * Makefile example: Bug Criteria. ! * MAP statement: STRUCTURE UNION RECORD MAP. ! * MatMul intrinsic: MatMul Intrinsic. ! * Max intrinsic: Max Intrinsic. ! * Max0 intrinsic: Max0 Intrinsic. ! * Max1 intrinsic: Max1 Intrinsic. ! * MaxExponent intrinsic: MaxExponent Intrinsic. ! * maximum number of dimensions: Compiler Limits. ! * maximum rank: Compiler Limits. ! * maximum unit number: Large File Unit Numbers. ! * MaxLoc intrinsic: MaxLoc Intrinsic. ! * MaxVal intrinsic: MaxVal Intrinsic. ! * MClock intrinsic: MClock Intrinsic. ! * MClock8 intrinsic: MClock8 Intrinsic. ! * memory usage, of compiler: Known Bugs. ! * Merge intrinsic: Merge Intrinsic. ! * messages, run-time: Run-time Library Errors. ! * messages, warning: Warning Options. ! * messages, warning and error: Warnings and Errors. ! * mil intrinsics group: Intrinsic Groups. ! * MIL-STD 1753 <1>: MIL-STD 1753. ! * MIL-STD 1753 <2>: END DO. ! * MIL-STD 1753 <3>: DO WHILE. ! * MIL-STD 1753: Fortran Dialect Options. ! * Min intrinsic: Min Intrinsic. ! * Min0 intrinsic: Min0 Intrinsic. ! * Min1 intrinsic: Min1 Intrinsic. ! * MinExponent intrinsic: MinExponent Intrinsic. ! * MinLoc intrinsic: MinLoc Intrinsic. ! * MinVal intrinsic: MinVal Intrinsic. ! * missing debug features: Debugging Options. ! * mistakes: What is GNU Fortran?. ! * mistyped functions: Not My Type. ! * mistyped variables: Not My Type. ! * Mod intrinsic: Mod Intrinsic. ! * modifying g77: Overall Options. ! * Modulo intrinsic: Modulo Intrinsic. ! * multi-dimension arrays: Array Size. ! * MvBits intrinsic: MvBits Intrinsic. ! * MXUNIT: Large File Unit Numbers. ! * name space: Mangling of Names. ! * NAMELIST statement: NAMELIST. ! * naming conflicts: Multiple Definitions of External Names. ! * naming issues: Mangling of Names. ! * naming programs: Nothing Happens. ! * NaN values: Floating-point Exception Handling. ! * Nearest intrinsic: Nearest Intrinsic. ! * negative forms of options: Invoking G77. ! * negative time: Timer Wraparounds. ! * Netlib <1>: Increasing Precision/Range. ! * Netlib: C Interfacing Tools. ! * network file system: Output Assumed To Flush. ! * new users: Getting Started. ! * newbies: Getting Started. ! * NeXTStep problems: NeXTStep Problems. ! * NFS: Output Assumed To Flush. ! * NInt intrinsic: NInt Intrinsic. ! * nonportable conversions: Nonportable Conversions. ! * Not intrinsic: Not Intrinsic. ! * nothing happens: Nothing Happens. ! * null arguments: Ugly Null Arguments. ! * null byte, trailing: Character and Hollerith Constants. ! * null CHARACTER strings: Character Type. ! * number of continuation lines: Continuation Line. ! * number of dimensions, maximum: Compiler Limits. ! * number of trips: Loops. ! * O edit descriptor: I/O. ! * octal constants: Double Quote Meaning. ! * omitting arguments: Ugly Null Arguments. ! * one-trip DO loops: Fortran Dialect Options. ! * open angle: Character Set. ! * open bracket: Character Set. ! * OPEN statement: OPEN CLOSE and INQUIRE Keywords. ! * optimization, better: Better Optimization. ! * optimization, for Pentium: Aligned Data. ! * optimize options: Optimize Options. ! * options, --driver <1>: Changes. ! * options, --driver: News. ! * options, -falias-check <1>: Aliasing Assumed To Work. ! * options, -falias-check: Code Gen Options. ! * options, -fargument-alias <1>: Aliasing Assumed To Work. ! * options, -fargument-alias: Code Gen Options. ! * options, -fargument-noalias <1>: Aliasing Assumed To Work. ! * options, -fargument-noalias: Code Gen Options. ! * options, -fbadu77-intrinsics-delete: Fortran Dialect Options. ! * options, -fbadu77-intrinsics-disable: Fortran Dialect Options. ! * options, -fbadu77-intrinsics-enable: Fortran Dialect Options. ! * options, -fbadu77-intrinsics-hide: Fortran Dialect Options. ! * options, -fcaller-saves: Optimize Options. ! * options, -fcase-initcap: Fortran Dialect Options. ! * options, -fcase-lower: Fortran Dialect Options. ! * options, -fcase-preserve: Fortran Dialect Options. ! * options, -fcase-strict-lower: Fortran Dialect Options. ! * options, -fcase-strict-upper: Fortran Dialect Options. ! * options, -fcase-upper: Fortran Dialect Options. ! * options, -fdebug-kludge: Code Gen Options. ! * options, -fdelayed-branch: Optimize Options. ! * options, -fdollar-ok: Fortran Dialect Options. ! * options, -femulate-complex: Code Gen Options. ! * options, -fexpensive-optimizations: Optimize Options. ! * options, -ff2c-intrinsics-delete: Fortran Dialect Options. ! * options, -ff2c-intrinsics-disable: Fortran Dialect Options. ! * options, -ff2c-intrinsics-enable: Fortran Dialect Options. ! * options, -ff2c-intrinsics-hide: Fortran Dialect Options. ! * options, -ff2c-library: Code Gen Options. ! * options, -ff66: Shorthand Options. ! * options, -ff77: Shorthand Options. ! * options, -ff90: Fortran Dialect Options. ! * options, -ff90-intrinsics-delete: Fortran Dialect Options. ! * options, -ff90-intrinsics-disable: Fortran Dialect Options. ! * options, -ff90-intrinsics-enable: Fortran Dialect Options. ! * options, -ff90-intrinsics-hide: Fortran Dialect Options. ! * options, -ffast-math: Optimize Options. ! * options, -ffixed-line-length-N: Fortran Dialect Options. ! * options, -ffloat-store: Optimize Options. ! * options, -fforce-addr: Optimize Options. ! * options, -fforce-mem: Optimize Options. ! * options, -ffree-form: Fortran Dialect Options. ! * options, -fgnu-intrinsics-delete: Fortran Dialect Options. ! * options, -fgnu-intrinsics-disable: Fortran Dialect Options. ! * options, -fgnu-intrinsics-enable: Fortran Dialect Options. ! * options, -fgnu-intrinsics-hide: Fortran Dialect Options. ! * options, -fGROUP-intrinsics-hide: Overly Convenient Options. ! * options, -finit-local-zero <1>: Overly Convenient Options. ! * options, -finit-local-zero: Code Gen Options. ! * options, -fintrin-case-any: Fortran Dialect Options. ! * options, -fintrin-case-initcap: Fortran Dialect Options. ! * options, -fintrin-case-lower: Fortran Dialect Options. ! * options, -fintrin-case-upper: Fortran Dialect Options. ! * options, -fmatch-case-any: Fortran Dialect Options. ! * options, -fmatch-case-initcap: Fortran Dialect Options. ! * options, -fmatch-case-lower: Fortran Dialect Options. ! * options, -fmatch-case-upper: Fortran Dialect Options. ! * options, -fmil-intrinsics-delete: Fortran Dialect Options. ! * options, -fmil-intrinsics-disable: Fortran Dialect Options. ! * options, -fmil-intrinsics-enable: Fortran Dialect Options. ! * options, -fmil-intrinsics-hide: Fortran Dialect Options. ! * options, -fno-argument-noalias-global <1>: Aliasing Assumed To Work. ! * options, -fno-argument-noalias-global: Code Gen Options. ! * options, -fno-automatic <1>: Overly Convenient Options. ! * options, -fno-automatic: Code Gen Options. ! * options, -fno-backslash: Fortran Dialect Options. ! * options, -fno-common: Code Gen Options. ! * options, -fno-f2c <1>: Avoid f2c Compatibility. ! * options, -fno-f2c: Code Gen Options. ! * options, -fno-f77: Shorthand Options. ! * options, -fno-fixed-form: Fortran Dialect Options. ! * options, -fno-globals: Code Gen Options. ! * options, -fno-ident: Code Gen Options. ! * options, -fno-inline: Optimize Options. ! * options, -fno-move-all-movables: Optimize Options. ! * options, -fno-reduce-all-givs: Optimize Options. ! * options, -fno-rerun-loop-opt: Optimize Options. ! * options, -fno-second-underscore: Code Gen Options. ! * options, -fno-silent: Overall Options. ! * options, -fno-ugly: Shorthand Options. ! * options, -fno-ugly-args: Fortran Dialect Options. ! * options, -fno-ugly-init: Fortran Dialect Options. ! * options, -fno-underscoring <1>: Names. ! * options, -fno-underscoring: Code Gen Options. ! * options, -fonetrip: Fortran Dialect Options. ! * options, -fpack-struct: Code Gen Options. ! * options, -fpcc-struct-return: Code Gen Options. ! * options, -fpedantic: Warning Options. ! * options, -fPIC: News. ! * options, -freg-struct-return: Code Gen Options. ! * options, -frerun-cse-after-loop: Optimize Options. ! * options, -fschedule-insns: Optimize Options. ! * options, -fschedule-insns2: Optimize Options. ! * options, -fset-g77-defaults: Overall Options. ! * options, -fshort-double: Code Gen Options. ! * options, -fsource-case-lower: Fortran Dialect Options. ! * options, -fsource-case-preserve: Fortran Dialect Options. ! * options, -fsource-case-upper: Fortran Dialect Options. ! * options, -fstrength-reduce: Optimize Options. ! * options, -fsymbol-case-any: Fortran Dialect Options. ! * options, -fsymbol-case-initcap: Fortran Dialect Options. ! * options, -fsymbol-case-lower: Fortran Dialect Options. ! * options, -fsymbol-case-upper: Fortran Dialect Options. ! * options, -fsyntax-only: Warning Options. ! * options, -ftypeless-boz: Fortran Dialect Options. ! * options, -fugly: Shorthand Options. ! * options, -fugly-assign: Fortran Dialect Options. ! * options, -fugly-assumed: Fortran Dialect Options. ! * options, -fugly-comma: Fortran Dialect Options. ! * options, -fugly-complex: Fortran Dialect Options. ! * options, -fugly-logint: Fortran Dialect Options. ! * options, -funix-intrinsics-delete: Fortran Dialect Options. ! * options, -funix-intrinsics-disable: Fortran Dialect Options. ! * options, -funix-intrinsics-enable: Fortran Dialect Options. ! * options, -funix-intrinsics-hide: Fortran Dialect Options. ! * options, -funroll-all-loops: Optimize Options. ! * options, -funroll-loops: Optimize Options. ! * options, -fversion: Overall Options. ! * options, -fvxt: Fortran Dialect Options. ! * options, -fvxt-intrinsics-delete: Fortran Dialect Options. ! * options, -fvxt-intrinsics-disable: Fortran Dialect Options. ! * options, -fvxt-intrinsics-enable: Fortran Dialect Options. ! * options, -fvxt-intrinsics-hide: Fortran Dialect Options. ! * options, -fzeros: Code Gen Options. ! * options, -g: Debugging Options. ! * options, -I-: Directory Options. ! * options, -Idir: Directory Options. ! * options, -malign-double <1>: Aligned Data. ! * options, -malign-double: Optimize Options. ! * options, -Nl: Compiler Limits. ! * options, -Nx: Compiler Limits. ! * options, -pedantic: Warning Options. ! * options, -pedantic-errors: Warning Options. ! * options, -v: G77 and GCC. ! * options, -W: Warning Options. ! * options, -w: Warning Options. ! * options, -Waggregate-return: Warning Options. ! * options, -Wall: Warning Options. ! * options, -Wcomment: Warning Options. ! * options, -Wconversion: Warning Options. ! * options, -Werror: Warning Options. ! * options, -Wformat: Warning Options. ! * options, -Wid-clash-LEN: Warning Options. ! * options, -Wimplicit: Warning Options. ! * options, -Wlarger-than-LEN: Warning Options. ! * options, -Wno-globals: Warning Options. ! * options, -Wparentheses: Warning Options. ! * options, -Wredundant-decls: Warning Options. ! * options, -Wshadow: Warning Options. ! * options, -Wsurprising: Warning Options. ! * options, -Wswitch: Warning Options. ! * options, -Wtraditional: Warning Options. ! * options, -Wuninitialized: Warning Options. ! * options, -Wunused: Warning Options. ! * options, -x f77-cpp-input: LEX. ! * options, adding: Adding Options. ! * options, code generation: Code Gen Options. ! * options, debugging: Debugging Options. ! * options, dialect: Fortran Dialect Options. ! * options, directory search: Directory Options. ! * options, GNU Fortran command: Invoking G77. ! * options, macro: Shorthand Options. ! * options, negative forms: Invoking G77. ! * options, optimization: Optimize Options. ! * options, overall: Overall Options. ! * options, overly convenient: Overly Convenient Options. ! * options, preprocessor: Preprocessor Options. ! * options, shorthand: Shorthand Options. ! * options, warnings: Warning Options. ! * Or intrinsic <1>: Bit Operations on Floating-point Data. ! * Or intrinsic: Or Intrinsic. ! * order of evaluation, side effects: Order of Side Effects. ! * ordering, array: Arrays. ! * other intrinsics: Other Intrinsics. ! * output, flushing: Output Assumed To Flush. ! * overall options: Overall Options. ! * overflow: Warning Options. ! * overlapping arguments: Aliasing Assumed To Work. ! * overlays: Aliasing Assumed To Work. ! * overly convenient options: Overly Convenient Options. ! * overwritten data: Strange Behavior at Run Time. ! * Pack intrinsic: Pack Intrinsic. ! * padding: Known Bugs. ! * parallel processing: Support for Threads. ! * PARAMETER statement <1>: Old-style PARAMETER Statements. ! * PARAMETER statement: Intrinsics in PARAMETER Statements. ! * parameters, unused: Warning Options. ! * paths, search: Directory Options. ! * PDB: Portable Unformatted Files. ! * pedantic compilation: Pedantic Compilation. ! * Pentium optimizations: Aligned Data. ! * percent sign: Character Set. ! * PError intrinsic: PError Intrinsic. ! * placing initialization statements: Initializing Before Specifying. ! * POINTER statement: POINTER Statements. ! * pointers <1>: Ugly Assigned Labels. ! * pointers: Kind Notation. ! * Poking the bear: Philosophy of Code Generation. ! * porting, simplify: Simplify Porting. ! * pound sign: Character Set. ! * Precision intrinsic: Precision Intrinsic. ! * precision, increasing: Increasing Precision/Range. ! * prefix-radix constants: Fortran Dialect Options. ! * preprocessor <1>: LEX. ! * preprocessor <2>: Bug Reporting. ! * preprocessor <3>: Cpp-style directives. ! * preprocessor <4>: Overall Options. ! * preprocessor: What is GNU Fortran?. ! * preprocessor options: Preprocessor Options. ! * Present intrinsic: Present Intrinsic. ! * printing compilation status: Overall Options. ! * printing main source: Known Bugs. ! * printing version information <1>: Overall Options. ! * printing version information: What is GNU Fortran?. ! * procedures: Procedures. ! * Product intrinsic: Product Intrinsic. ! * PROGRAM statement: Main Program Unit. ! * programs, cc1: What is GNU Fortran?. ! * programs, cc1plus: What is GNU Fortran?. ! * programs, compiling: G77 and GCC. ! * programs, cpp <1>: LEX. ! * programs, cpp <2>: Bug Reporting. ! * programs, cpp <3>: Preprocessor Options. ! * programs, cpp <4>: Overall Options. ! * programs, cpp: What is GNU Fortran?. ! * programs, f771: What is GNU Fortran?. ! * programs, ratfor: Overall Options. ! * programs, speeding up: Faster Programs. ! * programs, test: Nothing Happens. ! * projects: Projects. ! * Q edit descriptor: Q Edit Descriptor. ! * QAbs intrinsic: QAbs Intrinsic. ! * QACos intrinsic: QACos Intrinsic. ! * QACosD intrinsic: QACosD Intrinsic. ! * QASin intrinsic: QASin Intrinsic. ! * QASinD intrinsic: QASinD Intrinsic. ! * QATan intrinsic: QATan Intrinsic. ! * QATan2 intrinsic: QATan2 Intrinsic. ! * QATan2D intrinsic: QATan2D Intrinsic. ! * QATanD intrinsic: QATanD Intrinsic. ! * QCos intrinsic: QCos Intrinsic. ! * QCosD intrinsic: QCosD Intrinsic. ! * QCosH intrinsic: QCosH Intrinsic. ! * QDiM intrinsic: QDiM Intrinsic. ! * QExp intrinsic: QExp Intrinsic. ! * QExt intrinsic: QExt Intrinsic. ! * QExtD intrinsic: QExtD Intrinsic. ! * QFloat intrinsic: QFloat Intrinsic. ! * QInt intrinsic: QInt Intrinsic. ! * QLog intrinsic: QLog Intrinsic. ! * QLog10 intrinsic: QLog10 Intrinsic. ! * QMax1 intrinsic: QMax1 Intrinsic. ! * QMin1 intrinsic: QMin1 Intrinsic. ! * QMod intrinsic: QMod Intrinsic. ! * QNInt intrinsic: QNInt Intrinsic. ! * QSin intrinsic: QSin Intrinsic. ! * QSinD intrinsic: QSinD Intrinsic. ! * QSinH intrinsic: QSinH Intrinsic. ! * QSqRt intrinsic: QSqRt Intrinsic. ! * QTan intrinsic: QTan Intrinsic. ! * QTanD intrinsic: QTanD Intrinsic. ! * QTanH intrinsic: QTanH Intrinsic. ! * question mark: Character Set. ! * questionable instructions: What is GNU Fortran?. ! * Radix intrinsic: Radix Intrinsic. ! * Rand intrinsic: Rand Intrinsic. ! * Random_Number intrinsic: Random_Number Intrinsic. ! * Random_Seed intrinsic: Random_Seed Intrinsic. ! * range checking: Code Gen Options. ! * Range intrinsic: Range Intrinsic. ! * range, increasing: Increasing Precision/Range. ! * rank, maximum: Compiler Limits. ! * ratfor: Overall Options. ! * Ratfor preprocessor: Overall Options. ! * READONLY: READONLY Keyword. ! * reads and writes, scheduling: Aliasing Assumed To Work. ! * Real intrinsic <1>: Real Intrinsic. ! * Real intrinsic: REAL() and AIMAG() of Complex. ! * real part: Ugly Complex Part Extraction. ! * REAL(KIND=1) type: Compiler Types. ! * REAL(KIND=2) type: Compiler Types. ! * REAL*16 support: Full Support for Compiler Types. ! * RealPart intrinsic: RealPart Intrinsic. ! * recent versions <1>: Changes. ! * recent versions: News. ! * RECORD statement: STRUCTURE UNION RECORD MAP. ! * recursion, lack of: RECURSIVE Keyword. ! * RECURSIVE keyword: RECURSIVE Keyword. ! * reference works: Language. ! * Rename intrinsic <1>: Rename Intrinsic (function). ! * Rename intrinsic: Rename Intrinsic (subroutine). ! * Repeat intrinsic: Repeat Intrinsic. ! * reporting bugs: Bugs. ! * reporting compilation status: Overall Options. ! * Reshape intrinsic: Reshape Intrinsic. ! * results, inconsistent: Floating-point Errors. ! * RETURN statement <1>: Alternate Returns. ! * RETURN statement: Functions. ! * return type of functions: Functions. ! * right angle: Character Set. ! * right bracket: Character Set. ! * rounding errors: Floating-point Errors. ! * row-major ordering: Arrays. ! * RRSpacing intrinsic: RRSpacing Intrinsic. ! * RShift intrinsic: RShift Intrinsic. ! * run-time, dynamic allocation: Arbitrary Concatenation. ! * run-time, initialization: Startup Code. ! * run-time, library: What is GNU Fortran?. ! * run-time, options: Code Gen Options. ! * SAVE statement: Code Gen Options. ! * saved variables: Variables Assumed To Be Saved. ! * Scale intrinsic: Scale Intrinsic. ! * Scan intrinsic: Scan Intrinsic. ! * scheduling of reads and writes: Aliasing Assumed To Work. ! * scope <1>: Scope and Classes of Names. ! * scope: Scope of Names and Labels. ! * search path: Directory Options. ! * search paths, for included files: Directory Options. ! * Secnds intrinsic: Secnds Intrinsic. ! * Second intrinsic <1>: Second Intrinsic (subroutine). ! * Second intrinsic: Second Intrinsic (function). ! * segmentation violation <1>: Strange Behavior at Run Time. ! * segmentation violation <2>: Stack Overflow. ! * segmentation violation: NeXTStep Problems. ! * Selected_Int_Kind intrinsic: Selected_Int_Kind Intrinsic. ! * Selected_Real_Kind intrinsic: Selected_Real_Kind Intrinsic. ! * semicolon <1>: Character Set. ! * semicolon: Statements Comments Lines. ! * sequence numbers: Better Source Model. ! * Set_Exponent intrinsic: Set_Exponent Intrinsic. ! * Shape intrinsic: Shape Intrinsic. ! * SHARED: READONLY Keyword. ! * Shift intrinsic: Bit Operations on Floating-point Data. ! * Short intrinsic: Short Intrinsic. ! * short source lines: Short Lines. ! * short time: Timer Wraparounds. ! * shorthand options: Shorthand Options. ! * side effects, order of evaluation: Order of Side Effects. ! * Sign intrinsic: Sign Intrinsic. ! * signal 11: Signal 11 and Friends. ! * Signal intrinsic <1>: Signal Intrinsic (function). ! * Signal intrinsic: Signal Intrinsic (subroutine). ! * signature of procedures: Procedures. ! * simplify porting: Simplify Porting. ! * Sin intrinsic: Sin Intrinsic. ! * SinD intrinsic: SinD Intrinsic. ! * SinH intrinsic: SinH Intrinsic. ! * Sleep intrinsic: Sleep Intrinsic. ! * Sngl intrinsic: Sngl Intrinsic. ! * SnglQ intrinsic: SnglQ Intrinsic. ! * Solaris: Strange Behavior at Run Time. ! * source code <1>: Case Sensitivity. ! * source code <2>: Source Form. ! * source code <3>: Lines. ! * source code: What is GNU Fortran?. ! * source file: What is GNU Fortran?. ! * source file format <1>: Case Sensitivity. ! * source file format <2>: Source Form. ! * source file format <3>: Lines. ! * source file format: Fortran Dialect Options. ! * source format <1>: Source Form. ! * source format: Lines. ! * source lines, long: Long Lines. ! * source lines, short: Short Lines. ! * space <1>: Lines. ! * space: Character Set. ! * space, endless printing of: Strange Behavior at Run Time. ! * space, padding with: Short Lines. ! * Spacing intrinsic: Spacing Intrinsic. ! * SPC <1>: Lines. ! * SPC: Character Set. ! * speed, of compiler: Known Bugs. ! * speed, of loops: Optimize Options. ! * speed, of programs: Faster Programs. ! * spills of floating-point results: Floating-point Errors. ! * Spread intrinsic: Spread Intrinsic. ! * SqRt intrinsic: SqRt Intrinsic. ! * SRand intrinsic: SRand Intrinsic. ! * stack, 387 coprocessor: News. ! * stack, aligned: Aligned Data. ! * stack, overflow: Stack Overflow. ! * standard, ANSI FORTRAN 77: Language. ! * standard, support for: Standard Support. ! * startup code: Startup Code. ! * Stat intrinsic <1>: Stat Intrinsic (function). ! * Stat intrinsic: Stat Intrinsic (subroutine). ! * statement labels, assigned: Assigned Statement Labels. ! * statements, ACCEPT: TYPE and ACCEPT I/O Statements. ! * statements, ASSIGN <1>: Assigned Statement Labels. ! * statements, ASSIGN: Ugly Assigned Labels. ! * statements, AUTOMATIC: AUTOMATIC Statement. ! * statements, BLOCK DATA <1>: Multiple Definitions of External Names. ! * statements, BLOCK DATA: Block Data and Libraries. ! * statements, CLOSE: OPEN CLOSE and INQUIRE Keywords. ! * statements, COMMON <1>: Multiple Definitions of External Names. ! * statements, COMMON: Common Blocks. ! * statements, COMPLEX: Complex Variables. ! * statements, CYCLE: CYCLE and EXIT. ! * statements, DATA <1>: Known Bugs. ! * statements, DATA: Code Gen Options. ! * statements, DECODE: ENCODE and DECODE. ! * statements, DIMENSION <1>: Array Bounds Expressions. ! * statements, DIMENSION <2>: Adjustable Arrays. ! * statements, DIMENSION: Arrays. ! * statements, DO <1>: Loops. ! * statements, DO: Warning Options. ! * statements, ENCODE: ENCODE and DECODE. ! * statements, ENTRY: Alternate Entry Points. ! * statements, EQUIVALENCE: Local Equivalence Areas. ! * statements, EXIT: CYCLE and EXIT. ! * statements, FORMAT: Expressions in FORMAT Statements. ! * statements, FUNCTION <1>: Functions. ! * statements, FUNCTION: Procedures. ! * statements, GOTO: Assigned Statement Labels. ! * statements, IMPLICIT CHARACTER*(*): Limitation on Implicit Declarations. ! * statements, INQUIRE: OPEN CLOSE and INQUIRE Keywords. ! * statements, MAP: STRUCTURE UNION RECORD MAP. ! * statements, NAMELIST: NAMELIST. ! * statements, OPEN: OPEN CLOSE and INQUIRE Keywords. ! * statements, PARAMETER <1>: Old-style PARAMETER Statements. ! * statements, PARAMETER: Intrinsics in PARAMETER Statements. ! * statements, POINTER: POINTER Statements. ! * statements, PROGRAM: Main Program Unit. ! * statements, RECORD: STRUCTURE UNION RECORD MAP. ! * statements, RETURN <1>: Alternate Returns. ! * statements, RETURN: Functions. ! * statements, SAVE: Code Gen Options. ! * statements, separated by semicolon: Statements Comments Lines. ! * statements, STRUCTURE: STRUCTURE UNION RECORD MAP. ! * statements, SUBROUTINE <1>: Alternate Returns. ! * statements, SUBROUTINE: Procedures. ! * statements, TYPE: TYPE and ACCEPT I/O Statements. ! * statements, UNION: STRUCTURE UNION RECORD MAP. ! * STATIC: AUTOMATIC Statement. ! * static variables: Variables Assumed To Be Saved. ! * status, compilation: Overall Options. ! * storage association: Aliasing Assumed To Work. ! * strings, empty: Character Type. ! * STRUCTURE statement: STRUCTURE UNION RECORD MAP. ! * structures: Known Bugs. ! * submodels: Use Submodel Options. ! * SUBROUTINE statement <1>: Alternate Returns. ! * SUBROUTINE statement: Procedures. ! * subroutines: Alternate Returns. ! * subscript checking: Code Gen Options. ! * substring checking: Code Gen Options. ! * suffixes, file name: Overall Options. ! * Sum intrinsic: Sum Intrinsic. ! * support, Alpha: Known Bugs. ! * support, ELF: News. ! * support, f77: Backslash in Constants. ! * support, FORTRAN 77: Standard Support. ! * support, Fortran 90: Fortran 90 Support. ! * support, gdb: Debugger Problems. ! * suppressing warnings: Warning Options. ! * symbol names <1>: Names. ! * symbol names: Fortran Dialect Options. ! * symbol names, scope and classes: Scope and Classes of Names. ! * symbol names, transforming: Code Gen Options. ! * symbol names, underscores: Code Gen Options. ! * SymLnk intrinsic <1>: SymLnk Intrinsic (function). ! * SymLnk intrinsic: SymLnk Intrinsic (subroutine). ! * synchronous write errors: Output Assumed To Flush. ! * syntax checking: Warning Options. ! * System intrinsic <1>: System Intrinsic (function). ! * System intrinsic: System Intrinsic (subroutine). ! * System_Clock intrinsic: System_Clock Intrinsic. ! * tab character: Tabs. ! * table of intrinsics: Table of Intrinsic Functions. ! * Tan intrinsic: Tan Intrinsic. ! * TanD intrinsic: TanD Intrinsic. ! * TanH intrinsic: TanH Intrinsic. ! * test programs: Nothing Happens. ! * testing alignment: Aligned Data. ! * textbooks: Language. ! * threads: Support for Threads. ! * Time intrinsic <1>: Time Intrinsic (VXT). ! * Time intrinsic: Time Intrinsic (UNIX). ! * Time8 intrinsic: Time8 Intrinsic. ! * Tiny intrinsic: Tiny Intrinsic. ! * Toolpack: Increasing Precision/Range. ! * trailing comma: Ugly Null Arguments. ! * trailing comment <1>: LEX. ! * trailing comment <2>: Trailing Comment. ! * trailing comment: Statements Comments Lines. ! * trailing null byte: Character and Hollerith Constants. ! * Transfer intrinsic: Transfer Intrinsic. ! * transforming symbol names <1>: Names. ! * transforming symbol names: Code Gen Options. ! * translation of user programs: What is GNU Fortran?. ! * Transpose intrinsic: Transpose Intrinsic. ! * Trim intrinsic: Trim Intrinsic. ! * trips, number of: Loops. ! * truncation, of floating-point values: Floating-point Errors. ! * truncation, of long lines: Long Lines. ! * TtyNam intrinsic <1>: TtyNam Intrinsic (function). ! * TtyNam intrinsic: TtyNam Intrinsic (subroutine). ! * TYPE statement: TYPE and ACCEPT I/O Statements. ! * types, COMPLEX(KIND=1): Compiler Types. ! * types, COMPLEX(KIND=2): Compiler Types. ! * types, constants <1>: Compiler Constants. ! * types, constants <2>: Constants. ! * types, constants: Fortran Dialect Options. ! * types, DOUBLE COMPLEX: Compiler Types. ! * types, DOUBLE PRECISION: Compiler Types. ! * types, file: Overall Options. ! * types, Fortran/C: C Access to Type Information. ! * types, INTEGER(KIND=1): Compiler Types. ! * types, INTEGER(KIND=2): Compiler Types. ! * types, INTEGER(KIND=3): Compiler Types. ! * types, INTEGER(KIND=6): Compiler Types. ! * types, INTEGER*2: Popular Non-standard Types. ! * types, INTEGER*8: Full Support for Compiler Types. ! * types, LOGICAL(KIND=1): Compiler Types. ! * types, LOGICAL(KIND=2): Compiler Types. ! * types, LOGICAL(KIND=3): Compiler Types. ! * types, LOGICAL(KIND=6): Compiler Types. ! * types, LOGICAL*1: Popular Non-standard Types. ! * types, of data: Compiler Types. ! * types, REAL(KIND=1): Compiler Types. ! * types, REAL(KIND=2): Compiler Types. ! * types, REAL*16: Full Support for Compiler Types. ! * UBound intrinsic: UBound Intrinsic. ! * ugly features <1>: Distensions. ! * ugly features: Shorthand Options. ! * UMask intrinsic <1>: UMask Intrinsic (function). ! * UMask intrinsic: UMask Intrinsic (subroutine). ! * undefined behavior: Bug Criteria. ! * undefined function value: Bug Criteria. ! * undefined reference (_main): Cannot Link Fortran Programs. ! * underscore <1>: Mangling of Names. ! * underscore <2>: Underscores in Symbol Names. ! * underscore <3>: Character Set. ! * underscore: Code Gen Options. ! * unformatted files: Portable Unformatted Files. ! * uninitialized variables <1>: Variables Assumed To Be Zero. ! * uninitialized variables <2>: Code Gen Options. ! * uninitialized variables: Warning Options. ! * UNION statement: STRUCTURE UNION RECORD MAP. ! * unit numbers: Large File Unit Numbers. ! * UNIX f77: Shorthand Options. ! * UNIX intrinsics: Fortran Dialect Options. ! * Unlink intrinsic <1>: Unlink Intrinsic (function). ! * Unlink intrinsic: Unlink Intrinsic (subroutine). ! * Unpack intrinsic: Unpack Intrinsic. ! * unrecognized file format: What is GNU Fortran?. ! * unresolved reference (various): Cannot Link Fortran Programs. ! * unrolling loops: Optimize Options. ! * UNSAVE: AUTOMATIC Statement. ! * unsupported warnings: Warning Options. ! * unused arguments <1>: Unused Arguments. ! * unused arguments: Warning Options. ! * unused dummies: Warning Options. ! * unused parameters: Warning Options. ! * unused variables: Warning Options. ! * uppercase letters: Case Sensitivity. ! * user-visible changes: Changes. ! * variables, assumed to be zero: Variables Assumed To Be Zero. ! * variables, automatic: AUTOMATIC Statement. ! * variables, initialization of: Code Gen Options. ! * variables, mistyped: Not My Type. ! * variables, retaining values across calls: Variables Assumed To Be Saved. ! * variables, uninitialized <1>: Code Gen Options. ! * variables, uninitialized: Warning Options. ! * variables, unused: Warning Options. ! * Verify intrinsic: Verify Intrinsic. ! * version information, printing <1>: Overall Options. ! * version information, printing: What is GNU Fortran?. ! * versions, recent <1>: Changes. ! * versions, recent: News. ! * VXT extensions <1>: VXT Fortran. ! * VXT extensions: Fortran Dialect Options. ! * VXT intrinsics: Fortran Dialect Options. ! * vxtidate_y2kbuggy_0: Year 2000 (Y2K) Problems. ! * warnings: What is GNU Fortran?. ! * warnings vs errors: Warnings and Errors. ! * warnings, all: Warning Options. ! * warnings, extra: Warning Options. ! * warnings, global names <1>: Code Gen Options. ! * warnings, global names: Warning Options. ! * warnings, implicit declaration: Warning Options. ! * warnings, suppressing: Warning Options. ! * warnings, unsupported: Warning Options. ! * wisdom: Collected Fortran Wisdom. ! * wraparound: Run-time Environment Limits. ! * wraparound, timings <1>: Secnds Intrinsic. ! * wraparound, timings <2>: DTime Intrinsic (function). ! * wraparound, timings <3>: Time8 Intrinsic. ! * wraparound, timings <4>: Time Intrinsic (UNIX). ! * wraparound, timings <5>: System_Clock Intrinsic. ! * wraparound, timings <6>: Second Intrinsic (subroutine). ! * wraparound, timings <7>: Second Intrinsic (function). ! * wraparound, timings <8>: MClock8 Intrinsic. ! * wraparound, timings <9>: MClock Intrinsic. ! * wraparound, timings <10>: ETime Intrinsic (function). ! * wraparound, timings <11>: ETime Intrinsic (subroutine). ! * wraparound, timings <12>: DTime Intrinsic (subroutine). ! * wraparound, timings: CPU_Time Intrinsic. ! * wraparound, Y10K <1>: Time Intrinsic (VXT). ! * wraparound, Y10K <2>: IDate Intrinsic (UNIX). ! * wraparound, Y10K <3>: FDate Intrinsic (function). ! * wraparound, Y10K <4>: FDate Intrinsic (subroutine). ! * wraparound, Y10K: Date_and_Time Intrinsic. ! * wraparound, Y2K: IDate Intrinsic (VXT). ! * writes, flushing: Output Assumed To Flush. ! * writing code: Collected Fortran Wisdom. ! * x86 floating-point: Floating-point precision. ! * x86 FPU stack: Inconsistent Calling Sequences. ! * XOr intrinsic: XOr Intrinsic. ! * Y10K compliance <1>: Time Intrinsic (VXT). ! * Y10K compliance <2>: Year 10000 (Y10K) Problems. ! * Y10K compliance <3>: IDate Intrinsic (UNIX). ! * Y10K compliance <4>: FDate Intrinsic (function). ! * Y10K compliance <5>: FDate Intrinsic (subroutine). ! * Y10K compliance: Date_and_Time Intrinsic. ! * Y2K compliance <1>: Y2KBAD. ! * Y2K compliance <2>: IDate Intrinsic (VXT). ! * Y2K compliance <3>: Date Intrinsic. ! * Y2K compliance: Year 2000 (Y2K) Problems. ! * y2kbuggy: Year 2000 (Y2K) Problems. ! * Year 10000 compliance <1>: Time Intrinsic (VXT). ! * Year 10000 compliance <2>: Year 10000 (Y10K) Problems. ! * Year 10000 compliance <3>: IDate Intrinsic (UNIX). ! * Year 10000 compliance <4>: FDate Intrinsic (function). ! * Year 10000 compliance <5>: FDate Intrinsic (subroutine). ! * Year 10000 compliance: Date_and_Time Intrinsic. ! * Year 2000 compliance <1>: Y2KBAD. ! * Year 2000 compliance <2>: IDate Intrinsic (VXT). ! * Year 2000 compliance <3>: Date Intrinsic. ! * Year 2000 compliance: Year 2000 (Y2K) Problems. ! * Z edit descriptor <1>: Fortran 90 Features. ! * Z edit descriptor: I/O. ! * ZAbs intrinsic: ZAbs Intrinsic. ! * ZCos intrinsic: ZCos Intrinsic. ! * zero byte, trailing: Character and Hollerith Constants. ! * zero-initialized variables: Variables Assumed To Be Zero. ! * zero-length CHARACTER: Character Type. ! * zero-trip DO loops: Fortran Dialect Options. ! * ZExp intrinsic: ZExp Intrinsic. ! * ZExt intrinsic: ZExt Intrinsic. ! * ZLog intrinsic: ZLog Intrinsic. ! * ZSin intrinsic: ZSin Intrinsic. ! * ZSqRt intrinsic: ZSqRt Intrinsic. --- 36,511 ---- Craig by David Ronis ().  ! File: g77.info, Node: CMPAMBIG, Next: EXPIMP, Up: Diagnostics ! `CMPAMBIG' ! ========== ! Ambiguous use of intrinsic INTRINSIC ... ! The type of the argument to the invocation of the INTRINSIC ! intrinsic is a `COMPLEX' type other than `COMPLEX(KIND=1)'. Typically, ! it is `COMPLEX(KIND=2)', also known as `DOUBLE COMPLEX'. ! ! The interpretation of this invocation depends on the particular ! dialect of Fortran for which the code was written. Some dialects ! convert the real part of the argument to `REAL(KIND=1)', thus losing ! precision; other dialects, and Fortran 90, do no such conversion. ! ! So, GNU Fortran rejects such invocations except under certain ! circumstances, to avoid making an incorrect assumption that results in ! generating the wrong code. ! ! To determine the dialect of the program unit, perhaps even whether ! that particular invocation is properly coded, determine how the result ! of the intrinsic is used. ! ! The result of INTRINSIC is expected (by the original programmer) to ! be `REAL(KIND=1)' (the non-Fortran-90 interpretation) if: ! ! * It is passed as an argument to a procedure that explicitly or ! implicitly declares that argument `REAL(KIND=1)'. ! ! For example, a procedure with no `DOUBLE PRECISION' or `IMPLICIT ! DOUBLE PRECISION' statement specifying the dummy argument ! corresponding to an actual argument of `REAL(Z)', where `Z' is ! declared `DOUBLE COMPLEX', strongly suggests that the programmer ! expected `REAL(Z)' to return `REAL(KIND=1)' instead of ! `REAL(KIND=2)'. ! ! * It is used in a context that would otherwise not include any ! `REAL(KIND=2)' but where treating the INTRINSIC invocation as ! `REAL(KIND=2)' would result in unnecessary promotions and ! (typically) more expensive operations on the wider type. ! ! For example: ! ! DOUBLE COMPLEX Z ! ... ! R(1) = T * REAL(Z) ! ! The above example suggests the programmer expected the real part ! of `Z' to be converted to `REAL(KIND=1)' before being multiplied ! by `T' (presumed, along with `R' above, to be type `REAL(KIND=1)'). ! ! Otherwise, the conversion would have to be delayed until after the ! multiplication, requiring not only an extra conversion (of `T' to ! `REAL(KIND=2)'), but a (typically) more expensive multiplication ! (a double-precision multiplication instead of a single-precision ! one). ! ! The result of INTRINSIC is expected (by the original programmer) to ! be `REAL(KIND=2)' (the Fortran 90 interpretation) if: ! ! * It is passed as an argument to a procedure that explicitly or ! implicitly declares that argument `REAL(KIND=2)'. ! ! For example, a procedure specifying a `DOUBLE PRECISION' dummy ! argument corresponding to an actual argument of `REAL(Z)', where ! `Z' is declared `DOUBLE COMPLEX', strongly suggests that the ! programmer expected `REAL(Z)' to return `REAL(KIND=2)' instead of ! `REAL(KIND=1)'. ! ! * It is used in an expression context that includes other ! `REAL(KIND=2)' operands, or is assigned to a `REAL(KIND=2)' ! variable or array element. ! ! For example: ! ! DOUBLE COMPLEX Z ! DOUBLE PRECISION R, T ! ... ! R(1) = T * REAL(Z) ! ! The above example suggests the programmer expected the real part ! of `Z' to _not_ be converted to `REAL(KIND=1)' by the `REAL()' ! intrinsic. ! ! Otherwise, the conversion would have to be immediately followed by ! a conversion back to `REAL(KIND=2)', losing the original, full ! precision of the real part of `Z', before being multiplied by `T'. ! ! Once you have determined whether a particular invocation of INTRINSIC ! expects the Fortran 90 interpretation, you can: ! ! * Change it to `DBLE(EXPR)' (if INTRINSIC is `REAL') or ! `DIMAG(EXPR)' (if INTRINSIC is `AIMAG') if it expected the Fortran ! 90 interpretation. ! ! This assumes EXPR is `COMPLEX(KIND=2)'--if it is some other type, ! such as `COMPLEX*32', you should use the appropriate intrinsic, ! such as the one to convert to `REAL*16' (perhaps `DBLEQ()' in ! place of `DBLE()', and `QIMAG()' in place of `DIMAG()'). ! ! * Change it to `REAL(INTRINSIC(EXPR))', otherwise. This converts to ! `REAL(KIND=1)' in all working Fortran compilers. ! ! If you don't want to change the code, and you are certain that all ! ambiguous invocations of INTRINSIC in the source file have the same ! expectation regarding interpretation, you can: ! ! * Compile with the `g77' option `-ff90', to enable the Fortran 90 ! interpretation. ! ! * Compile with the `g77' options `-fno-f90 -fugly-complex', to ! enable the non-Fortran-90 interpretations. ! ! *Note REAL() and AIMAG() of Complex::, for more information on this ! issue. ! ! Note: If the above suggestions don't produce enough evidence as to ! whether a particular program expects the Fortran 90 interpretation of ! this ambiguous invocation of INTRINSIC, there is one more thing you can ! try. ! ! If you have access to most or all the compilers used on the program ! to create successfully tested and deployed executables, read the ! documentation for, and _also_ test out, each compiler to determine how ! it treats the INTRINSIC intrinsic in this case. (If all the compilers ! don't agree on an interpretation, there might be lurking bugs in the ! deployed versions of the program.) ! ! The following sample program might help: ! ! PROGRAM JCB003 ! C ! C Written by James Craig Burley 1997-02-23. ! C ! C Determine how compilers handle non-standard REAL ! C and AIMAG on DOUBLE COMPLEX operands. ! C ! DOUBLE COMPLEX Z ! REAL R ! Z = (3.3D0, 4.4D0) ! R = Z ! CALL DUMDUM(Z, R) ! R = REAL(Z) - R ! IF (R .NE. 0.) PRINT *, 'REAL() is Fortran 90' ! IF (R .EQ. 0.) PRINT *, 'REAL() is not Fortran 90' ! R = 4.4D0 ! CALL DUMDUM(Z, R) ! R = AIMAG(Z) - R ! IF (R .NE. 0.) PRINT *, 'AIMAG() is Fortran 90' ! IF (R .EQ. 0.) PRINT *, 'AIMAG() is not Fortran 90' ! END ! C ! C Just to make sure compiler doesn't use naive flow ! C analysis to optimize away careful work above, ! C which might invalidate results.... ! C ! SUBROUTINE DUMDUM(Z, R) ! DOUBLE COMPLEX Z ! REAL R ! END ! ! If the above program prints contradictory results on a particular ! compiler, run away! ! !  ! File: g77.info, Node: EXPIMP, Next: INTGLOB, Prev: CMPAMBIG, Up: Diagnostics ! ! `EXPIMP' ! ======== ! ! Intrinsic INTRINSIC referenced ... ! ! The INTRINSIC is explicitly declared in one program unit in the ! source file and implicitly used as an intrinsic 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 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 `g77' recognizes the name as an intrinsic in both cases. ! ! After verifying that the program unit making implicit use of the ! intrinsic is indeed written expecting the intrinsic, add an `INTRINSIC ! INTRINSIC' statement to that program unit to prevent this warning. ! ! This and related warnings are disabled by using the `-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 `-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 ! `g77'. ! !  ! File: g77.info, Node: INTGLOB, Next: LEX, Prev: EXPIMP, Up: Diagnostics ! ! `INTGLOB' ! ========= ! ! Same name `INTRINSIC' given ... ! ! The name INTRINSIC is used for a global entity (a common 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 `g77' recognizes the name ! as an intrinsic in the program unit that references the name, a ! situation that would likely produce incorrect code. ! ! For example: ! ! INTEGER FUNCTION TIME() ! ... ! END ! ... ! PROGRAM SAMP ! INTEGER TIME ! PRINT *, 'Time is ', TIME() ! END ! ! The above example defines a program unit named `TIME', but the ! reference to `TIME' in the main program unit `SAMP' is normally treated ! by `g77' as a reference to the intrinsic `TIME()' (unless a ! command-line option that prevents such treatment has been specified). ! ! As a result, the program `SAMP' will _not_ invoke the `TIME' ! function in the same source file. ! ! Since `g77' recognizes `libU77' procedures as intrinsics, and since ! some existing code uses the same names for its own procedures as used ! by some `libU77' procedures, this situation is expected to arise often ! enough to make this sort of warning worth issuing. ! ! After verifying that the program unit making implicit use of the ! intrinsic is indeed written expecting the intrinsic, add an `INTRINSIC ! INTRINSIC' statement to that 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 ! `g77'), add an `EXTERNAL INTRINSIC' statement to the program unit that ! references the name to prevent this warning. ! ! This and related warnings are disabled by using the `-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 `-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 ! `g77'. ! !  ! File: g77.info, Node: LEX, Next: GLOBALS, Prev: INTGLOB, Up: Diagnostics ! ! `LEX' ! ===== ! ! Unrecognized character ... ! Invalid first character ... ! Line too long ... ! Non-numeric character ... ! Continuation indicator ... ! Label at ... invalid with continuation line indicator ... ! Character constant ... ! Continuation line ... ! Statement at ... begins with invalid token ! ! Although the diagnostics identify specific problems, they can be ! produced when general problems such as the following occur: ! ! * The source file contains something other than Fortran code. ! ! If the code in the file does not look like many of the examples ! elsewhere in this document, it might not be Fortran code. (Note ! that Fortran code often is written in lower case letters, while ! the examples in this document use upper case letters, for ! stylistic reasons.) ! ! For example, if the file contains lots of strange-looking ! characters, it might be APL source code; if it contains lots of ! parentheses, it might be Lisp source code; if it contains lots of ! bugs, it might be C++ source code. ! ! * The source file contains free-form Fortran code, but `-ffree-form' ! was not specified on the command line to compile it. ! ! Free form is a newer form for Fortran code. The older, classic ! form is called fixed form. ! ! Fixed-form code is visually fairly distinctive, because numerical ! labels and comments are all that appear in the first five columns ! of a line, the sixth column is reserved to denote continuation ! lines, and actual statements start at or beyond column 7. Spaces ! generally are not significant, so if you see statements such as ! `REALX,Y' and `DO10I=1,100', you are looking at fixed-form code. ! Comment lines are indicated by the letter `C' or the symbol `*' in ! column 1. (Some code uses `!' or `/*' to begin in-line comments, ! which many compilers support.) ! ! Free-form code is distinguished from fixed-form source primarily ! by the fact that statements may start anywhere. (If lots of ! statements start in columns 1 through 6, that's a strong indicator ! of free-form source.) Consecutive keywords must be separated by ! spaces, so `REALX,Y' is not valid, while `REAL X,Y' is. There are ! no comment lines per se, but `!' starts a comment anywhere in a ! line (other than within a character or Hollerith constant). ! ! *Note Source Form::, for more information. ! ! * The source file is in fixed form and has been edited without ! sensitivity to the column requirements. ! ! Statements in fixed-form code must be entirely contained within ! columns 7 through 72 on a given line. Starting them "early" is ! more likely to result in diagnostics than finishing them "late", ! though both kinds of errors are often caught at compile time. ! ! For example, if the following code fragment is edited by following ! the commented instructions literally, the result, shown afterward, ! would produce a diagnostic when compiled: ! ! C On XYZZY systems, remove "C" on next line: ! C CALL XYZZY_RESET ! ! The result of editing the above line might be: ! ! C On XYZZY systems, remove "C" on next line: ! CALL XYZZY_RESET ! ! However, that leaves the first `C' in the `CALL' statement in ! column 6, making it a comment line, which is not really what the ! author intended, and which is likely to result in one of the ! above-listed diagnostics. ! ! _Replacing_ the `C' in column 1 with a space is the proper change ! to make, to ensure the `CALL' keyword starts in or after column 7. ! ! Another common mistake like this is to forget that fixed-form ! source lines are significant through only column 72, and that, ! normally, any text beyond column 72 is ignored or is diagnosed at ! compile time. ! ! *Note Source Form::, for more information. ! ! * The source file requires preprocessing, and the preprocessing is ! not being specified at compile time. ! ! A source file containing lines beginning with `#define', ! `#include', `#if', and so on is likely one that requires ! preprocessing. ! ! If the file's suffix is `.f', `.for', or `.FOR', the file normally ! will be compiled _without_ preprocessing by `g77'. ! ! Change the file's suffix from `.f' to `.F' (or, on systems with ! case-insensitive file names, to `.fpp' or `.FPP'), from `.for' to ! `.fpp', or from `.FOR' to `.FPP'. `g77' compiles files with such ! names _with_ preprocessing. ! ! Or, learn how to use `gcc''s `-x' option to specify the language ! `f77-cpp-input' for Fortran files that require preprocessing. ! *Note Options Controlling the Kind of Output: (gcc)Overall Options. ! ! * The source file is preprocessed, and the results of preprocessing ! result in syntactic errors that are not necessarily obvious to ! someone examining the source file itself. ! ! Examples of errors resulting from preprocessor macro expansion ! include exceeding the line-length limit, improperly starting, ! terminating, or incorporating the apostrophe or double-quote in a ! character constant, improperly forming a Hollerith constant, and ! so on. ! ! *Note Options Controlling the Kind of Output: Overall Options, for ! suggestions about how to use, and not use, preprocessing for ! Fortran code. ! !  ! File: g77.info, Node: GLOBALS, Next: LINKFAIL, Prev: LEX, Up: Diagnostics ! ! `GLOBALS' ! ========= + Global name NAME defined at ... already defined... + Global name NAME at ... has different type... + Too many arguments passed to NAME at ... + Too few arguments passed to NAME at ... + Argument #N of NAME is ... + + These messages all identify disagreements about the global procedure + named NAME among different program units (usually including NAME + itself). + + Whether a particular disagreement is reported as a warning or an + error can depend on the relative order of the disagreeing portions of + the source file. + + Disagreements between a procedure invocation and the _subsequent_ + procedure itself are, usually, diagnosed as errors when the procedure + itself _precedes_ the invocation. Other disagreements are diagnosed + via warnings. + + This distinction, between warnings and errors, is due primarily to + the present tendency of the `gcc' back end to inline only those + procedure invocations that are _preceded_ by the corresponding + procedure definitions. If the `gcc' back end is changed to inline + "forward references", in which invocations precede definitions, the + `g77' front end will be changed to treat both orderings as errors, + accordingly. + + The sorts of disagreements that are diagnosed by `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; and the type of each argument. + + Disagreements regarding global names among program units in a + Fortran program _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 `-fno-globals' + option. + + The `-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 + `-Wno-globals' option as well as `-fno-globals' suppresses all of these + diagnostics. (`-Wno-globals' by itself disables only the warnings, not + the errors.) + + After using `-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 is not as portable as it could be. + In particular, the code might appear to work on a particular system, + but have bugs that affect the reliability of the data without + exhibiting any other outward manifestations of the bugs. + +  + File: g77.info, Node: LINKFAIL, Next: Y2KBAD, Prev: GLOBALS, Up: Diagnostics + + `LINKFAIL' + ========== + + On AIX 4.1, `g77' might not build with the native (non-GNU) tools due + to a linker bug in coping with the `-bbigtoc' option which leads to a + `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 `-mminimal-toc' might solve this problem, e.g. by + adding + BOOT_CFLAGS='-mminimal-toc -O2 -g' + to the `make bootstrap' command line. + +  + File: g77.info, Node: Y2KBAD, Prev: LINKFAIL, Up: Diagnostics + + `Y2KBAD' + ======== + + Intrinsic `NAME', invoked at (^), known to be non-Y2K-compliant... + + This diagnostic indicates that the specific intrinsic invoked by the + name NAME is known to have an interface that is not Year-2000 (Y2K) + compliant. + + *Note Year 2000 (Y2K) Problems::. diff -Nrc3pad gcc-3.0.4/gcc/f/g77.info-21 gcc-3.1/gcc/f/g77.info-21 *** gcc-3.0.4/gcc/f/g77.info-21 Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/f/g77.info-21 Wed May 15 02:45:53 2002 *************** *** 0 **** --- 1,2269 ---- + This is g77.info, produced by makeinfo version 4.2 from g77.texi. + + INFO-DIR-SECTION Programming + START-INFO-DIR-ENTRY + * g77: (g77). The GNU Fortran compiler. + END-INFO-DIR-ENTRY + This file documents the use and the internals of the GNU Fortran + (`g77') compiler. It corresponds to the GCC-3.1 version of `g77'. + + Published by the Free Software Foundation 59 Temple Place - Suite 330 + Boston, MA 02111-1307 USA + + Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 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 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. + + Contributed by James Craig Burley (). Inspired by + a first pass at translating `g77-0.5.16/f/DOC' that was contributed to + Craig by David Ronis (). + +  + File: g77.info, Node: Index, Prev: Diagnostics, Up: Top + + Index + ***** + + * Menu: + + * ! <1>: LEX. + * ! <2>: Exclamation Point. + * ! <3>: Trailing Comment. + * ! <4>: Character Set. + * !: Statements Comments Lines. + * ": Character Set. + * # <1>: Cpp-style directives. + * #: Character Set. + * #define: Overall Options. + * #if: Overall Options. + * #include: Overall Options. + * #include directive: Bug Reporting. + * $: Dollar Signs. + * %: Character Set. + * %DESCR() construct: %DESCR(). + * %LOC() construct: %LOC(). + * %REF() construct: %REF(). + * %VAL() construct: %VAL(). + * &: Character Set. + * *: LEX. + * *N notation <1>: Compiler Types. + * *N notation: Star Notation. + * --driver option <1>: Changes. + * --driver option: News. + * -falias-check option <1>: Aliasing Assumed To Work. + * -falias-check option: Code Gen Options. + * -fargument-alias option <1>: Aliasing Assumed To Work. + * -fargument-alias option: Code Gen Options. + * -fargument-noalias option <1>: Aliasing Assumed To Work. + * -fargument-noalias option: Code Gen Options. + * -fbadu77-intrinsics-delete option: Fortran Dialect Options. + * -fbadu77-intrinsics-disable option: Fortran Dialect Options. + * -fbadu77-intrinsics-enable option: Fortran Dialect Options. + * -fbadu77-intrinsics-hide option: Fortran Dialect Options. + * -fbounds-check option: Code Gen Options. + * -fcaller-saves option: Optimize Options. + * -fcase-initcap option: Fortran Dialect Options. + * -fcase-lower option: Fortran Dialect Options. + * -fcase-preserve option: Fortran Dialect Options. + * -fcase-strict-lower option: Fortran Dialect Options. + * -fcase-strict-upper option: Fortran Dialect Options. + * -fcase-upper option: Fortran Dialect Options. + * -fdelayed-branch option: Optimize Options. + * -fdollar-ok option: Fortran Dialect Options. + * -femulate-complex option: Code Gen Options. + * -fexpensive-optimizations option: Optimize Options. + * -ff2c-intrinsics-delete option: Fortran Dialect Options. + * -ff2c-intrinsics-disable option: Fortran Dialect Options. + * -ff2c-intrinsics-enable option: Fortran Dialect Options. + * -ff2c-intrinsics-hide option: Fortran Dialect Options. + * -ff2c-library option: Code Gen Options. + * -ff66 option: Shorthand Options. + * -ff77 option: Shorthand Options. + * -ff90: Fortran 90 Features. + * -ff90 option: Fortran Dialect Options. + * -ff90-intrinsics-delete option: Fortran Dialect Options. + * -ff90-intrinsics-disable option: Fortran Dialect Options. + * -ff90-intrinsics-enable option: Fortran Dialect Options. + * -ff90-intrinsics-hide option: Fortran Dialect Options. + * -ffast-math option: Optimize Options. + * -ffixed-line-length-N option: Fortran Dialect Options. + * -fflatten-arrays option: Code Gen Options. + * -ffloat-store option: Optimize Options. + * -fforce-addr option: Optimize Options. + * -fforce-mem option: Optimize Options. + * -ffortran-bounds-check option: Code Gen Options. + * -ffree-form: Fortran 90 Features. + * -ffree-form option: Fortran Dialect Options. + * -fgnu-intrinsics-delete option: Fortran Dialect Options. + * -fgnu-intrinsics-disable option: Fortran Dialect Options. + * -fgnu-intrinsics-enable option: Fortran Dialect Options. + * -fgnu-intrinsics-hide option: Fortran Dialect Options. + * -fGROUP-intrinsics-hide option: Overly Convenient Options. + * -finit-local-zero option <1>: Overly Convenient Options. + * -finit-local-zero option: Code Gen Options. + * -fintrin-case-any option: Fortran Dialect Options. + * -fintrin-case-initcap option: Fortran Dialect Options. + * -fintrin-case-lower option: Fortran Dialect Options. + * -fintrin-case-upper option: Fortran Dialect Options. + * -fmatch-case-any option: Fortran Dialect Options. + * -fmatch-case-initcap option: Fortran Dialect Options. + * -fmatch-case-lower option: Fortran Dialect Options. + * -fmatch-case-upper option: Fortran Dialect Options. + * -fmil-intrinsics-delete option: Fortran Dialect Options. + * -fmil-intrinsics-disable option: Fortran Dialect Options. + * -fmil-intrinsics-enable option: Fortran Dialect Options. + * -fmil-intrinsics-hide option: Fortran Dialect Options. + * -fno-argument-noalias-global option <1>: Aliasing Assumed To Work. + * -fno-argument-noalias-global option: Code Gen Options. + * -fno-automatic option <1>: Overly Convenient Options. + * -fno-automatic option: Code Gen Options. + * -fno-backslash option: Fortran Dialect Options. + * -fno-common option: Code Gen Options. + * -fno-f2c option <1>: Avoid f2c Compatibility. + * -fno-f2c option: Code Gen Options. + * -fno-f77 option: Shorthand Options. + * -fno-fixed-form option: Fortran Dialect Options. + * -fno-globals option: Code Gen Options. + * -fno-ident option: Code Gen Options. + * -fno-inline option: Optimize Options. + * -fno-move-all-movables option: Optimize Options. + * -fno-reduce-all-givs option: Optimize Options. + * -fno-rerun-loop-opt option: Optimize Options. + * -fno-second-underscore: f2c Skeletons and Prototypes. + * -fno-second-underscore option <1>: Names. + * -fno-second-underscore option: Code Gen Options. + * -fno-silent option: Overall Options. + * -fno-trapping-math option: Optimize Options. + * -fno-ugly option: Shorthand Options. + * -fno-ugly-args option: Fortran Dialect Options. + * -fno-ugly-init option: Fortran Dialect Options. + * -fno-underscoring option <1>: Names. + * -fno-underscoring option: Code Gen Options. + * -fonetrip option: Fortran Dialect Options. + * -fpack-struct option: Code Gen Options. + * -fpcc-struct-return option: Code Gen Options. + * -fpedantic option: Warning Options. + * -fPIC option: News. + * -freg-struct-return option: Code Gen Options. + * -frerun-cse-after-loop option: Optimize Options. + * -fschedule-insns option: Optimize Options. + * -fschedule-insns2 option: Optimize Options. + * -fset-g77-defaults option: Overall Options. + * -fshort-double option: Code Gen Options. + * -fsource-case-lower option: Fortran Dialect Options. + * -fsource-case-preserve option: Fortran Dialect Options. + * -fsource-case-upper option: Fortran Dialect Options. + * -fstrength-reduce option: Optimize Options. + * -fsymbol-case-any option: Fortran Dialect Options. + * -fsymbol-case-initcap option: Fortran Dialect Options. + * -fsymbol-case-lower option: Fortran Dialect Options. + * -fsymbol-case-upper option: Fortran Dialect Options. + * -fsyntax-only option: Warning Options. + * -ftypeless-boz option: Fortran Dialect Options. + * -fugly option: Shorthand Options. + * -fugly-assign option: Fortran Dialect Options. + * -fugly-assumed option: Fortran Dialect Options. + * -fugly-comma option: Fortran Dialect Options. + * -fugly-complex option: Fortran Dialect Options. + * -fugly-logint option: Fortran Dialect Options. + * -funix-intrinsics-delete option: Fortran Dialect Options. + * -funix-intrinsics-disable option: Fortran Dialect Options. + * -funix-intrinsics-enable option: Fortran Dialect Options. + * -funix-intrinsics-hide option: Fortran Dialect Options. + * -funroll-all-loops option: Optimize Options. + * -funroll-loops option: Optimize Options. + * -funsafe-math-optimizations option: Optimize Options. + * -fversion option: Overall Options. + * -fvxt option: Fortran Dialect Options. + * -fvxt-intrinsics-delete option: Fortran Dialect Options. + * -fvxt-intrinsics-disable option: Fortran Dialect Options. + * -fvxt-intrinsics-enable option: Fortran Dialect Options. + * -fvxt-intrinsics-hide option: Fortran Dialect Options. + * -fzeros option: Code Gen Options. + * -g option: Debugging Options. + * -I- option: Directory Options. + * -i8: Increasing Precision/Range. + * -Idir option: Directory Options. + * -malign-double <1>: Changes. + * -malign-double: News. + * -malign-double option <1>: Aligned Data. + * -malign-double option: Optimize Options. + * -Nl option: Compiler Limits. + * -Nx option: Compiler Limits. + * -O2: News. + * -pedantic option: Warning Options. + * -pedantic-errors option: Warning Options. + * -qrealsize=8: Increasing Precision/Range. + * -r8: Increasing Precision/Range. + * -u option: Warning Options. + * -v option: G77 and GCC. + * -W option: Warning Options. + * -w option: Warning Options. + * -Waggregate-return option: Warning Options. + * -Wall option: Warning Options. + * -Wcomment option: Warning Options. + * -Wconversion option: Warning Options. + * -Werror option: Warning Options. + * -Wformat option: Warning Options. + * -Wid-clash-LEN option: Warning Options. + * -Wimplicit option: Warning Options. + * -Wlarger-than-LEN option: Warning Options. + * -Wno-globals option: Warning Options. + * -Wparentheses option: Warning Options. + * -Wredundant-decls option: Warning Options. + * -Wshadow option: Warning Options. + * -Wsurprising option: Warning Options. + * -Wswitch option: Warning Options. + * -Wtraditional option: Warning Options. + * -Wuninitialized option: Warning Options. + * -Wunused option: Warning Options. + * -x f77-cpp-input option: LEX. + * .EQV., with integer operands: Equivalence Versus Equality. + * .F filename suffix: Overall Options. + * .f filename suffix: Overall Options. + * .FOR filename suffix: Overall Options. + * .for filename suffix: Overall Options. + * .FPP filename suffix: Overall Options. + * .fpp filename suffix: Overall Options. + * .gdbinit: Main Program Unit. + * .r filename suffix: Overall Options. + * /* <1>: Trailing Comment. + * /*: Overall Options. + * /WARNINGS=DECLARATIONS switch: Warning Options. + * 80-bit spills: Floating-point Errors. + * ; <1>: Character Set. + * ;: Statements Comments Lines. + * <: Character Set. + * <> edit descriptor: I/O. + * >: Character Set. + * ?: Character Set. + * \: Character Set. + * _: Character Set. + * Abort intrinsic: Abort Intrinsic. + * Abs intrinsic: Abs Intrinsic. + * ACCEPT statement: TYPE and ACCEPT I/O Statements. + * Access intrinsic: Access Intrinsic. + * AChar intrinsic: AChar Intrinsic. + * ACos intrinsic: ACos Intrinsic. + * ACosD intrinsic: ACosD Intrinsic. + * adding options: Adding Options. + * adjustable arrays: Adjustable Arrays. + * AdjustL intrinsic: AdjustL Intrinsic. + * AdjustR intrinsic: AdjustR Intrinsic. + * AImag intrinsic <1>: AImag Intrinsic. + * AImag intrinsic: REAL() and AIMAG() of Complex. + * AIMax0 intrinsic: AIMax0 Intrinsic. + * AIMin0 intrinsic: AIMin0 Intrinsic. + * AInt intrinsic: AInt Intrinsic. + * AJMax0 intrinsic: AJMax0 Intrinsic. + * AJMin0 intrinsic: AJMin0 Intrinsic. + * Alarm intrinsic: Alarm Intrinsic. + * aliasing <1>: Known Bugs. + * aliasing: Aliasing Assumed To Work. + * aligned data: Aligned Data. + * aligned stack: Aligned Data. + * alignment <1>: Aligned Data. + * alignment <2>: Changes. + * alignment: News. + * alignment testing: Aligned Data. + * All intrinsic: All Intrinsic. + * all warnings: Warning Options. + * Allocated intrinsic: Allocated Intrinsic. + * ALog intrinsic: ALog Intrinsic. + * ALog10 intrinsic: ALog10 Intrinsic. + * Alpha, support: Known Bugs. + * alternate entry points: Alternate Entry Points. + * alternate returns: Alternate Returns. + * ALWAYS_FLUSH: Output Assumed To Flush. + * AMax0 intrinsic: AMax0 Intrinsic. + * AMax1 intrinsic: AMax1 Intrinsic. + * AMin0 intrinsic: AMin0 Intrinsic. + * AMin1 intrinsic: AMin1 Intrinsic. + * AMod intrinsic: AMod Intrinsic. + * ampersand: Character Set. + * ampersand continuation line: Ampersands. + * And intrinsic <1>: Bit Operations on Floating-point Data. + * And intrinsic: And Intrinsic. + * ANInt intrinsic: ANInt Intrinsic. + * ANS carriage control: OPEN CLOSE and INQUIRE Keywords. + * ANSI FORTRAN 77 standard: Language. + * ANSI FORTRAN 77 support: Standard Support. + * anti-aliasing: Aliasing Assumed To Work. + * Any intrinsic: Any Intrinsic. + * arguments, null: Ugly Null Arguments. + * arguments, omitting: Ugly Null Arguments. + * arguments, unused <1>: Unused Arguments. + * arguments, unused: Warning Options. + * array bounds checking: Code Gen Options. + * array bounds, adjustable: Array Bounds Expressions. + * array elements, in adjustable array bounds: Array Bounds Expressions. + * array ordering: Arrays. + * array performance: Code Gen Options. + * array size: Array Size. + * arrays: Arrays. + * arrays, adjustable: Adjustable Arrays. + * arrays, assumed-size: Ugly Assumed-Size Arrays. + * arrays, automatic <1>: Large Automatic Arrays. + * arrays, automatic <2>: Stack Overflow. + * arrays, automatic <3>: Overly Convenient Options. + * arrays, automatic: Adjustable Arrays. + * arrays, dimensioning <1>: Adjustable Arrays. + * arrays, dimensioning: Array Size. + * arrays, flattening: Code Gen Options. + * as command: What is GNU Fortran?. + * ASin intrinsic: ASin Intrinsic. + * ASinD intrinsic: ASinD Intrinsic. + * assembler: What is GNU Fortran?. + * assembly code: What is GNU Fortran?. + * assembly code, invalid: Bug Criteria. + * ASSIGN statement <1>: Assigned Statement Labels. + * ASSIGN statement: Ugly Assigned Labels. + * assigned labels: Ugly Assigned Labels. + * assigned statement labels: Assigned Statement Labels. + * Associated intrinsic: Associated Intrinsic. + * association, storage: Aliasing Assumed To Work. + * assumed-size arrays: Ugly Assumed-Size Arrays. + * asterisk: LEX. + * ATan intrinsic: ATan Intrinsic. + * ATan2 intrinsic: ATan2 Intrinsic. + * ATan2D intrinsic: ATan2D Intrinsic. + * ATanD intrinsic: ATanD Intrinsic. + * automatic arrays <1>: Large Automatic Arrays. + * automatic arrays <2>: Stack Overflow. + * automatic arrays <3>: Overly Convenient Options. + * automatic arrays: Adjustable Arrays. + * AUTOMATIC statement: AUTOMATIC Statement. + * automatic variables: AUTOMATIC Statement. + * back end, gcc <1>: Philosophy of Code Generation. + * back end, gcc: What is GNU Fortran?. + * backslash <1>: Backslash in Constants. + * backslash <2>: Character Set. + * backslash: Fortran Dialect Options. + * backtrace for bug reports: Bug Reporting. + * badu77 intrinsics: Fortran Dialect Options. + * badu77 intrinsics group: Intrinsic Groups. + * basic concepts: What is GNU Fortran?. + * Bear-poking: Philosophy of Code Generation. + * beginners: Getting Started. + * BesJ0 intrinsic: BesJ0 Intrinsic. + * BesJ1 intrinsic: BesJ1 Intrinsic. + * BesJN intrinsic: BesJN Intrinsic. + * BesY0 intrinsic: BesY0 Intrinsic. + * BesY1 intrinsic: BesY1 Intrinsic. + * BesYN intrinsic: BesYN Intrinsic. + * binary data: Portable Unformatted Files. + * Bit_Size intrinsic: Bit_Size Intrinsic. + * BITest intrinsic: BITest Intrinsic. + * BJTest intrinsic: BJTest Intrinsic. + * blank <1>: Lines. + * blank: Character Set. + * block data: Multiple Definitions of External Names. + * block data and libraries: Block Data and Libraries. + * BLOCK DATA statement <1>: Multiple Definitions of External Names. + * BLOCK DATA statement: Block Data and Libraries. + * bounds checking: Code Gen Options. + * BTest intrinsic: BTest Intrinsic. + * bug criteria: Bug Criteria. + * bug report mailing lists: Bug Lists. + * bugs: Bugs. + * bugs, finding: What is GNU Fortran?. + * bugs, known: Trouble. + * bus error <1>: Strange Behavior at Run Time. + * bus error: NeXTStep Problems. + * but-bugs: But-bugs. + * byte ordering: Portable Unformatted Files. + * C library: Strange Behavior at Run Time. + * C preprocessor: Overall Options. + * C routines calling Fortran: Debugging and Interfacing. + * C++: C++ Considerations. + * C++, linking with: Interoperating with C and C++. + * C, linking with: Interoperating with C and C++. + * CAbs intrinsic: CAbs Intrinsic. + * calling C routines: Debugging and Interfacing. + * card image: Fortran Dialect Options. + * carriage control: OPEN CLOSE and INQUIRE Keywords. + * carriage returns: Carriage Returns. + * case sensitivity: Case Sensitivity. + * cc1 program: What is GNU Fortran?. + * cc1plus program: What is GNU Fortran?. + * CCos intrinsic: CCos Intrinsic. + * CDAbs intrinsic: CDAbs Intrinsic. + * CDCos intrinsic: CDCos Intrinsic. + * CDExp intrinsic: CDExp Intrinsic. + * CDLog intrinsic: CDLog Intrinsic. + * CDSin intrinsic: CDSin Intrinsic. + * CDSqRt intrinsic: CDSqRt Intrinsic. + * Ceiling intrinsic: Ceiling Intrinsic. + * CExp intrinsic: CExp Intrinsic. + * cfortran.h: C Interfacing Tools. + * changes, user-visible: Changes. + * Char intrinsic: Char Intrinsic. + * character assignments: Fortran 90 Features. + * character constants <1>: Character and Hollerith Constants. + * character constants <2>: Ugly Conversion of Initializers. + * character constants <3>: Double Quote Meaning. + * character constants: Fortran Dialect Options. + * character set: Fortran Dialect Options. + * CHARACTER*(*): Arbitrary Concatenation. + * CHARACTER, null: Character Type. + * character-variable length: Character-variable Length. + * characters: Character Set. + * characters, comma: Ugly Null Arguments. + * characters, comment <1>: LEX. + * characters, comment <2>: Exclamation Point. + * characters, comment <3>: Trailing Comment. + * characters, comment: Statements Comments Lines. + * characters, continuation <1>: LEX. + * characters, continuation <2>: Exclamation Point. + * characters, continuation: Statements Comments Lines. + * ChDir intrinsic <1>: ChDir Intrinsic (function). + * ChDir intrinsic: ChDir Intrinsic (subroutine). + * checking subscripts: Code Gen Options. + * checking substrings: Code Gen Options. + * checks, of internal consistency: Overall Options. + * ChMod intrinsic <1>: ChMod Intrinsic (function). + * ChMod intrinsic: ChMod Intrinsic (subroutine). + * CLog intrinsic: CLog Intrinsic. + * close angle: Character Set. + * close bracket: Character Set. + * CLOSE statement: OPEN CLOSE and INQUIRE Keywords. + * Cmplx intrinsic <1>: Cmplx Intrinsic. + * Cmplx intrinsic: CMPLX() of DOUBLE PRECISION. + * code generation, conventions: Code Gen Options. + * code generation, improving: Better Optimization. + * code generator <1>: Philosophy of Code Generation. + * code generator: What is GNU Fortran?. + * code, assembly: What is GNU Fortran?. + * code, displaying main source: Known Bugs. + * code, in-line: What is GNU Fortran?. + * code, legacy: Collected Fortran Wisdom. + * code, machine: What is GNU Fortran?. + * code, source <1>: Case Sensitivity. + * code, source <2>: Source Form. + * code, source <3>: Lines. + * code, source: What is GNU Fortran?. + * code, user: Cannot Link Fortran Programs. + * code, writing: Collected Fortran Wisdom. + * column-major ordering: Arrays. + * columns 73 through 80: Better Source Model. + * comma, trailing: Ugly Null Arguments. + * command options: Invoking G77. + * commands, as: What is GNU Fortran?. + * commands, g77 <1>: G77 and GCC. + * commands, g77: What is GNU Fortran?. + * commands, gcc <1>: G77 and GCC. + * commands, gcc: What is GNU Fortran?. + * commands, gdb: What is GNU Fortran?. + * commands, ld: What is GNU Fortran?. + * comment <1>: LEX. + * comment <2>: Trailing Comment. + * comment: Statements Comments Lines. + * comment character: Exclamation Point. + * comment line, debug <1>: Enabling Debug Lines. + * comment line, debug: Debug Line. + * common blocks <1>: Mangling of Names. + * common blocks <2>: Known Bugs. + * common blocks: Common Blocks. + * common blocks, large: Large Common Blocks. + * COMMON layout: Aligned Data. + * COMMON statement <1>: Multiple Definitions of External Names. + * COMMON statement: Common Blocks. + * comparing logical expressions: Equivalence Versus Equality. + * compatibility, f2c <1>: Avoid f2c Compatibility. + * compatibility, f2c <2>: Block Data and Libraries. + * compatibility, f2c <3>: Code Gen Options. + * compatibility, f2c <4>: Shorthand Options. + * compatibility, f2c: Overall Options. + * compatibility, f77: Shorthand Options. + * compatibility, FORTRAN 66 <1>: Fortran Dialect Options. + * compatibility, FORTRAN 66: Shorthand Options. + * compatibility, FORTRAN 77: Standard Support. + * compatibility, Fortran 90: Fortran 90. + * compilation, in-line <1>: GLOBALS. + * compilation, in-line <2>: Code Gen Options. + * compilation, in-line: Optimize Options. + * compilation, pedantic: Pedantic Compilation. + * compilation, status: Overall Options. + * compiler bugs, reporting: Bug Reporting. + * compiler limits: Compiler Limits. + * compiler memory usage: Known Bugs. + * compiler speed: Known Bugs. + * compilers: What is GNU Fortran?. + * compiling programs: G77 and GCC. + * Complex intrinsic: Complex Intrinsic. + * COMPLEX intrinsics: Fortran Dialect Options. + * complex performance: Known Bugs. + * COMPLEX statement: Complex Variables. + * complex values: Ugly Complex Part Extraction. + * complex variables: Complex Variables. + * COMPLEX(KIND=1) type: Compiler Types. + * COMPLEX(KIND=2) type: Compiler Types. + * components of g77: What is GNU Fortran?. + * concatenation: Arbitrary Concatenation. + * concepts, basic: What is GNU Fortran?. + * conformance, IEEE 754 <1>: Floating-point precision. + * conformance, IEEE 754: Optimize Options. + * Conjg intrinsic: Conjg Intrinsic. + * consistency checks: Overall Options. + * constants <1>: Compiler Constants. + * constants: Constants. + * constants, character <1>: Character and Hollerith Constants. + * constants, character <2>: Ugly Conversion of Initializers. + * constants, character: Double Quote Meaning. + * constants, context-sensitive: Context-Sensitive Constants. + * constants, Hollerith <1>: Character and Hollerith Constants. + * constants, Hollerith <2>: Ugly Conversion of Initializers. + * constants, Hollerith: Ugly Implicit Argument Conversion. + * constants, integer: Known Bugs. + * constants, octal: Double Quote Meaning. + * constants, prefix-radix: Fortran Dialect Options. + * constants, types: Fortran Dialect Options. + * construct names: Construct Names. + * context-sensitive constants: Context-Sensitive Constants. + * context-sensitive intrinsics: Context-Sensitive Intrinsicness. + * continuation character <1>: LEX. + * continuation character <2>: Exclamation Point. + * continuation character: Statements Comments Lines. + * continuation line, ampersand: Ampersands. + * continuation line, number of: Continuation Line. + * contributors: Contributors. + * conversions, nonportable: Nonportable Conversions. + * core dump: Bug Criteria. + * Cos intrinsic: Cos Intrinsic. + * CosD intrinsic: CosD Intrinsic. + * CosH intrinsic: CosH Intrinsic. + * Count intrinsic: Count Intrinsic. + * cpp preprocessor: Overall Options. + * cpp program <1>: LEX. + * cpp program <2>: Bug Reporting. + * cpp program <3>: Preprocessor Options. + * cpp program <4>: Overall Options. + * cpp program: What is GNU Fortran?. + * CPU_Time intrinsic: CPU_Time Intrinsic. + * Cray pointers: POINTER Statements. + * credits: Contributors. + * CShift intrinsic: CShift Intrinsic. + * CSin intrinsic: CSin Intrinsic. + * CSqRt intrinsic: CSqRt Intrinsic. + * CTime intrinsic <1>: CTime Intrinsic (function). + * CTime intrinsic: CTime Intrinsic (subroutine). + * CYCLE statement: CYCLE and EXIT. + * DAbs intrinsic: DAbs Intrinsic. + * DACos intrinsic: DACos Intrinsic. + * DACosD intrinsic: DACosD Intrinsic. + * DASin intrinsic: DASin Intrinsic. + * DASinD intrinsic: DASinD Intrinsic. + * DATA statement <1>: Known Bugs. + * DATA statement: Code Gen Options. + * data types: Compiler Types. + * data, aligned: Aligned Data. + * data, overwritten: Strange Behavior at Run Time. + * DATan intrinsic: DATan Intrinsic. + * DATan2 intrinsic: DATan2 Intrinsic. + * DATan2D intrinsic: DATan2D Intrinsic. + * DATanD intrinsic: DATanD Intrinsic. + * Date intrinsic: Date Intrinsic. + * Date_and_Time intrinsic: Date_and_Time Intrinsic. + * date_y2kbuggy_0: Year 2000 (Y2K) Problems. + * DbesJ0 intrinsic: DbesJ0 Intrinsic. + * DbesJ1 intrinsic: DbesJ1 Intrinsic. + * DbesJN intrinsic: DbesJN Intrinsic. + * DbesY0 intrinsic: DbesY0 Intrinsic. + * DbesY1 intrinsic: DbesY1 Intrinsic. + * DbesYN intrinsic: DbesYN Intrinsic. + * Dble intrinsic: Dble Intrinsic. + * DbleQ intrinsic: DbleQ Intrinsic. + * DCmplx intrinsic: DCmplx Intrinsic. + * DConjg intrinsic: DConjg Intrinsic. + * DCos intrinsic: DCos Intrinsic. + * DCosD intrinsic: DCosD Intrinsic. + * DCosH intrinsic: DCosH Intrinsic. + * DDiM intrinsic: DDiM Intrinsic. + * debug line <1>: Enabling Debug Lines. + * debug line: Debug Line. + * debug_rtx: Bug Reporting. + * debugger <1>: Known Bugs. + * debugger: What is GNU Fortran?. + * debugging <1>: Names. + * debugging <2>: Main Program Unit. + * debugging: Debugging and Interfacing. + * debugging information options: Debugging Options. + * debugging main source code: Known Bugs. + * DECODE statement: ENCODE and DECODE. + * deleted intrinsics: Intrinsic Groups. + * DErF intrinsic: DErF Intrinsic. + * DErFC intrinsic: DErFC Intrinsic. + * DExp intrinsic: DExp Intrinsic. + * DFloat intrinsic: DFloat Intrinsic. + * DFlotI intrinsic: DFlotI Intrinsic. + * DFlotJ intrinsic: DFlotJ Intrinsic. + * diagnostics: Diagnostics. + * diagnostics, incorrect: What is GNU Fortran?. + * dialect options: Fortran Dialect Options. + * Digital Fortran features: Fortran Dialect Options. + * Digits intrinsic: Digits Intrinsic. + * DiM intrinsic: DiM Intrinsic. + * DImag intrinsic: DImag Intrinsic. + * DIMENSION statement <1>: Array Bounds Expressions. + * DIMENSION statement <2>: Adjustable Arrays. + * DIMENSION statement: Arrays. + * DIMENSION X(1): Ugly Assumed-Size Arrays. + * dimensioning arrays: Adjustable Arrays. + * DInt intrinsic: DInt Intrinsic. + * direction of language development: Direction of Language Development. + * directive, #include: Bug Reporting. + * directive, INCLUDE <1>: Bug Reporting. + * directive, INCLUDE <2>: Directory Options. + * directive, INCLUDE: Preprocessor Options. + * directory, options: Directory Options. + * directory, search paths for inclusion: Directory Options. + * disabled intrinsics: Intrinsic Groups. + * disk full: Output Assumed To Flush. + * displaying main source code: Known Bugs. + * disposition of files: OPEN CLOSE and INQUIRE Keywords. + * distensions: Distensions. + * DLog intrinsic: DLog Intrinsic. + * DLog10 intrinsic: DLog10 Intrinsic. + * DMax1 intrinsic: DMax1 Intrinsic. + * DMin1 intrinsic: DMin1 Intrinsic. + * DMod intrinsic: DMod Intrinsic. + * DNInt intrinsic: DNInt Intrinsic. + * DNRM2: News. + * DO: DO WHILE. + * DO loops, one-trip: Fortran Dialect Options. + * DO loops, zero-trip: Fortran Dialect Options. + * DO statement <1>: Loops. + * DO statement: Warning Options. + * DO WHILE <1>: DO WHILE. + * DO WHILE: Optimize Options. + * dollar sign <1>: Dollar Signs. + * dollar sign <2>: I/O. + * dollar sign: Fortran Dialect Options. + * Dot_Product intrinsic: Dot_Product Intrinsic. + * DOUBLE COMPLEX: DOUBLE COMPLEX. + * DOUBLE COMPLEX type: Compiler Types. + * DOUBLE PRECISION type: Compiler Types. + * double quote: Character Set. + * double quoted character constants <1>: Fortran 90 Features. + * double quoted character constants: Character Type. + * double quotes: Double Quote Meaning. + * double-precision performance <1>: Changes. + * double-precision performance: News. + * DProd intrinsic: DProd Intrinsic. + * DReal intrinsic: DReal Intrinsic. + * driver, gcc command as: What is GNU Fortran?. + * DSign intrinsic: DSign Intrinsic. + * DSin intrinsic: DSin Intrinsic. + * DSinD intrinsic: DSinD Intrinsic. + * DSinH intrinsic: DSinH Intrinsic. + * DSqRt intrinsic: DSqRt Intrinsic. + * DTan intrinsic: DTan Intrinsic. + * DTanD intrinsic: DTanD Intrinsic. + * DTanH intrinsic: DTanH Intrinsic. + * DTime intrinsic <1>: DTime Intrinsic (function). + * DTime intrinsic: DTime Intrinsic (subroutine). + * dummies, unused: Warning Options. + * edit descriptor, <>: I/O. + * edit descriptor, O: I/O. + * edit descriptor, Q: Q Edit Descriptor. + * edit descriptor, Z <1>: Fortran 90 Features. + * edit descriptor, Z: I/O. + * effecting IMPLICIT NONE: Warning Options. + * efficiency: Efficiency. + * ELF support: News. + * empty CHARACTER strings: Character Type. + * enabled intrinsics: Intrinsic Groups. + * ENCODE statement: ENCODE and DECODE. + * END DO: END DO. + * entry points: Alternate Entry Points. + * ENTRY statement: Alternate Entry Points. + * environment variables: Environment Variables. + * EOShift intrinsic: EOShift Intrinsic. + * Epsilon intrinsic: Epsilon Intrinsic. + * equivalence areas <1>: Known Bugs. + * equivalence areas: Local Equivalence Areas. + * EQUIVALENCE statement: Local Equivalence Areas. + * ErF intrinsic: ErF Intrinsic. + * ErFC intrinsic: ErFC Intrinsic. + * error messages <1>: Warnings and Errors. + * error messages: Run-time Library Errors. + * error messages, incorrect: What is GNU Fortran?. + * error values: Run-time Library Errors. + * errors, linker: Large Common Blocks. + * ETime intrinsic <1>: ETime Intrinsic (function). + * ETime intrinsic: ETime Intrinsic (subroutine). + * exceptions, floating-point: Floating-point Exception Handling. + * exclamation point <1>: LEX. + * exclamation point <2>: Exclamation Point. + * exclamation point <3>: Trailing Comment. + * exclamation point <4>: Character Set. + * exclamation point: Statements Comments Lines. + * executable file: What is GNU Fortran?. + * Exit intrinsic: Exit Intrinsic. + * EXIT statement: CYCLE and EXIT. + * Exp intrinsic: Exp Intrinsic. + * Exponent intrinsic: Exponent Intrinsic. + * extended-source option: Fortran Dialect Options. + * extensions, file name: Overall Options. + * extensions, from Fortran 90: Fortran 90 Features. + * extensions, more: More Extensions. + * extensions, VXT: VXT Fortran. + * external names: Mangling of Names. + * extra warnings: Warning Options. + * f2c: Increasing Precision/Range. + * f2c compatibility <1>: Avoid f2c Compatibility. + * f2c compatibility <2>: Block Data and Libraries. + * f2c compatibility <3>: Debugging and Interfacing. + * f2c compatibility <4>: Code Gen Options. + * f2c compatibility <5>: Shorthand Options. + * f2c compatibility: Overall Options. + * f2c intrinsics: Fortran Dialect Options. + * f2c intrinsics group: Intrinsic Groups. + * f77 compatibility: Shorthand Options. + * f77 support: Backslash in Constants. + * f771, program: What is GNU Fortran?. + * f90 intrinsics group: Intrinsic Groups. + * fatal signal: Bug Criteria. + * FDate intrinsic <1>: FDate Intrinsic (function). + * FDate intrinsic: FDate Intrinsic (subroutine). + * FDL, GNU Free Documentation License: GNU Free Documentation License. + * features, language: Direction of Language Development. + * features, ugly <1>: Distensions. + * features, ugly: Shorthand Options. + * FFE <1>: Front End. + * FFE: What is GNU Fortran?. + * fflush(): Output Assumed To Flush. + * FGet intrinsic <1>: FGet Intrinsic (function). + * FGet intrinsic: FGet Intrinsic (subroutine). + * FGetC intrinsic <1>: FGetC Intrinsic (function). + * FGetC intrinsic: FGetC Intrinsic (subroutine). + * file format not recognized: What is GNU Fortran?. + * file formats: Portable Unformatted Files. + * file name extension: Overall Options. + * file name suffix: Overall Options. + * file type: Overall Options. + * file, source <1>: Source Form. + * file, source <2>: Lines. + * file, source: What is GNU Fortran?. + * files, executable: What is GNU Fortran?. + * fixed form <1>: Source Form. + * fixed form <2>: Lines. + * fixed form: Fortran Dialect Options. + * Float intrinsic: Float Intrinsic. + * FloatI intrinsic: FloatI Intrinsic. + * floating-point errors: Floating-point Errors. + * floating-point, errors: Inconsistent Calling Sequences. + * floating-point, exceptions: Floating-point Exception Handling. + * floating-point, precision <1>: Floating-point precision. + * floating-point, precision: Optimize Options. + * FloatJ intrinsic: FloatJ Intrinsic. + * Floor intrinsic: Floor Intrinsic. + * Flush intrinsic: Flush Intrinsic. + * flushing output: Output Assumed To Flush. + * FNum intrinsic: FNum Intrinsic. + * FORM='PRINT': OPEN CLOSE and INQUIRE Keywords. + * FORMAT descriptors <1>: Fortran 90 Features. + * FORMAT descriptors: I/O. + * FORMAT statement <1>: Q Edit Descriptor. + * FORMAT statement: Expressions in FORMAT Statements. + * FORTRAN 66 <1>: Fortran Dialect Options. + * FORTRAN 66: Shorthand Options. + * FORTRAN 77 compatibility: Standard Support. + * Fortran 90: Fortran 90 Features. + * Fortran 90, compatibility: Fortran 90. + * Fortran 90, features: Fortran Dialect Options. + * Fortran 90, intrinsics: Fortran Dialect Options. + * Fortran 90, support: Fortran 90 Support. + * Fortran preprocessor: Overall Options. + * forward references: GLOBALS. + * FPE handling: Floating-point Exception Handling. + * FPut intrinsic <1>: FPut Intrinsic (function). + * FPut intrinsic: FPut Intrinsic (subroutine). + * FPutC intrinsic <1>: FPutC Intrinsic (function). + * FPutC intrinsic: FPutC Intrinsic (subroutine). + * Fraction intrinsic: Fraction Intrinsic. + * free form <1>: Source Form. + * free form <2>: Lines. + * free form: Fortran Dialect Options. + * front end, g77 <1>: Front End. + * front end, g77: What is GNU Fortran?. + * FSeek intrinsic: FSeek Intrinsic. + * FSF, funding the: Funding GNU Fortran. + * FStat intrinsic <1>: FStat Intrinsic (function). + * FStat intrinsic: FStat Intrinsic (subroutine). + * FTell intrinsic <1>: FTell Intrinsic (function). + * FTell intrinsic: FTell Intrinsic (subroutine). + * function references, in adjustable array bounds: Array Bounds Expressions. + * FUNCTION statement <1>: Functions. + * FUNCTION statement: Procedures. + * functions: Functions. + * functions, mistyped: Not My Type. + * funding improvements: Funding GNU Fortran. + * funding the FSF: Funding GNU Fortran. + * g77 options, --driver <1>: Changes. + * g77 options, --driver: News. + * g77 options, -v: G77 and GCC. + * g77, command <1>: G77 and GCC. + * g77, command: What is GNU Fortran?. + * g77, components of: What is GNU Fortran?. + * g77, front end <1>: Front End. + * g77, front end: What is GNU Fortran?. + * g77, modifying: Overall Options. + * G77_date_y2kbuggy_0: Year 2000 (Y2K) Problems. + * G77_vxtidate_y2kbuggy_0: Year 2000 (Y2K) Problems. + * GBE <1>: Philosophy of Code Generation. + * GBE: What is GNU Fortran?. + * GBEL: Philosophy of Code Generation. + * gcc, back end <1>: Philosophy of Code Generation. + * gcc, back end: What is GNU Fortran?. + * gcc, command <1>: G77 and GCC. + * gcc, command: What is GNU Fortran?. + * gcc, command as driver: What is GNU Fortran?. + * gcc, not recognizing Fortran source: What is GNU Fortran?. + * gdb, command: What is GNU Fortran?. + * gdb, support: Debugger Problems. + * generic intrinsics: Generics and Specifics. + * GError intrinsic: GError Intrinsic. + * GetArg intrinsic <1>: Main Program Unit. + * GetArg intrinsic: GetArg Intrinsic. + * GetCWD intrinsic <1>: GetCWD Intrinsic (function). + * GetCWD intrinsic: GetCWD Intrinsic (subroutine). + * GetEnv intrinsic: GetEnv Intrinsic. + * GetGId intrinsic: GetGId Intrinsic. + * GetLog intrinsic: GetLog Intrinsic. + * GetPId intrinsic: GetPId Intrinsic. + * getting started: Getting Started. + * GetUId intrinsic: GetUId Intrinsic. + * global names, warning <1>: Code Gen Options. + * global names, warning: Warning Options. + * GMTime intrinsic: GMTime Intrinsic. + * GNU Back End (GBE) <1>: Philosophy of Code Generation. + * GNU Back End (GBE): What is GNU Fortran?. + * GNU Back End Language (GBEL): Philosophy of Code Generation. + * GNU Fortran command options: Invoking G77. + * GNU Fortran Front End (FFE) <1>: Front End. + * GNU Fortran Front End (FFE): What is GNU Fortran?. + * gnu intrinsics group: Intrinsic Groups. + * GOTO statement: Assigned Statement Labels. + * groups of intrinsics: Intrinsic Groups. + * hardware errors: Signal 11 and Friends. + * hash mark: Character Set. + * HDF: Portable Unformatted Files. + * hidden intrinsics: Intrinsic Groups. + * Hollerith constants <1>: Character and Hollerith Constants. + * Hollerith constants <2>: Ugly Conversion of Initializers. + * Hollerith constants <3>: Ugly Implicit Argument Conversion. + * Hollerith constants: Fortran Dialect Options. + * horizontal tab: Tabs. + * HostNm intrinsic <1>: HostNm Intrinsic (function). + * HostNm intrinsic: HostNm Intrinsic (subroutine). + * Huge intrinsic: Huge Intrinsic. + * I/O, errors: Run-time Library Errors. + * I/O, flushing: Output Assumed To Flush. + * IAbs intrinsic: IAbs Intrinsic. + * IAChar intrinsic: IAChar Intrinsic. + * IAnd intrinsic: IAnd Intrinsic. + * IArgC intrinsic <1>: Main Program Unit. + * IArgC intrinsic: IArgC Intrinsic. + * IBClr intrinsic: IBClr Intrinsic. + * IBits intrinsic: IBits Intrinsic. + * IBSet intrinsic: IBSet Intrinsic. + * IChar intrinsic: IChar Intrinsic. + * IDate intrinsic <1>: IDate Intrinsic (VXT). + * IDate intrinsic: IDate Intrinsic (UNIX). + * IDiM intrinsic: IDiM Intrinsic. + * IDInt intrinsic: IDInt Intrinsic. + * IDNInt intrinsic: IDNInt Intrinsic. + * IEEE 754 conformance <1>: Floating-point precision. + * IEEE 754 conformance: Optimize Options. + * IEOr intrinsic: IEOr Intrinsic. + * IErrNo intrinsic: IErrNo Intrinsic. + * IFix intrinsic: IFix Intrinsic. + * IIAbs intrinsic: IIAbs Intrinsic. + * IIAnd intrinsic: IIAnd Intrinsic. + * IIBClr intrinsic: IIBClr Intrinsic. + * IIBits intrinsic: IIBits Intrinsic. + * IIBSet intrinsic: IIBSet Intrinsic. + * IIDiM intrinsic: IIDiM Intrinsic. + * IIDInt intrinsic: IIDInt Intrinsic. + * IIDNnt intrinsic: IIDNnt Intrinsic. + * IIEOr intrinsic: IIEOr Intrinsic. + * IIFix intrinsic: IIFix Intrinsic. + * IInt intrinsic: IInt Intrinsic. + * IIOr intrinsic: IIOr Intrinsic. + * IIQint intrinsic: IIQint Intrinsic. + * IIQNnt intrinsic: IIQNnt Intrinsic. + * IIShftC intrinsic: IIShftC Intrinsic. + * IISign intrinsic: IISign Intrinsic. + * illegal unit number: Large File Unit Numbers. + * Imag intrinsic: Imag Intrinsic. + * imaginary part <1>: Complex Variables. + * imaginary part: Ugly Complex Part Extraction. + * ImagPart intrinsic: ImagPart Intrinsic. + * IMax0 intrinsic: IMax0 Intrinsic. + * IMax1 intrinsic: IMax1 Intrinsic. + * IMin0 intrinsic: IMin0 Intrinsic. + * IMin1 intrinsic: IMin1 Intrinsic. + * IMod intrinsic: IMod Intrinsic. + * IMPLICIT CHARACTER*(*) statement: Limitation on Implicit Declarations. + * implicit declaration, warning: Warning Options. + * IMPLICIT NONE, similar effect: Warning Options. + * implicit typing: Not My Type. + * improvements, funding: Funding GNU Fortran. + * in-line code <1>: GLOBALS. + * in-line code <2>: Code Gen Options. + * in-line code <3>: Optimize Options. + * in-line code: What is GNU Fortran?. + * INCLUDE directive <1>: Bug Reporting. + * INCLUDE directive <2>: INCLUDE. + * INCLUDE directive <3>: Directory Options. + * INCLUDE directive: Preprocessor Options. + * included files: Bug Reporting. + * inclusion, directory search paths for: Directory Options. + * inconsistent floating-point results: Floating-point Errors. + * incorrect diagnostics: What is GNU Fortran?. + * incorrect error messages: What is GNU Fortran?. + * incorrect use of language: What is GNU Fortran?. + * increasing maximum unit number: Large File Unit Numbers. + * increasing precision: Increasing Precision/Range. + * increasing range: Increasing Precision/Range. + * Index intrinsic: Index Intrinsic. + * indexed (iterative) DO: Optimize Options. + * infinite spaces printed: Strange Behavior at Run Time. + * INInt intrinsic: INInt Intrinsic. + * initialization, bug: Known Bugs. + * initialization, of local variables: Code Gen Options. + * initialization, run-time: Startup Code. + * initialization, statement placement: Initializing Before Specifying. + * INot intrinsic: INot Intrinsic. + * INQUIRE statement: OPEN CLOSE and INQUIRE Keywords. + * installation trouble: Trouble. + * Int intrinsic: Int Intrinsic. + * Int2 intrinsic: Int2 Intrinsic. + * Int8 intrinsic: Int8 Intrinsic. + * integer constants: Known Bugs. + * INTEGER(KIND=1) type: Compiler Types. + * INTEGER(KIND=2) type: Compiler Types. + * INTEGER(KIND=3) type: Compiler Types. + * INTEGER(KIND=6) type: Compiler Types. + * INTEGER*2 support: Popular Non-standard Types. + * INTEGER*8 support: Full Support for Compiler Types. + * Intel x86: News. + * interfacing: Debugging and Interfacing. + * internal consistency checks: Overall Options. + * intrinsics, Abort: Abort Intrinsic. + * intrinsics, Abs: Abs Intrinsic. + * intrinsics, Access: Access Intrinsic. + * intrinsics, AChar: AChar Intrinsic. + * intrinsics, ACos: ACos Intrinsic. + * intrinsics, ACosD: ACosD Intrinsic. + * intrinsics, AdjustL: AdjustL Intrinsic. + * intrinsics, AdjustR: AdjustR Intrinsic. + * intrinsics, AImag <1>: AImag Intrinsic. + * intrinsics, AImag: REAL() and AIMAG() of Complex. + * intrinsics, AIMax0: AIMax0 Intrinsic. + * intrinsics, AIMin0: AIMin0 Intrinsic. + * intrinsics, AInt: AInt Intrinsic. + * intrinsics, AJMax0: AJMax0 Intrinsic. + * intrinsics, AJMin0: AJMin0 Intrinsic. + * intrinsics, Alarm: Alarm Intrinsic. + * intrinsics, All: All Intrinsic. + * intrinsics, Allocated: Allocated Intrinsic. + * intrinsics, ALog: ALog Intrinsic. + * intrinsics, ALog10: ALog10 Intrinsic. + * intrinsics, AMax0: AMax0 Intrinsic. + * intrinsics, AMax1: AMax1 Intrinsic. + * intrinsics, AMin0: AMin0 Intrinsic. + * intrinsics, AMin1: AMin1 Intrinsic. + * intrinsics, AMod: AMod Intrinsic. + * intrinsics, And <1>: Bit Operations on Floating-point Data. + * intrinsics, And: And Intrinsic. + * intrinsics, ANInt: ANInt Intrinsic. + * intrinsics, Any: Any Intrinsic. + * intrinsics, ASin: ASin Intrinsic. + * intrinsics, ASinD: ASinD Intrinsic. + * intrinsics, Associated: Associated Intrinsic. + * intrinsics, ATan: ATan Intrinsic. + * intrinsics, ATan2: ATan2 Intrinsic. + * intrinsics, ATan2D: ATan2D Intrinsic. + * intrinsics, ATanD: ATanD Intrinsic. + * intrinsics, badu77: Fortran Dialect Options. + * intrinsics, BesJ0: BesJ0 Intrinsic. + * intrinsics, BesJ1: BesJ1 Intrinsic. + * intrinsics, BesJN: BesJN Intrinsic. + * intrinsics, BesY0: BesY0 Intrinsic. + * intrinsics, BesY1: BesY1 Intrinsic. + * intrinsics, BesYN: BesYN Intrinsic. + * intrinsics, Bit_Size: Bit_Size Intrinsic. + * intrinsics, BITest: BITest Intrinsic. + * intrinsics, BJTest: BJTest Intrinsic. + * intrinsics, BTest: BTest Intrinsic. + * intrinsics, CAbs: CAbs Intrinsic. + * intrinsics, CCos: CCos Intrinsic. + * intrinsics, CDAbs: CDAbs Intrinsic. + * intrinsics, CDCos: CDCos Intrinsic. + * intrinsics, CDExp: CDExp Intrinsic. + * intrinsics, CDLog: CDLog Intrinsic. + * intrinsics, CDSin: CDSin Intrinsic. + * intrinsics, CDSqRt: CDSqRt Intrinsic. + * intrinsics, Ceiling: Ceiling Intrinsic. + * intrinsics, CExp: CExp Intrinsic. + * intrinsics, Char: Char Intrinsic. + * intrinsics, ChDir <1>: ChDir Intrinsic (function). + * intrinsics, ChDir: ChDir Intrinsic (subroutine). + * intrinsics, ChMod <1>: ChMod Intrinsic (function). + * intrinsics, ChMod: ChMod Intrinsic (subroutine). + * intrinsics, CLog: CLog Intrinsic. + * intrinsics, Cmplx <1>: Cmplx Intrinsic. + * intrinsics, Cmplx: CMPLX() of DOUBLE PRECISION. + * intrinsics, Complex: Complex Intrinsic. + * intrinsics, COMPLEX: Fortran Dialect Options. + * intrinsics, Conjg: Conjg Intrinsic. + * intrinsics, context-sensitive: Context-Sensitive Intrinsicness. + * intrinsics, Cos: Cos Intrinsic. + * intrinsics, CosD: CosD Intrinsic. + * intrinsics, CosH: CosH Intrinsic. + * intrinsics, Count: Count Intrinsic. + * intrinsics, CPU_Time: CPU_Time Intrinsic. + * intrinsics, CShift: CShift Intrinsic. + * intrinsics, CSin: CSin Intrinsic. + * intrinsics, CSqRt: CSqRt Intrinsic. + * intrinsics, CTime <1>: CTime Intrinsic (function). + * intrinsics, CTime: CTime Intrinsic (subroutine). + * intrinsics, DAbs: DAbs Intrinsic. + * intrinsics, DACos: DACos Intrinsic. + * intrinsics, DACosD: DACosD Intrinsic. + * intrinsics, DASin: DASin Intrinsic. + * intrinsics, DASinD: DASinD Intrinsic. + * intrinsics, DATan: DATan Intrinsic. + * intrinsics, DATan2: DATan2 Intrinsic. + * intrinsics, DATan2D: DATan2D Intrinsic. + * intrinsics, DATanD: DATanD Intrinsic. + * intrinsics, Date: Date Intrinsic. + * intrinsics, Date_and_Time: Date_and_Time Intrinsic. + * intrinsics, DbesJ0: DbesJ0 Intrinsic. + * intrinsics, DbesJ1: DbesJ1 Intrinsic. + * intrinsics, DbesJN: DbesJN Intrinsic. + * intrinsics, DbesY0: DbesY0 Intrinsic. + * intrinsics, DbesY1: DbesY1 Intrinsic. + * intrinsics, DbesYN: DbesYN Intrinsic. + * intrinsics, Dble: Dble Intrinsic. + * intrinsics, DbleQ: DbleQ Intrinsic. + * intrinsics, DCmplx: DCmplx Intrinsic. + * intrinsics, DConjg: DConjg Intrinsic. + * intrinsics, DCos: DCos Intrinsic. + * intrinsics, DCosD: DCosD Intrinsic. + * intrinsics, DCosH: DCosH Intrinsic. + * intrinsics, DDiM: DDiM Intrinsic. + * intrinsics, deleted: Intrinsic Groups. + * intrinsics, DErF: DErF Intrinsic. + * intrinsics, DErFC: DErFC Intrinsic. + * intrinsics, DExp: DExp Intrinsic. + * intrinsics, DFloat: DFloat Intrinsic. + * intrinsics, DFlotI: DFlotI Intrinsic. + * intrinsics, DFlotJ: DFlotJ Intrinsic. + * intrinsics, Digits: Digits Intrinsic. + * intrinsics, DiM: DiM Intrinsic. + * intrinsics, DImag: DImag Intrinsic. + * intrinsics, DInt: DInt Intrinsic. + * intrinsics, disabled: Intrinsic Groups. + * intrinsics, DLog: DLog Intrinsic. + * intrinsics, DLog10: DLog10 Intrinsic. + * intrinsics, DMax1: DMax1 Intrinsic. + * intrinsics, DMin1: DMin1 Intrinsic. + * intrinsics, DMod: DMod Intrinsic. + * intrinsics, DNInt: DNInt Intrinsic. + * intrinsics, Dot_Product: Dot_Product Intrinsic. + * intrinsics, DProd: DProd Intrinsic. + * intrinsics, DReal: DReal Intrinsic. + * intrinsics, DSign: DSign Intrinsic. + * intrinsics, DSin: DSin Intrinsic. + * intrinsics, DSinD: DSinD Intrinsic. + * intrinsics, DSinH: DSinH Intrinsic. + * intrinsics, DSqRt: DSqRt Intrinsic. + * intrinsics, DTan: DTan Intrinsic. + * intrinsics, DTanD: DTanD Intrinsic. + * intrinsics, DTanH: DTanH Intrinsic. + * intrinsics, DTime <1>: DTime Intrinsic (function). + * intrinsics, DTime: DTime Intrinsic (subroutine). + * intrinsics, enabled: Intrinsic Groups. + * intrinsics, EOShift: EOShift Intrinsic. + * intrinsics, Epsilon: Epsilon Intrinsic. + * intrinsics, ErF: ErF Intrinsic. + * intrinsics, ErFC: ErFC Intrinsic. + * intrinsics, ETime <1>: ETime Intrinsic (function). + * intrinsics, ETime: ETime Intrinsic (subroutine). + * intrinsics, Exit: Exit Intrinsic. + * intrinsics, Exp: Exp Intrinsic. + * intrinsics, Exponent: Exponent Intrinsic. + * intrinsics, f2c: Fortran Dialect Options. + * intrinsics, FDate <1>: FDate Intrinsic (function). + * intrinsics, FDate: FDate Intrinsic (subroutine). + * intrinsics, FGet <1>: FGet Intrinsic (function). + * intrinsics, FGet: FGet Intrinsic (subroutine). + * intrinsics, FGetC <1>: FGetC Intrinsic (function). + * intrinsics, FGetC: FGetC Intrinsic (subroutine). + * intrinsics, Float: Float Intrinsic. + * intrinsics, FloatI: FloatI Intrinsic. + * intrinsics, FloatJ: FloatJ Intrinsic. + * intrinsics, Floor: Floor Intrinsic. + * intrinsics, Flush: Flush Intrinsic. + * intrinsics, FNum: FNum Intrinsic. + * intrinsics, Fortran 90: Fortran Dialect Options. + * intrinsics, FPut <1>: FPut Intrinsic (function). + * intrinsics, FPut: FPut Intrinsic (subroutine). + * intrinsics, FPutC <1>: FPutC Intrinsic (function). + * intrinsics, FPutC: FPutC Intrinsic (subroutine). + * intrinsics, Fraction: Fraction Intrinsic. + * intrinsics, FSeek: FSeek Intrinsic. + * intrinsics, FStat <1>: FStat Intrinsic (function). + * intrinsics, FStat: FStat Intrinsic (subroutine). + * intrinsics, FTell <1>: FTell Intrinsic (function). + * intrinsics, FTell: FTell Intrinsic (subroutine). + * intrinsics, generic: Generics and Specifics. + * intrinsics, GError: GError Intrinsic. + * intrinsics, GetArg <1>: Main Program Unit. + * intrinsics, GetArg: GetArg Intrinsic. + * intrinsics, GetCWD <1>: GetCWD Intrinsic (function). + * intrinsics, GetCWD: GetCWD Intrinsic (subroutine). + * intrinsics, GetEnv: GetEnv Intrinsic. + * intrinsics, GetGId: GetGId Intrinsic. + * intrinsics, GetLog: GetLog Intrinsic. + * intrinsics, GetPId: GetPId Intrinsic. + * intrinsics, GetUId: GetUId Intrinsic. + * intrinsics, GMTime: GMTime Intrinsic. + * intrinsics, groups: Intrinsic Groups. + * intrinsics, groups of: Intrinsic Groups. + * intrinsics, hidden: Intrinsic Groups. + * intrinsics, HostNm <1>: HostNm Intrinsic (function). + * intrinsics, HostNm: HostNm Intrinsic (subroutine). + * intrinsics, Huge: Huge Intrinsic. + * intrinsics, IAbs: IAbs Intrinsic. + * intrinsics, IAChar: IAChar Intrinsic. + * intrinsics, IAnd: IAnd Intrinsic. + * intrinsics, IArgC <1>: Main Program Unit. + * intrinsics, IArgC: IArgC Intrinsic. + * intrinsics, IBClr: IBClr Intrinsic. + * intrinsics, IBits: IBits Intrinsic. + * intrinsics, IBSet: IBSet Intrinsic. + * intrinsics, IChar: IChar Intrinsic. + * intrinsics, IDate <1>: IDate Intrinsic (VXT). + * intrinsics, IDate: IDate Intrinsic (UNIX). + * intrinsics, IDiM: IDiM Intrinsic. + * intrinsics, IDInt: IDInt Intrinsic. + * intrinsics, IDNInt: IDNInt Intrinsic. + * intrinsics, IEOr: IEOr Intrinsic. + * intrinsics, IErrNo: IErrNo Intrinsic. + * intrinsics, IFix: IFix Intrinsic. + * intrinsics, IIAbs: IIAbs Intrinsic. + * intrinsics, IIAnd: IIAnd Intrinsic. + * intrinsics, IIBClr: IIBClr Intrinsic. + * intrinsics, IIBits: IIBits Intrinsic. + * intrinsics, IIBSet: IIBSet Intrinsic. + * intrinsics, IIDiM: IIDiM Intrinsic. + * intrinsics, IIDInt: IIDInt Intrinsic. + * intrinsics, IIDNnt: IIDNnt Intrinsic. + * intrinsics, IIEOr: IIEOr Intrinsic. + * intrinsics, IIFix: IIFix Intrinsic. + * intrinsics, IInt: IInt Intrinsic. + * intrinsics, IIOr: IIOr Intrinsic. + * intrinsics, IIQint: IIQint Intrinsic. + * intrinsics, IIQNnt: IIQNnt Intrinsic. + * intrinsics, IIShftC: IIShftC Intrinsic. + * intrinsics, IISign: IISign Intrinsic. + * intrinsics, Imag: Imag Intrinsic. + * intrinsics, ImagPart: ImagPart Intrinsic. + * intrinsics, IMax0: IMax0 Intrinsic. + * intrinsics, IMax1: IMax1 Intrinsic. + * intrinsics, IMin0: IMin0 Intrinsic. + * intrinsics, IMin1: IMin1 Intrinsic. + * intrinsics, IMod: IMod Intrinsic. + * intrinsics, Index: Index Intrinsic. + * intrinsics, INInt: INInt Intrinsic. + * intrinsics, INot: INot Intrinsic. + * intrinsics, Int: Int Intrinsic. + * intrinsics, Int2: Int2 Intrinsic. + * intrinsics, Int8: Int8 Intrinsic. + * intrinsics, IOr: IOr Intrinsic. + * intrinsics, IRand: IRand Intrinsic. + * intrinsics, IsaTty: IsaTty Intrinsic. + * intrinsics, IShft: IShft Intrinsic. + * intrinsics, IShftC: IShftC Intrinsic. + * intrinsics, ISign: ISign Intrinsic. + * intrinsics, ITime: ITime Intrinsic. + * intrinsics, IZExt: IZExt Intrinsic. + * intrinsics, JIAbs: JIAbs Intrinsic. + * intrinsics, JIAnd: JIAnd Intrinsic. + * intrinsics, JIBClr: JIBClr Intrinsic. + * intrinsics, JIBits: JIBits Intrinsic. + * intrinsics, JIBSet: JIBSet Intrinsic. + * intrinsics, JIDiM: JIDiM Intrinsic. + * intrinsics, JIDInt: JIDInt Intrinsic. + * intrinsics, JIDNnt: JIDNnt Intrinsic. + * intrinsics, JIEOr: JIEOr Intrinsic. + * intrinsics, JIFix: JIFix Intrinsic. + * intrinsics, JInt: JInt Intrinsic. + * intrinsics, JIOr: JIOr Intrinsic. + * intrinsics, JIQint: JIQint Intrinsic. + * intrinsics, JIQNnt: JIQNnt Intrinsic. + * intrinsics, JIShft: JIShft Intrinsic. + * intrinsics, JIShftC: JIShftC Intrinsic. + * intrinsics, JISign: JISign Intrinsic. + * intrinsics, JMax0: JMax0 Intrinsic. + * intrinsics, JMax1: JMax1 Intrinsic. + * intrinsics, JMin0: JMin0 Intrinsic. + * intrinsics, JMin1: JMin1 Intrinsic. + * intrinsics, JMod: JMod Intrinsic. + * intrinsics, JNInt: JNInt Intrinsic. + * intrinsics, JNot: JNot Intrinsic. + * intrinsics, JZExt: JZExt Intrinsic. + * intrinsics, Kill <1>: Kill Intrinsic (function). + * intrinsics, Kill: Kill Intrinsic (subroutine). + * intrinsics, Kind: Kind Intrinsic. + * intrinsics, LBound: LBound Intrinsic. + * intrinsics, Len: Len Intrinsic. + * intrinsics, Len_Trim: Len_Trim Intrinsic. + * intrinsics, LGe: LGe Intrinsic. + * intrinsics, LGt: LGt Intrinsic. + * intrinsics, Link <1>: Link Intrinsic (function). + * intrinsics, Link: Link Intrinsic (subroutine). + * intrinsics, LLe: LLe Intrinsic. + * intrinsics, LLt: LLt Intrinsic. + * intrinsics, LnBlnk: LnBlnk Intrinsic. + * intrinsics, Loc: Loc Intrinsic. + * intrinsics, Log: Log Intrinsic. + * intrinsics, Log10: Log10 Intrinsic. + * intrinsics, Logical: Logical Intrinsic. + * intrinsics, Long: Long Intrinsic. + * intrinsics, LShift: LShift Intrinsic. + * intrinsics, LStat <1>: LStat Intrinsic (function). + * intrinsics, LStat: LStat Intrinsic (subroutine). + * intrinsics, LTime: LTime Intrinsic. + * intrinsics, MatMul: MatMul Intrinsic. + * intrinsics, Max: Max Intrinsic. + * intrinsics, Max0: Max0 Intrinsic. + * intrinsics, Max1: Max1 Intrinsic. + * intrinsics, MaxExponent: MaxExponent Intrinsic. + * intrinsics, MaxLoc: MaxLoc Intrinsic. + * intrinsics, MaxVal: MaxVal Intrinsic. + * intrinsics, MClock: MClock Intrinsic. + * intrinsics, MClock8: MClock8 Intrinsic. + * intrinsics, Merge: Merge Intrinsic. + * intrinsics, MIL-STD 1753: Fortran Dialect Options. + * intrinsics, Min: Min Intrinsic. + * intrinsics, Min0: Min0 Intrinsic. + * intrinsics, Min1: Min1 Intrinsic. + * intrinsics, MinExponent: MinExponent Intrinsic. + * intrinsics, MinLoc: MinLoc Intrinsic. + * intrinsics, MinVal: MinVal Intrinsic. + * intrinsics, Mod: Mod Intrinsic. + * intrinsics, Modulo: Modulo Intrinsic. + * intrinsics, MvBits: MvBits Intrinsic. + * intrinsics, Nearest: Nearest Intrinsic. + * intrinsics, NInt: NInt Intrinsic. + * intrinsics, Not: Not Intrinsic. + * intrinsics, Or <1>: Bit Operations on Floating-point Data. + * intrinsics, Or: Or Intrinsic. + * intrinsics, others: Other Intrinsics. + * intrinsics, Pack: Pack Intrinsic. + * intrinsics, PError: PError Intrinsic. + * intrinsics, Precision: Precision Intrinsic. + * intrinsics, Present: Present Intrinsic. + * intrinsics, Product: Product Intrinsic. + * intrinsics, QAbs: QAbs Intrinsic. + * intrinsics, QACos: QACos Intrinsic. + * intrinsics, QACosD: QACosD Intrinsic. + * intrinsics, QASin: QASin Intrinsic. + * intrinsics, QASinD: QASinD Intrinsic. + * intrinsics, QATan: QATan Intrinsic. + * intrinsics, QATan2: QATan2 Intrinsic. + * intrinsics, QATan2D: QATan2D Intrinsic. + * intrinsics, QATanD: QATanD Intrinsic. + * intrinsics, QCos: QCos Intrinsic. + * intrinsics, QCosD: QCosD Intrinsic. + * intrinsics, QCosH: QCosH Intrinsic. + * intrinsics, QDiM: QDiM Intrinsic. + * intrinsics, QExp: QExp Intrinsic. + * intrinsics, QExt: QExt Intrinsic. + * intrinsics, QExtD: QExtD Intrinsic. + * intrinsics, QFloat: QFloat Intrinsic. + * intrinsics, QInt: QInt Intrinsic. + * intrinsics, QLog: QLog Intrinsic. + * intrinsics, QLog10: QLog10 Intrinsic. + * intrinsics, QMax1: QMax1 Intrinsic. + * intrinsics, QMin1: QMin1 Intrinsic. + * intrinsics, QMod: QMod Intrinsic. + * intrinsics, QNInt: QNInt Intrinsic. + * intrinsics, QSin: QSin Intrinsic. + * intrinsics, QSinD: QSinD Intrinsic. + * intrinsics, QSinH: QSinH Intrinsic. + * intrinsics, QSqRt: QSqRt Intrinsic. + * intrinsics, QTan: QTan Intrinsic. + * intrinsics, QTanD: QTanD Intrinsic. + * intrinsics, QTanH: QTanH Intrinsic. + * intrinsics, Radix: Radix Intrinsic. + * intrinsics, Rand: Rand Intrinsic. + * intrinsics, Random_Number: Random_Number Intrinsic. + * intrinsics, Random_Seed: Random_Seed Intrinsic. + * intrinsics, Range: Range Intrinsic. + * intrinsics, Real <1>: Real Intrinsic. + * intrinsics, Real: REAL() and AIMAG() of Complex. + * intrinsics, RealPart: RealPart Intrinsic. + * intrinsics, Rename <1>: Rename Intrinsic (function). + * intrinsics, Rename: Rename Intrinsic (subroutine). + * intrinsics, Repeat: Repeat Intrinsic. + * intrinsics, Reshape: Reshape Intrinsic. + * intrinsics, RRSpacing: RRSpacing Intrinsic. + * intrinsics, RShift: RShift Intrinsic. + * intrinsics, Scale: Scale Intrinsic. + * intrinsics, Scan: Scan Intrinsic. + * intrinsics, Secnds: Secnds Intrinsic. + * intrinsics, Second <1>: Second Intrinsic (subroutine). + * intrinsics, Second: Second Intrinsic (function). + * intrinsics, Selected_Int_Kind: Selected_Int_Kind Intrinsic. + * intrinsics, Selected_Real_Kind: Selected_Real_Kind Intrinsic. + * intrinsics, Set_Exponent: Set_Exponent Intrinsic. + * intrinsics, Shape: Shape Intrinsic. + * intrinsics, Shift: Bit Operations on Floating-point Data. + * intrinsics, Short: Short Intrinsic. + * intrinsics, Sign: Sign Intrinsic. + * intrinsics, Signal <1>: Signal Intrinsic (function). + * intrinsics, Signal: Signal Intrinsic (subroutine). + * intrinsics, Sin: Sin Intrinsic. + * intrinsics, SinD: SinD Intrinsic. + * intrinsics, SinH: SinH Intrinsic. + * intrinsics, Sleep: Sleep Intrinsic. + * intrinsics, Sngl: Sngl Intrinsic. + * intrinsics, SnglQ: SnglQ Intrinsic. + * intrinsics, Spacing: Spacing Intrinsic. + * intrinsics, Spread: Spread Intrinsic. + * intrinsics, SqRt: SqRt Intrinsic. + * intrinsics, SRand: SRand Intrinsic. + * intrinsics, Stat <1>: Stat Intrinsic (function). + * intrinsics, Stat: Stat Intrinsic (subroutine). + * intrinsics, Sum: Sum Intrinsic. + * intrinsics, SymLnk <1>: SymLnk Intrinsic (function). + * intrinsics, SymLnk: SymLnk Intrinsic (subroutine). + * intrinsics, System <1>: System Intrinsic (function). + * intrinsics, System: System Intrinsic (subroutine). + * intrinsics, System_Clock: System_Clock Intrinsic. + * intrinsics, table of: Table of Intrinsic Functions. + * intrinsics, Tan: Tan Intrinsic. + * intrinsics, TanD: TanD Intrinsic. + * intrinsics, TanH: TanH Intrinsic. + * intrinsics, Time <1>: Time Intrinsic (VXT). + * intrinsics, Time: Time Intrinsic (UNIX). + * intrinsics, Time8: Time8 Intrinsic. + * intrinsics, Tiny: Tiny Intrinsic. + * intrinsics, Transfer: Transfer Intrinsic. + * intrinsics, Transpose: Transpose Intrinsic. + * intrinsics, Trim: Trim Intrinsic. + * intrinsics, TtyNam <1>: TtyNam Intrinsic (function). + * intrinsics, TtyNam: TtyNam Intrinsic (subroutine). + * intrinsics, UBound: UBound Intrinsic. + * intrinsics, UMask <1>: UMask Intrinsic (function). + * intrinsics, UMask: UMask Intrinsic (subroutine). + * intrinsics, UNIX: Fortran Dialect Options. + * intrinsics, Unlink <1>: Unlink Intrinsic (function). + * intrinsics, Unlink: Unlink Intrinsic (subroutine). + * intrinsics, Unpack: Unpack Intrinsic. + * intrinsics, Verify: Verify Intrinsic. + * intrinsics, VXT: Fortran Dialect Options. + * intrinsics, XOr: XOr Intrinsic. + * intrinsics, ZAbs: ZAbs Intrinsic. + * intrinsics, ZCos: ZCos Intrinsic. + * intrinsics, ZExp: ZExp Intrinsic. + * intrinsics, ZExt: ZExt Intrinsic. + * intrinsics, ZLog: ZLog Intrinsic. + * intrinsics, ZSin: ZSin Intrinsic. + * intrinsics, ZSqRt: ZSqRt Intrinsic. + * Introduction: Top. + * invalid assembly code: Bug Criteria. + * invalid input: Bug Criteria. + * IOr intrinsic: IOr Intrinsic. + * IOSTAT=: Run-time Library Errors. + * IRand intrinsic: IRand Intrinsic. + * IsaTty intrinsic: IsaTty Intrinsic. + * IShft intrinsic: IShft Intrinsic. + * IShftC intrinsic: IShftC Intrinsic. + * ISign intrinsic: ISign Intrinsic. + * iterative DO: Optimize Options. + * ITime intrinsic: ITime Intrinsic. + * ix86 floating-point: Floating-point precision. + * ix86 FPU stack: Inconsistent Calling Sequences. + * IZExt intrinsic: IZExt Intrinsic. + * JCB002 program: Generics and Specifics. + * JCB003 program: CMPAMBIG. + * JIAbs intrinsic: JIAbs Intrinsic. + * JIAnd intrinsic: JIAnd Intrinsic. + * JIBClr intrinsic: JIBClr Intrinsic. + * JIBits intrinsic: JIBits Intrinsic. + * JIBSet intrinsic: JIBSet Intrinsic. + * JIDiM intrinsic: JIDiM Intrinsic. + * JIDInt intrinsic: JIDInt Intrinsic. + * JIDNnt intrinsic: JIDNnt Intrinsic. + * JIEOr intrinsic: JIEOr Intrinsic. + * JIFix intrinsic: JIFix Intrinsic. + * JInt intrinsic: JInt Intrinsic. + * JIOr intrinsic: JIOr Intrinsic. + * JIQint intrinsic: JIQint Intrinsic. + * JIQNnt intrinsic: JIQNnt Intrinsic. + * JIShft intrinsic: JIShft Intrinsic. + * JIShftC intrinsic: JIShftC Intrinsic. + * JISign intrinsic: JISign Intrinsic. + * JMax0 intrinsic: JMax0 Intrinsic. + * JMax1 intrinsic: JMax1 Intrinsic. + * JMin0 intrinsic: JMin0 Intrinsic. + * JMin1 intrinsic: JMin1 Intrinsic. + * JMod intrinsic: JMod Intrinsic. + * JNInt intrinsic: JNInt Intrinsic. + * JNot intrinsic: JNot Intrinsic. + * JZExt intrinsic: JZExt Intrinsic. + * keywords, RECURSIVE: RECURSIVE Keyword. + * Kill intrinsic <1>: Kill Intrinsic (function). + * Kill intrinsic: Kill Intrinsic (subroutine). + * Kind intrinsic: Kind Intrinsic. + * KIND= notation: Kind Notation. + * known causes of trouble: Trouble. + * lack of recursion: RECURSIVE Keyword. + * language, dialect options: Fortran Dialect Options. + * language, features: Direction of Language Development. + * language, incorrect use of: What is GNU Fortran?. + * large aggregate areas: Known Bugs. + * large common blocks: Large Common Blocks. + * layout of COMMON blocks: Aligned Data. + * LBound intrinsic: LBound Intrinsic. + * ld command: What is GNU Fortran?. + * ld, can't find _main: Cannot Link Fortran Programs. + * ld, can't find strange names: Cannot Link Fortran Programs. + * ld, error linking user code: Cannot Link Fortran Programs. + * ld, errors: Large Common Blocks. + * left angle: Character Set. + * left bracket: Character Set. + * legacy code: Collected Fortran Wisdom. + * Len intrinsic: Len Intrinsic. + * Len_Trim intrinsic: Len_Trim Intrinsic. + * length of source lines: Fortran Dialect Options. + * letters, lowercase: Case Sensitivity. + * letters, uppercase: Case Sensitivity. + * LGe intrinsic: LGe Intrinsic. + * LGt intrinsic: LGt Intrinsic. + * libc, non-ANSI or non-default: Strange Behavior at Run Time. + * libf2c library: What is GNU Fortran?. + * libg2c library: What is GNU Fortran?. + * libraries: What is GNU Fortran?. + * libraries, containing BLOCK DATA: Block Data and Libraries. + * libraries, libf2c: What is GNU Fortran?. + * libraries, libg2c: What is GNU Fortran?. + * limits, array dimensions: Compiler Limits. + * limits, array size: Array Size. + * limits, compiler: Compiler Limits. + * limits, continuation lines <1>: Compiler Limits. + * limits, continuation lines: Continuation Line. + * limits, lengths of names <1>: Compiler Limits. + * limits, lengths of names: Syntactic Items. + * limits, lengths of source lines: Fortran Dialect Options. + * limits, multi-dimension arrays: Array Size. + * limits, on character-variable length: Character-variable Length. + * limits, rank: Compiler Limits. + * limits, run-time library: Run-time Environment Limits. + * limits, timings <1>: Secnds Intrinsic. + * limits, timings <2>: DTime Intrinsic (function). + * limits, timings <3>: Time8 Intrinsic. + * limits, timings <4>: Time Intrinsic (UNIX). + * limits, timings <5>: System_Clock Intrinsic. + * limits, timings <6>: Second Intrinsic (subroutine). + * limits, timings <7>: Second Intrinsic (function). + * limits, timings <8>: MClock8 Intrinsic. + * limits, timings <9>: MClock Intrinsic. + * limits, timings <10>: ETime Intrinsic (function). + * limits, timings <11>: ETime Intrinsic (subroutine). + * limits, timings <12>: DTime Intrinsic (subroutine). + * limits, timings: CPU_Time Intrinsic. + * limits, Y10K <1>: Time Intrinsic (VXT). + * limits, Y10K <2>: IDate Intrinsic (UNIX). + * limits, Y10K <3>: FDate Intrinsic (function). + * limits, Y10K <4>: FDate Intrinsic (subroutine). + * limits, Y10K: Date_and_Time Intrinsic. + * limits, Y2K: IDate Intrinsic (VXT). + * lines: Lines. + * lines, continuation: Continuation Line. + * lines, length: Fortran Dialect Options. + * lines, long: Long Lines. + * lines, short: Short Lines. + * Link intrinsic <1>: Link Intrinsic (function). + * Link intrinsic: Link Intrinsic (subroutine). + * linking: What is GNU Fortran?. + * linking against non-standard library: Strange Behavior at Run Time. + * linking error for user code: Cannot Link Fortran Programs. + * linking error, user code: Cannot Link Fortran Programs. + * linking with C: Interoperating with C and C++. + * linking, errors: Large Common Blocks. + * LLe intrinsic: LLe Intrinsic. + * LLt intrinsic: LLt Intrinsic. + * LnBlnk intrinsic: LnBlnk Intrinsic. + * Loc intrinsic: Loc Intrinsic. + * local equivalence areas: Local Equivalence Areas. + * Log intrinsic: Log Intrinsic. + * Log10 intrinsic: Log10 Intrinsic. + * logical expressions, comparing: Equivalence Versus Equality. + * Logical intrinsic: Logical Intrinsic. + * LOGICAL(KIND=1) type: Compiler Types. + * LOGICAL(KIND=2) type: Compiler Types. + * LOGICAL(KIND=3) type: Compiler Types. + * LOGICAL(KIND=6) type: Compiler Types. + * LOGICAL*1 support: Popular Non-standard Types. + * Long intrinsic: Long Intrinsic. + * long source lines: Long Lines. + * long time: Timer Wraparounds. + * loops, optimizing: Optimize Options. + * loops, speeding up: Optimize Options. + * loops, unrolling: Optimize Options. + * lowercase letters: Case Sensitivity. + * LShift intrinsic: LShift Intrinsic. + * LStat intrinsic <1>: LStat Intrinsic (function). + * LStat intrinsic: LStat Intrinsic (subroutine). + * LTime intrinsic: LTime Intrinsic. + * machine code: What is GNU Fortran?. + * macro options: Shorthand Options. + * main program unit, debugging: Main Program Unit. + * main(): Main Program Unit. + * MAIN__(): Main Program Unit. + * Makefile example: Bug Criteria. + * MAP statement: STRUCTURE UNION RECORD MAP. + * MatMul intrinsic: MatMul Intrinsic. + * Max intrinsic: Max Intrinsic. + * Max0 intrinsic: Max0 Intrinsic. + * Max1 intrinsic: Max1 Intrinsic. + * MaxExponent intrinsic: MaxExponent Intrinsic. + * maximum number of dimensions: Compiler Limits. + * maximum rank: Compiler Limits. + * maximum unit number: Large File Unit Numbers. + * MaxLoc intrinsic: MaxLoc Intrinsic. + * MaxVal intrinsic: MaxVal Intrinsic. + * MClock intrinsic: MClock Intrinsic. + * MClock8 intrinsic: MClock8 Intrinsic. + * memory usage, of compiler: Known Bugs. + * Merge intrinsic: Merge Intrinsic. + * messages, run-time: Run-time Library Errors. + * messages, warning: Warning Options. + * messages, warning and error: Warnings and Errors. + * mil intrinsics group: Intrinsic Groups. + * MIL-STD 1753 <1>: MIL-STD 1753. + * MIL-STD 1753 <2>: END DO. + * MIL-STD 1753 <3>: DO WHILE. + * MIL-STD 1753: Fortran Dialect Options. + * Min intrinsic: Min Intrinsic. + * Min0 intrinsic: Min0 Intrinsic. + * Min1 intrinsic: Min1 Intrinsic. + * MinExponent intrinsic: MinExponent Intrinsic. + * MinLoc intrinsic: MinLoc Intrinsic. + * MinVal intrinsic: MinVal Intrinsic. + * mistakes: What is GNU Fortran?. + * mistyped functions: Not My Type. + * mistyped variables: Not My Type. + * Mod intrinsic: Mod Intrinsic. + * modifying g77: Overall Options. + * Modulo intrinsic: Modulo Intrinsic. + * multi-dimension arrays: Array Size. + * MvBits intrinsic: MvBits Intrinsic. + * MXUNIT: Large File Unit Numbers. + * name space: Mangling of Names. + * NAMELIST statement: NAMELIST. + * naming conflicts: Multiple Definitions of External Names. + * naming issues: Mangling of Names. + * naming programs: Nothing Happens. + * NaN values: Floating-point Exception Handling. + * Nearest intrinsic: Nearest Intrinsic. + * negative forms of options: Invoking G77. + * negative time: Timer Wraparounds. + * Netlib <1>: Increasing Precision/Range. + * Netlib: C Interfacing Tools. + * network file system: Output Assumed To Flush. + * new users: Getting Started. + * newbies: Getting Started. + * NeXTStep problems: NeXTStep Problems. + * NFS: Output Assumed To Flush. + * NInt intrinsic: NInt Intrinsic. + * nonportable conversions: Nonportable Conversions. + * Not intrinsic: Not Intrinsic. + * nothing happens: Nothing Happens. + * null arguments: Ugly Null Arguments. + * null byte, trailing: Character and Hollerith Constants. + * null CHARACTER strings: Character Type. + * number of continuation lines: Continuation Line. + * number of dimensions, maximum: Compiler Limits. + * number of trips: Loops. + * O edit descriptor: I/O. + * octal constants: Double Quote Meaning. + * omitting arguments: Ugly Null Arguments. + * one-trip DO loops: Fortran Dialect Options. + * open angle: Character Set. + * open bracket: Character Set. + * OPEN statement: OPEN CLOSE and INQUIRE Keywords. + * optimization, better: Better Optimization. + * optimization, for Pentium: Aligned Data. + * optimize options: Optimize Options. + * options, --driver <1>: Changes. + * options, --driver: News. + * options, -falias-check <1>: Aliasing Assumed To Work. + * options, -falias-check: Code Gen Options. + * options, -fargument-alias <1>: Aliasing Assumed To Work. + * options, -fargument-alias: Code Gen Options. + * options, -fargument-noalias <1>: Aliasing Assumed To Work. + * options, -fargument-noalias: Code Gen Options. + * options, -fbadu77-intrinsics-delete: Fortran Dialect Options. + * options, -fbadu77-intrinsics-disable: Fortran Dialect Options. + * options, -fbadu77-intrinsics-enable: Fortran Dialect Options. + * options, -fbadu77-intrinsics-hide: Fortran Dialect Options. + * options, -fcaller-saves: Optimize Options. + * options, -fcase-initcap: Fortran Dialect Options. + * options, -fcase-lower: Fortran Dialect Options. + * options, -fcase-preserve: Fortran Dialect Options. + * options, -fcase-strict-lower: Fortran Dialect Options. + * options, -fcase-strict-upper: Fortran Dialect Options. + * options, -fcase-upper: Fortran Dialect Options. + * options, -fdelayed-branch: Optimize Options. + * options, -fdollar-ok: Fortran Dialect Options. + * options, -femulate-complex: Code Gen Options. + * options, -fexpensive-optimizations: Optimize Options. + * options, -ff2c-intrinsics-delete: Fortran Dialect Options. + * options, -ff2c-intrinsics-disable: Fortran Dialect Options. + * options, -ff2c-intrinsics-enable: Fortran Dialect Options. + * options, -ff2c-intrinsics-hide: Fortran Dialect Options. + * options, -ff2c-library: Code Gen Options. + * options, -ff66: Shorthand Options. + * options, -ff77: Shorthand Options. + * options, -ff90: Fortran Dialect Options. + * options, -ff90-intrinsics-delete: Fortran Dialect Options. + * options, -ff90-intrinsics-disable: Fortran Dialect Options. + * options, -ff90-intrinsics-enable: Fortran Dialect Options. + * options, -ff90-intrinsics-hide: Fortran Dialect Options. + * options, -ffast-math: Optimize Options. + * options, -ffixed-line-length-N: Fortran Dialect Options. + * options, -ffloat-store: Optimize Options. + * options, -fforce-addr: Optimize Options. + * options, -fforce-mem: Optimize Options. + * options, -ffree-form: Fortran Dialect Options. + * options, -fgnu-intrinsics-delete: Fortran Dialect Options. + * options, -fgnu-intrinsics-disable: Fortran Dialect Options. + * options, -fgnu-intrinsics-enable: Fortran Dialect Options. + * options, -fgnu-intrinsics-hide: Fortran Dialect Options. + * options, -fGROUP-intrinsics-hide: Overly Convenient Options. + * options, -finit-local-zero <1>: Overly Convenient Options. + * options, -finit-local-zero: Code Gen Options. + * options, -fintrin-case-any: Fortran Dialect Options. + * options, -fintrin-case-initcap: Fortran Dialect Options. + * options, -fintrin-case-lower: Fortran Dialect Options. + * options, -fintrin-case-upper: Fortran Dialect Options. + * options, -fmatch-case-any: Fortran Dialect Options. + * options, -fmatch-case-initcap: Fortran Dialect Options. + * options, -fmatch-case-lower: Fortran Dialect Options. + * options, -fmatch-case-upper: Fortran Dialect Options. + * options, -fmil-intrinsics-delete: Fortran Dialect Options. + * options, -fmil-intrinsics-disable: Fortran Dialect Options. + * options, -fmil-intrinsics-enable: Fortran Dialect Options. + * options, -fmil-intrinsics-hide: Fortran Dialect Options. + * options, -fno-argument-noalias-global <1>: Aliasing Assumed To Work. + * options, -fno-argument-noalias-global: Code Gen Options. + * options, -fno-automatic <1>: Overly Convenient Options. + * options, -fno-automatic: Code Gen Options. + * options, -fno-backslash: Fortran Dialect Options. + * options, -fno-common: Code Gen Options. + * options, -fno-f2c <1>: Avoid f2c Compatibility. + * options, -fno-f2c: Code Gen Options. + * options, -fno-f77: Shorthand Options. + * options, -fno-fixed-form: Fortran Dialect Options. + * options, -fno-globals: Code Gen Options. + * options, -fno-ident: Code Gen Options. + * options, -fno-inline: Optimize Options. + * options, -fno-move-all-movables: Optimize Options. + * options, -fno-reduce-all-givs: Optimize Options. + * options, -fno-rerun-loop-opt: Optimize Options. + * options, -fno-second-underscore: Code Gen Options. + * options, -fno-silent: Overall Options. + * options, -fno-trapping-math: Optimize Options. + * options, -fno-ugly: Shorthand Options. + * options, -fno-ugly-args: Fortran Dialect Options. + * options, -fno-ugly-init: Fortran Dialect Options. + * options, -fno-underscoring <1>: Names. + * options, -fno-underscoring: Code Gen Options. + * options, -fonetrip: Fortran Dialect Options. + * options, -fpack-struct: Code Gen Options. + * options, -fpcc-struct-return: Code Gen Options. + * options, -fpedantic: Warning Options. + * options, -fPIC: News. + * options, -freg-struct-return: Code Gen Options. + * options, -frerun-cse-after-loop: Optimize Options. + * options, -fschedule-insns: Optimize Options. + * options, -fschedule-insns2: Optimize Options. + * options, -fset-g77-defaults: Overall Options. + * options, -fshort-double: Code Gen Options. + * options, -fsource-case-lower: Fortran Dialect Options. + * options, -fsource-case-preserve: Fortran Dialect Options. + * options, -fsource-case-upper: Fortran Dialect Options. + * options, -fstrength-reduce: Optimize Options. + * options, -fsymbol-case-any: Fortran Dialect Options. + * options, -fsymbol-case-initcap: Fortran Dialect Options. + * options, -fsymbol-case-lower: Fortran Dialect Options. + * options, -fsymbol-case-upper: Fortran Dialect Options. + * options, -fsyntax-only: Warning Options. + * options, -ftypeless-boz: Fortran Dialect Options. + * options, -fugly: Shorthand Options. + * options, -fugly-assign: Fortran Dialect Options. + * options, -fugly-assumed: Fortran Dialect Options. + * options, -fugly-comma: Fortran Dialect Options. + * options, -fugly-complex: Fortran Dialect Options. + * options, -fugly-logint: Fortran Dialect Options. + * options, -funix-intrinsics-delete: Fortran Dialect Options. + * options, -funix-intrinsics-disable: Fortran Dialect Options. + * options, -funix-intrinsics-enable: Fortran Dialect Options. + * options, -funix-intrinsics-hide: Fortran Dialect Options. + * options, -funroll-all-loops: Optimize Options. + * options, -funroll-loops: Optimize Options. + * options, -funsafe-math-optimizations: Optimize Options. + * options, -fversion: Overall Options. + * options, -fvxt: Fortran Dialect Options. + * options, -fvxt-intrinsics-delete: Fortran Dialect Options. + * options, -fvxt-intrinsics-disable: Fortran Dialect Options. + * options, -fvxt-intrinsics-enable: Fortran Dialect Options. + * options, -fvxt-intrinsics-hide: Fortran Dialect Options. + * options, -fzeros: Code Gen Options. + * options, -g: Debugging Options. + * options, -I-: Directory Options. + * options, -Idir: Directory Options. + * options, -malign-double <1>: Aligned Data. + * options, -malign-double: Optimize Options. + * options, -Nl: Compiler Limits. + * options, -Nx: Compiler Limits. + * options, -pedantic: Warning Options. + * options, -pedantic-errors: Warning Options. + * options, -v: G77 and GCC. + * options, -W: Warning Options. + * options, -w: Warning Options. + * options, -Waggregate-return: Warning Options. + * options, -Wall: Warning Options. + * options, -Wcomment: Warning Options. + * options, -Wconversion: Warning Options. + * options, -Werror: Warning Options. + * options, -Wformat: Warning Options. + * options, -Wid-clash-LEN: Warning Options. + * options, -Wimplicit: Warning Options. + * options, -Wlarger-than-LEN: Warning Options. + * options, -Wno-globals: Warning Options. + * options, -Wparentheses: Warning Options. + * options, -Wredundant-decls: Warning Options. + * options, -Wshadow: Warning Options. + * options, -Wsurprising: Warning Options. + * options, -Wswitch: Warning Options. + * options, -Wtraditional: Warning Options. + * options, -Wuninitialized: Warning Options. + * options, -Wunused: Warning Options. + * options, -x f77-cpp-input: LEX. + * options, adding: Adding Options. + * options, code generation: Code Gen Options. + * options, debugging: Debugging Options. + * options, dialect: Fortran Dialect Options. + * options, directory search: Directory Options. + * options, GNU Fortran command: Invoking G77. + * options, macro: Shorthand Options. + * options, negative forms: Invoking G77. + * options, optimization: Optimize Options. + * options, overall: Overall Options. + * options, overly convenient: Overly Convenient Options. + * options, preprocessor: Preprocessor Options. + * options, shorthand: Shorthand Options. + * options, warnings: Warning Options. + * Or intrinsic <1>: Bit Operations on Floating-point Data. + * Or intrinsic: Or Intrinsic. + * order of evaluation, side effects: Order of Side Effects. + * ordering, array: Arrays. + * other intrinsics: Other Intrinsics. + * output, flushing: Output Assumed To Flush. + * overall options: Overall Options. + * overflow: Warning Options. + * overlapping arguments: Aliasing Assumed To Work. + * overlays: Aliasing Assumed To Work. + * overly convenient options: Overly Convenient Options. + * overwritten data: Strange Behavior at Run Time. + * Pack intrinsic: Pack Intrinsic. + * padding: Known Bugs. + * parallel processing: Support for Threads. + * PARAMETER statement <1>: Old-style PARAMETER Statements. + * PARAMETER statement: Intrinsics in PARAMETER Statements. + * parameters, unused: Warning Options. + * paths, search: Directory Options. + * PDB: Portable Unformatted Files. + * pedantic compilation: Pedantic Compilation. + * Pentium optimizations: Aligned Data. + * percent sign: Character Set. + * PError intrinsic: PError Intrinsic. + * placing initialization statements: Initializing Before Specifying. + * POINTER statement: POINTER Statements. + * pointers <1>: Ugly Assigned Labels. + * pointers: Kind Notation. + * Poking the bear: Philosophy of Code Generation. + * porting, simplify: Simplify Porting. + * pound sign: Character Set. + * Precision intrinsic: Precision Intrinsic. + * precision, increasing: Increasing Precision/Range. + * prefix-radix constants: Fortran Dialect Options. + * preprocessor <1>: LEX. + * preprocessor <2>: Bug Reporting. + * preprocessor <3>: Cpp-style directives. + * preprocessor <4>: Overall Options. + * preprocessor: What is GNU Fortran?. + * preprocessor options: Preprocessor Options. + * Present intrinsic: Present Intrinsic. + * printing compilation status: Overall Options. + * printing main source: Known Bugs. + * printing version information <1>: Overall Options. + * printing version information: What is GNU Fortran?. + * procedures: Procedures. + * Product intrinsic: Product Intrinsic. + * PROGRAM statement: Main Program Unit. + * programs, cc1: What is GNU Fortran?. + * programs, cc1plus: What is GNU Fortran?. + * programs, compiling: G77 and GCC. + * programs, cpp <1>: LEX. + * programs, cpp <2>: Bug Reporting. + * programs, cpp <3>: Preprocessor Options. + * programs, cpp <4>: Overall Options. + * programs, cpp: What is GNU Fortran?. + * programs, f771: What is GNU Fortran?. + * programs, ratfor: Overall Options. + * programs, speeding up: Faster Programs. + * programs, test: Nothing Happens. + * projects: Projects. + * Q edit descriptor: Q Edit Descriptor. + * QAbs intrinsic: QAbs Intrinsic. + * QACos intrinsic: QACos Intrinsic. + * QACosD intrinsic: QACosD Intrinsic. + * QASin intrinsic: QASin Intrinsic. + * QASinD intrinsic: QASinD Intrinsic. + * QATan intrinsic: QATan Intrinsic. + * QATan2 intrinsic: QATan2 Intrinsic. + * QATan2D intrinsic: QATan2D Intrinsic. + * QATanD intrinsic: QATanD Intrinsic. + * QCos intrinsic: QCos Intrinsic. + * QCosD intrinsic: QCosD Intrinsic. + * QCosH intrinsic: QCosH Intrinsic. + * QDiM intrinsic: QDiM Intrinsic. + * QExp intrinsic: QExp Intrinsic. + * QExt intrinsic: QExt Intrinsic. + * QExtD intrinsic: QExtD Intrinsic. + * QFloat intrinsic: QFloat Intrinsic. + * QInt intrinsic: QInt Intrinsic. + * QLog intrinsic: QLog Intrinsic. + * QLog10 intrinsic: QLog10 Intrinsic. + * QMax1 intrinsic: QMax1 Intrinsic. + * QMin1 intrinsic: QMin1 Intrinsic. + * QMod intrinsic: QMod Intrinsic. + * QNInt intrinsic: QNInt Intrinsic. + * QSin intrinsic: QSin Intrinsic. + * QSinD intrinsic: QSinD Intrinsic. + * QSinH intrinsic: QSinH Intrinsic. + * QSqRt intrinsic: QSqRt Intrinsic. + * QTan intrinsic: QTan Intrinsic. + * QTanD intrinsic: QTanD Intrinsic. + * QTanH intrinsic: QTanH Intrinsic. + * question mark: Character Set. + * questionable instructions: What is GNU Fortran?. + * Radix intrinsic: Radix Intrinsic. + * Rand intrinsic: Rand Intrinsic. + * Random_Number intrinsic: Random_Number Intrinsic. + * Random_Seed intrinsic: Random_Seed Intrinsic. + * range checking: Code Gen Options. + * Range intrinsic: Range Intrinsic. + * range, increasing: Increasing Precision/Range. + * rank, maximum: Compiler Limits. + * ratfor: Overall Options. + * Ratfor preprocessor: Overall Options. + * READONLY: READONLY Keyword. + * reads and writes, scheduling: Aliasing Assumed To Work. + * Real intrinsic <1>: Real Intrinsic. + * Real intrinsic: REAL() and AIMAG() of Complex. + * real part: Ugly Complex Part Extraction. + * REAL(KIND=1) type: Compiler Types. + * REAL(KIND=2) type: Compiler Types. + * REAL*16 support: Full Support for Compiler Types. + * RealPart intrinsic: RealPart Intrinsic. + * recent versions <1>: Changes. + * recent versions: News. + * RECORD statement: STRUCTURE UNION RECORD MAP. + * recursion, lack of: RECURSIVE Keyword. + * RECURSIVE keyword: RECURSIVE Keyword. + * reference works: Language. + * Rename intrinsic <1>: Rename Intrinsic (function). + * Rename intrinsic: Rename Intrinsic (subroutine). + * Repeat intrinsic: Repeat Intrinsic. + * reporting bugs: Bugs. + * reporting compilation status: Overall Options. + * Reshape intrinsic: Reshape Intrinsic. + * results, inconsistent: Floating-point Errors. + * RETURN statement <1>: Alternate Returns. + * RETURN statement: Functions. + * return type of functions: Functions. + * right angle: Character Set. + * right bracket: Character Set. + * rounding errors: Floating-point Errors. + * row-major ordering: Arrays. + * RRSpacing intrinsic: RRSpacing Intrinsic. + * RShift intrinsic: RShift Intrinsic. + * run-time, dynamic allocation: Arbitrary Concatenation. + * run-time, initialization: Startup Code. + * run-time, library: What is GNU Fortran?. + * run-time, options: Code Gen Options. + * SAVE statement: Code Gen Options. + * saved variables: Variables Assumed To Be Saved. + * Scale intrinsic: Scale Intrinsic. + * Scan intrinsic: Scan Intrinsic. + * scheduling of reads and writes: Aliasing Assumed To Work. + * scope <1>: Scope and Classes of Names. + * scope: Scope of Names and Labels. + * search path: Directory Options. + * search paths, for included files: Directory Options. + * Secnds intrinsic: Secnds Intrinsic. + * Second intrinsic <1>: Second Intrinsic (subroutine). + * Second intrinsic: Second Intrinsic (function). + * segmentation violation <1>: Strange Behavior at Run Time. + * segmentation violation <2>: Stack Overflow. + * segmentation violation: NeXTStep Problems. + * Selected_Int_Kind intrinsic: Selected_Int_Kind Intrinsic. + * Selected_Real_Kind intrinsic: Selected_Real_Kind Intrinsic. + * semicolon <1>: Character Set. + * semicolon: Statements Comments Lines. + * sequence numbers: Better Source Model. + * Set_Exponent intrinsic: Set_Exponent Intrinsic. + * Shape intrinsic: Shape Intrinsic. + * SHARED: READONLY Keyword. + * Shift intrinsic: Bit Operations on Floating-point Data. + * Short intrinsic: Short Intrinsic. + * short source lines: Short Lines. + * short time: Timer Wraparounds. + * shorthand options: Shorthand Options. + * side effects, order of evaluation: Order of Side Effects. + * Sign intrinsic: Sign Intrinsic. + * signal 11: Signal 11 and Friends. + * Signal intrinsic <1>: Signal Intrinsic (function). + * Signal intrinsic: Signal Intrinsic (subroutine). + * signature of procedures: Procedures. + * simplify porting: Simplify Porting. + * Sin intrinsic: Sin Intrinsic. + * SinD intrinsic: SinD Intrinsic. + * SinH intrinsic: SinH Intrinsic. + * Sleep intrinsic: Sleep Intrinsic. + * Sngl intrinsic: Sngl Intrinsic. + * SnglQ intrinsic: SnglQ Intrinsic. + * Solaris: Strange Behavior at Run Time. + * source code <1>: Case Sensitivity. + * source code <2>: Source Form. + * source code <3>: Lines. + * source code: What is GNU Fortran?. + * source file: What is GNU Fortran?. + * source file format <1>: Case Sensitivity. + * source file format <2>: Source Form. + * source file format <3>: Lines. + * source file format: Fortran Dialect Options. + * source format <1>: Source Form. + * source format: Lines. + * source lines, long: Long Lines. + * source lines, short: Short Lines. + * space <1>: Lines. + * space: Character Set. + * space, endless printing of: Strange Behavior at Run Time. + * space, padding with: Short Lines. + * Spacing intrinsic: Spacing Intrinsic. + * SPC <1>: Lines. + * SPC: Character Set. + * speed, of compiler: Known Bugs. + * speed, of loops: Optimize Options. + * speed, of programs: Faster Programs. + * spills of floating-point results: Floating-point Errors. + * Spread intrinsic: Spread Intrinsic. + * SqRt intrinsic: SqRt Intrinsic. + * SRand intrinsic: SRand Intrinsic. + * stack, 387 coprocessor: News. + * stack, aligned: Aligned Data. + * stack, overflow: Stack Overflow. + * standard, ANSI FORTRAN 77: Language. + * standard, support for: Standard Support. + * startup code: Startup Code. + * Stat intrinsic <1>: Stat Intrinsic (function). + * Stat intrinsic: Stat Intrinsic (subroutine). + * statement labels, assigned: Assigned Statement Labels. + * statements, ACCEPT: TYPE and ACCEPT I/O Statements. + * statements, ASSIGN <1>: Assigned Statement Labels. + * statements, ASSIGN: Ugly Assigned Labels. + * statements, AUTOMATIC: AUTOMATIC Statement. + * statements, BLOCK DATA <1>: Multiple Definitions of External Names. + * statements, BLOCK DATA: Block Data and Libraries. + * statements, CLOSE: OPEN CLOSE and INQUIRE Keywords. + * statements, COMMON <1>: Multiple Definitions of External Names. + * statements, COMMON: Common Blocks. + * statements, COMPLEX: Complex Variables. + * statements, CYCLE: CYCLE and EXIT. + * statements, DATA <1>: Known Bugs. + * statements, DATA: Code Gen Options. + * statements, DECODE: ENCODE and DECODE. + * statements, DIMENSION <1>: Array Bounds Expressions. + * statements, DIMENSION <2>: Adjustable Arrays. + * statements, DIMENSION: Arrays. + * statements, DO <1>: Loops. + * statements, DO: Warning Options. + * statements, ENCODE: ENCODE and DECODE. + * statements, ENTRY: Alternate Entry Points. + * statements, EQUIVALENCE: Local Equivalence Areas. + * statements, EXIT: CYCLE and EXIT. + * statements, FORMAT: Expressions in FORMAT Statements. + * statements, FUNCTION <1>: Functions. + * statements, FUNCTION: Procedures. + * statements, GOTO: Assigned Statement Labels. + * statements, IMPLICIT CHARACTER*(*): Limitation on Implicit Declarations. + * statements, INQUIRE: OPEN CLOSE and INQUIRE Keywords. + * statements, MAP: STRUCTURE UNION RECORD MAP. + * statements, NAMELIST: NAMELIST. + * statements, OPEN: OPEN CLOSE and INQUIRE Keywords. + * statements, PARAMETER <1>: Old-style PARAMETER Statements. + * statements, PARAMETER: Intrinsics in PARAMETER Statements. + * statements, POINTER: POINTER Statements. + * statements, PROGRAM: Main Program Unit. + * statements, RECORD: STRUCTURE UNION RECORD MAP. + * statements, RETURN <1>: Alternate Returns. + * statements, RETURN: Functions. + * statements, SAVE: Code Gen Options. + * statements, separated by semicolon: Statements Comments Lines. + * statements, STRUCTURE: STRUCTURE UNION RECORD MAP. + * statements, SUBROUTINE <1>: Alternate Returns. + * statements, SUBROUTINE: Procedures. + * statements, TYPE: TYPE and ACCEPT I/O Statements. + * statements, UNION: STRUCTURE UNION RECORD MAP. + * STATIC: AUTOMATIC Statement. + * static variables: Variables Assumed To Be Saved. + * status, compilation: Overall Options. + * storage association: Aliasing Assumed To Work. + * strings, empty: Character Type. + * STRUCTURE statement: STRUCTURE UNION RECORD MAP. + * structures: Known Bugs. + * submodels: Use Submodel Options. + * SUBROUTINE statement <1>: Alternate Returns. + * SUBROUTINE statement: Procedures. + * subroutines: Alternate Returns. + * subscript checking: Code Gen Options. + * substring checking: Code Gen Options. + * suffixes, file name: Overall Options. + * Sum intrinsic: Sum Intrinsic. + * support, Alpha: Known Bugs. + * support, ELF: News. + * support, f77: Backslash in Constants. + * support, FORTRAN 77: Standard Support. + * support, Fortran 90: Fortran 90 Support. + * support, gdb: Debugger Problems. + * suppressing warnings: Warning Options. + * symbol names <1>: Names. + * symbol names: Fortran Dialect Options. + * symbol names, scope and classes: Scope and Classes of Names. + * symbol names, transforming: Code Gen Options. + * symbol names, underscores: Code Gen Options. + * SymLnk intrinsic <1>: SymLnk Intrinsic (function). + * SymLnk intrinsic: SymLnk Intrinsic (subroutine). + * synchronous write errors: Output Assumed To Flush. + * syntax checking: Warning Options. + * System intrinsic <1>: System Intrinsic (function). + * System intrinsic: System Intrinsic (subroutine). + * System_Clock intrinsic: System_Clock Intrinsic. + * tab character: Tabs. + * table of intrinsics: Table of Intrinsic Functions. + * Tan intrinsic: Tan Intrinsic. + * TanD intrinsic: TanD Intrinsic. + * TanH intrinsic: TanH Intrinsic. + * test programs: Nothing Happens. + * testing alignment: Aligned Data. + * textbooks: Language. + * threads: Support for Threads. + * Time intrinsic <1>: Time Intrinsic (VXT). + * Time intrinsic: Time Intrinsic (UNIX). + * Time8 intrinsic: Time8 Intrinsic. + * Tiny intrinsic: Tiny Intrinsic. + * Toolpack: Increasing Precision/Range. + * trailing comma: Ugly Null Arguments. + * trailing comment <1>: LEX. + * trailing comment <2>: Trailing Comment. + * trailing comment: Statements Comments Lines. + * trailing null byte: Character and Hollerith Constants. + * Transfer intrinsic: Transfer Intrinsic. + * transforming symbol names <1>: Names. + * transforming symbol names: Code Gen Options. + * translation of user programs: What is GNU Fortran?. + * Transpose intrinsic: Transpose Intrinsic. + * Trim intrinsic: Trim Intrinsic. + * trips, number of: Loops. + * truncation, of floating-point values: Floating-point Errors. + * truncation, of long lines: Long Lines. + * TtyNam intrinsic <1>: TtyNam Intrinsic (function). + * TtyNam intrinsic: TtyNam Intrinsic (subroutine). + * TYPE statement: TYPE and ACCEPT I/O Statements. + * types, COMPLEX(KIND=1): Compiler Types. + * types, COMPLEX(KIND=2): Compiler Types. + * types, constants <1>: Compiler Constants. + * types, constants <2>: Constants. + * types, constants: Fortran Dialect Options. + * types, DOUBLE COMPLEX: Compiler Types. + * types, DOUBLE PRECISION: Compiler Types. + * types, file: Overall Options. + * types, Fortran/C: C Access to Type Information. + * types, INTEGER(KIND=1): Compiler Types. + * types, INTEGER(KIND=2): Compiler Types. + * types, INTEGER(KIND=3): Compiler Types. + * types, INTEGER(KIND=6): Compiler Types. + * types, INTEGER*2: Popular Non-standard Types. + * types, INTEGER*8: Full Support for Compiler Types. + * types, LOGICAL(KIND=1): Compiler Types. + * types, LOGICAL(KIND=2): Compiler Types. + * types, LOGICAL(KIND=3): Compiler Types. + * types, LOGICAL(KIND=6): Compiler Types. + * types, LOGICAL*1: Popular Non-standard Types. + * types, of data: Compiler Types. + * types, REAL(KIND=1): Compiler Types. + * types, REAL(KIND=2): Compiler Types. + * types, REAL*16: Full Support for Compiler Types. + * UBound intrinsic: UBound Intrinsic. + * ugly features <1>: Distensions. + * ugly features: Shorthand Options. + * UMask intrinsic <1>: UMask Intrinsic (function). + * UMask intrinsic: UMask Intrinsic (subroutine). + * undefined behavior: Bug Criteria. + * undefined function value: Bug Criteria. + * undefined reference (_main): Cannot Link Fortran Programs. + * underscore <1>: Mangling of Names. + * underscore <2>: Underscores in Symbol Names. + * underscore <3>: Character Set. + * underscore: Code Gen Options. + * unformatted files: Portable Unformatted Files. + * uninitialized variables <1>: Variables Assumed To Be Zero. + * uninitialized variables <2>: Code Gen Options. + * uninitialized variables: Warning Options. + * UNION statement: STRUCTURE UNION RECORD MAP. + * unit numbers: Large File Unit Numbers. + * UNIX f77: Shorthand Options. + * UNIX intrinsics: Fortran Dialect Options. + * Unlink intrinsic <1>: Unlink Intrinsic (function). + * Unlink intrinsic: Unlink Intrinsic (subroutine). + * Unpack intrinsic: Unpack Intrinsic. + * unrecognized file format: What is GNU Fortran?. + * unresolved reference (various): Cannot Link Fortran Programs. + * unrolling loops: Optimize Options. + * UNSAVE: AUTOMATIC Statement. + * unsupported warnings: Warning Options. + * unused arguments <1>: Unused Arguments. + * unused arguments: Warning Options. + * unused dummies: Warning Options. + * unused parameters: Warning Options. + * unused variables: Warning Options. + * uppercase letters: Case Sensitivity. + * user-visible changes: Changes. + * variables, assumed to be zero: Variables Assumed To Be Zero. + * variables, automatic: AUTOMATIC Statement. + * variables, initialization of: Code Gen Options. + * variables, mistyped: Not My Type. + * variables, retaining values across calls: Variables Assumed To Be Saved. + * variables, uninitialized <1>: Code Gen Options. + * variables, uninitialized: Warning Options. + * variables, unused: Warning Options. + * Verify intrinsic: Verify Intrinsic. + * version information, printing <1>: Overall Options. + * version information, printing: What is GNU Fortran?. + * versions, recent <1>: Changes. + * versions, recent: News. + * VXT extensions <1>: VXT Fortran. + * VXT extensions: Fortran Dialect Options. + * VXT intrinsics: Fortran Dialect Options. + * vxtidate_y2kbuggy_0: Year 2000 (Y2K) Problems. + * warnings: What is GNU Fortran?. + * warnings vs errors: Warnings and Errors. + * warnings, all: Warning Options. + * warnings, extra: Warning Options. + * warnings, global names <1>: Code Gen Options. + * warnings, global names: Warning Options. + * warnings, implicit declaration: Warning Options. + * warnings, suppressing: Warning Options. + * warnings, unsupported: Warning Options. + * wisdom: Collected Fortran Wisdom. + * wraparound: Run-time Environment Limits. + * wraparound, timings <1>: Secnds Intrinsic. + * wraparound, timings <2>: DTime Intrinsic (function). + * wraparound, timings <3>: Time8 Intrinsic. + * wraparound, timings <4>: Time Intrinsic (UNIX). + * wraparound, timings <5>: System_Clock Intrinsic. + * wraparound, timings <6>: Second Intrinsic (subroutine). + * wraparound, timings <7>: Second Intrinsic (function). + * wraparound, timings <8>: MClock8 Intrinsic. + * wraparound, timings <9>: MClock Intrinsic. + * wraparound, timings <10>: ETime Intrinsic (function). + * wraparound, timings <11>: ETime Intrinsic (subroutine). + * wraparound, timings <12>: DTime Intrinsic (subroutine). + * wraparound, timings: CPU_Time Intrinsic. + * wraparound, Y10K <1>: Time Intrinsic (VXT). + * wraparound, Y10K <2>: IDate Intrinsic (UNIX). + * wraparound, Y10K <3>: FDate Intrinsic (function). + * wraparound, Y10K <4>: FDate Intrinsic (subroutine). + * wraparound, Y10K: Date_and_Time Intrinsic. + * wraparound, Y2K: IDate Intrinsic (VXT). + * writes, flushing: Output Assumed To Flush. + * writing code: Collected Fortran Wisdom. + * x86 floating-point: Floating-point precision. + * x86 FPU stack: Inconsistent Calling Sequences. + * XOr intrinsic: XOr Intrinsic. + * Y10K compliance <1>: Time Intrinsic (VXT). + * Y10K compliance <2>: Year 10000 (Y10K) Problems. + * Y10K compliance <3>: IDate Intrinsic (UNIX). + * Y10K compliance <4>: FDate Intrinsic (function). + * Y10K compliance <5>: FDate Intrinsic (subroutine). + * Y10K compliance: Date_and_Time Intrinsic. + * Y2K compliance <1>: Y2KBAD. + * Y2K compliance <2>: IDate Intrinsic (VXT). + * Y2K compliance <3>: Date Intrinsic. + * Y2K compliance: Year 2000 (Y2K) Problems. + * y2kbuggy: Year 2000 (Y2K) Problems. + * Year 10000 compliance <1>: Time Intrinsic (VXT). + * Year 10000 compliance <2>: Year 10000 (Y10K) Problems. + * Year 10000 compliance <3>: IDate Intrinsic (UNIX). + * Year 10000 compliance <4>: FDate Intrinsic (function). + * Year 10000 compliance <5>: FDate Intrinsic (subroutine). + * Year 10000 compliance: Date_and_Time Intrinsic. + * Year 2000 compliance <1>: Y2KBAD. + * Year 2000 compliance <2>: IDate Intrinsic (VXT). + * Year 2000 compliance <3>: Date Intrinsic. + * Year 2000 compliance: Year 2000 (Y2K) Problems. + * Z edit descriptor <1>: Fortran 90 Features. + * Z edit descriptor: I/O. + * ZAbs intrinsic: ZAbs Intrinsic. + * ZCos intrinsic: ZCos Intrinsic. + * zero byte, trailing: Character and Hollerith Constants. + * zero-initialized variables: Variables Assumed To Be Zero. + * zero-length CHARACTER: Character Type. + * zero-trip DO loops: Fortran Dialect Options. + * ZExp intrinsic: ZExp Intrinsic. + * ZExt intrinsic: ZExt Intrinsic. + * ZLog intrinsic: ZLog Intrinsic. + * ZSin intrinsic: ZSin Intrinsic. + * ZSqRt intrinsic: ZSqRt Intrinsic. + + diff -Nrc3pad gcc-3.0.4/gcc/f/g77.info-3 gcc-3.1/gcc/f/g77.info-3 *** gcc-3.0.4/gcc/f/g77.info-3 Wed Feb 20 19:57:12 2002 --- gcc-3.1/gcc/f/g77.info-3 Wed May 15 02:45:53 2002 *************** *** 1,16 **** ! This is g77.info, produced by makeinfo version 4.0b from g77.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * g77: (g77). The GNU Fortran compiler. END-INFO-DIR-ENTRY This file documents the use and the internals of the GNU Fortran ! (`g77') compiler. It corresponds to the GCC-3.0 version of `g77'. Published by the Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA ! Copyright (C) 1995,1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document --- 1,16 ---- ! This is g77.info, produced by makeinfo version 4.2 from g77.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * g77: (g77). The GNU Fortran compiler. END-INFO-DIR-ENTRY This file documents the use and the internals of the GNU Fortran ! (`g77') compiler. It corresponds to the GCC-3.1 version of `g77'. Published by the Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA ! Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document *************** Options for Debugging Your Program or GN *** 42,69 **** ================================================= GNU Fortran has various special options that are used for debugging ! either your program or `g77'. `-g' Produce debugging information in the operating system's native format (stabs, COFF, XCOFF, or DWARF). GDB can work with this debugging information. ! Support for this option in Fortran programs was incomplete up till ! version 0.5.26 of `g77'. In particular, names of variables and ! arrays in common blocks or that are storage-associated via ! `EQUIVALENCE' were unavailable to the debugger. ! ! However, version 0.5.19 of `g77' does provide this information in ! a rudimentary way, as controlled by the `-fdebug-kludge' option. ! ! Because version 0.5.26 of `g77' enables full debug information of ! COMMON BLOCK and EQUIVALENCE items, this option has been disabled. ! ! *Note Options for Code Generation Conventions: Code Gen Options, ! for more information. ! *Note Options for Debugging Your Program or GNU CC: (gcc)Debugging Options, for more information on debugging options.  --- 42,85 ---- ================================================= GNU Fortran has various special options that are used for debugging ! either your program or `g77' `-g' Produce debugging information in the operating system's native format (stabs, COFF, XCOFF, or DWARF). GDB can work with this debugging information. ! A sample debugging session looks like this (note the use of the ! breakpoint): ! $ cat gdb.f ! PROGRAM PROG ! DIMENSION A(10) ! DATA A /1.,2.,3.,4.,5.,6.,7.,8.,9.,10./ ! A(5) = 4. ! PRINT*,A ! END ! $ g77 -g -O gdb.f ! $ gdb a.out ! ... ! (gdb) break MAIN__ ! Breakpoint 1 at 0x8048e96: file gdb.f, line 4. ! (gdb) run ! Starting program: /home/toon/g77-bugs/./a.out ! Breakpoint 1, MAIN__ () at gdb.f:4 ! 4 A(5) = 4. ! Current language: auto; currently fortran ! (gdb) print a(5) ! $1 = 5 ! (gdb) step ! 5 PRINT*,A ! (gdb) print a(5) ! $2 = 4 ! ... ! One could also add the setting of the breakpoint and the first run ! command to the file `.gdbinit' in the current directory, to ! simplify the debugging session. ! *Note Options for Debugging Your Program or GCC: (gcc)Debugging Options, for more information on debugging options.  *************** Fortran programs: *** 98,104 **** _Note:_ The warning in the `gcc' documentation about this option does not apply, generally speaking, to Fortran code compiled by ! `g77'. *Note Aligned Data::, for more information on alignment issues. --- 114,120 ---- _Note:_ The warning in the `gcc' documentation about this option does not apply, generally speaking, to Fortran code compiled by ! `g77' *Note Aligned Data::, for more information on alignment issues. *************** Fortran programs: *** 139,145 **** `-ffast-math' Might allow some programs designed to not be too dependent on IEEE ! behavior for floating-point to run faster, or die trying. `-fstrength-reduce' Might make some loops run faster. --- 155,172 ---- `-ffast-math' Might allow some programs designed to not be too dependent on IEEE ! behavior for floating-point to run faster, or die trying. Sets ! `-funsafe-math-optimizations', and `-fno-trapping-math'. ! ! `-funsafe-math-optimizations' ! Allow optimizations that may be give incorrect results for certain ! IEEE inputs. ! ! `-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. `-fstrength-reduce' Might make some loops run faster. *************** the other form by either removing `no-' *** 307,313 **** `-fno-f2c' Do not generate code designed to be compatible with code generated ! by `f2c'; use the GNU calling conventions instead. The `f2c' calling conventions require functions that return type `REAL(KIND=1)' to actually return the C type `double', and --- 334,340 ---- `-fno-f2c' Do not generate code designed to be compatible with code generated ! by `f2c' use the GNU calling conventions instead. The `f2c' calling conventions require functions that return type `REAL(KIND=1)' to actually return the C type `double', and *************** the other form by either removing `no-' *** 331,338 **** For example, `INTRINSIC ABS;CALL FOO(ABS)' is rejected when `-fno-f2c' is in force. (Future versions of the `g77' run-time library might offer routines that provide GNU-callable versions of ! the routines that implement the `f2c'-callable intrinsics that may ! be passed as actual arguments, so that valid programs need not be rejected when `-fno-f2c' is used.) *Caution:* If `-fno-f2c' is used when compiling any source file --- 358,365 ---- For example, `INTRINSIC ABS;CALL FOO(ABS)' is rejected when `-fno-f2c' is in force. (Future versions of the `g77' run-time library might offer routines that provide GNU-callable versions of ! the routines that implement the `f2c' intrinsics that may be ! passed as actual arguments, so that valid programs need not be rejected when `-fno-f2c' is used.) *Caution:* If `-fno-f2c' is used when compiling any source file *************** the other form by either removing `no-' *** 341,347 **** `-ff2c-library' Specify that use of `libg2c' (or the original `libf2c') is ! required. This is the default for the current version of `g77'. Currently it is not valid to specify `-fno-f2c-library'. This option is provided so users can specify it in shell scripts that --- 368,374 ---- `-ff2c-library' Specify that use of `libg2c' (or the original `libf2c') is ! required. This is the default for the current version of `g77' Currently it is not valid to specify `-fno-f2c-library'. This option is provided so users can specify it in shell scripts that *************** the other form by either removing `no-' *** 361,367 **** the second underscore in all cases.) This is done to ensure compatibility with code produced by many ! UNIX Fortran compilers, including `f2c', which perform the same transformations. Use of `-fno-underscoring' is not recommended unless you are --- 388,394 ---- the second underscore in all cases.) This is done to ensure compatibility with code produced by many ! UNIX Fortran compilers, including `f2c' which perform the same transformations. Use of `-fno-underscoring' is not recommended unless you are *************** the other form by either removing `no-' *** 385,392 **** i = j() + max_count(&my_var, &lvar); Use of `-fno-underscoring' allows direct specification of ! user-defined names while debugging and when interfacing ! `g77'-compiled code with other languages. Note that just because the names match does _not_ mean that the interface implemented by `g77' for an external name matches the --- 412,419 ---- i = j() + max_count(&my_var, &lvar); Use of `-fno-underscoring' allows direct specification of ! user-defined names while debugging and when interfacing `g77' code ! with other languages. Note that just because the names match does _not_ mean that the interface implemented by `g77' for an external name matches the *************** the other form by either removing `no-' *** 405,411 **** 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 `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 --- 432,438 ---- 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 `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 *************** the other form by either removing `no-' *** 446,522 **** non-standard programs; standard-conforming programs should not be affected. - `-fdebug-kludge' - Emit information on `COMMON' and `EQUIVALENCE' members that might - help users of debuggers work around lack of proper debugging - information on such members. - - As of version 0.5.19, `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 `COMMON' block name, or the - `g77'-assigned name for the `EQUIVALENCE' name) and the offset, in - bytes, of the member from the beginning of the area. - - Using `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 `set language - c' and `set language fortran' to accomplish this. - - As of version 0.5.26 of `g77' this option has been disabled, as the - compiler is now able to emit correct and complete debug information - for COMMON BLOCK and EQUIVALENCE items. - - For example: - - 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) - - Use `-fdebug-kludge' to generate this information, which might - make some programs noticeably larger. - - _Caution:_ Future versions of `g77' might disregard this option - (and its negative form). Current plans call for this to happen - when published versions of `g77' and `gdb' exist that provide - proper access to debugging information on `COMMON' and - `EQUIVALENCE' members. This is believed to have happened as of - version 0.5.26 of `g77', so that this option has been disabled - starting with this release. - `-femulate-complex' Implement `COMPLEX' arithmetic via emulation, instead of using the facilities of the `gcc' back end that provide direct support of --- 473,478 ---- *************** the other form by either removing `no-' *** 537,543 **** Use of this option should not affect how Fortran code compiled by `g77' works in terms of its interfaces to other code, e.g. that ! compiled by `f2c'. _Caution:_ Future versions of `g77' might ignore both forms of this option. --- 493,501 ---- Use of this option should not affect how Fortran code compiled by `g77' works in terms of its interfaces to other code, e.g. that ! compiled by `f2c' ! ! As of GCC version 3.0, this option is not necessary anymore. _Caution:_ Future versions of `g77' might ignore both forms of this option. *************** the other form by either removing `no-' *** 661,667 **** *Note Options for Code Generation Conventions: (gcc)Code Gen Options, for information on more options offered by the GBE shared by ! `g77', `gcc', and other GNU compilers. Some of these do _not_ work when compiling programs written in Fortran: --- 619,625 ---- *Note Options for Code Generation Conventions: (gcc)Code Gen Options, for information on more options offered by the GBE shared by ! `g77' `gcc' and other GNU compilers. Some of these do _not_ work when compiling programs written in Fortran: *************** Environment Variables Affecting GNU Fort *** 695,700 **** to control its operation above and beyond those that affect the operation of `gcc'. ! *Note Environment Variables Affecting GNU CC: (gcc)Environment Variables, for information on environment variables. --- 653,658 ---- to control its operation above and beyond those that affect the operation of `gcc'. ! *Note Environment Variables Affecting GCC: (gcc)Environment Variables, for information on environment variables. diff -Nrc3pad gcc-3.0.4/gcc/f/g77.info-4 gcc-3.1/gcc/f/g77.info-4 *** gcc-3.0.4/gcc/f/g77.info-4 Wed Feb 20 19:57:12 2002 --- gcc-3.1/gcc/f/g77.info-4 Wed May 15 02:45:53 2002 *************** *** 1,16 **** ! This is g77.info, produced by makeinfo version 4.0b from g77.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * g77: (g77). The GNU Fortran compiler. END-INFO-DIR-ENTRY This file documents the use and the internals of the GNU Fortran ! (`g77') compiler. It corresponds to the GCC-3.0 version of `g77'. Published by the Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA ! Copyright (C) 1995,1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document --- 1,16 ---- ! This is g77.info, produced by makeinfo version 4.2 from g77.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * g77: (g77). The GNU Fortran compiler. END-INFO-DIR-ENTRY This file documents the use and the internals of the GNU Fortran ! (`g77') compiler. It corresponds to the GCC-3.1 version of `g77'. Published by the Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA ! Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document *************** clarify how they differ from other versi *** 75,88 **** getting a complete picture of what a particular `egcs' version contains somewhat more difficult. ! For information on bugs in the GCC-3.0 version of `g77', see *Note Known Bugs In GNU Fortran: Known Bugs. An online, "live" version of this document (derived directly from the mainline, development version of `g77' within `gcc') is available at `http://www.gnu.org/software/gcc/onlinedocs/g77_news.html'. ! The following information was last updated on 2001-06-03: In 0.5.26, `GCC' 3.0 versus `GCC' 2.95: ======================================= --- 75,173 ---- getting a complete picture of what a particular `egcs' version contains somewhat more difficult. ! For information on bugs in the GCC-3.1 version of `g77', see *Note Known Bugs In GNU Fortran: Known Bugs. An online, "live" version of this document (derived directly from the mainline, development version of `g77' within `gcc') is available at `http://www.gnu.org/software/gcc/onlinedocs/g77_news.html'. ! The following information was last updated on 2002-04-13: ! ! In `GCC' 3.1 (formerly known as g77-0.5.27) versus `GCC' 3.0: ! ============================================================= ! ! * Problem Reports fixed (in chronological order of submission): ! `947' ! Data statement initialization with subscript of kind INTEGER*2 ! ! `3743' ! Reference to intrinsic `ISHFT' invalid ! ! `3807' ! Function BESJN(integer,double) problems ! ! `3957' ! g77 -pipe -xf77-cpp-input sends output to stdout ! ! `4279' ! g77 -h" gives bogus output ! ! `4730' ! ICE on valid input using CALL EXIT(%VAL(...)) ! ! `4752' ! g77 -v -c -xf77-version /dev/null -xnone causes ice ! ! `4885' ! BACKSPACE example that doesn't work as of gcc/g77-3.0.x ! ! `5122' ! g77 rejects accepted use of INTEGER*2 as type of DATA ! statement loop index ! ! `5397' ! ICE on compiling source with 540 000 000 REAL array ! ! `5473' ! ICE on BESJN(integer*8,real) ! ! `5837' ! bug in loop unrolling ! ! * `g77' now has its man page generated from the texinfo ! documentation, to guarantee that it remains up to date. ! ! * `g77' used to reject the following program on 32-bit targets: ! PROGRAM PROG ! DIMENSION A(140 000 000) ! END ! with the message: ! prog.f: In program `prog': ! prog.f:2: ! DIMENSION A(140 000 000) ! ^ ! Array `a' at (^) is too large to handle ! 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. `g77 -static ...'. ! ! * Based on work done by Juergen Pfeifer () ! libf2c is now a shared library. One can still link in all objects ! with the program by specifying the `-static' option. ! ! * Robert Anderson () thought up a two line ! change that enables g77 to compile such code as: ! SUBROUTINE SUB(A, N) ! DIMENSION N(2) ! DIMENSION A(N(1),N(2)) ! A(1,1) = 1. ! END ! Note the use of array elements in the bounds of the adjustable ! array A. ! ! * George Helffrich () implemented a change ! in substring index checking (when specifying `-fbounds-check') ! that permits the use of zero length substrings of the form ! `string(1:0)'. ! ! * Based on code developed by Pedro Vazquez ! (), the `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. In 0.5.26, `GCC' 3.0 versus `GCC' 2.95: ======================================= *************** In `EGCS' 1.1 versus `EGCS' 1.0.3: *** 346,371 **** shared library. * `g77' no longer installs the `f77' command and `f77.1' man page in ! the `/usr' or `/usr/local' heirarchy, even if the `f77-install-ok' file exists in the source or build directory. See the installation documentation for more information. * `g77' no longer installs the `libf2c.a' library and `f2c.h' ! include file in the `/usr' or `/usr/local' heirarchy, even if the `f2c-install-ok' or `f2c-exists-ok' files exist in the source or build directory. See the installation documentation for more information. * The `libf2c.a' library produced by `g77' has been renamed to `libg2c.a'. It is installed only in the `gcc' "private" directory ! heirarchy, `gcc-lib'. This allows system administrators and users to choose which version of the `libf2c' library from `netlib' they wish to use on a case-by-case basis. See the installation documentation for more information. * The `f2c.h' include (header) file produced by `g77' has been renamed to `g2c.h'. It is installed only in the `gcc' "private" ! directory heirarchy, `gcc-lib'. This allows system administrators and users to choose which version of the include file from `netlib' they wish to use on a case-by-case basis. See the installation documentation for more information. --- 431,456 ---- shared library. * `g77' no longer installs the `f77' command and `f77.1' man page in ! the `/usr' or `/usr/local' hierarchy, even if the `f77-install-ok' file exists in the source or build directory. See the installation documentation for more information. * `g77' no longer installs the `libf2c.a' library and `f2c.h' ! include file in the `/usr' or `/usr/local' hierarchy, even if the `f2c-install-ok' or `f2c-exists-ok' files exist in the source or build directory. See the installation documentation for more information. * The `libf2c.a' library produced by `g77' has been renamed to `libg2c.a'. It is installed only in the `gcc' "private" directory ! hierarchy, `gcc-lib'. This allows system administrators and users to choose which version of the `libf2c' library from `netlib' they wish to use on a case-by-case basis. See the installation documentation for more information. * The `f2c.h' include (header) file produced by `g77' has been renamed to `g2c.h'. It is installed only in the `gcc' "private" ! directory hierarchy, `gcc-lib'. This allows system administrators and users to choose which version of the include file from `netlib' they wish to use on a case-by-case basis. See the installation documentation for more information. *************** In 0.5.23 versus 0.5.22: *** 521,546 **** with a different type no longer crash `g77'. * `g77' no longer installs the `f77' command and `f77.1' man page in ! the `/usr' or `/usr/local' heirarchy, even if the `f77-install-ok' file exists in the source or build directory. See the installation documentation for more information. * `g77' no longer installs the `libf2c.a' library and `f2c.h' ! include file in the `/usr' or `/usr/local' heirarchy, even if the `f2c-install-ok' or `f2c-exists-ok' files exist in the source or build directory. See the installation documentation for more information. * The `libf2c.a' library produced by `g77' has been renamed to `libg2c.a'. It is installed only in the `gcc' "private" directory ! heirarchy, `gcc-lib'. This allows system administrators and users to choose which version of the `libf2c' library from `netlib' they wish to use on a case-by-case basis. See the installation documentation for more information. * The `f2c.h' include (header) file produced by `g77' has been renamed to `g2c.h'. It is installed only in the `gcc' "private" ! directory heirarchy, `gcc-lib'. This allows system administrators and users to choose which version of the include file from `netlib' they wish to use on a case-by-case basis. See the installation documentation for more information. --- 606,631 ---- with a different type no longer crash `g77'. * `g77' no longer installs the `f77' command and `f77.1' man page in ! the `/usr' or `/usr/local' hierarchy, even if the `f77-install-ok' file exists in the source or build directory. See the installation documentation for more information. * `g77' no longer installs the `libf2c.a' library and `f2c.h' ! include file in the `/usr' or `/usr/local' hierarchy, even if the `f2c-install-ok' or `f2c-exists-ok' files exist in the source or build directory. See the installation documentation for more information. * The `libf2c.a' library produced by `g77' has been renamed to `libg2c.a'. It is installed only in the `gcc' "private" directory ! hierarchy, `gcc-lib'. This allows system administrators and users to choose which version of the `libf2c' library from `netlib' they wish to use on a case-by-case basis. See the installation documentation for more information. * The `f2c.h' include (header) file produced by `g77' has been renamed to `g2c.h'. It is installed only in the `gcc' "private" ! directory hierarchy, `gcc-lib'. This allows system administrators and users to choose which version of the include file from `netlib' they wish to use on a case-by-case basis. See the installation documentation for more information. *************** In 0.5.21: *** 788,794 **** executable statement (or is treated as an executable-context statement as a result of using the `-fpedantic' option). ! * Fix a compiler crash that occured when an integer division by a constant zero is detected. Instead, when the `-W' option is specified, the `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 --- 873,879 ---- executable statement (or is treated as an executable-context statement as a result of using the `-fpedantic' option). ! * Fix a compiler crash that occurred when an integer division by a constant zero is detected. Instead, when the `-W' option is specified, the `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 diff -Nrc3pad gcc-3.0.4/gcc/f/g77.info-5 gcc-3.1/gcc/f/g77.info-5 *** gcc-3.0.4/gcc/f/g77.info-5 Wed Feb 20 19:57:12 2002 --- gcc-3.1/gcc/f/g77.info-5 Wed May 15 02:45:53 2002 *************** *** 1,16 **** ! This is g77.info, produced by makeinfo version 4.0b from g77.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * g77: (g77). The GNU Fortran compiler. END-INFO-DIR-ENTRY This file documents the use and the internals of the GNU Fortran ! (`g77') compiler. It corresponds to the GCC-3.0 version of `g77'. Published by the Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA ! Copyright (C) 1995,1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document --- 1,16 ---- ! This is g77.info, produced by makeinfo version 4.2 from g77.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * g77: (g77). The GNU Fortran compiler. END-INFO-DIR-ENTRY This file documents the use and the internals of the GNU Fortran ! (`g77') compiler. It corresponds to the GCC-3.1 version of `g77'. Published by the Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA ! Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document *************** clarify how they differ from other versi *** 59,68 **** getting a complete picture of what a particular `egcs' version contains somewhat more difficult. ! For information on bugs in the GCC-3.0 version of `g77', see *Note Known Bugs In GNU Fortran: Known Bugs. ! The following information was last updated on 2001-06-03: In 0.5.26, `GCC' 3.0 versus `GCC' 2.95: ======================================= --- 59,153 ---- getting a complete picture of what a particular `egcs' version contains somewhat more difficult. ! For information on bugs in the GCC-3.1 version of `g77', see *Note Known Bugs In GNU Fortran: Known Bugs. ! The following information was last updated on 2002-04-13: ! ! In `GCC' 3.1 (formerly known as g77-0.5.27) versus `GCC' 3.0: ! ============================================================= ! ! * Problem Reports fixed (in chronological order of submission): ! `947' ! Data statement initialization with subscript of kind INTEGER*2 ! ! `3743' ! Reference to intrinsic `ISHFT' invalid ! ! `3807' ! Function BESJN(integer,double) problems ! ! `3957' ! g77 -pipe -xf77-cpp-input sends output to stdout ! ! `4279' ! g77 -h" gives bogus output ! ! `4730' ! ICE on valid input using CALL EXIT(%VAL(...)) ! ! `4752' ! g77 -v -c -xf77-version /dev/null -xnone causes ice ! ! `4885' ! BACKSPACE example that doesn't work as of gcc/g77-3.0.x ! ! `5122' ! g77 rejects accepted use of INTEGER*2 as type of DATA ! statement loop index ! ! `5397' ! ICE on compiling source with 540 000 000 REAL array ! ! `5473' ! ICE on BESJN(integer*8,real) ! ! `5837' ! bug in loop unrolling ! ! * `g77' now has its man page generated from the texinfo ! documentation, to guarantee that it remains up to date. ! ! * `g77' used to reject the following program on 32-bit targets: ! PROGRAM PROG ! DIMENSION A(140 000 000) ! END ! with the message: ! prog.f: In program `prog': ! prog.f:2: ! DIMENSION A(140 000 000) ! ^ ! Array `a' at (^) is too large to handle ! 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. `g77 -static ...'. ! ! * Based on work done by Juergen Pfeifer () ! libf2c is now a shared library. One can still link in all objects ! with the program by specifying the `-static' option. ! ! * Robert Anderson () thought up a two line ! change that enables g77 to compile such code as: ! SUBROUTINE SUB(A, N) ! DIMENSION N(2) ! DIMENSION A(N(1),N(2)) ! A(1,1) = 1. ! END ! Note the use of array elements in the bounds of the adjustable ! array A. ! ! * George Helffrich () implemented a change ! in substring index checking (when specifying `-fbounds-check') ! that permits the use of zero length substrings of the form ! `string(1:0)'. ! ! * Based on code developed by Pedro Vazquez ! (), the `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. In 0.5.26, `GCC' 3.0 versus `GCC' 2.95: ======================================= *************** though in character and Hollerith consta *** 1160,1277 **** Note that this document refers to as "space", while X3.9-1978 FORTRAN 77 refers to it as "blank". -  - File: g77.info, Node: Lines, Next: Continuation Line, Prev: Character Set, Up: Characters Lines Sequence - - Lines - ----- - - (Corresponds to Section 3.2 of ANSI X3.9-1978 FORTRAN 77.) - - The way a Fortran compiler views source files depends entirely on the - implementation choices made for the compiler, since those choices are - explicitly left to the implementation by the published Fortran - standards. - - The GNU Fortran language mandates a view applicable to UNIX-like - text files--files that are made up of an arbitrary number of lines, - each with an arbitrary number of characters (sometimes called - stream-based files). - - This view does not apply to types of files that are specified as - having a particular number of characters on every single line (sometimes - referred to as record-based files). - - Because a "line in a program unit is a sequence of 72 characters", - to quote X3.9-1978, the GNU Fortran language specifies that a - stream-based text file is translated to GNU Fortran lines as follows: - - * A newline in the file is the character that represents the end of - a line of text to the underlying system. For example, on - ASCII-based systems, a newline is the character, which has - ASCII value 10 (decimal). - - * Each newline in the file serves to end the line of text that - precedes it (and that does not contain a newline). - - * The end-of-file marker (`EOF') also serves to end the line of text - that precedes it (and that does not contain a newline). - - * Any line of text that is shorter than 72 characters is padded to - that length with spaces (called "blanks" in the standard). - - * Any line of text that is longer than 72 characters is truncated to - that length, but the truncated remainder must consist entirely of - spaces. - - * Characters other than newline and the GNU Fortran character set - are invalid. - - For the purposes of the remainder of this description of the GNU - Fortran language, the translation described above has already taken - place, unless otherwise specified. - - The result of the above translation is that the source file appears, - in terms of the remainder of this description of the GNU Fortran - language, as if it had an arbitrary number of 72-character lines, each - character being among the GNU Fortran character set. - - For example, if the source file itself has two newlines in a row, - the second newline becomes, after the above translation, a single line - containing 72 spaces. - -  - File: g77.info, Node: Continuation Line, Next: Statements, Prev: Lines, Up: Characters Lines Sequence - - Continuation Line - ----------------- - - (Corresponds to Section 3.2.3 of ANSI X3.9-1978 FORTRAN 77.) - - A continuation line is any line that both - - * Contains a continuation character, and - - * Contains only spaces in columns 1 through 5 - - A continuation character is any character of the GNU Fortran - character set other than space () or zero (`0') in column 6, or a - digit (`0' through `9') in column 7 through 72 of a line that has only - spaces to the left of that digit. - - The continuation character is ignored as far as the content of the - statement is concerned. - - The GNU Fortran language places no limit on the number of - continuation lines in a statement. In practice, the limit depends on a - variety of factors, such as available memory, statement content, and so - on, but no GNU Fortran system may impose an arbitrary limit. - -  - File: g77.info, Node: Statements, Next: Statement Labels, Prev: Continuation Line, Up: Characters Lines Sequence - - Statements - ---------- - - (Corresponds to Section 3.3 of ANSI X3.9-1978 FORTRAN 77.) - - Statements may be written using an arbitrary number of continuation - lines. - - Statements may be separated using the semicolon (`;'), except that - the logical `IF' and non-construct `WHERE' statements may not be - separated from subsequent statements using only a semicolon as - statement separator. - - The `END PROGRAM', `END SUBROUTINE', `END FUNCTION', and `END BLOCK - DATA' statements are alternatives to the `END' statement. These - alternatives may be written as normal statements--they are not subject - to the restrictions of the `END' statement. - - However, no statement other than `END' may have an initial line that - appears to be an `END' statement--even `END PROGRAM', for example, must - not be written as: - - END - &PROGRAM - --- 1245,1247 ---- diff -Nrc3pad gcc-3.0.4/gcc/f/g77.info-6 gcc-3.1/gcc/f/g77.info-6 *** gcc-3.0.4/gcc/f/g77.info-6 Wed Feb 20 19:57:12 2002 --- gcc-3.1/gcc/f/g77.info-6 Wed May 15 02:45:53 2002 *************** *** 1,16 **** ! This is g77.info, produced by makeinfo version 4.0b from g77.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * g77: (g77). The GNU Fortran compiler. END-INFO-DIR-ENTRY This file documents the use and the internals of the GNU Fortran ! (`g77') compiler. It corresponds to the GCC-3.0 version of `g77'. Published by the Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA ! Copyright (C) 1995,1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document --- 1,16 ---- ! This is g77.info, produced by makeinfo version 4.2 from g77.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * g77: (g77). The GNU Fortran compiler. END-INFO-DIR-ENTRY This file documents the use and the internals of the GNU Fortran ! (`g77') compiler. It corresponds to the GCC-3.1 version of `g77'. Published by the Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA ! Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document *************** a first pass at translating `g77-0.5.16/ *** 36,41 **** --- 36,156 ---- Craig by David Ronis ().  + File: g77.info, Node: Lines, Next: Continuation Line, Prev: Character Set, Up: Characters Lines Sequence + + Lines + ----- + + (Corresponds to Section 3.2 of ANSI X3.9-1978 FORTRAN 77.) + + The way a Fortran compiler views source files depends entirely on the + implementation choices made for the compiler, since those choices are + explicitly left to the implementation by the published Fortran + standards. + + The GNU Fortran language mandates a view applicable to UNIX-like + text files--files that are made up of an arbitrary number of lines, + each with an arbitrary number of characters (sometimes called + stream-based files). + + This view does not apply to types of files that are specified as + having a particular number of characters on every single line (sometimes + referred to as record-based files). + + Because a "line in a program unit is a sequence of 72 characters", + to quote X3.9-1978, the GNU Fortran language specifies that a + stream-based text file is translated to GNU Fortran lines as follows: + + * A newline in the file is the character that represents the end of + a line of text to the underlying system. For example, on + ASCII-based systems, a newline is the character, which has + ASCII value 10 (decimal). + + * Each newline in the file serves to end the line of text that + precedes it (and that does not contain a newline). + + * The end-of-file marker (`EOF') also serves to end the line of text + that precedes it (and that does not contain a newline). + + * Any line of text that is shorter than 72 characters is padded to + that length with spaces (called "blanks" in the standard). + + * Any line of text that is longer than 72 characters is truncated to + that length, but the truncated remainder must consist entirely of + spaces. + + * Characters other than newline and the GNU Fortran character set + are invalid. + + For the purposes of the remainder of this description of the GNU + Fortran language, the translation described above has already taken + place, unless otherwise specified. + + The result of the above translation is that the source file appears, + in terms of the remainder of this description of the GNU Fortran + language, as if it had an arbitrary number of 72-character lines, each + character being among the GNU Fortran character set. + + For example, if the source file itself has two newlines in a row, + the second newline becomes, after the above translation, a single line + containing 72 spaces. + +  + File: g77.info, Node: Continuation Line, Next: Statements, Prev: Lines, Up: Characters Lines Sequence + + Continuation Line + ----------------- + + (Corresponds to Section 3.2.3 of ANSI X3.9-1978 FORTRAN 77.) + + A continuation line is any line that both + + * Contains a continuation character, and + + * Contains only spaces in columns 1 through 5 + + A continuation character is any character of the GNU Fortran + character set other than space () or zero (`0') in column 6, or a + digit (`0' through `9') in column 7 through 72 of a line that has only + spaces to the left of that digit. + + The continuation character is ignored as far as the content of the + statement is concerned. + + The GNU Fortran language places no limit on the number of + continuation lines in a statement. In practice, the limit depends on a + variety of factors, such as available memory, statement content, and so + on, but no GNU Fortran system may impose an arbitrary limit. + +  + File: g77.info, Node: Statements, Next: Statement Labels, Prev: Continuation Line, Up: Characters Lines Sequence + + Statements + ---------- + + (Corresponds to Section 3.3 of ANSI X3.9-1978 FORTRAN 77.) + + Statements may be written using an arbitrary number of continuation + lines. + + Statements may be separated using the semicolon (`;'), except that + the logical `IF' and non-construct `WHERE' statements may not be + separated from subsequent statements using only a semicolon as + statement separator. + + The `END PROGRAM', `END SUBROUTINE', `END FUNCTION', and `END BLOCK + DATA' statements are alternatives to the `END' statement. These + alternatives may be written as normal statements--they are not subject + to the restrictions of the `END' statement. + + However, no statement other than `END' may have an initial line that + appears to be an `END' statement--even `END PROGRAM', for example, must + not be written as: + + END + &PROGRAM + +  File: g77.info, Node: Statement Labels, Next: Order, Prev: Statements, Up: Characters Lines Sequence Statement Labels *************** similar to the method used for Fortran ` *** 1086,1327 **** information on how this particular version of `g77' passes arguments to procedures. -  - File: g77.info, Node: Generics and Specifics, Next: REAL() and AIMAG() of Complex, Prev: %DESCR(), Up: Functions and Subroutines - - Generics and Specifics - ---------------------- - - The ANSI FORTRAN 77 language defines generic and specific intrinsics. - In short, the distinctions are: - - * _Specific_ intrinsics have specific types for their arguments and - a specific return type. - - * _Generic_ intrinsics are treated, on a case-by-case basis in the - program's source code, as one of several possible specific - intrinsics. - - Typically, a generic intrinsic has a return type that is - determined by the type of one or more of its arguments. - - The GNU Fortran language generalizes these concepts somewhat, - especially by providing intrinsic subroutines and generic intrinsics - that are treated as either a specific intrinsic subroutine or a - specific intrinsic function (e.g. `SECOND'). - - However, GNU Fortran avoids generalizing this concept to the point - where existing code would be accepted as meaning something possibly - different than what was intended. - - For example, `ABS' is a generic intrinsic, so all working code - written using `ABS' of an `INTEGER' argument expects an `INTEGER' - return value. Similarly, all such code expects that `ABS' of an - `INTEGER*2' argument returns an `INTEGER*2' return value. - - Yet, `IABS' is a _specific_ intrinsic that accepts only an - `INTEGER(KIND=1)' argument. Code that passes something other than an - `INTEGER(KIND=1)' argument to `IABS' is not valid GNU Fortran code, - because it is not clear what the author intended. - - For example, if `J' is `INTEGER(KIND=6)', `IABS(J)' is not defined - by the GNU Fortran language, because the programmer might have used - that construct to mean any of the following, subtly different, things: - - * Convert `J' to `INTEGER(KIND=1)' first (as if `IABS(INT(J))' had - been written). - - * Convert the result of the intrinsic to `INTEGER(KIND=1)' (as if - `INT(ABS(J))' had been written). - - * No conversion (as if `ABS(J)' had been written). - - The distinctions matter especially when types and values wider than - `INTEGER(KIND=1)' (such as `INTEGER(KIND=2)'), or when operations - performing more "arithmetic" than absolute-value, are involved. - - The following sample program is not a valid GNU Fortran program, but - might be accepted by other compilers. If so, the output is likely to - be revealing in terms of how a given compiler treats intrinsics (that - normally are specific) when they are given arguments that do not - conform to their stated requirements: - - PROGRAM JCB002 - C Version 1: - C Modified 1999-02-15 (Burley) to delete my email address. - C Modified 1997-05-21 (Burley) to accommodate compilers that implement - C INT(I1-I2) as INT(I1)-INT(I2) given INTEGER*2 I1,I2. - C - C Version 0: - C Written by James Craig Burley 1997-02-20. - C - C Purpose: - C Determine how compilers handle non-standard IDIM - C on INTEGER*2 operands, which presumably can be - C extrapolated into understanding how the compiler - C generally treats specific intrinsics that are passed - C arguments not of the correct types. - C - C If your compiler implements INTEGER*2 and INTEGER - C as the same type, change all INTEGER*2 below to - C INTEGER*1. - C - INTEGER*2 I0, I4 - INTEGER I1, I2, I3 - INTEGER*2 ISMALL, ILARGE - INTEGER*2 ITOOLG, ITWO - INTEGER*2 ITMP - LOGICAL L2, L3, L4 - C - C Find smallest INTEGER*2 number. - C - ISMALL=0 - 10 I0 = ISMALL-1 - IF ((I0 .GE. ISMALL) .OR. (I0+1 .NE. ISMALL)) GOTO 20 - ISMALL = I0 - GOTO 10 - 20 CONTINUE - C - C Find largest INTEGER*2 number. - C - ILARGE=0 - 30 I0 = ILARGE+1 - IF ((I0 .LE. ILARGE) .OR. (I0-1 .NE. ILARGE)) GOTO 40 - ILARGE = I0 - GOTO 30 - 40 CONTINUE - C - C Multiplying by two adds stress to the situation. - C - ITWO = 2 - C - C Need a number that, added to -2, is too wide to fit in I*2. - C - ITOOLG = ISMALL - C - C Use IDIM the straightforward way. - C - I1 = IDIM (ILARGE, ISMALL) * ITWO + ITOOLG - C - C Calculate result for first interpretation. - C - I2 = (INT (ILARGE) - INT (ISMALL)) * ITWO + ITOOLG - C - C Calculate result for second interpretation. - C - ITMP = ILARGE - ISMALL - I3 = (INT (ITMP)) * ITWO + ITOOLG - C - C Calculate result for third interpretation. - C - I4 = (ILARGE - ISMALL) * ITWO + ITOOLG - C - C Print results. - C - PRINT *, 'ILARGE=', ILARGE - PRINT *, 'ITWO=', ITWO - PRINT *, 'ITOOLG=', ITOOLG - PRINT *, 'ISMALL=', ISMALL - PRINT *, 'I1=', I1 - PRINT *, 'I2=', I2 - PRINT *, 'I3=', I3 - PRINT *, 'I4=', I4 - PRINT * - L2 = (I1 .EQ. I2) - L3 = (I1 .EQ. I3) - L4 = (I1 .EQ. I4) - IF (L2 .AND. .NOT.L3 .AND. .NOT.L4) THEN - PRINT *, 'Interp 1: IDIM(I*2,I*2) => IDIM(INT(I*2),INT(I*2))' - STOP - END IF - IF (L3 .AND. .NOT.L2 .AND. .NOT.L4) THEN - PRINT *, 'Interp 2: IDIM(I*2,I*2) => INT(DIM(I*2,I*2))' - STOP - END IF - IF (L4 .AND. .NOT.L2 .AND. .NOT.L3) THEN - PRINT *, 'Interp 3: IDIM(I*2,I*2) => DIM(I*2,I*2)' - STOP - END IF - PRINT *, 'Results need careful analysis.' - END - - No future version of the GNU Fortran language will likely permit - specific intrinsic invocations with wrong-typed arguments (such as - `IDIM' in the above example), since it has been determined that - disagreements exist among many production compilers on the - interpretation of such invocations. These disagreements strongly - suggest that Fortran programmers, and certainly existing Fortran - programs, disagree about the meaning of such invocations. - - The first version of `JCB002' didn't accommodate some compilers' - treatment of `INT(I1-I2)' where `I1' and `I2' are `INTEGER*2'. In such - a case, these compilers apparently convert both operands to `INTEGER*4' - and then do an `INTEGER*4' subtraction, instead of doing an `INTEGER*2' - subtraction on the original values in `I1' and `I2'. - - However, the results of the careful analyses done on the outputs of - programs compiled by these various compilers show that they all - implement either `Interp 1' or `Interp 2' above. - - Specifically, it is believed that the new version of `JCB002' above - will confirm that: - - * Digital Semiconductor ("DEC") Alpha OSF/1, HP-UX 10.0.1, AIX 3.2.5 - `f77' compilers all implement `Interp 1'. - - * IRIX 5.3 `f77' compiler implements `Interp 2'. - - * Solaris 2.5, SunOS 4.1.3, DECstation ULTRIX 4.3, and IRIX 6.1 - `f77' compilers all implement `Interp 3'. - - If you get different results than the above for the stated - compilers, or have results for other compilers that might be worth - adding to the above list, please let us know the details (compiler - product, version, machine, results, and so on). - -  - File: g77.info, Node: REAL() and AIMAG() of Complex, Next: CMPLX() of DOUBLE PRECISION, Prev: Generics and Specifics, Up: Functions and Subroutines - - `REAL()' and `AIMAG()' of Complex - --------------------------------- - - The GNU Fortran language disallows `REAL(EXPR)' and `AIMAG(EXPR)', - where EXPR is any `COMPLEX' type other than `COMPLEX(KIND=1)', except - when they are used in the following way: - - REAL(REAL(EXPR)) - REAL(AIMAG(EXPR)) - - The above forms explicitly specify that the desired effect is to - convert the real or imaginary part of EXPR, which might be some `REAL' - type other than `REAL(KIND=1)', to type `REAL(KIND=1)', and have that - serve as the value of the expression. - - The GNU Fortran language offers clearly named intrinsics to extract - the real and imaginary parts of a complex entity without any conversion: - - REALPART(EXPR) - IMAGPART(EXPR) - - To express the above using typical extended FORTRAN 77, use the - following constructs (when EXPR is `COMPLEX(KIND=2)'): - - DBLE(EXPR) - DIMAG(EXPR) - - The FORTRAN 77 language offers no way to explicitly specify the real - and imaginary parts of a complex expression of arbitrary type, - apparently as a result of requiring support for only one `COMPLEX' type - (`COMPLEX(KIND=1)'). The concepts of converting an expression to type - `REAL(KIND=1)' and of extracting the real part of a complex expression - were 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 `COMPLEX' type). - - _Note:_ When `-ff90' is in effect, `g77' treats `REAL(EXPR)', where - EXPR is of type `COMPLEX', as `REALPART(EXPR)', whereas with - `-fugly-complex -fno-f90' in effect, it is treated as - `REAL(REALPART(EXPR))'. - - *Note Ugly Complex Part Extraction::, for more information. - --- 1201,1203 ---- diff -Nrc3pad gcc-3.0.4/gcc/f/g77.info-7 gcc-3.1/gcc/f/g77.info-7 *** gcc-3.0.4/gcc/f/g77.info-7 Wed Feb 20 19:57:12 2002 --- gcc-3.1/gcc/f/g77.info-7 Wed May 15 02:45:53 2002 *************** *** 1,16 **** ! This is g77.info, produced by makeinfo version 4.0b from g77.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * g77: (g77). The GNU Fortran compiler. END-INFO-DIR-ENTRY This file documents the use and the internals of the GNU Fortran ! (`g77') compiler. It corresponds to the GCC-3.0 version of `g77'. Published by the Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA ! Copyright (C) 1995,1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document --- 1,16 ---- ! This is g77.info, produced by makeinfo version 4.2 from g77.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * g77: (g77). The GNU Fortran compiler. END-INFO-DIR-ENTRY This file documents the use and the internals of the GNU Fortran ! (`g77') compiler. It corresponds to the GCC-3.1 version of `g77'. Published by the Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA ! Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document *************** a first pass at translating `g77-0.5.16/ *** 36,41 **** --- 36,280 ---- Craig by David Ronis ().  + File: g77.info, Node: Generics and Specifics, Next: REAL() and AIMAG() of Complex, Prev: %DESCR(), Up: Functions and Subroutines + + Generics and Specifics + ---------------------- + + The ANSI FORTRAN 77 language defines generic and specific intrinsics. + In short, the distinctions are: + + * _Specific_ intrinsics have specific types for their arguments and + a specific return type. + + * _Generic_ intrinsics are treated, on a case-by-case basis in the + program's source code, as one of several possible specific + intrinsics. + + Typically, a generic intrinsic has a return type that is + determined by the type of one or more of its arguments. + + The GNU Fortran language generalizes these concepts somewhat, + especially by providing intrinsic subroutines and generic intrinsics + that are treated as either a specific intrinsic subroutine or a + specific intrinsic function (e.g. `SECOND'). + + However, GNU Fortran avoids generalizing this concept to the point + where existing code would be accepted as meaning something possibly + different than what was intended. + + For example, `ABS' is a generic intrinsic, so all working code + written using `ABS' of an `INTEGER' argument expects an `INTEGER' + return value. Similarly, all such code expects that `ABS' of an + `INTEGER*2' argument returns an `INTEGER*2' return value. + + Yet, `IABS' is a _specific_ intrinsic that accepts only an + `INTEGER(KIND=1)' argument. Code that passes something other than an + `INTEGER(KIND=1)' argument to `IABS' is not valid GNU Fortran code, + because it is not clear what the author intended. + + For example, if `J' is `INTEGER(KIND=6)', `IABS(J)' is not defined + by the GNU Fortran language, because the programmer might have used + that construct to mean any of the following, subtly different, things: + + * Convert `J' to `INTEGER(KIND=1)' first (as if `IABS(INT(J))' had + been written). + + * Convert the result of the intrinsic to `INTEGER(KIND=1)' (as if + `INT(ABS(J))' had been written). + + * No conversion (as if `ABS(J)' had been written). + + The distinctions matter especially when types and values wider than + `INTEGER(KIND=1)' (such as `INTEGER(KIND=2)'), or when operations + performing more "arithmetic" than absolute-value, are involved. + + The following sample program is not a valid GNU Fortran program, but + might be accepted by other compilers. If so, the output is likely to + be revealing in terms of how a given compiler treats intrinsics (that + normally are specific) when they are given arguments that do not + conform to their stated requirements: + + PROGRAM JCB002 + C Version 1: + C Modified 1999-02-15 (Burley) to delete my email address. + C Modified 1997-05-21 (Burley) to accommodate compilers that implement + C INT(I1-I2) as INT(I1)-INT(I2) given INTEGER*2 I1,I2. + C + C Version 0: + C Written by James Craig Burley 1997-02-20. + C + C Purpose: + C Determine how compilers handle non-standard IDIM + C on INTEGER*2 operands, which presumably can be + C extrapolated into understanding how the compiler + C generally treats specific intrinsics that are passed + C arguments not of the correct types. + C + C If your compiler implements INTEGER*2 and INTEGER + C as the same type, change all INTEGER*2 below to + C INTEGER*1. + C + INTEGER*2 I0, I4 + INTEGER I1, I2, I3 + INTEGER*2 ISMALL, ILARGE + INTEGER*2 ITOOLG, ITWO + INTEGER*2 ITMP + LOGICAL L2, L3, L4 + C + C Find smallest INTEGER*2 number. + C + ISMALL=0 + 10 I0 = ISMALL-1 + IF ((I0 .GE. ISMALL) .OR. (I0+1 .NE. ISMALL)) GOTO 20 + ISMALL = I0 + GOTO 10 + 20 CONTINUE + C + C Find largest INTEGER*2 number. + C + ILARGE=0 + 30 I0 = ILARGE+1 + IF ((I0 .LE. ILARGE) .OR. (I0-1 .NE. ILARGE)) GOTO 40 + ILARGE = I0 + GOTO 30 + 40 CONTINUE + C + C Multiplying by two adds stress to the situation. + C + ITWO = 2 + C + C Need a number that, added to -2, is too wide to fit in I*2. + C + ITOOLG = ISMALL + C + C Use IDIM the straightforward way. + C + I1 = IDIM (ILARGE, ISMALL) * ITWO + ITOOLG + C + C Calculate result for first interpretation. + C + I2 = (INT (ILARGE) - INT (ISMALL)) * ITWO + ITOOLG + C + C Calculate result for second interpretation. + C + ITMP = ILARGE - ISMALL + I3 = (INT (ITMP)) * ITWO + ITOOLG + C + C Calculate result for third interpretation. + C + I4 = (ILARGE - ISMALL) * ITWO + ITOOLG + C + C Print results. + C + PRINT *, 'ILARGE=', ILARGE + PRINT *, 'ITWO=', ITWO + PRINT *, 'ITOOLG=', ITOOLG + PRINT *, 'ISMALL=', ISMALL + PRINT *, 'I1=', I1 + PRINT *, 'I2=', I2 + PRINT *, 'I3=', I3 + PRINT *, 'I4=', I4 + PRINT * + L2 = (I1 .EQ. I2) + L3 = (I1 .EQ. I3) + L4 = (I1 .EQ. I4) + IF (L2 .AND. .NOT.L3 .AND. .NOT.L4) THEN + PRINT *, 'Interp 1: IDIM(I*2,I*2) => IDIM(INT(I*2),INT(I*2))' + STOP + END IF + IF (L3 .AND. .NOT.L2 .AND. .NOT.L4) THEN + PRINT *, 'Interp 2: IDIM(I*2,I*2) => INT(DIM(I*2,I*2))' + STOP + END IF + IF (L4 .AND. .NOT.L2 .AND. .NOT.L3) THEN + PRINT *, 'Interp 3: IDIM(I*2,I*2) => DIM(I*2,I*2)' + STOP + END IF + PRINT *, 'Results need careful analysis.' + END + + No future version of the GNU Fortran language will likely permit + specific intrinsic invocations with wrong-typed arguments (such as + `IDIM' in the above example), since it has been determined that + disagreements exist among many production compilers on the + interpretation of such invocations. These disagreements strongly + suggest that Fortran programmers, and certainly existing Fortran + programs, disagree about the meaning of such invocations. + + The first version of `JCB002' didn't accommodate some compilers' + treatment of `INT(I1-I2)' where `I1' and `I2' are `INTEGER*2'. In such + a case, these compilers apparently convert both operands to `INTEGER*4' + and then do an `INTEGER*4' subtraction, instead of doing an `INTEGER*2' + subtraction on the original values in `I1' and `I2'. + + However, the results of the careful analyses done on the outputs of + programs compiled by these various compilers show that they all + implement either `Interp 1' or `Interp 2' above. + + Specifically, it is believed that the new version of `JCB002' above + will confirm that: + + * Digital Semiconductor ("DEC") Alpha OSF/1, HP-UX 10.0.1, AIX 3.2.5 + `f77' compilers all implement `Interp 1'. + + * IRIX 5.3 `f77' compiler implements `Interp 2'. + + * Solaris 2.5, SunOS 4.1.3, DECstation ULTRIX 4.3, and IRIX 6.1 + `f77' compilers all implement `Interp 3'. + + If you get different results than the above for the stated + compilers, or have results for other compilers that might be worth + adding to the above list, please let us know the details (compiler + product, version, machine, results, and so on). + +  + File: g77.info, Node: REAL() and AIMAG() of Complex, Next: CMPLX() of DOUBLE PRECISION, Prev: Generics and Specifics, Up: Functions and Subroutines + + `REAL()' and `AIMAG()' of Complex + --------------------------------- + + The GNU Fortran language disallows `REAL(EXPR)' and `AIMAG(EXPR)', + where EXPR is any `COMPLEX' type other than `COMPLEX(KIND=1)', except + when they are used in the following way: + + REAL(REAL(EXPR)) + REAL(AIMAG(EXPR)) + + The above forms explicitly specify that the desired effect is to + convert the real or imaginary part of EXPR, which might be some `REAL' + type other than `REAL(KIND=1)', to type `REAL(KIND=1)', and have that + serve as the value of the expression. + + The GNU Fortran language offers clearly named intrinsics to extract + the real and imaginary parts of a complex entity without any conversion: + + REALPART(EXPR) + IMAGPART(EXPR) + + To express the above using typical extended FORTRAN 77, use the + following constructs (when EXPR is `COMPLEX(KIND=2)'): + + DBLE(EXPR) + DIMAG(EXPR) + + The FORTRAN 77 language offers no way to explicitly specify the real + and imaginary parts of a complex expression of arbitrary type, + apparently as a result of requiring support for only one `COMPLEX' type + (`COMPLEX(KIND=1)'). The concepts of converting an expression to type + `REAL(KIND=1)' and of extracting the real part of a complex expression + were 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 `COMPLEX' type). + + _Note:_ When `-ff90' is in effect, `g77' treats `REAL(EXPR)', where + EXPR is of type `COMPLEX', as `REALPART(EXPR)', whereas with + `-fugly-complex -fno-f90' in effect, it is treated as + `REAL(REALPART(EXPR))'. + + *Note Ugly Complex Part Extraction::, for more information. + +  File: g77.info, Node: CMPLX() of DOUBLE PRECISION, Next: MIL-STD 1753, Prev: REAL() and AIMAG() of Complex, Up: Functions and Subroutines `CMPLX()' of `DOUBLE PRECISION' *************** Description: *** 630,639 **** If A is type `COMPLEX', the absolute value is computed as: ! SQRT(REALPART(A)**2, IMAGPART(A)**2) ! Otherwise, it is computed by negating the A if it is negative, or ! returning A. *Note Sign Intrinsic::, for how to explicitly compute the positive or negative form of the absolute value of an expression. --- 869,878 ---- If A is type `COMPLEX', the absolute value is computed as: ! SQRT(REALPART(A)**2+IMAGPART(A)**2) ! Otherwise, it is computed by negating A if it is negative, or returning ! A. *Note Sign Intrinsic::, for how to explicitly compute the positive or negative form of the absolute value of an expression. *************** BesJN Intrinsic *** 1165,1171 **** BesJN: `REAL' function, the `KIND=' value of the type being that of argument X. ! N: `INTEGER'; scalar; INTENT(IN). X: `REAL'; scalar; INTENT(IN). --- 1404,1410 ---- BesJN: `REAL' function, the `KIND=' value of the type being that of argument X. ! N: `INTEGER' not wider than the default kind; scalar; INTENT(IN). X: `REAL'; scalar; INTENT(IN). *************** BesYN Intrinsic *** 1227,1233 **** BesYN: `REAL' function, the `KIND=' value of the type being that of argument X. ! N: `INTEGER'; scalar; INTENT(IN). X: `REAL'; scalar; INTENT(IN). --- 1466,1472 ---- BesYN: `REAL' function, the `KIND=' value of the type being that of argument X. ! N: `INTEGER' not wider than the default kind; scalar; INTENT(IN). X: `REAL'; scalar; INTENT(IN). *************** STATUS argument. *** 1437,1798 **** For information on other intrinsics with the same name: *Note ChDir Intrinsic (function)::. -  - File: g77.info, Node: ChMod Intrinsic (subroutine), Next: CLog Intrinsic, Prev: ChDir Intrinsic (subroutine), Up: Table of Intrinsic Functions - - ChMod Intrinsic (subroutine) - ............................ - - CALL ChMod(NAME, MODE, STATUS) - - NAME: `CHARACTER'; scalar; INTENT(IN). - - MODE: `CHARACTER'; scalar; INTENT(IN). - - STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT). - - Intrinsic groups: `unix'. - - Description: - - Changes the access mode of file NAME according to the specification - MODE, which is given in the format of `chmod(1)'. A null character - (`CHAR(0)') marks the end of the name in NAME--otherwise, trailing - blanks in NAME are ignored. Currently, NAME must not contain the - single quote character. - - If the STATUS argument is supplied, it contains 0 on success or a - non-zero error code upon return. - - Note that this currently works by actually invoking `/bin/chmod' (or - the `chmod' found when the library was configured) and so might fail in - some circumstances and will, anyway, be slow. - - Some non-GNU implementations of Fortran provide this intrinsic as - only a function, not as a subroutine, or do not support the (optional) - STATUS argument. - - For information on other intrinsics with the same name: *Note ChMod - Intrinsic (function)::. - -  - File: g77.info, Node: CLog Intrinsic, Next: Cmplx Intrinsic, Prev: ChMod Intrinsic (subroutine), Up: Table of Intrinsic Functions - - CLog Intrinsic - .............. - - CLog(X) - - CLog: `COMPLEX(KIND=1)' function. - - X: `COMPLEX(KIND=1)'; scalar; INTENT(IN). - - Intrinsic groups: (standard FORTRAN 77). - - Description: - - Archaic form of `LOG()' that is specific to one type for X. *Note - Log Intrinsic::. - -  - File: g77.info, Node: Cmplx Intrinsic, Next: Complex Intrinsic, Prev: CLog Intrinsic, Up: Table of Intrinsic Functions - - Cmplx Intrinsic - ............... - - Cmplx(X, Y) - - Cmplx: `COMPLEX(KIND=1)' function. - - X: `INTEGER', `REAL', or `COMPLEX'; scalar; INTENT(IN). - - Y: `INTEGER' or `REAL'; OPTIONAL (must be omitted if X is `COMPLEX'); - scalar; INTENT(IN). - - Intrinsic groups: (standard FORTRAN 77). - - Description: - - If X is not type `COMPLEX', constructs a value of type - `COMPLEX(KIND=1)' from the real and imaginary values specified by X and - Y, respectively. If Y is omitted, `0.' is assumed. - - If X is type `COMPLEX', converts it to type `COMPLEX(KIND=1)'. - - *Note Complex Intrinsic::, for information on easily constructing a - `COMPLEX' value of arbitrary precision from `REAL' arguments. - -  - File: g77.info, Node: Complex Intrinsic, Next: Conjg Intrinsic, Prev: Cmplx Intrinsic, Up: Table of Intrinsic Functions - - Complex Intrinsic - ................. - - Complex(REAL, IMAG) - - Complex: `COMPLEX' function, the exact type being the result of - cross-promoting the types of all the arguments. - - REAL: `INTEGER' or `REAL'; scalar; INTENT(IN). - - IMAG: `INTEGER' or `REAL'; scalar; INTENT(IN). - - Intrinsic groups: `gnu'. - - Description: - - Returns a `COMPLEX' value that has `Real' and `Imag' as its real and - imaginary parts, respectively. - - If REAL and IMAG are the same type, and that type is not `INTEGER', - no data conversion is performed, and the type of the resulting value - has the same kind value as the types of REAL and IMAG. - - If REAL and IMAG are not the same type, the usual type-promotion - rules are applied to both, converting either or both to the appropriate - `REAL' type. The type of the resulting value has the same kind value - as the type to which both REAL and IMAG were converted, in this case. - - If REAL and IMAG are both `INTEGER', they are both converted to - `REAL(KIND=1)', and the result of the `COMPLEX()' invocation is type - `COMPLEX(KIND=1)'. - - _Note:_ The way to do this in standard Fortran 90 is too hairy to - describe here, but it is important to note that `CMPLX(D1,D2)' returns - a `COMPLEX(KIND=1)' result even if `D1' and `D2' are type - `REAL(KIND=2)'. Hence the availability of `COMPLEX()' in GNU Fortran. - -  - File: g77.info, Node: Conjg Intrinsic, Next: Cos Intrinsic, Prev: Complex Intrinsic, Up: Table of Intrinsic Functions - - Conjg Intrinsic - ............... - - Conjg(Z) - - Conjg: `COMPLEX' function, the `KIND=' value of the type being that of - argument Z. - - Z: `COMPLEX'; scalar; INTENT(IN). - - Intrinsic groups: (standard FORTRAN 77). - - Description: - - Returns the complex conjugate: - - COMPLEX(REALPART(Z), -IMAGPART(Z)) - -  - File: g77.info, Node: Cos Intrinsic, Next: CosH Intrinsic, Prev: Conjg Intrinsic, Up: Table of Intrinsic Functions - - Cos Intrinsic - ............. - - Cos(X) - - Cos: `REAL' or `COMPLEX' function, the exact type being that of - argument X. - - X: `REAL' or `COMPLEX'; scalar; INTENT(IN). - - Intrinsic groups: (standard FORTRAN 77). - - Description: - - Returns the cosine of X, an angle measured in radians. - - *Note ACos Intrinsic::, for the inverse of this function. - -  - File: g77.info, Node: CosH Intrinsic, Next: Count Intrinsic, Prev: Cos Intrinsic, Up: Table of Intrinsic Functions - - CosH Intrinsic - .............. - - CosH(X) - - CosH: `REAL' function, the `KIND=' value of the type being that of - argument X. - - X: `REAL'; scalar; INTENT(IN). - - Intrinsic groups: (standard FORTRAN 77). - - Description: - - Returns the hyperbolic cosine of X. - -  - File: g77.info, Node: Count Intrinsic, Next: CPU_Time Intrinsic, Prev: CosH Intrinsic, Up: Table of Intrinsic Functions - - Count Intrinsic - ............... - - This intrinsic is not yet implemented. The name is, however, - reserved as an intrinsic. Use `EXTERNAL Count' to use this name for an - external procedure. - -  - File: g77.info, Node: CPU_Time Intrinsic, Next: CShift Intrinsic, Prev: Count Intrinsic, Up: Table of Intrinsic Functions - - CPU_Time Intrinsic - .................. - - CALL CPU_Time(SECONDS) - - SECONDS: `REAL'; scalar; INTENT(OUT). - - Intrinsic groups: `f90'. - - Description: - - Returns in SECONDS the current value of the system time. This - implementation of the Fortran 95 intrinsic is just an alias for - `second' *Note Second Intrinsic (subroutine)::. - - On some systems, the underlying timings are represented using types - with sufficiently small limits that overflows (wraparounds) are - possible, such as 32-bit types. Therefore, the values returned by this - intrinsic might be, or become, negative, or numerically less than - previous values, during a single run of the compiled program. - -  - File: g77.info, Node: CShift Intrinsic, Next: CSin Intrinsic, Prev: CPU_Time Intrinsic, Up: Table of Intrinsic Functions - - CShift Intrinsic - ................ - - This intrinsic is not yet implemented. The name is, however, - reserved as an intrinsic. Use `EXTERNAL CShift' to use this name for an - external procedure. - -  - File: g77.info, Node: CSin Intrinsic, Next: CSqRt Intrinsic, Prev: CShift Intrinsic, Up: Table of Intrinsic Functions - - CSin Intrinsic - .............. - - CSin(X) - - CSin: `COMPLEX(KIND=1)' function. - - X: `COMPLEX(KIND=1)'; scalar; INTENT(IN). - - Intrinsic groups: (standard FORTRAN 77). - - Description: - - Archaic form of `SIN()' that is specific to one type for X. *Note - Sin Intrinsic::. - -  - File: g77.info, Node: CSqRt Intrinsic, Next: CTime Intrinsic (subroutine), Prev: CSin Intrinsic, Up: Table of Intrinsic Functions - - CSqRt Intrinsic - ............... - - CSqRt(X) - - CSqRt: `COMPLEX(KIND=1)' function. - - X: `COMPLEX(KIND=1)'; scalar; INTENT(IN). - - Intrinsic groups: (standard FORTRAN 77). - - Description: - - Archaic form of `SQRT()' that is specific to one type for X. *Note - SqRt Intrinsic::. - -  - File: g77.info, Node: CTime Intrinsic (subroutine), Next: CTime Intrinsic (function), Prev: CSqRt Intrinsic, Up: Table of Intrinsic Functions - - CTime Intrinsic (subroutine) - ............................ - - CALL CTime(STIME, RESULT) - - STIME: `INTEGER'; scalar; INTENT(IN). - - RESULT: `CHARACTER'; scalar; INTENT(OUT). - - Intrinsic groups: `unix'. - - Description: - - Converts STIME, a system time value, such as returned by `TIME8()', - to a string of the form `Sat Aug 19 18:13:14 1995', and returns that - string in RESULT. - - *Note Time8 Intrinsic::. - - Some non-GNU implementations of Fortran provide this intrinsic as - only a function, not as a subroutine. - - For information on other intrinsics with the same name: *Note CTime - Intrinsic (function)::. - -  - File: g77.info, Node: CTime Intrinsic (function), Next: DAbs Intrinsic, Prev: CTime Intrinsic (subroutine), Up: Table of Intrinsic Functions - - CTime Intrinsic (function) - .......................... - - CTime(STIME) - - CTime: `CHARACTER*(*)' function. - - STIME: `INTEGER'; scalar; INTENT(IN). - - Intrinsic groups: `unix'. - - Description: - - Converts STIME, a system time value, such as returned by `TIME8()', - to a string of the form `Sat Aug 19 18:13:14 1995', and returns that - string as the function value. - - *Note Time8 Intrinsic::. - - For information on other intrinsics with the same name: *Note CTime - Intrinsic (subroutine)::. - -  - File: g77.info, Node: DAbs Intrinsic, Next: DACos Intrinsic, Prev: CTime Intrinsic (function), Up: Table of Intrinsic Functions - - DAbs Intrinsic - .............. - - DAbs(A) - - DAbs: `REAL(KIND=2)' function. - - A: `REAL(KIND=2)'; scalar; INTENT(IN). - - Intrinsic groups: (standard FORTRAN 77). - - Description: - - Archaic form of `ABS()' that is specific to one type for A. *Note - Abs Intrinsic::. - -  - File: g77.info, Node: DACos Intrinsic, Next: DASin Intrinsic, Prev: DAbs Intrinsic, Up: Table of Intrinsic Functions - - DACos Intrinsic - ............... - - DACos(X) - - DACos: `REAL(KIND=2)' function. - - X: `REAL(KIND=2)'; scalar; INTENT(IN). - - Intrinsic groups: (standard FORTRAN 77). - - Description: - - Archaic form of `ACOS()' that is specific to one type for X. *Note - ACos Intrinsic::. - --- 1676,1678 ---- diff -Nrc3pad gcc-3.0.4/gcc/f/g77.info-8 gcc-3.1/gcc/f/g77.info-8 *** gcc-3.0.4/gcc/f/g77.info-8 Wed Feb 20 19:57:12 2002 --- gcc-3.1/gcc/f/g77.info-8 Wed May 15 02:45:53 2002 *************** *** 1,16 **** ! This is g77.info, produced by makeinfo version 4.0b from g77.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * g77: (g77). The GNU Fortran compiler. END-INFO-DIR-ENTRY This file documents the use and the internals of the GNU Fortran ! (`g77') compiler. It corresponds to the GCC-3.0 version of `g77'. Published by the Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA ! Copyright (C) 1995,1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document --- 1,16 ---- ! This is g77.info, produced by makeinfo version 4.2 from g77.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * g77: (g77). The GNU Fortran compiler. END-INFO-DIR-ENTRY This file documents the use and the internals of the GNU Fortran ! (`g77') compiler. It corresponds to the GCC-3.1 version of `g77'. Published by the Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA ! Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document *************** a first pass at translating `g77-0.5.16/ *** 36,41 **** --- 36,400 ---- Craig by David Ronis ().  + File: g77.info, Node: ChMod Intrinsic (subroutine), Next: CLog Intrinsic, Prev: ChDir Intrinsic (subroutine), Up: Table of Intrinsic Functions + + ChMod Intrinsic (subroutine) + ............................ + + CALL ChMod(NAME, MODE, STATUS) + + NAME: `CHARACTER'; scalar; INTENT(IN). + + MODE: `CHARACTER'; scalar; INTENT(IN). + + STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT). + + Intrinsic groups: `unix'. + + Description: + + Changes the access mode of file NAME according to the specification + MODE, which is given in the format of `chmod(1)'. A null character + (`CHAR(0)') marks the end of the name in NAME--otherwise, trailing + blanks in NAME are ignored. Currently, NAME must not contain the + single quote character. + + If the STATUS argument is supplied, it contains 0 on success or a + non-zero error code upon return. + + Note that this currently works by actually invoking `/bin/chmod' (or + the `chmod' found when the library was configured) and so might fail in + some circumstances and will, anyway, be slow. + + Some non-GNU implementations of Fortran provide this intrinsic as + only a function, not as a subroutine, or do not support the (optional) + STATUS argument. + + For information on other intrinsics with the same name: *Note ChMod + Intrinsic (function)::. + +  + File: g77.info, Node: CLog Intrinsic, Next: Cmplx Intrinsic, Prev: ChMod Intrinsic (subroutine), Up: Table of Intrinsic Functions + + CLog Intrinsic + .............. + + CLog(X) + + CLog: `COMPLEX(KIND=1)' function. + + X: `COMPLEX(KIND=1)'; scalar; INTENT(IN). + + Intrinsic groups: (standard FORTRAN 77). + + Description: + + Archaic form of `LOG()' that is specific to one type for X. *Note + Log Intrinsic::. + +  + File: g77.info, Node: Cmplx Intrinsic, Next: Complex Intrinsic, Prev: CLog Intrinsic, Up: Table of Intrinsic Functions + + Cmplx Intrinsic + ............... + + Cmplx(X, Y) + + Cmplx: `COMPLEX(KIND=1)' function. + + X: `INTEGER', `REAL', or `COMPLEX'; scalar; INTENT(IN). + + Y: `INTEGER' or `REAL'; OPTIONAL (must be omitted if X is `COMPLEX'); + scalar; INTENT(IN). + + Intrinsic groups: (standard FORTRAN 77). + + Description: + + If X is not type `COMPLEX', constructs a value of type + `COMPLEX(KIND=1)' from the real and imaginary values specified by X and + Y, respectively. If Y is omitted, `0.' is assumed. + + If X is type `COMPLEX', converts it to type `COMPLEX(KIND=1)'. + + *Note Complex Intrinsic::, for information on easily constructing a + `COMPLEX' value of arbitrary precision from `REAL' arguments. + +  + File: g77.info, Node: Complex Intrinsic, Next: Conjg Intrinsic, Prev: Cmplx Intrinsic, Up: Table of Intrinsic Functions + + Complex Intrinsic + ................. + + Complex(REAL, IMAG) + + Complex: `COMPLEX' function, the exact type being the result of + cross-promoting the types of all the arguments. + + REAL: `INTEGER' or `REAL'; scalar; INTENT(IN). + + IMAG: `INTEGER' or `REAL'; scalar; INTENT(IN). + + Intrinsic groups: `gnu'. + + Description: + + Returns a `COMPLEX' value that has `Real' and `Imag' as its real and + imaginary parts, respectively. + + If REAL and IMAG are the same type, and that type is not `INTEGER', + no data conversion is performed, and the type of the resulting value + has the same kind value as the types of REAL and IMAG. + + If REAL and IMAG are not the same type, the usual type-promotion + rules are applied to both, converting either or both to the appropriate + `REAL' type. The type of the resulting value has the same kind value + as the type to which both REAL and IMAG were converted, in this case. + + If REAL and IMAG are both `INTEGER', they are both converted to + `REAL(KIND=1)', and the result of the `COMPLEX()' invocation is type + `COMPLEX(KIND=1)'. + + _Note:_ The way to do this in standard Fortran 90 is too hairy to + describe here, but it is important to note that `CMPLX(D1,D2)' returns + a `COMPLEX(KIND=1)' result even if `D1' and `D2' are type + `REAL(KIND=2)'. Hence the availability of `COMPLEX()' in GNU Fortran. + +  + File: g77.info, Node: Conjg Intrinsic, Next: Cos Intrinsic, Prev: Complex Intrinsic, Up: Table of Intrinsic Functions + + Conjg Intrinsic + ............... + + Conjg(Z) + + Conjg: `COMPLEX' function, the `KIND=' value of the type being that of + argument Z. + + Z: `COMPLEX'; scalar; INTENT(IN). + + Intrinsic groups: (standard FORTRAN 77). + + Description: + + Returns the complex conjugate: + + COMPLEX(REALPART(Z), -IMAGPART(Z)) + +  + File: g77.info, Node: Cos Intrinsic, Next: CosH Intrinsic, Prev: Conjg Intrinsic, Up: Table of Intrinsic Functions + + Cos Intrinsic + ............. + + Cos(X) + + Cos: `REAL' or `COMPLEX' function, the exact type being that of + argument X. + + X: `REAL' or `COMPLEX'; scalar; INTENT(IN). + + Intrinsic groups: (standard FORTRAN 77). + + Description: + + Returns the cosine of X, an angle measured in radians. + + *Note ACos Intrinsic::, for the inverse of this function. + +  + File: g77.info, Node: CosH Intrinsic, Next: Count Intrinsic, Prev: Cos Intrinsic, Up: Table of Intrinsic Functions + + CosH Intrinsic + .............. + + CosH(X) + + CosH: `REAL' function, the `KIND=' value of the type being that of + argument X. + + X: `REAL'; scalar; INTENT(IN). + + Intrinsic groups: (standard FORTRAN 77). + + Description: + + Returns the hyperbolic cosine of X. + +  + File: g77.info, Node: Count Intrinsic, Next: CPU_Time Intrinsic, Prev: CosH Intrinsic, Up: Table of Intrinsic Functions + + Count Intrinsic + ............... + + This intrinsic is not yet implemented. The name is, however, + reserved as an intrinsic. Use `EXTERNAL Count' to use this name for an + external procedure. + +  + File: g77.info, Node: CPU_Time Intrinsic, Next: CShift Intrinsic, Prev: Count Intrinsic, Up: Table of Intrinsic Functions + + CPU_Time Intrinsic + .................. + + CALL CPU_Time(SECONDS) + + SECONDS: `REAL'; scalar; INTENT(OUT). + + Intrinsic groups: `f90'. + + Description: + + Returns in SECONDS the current value of the system time. This + implementation of the Fortran 95 intrinsic is just an alias for + `second' *Note Second Intrinsic (subroutine)::. + + On some systems, the underlying timings are represented using types + with sufficiently small limits that overflows (wraparounds) are + possible, such as 32-bit types. Therefore, the values returned by this + intrinsic might be, or become, negative, or numerically less than + previous values, during a single run of the compiled program. + +  + File: g77.info, Node: CShift Intrinsic, Next: CSin Intrinsic, Prev: CPU_Time Intrinsic, Up: Table of Intrinsic Functions + + CShift Intrinsic + ................ + + This intrinsic is not yet implemented. The name is, however, + reserved as an intrinsic. Use `EXTERNAL CShift' to use this name for an + external procedure. + +  + File: g77.info, Node: CSin Intrinsic, Next: CSqRt Intrinsic, Prev: CShift Intrinsic, Up: Table of Intrinsic Functions + + CSin Intrinsic + .............. + + CSin(X) + + CSin: `COMPLEX(KIND=1)' function. + + X: `COMPLEX(KIND=1)'; scalar; INTENT(IN). + + Intrinsic groups: (standard FORTRAN 77). + + Description: + + Archaic form of `SIN()' that is specific to one type for X. *Note + Sin Intrinsic::. + +  + File: g77.info, Node: CSqRt Intrinsic, Next: CTime Intrinsic (subroutine), Prev: CSin Intrinsic, Up: Table of Intrinsic Functions + + CSqRt Intrinsic + ............... + + CSqRt(X) + + CSqRt: `COMPLEX(KIND=1)' function. + + X: `COMPLEX(KIND=1)'; scalar; INTENT(IN). + + Intrinsic groups: (standard FORTRAN 77). + + Description: + + Archaic form of `SQRT()' that is specific to one type for X. *Note + SqRt Intrinsic::. + +  + File: g77.info, Node: CTime Intrinsic (subroutine), Next: CTime Intrinsic (function), Prev: CSqRt Intrinsic, Up: Table of Intrinsic Functions + + CTime Intrinsic (subroutine) + ............................ + + CALL CTime(STIME, RESULT) + + STIME: `INTEGER'; scalar; INTENT(IN). + + RESULT: `CHARACTER'; scalar; INTENT(OUT). + + Intrinsic groups: `unix'. + + Description: + + Converts STIME, a system time value, such as returned by `TIME8()', + to a string of the form `Sat Aug 19 18:13:14 1995', and returns that + string in RESULT. + + *Note Time8 Intrinsic::. + + Some non-GNU implementations of Fortran provide this intrinsic as + only a function, not as a subroutine. + + For information on other intrinsics with the same name: *Note CTime + Intrinsic (function)::. + +  + File: g77.info, Node: CTime Intrinsic (function), Next: DAbs Intrinsic, Prev: CTime Intrinsic (subroutine), Up: Table of Intrinsic Functions + + CTime Intrinsic (function) + .......................... + + CTime(STIME) + + CTime: `CHARACTER*(*)' function. + + STIME: `INTEGER'; scalar; INTENT(IN). + + Intrinsic groups: `unix'. + + Description: + + Converts STIME, a system time value, such as returned by `TIME8()', + to a string of the form `Sat Aug 19 18:13:14 1995', and returns that + string as the function value. + + *Note Time8 Intrinsic::. + + For information on other intrinsics with the same name: *Note CTime + Intrinsic (subroutine)::. + +  + File: g77.info, Node: DAbs Intrinsic, Next: DACos Intrinsic, Prev: CTime Intrinsic (function), Up: Table of Intrinsic Functions + + DAbs Intrinsic + .............. + + DAbs(A) + + DAbs: `REAL(KIND=2)' function. + + A: `REAL(KIND=2)'; scalar; INTENT(IN). + + Intrinsic groups: (standard FORTRAN 77). + + Description: + + Archaic form of `ABS()' that is specific to one type for A. *Note + Abs Intrinsic::. + +  + File: g77.info, Node: DACos Intrinsic, Next: DASin Intrinsic, Prev: DAbs Intrinsic, Up: Table of Intrinsic Functions + + DACos Intrinsic + ............... + + DACos(X) + + DACos: `REAL(KIND=2)' function. + + X: `REAL(KIND=2)'; scalar; INTENT(IN). + + Intrinsic groups: (standard FORTRAN 77). + + Description: + + Archaic form of `ACOS()' that is specific to one type for X. *Note + ACos Intrinsic::. + +  File: g77.info, Node: DASin Intrinsic, Next: DATan Intrinsic, Prev: DACos Intrinsic, Up: Table of Intrinsic Functions DASin Intrinsic *************** DbesJN Intrinsic *** 188,194 **** DbesJN: `REAL(KIND=2)' function. ! N: `INTEGER'; scalar; INTENT(IN). X: `REAL(KIND=2)'; scalar; INTENT(IN). --- 547,553 ---- DbesJN: `REAL(KIND=2)' function. ! N: `INTEGER' not wider than the default kind; scalar; INTENT(IN). X: `REAL(KIND=2)'; scalar; INTENT(IN). *************** DbesYN Intrinsic *** 247,253 **** DbesYN: `REAL(KIND=2)' function. ! N: `INTEGER'; scalar; INTENT(IN). X: `REAL(KIND=2)'; scalar; INTENT(IN). --- 606,612 ---- DbesYN: `REAL(KIND=2)' function. ! N: `INTEGER' not wider than the default kind; scalar; INTENT(IN). X: `REAL(KIND=2)'; scalar; INTENT(IN). *************** Exit Intrinsic *** 885,891 **** CALL Exit(STATUS) ! STATUS: `INTEGER'; OPTIONAL; scalar; INTENT(IN). Intrinsic groups: `unix'. --- 1244,1251 ---- CALL Exit(STATUS) ! STATUS: `INTEGER' not wider than the default kind; OPTIONAL; scalar; ! INTENT(IN). Intrinsic groups: `unix'. *************** GetArg Intrinsic *** 1402,1408 **** CALL GetArg(POS, VALUE) ! POS: `INTEGER'; scalar; INTENT(IN). VALUE: `CHARACTER'; scalar; INTENT(OUT). --- 1762,1768 ---- CALL GetArg(POS, VALUE) ! POS: `INTEGER' not wider than the default kind; scalar; INTENT(IN). VALUE: `CHARACTER'; scalar; INTENT(OUT). *************** STATUS argument. *** 1633,2048 **** For information on other intrinsics with the same name: *Note HostNm Intrinsic (function)::. -  - File: g77.info, Node: HostNm Intrinsic (function), Next: Huge Intrinsic, Prev: HostNm Intrinsic (subroutine), Up: Table of Intrinsic Functions - - HostNm Intrinsic (function) - ........................... - - HostNm(NAME) - - HostNm: `INTEGER(KIND=1)' function. - - NAME: `CHARACTER'; scalar; INTENT(OUT). - - Intrinsic groups: `unix'. - - Description: - - Fills NAME with the system's host name returned by `gethostname(2)', - returning 0 on success or a non-zero error code (`ENOSYS' if the system - does not provide `gethostname(2)'). - - On some systems (specifically SCO) it might be necessary to link the - "socket" library if you call this routine. Typically this means adding - `-lg2c -lsocket -lm' to the `g77' command line when linking the program. - - For information on other intrinsics with the same name: *Note HostNm - Intrinsic (subroutine)::. - -  - File: g77.info, Node: Huge Intrinsic, Next: IAbs Intrinsic, Prev: HostNm Intrinsic (function), Up: Table of Intrinsic Functions - - Huge Intrinsic - .............. - - This intrinsic is not yet implemented. The name is, however, - reserved as an intrinsic. Use `EXTERNAL Huge' to use this name for an - external procedure. - -  - File: g77.info, Node: IAbs Intrinsic, Next: IAChar Intrinsic, Prev: Huge Intrinsic, Up: Table of Intrinsic Functions - - IAbs Intrinsic - .............. - - IAbs(A) - - IAbs: `INTEGER(KIND=1)' function. - - A: `INTEGER(KIND=1)'; scalar; INTENT(IN). - - Intrinsic groups: (standard FORTRAN 77). - - Description: - - Archaic form of `ABS()' that is specific to one type for A. *Note - Abs Intrinsic::. - -  - File: g77.info, Node: IAChar Intrinsic, Next: IAnd Intrinsic, Prev: IAbs Intrinsic, Up: Table of Intrinsic Functions - - IAChar Intrinsic - ................ - - IAChar(C) - - IAChar: `INTEGER(KIND=1)' function. - - C: `CHARACTER'; scalar; INTENT(IN). - - Intrinsic groups: `f2c', `f90'. - - Description: - - Returns the code for the ASCII character in the first character - position of C. - - *Note AChar Intrinsic::, for the inverse of this function. - - *Note IChar Intrinsic::, for the function corresponding to the - system's native character set. - -  - File: g77.info, Node: IAnd Intrinsic, Next: IArgC Intrinsic, Prev: IAChar Intrinsic, Up: Table of Intrinsic Functions - - IAnd Intrinsic - .............. - - IAnd(I, J) - - IAnd: `INTEGER' function, the exact type being the result of - cross-promoting the types of all the arguments. - - I: `INTEGER'; scalar; INTENT(IN). - - J: `INTEGER'; scalar; INTENT(IN). - - Intrinsic groups: `mil', `f90', `vxt'. - - Description: - - Returns value resulting from boolean AND of pair of bits in each of - I and J. - -  - File: g77.info, Node: IArgC Intrinsic, Next: IBClr Intrinsic, Prev: IAnd Intrinsic, Up: Table of Intrinsic Functions - - IArgC Intrinsic - ............... - - IArgC() - - IArgC: `INTEGER(KIND=1)' function. - - Intrinsic groups: `unix'. - - Description: - - Returns the number of command-line arguments. - - This count does not include the specification of the program name - itself. - -  - File: g77.info, Node: IBClr Intrinsic, Next: IBits Intrinsic, Prev: IArgC Intrinsic, Up: Table of Intrinsic Functions - - IBClr Intrinsic - ............... - - IBClr(I, POS) - - IBClr: `INTEGER' function, the `KIND=' value of the type being that of - argument I. - - I: `INTEGER'; scalar; INTENT(IN). - - POS: `INTEGER'; scalar; INTENT(IN). - - Intrinsic groups: `mil', `f90', `vxt'. - - Description: - - Returns the value of I with bit POS cleared (set to zero). *Note - BTest Intrinsic::, for information on bit positions. - -  - File: g77.info, Node: IBits Intrinsic, Next: IBSet Intrinsic, Prev: IBClr Intrinsic, Up: Table of Intrinsic Functions - - IBits Intrinsic - ............... - - IBits(I, POS, LEN) - - IBits: `INTEGER' function, the `KIND=' value of the type being that of - argument I. - - I: `INTEGER'; scalar; INTENT(IN). - - POS: `INTEGER'; scalar; INTENT(IN). - - LEN: `INTEGER'; scalar; INTENT(IN). - - Intrinsic groups: `mil', `f90', `vxt'. - - Description: - - Extracts a subfield of length LEN from I, starting from bit position - POS and extending left for LEN bits. The result is right-justified and - the remaining bits are zeroed. The value of `POS+LEN' must be less - than or equal to the value `BIT_SIZE(I)'. *Note Bit_Size Intrinsic::. - -  - File: g77.info, Node: IBSet Intrinsic, Next: IChar Intrinsic, Prev: IBits Intrinsic, Up: Table of Intrinsic Functions - - IBSet Intrinsic - ............... - - IBSet(I, POS) - - IBSet: `INTEGER' function, the `KIND=' value of the type being that of - argument I. - - I: `INTEGER'; scalar; INTENT(IN). - - POS: `INTEGER'; scalar; INTENT(IN). - - Intrinsic groups: `mil', `f90', `vxt'. - - Description: - - Returns the value of I with bit POS set (to one). *Note BTest - Intrinsic::, for information on bit positions. - -  - File: g77.info, Node: IChar Intrinsic, Next: IDate Intrinsic (UNIX), Prev: IBSet Intrinsic, Up: Table of Intrinsic Functions - - IChar Intrinsic - ............... - - IChar(C) - - IChar: `INTEGER(KIND=1)' function. - - C: `CHARACTER'; scalar; INTENT(IN). - - Intrinsic groups: (standard FORTRAN 77). - - Description: - - Returns the code for the character in the first character position - of C. - - Because the system's native character set is used, the - correspondence between character and their codes is not necessarily the - same between GNU Fortran implementations. - - Note that no intrinsic exists to convert a printable character - string to a numerical value. For example, there is no intrinsic that, - given the `CHARACTER' value `'154'', returns an `INTEGER' or `REAL' - value with the value `154'. - - Instead, you can use internal-file I/O to do this kind of conversion. - For example: - - INTEGER VALUE - CHARACTER*10 STRING - STRING = '154' - READ (STRING, '(I10)'), VALUE - PRINT *, VALUE - END - - The above program, when run, prints: - - 154 - - *Note Char Intrinsic::, for the inverse of the `ICHAR' function. - - *Note IAChar Intrinsic::, for the function corresponding to the - ASCII character set. - -  - File: g77.info, Node: IDate Intrinsic (UNIX), Next: IDiM Intrinsic, Prev: IChar Intrinsic, Up: Table of Intrinsic Functions - - IDate Intrinsic (UNIX) - ...................... - - CALL IDate(TARRAY) - - TARRAY: `INTEGER(KIND=1)'; DIMENSION(3); INTENT(OUT). - - Intrinsic groups: `unix'. - - Description: - - Fills TARRAY with the numerical values at the current local time of - day, month (in the range 1-12), and year in elements 1, 2, and 3, - respectively. The year has four significant digits. - - Programs making use of this intrinsic might not be Year 10000 (Y10K) - compliant. For example, the date might appear, to such programs, to - wrap around (change from a larger value to a smaller one) as of the - Year 10000. - - For information on other intrinsics with the same name: *Note IDate - Intrinsic (VXT)::. - -  - File: g77.info, Node: IDiM Intrinsic, Next: IDInt Intrinsic, Prev: IDate Intrinsic (UNIX), Up: Table of Intrinsic Functions - - IDiM Intrinsic - .............. - - IDiM(X, Y) - - IDiM: `INTEGER(KIND=1)' function. - - X: `INTEGER(KIND=1)'; scalar; INTENT(IN). - - Y: `INTEGER(KIND=1)'; scalar; INTENT(IN). - - Intrinsic groups: (standard FORTRAN 77). - - Description: - - Archaic form of `DIM()' that is specific to one type for X and Y. - *Note DiM Intrinsic::. - -  - File: g77.info, Node: IDInt Intrinsic, Next: IDNInt Intrinsic, Prev: IDiM Intrinsic, Up: Table of Intrinsic Functions - - IDInt Intrinsic - ............... - - IDInt(A) - - IDInt: `INTEGER(KIND=1)' function. - - A: `REAL(KIND=2)'; scalar; INTENT(IN). - - Intrinsic groups: (standard FORTRAN 77). - - Description: - - Archaic form of `INT()' that is specific to one type for A. *Note - Int Intrinsic::. - -  - File: g77.info, Node: IDNInt Intrinsic, Next: IEOr Intrinsic, Prev: IDInt Intrinsic, Up: Table of Intrinsic Functions - - IDNInt Intrinsic - ................ - - IDNInt(A) - - IDNInt: `INTEGER(KIND=1)' function. - - A: `REAL(KIND=2)'; scalar; INTENT(IN). - - Intrinsic groups: (standard FORTRAN 77). - - Description: - - Archaic form of `NINT()' that is specific to one type for A. *Note - NInt Intrinsic::. - -  - File: g77.info, Node: IEOr Intrinsic, Next: IErrNo Intrinsic, Prev: IDNInt Intrinsic, Up: Table of Intrinsic Functions - - IEOr Intrinsic - .............. - - IEOr(I, J) - - IEOr: `INTEGER' function, the exact type being the result of - cross-promoting the types of all the arguments. - - I: `INTEGER'; scalar; INTENT(IN). - - J: `INTEGER'; scalar; INTENT(IN). - - Intrinsic groups: `mil', `f90', `vxt'. - - Description: - - Returns value resulting from boolean exclusive-OR of pair of bits in - each of I and J. - -  - File: g77.info, Node: IErrNo Intrinsic, Next: IFix Intrinsic, Prev: IEOr Intrinsic, Up: Table of Intrinsic Functions - - IErrNo Intrinsic - ................ - - IErrNo() - - IErrNo: `INTEGER(KIND=1)' function. - - Intrinsic groups: `unix'. - - Description: - - Returns the last system error number (corresponding to the C - `errno'). - -  - File: g77.info, Node: IFix Intrinsic, Next: Imag Intrinsic, Prev: IErrNo Intrinsic, Up: Table of Intrinsic Functions - - IFix Intrinsic - .............. - - IFix(A) - - IFix: `INTEGER(KIND=1)' function. - - A: `REAL(KIND=1)'; scalar; INTENT(IN). - - Intrinsic groups: (standard FORTRAN 77). - - Description: - - Archaic form of `INT()' that is specific to one type for A. *Note - Int Intrinsic::. - -  - File: g77.info, Node: Imag Intrinsic, Next: ImagPart Intrinsic, Prev: IFix Intrinsic, Up: Table of Intrinsic Functions - - Imag Intrinsic - .............. - - Imag(Z) - - Imag: `REAL' function, the `KIND=' value of the type being that of - argument Z. - - Z: `COMPLEX'; scalar; INTENT(IN). - - Intrinsic groups: `f2c'. - - Description: - - The imaginary part of Z is returned, without conversion. - - _Note:_ The way to do this in standard Fortran 90 is `AIMAG(Z)'. - However, when, for example, Z is `DOUBLE COMPLEX', `AIMAG(Z)' means - something different for some compilers that are not true Fortran 90 - compilers but offer some extensions standardized by Fortran 90 (such as - the `DOUBLE COMPLEX' type, also known as `COMPLEX(KIND=2)'). - - The advantage of `IMAG()' is that, while not necessarily more or - less portable than `AIMAG()', it is more likely to cause a compiler - that doesn't support it to produce a diagnostic than generate incorrect - code. - - *Note REAL() and AIMAG() of Complex::, for more information. - --- 1993,1995 ---- diff -Nrc3pad gcc-3.0.4/gcc/f/g77.info-9 gcc-3.1/gcc/f/g77.info-9 *** gcc-3.0.4/gcc/f/g77.info-9 Wed Feb 20 19:57:12 2002 --- gcc-3.1/gcc/f/g77.info-9 Wed May 15 02:45:53 2002 *************** *** 1,16 **** ! This is g77.info, produced by makeinfo version 4.0b from g77.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * g77: (g77). The GNU Fortran compiler. END-INFO-DIR-ENTRY This file documents the use and the internals of the GNU Fortran ! (`g77') compiler. It corresponds to the GCC-3.0 version of `g77'. Published by the Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA ! Copyright (C) 1995,1996,1997,1998,1999,2000,2001 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document --- 1,16 ---- ! This is g77.info, produced by makeinfo version 4.2 from g77.texi. INFO-DIR-SECTION Programming START-INFO-DIR-ENTRY * g77: (g77). The GNU Fortran compiler. END-INFO-DIR-ENTRY This file documents the use and the internals of the GNU Fortran ! (`g77') compiler. It corresponds to the GCC-3.1 version of `g77'. Published by the Free Software Foundation 59 Temple Place - Suite 330 Boston, MA 02111-1307 USA ! Copyright (C) 1995,1996,1997,1998,1999,2000,2001,2002 Free Software Foundation, Inc. Permission is granted to copy, distribute and/or modify this document *************** a first pass at translating `g77-0.5.16/ *** 36,41 **** --- 36,454 ---- Craig by David Ronis ().  + File: g77.info, Node: HostNm Intrinsic (function), Next: Huge Intrinsic, Prev: HostNm Intrinsic (subroutine), Up: Table of Intrinsic Functions + + HostNm Intrinsic (function) + ........................... + + HostNm(NAME) + + HostNm: `INTEGER(KIND=1)' function. + + NAME: `CHARACTER'; scalar; INTENT(OUT). + + Intrinsic groups: `unix'. + + Description: + + Fills NAME with the system's host name returned by `gethostname(2)', + returning 0 on success or a non-zero error code (`ENOSYS' if the system + does not provide `gethostname(2)'). + + On some systems (specifically SCO) it might be necessary to link the + "socket" library if you call this routine. Typically this means adding + `-lg2c -lsocket -lm' to the `g77' command line when linking the program. + + For information on other intrinsics with the same name: *Note HostNm + Intrinsic (subroutine)::. + +  + File: g77.info, Node: Huge Intrinsic, Next: IAbs Intrinsic, Prev: HostNm Intrinsic (function), Up: Table of Intrinsic Functions + + Huge Intrinsic + .............. + + This intrinsic is not yet implemented. The name is, however, + reserved as an intrinsic. Use `EXTERNAL Huge' to use this name for an + external procedure. + +  + File: g77.info, Node: IAbs Intrinsic, Next: IAChar Intrinsic, Prev: Huge Intrinsic, Up: Table of Intrinsic Functions + + IAbs Intrinsic + .............. + + IAbs(A) + + IAbs: `INTEGER(KIND=1)' function. + + A: `INTEGER(KIND=1)'; scalar; INTENT(IN). + + Intrinsic groups: (standard FORTRAN 77). + + Description: + + Archaic form of `ABS()' that is specific to one type for A. *Note + Abs Intrinsic::. + +  + File: g77.info, Node: IAChar Intrinsic, Next: IAnd Intrinsic, Prev: IAbs Intrinsic, Up: Table of Intrinsic Functions + + IAChar Intrinsic + ................ + + IAChar(C) + + IAChar: `INTEGER(KIND=1)' function. + + C: `CHARACTER'; scalar; INTENT(IN). + + Intrinsic groups: `f2c', `f90'. + + Description: + + Returns the code for the ASCII character in the first character + position of C. + + *Note AChar Intrinsic::, for the inverse of this function. + + *Note IChar Intrinsic::, for the function corresponding to the + system's native character set. + +  + File: g77.info, Node: IAnd Intrinsic, Next: IArgC Intrinsic, Prev: IAChar Intrinsic, Up: Table of Intrinsic Functions + + IAnd Intrinsic + .............. + + IAnd(I, J) + + IAnd: `INTEGER' function, the exact type being the result of + cross-promoting the types of all the arguments. + + I: `INTEGER'; scalar; INTENT(IN). + + J: `INTEGER'; scalar; INTENT(IN). + + Intrinsic groups: `mil', `f90', `vxt'. + + Description: + + Returns value resulting from boolean AND of pair of bits in each of + I and J. + +  + File: g77.info, Node: IArgC Intrinsic, Next: IBClr Intrinsic, Prev: IAnd Intrinsic, Up: Table of Intrinsic Functions + + IArgC Intrinsic + ............... + + IArgC() + + IArgC: `INTEGER(KIND=1)' function. + + Intrinsic groups: `unix'. + + Description: + + Returns the number of command-line arguments. + + This count does not include the specification of the program name + itself. + +  + File: g77.info, Node: IBClr Intrinsic, Next: IBits Intrinsic, Prev: IArgC Intrinsic, Up: Table of Intrinsic Functions + + IBClr Intrinsic + ............... + + IBClr(I, POS) + + IBClr: `INTEGER' function, the `KIND=' value of the type being that of + argument I. + + I: `INTEGER'; scalar; INTENT(IN). + + POS: `INTEGER'; scalar; INTENT(IN). + + Intrinsic groups: `mil', `f90', `vxt'. + + Description: + + Returns the value of I with bit POS cleared (set to zero). *Note + BTest Intrinsic::, for information on bit positions. + +  + File: g77.info, Node: IBits Intrinsic, Next: IBSet Intrinsic, Prev: IBClr Intrinsic, Up: Table of Intrinsic Functions + + IBits Intrinsic + ............... + + IBits(I, POS, LEN) + + IBits: `INTEGER' function, the `KIND=' value of the type being that of + argument I. + + I: `INTEGER'; scalar; INTENT(IN). + + POS: `INTEGER'; scalar; INTENT(IN). + + LEN: `INTEGER'; scalar; INTENT(IN). + + Intrinsic groups: `mil', `f90', `vxt'. + + Description: + + Extracts a subfield of length LEN from I, starting from bit position + POS and extending left for LEN bits. The result is right-justified and + the remaining bits are zeroed. The value of `POS+LEN' must be less + than or equal to the value `BIT_SIZE(I)'. *Note Bit_Size Intrinsic::. + +  + File: g77.info, Node: IBSet Intrinsic, Next: IChar Intrinsic, Prev: IBits Intrinsic, Up: Table of Intrinsic Functions + + IBSet Intrinsic + ............... + + IBSet(I, POS) + + IBSet: `INTEGER' function, the `KIND=' value of the type being that of + argument I. + + I: `INTEGER'; scalar; INTENT(IN). + + POS: `INTEGER'; scalar; INTENT(IN). + + Intrinsic groups: `mil', `f90', `vxt'. + + Description: + + Returns the value of I with bit POS set (to one). *Note BTest + Intrinsic::, for information on bit positions. + +  + File: g77.info, Node: IChar Intrinsic, Next: IDate Intrinsic (UNIX), Prev: IBSet Intrinsic, Up: Table of Intrinsic Functions + + IChar Intrinsic + ............... + + IChar(C) + + IChar: `INTEGER(KIND=1)' function. + + C: `CHARACTER'; scalar; INTENT(IN). + + Intrinsic groups: (standard FORTRAN 77). + + Description: + + Returns the code for the character in the first character position + of C. + + Because the system's native character set is used, the + correspondence between character and their codes is not necessarily the + same between GNU Fortran implementations. + + Note that no intrinsic exists to convert a printable character + string to a numerical value. For example, there is no intrinsic that, + given the `CHARACTER' value `'154'', returns an `INTEGER' or `REAL' + value with the value `154'. + + Instead, you can use internal-file I/O to do this kind of conversion. + For example: + + INTEGER VALUE + CHARACTER*10 STRING + STRING = '154' + READ (STRING, '(I10)'), VALUE + PRINT *, VALUE + END + + The above program, when run, prints: + + 154 + + *Note Char Intrinsic::, for the inverse of the `ICHAR' function. + + *Note IAChar Intrinsic::, for the function corresponding to the + ASCII character set. + +  + File: g77.info, Node: IDate Intrinsic (UNIX), Next: IDiM Intrinsic, Prev: IChar Intrinsic, Up: Table of Intrinsic Functions + + IDate Intrinsic (UNIX) + ...................... + + CALL IDate(TARRAY) + + TARRAY: `INTEGER(KIND=1)'; DIMENSION(3); INTENT(OUT). + + Intrinsic groups: `unix'. + + Description: + + Fills TARRAY with the numerical values at the current local time of + day, month (in the range 1-12), and year in elements 1, 2, and 3, + respectively. The year has four significant digits. + + Programs making use of this intrinsic might not be Year 10000 (Y10K) + compliant. For example, the date might appear, to such programs, to + wrap around (change from a larger value to a smaller one) as of the + Year 10000. + + For information on other intrinsics with the same name: *Note IDate + Intrinsic (VXT)::. + +  + File: g77.info, Node: IDiM Intrinsic, Next: IDInt Intrinsic, Prev: IDate Intrinsic (UNIX), Up: Table of Intrinsic Functions + + IDiM Intrinsic + .............. + + IDiM(X, Y) + + IDiM: `INTEGER(KIND=1)' function. + + X: `INTEGER(KIND=1)'; scalar; INTENT(IN). + + Y: `INTEGER(KIND=1)'; scalar; INTENT(IN). + + Intrinsic groups: (standard FORTRAN 77). + + Description: + + Archaic form of `DIM()' that is specific to one type for X and Y. + *Note DiM Intrinsic::. + +  + File: g77.info, Node: IDInt Intrinsic, Next: IDNInt Intrinsic, Prev: IDiM Intrinsic, Up: Table of Intrinsic Functions + + IDInt Intrinsic + ............... + + IDInt(A) + + IDInt: `INTEGER(KIND=1)' function. + + A: `REAL(KIND=2)'; scalar; INTENT(IN). + + Intrinsic groups: (standard FORTRAN 77). + + Description: + + Archaic form of `INT()' that is specific to one type for A. *Note + Int Intrinsic::. + +  + File: g77.info, Node: IDNInt Intrinsic, Next: IEOr Intrinsic, Prev: IDInt Intrinsic, Up: Table of Intrinsic Functions + + IDNInt Intrinsic + ................ + + IDNInt(A) + + IDNInt: `INTEGER(KIND=1)' function. + + A: `REAL(KIND=2)'; scalar; INTENT(IN). + + Intrinsic groups: (standard FORTRAN 77). + + Description: + + Archaic form of `NINT()' that is specific to one type for A. *Note + NInt Intrinsic::. + +  + File: g77.info, Node: IEOr Intrinsic, Next: IErrNo Intrinsic, Prev: IDNInt Intrinsic, Up: Table of Intrinsic Functions + + IEOr Intrinsic + .............. + + IEOr(I, J) + + IEOr: `INTEGER' function, the exact type being the result of + cross-promoting the types of all the arguments. + + I: `INTEGER'; scalar; INTENT(IN). + + J: `INTEGER'; scalar; INTENT(IN). + + Intrinsic groups: `mil', `f90', `vxt'. + + Description: + + Returns value resulting from boolean exclusive-OR of pair of bits in + each of I and J. + +  + File: g77.info, Node: IErrNo Intrinsic, Next: IFix Intrinsic, Prev: IEOr Intrinsic, Up: Table of Intrinsic Functions + + IErrNo Intrinsic + ................ + + IErrNo() + + IErrNo: `INTEGER(KIND=1)' function. + + Intrinsic groups: `unix'. + + Description: + + Returns the last system error number (corresponding to the C + `errno'). + +  + File: g77.info, Node: IFix Intrinsic, Next: Imag Intrinsic, Prev: IErrNo Intrinsic, Up: Table of Intrinsic Functions + + IFix Intrinsic + .............. + + IFix(A) + + IFix: `INTEGER(KIND=1)' function. + + A: `REAL(KIND=1)'; scalar; INTENT(IN). + + Intrinsic groups: (standard FORTRAN 77). + + Description: + + Archaic form of `INT()' that is specific to one type for A. *Note + Int Intrinsic::. + +  + File: g77.info, Node: Imag Intrinsic, Next: ImagPart Intrinsic, Prev: IFix Intrinsic, Up: Table of Intrinsic Functions + + Imag Intrinsic + .............. + + Imag(Z) + + Imag: `REAL' function, the `KIND=' value of the type being that of + argument Z. + + Z: `COMPLEX'; scalar; INTENT(IN). + + Intrinsic groups: `f2c'. + + Description: + + The imaginary part of Z is returned, without conversion. + + _Note:_ The way to do this in standard Fortran 90 is `AIMAG(Z)'. + However, when, for example, Z is `DOUBLE COMPLEX', `AIMAG(Z)' means + something different for some compilers that are not true Fortran 90 + compilers but offer some extensions standardized by Fortran 90 (such as + the `DOUBLE COMPLEX' type, also known as `COMPLEX(KIND=2)'). + + The advantage of `IMAG()' is that, while not necessarily more or + less portable than `AIMAG()', it is more likely to cause a compiler + that doesn't support it to produce a diagnostic than generate incorrect + code. + + *Note REAL() and AIMAG() of Complex::, for more information. + +  File: g77.info, Node: ImagPart Intrinsic, Next: Index Intrinsic, Prev: Imag Intrinsic, Up: Table of Intrinsic Functions ImagPart Intrinsic *************** Range Intrinsic *** 1468,1798 **** reserved as an intrinsic. Use `EXTERNAL Range' to use this name for an external procedure. -  - File: g77.info, Node: Real Intrinsic, Next: RealPart Intrinsic, Prev: Range Intrinsic, Up: Table of Intrinsic Functions - - Real Intrinsic - .............. - - Real(A) - - Real: `REAL' function. The exact type is `REAL(KIND=1)' when argument - A is any type other than `COMPLEX', or when it is `COMPLEX(KIND=1)'. - When A is any `COMPLEX' type other than `COMPLEX(KIND=1)', this - intrinsic is valid only when used as the argument to `REAL()', as - explained below. - - A: `INTEGER', `REAL', or `COMPLEX'; scalar; INTENT(IN). - - Intrinsic groups: (standard FORTRAN 77). - - Description: - - Converts A to `REAL(KIND=1)'. - - Use of `REAL()' with a `COMPLEX' argument (other than - `COMPLEX(KIND=1)') is restricted to the following case: - - REAL(REAL(A)) - - This expression converts the real part of A to `REAL(KIND=1)'. - - *Note RealPart Intrinsic::, for information on a GNU Fortran - intrinsic that extracts the real part of an arbitrary `COMPLEX' value. - - *Note REAL() and AIMAG() of Complex::, for more information. - -  - File: g77.info, Node: RealPart Intrinsic, Next: Rename Intrinsic (subroutine), Prev: Real Intrinsic, Up: Table of Intrinsic Functions - - RealPart Intrinsic - .................. - - RealPart(Z) - - RealPart: `REAL' function, the `KIND=' value of the type being that of - argument Z. - - Z: `COMPLEX'; scalar; INTENT(IN). - - Intrinsic groups: `gnu'. - - Description: - - The real part of Z is returned, without conversion. - - _Note:_ The way to do this in standard Fortran 90 is `REAL(Z)'. - However, when, for example, Z is `COMPLEX(KIND=2)', `REAL(Z)' means - something different for some compilers that are not true Fortran 90 - compilers but offer some extensions standardized by Fortran 90 (such as - the `DOUBLE COMPLEX' type, also known as `COMPLEX(KIND=2)'). - - The advantage of `REALPART()' is that, while not necessarily more or - less portable than `REAL()', it is more likely to cause a compiler that - doesn't support it to produce a diagnostic than generate incorrect code. - - *Note REAL() and AIMAG() of Complex::, for more information. - -  - File: g77.info, Node: Rename Intrinsic (subroutine), Next: Repeat Intrinsic, Prev: RealPart Intrinsic, Up: Table of Intrinsic Functions - - Rename Intrinsic (subroutine) - ............................. - - CALL Rename(PATH1, PATH2, STATUS) - - PATH1: `CHARACTER'; scalar; INTENT(IN). - - PATH2: `CHARACTER'; scalar; INTENT(IN). - - STATUS: `INTEGER(KIND=1)'; OPTIONAL; scalar; INTENT(OUT). - - Intrinsic groups: `unix'. - - Description: - - Renames the file PATH1 to PATH2. A null character (`CHAR(0)') marks - the end of the names in PATH1 and PATH2--otherwise, trailing blanks in - PATH1 and PATH2 are ignored. See `rename(2)'. If the STATUS argument - is supplied, it contains 0 on success or a non-zero error code upon - return. - - Some non-GNU implementations of Fortran provide this intrinsic as - only a function, not as a subroutine, or do not support the (optional) - STATUS argument. - - For information on other intrinsics with the same name: *Note Rename - Intrinsic (function)::. - -  - File: g77.info, Node: Repeat Intrinsic, Next: Reshape Intrinsic, Prev: Rename Intrinsic (subroutine), Up: Table of Intrinsic Functions - - Repeat Intrinsic - ................ - - This intrinsic is not yet implemented. The name is, however, - reserved as an intrinsic. Use `EXTERNAL Repeat' to use this name for an - external procedure. - -  - File: g77.info, Node: Reshape Intrinsic, Next: RRSpacing Intrinsic, Prev: Repeat Intrinsic, Up: Table of Intrinsic Functions - - Reshape Intrinsic - ................. - - This intrinsic is not yet implemented. The name is, however, - reserved as an intrinsic. Use `EXTERNAL Reshape' to use this name for - an external procedure. - -  - File: g77.info, Node: RRSpacing Intrinsic, Next: RShift Intrinsic, Prev: Reshape Intrinsic, Up: Table of Intrinsic Functions - - RRSpacing Intrinsic - ................... - - This intrinsic is not yet implemented. The name is, however, - reserved as an intrinsic. Use `EXTERNAL RRSpacing' to use this name - for an external procedure. - -  - File: g77.info, Node: RShift Intrinsic, Next: Scale Intrinsic, Prev: RRSpacing Intrinsic, Up: Table of Intrinsic Functions - - RShift Intrinsic - ................ - - RShift(I, SHIFT) - - RShift: `INTEGER' function, the `KIND=' value of the type being that of - argument I. - - I: `INTEGER'; scalar; INTENT(IN). - - SHIFT: `INTEGER'; scalar; INTENT(IN). - - Intrinsic groups: `f2c'. - - Description: - - Returns I shifted to the right SHIFT bits. - - Although similar to the expression `I/(2**SHIFT)', there are - important differences. For example, the sign of the result is - undefined. - - Currently this intrinsic is defined assuming the underlying - representation of I is as a two's-complement integer. It is unclear at - this point whether that definition will apply when a different - representation is involved. - - *Note RShift Intrinsic::, for the inverse of this function. - - *Note IShft Intrinsic::, for information on a more widely available - right-shifting intrinsic that is also more precisely defined. - -  - File: g77.info, Node: Scale Intrinsic, Next: Scan Intrinsic, Prev: RShift Intrinsic, Up: Table of Intrinsic Functions - - Scale Intrinsic - ............... - - This intrinsic is not yet implemented. The name is, however, - reserved as an intrinsic. Use `EXTERNAL Scale' to use this name for an - external procedure. - -  - File: g77.info, Node: Scan Intrinsic, Next: Second Intrinsic (function), Prev: Scale Intrinsic, Up: Table of Intrinsic Functions - - Scan Intrinsic - .............. - - This intrinsic is not yet implemented. The name is, however, - reserved as an intrinsic. Use `EXTERNAL Scan' to use this name for an - external procedure. - -  - File: g77.info, Node: Second Intrinsic (function), Next: Second Intrinsic (subroutine), Prev: Scan Intrinsic, Up: Table of Intrinsic Functions - - Second Intrinsic (function) - ........................... - - Second() - - Second: `REAL(KIND=1)' function. - - Intrinsic groups: `unix'. - - Description: - - Returns the process's runtime in seconds--the same value as the UNIX - function `etime' returns. - - On some systems, the underlying timings are represented using types - with sufficiently small limits that overflows (wraparounds) are - possible, such as 32-bit types. Therefore, the values returned by this - intrinsic might be, or become, negative, or numerically less than - previous values, during a single run of the compiled program. - - For information on other intrinsics with the same name: *Note Second - Intrinsic (subroutine)::. - -  - File: g77.info, Node: Second Intrinsic (subroutine), Next: Selected_Int_Kind Intrinsic, Prev: Second Intrinsic (function), Up: Table of Intrinsic Functions - - Second Intrinsic (subroutine) - ............................. - - CALL Second(SECONDS) - - SECONDS: `REAL'; scalar; INTENT(OUT). - - Intrinsic groups: `unix'. - - Description: - - Returns the process's runtime in seconds in SECONDS--the same value - as the UNIX function `etime' returns. - - On some systems, the underlying timings are represented using types - with sufficiently small limits that overflows (wraparounds) are - possible, such as 32-bit types. Therefore, the values returned by this - intrinsic might be, or become, negative, or numerically less than - previous values, during a single run of the compiled program. - - This routine is known from Cray Fortran. *Note CPU_Time Intrinsic::, - for a standard equivalent. - - For information on other intrinsics with the same name: *Note Second - Intrinsic (function)::. - -  - File: g77.info, Node: Selected_Int_Kind Intrinsic, Next: Selected_Real_Kind Intrinsic, Prev: Second Intrinsic (subroutine), Up: Table of Intrinsic Functions - - Selected_Int_Kind Intrinsic - ........................... - - This intrinsic is not yet implemented. The name is, however, - reserved as an intrinsic. Use `EXTERNAL Selected_Int_Kind' to use this - name for an external procedure. - -  - File: g77.info, Node: Selected_Real_Kind Intrinsic, Next: Set_Exponent Intrinsic, Prev: Selected_Int_Kind Intrinsic, Up: Table of Intrinsic Functions - - Selected_Real_Kind Intrinsic - ............................ - - This intrinsic is not yet implemented. The name is, however, - reserved as an intrinsic. Use `EXTERNAL Selected_Real_Kind' to use - this name for an external procedure. - -  - File: g77.info, Node: Set_Exponent Intrinsic, Next: Shape Intrinsic, Prev: Selected_Real_Kind Intrinsic, Up: Table of Intrinsic Functions - - Set_Exponent Intrinsic - ...................... - - This intrinsic is not yet implemented. The name is, however, - reserved as an intrinsic. Use `EXTERNAL Set_Exponent' to use this name - for an external procedure. - -  - File: g77.info, Node: Shape Intrinsic, Next: Short Intrinsic, Prev: Set_Exponent Intrinsic, Up: Table of Intrinsic Functions - - Shape Intrinsic - ............... - - This intrinsic is not yet implemented. The name is, however, - reserved as an intrinsic. Use `EXTERNAL Shape' to use this name for an - external procedure. - -  - File: g77.info, Node: Short Intrinsic, Next: Sign Intrinsic, Prev: Shape Intrinsic, Up: Table of Intrinsic Functions - - Short Intrinsic - ............... - - Short(A) - - Short: `INTEGER(KIND=6)' function. - - A: `INTEGER'; scalar; INTENT(IN). - - Intrinsic groups: `unix'. - - Description: - - Returns A with the fractional portion of its magnitude truncated and - its sign preserved, converted to type `INTEGER(KIND=6)'. - - If A is type `COMPLEX', its real part is truncated and converted, - and its imaginary part is disgregarded. - - *Note Int Intrinsic::. - - The precise meaning of this intrinsic might change in a future - version of the GNU Fortran language, as more is learned about how it is - used. - -  - File: g77.info, Node: Sign Intrinsic, Next: Signal Intrinsic (subroutine), Prev: Short Intrinsic, Up: Table of Intrinsic Functions - - Sign Intrinsic - .............. - - Sign(A, B) - - Sign: `INTEGER' or `REAL' function, the exact type being the result of - cross-promoting the types of all the arguments. - - A: `INTEGER' or `REAL'; scalar; INTENT(IN). - - B: `INTEGER' or `REAL'; scalar; INTENT(IN). - - Intrinsic groups: (standard FORTRAN 77). - - Description: - - Returns `ABS(A)*S', where S is +1 if `B.GE.0', -1 otherwise. - - *Note Abs Intrinsic::, for the function that returns the magnitude - of a value. - --- 1881,1883 ---- diff -Nrc3pad gcc-3.0.4/gcc/f/g77.texi gcc-3.1/gcc/f/g77.texi *** gcc-3.0.4/gcc/f/g77.texi Tue Oct 23 00:23:35 2001 --- gcc-3.1/gcc/f/g77.texi Mon Apr 29 07:58:32 2002 *************** *** 2,9 **** @c %**start of header @setfilename g77.info ! @set last-update 2001-06-10 ! @set copyrights-g77 1995,1996,1997,1998,1999,2000,2001 @include root.texi --- 2,9 ---- @c %**start of header @setfilename g77.info ! @set last-update 2002-04-29 ! @set copyrights-g77 1995,1996,1997,1998,1999,2000,2001,2002 @include root.texi *************** *** 32,37 **** --- 32,56 ---- @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,94 **** @end direntry @ifset INTERNALS @ifset USING ! This file documents the use and the internals of the GNU Fortran (@code{g77}) compiler. ! It corresponds to the @value{which-g77} version of @code{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}. @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}. @end ifclear Published by the Free Software Foundation --- 96,113 ---- @end direntry @ifset INTERNALS @ifset USING ! This file documents the use and the internals of the GNU Fortran (@command{g77}) compiler. ! 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 (@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 (@command{g77}) compiler. ! It corresponds to the @value{which-g77} version of @command{g77}. @end ifclear Published by the Free Software Foundation *************** was contributed to Craig by David Ronis *** 142,148 **** @sp 3 @center Last updated @value{last-update} @sp 1 ! @center for version @value{version-g77} @page @vskip 0pt plus 1filll Copyright @copyright{} @value{copyrights-g77} Free Software Foundation, Inc. --- 161,167 ---- @sp 3 @center Last updated @value{last-update} @sp 1 ! @center for version @value{which-g77} @page @vskip 0pt plus 1filll Copyright @copyright{} @value{copyrights-g77} Free Software Foundation, Inc. *************** texts being (a) (see below), and with th *** 179,228 **** @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}, as well as its new features and incompatibilities, and how to report bugs. ! It corresponds to the @value{which-g77} version of @code{g77}. @end ifset @end ifset @ifclear INTERNALS ! This manual documents how to run and install @code{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}. @end ifclear @ifclear USING ! This manual documents how to port @code{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}. @end ifclear - @end ifinfo - @ifset DEVELOPMENT @emph{Warning:} This document is still under development, ! and might not accurately reflect the @code{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}. In particular, while this document is intended to apply to ! the @value{which-g77} version of @code{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. @end ifset @menu --- 198,243 ---- @contents @page @node Top, Copying,, (DIR) @top Introduction @cindex Introduction @ifset INTERNALS @ifset USING ! 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 @command{g77}. @end ifset @end ifset @ifclear INTERNALS ! 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 @command{g77}. @end ifclear @ifclear USING ! 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 @command{g77}. @end ifclear @ifset DEVELOPMENT @emph{Warning:} This document is still under development, ! 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} @command{g77}. In particular, while this document is intended to apply to ! 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 @command{g77} product in that version. @end ifset @menu *************** most consistent with the @code{g77} prod *** 235,252 **** * Funding GNU Fortran:: How to help assure continued work on GNU Fortran. @ifset USING * Getting Started:: Finding your way around this manual. ! * What is GNU Fortran?:: How @code{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}. * 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 Languages:: Languages other than Fortran. ! * Installation:: How to configure, compile and install GNU Fortran. ! * Debugging and Interfacing:: How @code{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. --- 250,266 ---- * Funding GNU Fortran:: How to help assure continued work on GNU Fortran. @ifset USING * Getting Started:: Finding your way around this manual. ! * 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 @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 @command{g77}. ! * Other Compilers:: Fortran compilers other than @command{g77}. * Other Languages:: Languages other than Fortran. ! * 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. *************** most consistent with the @code{g77} prod *** 254,265 **** * 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. @end ifset ! * M: Diagnostics. Diagnostics produced by @code{g77}. * Index:: Index of concepts and symbol names. @end menu --- 268,279 ---- * Service:: How to find suppliers of support for GNU Fortran. @end ifset @ifset INTERNALS ! * 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 @command{g77}. * Index:: Index of concepts and symbol names. @end menu *************** many people have helped create and impro *** 281,293 **** @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}, 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 free from @code{netlib} sites on the Internet. @item --- 295,308 ---- @item The packaging and compiler portions of GNU Fortran are based largely on the GNU CC compiler. ! @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 @command{f2c}, available for free from @code{netlib} sites on the Internet. @item *************** Cygnus Support and The Free Software Fou *** 295,304 **** significant money and/or equipment to Craig's efforts. @item ! The following individuals served as alpha testers prior to @code{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: @itemize @w{} @item --- 310,319 ---- significant money and/or equipment to Craig's efforts. @item ! 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 @command{g77}, plus offering plenty of helpful advice to Craig: @itemize @w{} @item *************** Ian Watson *** 334,347 **** @end itemize @item Scott Snyder (@email{snyder@@d0sgif.fnal.gov}) provided the patch to add rudimentary support for @code{INTEGER*1}, @code{INTEGER*2}, and @code{LOGICAL*1}. This inspired Craig to add further support, even though the resulting support ! would still be incomplete, because version 0.6 is still ! a ways off. @item David Ronis (@email{ronis@@onsager.chem.mcgill.ca}) inspired --- 349,365 ---- @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 @code{LOGICAL*1}. This inspired Craig to add further support, even though the resulting support ! would still be incomplete. @item David Ronis (@email{ronis@@onsager.chem.mcgill.ca}) inspired *************** old @file{g77-0.5.16/f/DOC} file. *** 352,367 **** @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}. So far, this has resulted in the three, somewhat ! experimental, options added by @code{g77} to the @code{gcc} compiler and its back end. (These, in turn, had 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}.) @item John Carr (@email{jfc@@mit.edu}) wrote the alias analysis improvements. --- 370,385 ---- @item Toon Moene (@email{toon@@moene.indiv.nluug.nl}) performed some analysis of generated code as part of an overall project ! 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 @command{g77} to the @command{gcc} compiler and its back end. (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. *************** Thanks to Mary Cortani and the staff at *** 371,377 **** (@email{support@@craftwork.com}) for all of their support. @item ! Many other individuals have helped debug, test, and improve @code{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 --- 389,395 ---- (@email{support@@craftwork.com}) for all of their support. @item ! 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 *************** The default is that people wish to remai *** 387,393 **** @cindex improvements, funding James Craig Burley (@email{@value{email-burley}}), the original author ! of 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 --- 405,411 ---- @cindex improvements, funding 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 @email{gnu@@gnu.org} for informati *** 406,417 **** 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 Getting Started --- 424,437 ---- Another important way to support work on GNU Fortran is to volunteer to help out. ! Email @email{@value{email-general}} to volunteer for this work. + 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{Funding,,Funding Free Software}, for more information. @node Getting Started *************** systems, you'll want to see @ref{What is *** 431,481 **** 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 should see @ref{G77 and GCC}. ! Everyone except experienced @code{g77} users should see @ref{Invoking G77}. ! If you're acquainted with previous versions of @code{g77}, you should see @ref{News,,News About GNU Fortran}. ! Further, if you've actually used previous versions of @code{g77}, especially if you've written or modified Fortran code to ! be compiled by previous versions of @code{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 reporting them, after reading the other material. ! If you need further help with @code{g77}, or with freely redistributable software in general, see @ref{Service}. ! If you would like to help the @code{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}. 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, and that you might be able to answer, see @ref{Open Questions}. --- 451,498 ---- 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 @command{gcc}, you should see @ref{G77 and GCC}. ! Everyone except experienced @command{g77} users should see @ref{Invoking 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 @command{g77}, especially if you've written or modified Fortran code to ! 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 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 @command{g77}---see @ref{Bugs}, for information on reporting them, after reading the other material. ! 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 @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 ! @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 @command{g77} have, and that you might be able to answer, see @ref{Open Questions}. *************** see @ref{Open Questions}. *** 485,496 **** @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.) ! @code{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 --- 502,513 ---- @cindex concepts, basic @cindex basic concepts ! 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.) ! @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 *************** These cases are usually identified in th *** 499,505 **** sections of this manual. @cindex compilers ! As compilers, @code{g77}, @code{gcc}, and @code{f77} share the following characteristics: @itemize @bullet --- 516,522 ---- sections of this manual. @cindex compilers ! As compilers, @command{g77}, @command{gcc}, and @command{f77} share the following characteristics: @itemize @bullet *************** to make big mistakes. *** 532,549 **** @cindex debugger @cindex bugs, finding ! @cindex @code{gdb}, command ! @cindex commands, @code{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}). @cindex libraries @cindex linking ! @cindex @code{ld} command ! @cindex commands, @code{ld} @item They locate and gather machine code already generated to perform actions requested by statements in --- 549,566 ---- @cindex debugger @cindex bugs, finding ! @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 @command{gdb}). @cindex libraries @cindex linking ! @cindex @command{ld} command ! @cindex commands, @command{ld} @item They locate and gather machine code already generated to perform actions requested by statements in *************** during the @dfn{link} phase of the compi *** 554,563 **** 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} commands, as with most compiler commands, automatically ! perform the linking step by calling on @code{ld} directly, unless asked to not do so by the user.) @cindex language, incorrect use of --- 571,580 ---- process. (Linking often is thought of as a separate step, because it can be directly invoked via the ! @command{ld} command. ! However, the @command{g77} and @command{gcc} commands, as with most compiler commands, automatically ! perform the linking step by calling on @command{ld} directly, unless asked to not do so by the user.) @cindex language, incorrect use of *************** the program (whether to diagnose questio *** 601,627 **** 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 @code{gcc}, command ! @cindex commands, @code{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 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 used to build the operating system kernel.) ! @cindex @code{g77}, command ! @cindex commands, @code{g77} @item ! The @code{g77} command itself, which also might be installed as the ! system's @code{f77} command. @cindex libg2c library @cindex libf2c library --- 618,644 ---- of the language), how much time to spend making the generated machine code run faster, and so on. ! @cindex components of @command{g77} ! @cindex @command{g77}, components of ! @command{g77} consists of several components: ! @cindex @command{gcc}, command ! @cindex commands, @command{gcc} @itemize @bullet @item ! 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 @command{gcc} considered more stable or that is used to build the operating system kernel.) ! @cindex @command{g77}, command ! @cindex commands, @command{g77} @item ! The @command{g77} command itself, which also might be installed as the ! system's @command{f77} command. @cindex libg2c library @cindex libf2c library *************** system's @code{f77} command. *** 632,644 **** 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} compilation phase. ! @code{libg2c} is just the unique name @code{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 that same name) on the system. --- 649,661 ---- 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 @command{g77} compilation phase. ! @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 @command{f2c} ! (or versions of @command{g77} that built @code{libf2c} under that same name) on the system. *************** The maintainer of @code{libf2c} currentl *** 648,655 **** @cindex @code{f771}, program @cindex programs, @code{f771} @cindex assembler ! @cindex @code{as} command ! @cindex commands, @code{as} @cindex assembly code @cindex code, assembly @item --- 665,672 ---- @cindex @code{f771}, program @cindex programs, @code{f771} @cindex assembler ! @cindex @command{as} command ! @cindex commands, @command{as} @cindex assembly code @cindex code, assembly @item *************** The compiler itself, internally named @c *** 658,675 **** 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}. @end itemize ! @code{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 preprocessing, compiling (in a variety of possible languages), assembling, and linking. @cindex driver, gcc command as ! @cindex @code{gcc}, command as driver @cindex executable file @cindex files, executable @cindex cc1 program --- 675,692 ---- 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 @command{as}. @end itemize ! @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, @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 @command{gcc}, command as driver @cindex executable file @cindex files, executable @cindex cc1 program *************** and linking. *** 678,722 **** @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 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 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}). @cindex @code{f771}, program @cindex programs, @code{f771} ! In a GNU Fortran installation, @code{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 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} 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}. @cindex printing version information @cindex version information, printing --- 695,739 ---- @cindex cpp program @cindex programs, cpp For example, the command @samp{gcc foo.c} @dfn{drives} the file ! @file{foo.c} through the preprocessor @command{cpp}, then the C compiler (internally named ! @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}, ! @command{gcc} would use the C++ compiler (named @code{cc1plus}). @cindex @code{f771}, program @cindex programs, @code{f771} ! 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 @command{gcc}, not recognizing Fortran source @cindex unrecognized file format @cindex file format not recognized ! 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}). ! @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 *************** way to display lots of version informati *** 725,737 **** 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 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. @cindex libf2c library @cindex libraries, libf2c --- 742,754 ---- 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 @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 @command{gcc} ! with which that version of @command{g77} was built. @cindex libf2c library @cindex libraries, libf2c *************** needed by Fortran programs while they ar *** 742,773 **** @cindex in-line code @cindex code, in-line ! For example, while code generated by @code{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 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 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}, 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}, @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 back end, gcc @cindex code generator One chunk is the so-called @dfn{GNU Back End}, or GBE, --- 759,790 ---- @cindex in-line code @cindex code, in-line ! 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 @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 @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 @command{f2c}, a free Fortran-to-C converter distributed by Bellcore (AT&T), plus @code{libU77}, provided by Dave Love, ! 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 @command{gcc}, back end @cindex back end, gcc @cindex code generator One chunk is the so-called @dfn{GNU Back End}, or GBE, *************** whenever the distinction is important. *** 780,787 **** @cindex GNU Fortran Front End (FFE) @cindex FFE ! @cindex @code{g77}, front end ! @cindex front end, @code{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 --- 797,804 ---- @cindex GNU Fortran Front End (FFE) @cindex FFE ! @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 *************** much of the behavior and many of the use *** 802,808 **** 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 of generated code (in terms of speed and size) is roughly similar (since that work is done by the shared GBE). --- 819,825 ---- compilers are similar. For example, diagnostics (error messages and warnings) are similar in appearance; command-line ! 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). *************** of generated code (in terms of speed and *** 811,3040 **** @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} command. ! In a non-Fortran installation, @code{gcc} recognizes C, C++, and Objective-C source files. ! In a GNU Fortran installation, @code{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}, for information on the way different languages are handled ! by the GNU CC compiler (@code{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 these tasks. It does this by analyzing the command line somewhat and changing it ! appropriately before submitting it to the @code{gcc} command. @cindex -v option ! @cindex @code{g77} options, -v @cindex options, -v ! Use the @samp{-v} option with @code{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 ! ! @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 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 @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 was incomplete up till ! version 0.5.26 of @code{g77}. ! In particular, names of variables and arrays in common blocks ! or that are storage-associated via @code{EQUIVALENCE} were ! 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. ! ! Because version 0.5.26 of @code{g77} enables full debug information ! of COMMON BLOCK and EQUIVALENCE items, this option has been disabled. ! ! @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. ! ! As of version 0.5.26 of @code{g77} this option has been disabled, as the ! compiler is now able to emit correct and complete debug information ! for COMMON BLOCK and EQUIVALENCE items. ! ! 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. This is believed to have ! happened as of version 0.5.26 of @code{g77}, so that this option has been ! disabled starting with this release. ! ! @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 news.texi --- 828,868 ---- @cindex compiling programs @cindex programs, compiling ! @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, @command{gcc} recognizes C, C++, and Objective-C source files. ! 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++; Objective-C; Ada; Fortran; ! or Java,gcc,Using the GNU Compiler Collection (GCC)}, for information on the way different languages are handled ! by the GNU CC compiler (@command{gcc}). ! @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 @command{gcc} command. @cindex -v option ! @cindex @command{g77} options, -v @cindex options, -v ! Use the @option{-v} option with @command{g77} to see what is going on---the first line of output is the invocation ! of the @command{gcc} command. ! @include invoke.texi @include news.texi *************** the network at *** 3056,3062 **** 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 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 --- 884,890 ---- 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 @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 *************** a few freely available electronic refere *** 3068,3077 **** @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}.) Part of what defines a particular implementation of a Fortran ! system, such as @code{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. --- 896,905 ---- @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 @command{g77}.) Part of what defines a particular implementation of a Fortran ! 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. *************** The GNU Fortran @emph{language} is descr *** 3080,3086 **** 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 that are not part of the GNU Fortran language. @emph{Note}: This portion of the documentation definitely needs a lot --- 908,914 ---- Much of the material is organized along the same lines as the ANSI FORTRAN 77 standard itself. ! @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 *************** The purpose of the following description *** 3116,3134 **** 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. 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}, for example. Such features would still be supported by ! @code{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}). ! For example, @code{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 --- 944,962 ---- language is to promote wide portability of GNU Fortran programs. GNU Fortran is an evolving language, due to the ! 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 @command{g77} ! when better ways to express these features are added to @command{g77}, for example. Such features would still be supported by ! @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} (@command{g77}). ! 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 *************** support for the GNU Fortran language, an *** 3139,3156 **** to do so. Currently, the GNU Fortran language is a fairly fuzzy object. ! It represents something of a cross between what @code{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 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}. 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 require one or more command-line options to continue supporting the feature. --- 967,984 ---- to do so. Currently, the GNU Fortran language is a fairly fuzzy object. ! 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 @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 @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 @command{g77} itself would likely be changed to require one or more command-line options to continue supporting the feature. *************** a balance between: *** 3160,3166 **** @itemize @bullet @item Serving as a mostly-upwards-compatible language from the ! de facto UNIX Fortran dialect as supported by @code{f77}. @item Offering new, well-designed language features. --- 988,994 ---- @itemize @bullet @item Serving as a mostly-upwards-compatible language from the ! de facto UNIX Fortran dialect as supported by @command{f77}. @item Offering new, well-designed language features. *************** sense that its users can use it in the s *** 3226,3235 **** 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 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 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. --- 1054,1063 ---- same behaviors from it, regardless of the kind of system they are using at any particular time. ! 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, @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. *************** The use of the ASCII backslash character *** 3238,3256 **** 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 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} (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}). @node Standard Support @section ANSI FORTRAN 77 Standard Support --- 1066,1084 ---- 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 @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 @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 @command{g77}). @node Standard Support @section ANSI FORTRAN 77 Standard Support *************** of @code{g77}). *** 3261,3267 **** @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 support are those that are probably rarely used in actual code, some of which are explicitly disallowed by the Fortran 90 standard. --- 1089,1095 ---- @cindex FORTRAN 77 compatibility GNU Fortran supports ANSI FORTRAN 77 with the following caveats. ! 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. *************** some of which are explicitly disallowed *** 3275,3281 **** @node No Passing External Assumed-length @subsection No Passing External Assumed-length ! @code{g77} disallows passing of an external procedure as an actual argument if the procedure's type is declared @code{CHARACTER*(*)}. For example: --- 1103,1109 ---- @node No Passing External Assumed-length @subsection No Passing External Assumed-length ! @command{g77} disallows passing of an external procedure as an actual argument if the procedure's type is declared @code{CHARACTER*(*)}. For example: *************** It isn't clear whether the standard cons *** 3292,3298 **** @node No Passing Dummy Assumed-length @subsection No Passing Dummy Assumed-length ! @code{g77} disallows passing of a dummy procedure as an actual argument if the procedure's type is declared @code{CHARACTER*(*)}. --- 1120,1126 ---- @node No Passing Dummy Assumed-length @subsection No Passing Dummy Assumed-length ! @command{g77} disallows passing of a dummy procedure as an actual argument if the procedure's type is declared @code{CHARACTER*(*)}. *************** It isn't clear whether the standard cons *** 3313,3319 **** 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}: @smallexample DATA ((A(I, I), I= 1, 10), I= 1, 10) /@dots{}/ --- 1141,1147 ---- 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 @command{g77}: @smallexample DATA ((A(I, I), I= 1, 10), I= 1, 10) /@dots{}/ *************** tries to use this unsupported construct. *** 3332,3338 **** 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}: @smallexample DATA (A, I= 1, 1) /1./ --- 1160,1166 ---- 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 @command{g77}: @smallexample DATA (A, I= 1, 1) /1./ *************** DATA (A, I= 1, 1) /1./ *** 3341,3347 **** @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 where this requirement is not met. Note that it is @emph{very} unlikely that any production Fortran code --- 1169,1175 ---- @noindent This also is disallowed by Fortran 90, as FORTRAN 77's more permissive requirements offer no additional capabilities. ! 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 *************** the ANSI FORTRAN 77 language in that it *** 3361,3372 **** 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 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} system, perform as described by the GNU Fortran language definition. Reasons for different behavior include, among others: --- 1189,1200 ---- conforming implementations to diagnose cases where programs do not conform to the language. ! 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 @command{g77} system, perform as described by the GNU Fortran language definition. Reasons for different behavior include, among others: *************** Excessive reliance on behaviors that are *** 3387,3407 **** Bugs in the program. @item ! Bug in @code{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 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 this language, the program should behave in a largely predictable way''. @node Notation Used --- 1215,1235 ---- Bugs in the program. @item ! 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 @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 @command{g77} system) that supports this language, the program should behave in a largely predictable way''. @node Notation Used *************** Some readers might think the @samp{CALL *** 3614,3620 **** only if @samp{VALIDP} is @code{.TRUE.}, while others might assume its execution is unconditional. ! (At present, @code{g77} does not diagnose code that violates this restriction.) @end itemize --- 1442,1448 ---- only if @samp{VALIDP} is @code{.TRUE.}, while others might assume its execution is unconditional. ! (At present, @command{g77} does not diagnose code that violates this restriction.) @end itemize *************** which is a literal GNU Fortran character *** 3949,3957 **** 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 in the current directory and/or directories specified ! via the @samp{-I} command-line option.) The effect of the @code{INCLUDE} directive is as if the included text directly replaced the directive in the source --- 1777,1785 ---- The meaning and interpretation of @var{filename} depends on the implementation, but typically is a filename. ! (@command{g77} treats it as a filename that it searches for in the current directory and/or directories specified ! 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 *************** This permits long names to be used for @ *** 4027,4033 **** (@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} @code{#} @emph{output} directives and @code{#line} @emph{input} directives.) --- 1855,1861 ---- (@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 @command{cpp} @code{#} @emph{output} directives and @code{#line} @emph{input} directives.) *************** notation for clarification, though the t *** 4060,4066 **** 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 have the same meanings on all systems, due to the way the Fortran 90 standard specifies these values are to be used. --- 1888,1894 ---- might not work the same way on all GNU Fortran implementations. Use of @samp{KIND=} makes this document more concise because ! @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. *************** operating system. *** 4081,4087 **** 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 ported compiler). GNU Fortran does not yet have adequate language constructs to permit use of @samp{KIND=} in a fashion that would make the --- 1909,1915 ---- 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 @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 *************** to specify the types in a fashion that m *** 4104,4110 **** 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}.) Further details regarding GNU Fortran data types and constants are provided below. --- 1932,1938 ---- to suit each particular implementation to which the program is ported. (These types generally won't need to be adjusted for ports of ! @command{g77}.) Further details regarding GNU Fortran data types and constants are provided below. *************** in any particular way---use explicit cod *** 4230,4238 **** 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)}) on all systems, for example, ! but not all implementations are required to do so, and @code{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}, --- 2058,2066 ---- Further, the GNU Fortran language requires no particular values for @var{n} to be supported by an implementation via the @samp{*@var{n}} notation. ! @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 @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}, *************** Programmers are discouraged from writing *** 4299,4305 **** 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. However, writing code that ports to existing FORTRAN 77 implementations depends on avoiding the @samp{KIND=} construct. --- 2127,2133 ---- into their code. Future versions of the GNU Fortran language will offer facilities that will make the writing of code portable ! 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. *************** be the same size and semantics of the C *** 4444,4451 **** @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 it defines, is in beta testing. Values not specified in the above list are reserved to --- 2272,2279 ---- @end table Note that these are @emph{proposed} correspondences and might change ! 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 *************** is 11, and so on.) *** 4543,4549 **** 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. Typeless constants have values that depend on the context in which they are used. --- 2371,2377 ---- 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 ! @option{-ftypeless-boz} option. Typeless constants have values that depend on the context in which they are used. *************** While this might work in some circumstan *** 4658,4664 **** 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}. Generally, @code{%LOC()} is safe when used as an argument to a procedure that makes use of the value of the corresponding --- 2486,2492 ---- 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 @command{g77}. Generally, @code{%LOC()} is safe when used as an argument to a procedure that makes use of the value of the corresponding *************** dummy argument only during its activatio *** 4666,4672 **** such use is restricted to referencing (reading) the value of the argument to @code{%LOC()}. ! @emph{Implementation Note:} Currently, @code{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. --- 2494,2500 ---- such use is restricted to referencing (reading) the value of the argument to @code{%LOC()}. ! @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. *************** in fact might compile to identical code. *** 4677,4683 **** 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 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 --- 2505,2511 ---- 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 @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 *************** necessarily compile to the same code as *** 4685,4691 **** using the same version or compiler. @xref{Debugging and Interfacing}, for detailed information on ! how this particular version of @code{g77} implements various constructs. @node Specification Statements --- 2513,2519 ---- using the same version or compiler. @xref{Debugging and Interfacing}, for detailed information on ! how this particular version of @command{g77} implements various constructs. @node Specification Statements *************** for the relevant aspects of GNU Fortran. *** 4709,4715 **** 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}. This follows Fortran 90 with the restriction that on @code{NAMELIST} input, subscripts must have the form --- 2537,2543 ---- 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 @command{f2c}. This follows Fortran 90 with the restriction that on @code{NAMELIST} input, subscripts must have the form *************** is labeled and a target of one or more l *** 4793,4799 **** 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. @end itemize @node Construct Names --- 2621,2627 ---- 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 @command{g77} as a dialect form. @end itemize @node Construct Names *************** use by the program as a whole, but are t *** 4974,4980 **** 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 all arguments either by reference or by descriptor. Thus, use of @code{%VAL()} tends to be restricted to cases --- 2802,2808 ---- portable, and should be thoroughly tested each time they are rebuilt using a new compiler or version of a compiler. ! @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 *************** than Fortran that supports call-by-value *** 4984,4990 **** @xref{Procedures,,Procedures (SUBROUTINE and FUNCTION)}, for detailed information on ! how this particular version of @code{g77} passes arguments to procedures. @node %REF() --- 2812,2818 ---- @xref{Procedures,,Procedures (SUBROUTINE and FUNCTION)}, for detailed information on ! how this particular version of @command{g77} passes arguments to procedures. @node %REF() *************** pass-by-reference semantics without pass *** 5021,5031 **** the argument, @var{arg}. (For example, a copy-in/copy-out implementation.) ! @emph{Implementation Note:} Currently, @code{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 not pass @code{CHARACTER} functions by reference. Thus, use of @code{%REF()} tends to be restricted to cases --- 2849,2859 ---- the argument, @var{arg}. (For example, a copy-in/copy-out implementation.) ! @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, @command{g77} might not pass @code{CHARACTER} functions by reference. Thus, use of @code{%REF()} tends to be restricted to cases *************** procedure accesses it via a means other *** 5034,5040 **** 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 to procedures. @node %DESCR() --- 2862,2868 ---- used for Fortran @code{CHARACTER} arguments. @xref{Procedures,,Procedures (SUBROUTINE and FUNCTION)}, for detailed information on ! how this particular version of @command{g77} passes arguments to procedures. @node %DESCR() *************** implementation choices are available tha *** 5071,5086 **** 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 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 all variables and arrays of type @code{CHARACTER} by descriptor. ! Future versions of, or dialects supported by, @code{g77} might pass @code{CHARACTER} functions by descriptor as well. Thus, use of @code{%DESCR()} tends to be restricted to cases --- 2899,2914 ---- 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 @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, @command{g77} passes all variables and arrays of type @code{CHARACTER} by descriptor. ! 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 *************** procedure accesses it via a means simila *** 5089,5095 **** 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 to procedures. @node Generics and Specifics --- 2917,2923 ---- used for Fortran @code{CHARACTER} arguments. @xref{Procedures,,Procedures (SUBROUTINE and FUNCTION)}, for detailed information on ! how this particular version of @command{g77} passes arguments to procedures. @node Generics and Specifics *************** above will confirm that: *** 5295,5308 **** @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}. @item ! IRIX 5.3 @code{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}. @end itemize If you get different results than the above for the stated --- 3123,3136 ---- @itemize @bullet @item Digital Semiconductor (``DEC'') Alpha OSF/1, HP-UX 10.0.1, AIX 3.2.5 ! @command{f77} compilers all implement @samp{Interp 1}. @item ! 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 @command{f77} compilers all implement @samp{Interp 3}. @end itemize If you get different results than the above for the stated *************** thus ``smooshed'' by FORTRAN 77 into a s *** 5362,5369 **** 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 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}))}. --- 3190,3197 ---- they happened to have the exact same effect in that language (due to having only one @code{COMPLEX} type). ! @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}))}. *************** Fortran 90 extends the @code{CMPLX()} in *** 5401,5407 **** 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. The GNU Fortran language provides a simple way to build a complex value out of two numbers, with the precise type of the value --- 3229,3235 ---- an extra argument used to specify the desired kind of complex result. However, this solution is somewhat awkward to use, and ! @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 *************** The GNU Fortran language includes the MI *** 5428,5437 **** @code{ISHFTC}, @code{MVBITS}, and @code{NOT}. @node f77/f2c Intrinsics ! @subsection @code{f77}/@code{f2c} Intrinsics The bit-manipulation intrinsics supported by traditional ! @code{f77} and by @code{f2c} are available in the GNU Fortran language. These include @code{AND}, @code{LSHIFT}, @code{OR}, @code{RSHIFT}, and @code{XOR}. --- 3256,3265 ---- @code{ISHFTC}, @code{MVBITS}, and @code{NOT}. @node f77/f2c Intrinsics ! @subsection @command{f77}/@command{f2c} Intrinsics The bit-manipulation intrinsics supported by traditional ! @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}. *************** the requirements of @code{INTENT(IN)} an *** 5511,5517 **** @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 did not exist, would leave this document in far worse shape!) @end ifinfo --- 3339,3345 ---- @ifinfo (Note that the empty lines appearing in the menu below are not intentional---they result from a bug in the ! GNU @command{makeinfo} program@dots{}a program that, if it did not exist, would leave this document in far worse shape!) @end ifinfo *************** the Fortran 90 features supported by the *** 5599,5609 **** 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} 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; see @ref{Fortran 90}. For information on the Fortran 90 intrinsics available, see @ref{Table of Intrinsic Functions}. --- 3427,3437 ---- they are documented elsewhere. @xref{Characters Lines Sequence,,@asis{Characters, Lines, and Execution Sequence}}, for information on additional fixed source form lexical issues. ! @cindex @option{-ffree-form} Further, the free source form is supported through the ! @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}. *************** CHARACTER (LEN=3) FOO *** 5678,5689 **** 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. Any of the features listed below might be disallowed by ! @code{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 in the future. @emph{Note: This portion of the documentation definitely needs a lot --- 3506,3517 ---- 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 ! @command{g77} supports in whole or in part. Any of the features listed below might be disallowed by ! @command{g77} unless some command-line option is specified. Currently, some of the features are accepted using the ! default invocation of @command{g77}, but that might change in the future. @emph{Note: This portion of the documentation definitely needs a lot *************** implementation choices made for the comp *** 5728,5739 **** 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 ! 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. @menu * Carriage Returns:: Carriage returns ignored. --- 3556,3564 ---- are explicitly left to the implementation by the published Fortran standards. GNU Fortran currently tries to be somewhat like a few popular compilers ! (@command{f2c}, Digital (``DEC'') Fortran, and so on). ! This section describes how @command{g77} interprets source lines. @menu * Carriage Returns:: Carriage returns ignored. *************** This section describes how @code{g77} in *** 5748,5754 **** @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 spaces outside character/Hollerith constants, and encodes them as @samp{\r} inside such constants. --- 3573,3579 ---- @cindex carriage returns Carriage returns (@samp{\r}) in source lines are ignored. ! 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. *************** inside such constants. *** 5760,5791 **** 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 @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 translates tabs to the appropriate number of spaces (a la the default ! for the UNIX @code{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. - Note that this default behavior probably will change for version 0.6, - when it will presumably be available via a command-line option. - The default as of version 0.6 is planned to be a ``pure visual'' - model, where tabs are immediately - converted to spaces and otherwise have no effect, so the way a typical - user sees source lines produces a consistent result no matter how the - spacing in those source lines is actually implemented via tabs, spaces, - and trailing tabs/spaces before newline. - Command-line options are likely to be added to specify whether all or - just-tabbed lines are to be extended to 132 or full input-line length, - and perhaps even an option will be added to specify the truncated-line - behavior to which some Digital compilers default (and which affects - the way continued character/Hollerith constants are interpreted). - @node Short Lines @subsection Short Lines @cindex short source lines --- 3585,3602 ---- 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 @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. ! @command{g77} effectively translates tabs to the appropriate number of spaces (a la the default ! 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. @node Short Lines @subsection Short Lines @cindex short source lines *************** interpretation than provided by some oth *** 5804,5816 **** 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 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. @node Long Lines @subsection Long Lines --- 3615,3627 ---- basis of Fortran and the way the Fortran standard expressed fixed source form). ! @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 @option{-ffixed-line-length-none}, for example. @node Long Lines @subsection Long Lines *************** like @samp{-ffixed-line-length-none}, fo *** 5821,5832 **** Source lines longer than the applicable length are truncated to that length. ! Currently, @code{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, which can be used to set the line length applicable to fixed-form source files. --- 3632,3643 ---- Source lines longer than the applicable length are truncated to that length. ! 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 @option{-ffixed-line-length-@var{n}} option, which can be used to set the line length applicable to fixed-form source files. *************** source files. *** 5836,5842 **** @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}. @node Trailing Comment @section Trailing Comment --- 3647,3653 ---- @cindex continuation line, ampersand A @samp{&} in column 1 of fixed-form source denotes an arbitrary-length ! continuation line, imitating the behavior of @command{f2c}. @node Trailing Comment @section Trailing Comment *************** continuation line, imitating the behavio *** 5847,5853 **** @cindex /* @cindex ! @cindex exclamation point ! @code{g77} supports use of @samp{/*} to start a trailing comment. In the GNU Fortran language, @samp{!} is used for this purpose. --- 3658,3664 ---- @cindex /* @cindex ! @cindex exclamation point ! @command{g77} supports use of @samp{/*} to start a trailing comment. In the GNU Fortran language, @samp{!} is used for this purpose. *************** When treated as a comment line, a line b *** 5879,5885 **** 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 lines as normal lines.) @node Dollar Signs --- 3690,3696 ---- When treated as a normal line, such a line is treated as if the first character was @key{SPC} (space). ! (Currently, @command{g77} provides no means for treating debug lines as normal lines.) @node Dollar Signs *************** lines as normal lines.) *** 5888,5894 **** @cindex $ Dollar signs (@samp{$}) are allowed in symbol names (after the first character) ! when the @samp{-fdollar-ok} option is specified. @node Case Sensitivity @section Case Sensitivity --- 3699,3705 ---- @cindex $ Dollar signs (@samp{$}) are allowed in symbol names (after the first character) ! when the @option{-fdollar-ok} option is specified. @node Case Sensitivity @section Case Sensitivity *************** Allow InitialCaps Only (see Note 2) *** 5974,5980 **** @end itemize @end itemize ! Note 1: @code{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). --- 3785,3791 ---- @end itemize @end itemize ! 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). *************** option names that set some of these comb *** 6113,6131 **** 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 combination. Number 43 is like Number 22 except all input must be lowercase. Use ! @samp{-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. Number 66 is the ``canonical'' UNIX model whereby all the source is translated to lowercase. ! Use @samp{-fcase-lower} to specify this combination. There are a few nearly useless combinations: --- 3924,3942 ---- 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 @option{-fcase-strict-upper} to specify this combination. Number 43 is like Number 22 except all input must be lowercase. Use ! @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 @option{-fcase-upper} to specify this combination. Number 66 is the ``canonical'' UNIX model whereby all the source is translated to lowercase. ! Use @option{-fcase-lower} to specify this combination. There are a few nearly useless combinations: *************** than comments). *** 6169,6175 **** @cindex VXT extensions @cindex extensions, VXT ! @code{g77} supports certain constructs that have different meanings in VXT Fortran than they do in the GNU Fortran language. --- 3980,3986 ---- @cindex VXT extensions @cindex extensions, VXT ! @command{g77} supports certain constructs that have different meanings in VXT Fortran than they do in the GNU Fortran language. *************** Corporation.) *** 6184,6193 **** 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} someday, and is considered a VXT Fortran feature. ! The @samp{-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. --- 3995,4004 ---- 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 @command{g77} someday, and is considered a VXT Fortran feature. ! 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. *************** meaning is to be assumed. *** 6205,6213 **** @cindex octal constants @cindex constants, octal ! @code{g77} treats double-quote (@samp{"}) as beginning an octal constant of @code{INTEGER(KIND=1)} type ! when the @samp{-fvxt} option is specified. The form of this octal constant is @example --- 4016,4024 ---- @cindex octal constants @cindex constants, octal ! @command{g77} treats double-quote (@samp{"}) as beginning an octal constant of @code{INTEGER(KIND=1)} type ! when the @option{-fvxt} option is specified. The form of this octal constant is @example *************** The form of this octal constant is *** 6218,6224 **** where @var{octal-digits} is a nonempty string of characters in the set @samp{01234567}. ! For example, the @samp{-fvxt} option permits this: @example PRINT *, "20 --- 4029,4035 ---- where @var{octal-digits} is a nonempty string of characters in the set @samp{01234567}. ! For example, the @option{-fvxt} option permits this: @example PRINT *, "20 *************** both constructs in the general case, sin *** 6246,6257 **** @cindex comment character @cindex characters, comment ! @code{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. The following program, when run, prints a message indicating whether it is interpreted according to GNU Fortran (and Fortran 90) --- 4057,4068 ---- @cindex comment character @cindex characters, comment ! @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 @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) *************** marks a line as a continuation line when *** 6277,6295 **** @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 GNU Fortran language. ! So, the purpose of @samp{-ff90} is not to specify whether @code{g77} is to gratuitously reject Fortran 90 constructs. ! The @samp{-pedantic} option specified with @samp{-fno-f90} is intended to do that, although its implementation is certainly incomplete at this point. ! When @samp{-ff90} is specified: @itemize @bullet @item --- 4088,4106 ---- @cindex Fortran 90, compatibility The GNU Fortran language includes a number of features that are ! 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 @option{-ff90} is not to specify whether @command{g77} is to gratuitously reject Fortran 90 constructs. ! The @option{-pedantic} option specified with @option{-fno-f90} is intended to do that, although its implementation is certainly incomplete at this point. ! When @option{-ff90} is specified: @itemize @bullet @item *************** is the same type as the real part of @va *** 6299,6305 **** 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. @end itemize @node Pedantic Compilation --- 4110,4116 ---- 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 @option{-ff90} is specified. @end itemize @node Pedantic Compilation *************** not of type @code{REAL(KIND=1)}, since @ *** 6307,6325 **** @cindex pedantic compilation @cindex compilation, pedantic ! The @samp{-fpedantic} command-line option specifies that @code{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}.) ! With @samp{-fno-f90} in force, ANSI FORTRAN 77 is used as the standard for conforming code. ! With @samp{-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: @itemize @bullet @item --- 4118,4136 ---- @cindex pedantic compilation @cindex compilation, pedantic ! 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 @command{g77} accepts that other compilers might not accept. ! (Note that the @option{-pedantic} and @option{-pedantic-errors} options ! always imply @option{-fpedantic}.) ! With @option{-fno-f90} in force, ANSI FORTRAN 77 is used as the standard for conforming code. ! With @option{-ff90} in force, Fortran 90 is used. ! The constructs for which @command{g77} issues diagnostics when @option{-fpedantic} ! and @option{-fno-f90} are in force are: @itemize @bullet @item *************** Specification statements following first *** 6433,6439 **** (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.) @item Semicolon as statement separator, as in: --- 4244,4250 ---- (In the GNU Fortran language, @samp{DATA I/1/} may be followed by @samp{INTEGER J}, but not @samp{INTEGER I}. ! The @option{-fpedantic} option disallows both of these.) @item Semicolon as statement separator, as in: *************** Expressions having two arithmetic operat *** 6459,6465 **** as @samp{X*-Y}. @end itemize ! If @samp{-fpedantic} is specified along with @samp{-ff90}, the following constructs result in diagnostics: @itemize @bullet --- 4270,4276 ---- as @samp{X*-Y}. @end itemize ! If @option{-fpedantic} is specified along with @option{-ff90}, the following constructs result in diagnostics: @itemize @bullet *************** that has an @code{INCLUDE} directive. *** 6474,6480 **** @cindex ugly features @cindex features, ugly ! The @samp{-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. --- 4285,4291 ---- @cindex ugly features @cindex features, ugly ! 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. *************** These are humorously referred to as ``di *** 6482,6494 **** 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}. @end menu @node Ugly Implicit Argument Conversion --- 4293,4305 ---- extensions that just plain look ugly in the harsh light of day. @menu ! * 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 *************** extensions that just plain look ugly in *** 6496,6502 **** @cindex Hollerith constants @cindex constants, Hollerith ! The @samp{-fno-ugly-args} option disables passing typeless and Hollerith constants as actual arguments in procedure invocations. For example: --- 4307,4313 ---- @cindex Hollerith constants @cindex constants, Hollerith ! The @option{-fno-ugly-args} option disables passing typeless and Hollerith constants as actual arguments in procedure invocations. For example: *************** Therefore, they are enabled by default. *** 6519,6525 **** @cindex assumed-size arrays @cindex DIMENSION X(1) ! The @samp{-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. --- 4330,4336 ---- @cindex assumed-size arrays @cindex DIMENSION X(1) ! 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. *************** arrays in the Fortran community. *** 6552,6558 **** 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 following program unit: @example --- 4363,4369 ---- 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, @option{-fugly-assumed} has no effect on the following program unit: @example *************** END *** 6570,6585 **** @cindex real part @cindex imaginary part ! The @samp{-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 the unconverted real and imaginary parts (respectively) of their argument. ! With @samp{-fno-f90} in effect, these intrinsics convert the real and imaginary parts to @code{REAL(KIND=1)}, and return the result of that conversion. --- 4381,4396 ---- @cindex real part @cindex imaginary part ! 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 @option{-ff90} in effect, these intrinsics return the unconverted real and imaginary parts (respectively) of their argument. ! 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. *************** REAL(REAL(Z)) *** 6595,6604 **** @noindent is permitted even when @samp{Z} is @code{COMPLEX(KIND=2)} ! and @samp{-fno-ugly-complex} is in effect, because the meaning is clear. ! @code{g77} enforces this restriction, unless @samp{-fugly-complex} is specified, in which case the appropriate interpretation is chosen and no diagnostic is issued. --- 4406,4415 ---- @noindent is permitted even when @samp{Z} is @code{COMPLEX(KIND=2)} ! and @option{-fno-ugly-complex} is in effect, because the meaning is clear. ! @command{g77} enforces this restriction, unless @option{-fugly-complex} is specified, in which case the appropriate interpretation is chosen and no diagnostic is issued. *************** without conversion. *** 6621,6627 **** @cindex null arguments @cindex arguments, null ! The @samp{-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 --- 4432,4438 ---- @cindex null arguments @cindex arguments, null ! 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 *************** that is syntactically distinct from pass *** 6642,6648 **** 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()} and @samp{I = JFUNC()} pass a single null argument, instead of passing no arguments as required by the Fortran 77 and 90 standards. --- 4453,4459 ---- That is, this construct changes the meaning of code that makes no use of the construct. ! 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. *************** called procedure does not expect. *** 6653,6668 **** 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} in force as compared to its behavior when compiled ! with the default, @samp{-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: @itemize @bullet @cindex Hollerith constants --- 4464,4479 ---- 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 @option{-fugly-comma} in force as compared to its behavior when compiled ! 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 @option{-fno-ugly-init} are: @itemize @bullet @cindex Hollerith constants *************** constants---that is, @code{DATA} and @co *** 6674,6680 **** type-declaration statements specifying initial values. Here are some sample initializations that are disabled by the ! @samp{-fno-ugly-init} option: @example PARAMETER (VAL='9A304FFE'X) --- 4485,4491 ---- type-declaration statements specifying initial values. Here are some sample initializations that are disabled by the ! @option{-fno-ugly-init} option: @example PARAMETER (VAL='9A304FFE'X) *************** In the same contexts as above, use of ch *** 6689,6695 **** numeric items and vice versa (one constant per item). Here are more sample initializations that are disabled by the ! @samp{-fno-ugly-init} option: @example INTEGER IA --- 4500,4506 ---- numeric items and vice versa (one constant per item). Here are more sample initializations that are disabled by the ! @option{-fno-ugly-init} option: @example INTEGER IA *************** are treated as assignments to known type *** 6707,6713 **** arguments, in these cases). Here are sample statements that are disabled by the ! @samp{-fno-ugly-init} option: @example IVAR = 4HABCD --- 4518,4524 ---- arguments, in these cases). Here are sample statements that are disabled by the ! @option{-fno-ugly-init} option: @example IVAR = 4HABCD *************** Therefore, they are enabled by default. *** 6724,6730 **** @node Ugly Integer Conversions @subsection Ugly Integer Conversions ! The constructs enabled via @samp{-fugly-logint} are: @itemize @bullet @item --- 4535,4541 ---- @node Ugly Integer Conversions @subsection Ugly Integer Conversions ! The constructs enabled via @option{-fugly-logint} are: @itemize @bullet @item *************** different encodings. *** 6759,6765 **** @cindex assigned labels @cindex pointers ! The @samp{-fugly-assign} option forces @code{g77} to use the same storage for assigned labels as it would for a normal assignment to the same variable. --- 4570,4576 ---- @cindex assigned labels @cindex pointers ! 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. *************** ASSIGN 10 TO I *** 6771,6777 **** @end example @noindent ! Normally, for portability and improved diagnostics, @code{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 --- 4582,4588 ---- @end example @noindent ! 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 *************** GOTO J *** 6790,6815 **** @end example @noindent ! Such code doesn't work under @code{g77} unless @samp{-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 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 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 to these variables, however. ! While @code{g77} currently chooses that implementation, it might be changed in the future. @xref{Assigned Statement Labels,,Assigned Statement Labels (ASSIGN and GOTO)}, --- 4601,4626 ---- @end example @noindent ! 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 @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 @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 @command{g77} actually writing valid pointers to these variables, however. ! While @command{g77} currently chooses that implementation, it might be changed in the future. @xref{Assigned Statement Labels,,Assigned Statement Labels (ASSIGN and GOTO)}, *************** for implementation details on assigned-s *** 6818,6827 **** @node Compiler @chapter The GNU Fortran Compiler ! The GNU Fortran compiler, @code{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 of dialect, and yet are not properly part of the GNU Fortran language itself. These are described below. --- 4629,4638 ---- @node Compiler @chapter The GNU Fortran Compiler ! 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 @command{g77} works are universal regardless of dialect, and yet are not properly part of the GNU Fortran language itself. These are described below. *************** of work!} *** 6842,6848 **** @cindex limits, compiler @cindex compiler limits ! @code{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. --- 4653,4659 ---- @cindex limits, compiler @cindex compiler limits ! @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. *************** symbols in a program, and so on. *** 6853,6865 **** @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 number of continuation lines. Also, some Fortran compilation systems have an option ! (such as @samp{-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 no equivalent options, since they do not impose arbitrary limits in these areas. --- 4664,4676 ---- @cindex limits, continuation lines @cindex limits, lengths of names For example, some other Fortran compiler have an option ! (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 @option{-Nx@var{x}}) to increase the limit on the number of external symbols. ! @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. *************** limits in these areas. *** 6869,6875 **** @cindex maximum number of dimensions @cindex limits, rank @cindex limits, array dimensions ! @code{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. --- 4680,4686 ---- @cindex maximum number of dimensions @cindex limits, rank @cindex limits, array dimensions ! @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. *************** This restriction might be lifted in a fu *** 6879,6890 **** @cindex wraparound As a portable Fortran implementation, ! @code{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. (For most users, the three systems are of the same type---combination of operating environment and hardware---often the same physical system.) --- 4690,4701 ---- @cindex wraparound As a portable Fortran implementation, ! @command{g77} offers its users direct access to, and otherwise depends upon, the underlying facilities of the system ! 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.) *************** These limits vary from system to system. *** 6896,6907 **** Even when such limits might be well beyond the possibility of being encountered on a particular system, ! the @code{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 does not generally offer a less-limiting environment by augmenting the underlying system's own environment. --- 4707,4718 ---- Even when such limits might be well beyond the possibility of being encountered on a particular system, ! the @command{g77} run-time environment has certain built-in limits, usually, but not always, stemming from intrinsics with inherently limited interfaces. ! Currently, the @command{g77} run-time environment does not generally offer a less-limiting environment by augmenting the underlying system's own environment. *************** about the run-time environment---assumpt *** 6912,6919 **** 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 do not yet offer comprehensive portable work-arounds for such limits, though programmers should be able to find their own in specific instances. --- 4723,4730 ---- prove to be false for some particular environments. The GNU Fortran language, ! 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. *************** on at least some systems: *** 6967,6973 **** @cindex Y2K compliance @cindex Year 2000 compliance ! While the @code{g77} compiler itself is believed to be Year-2000 (Y2K) compliant, some intrinsics are not, and, potentially, some underlying systems are not, --- 4778,4784 ---- @cindex Y2K compliance @cindex Year 2000 compliance ! 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, *************** on at least some systems: *** 7001,7007 **** @cindex G77_date_y2kbuggy_0 @cindex G77_vxtidate_y2kbuggy_0 The @code{libg2c} library ! shipped with any @code{g77} that warns about invocation of a non-Y2K-compliant intrinsic has renamed the @code{EXTERNAL} procedure names of those intrinsics. --- 4812,4818 ---- @cindex G77_date_y2kbuggy_0 @cindex G77_vxtidate_y2kbuggy_0 The @code{libg2c} library ! 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. *************** CALL VXTIDATE_Y2KBUG (MM, DD, YY) *** 7030,7043 **** (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}. 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} as, in C, @samp{date_(&str, 20);}. This, in turn, links to the @code{date_} procedure in the @code{libE77} portion of @code{libg2c}, --- 4841,4854 ---- (Note that the @code{EXTERNAL} statement is not actually required, since the modified names are not recognized as intrinsics ! 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 @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}, *************** which purposely calls a nonexistent proc *** 7045,7057 **** 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. 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} is skipped. In particular, it is probably better to use the --- 4856,4868 ---- 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 @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 @command{g77} is skipped. In particular, it is probably better to use the *************** In particular, it is probably better to *** 7059,7081 **** non-Y2K-compliant procedures, so anyone compiling the code can quickly notice the potential Y2K problems ! (via the warnings printing by @code{g77}) without having to even look at the code itself. If there are problems linking @code{libg2c} ! to code compiled by @code{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} is being linked to, or that the new library is being linked ! to code compiled by an older version of @code{g77}. That's because, as of the version that warns about non-Y2K-compliant intrinsic invocation, ! @code{g77} references the @code{libg2c} implementations of those intrinsics using new names, containing the string @samp{y2kbug}. --- 4870,4892 ---- non-Y2K-compliant procedures, so anyone compiling the code can quickly notice the potential Y2K problems ! (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 @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 @command{g77} is being linked to, or that the new library is being linked ! 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, ! @command{g77} references the @code{libg2c} implementations of those intrinsics using new names, containing the string @samp{y2kbug}. *************** to @code{G77_vxtidate_0}. *** 7093,7099 **** (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} and related products (including @code{libg2c}) and install them on all systems, --- 4904,4910 ---- (The new library calls it @code{G77_vxtidate_y2kbug_0}.) The proper fix for the above problems ! is to obtain the latest release of @command{g77} and related products (including @code{libg2c}) and install them on all systems, *************** In this case, however, it seems more imp *** 7106,7124 **** potential Y2K problems than to ease the transition of potentially non-Y2K-compliant code ! to new versions of @code{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 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 could be considered another limitation---it could use large temporary files---but that decision is left to the programmer as an implementation choice --- 4917,4935 ---- potential Y2K problems than to ease the transition of potentially non-Y2K-compliant code ! to new versions of @command{g77} and @code{libg2c}.) @node Array Size @subsection Array Size @cindex limits, array size @cindex array size ! 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 @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 *************** on the same system. *** 7143,7164 **** @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. @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 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}, support a @code{CHARACTER*@var{n}} declaration where @var{n} is greater than 2147483647. --- 4954,4975 ---- @cindex multi-dimension arrays @cindex arrays, dimensioning Whether large multiple-dimension arrays are reliably supported ! 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, @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 @command{g77}, support a @code{CHARACTER*@var{n}} declaration where @var{n} is greater than 2147483647. *************** element of the @code{COMPLEX(KIND=1)} va *** 7205,7211 **** 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 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)} --- 5016,5022 ---- placed on the implementation, nor is the relationship of storage sizes of these types to the @code{CHARACTER} type specified, by the standard.) ! @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)} *************** On some target architectures, using the *** 7215,7236 **** 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 situations when it encounters them.) ! @code{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. 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 components and the @code{libg2c} run-time library): @table @code --- 5026,5047 ---- 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 @command{gcc} and @command{g77}. ! @command{g77} warns about such situations when it encounters them.) ! @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 ! @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 @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 *************** an @code{int} or a @code{long int}. *** 7255,7261 **** @cindex LOGICAL(KIND=1) type @cindex types, LOGICAL(KIND=1) @item LOGICAL(KIND=1) ! Same @code{gcc} type as @code{INTEGER(KIND=1)}. @cindex INTEGER(KIND=2) type @cindex types, INTEGER(KIND=2) --- 5066,5072 ---- @cindex LOGICAL(KIND=1) type @cindex types, LOGICAL(KIND=1) @item LOGICAL(KIND=1) ! Same @command{gcc} type as @code{INTEGER(KIND=1)}. @cindex INTEGER(KIND=2) type @cindex types, INTEGER(KIND=2) *************** a @code{long int} or a @code{long long i *** 7267,7283 **** @cindex LOGICAL(KIND=2) type @cindex types, LOGICAL(KIND=2) @item LOGICAL(KIND=2) ! Same @code{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}. @cindex LOGICAL(KIND=3) type @cindex types, LOGICAL(KIND=3) @item LOGICAL(KIND=3) ! Same @code{gcc} type as @code{INTEGER(KIND=3)}. @cindex INTEGER(KIND=6) type @cindex types, INTEGER(KIND=6) --- 5078,5094 ---- @cindex LOGICAL(KIND=2) type @cindex types, LOGICAL(KIND=2) @item LOGICAL(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 @command{gcc} type as signed @code{char}. @cindex LOGICAL(KIND=3) type @cindex types, LOGICAL(KIND=3) @item LOGICAL(KIND=3) ! Same @command{gcc} type as @code{INTEGER(KIND=3)}. @cindex INTEGER(KIND=6) type @cindex types, INTEGER(KIND=6) *************** a @code{short}. *** 7289,7295 **** @cindex LOGICAL(KIND=6) type @cindex types, LOGICAL(KIND=6) @item LOGICAL(KIND=6) ! Same @code{gcc} type as @code{INTEGER(KIND=6)}. @cindex COMPLEX(KIND=1) type @cindex types, COMPLEX(KIND=1) --- 5100,5106 ---- @cindex LOGICAL(KIND=6) type @cindex types, LOGICAL(KIND=6) @item LOGICAL(KIND=6) ! Same @command{gcc} type as @code{INTEGER(KIND=6)}. @cindex COMPLEX(KIND=1) type @cindex types, COMPLEX(KIND=1) *************** Two @code{REAL(KIND=2)} scalars. *** 7305,7312 **** @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. @cindex DOUBLE PRECISION type @cindex types, DOUBLE PRECISION --- 5116,5123 ---- @cindex *@var{n} notation @item @var{numeric-type}*@var{n} (Where @var{numeric-type} is any type other than @code{CHARACTER}.) ! 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 *************** Same as @code{COMPLEX(KIND=2)}. *** 7320,7333 **** @end table Note that the above are proposed correspondences and might change ! in future versions of @code{g77}---avoid writing code depending on them. ! Other types supported by @code{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 now or probably will support in a future version. The rules for the @samp{@var{numeric-type}*@var{n}} notation apply to these types, --- 5131,5144 ---- @end table Note that the above are proposed correspondences and might change ! in future versions of @command{g77}---avoid writing code depending on them. ! 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 @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, *************** assigned in a way that encourages clarit *** 7339,7345 **** @cindex constants @cindex types, constants ! @code{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 --- 5150,5156 ---- @cindex constants @cindex types, constants ! @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 *************** This results in hard-to-find bugs, nonpo *** 7348,7356 **** 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 which a wider variety of typeless constants may be specified, and/or ! user-requested warnings indicating places where @code{g77} might differ from how other compilers assign types to constants. @xref{Context-Sensitive Constants}, for more information on this issue. --- 5159,5167 ---- code, and is not in the spirit (though it strictly follows the letter) of the 77 and 90 standards. ! @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 @command{g77} might differ from how other compilers assign types to constants. @xref{Context-Sensitive Constants}, for more information on this issue. *************** from how other compilers assign types to *** 7358,7364 **** @node Compiler Intrinsics @section Compiler Intrinsics ! @code{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 --- 5169,5175 ---- @node Compiler Intrinsics @section Compiler 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 *************** Others are implemented as part of the GN *** 7367,7373 **** 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}, a facility that is simply an extension of the intrinsic groups provided by the GNU Fortran language. --- 5178,5184 ---- yet others are provided for compatibility with other dialects of Fortran but are not part of the GNU Fortran language. ! 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. *************** EXTERNAL FOO *** 7438,7445 **** @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 recognize them as (disabled) intrinsics in intrinsic-like contexts. Hiding a group is like enabling it, but the intrinsic must be first --- 5249,5256 ---- @end example @noindent ! 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 *************** have intended side effects). *** 7478,7486 **** Intrinsics the GNU Fortran language supports that are extensions to the Fortran standards (77 and 90). ! @cindex @code{f2c} intrinsics group @item f2c ! Intrinsics supported by AT&T's @code{f2c} converter and/or @code{libf2c}. @cindex @code{f90} intrinsics group @item f90 --- 5289,5297 ---- Intrinsics the GNU Fortran language supports that are extensions to the Fortran standards (77 and 90). ! @cindex @command{f2c} intrinsics group @item f2c ! Intrinsics supported by AT&T's @command{f2c} converter and/or @code{libf2c}. @cindex @code{f90} intrinsics group @item f90 *************** VAX/VMS FORTRAN (current as of v4) intri *** 7504,7510 **** @cindex intrinsics, others @cindex other intrinsics ! @code{g77} supports intrinsics other than those in the GNU Fortran language proper. This set of intrinsics is described below. --- 5315,5321 ---- @cindex intrinsics, others @cindex other intrinsics ! @command{g77} supports intrinsics other than those in the GNU Fortran language proper. This set of intrinsics is described below. *************** like how to pass parameters, return argu *** 7559,7588 **** 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 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 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}.) 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} 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}, and some might offer such compatibility only when explicitly selected via a command-line option to the compiler. --- 5370,5399 ---- incorrect results produced by the program (and that assumes these errors are detected, which is not always the case). ! Normally, @command{g77} generates code that is object-compatible with code generated by a version of ! @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 @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 ! @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 @command{g77}, and some might offer such compatibility only when explicitly selected via a command-line option to the compiler. *************** of work!} *** 7595,7672 **** @end menu @node Dropping f2c Compatibility ! @section Dropping @code{f2c} Compatibility ! Specifying @samp{-fno-f2c} allows @code{g77} to generate, in some cases, faster code, by not needing to allow to the possibility ! of linking with code compiled by @code{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 (@code{float}, @code{__complex__ float}, @code{__complex__ double}, in many configurations). ! With @samp{-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 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}. 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 still being improved. ! However, specifying @samp{-fno-f2c} causes @code{g77} to generate code that will probably be incompatible with code ! generated by future versions of @code{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}. ! Therefore, if you are using @code{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 carefully watch for any announcements about changes to the ! @code{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}, 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 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} 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} ! On systems with Fortran compilers other than @code{f2c} and @code{g77}, ! code compiled by @code{g77} is not expected to work well with code compiled by the native compiler. ! (This is true for @code{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. Reasons for such incompatibilities include: --- 5406,5483 ---- @end menu @node Dropping f2c Compatibility ! @section Dropping @command{f2c} Compatibility ! 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 @command{f2c}. For example, this affects how @code{REAL(KIND=1)}, @code{COMPLEX(KIND=1)}, and @code{COMPLEX(KIND=2)} functions are called. ! 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 @option{-ff2c} in force, they are compiled differently (with perhaps slower run-time performance) ! 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 @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 @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 @option{-fno-f2c} causes @command{g77} to generate code that will probably be incompatible with code ! 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 @command{g77} ! or @command{f2c}, especially when using options such as @option{-fno-f2c}. ! 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 @command{g77}, ! you might want to stick with @command{f2c} compatibility for now, and carefully watch for any announcements about changes to the ! @command{f2c}/@code{libf2c} interface that might affect existing programs (thus requiring recompilation). ! 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 @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 @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 @command{f2c} ! 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 @command{f2c}-compiled objects as well.) Libraries compiled with the native compiler probably will have ! to be recompiled with @command{g77} to be used with @command{g77}-compiled code. Reasons for such incompatibilities include: *************** Reasons for such incompatibilities inclu *** 7675,7681 **** 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 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}, --- 5486,5492 ---- 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 @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}, *************** or @samp{_FOO_}, and so on. *** 7685,7691 **** 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 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 --- 5496,5502 ---- There might be subtle type mismatches which cause subroutine arguments and function return values to get corrupted. ! 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 *************** of work!} *** 7720,7727 **** @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}. It provides some advice about quick and simple techniques for linking Fortran and C (or C++), the most common requirement. --- 5531,5538 ---- @cindex C, linking with @cindex C++, linking with @cindex linking with C ! 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. *************** For the full story consult the *** 7729,7743 **** description of code generation. @xref{Debugging and Interfacing}. ! When linking Fortran and C, it's usually best to use @code{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. If you need to use another ! driver program (or @code{ld} directly), you can find out what linkage ! options @code{g77} passes by running @samp{g77 -v}. @menu * C Interfacing Tools:: --- 5540,5554 ---- description of code generation. @xref{Debugging and Interfacing}. ! 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 ! @option{-lstdc++}, @option{-lg++} or whatever. If you need to use another ! driver program (or @command{ld} directly), you can find out what linkage ! options @command{g77} passes by running @samp{g77 -v}. @menu * C Interfacing Tools:: *************** options @code{g77} passes by running @sa *** 7752,7814 **** @pindex f2c @cindex cfortran.h @cindex Netlib ! Even if you don't actually use it as a compiler, @code{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}}. ! To use @code{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. Something else that might be useful is @samp{cfortran.h} from @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. @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 called from Fortran---should @samp{#include } 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}. @node f2c Skeletons and Prototypes ! @subsection Generating Skeletons and Prototypes with @code{f2c} @pindex f2c @cindex -fno-second-underscore ! A simple and foolproof way to write @code{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} 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, 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 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} or @uref{ftp://ftp.dsm.fordham.edu} is probably better for this purpose.} If the Fortran code containing any --- 5563,5625 ---- @pindex f2c @cindex cfortran.h @cindex Netlib ! 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 @command{f2c}}. ! 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 ! @command{f2c} program on your path. Something else that might be useful is @samp{cfortran.h} from @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 @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 ! @command{g77} code---calling and/or being called from Fortran---should @samp{#include } 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 @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 @command{f2c} @pindex f2c @cindex -fno-second-underscore ! 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 @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 @command{f2c} conventions, such as not using @code{doublereal} as the return type of a @code{REAL} @code{FUNCTION}.) @pindex ftnchek ! @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 @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 *************** prototype information. *** 7819,7838 **** 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 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} 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 of this when generating skeletons or prototype files as above, and also avoid clashes with C++ reserved words in addition to those in C@. --- 5630,5649 ---- 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 @command{g77}) and C handle arrays. @node C++ Considerations @subsection C++ Considerations @cindex C++ ! @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. ! @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@. *************** it shouldn't be necessary *** 7848,7864 **** 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}, 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) 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} does the following, in order: @enumerate --- 5659,5675 ---- to use a Fortran main program unit to ensure the runtime---specifically the I/O system---is initialized. ! 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 @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 @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 *************** as all I/O functions in @code{libf2c} *** 7884,7890 **** are believed to call @code{f_init} automatically, if necessary. ! (A future version of @code{g77} might skip this explicit step, to speed up normal exit of a program.) @item --- 5695,5701 ---- are believed to call @code{f_init} automatically, if necessary. ! (A future version of @command{g77} might skip this explicit step, to speed up normal exit of a program.) @item *************** Calls @code{MAIN__} (with no arguments). *** 7916,7922 **** This starts executing the Fortran main program unit for the application. ! (Both @code{g77} and @code{f2c} currently compile a main program unit so that its global name is @code{MAIN__}.) @item --- 5727,5733 ---- This starts executing the Fortran main program unit for the application. ! (Both @command{g77} and @command{f2c} currently compile a main program unit so that its global name is @code{MAIN__}.) @item *************** in case @code{exit} doesn't exit on the *** 7936,7942 **** All of the above names are C @code{extern} names, i.e.@: not mangled. ! When using the @code{main} procedure provided by @code{g77} without a Fortran main program unit, you need to provide @code{MAIN__} as the entry point for your C code. --- 5747,5753 ---- All of the above names are C @code{extern} names, i.e.@: not mangled. ! 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. *************** as the entry point for your C code. *** 7944,7958 **** entry point with the rest of your program.) To provide your own @code{main} procedure ! in place of @code{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, this is usually straightforward. ! (Use the @samp{--verbose} option to see how and where ! @code{g77} implicitly adds @samp{-lg2c} in a command line that will link the program. ! Feel free to specify @samp{-lg2c} explicitly, as appropriate.) However, when providing your own @code{main}, --- 5755,5769 ---- entry point with the rest of your program.) To provide your own @code{main} procedure ! in place of @command{g77}'s, make sure you specify the object file defining that procedure ! @emph{before} @option{-lg2c} on the @command{g77} command line. ! Since the @option{-lg2c} option is implicitly provided, this is usually straightforward. ! (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 @option{-lg2c} explicitly, as appropriate.) However, when providing your own @code{main}, *************** some scratch files might be left lying a *** 7969,7992 **** 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 does not depend on a procedure named @code{MAIN__} actually ! being called prior to any other @code{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}, 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} uses to open-code (inline) references to @code{IARGC}. - @include g77install.texi - @node Debugging and Interfacing @chapter Debugging and Interfacing @cindex debugging --- 5780,5801 ---- and some existing files being written might be left with old data not properly truncated at the end. ! Note that, generally, the @command{g77} operating environment does not depend on a procedure named @code{MAIN__} actually ! 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 @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 @command{g77} uses to open-code (inline) references to @code{IARGC}. @node Debugging and Interfacing @chapter Debugging and Interfacing @cindex debugging *************** uses to open-code (inline) references to *** 7996,8002 **** @cindex f2c compatibility GNU Fortran currently generates code that is object-compatible with ! the @code{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 --- 5805,5811 ---- @cindex f2c compatibility GNU Fortran currently generates code that is object-compatible with ! 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 *************** differently (in terms of procedure names *** 8004,8050 **** 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 various constructs. ! Similarly, using a debugger to debug @code{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 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}). 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}. 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 writing (generally nonportable) interface code easier. Both of these ! activities require tracking changes in new version of @code{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 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. * 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}. * Run-time Library Errors:: Meanings of some @code{IOSTAT=} values. @end menu --- 5813,5859 ---- 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 @command{g77}-compiled code generally ! requires some understanding of the way @command{g77} compiles code for various constructs. ! 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 ! @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 @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 @command{g77}. This information is provided primarily to make debugging of code generated by this ! 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 @command{g77} as they are installed, because new versions can change the behaviors described in this section. @menu ! * 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 @command{g77} performs complex arithmetic. * Arrays:: Dealing with (possibly multi-dimensional) arrays. * Adjustable Arrays:: Special consideration for adjustable arrays. ! * 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 *************** described in this section. *** 8053,8074 **** @cindex PROGRAM statement @cindex statements, PROGRAM ! When @code{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 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 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 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 --- 5862,5883 ---- @cindex PROGRAM statement @cindex statements, PROGRAM ! 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, @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 @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 @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 *************** Fortran code. *** 8101,8107 **** 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 @example tbreak MAIN__ --- 5910,5916 ---- 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 @command{gdb} command @example tbreak MAIN__ *************** tbreak MAIN__ *** 8109,8115 **** @noindent to the file @file{.gdbinit} in the directory in which you're debugging ! (using @code{gdb}). After doing this, the debugger will see the current execution point of the program as at the beginning of the main program --- 5918,5924 ---- @noindent to the file @file{.gdbinit} in the directory in which you're debugging ! (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 *************** that should work fine. *** 8129,8142 **** @cindex statements, FUNCTION @cindex signature of procedures ! Currently, @code{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. The first argument occupies the expected position in the argument list and has the user-specified name. --- 5938,5951 ---- @cindex statements, FUNCTION @cindex signature of procedures ! 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 ! @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. *************** When more than one @code{CHARACTER} argu *** 8165,8173 **** 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} does not provide the trailing null bytes on the constant ! strings (@code{f2c} does provide them, but they are unnecessary in a Fortran environment, and you should not expect them to be there). --- 5974,5982 ---- 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 @command{g77} does not provide the trailing null bytes on the constant ! strings (@command{f2c} does provide them, but they are unnecessary in a Fortran environment, and you should not expect them to be there). *************** symptoms might appear. *** 8206,8212 **** @cindex statements, RETURN @cindex return type of functions ! @code{g77} handles in a special way functions that return the following types: @itemize @bullet --- 6015,6021 ---- @cindex statements, RETURN @cindex return type of functions ! @command{g77} handles in a special way functions that return the following types: @itemize @bullet *************** types: *** 8218,8224 **** @code{REAL(KIND=1)} @end itemize ! For @code{CHARACTER}, @code{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, --- 6027,6033 ---- @code{REAL(KIND=1)} @end itemize ! 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, *************** For @code{CHARACTER*(*)}, the called fun *** 8229,8250 **** 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 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 @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. ! For @code{REAL(KIND=1)}, when @samp{-ff2c} is in force, @code{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)} functions return @code{float}. @node Names --- 6038,6059 ---- to determine the size of the array that @samp{__g77_result} points to; otherwise, it ignores that argument. ! 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 @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 @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 @option{-ff2c} is in force, @command{g77} implements a function that actually returns @code{REAL(KIND=2)} (typically C's @code{double} type). ! When @option{-fno-f2c} is in force, @code{REAL(KIND=1)} functions return @code{float}. @node Names *************** as how casing is handled. *** 8259,8272 **** 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}. 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 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 --- 6068,6081 ---- External names---names of entities that are public, or ``accessible'', to all modules in a program---normally have an underscore (@samp{_}) ! 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 @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 *************** might be intentional. *** 8276,8289 **** @cindex options, -fno-underscoring @cindex -fno-second-underscore option @cindex options, -fno-underscoring ! When @samp{-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. (This second underscore can be disabled via the ! @samp{-fno-second-underscore} option.) ! External names are changed this way for @code{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 there's no compatibility issue there except for user expectations while debugging. --- 6085,6098 ---- @cindex options, -fno-underscoring @cindex -fno-second-underscore option @cindex options, -fno-underscoring ! When @option{-funderscoring} is in force, any name (external or local) that already has at least one underscore in it is ! implemented by @command{g77} by appending two underscores. (This second underscore can be disabled via the ! @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---@command{f2c} does the same thing, but there's no compatibility issue there except for user expectations while debugging. *************** Max_Cost = 0 *** 8298,8310 **** 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 write scripts depending on this behavior! ! Also, consider experimenting with the @samp{-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 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. --- 6107,6119 ---- 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 @command{g77} in this regard in the future---don't write scripts depending on this behavior! ! Also, consider experimenting with the @option{-fno-underscoring} option to try out debugging without having to massage names by hand like this.) ! @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. *************** This would be the name to enter when usi *** 8324,8330 **** access the variable. However, depending on the command-line options specified, the ! name implemented by @code{g77} might instead be @samp{FOO} or even @samp{Foo}, thus affecting how debugging is done. Also: --- 6133,6139 ---- access the variable. However, depending on the command-line options specified, the ! name implemented by @command{g77} might instead be @samp{FOO} or even @samp{Foo}, thus affecting how debugging is done. Also: *************** void foo_() *** 8342,8350 **** @end example @noindent ! However, @code{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 could be used to inhibit the appending of the underscore to the name. @node Common Blocks --- 6151,6159 ---- @end example @noindent ! 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 @option{-fno-underscoring} option could be used to inhibit the appending of the underscore to the name. @node Common Blocks *************** could be used to inhibit the appending o *** 8353,8409 **** @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.) ! ! Version 0.5.26 of @code{g77} is believed to provide correct and ! complete debug information for COMMON BLOCK and EQUIVALENCE items - ! hence the @samp{-fdebug-kludge} option has been disabled. ! ! @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.) @node Local Equivalence Areas @section Local Equivalence Areas (EQUIVALENCE) --- 6162,6170 ---- @cindex @code{COMMON} statement @cindex statements, @code{COMMON} ! @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) *************** types.) *** 8412,8467 **** @cindex EQUIVALENCE statement @cindex statements, EQUIVALENCE ! @code{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 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} 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.) --- 6173,6191 ---- @cindex EQUIVALENCE statement @cindex statements, EQUIVALENCE ! @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. ! (@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}, @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.) *************** previous method in the documentation.) *** 8473,8500 **** @cindex COMPLEX statement @cindex statements, COMPLEX ! As of 0.5.20, @code{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 internal construct similar to C's @code{struct}, at least ! as seen by the @code{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 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 either @samp{set lang fortran} or @samp{set lang auto}.) @node Arrays --- 6197,6224 ---- @cindex COMPLEX statement @cindex statements, COMPLEX ! 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, @command{g77} implements these types using an internal construct similar to C's @code{struct}, at least ! 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 ! @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 @command{gdb}, this is accomplished via @samp{set lang c} and either @samp{set lang fortran} or @samp{set lang auto}.) @node Arrays *************** So the C equivalent in this case would b *** 8552,8558 **** 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} 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 --- 6276,6282 ---- 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 @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 *************** You know, maybe nobody really needs to u *** 8593,8599 **** Adjustable and automatic arrays in Fortran require the implementation (in this ! case, the @code{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 --- 6317,6323 ---- Adjustable and automatic arrays in Fortran require the implementation (in this ! 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 *************** like: *** 8625,8631 **** 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 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 --- 6349,6355 ---- 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, @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 *************** Since the user program cannot (legitimat *** 8641,8654 **** 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 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 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. --- 6365,6378 ---- of the temporary during execution of the procedure, the size of the array remains constant during each invocation. ! 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 @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. *************** callee expects adjustable arrays, even i *** 8658,8664 **** 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 change in the future!) @node Alternate Entry Points --- 6382,6388 ---- 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 @command{g77} implements these things might change in the future!) @node Alternate Entry Points *************** change in the future!) *** 8670,8689 **** 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 having at least one @code{ENTRY} statement that is almost identical to the ! approach used by @code{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 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 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 --- 6394,6413 ---- The GBE does not understand the general concept of alternate entry points as Fortran provides via the ENTRY statement. ! @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 @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 @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. ! @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 *************** for the @samp{X} and @samp{Y} procedures *** 8709,8715 **** 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 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). --- 6433,6439 ---- for the second case, an extra internal procedure is compiled. For every Fortran procedure with at least one @code{ENTRY} ! 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). *************** for the primary entry point plus for eve *** 8722,8728 **** The extra procedure has some other interesting characteristics. ! The argument list for this procedure is invented by @code{g77}. It contains a single integer argument named @samp{__g77_which_entrypoint}, passed by value (as in Fortran's @samp{%VAL()} intrinsic), specifying the --- 6446,6452 ---- The extra procedure has some other interesting characteristics. ! 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 *************** first entry point (the first @code{ENTRY *** 8731,8737 **** 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, 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 --- 6455,6461 ---- the second entry point, and so on. It also contains, for functions returning @code{CHARACTER} and ! (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 *************** for @code{COMPLEX} functions, it is the *** 8743,8749 **** 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}). For @code{CHARACTER} functions, the @samp{__g77_result} argument is followed by yet another argument named @samp{__g77_length} that, at run time, --- 6467,6473 ---- 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 @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, *************** statement: *** 8775,8781 **** @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 written by the user.) It is this code that, when the procedure is called, picks which --- 6499,6505 ---- @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 @command{g77} internals, not code to be written by the user.) It is this code that, when the procedure is called, picks which *************** for an equivalent single-entry function. *** 8831,8837 **** @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 the C @code{int} type. The actual alternate-return arguments are omitted from the calling sequence. Instead, the caller uses --- 6555,6561 ---- @cindex statements, RETURN Subroutines with alternate returns (e.g. @samp{SUBROUTINE X(*)} and ! @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 *************** in C, and @samp{RETURN} by itself is @sa *** 8854,8867 **** @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, the assigned-@code{GOTO} and assigned-@code{FORMAT}-I/O statements) ! is wider (bitwise) than an @code{INTEGER(KIND=1)}, @code{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 @example I = 10 --- 6578,6591 ---- @cindex statements, GOTO For portability to machines where a pointer (such as to a label, ! 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)}, @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 @command{g77} implements @example I = 10 *************** ASSIGN 10 TO I *** 8877,8900 **** @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 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 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. 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 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 assigned-label uses of a variable. @node Run-time Library Errors --- 6601,6624 ---- @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; @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. ! @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 @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 @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 @command{g77} to use the same storage for both normal and assigned-label uses of a variable. @node Run-time Library Errors *************** so you can more easily change the actual *** 8919,8925 **** 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. @smallexample 100: "error in format" --- 6643,6649 ---- The information below is culled from the definition of @code{F_err} in @file{f/runtime/libI77/err.c} in the ! @command{g77} source tree. @smallexample 100: "error in format" *************** of @code{F_err} in @file{f/runtime/libI7 *** 8964,8977 **** @cindex writing code @cindex code, writing ! Most users of @code{g77} can be divided into two camps: @itemize @bullet @item ! Those writing new Fortran code to be compiled by @code{g77}. @item ! Those using @code{g77} to compile existing, ``legacy'' code. @end itemize Users writing new code generally understand most of the necessary --- 6688,6701 ---- @cindex writing code @cindex code, writing ! Most users of @command{g77} can be divided into two camps: @itemize @bullet @item ! Those writing new Fortran code to be compiled by @command{g77}. @item ! Those using @command{g77} to compile existing, ``legacy'' code. @end itemize Users writing new code generally understand most of the necessary *************** Users dealing with ``legacy'' code somet *** 8983,8997 **** 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}). 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. * 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. --- 6707,6721 ---- 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 @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 @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. *************** new code as well. *** 9001,9011 **** @node Advantages Over f2c @section Advantages Over f2c ! Without @code{f2c}, @code{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. This section gives some basic answers to these questions, though it is not intended to be comprehensive. --- 6725,6735 ---- @node Advantages Over f2c @section Advantages Over f2c ! 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 @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. *************** is not intended to be comprehensive. *** 9023,9029 **** @node Language Extensions @subsection Language Extensions ! @code{g77} offers several extensions to FORTRAN 77 language that @code{f2c} doesn't: @itemize @bullet --- 6747,6753 ---- @node Language Extensions @subsection Language Extensions ! @command{g77} offers several extensions to FORTRAN 77 language that @command{f2c} doesn't: @itemize @bullet *************** with routines known to compiler as intri *** 9060,9071 **** to change the interfaces used by Fortran routines) @end itemize ! @code{g77} also implements iterative @code{DO} loops so that they work even in the presence of certain ``extreme'' inputs, ! unlike @code{f2c}. @xref{Loops}. ! However, @code{f2c} offers a few that @code{g77} doesn't, such as: @itemize @bullet @item --- 6784,6795 ---- to change the interfaces used by Fortran routines) @end itemize ! @command{g77} also implements iterative @code{DO} loops so that they work even in the presence of certain ``extreme'' inputs, ! unlike @command{f2c}. @xref{Loops}. ! However, @command{f2c} offers a few that @command{g77} doesn't, such as: @itemize @bullet @item *************** Array bounds expressions (such as @samp{ *** 9078,9091 **** @code{AUTOMATIC} statement @end itemize ! It is expected that @code{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 @samp{FORMAT(XZFAJG10324)}, leaving that to be diagnosed, at run time, by the @code{libf2c} run-time library. --- 6802,6815 ---- @code{AUTOMATIC} statement @end itemize ! 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 ! @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. *************** the @code{libf2c} run-time library. *** 9093,9099 **** @node Compiler Options @subsection Compiler Options ! @code{g77} offers compiler options that @code{f2c} doesn't, most of which are designed to more easily accommodate legacy code: --- 6817,6823 ---- @node Compiler Options @subsection Compiler Options ! @command{g77} offers compiler options that @command{f2c} doesn't, most of which are designed to more easily accommodate legacy code: *************** One to specify the the source code is wr *** 9126,9134 **** Fortran-90-style free-form @end itemize ! However, @code{f2c} offers a few that @code{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 missing options pertinent to being a Fortran compiler at some time in the future. --- 6850,6858 ---- Fortran-90-style free-form @end itemize ! 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 @command{g77} will offer all of the missing options pertinent to being a Fortran compiler at some time in the future. *************** at some time in the future. *** 9136,9207 **** @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}. ! However, due to @code{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} is noticeably faster compiling many Fortran source files than using ! @code{f2c} in conjunction with @code{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 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 to the GBE. ! For example, @code{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 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}. ! Version 0.5.18 of @code{g77} offered default ! settings and options, via patches to the @code{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}. ! Version 0.5.20 of @code{g77} offers further performance improvements, at least one of which (alias analysis) is ! not generally applicable to @code{f2c} (though @code{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}). @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}. ! 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 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 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 for @code{ENTRY}-laden procedures---in this case, because the back end doesn't yet support multiple entry points. --- 6860,6931 ---- @subsection Compiler Speed Saving the steps of writing and then rereading C code is a big reason ! 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 @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, @command{g77} is noticeably faster compiling many Fortran source files than using ! @command{f2c} in conjunction with @command{gcc}. @node Program Speed @subsection Program Speed ! @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 @command{g77} can gather, preserve, and transmit that information directly to the GBE. ! For example, @command{g77} implements @code{ASSIGN} and assigned @code{GOTO} using direct assignment of pointers to labels and direct ! 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 @command{f2c} plus @command{gcc} ! can generate code that is faster than @command{g77}. ! 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 @command{f2c} and then compiled ! by @command{g77}'s version of @command{gcc}. ! Version 0.5.20 of @command{g77} offers further performance improvements, at least one of which (alias analysis) is ! not generally applicable to @command{f2c} (though @command{f2c} could presumably be changed to also take advantage of ! 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 @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 @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, @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, @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. *************** EQUIVALENCE (B, C) *** 9213,9224 **** @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} 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 take advantage of this facility at all---it doesn't emit any debugging information for @code{COMMON} and @code{EQUIVALENCE} areas, other than information --- 6937,6948 ---- @end smallexample @noindent ! 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, @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 *************** on the array of @code{char} it creates ( *** 9226,9247 **** 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} 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. In some cases, it can actually ! be an advantage that @code{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 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) to get things working properly. @node Character and Hollerith Constants --- 6950,6971 ---- of local @code{EQUIVALENCE}, names) for each such area. Yet another example is arrays. ! @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 @command{g77} can vary widely. In some cases, it can actually ! be an advantage that @command{f2c} converts everything to widely supported C semantics. ! 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 @command{gcc}; @command{gdb}; and so on) to get things working properly. @node Character and Hollerith Constants *************** to get things working properly. *** 9255,9273 **** @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 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. 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}. (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.) --- 6979,6997 ---- @cindex zero byte, trailing To avoid the extensive hassle that would be needed to avoid this, ! @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. ! @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 @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.) *************** when they are put into libraries, give e *** 9286,9314 **** @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 @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} 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 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 shipped. ! @code{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 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} will result in an unresolved reference when linked. If you do the opposite, then @samp{FOO} might not be linked in under various --- 7010,7038 ---- @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}. ! @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, @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, @command{g77} outputs in the data section a static pointer to the external name @samp{FOO}.) ! The implementation @command{g77} currently uses to make this work is ! one of the few things not compatible with @command{f2c} as currently shipped. ! @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}, ! @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 @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 *************** using a ``clever'' linker---so clever, i *** 9317,9323 **** 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, 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} --- 7041,7047 ---- 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 @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} *************** END *** 9363,9369 **** @end smallexample @noindent ! That way, @samp{CURX} is compiled by @code{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. --- 7087,7093 ---- @end smallexample @noindent ! 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. *************** END DO *** 9446,9452 **** @noindent The simple @code{DO} construct and the @code{EXIT} statement (used to leave the innermost loop) ! are F90 features that @code{g77} supports. Some Fortran compilers have buggy implementations of @code{DO}, in that they don't follow the standard. --- 7170,7176 ---- @noindent The simple @code{DO} construct and the @code{EXIT} statement (used to leave the innermost loop) ! are F90 features that @command{g77} supports. Some Fortran compilers have buggy implementations of @code{DO}, in that they don't follow the standard. *************** DO I = 2147483600, 2147483647 *** 9468,9474 **** @noindent A loop started by the above statement will work as implemented ! by @code{g77}, but the use, by some compilers, of a more C-like implementation akin to @smallexample --- 7192,7198 ---- @noindent A loop started by the above statement will work as implemented ! by @command{g77}, but the use, by some compilers, of a more C-like implementation akin to @smallexample *************** Consider the following program: *** 9501,9507 **** 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: @smallexample .100000001 --- 7225,7231 ---- 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 @command{g77} on a GNU/Linux ix86 system: @smallexample .100000001 *************** LAST = .310000002 *** 9518,9531 **** 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 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 faithfully following the Fortran standard, and the result is not what the author of the sample program above apparently expected. --- 7242,7255 ---- 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 @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, @command{g77} is faithfully following the Fortran standard, and the result is not what the author of the sample program above apparently expected. *************** for example.) *** 9536,9545 **** 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 with @code{REAL} iteration variables is not recommended. ! Such use can be caught by specifying @samp{-Wsurprising}. @xref{Warning Options}, for more information on this option. --- 7260,7269 ---- 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 @command{g77}, use of @code{DO} loops with @code{REAL} iteration variables is not recommended. ! Such use can be caught by specifying @option{-Wsurprising}. @xref{Warning Options}, for more information on this option. *************** Getting Fortran programs to work in the *** 9550,9556 **** 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 tracking down bugs in such programs. @menu --- 7274,7280 ---- quite a challenge---even when the programs already work on other systems, or when using other compilers. ! @command{g77} offers some facilities that might be useful for tracking down bugs in such programs. @menu *************** is likely to assume it returns *** 9594,9600 **** @code{INTEGER}, or some other type, leading to invalid results or even program crashes. ! The @samp{-Wimplicit} option might catch failures to properly specify the types of variables, arrays, and functions in the code. --- 7318,7324 ---- @code{INTEGER}, or some other type, leading to invalid results or even program crashes. ! The @option{-Wimplicit} option might catch failures to properly specify the types of variables, arrays, and functions in the code. *************** This is why so many experienced Fortran *** 9606,9615 **** 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 FORTRAN 77 compilers.) ! Note that @samp{-Wimplicit} catches only implicit typing of @emph{names}. It does not catch implicit typing of expressions such as @samp{X**(2/3)}. --- 7330,7339 ---- recommend widespread use of the @code{IMPLICIT NONE} statement, despite it not being standard FORTRAN 77, to completely turn off implicit typing. ! (@command{g77} supports @code{IMPLICIT NONE}, as do almost all FORTRAN 77 compilers.) ! 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)}. *************** As a result, many of these programs depe *** 9632,9649 **** 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, 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 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}. @node Variables Assumed To Be Saved @subsection Variables Assumed To Be Saved --- 7356,7373 ---- inadvertently, on this behavior, though to do so violates the Fortran standards. ! 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 ! @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 @option{-O -Wuninitialized} ! options using @command{g77}. @node Variables Assumed To Be Saved @subsection Variables Assumed To Be Saved *************** Depending on variables and arrays to ret *** 9667,9690 **** 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 relevant (local) variables and arrays by using the ! @samp{-fno-automatic} option. Note that a program that works better when compiled with the ! @samp{-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}. @node Unwanted Variables @subsection Unwanted Variables ! The @samp{-Wunused} option can find bugs involving implicit typing, sometimes ! more easily than using @samp{-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 --- 7391,7414 ---- procedure calls without using @code{SAVE} to require it violates the Fortran standards. ! You can ask @command{g77} to assume @code{SAVE} is specified for all relevant (local) variables and arrays by using the ! @option{-fno-automatic} option. Note that a program that works better when compiled with the ! @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 @command{g77}. @node Unwanted Variables @subsection Unwanted Variables ! The @option{-Wunused} option can find bugs involving implicit typing, sometimes ! 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 *************** to a procedure might indicate a bug. *** 9709,9731 **** Compile with @samp{-W -Wunused} option to catch cases of unused arguments. ! Note that @samp{-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 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}. 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 other compilers are more likely to follow the programmer's expectations, might be worthwhile, especially if such changes make the program work better. --- 7433,7455 ---- Compile with @samp{-W -Wunused} option to catch cases of unused arguments. ! 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 @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 @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 @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. *************** make the program work better. *** 9749,9781 **** @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, 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. These options control the assumptions regarding aliasing (overlapping) of writes and reads to main memory (core) made ! by the @code{gcc} back end. The information below still is useful, but applies to ! only those versions of @code{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}. ! The default for Fortran code is @samp{-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.) ! 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). --- 7473,7505 ---- @cindex scheduling of reads and writes @cindex reads and writes, scheduling ! The @option{-falias-check}, @option{-fargument-alias}, ! @option{-fargument-noalias}, ! and @option{-fno-argument-noalias-global} options, introduced in version 0.5.20 and ! @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 control the assumptions regarding aliasing (overlapping) of writes and reads to main memory (core) made ! by the @command{gcc} back end. The information below still is useful, but applies to ! 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 @option{-O} ! (specifying any level other than @option{-O0}) ! or with @option{-falias-check}. ! The default for Fortran code is @option{-fargument-noalias-global}. (The default for C code and code written in other C-based languages ! 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 @option{-fforce-addr} in effect can produce more optimal code when the default aliasing options are in effect (and when optimization is enabled). *************** set up this kind of aliasing. *** 9789,9795 **** (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}, 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 --- 7513,7519 ---- (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 @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 *************** order in which the local copies are upda *** 9800,9816 **** among other things.) To test this hypothesis, try compiling your program with ! the @samp{-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. 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} in a way that results in a faster executable. ! (You might want to try compiling with @samp{-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 --- 7524,7540 ---- among other things.) To test this hypothesis, try compiling your program with ! the @option{-fargument-alias} option, which causes the compiler to revert to assumptions essentially the same as ! 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 @command{g77} in a way that results in a faster executable. ! (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 *************** only those violations that actually happ *** 9895,9904 **** 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 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 it provides either form of detection are welcome. @node Output Assumed To Flush --- 7619,7628 ---- Neither approach can cope with programs mixing Fortran code with routines written in other languages, however.) ! 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 @command{g77}, though patches improving @command{g77} so that it provides either form of detection are welcome. @node Output Assumed To Flush *************** it provides either form of detection are *** 9914,9920 **** @cindex NFS @cindex network file system ! For several versions prior to 0.5.20, @code{g77} configured its version of the @code{libf2c} run-time library so that one of its configuration macros, @code{ALWAYS_FLUSH}, was defined. --- 7638,7644 ---- @cindex NFS @cindex network file system ! 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. *************** such as disk full, would be immediately *** 9925,9941 **** 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) 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 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 result in generating the appropriate calls to flushing or non-flushing library routines.) --- 7649,7665 ---- relevant @code{ERR=} and @code{IOSTAT=} mechanism. Because of the adverse effects this approach had on the performance ! 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 @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 @command{g77} or @command{f2c} could result in generating the appropriate calls to flushing or non-flushing library routines.) *************** effect can be more reliable, robust file *** 9962,9974 **** If you know that Fortran programs requiring this level of precision of error reporting are to be compiled using the ! version of @code{g77} you are building, you might wish to ! modify the @code{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 @code{g77} source tree: @example /* #define ALWAYS_FLUSH */ --- 7686,7698 ---- 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 */ *************** Remove the leading @samp{/*@w{ }}, *** 9978,9984 **** so the line begins with @samp{#define}, and the trailing @samp{@w{ }*/}. ! Then build or rebuild @code{g77} as appropriate. @node Large File Unit Numbers @subsection Large File Unit Numbers --- 7702,7708 ---- 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 *************** macro named @code{MXUNIT}. *** 10002,10008 **** If you can easily change your program to use unit numbers in the range 0 through 99, you should do so. ! As distributed, whether as part of @code{f2c} or @code{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 --- 7726,7732 ---- If you can easily change your program to use unit numbers in the range 0 through 99, you should do so. ! 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 *************** value of the @code{MXUNIT} macro, which *** 10015,10021 **** number, to an appropriately higher value. To do this, edit the file @file{@value{path-libf2c}/libI77/fio.h} in your ! @code{g77} source tree, changing the following line: @example #define MXUNIT 100 --- 7739,7745 ---- 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 *************** the Fortran programs on your system. *** 10028,10034 **** (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 @code{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. --- 7752,7758 ---- (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. *************** in your system's documentation. *** 10049,10060 **** @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 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 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}). --- 7773,7784 ---- @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 @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 @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}). *************** maths library, but we have no evidence o *** 10072,10078 **** 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}. @node Inconsistent Calling Sequences @subsection Inconsistent Calling Sequences --- 7796,7803 ---- Some targets (such as the Alpha) may need special options for full IEEE conformance. ! @xref{Submodel Options,,Hardware Models and Configurations,gcc,Using ! the GNU Compiler Collection (GCC)}. @node Inconsistent Calling Sequences @subsection Inconsistent Calling Sequences *************** conformance. *** 10083,10092 **** @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 consistency across source files. @xref{f2c Skeletons and Prototypes,, ! Generating Skeletons and Prototypes with @code{f2c}}.) Mysterious errors, which may appear to be code generation problems, can appear specifically on the x86 architecture with some such --- 7808,7817 ---- @cindex x86 FPU stack Code containing inconsistent calling sequences in the same file is normally rejected---see @ref{GLOBALS}. ! (Use, say, @command{ftnchek} to ensure consistency across source files. @xref{f2c Skeletons and Prototypes,, ! 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 *************** Fortran code developed with those compil *** 10127,10137 **** 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. ! Consider using @samp{-Wuninitialized} (which requires @samp{-O}) to find likely candidates, but ! do not specify @samp{-finit-local-zero} or @samp{-fno-automatic}, or this technique won't work. @cindex -fno-automatic option --- 7852,7862 ---- 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 ! @option{-finit-local-zero} is not needed. ! Consider using @option{-Wuninitialized} (which requires @option{-O}) to find likely candidates, but ! do not specify @option{-finit-local-zero} or @option{-fno-automatic}, or this technique won't work. @cindex -fno-automatic option *************** This might cause a buggy program to appe *** 10149,10160 **** 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}) to find likely candidates, but ! do not specify @samp{-finit-local-zero} or @samp{-fno-automatic}, or this technique won't work. ! The default is @samp{-fautomatic}, which tells @code{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. --- 7874,7885 ---- 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 @option{-Wuninitialized} (which requires @option{-O}) to find likely candidates, but ! do not specify @option{-finit-local-zero} or @option{-fno-automatic}, or this technique won't work. ! 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. *************** Examples include local variables and arr *** 10170,10176 **** @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 @code{RECURSIVE} procedures or other means of explicitly specifying that variables or arrays are automatic. --- 7895,7901 ---- @code{SAVE} attribute in procedures declared @code{RECURSIVE}, and local arrays declared with non-constant bounds (automatic arrays). ! Currently, @command{g77} supports only automatic arrays, not @code{RECURSIVE} procedures or other means of explicitly specifying that variables or arrays are automatic. *************** specifying that variables or arrays are *** 10179,10185 **** @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}. @end table @node Faster Programs --- 7904,7910 ---- @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 @option{-f@var{group}-intrinsics-disable}. @end table @node Faster Programs *************** It is easy to find these using @samp{-f@ *** 10187,10194 **** @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 following approaches to speed up your program (once you get it working). --- 7912,7919 ---- @cindex speed, of programs @cindex programs, speeding up ! 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). *************** possible requirement, which is compiler- *** 10275,10299 **** @item @cindex -malign-double option @cindex options, -malign-double ! Use the (x86-specific) @samp{-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 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 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, 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 --- 8000,8024 ---- @item @cindex -malign-double option @cindex options, -malign-double ! Use the (x86-specific) @option{-malign-double} option when compiling programs for the Pentium and Pentium Pro architectures (called 586 ! 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 @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 @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 *************** to obtain the optimal alignment. *** 10315,10395 **** @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 (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}) 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} (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}. 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 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 variables to be initialized to zero---when @code{SAVE}d (such as when ! @samp{-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 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} If you aren't linking with any code compiled using ! @code{f2c}, try using the @samp{-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}.) @node Use Submodel Options @subsection Use Submodel Options @cindex submodels ! Using an appropriate @samp{-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 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}. 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. ! @samp{-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}. @node Trouble @chapter Known Causes of Trouble with GNU Fortran --- 8040,8121 ---- @end itemize Progress is being made on making this work ! ``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 @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 @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 @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, @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, @option{-fno-init-local-zero} forces such variables to be initialized to zero---when @code{SAVE}d (such as when ! @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 @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 @command{f2c} compatibility ! @cindex compatibility, @command{f2c} If you aren't linking with any code compiled using ! @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 @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 @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 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 ! @option{-march=pentium}. For recent CPUs that don't have explicit support in the released version ! of @command{gcc}, it @emph{might} still be possible to get improvements ! with certain @option{-m} options. ! @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 @option{-O}. @node Trouble @chapter Known Causes of Trouble with GNU Fortran *************** possible workarounds for them, see *** 10411,10426 **** @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}.) @menu * But-bugs:: Bugs really in other programs or elsewhere. ! * Known Bugs:: Bugs known to be in this version of @code{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. --- 8137,8152 ---- @uref{ftp://alpha.gnu.org/g77.plan}. (Note that some of this portion of the manual is lifted ! 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 @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. *************** gcc,Using and Porting GNU CC}.) *** 10433,10455 **** @cindex but-bugs These are bugs to which the maintainers often have to reply, ! ``but that isn't a bug in @code{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; 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 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} users. @xref{Collected Fortran Wisdom}, for information on behavior --- 8159,8181 ---- @cindex but-bugs These are bugs to which the maintainers often have to reply, ! ``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 @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 @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 @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 *************** problem. *** 10505,10511 **** 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. For example, it will appear somewhat different when running your program, when running Emacs, and so on. --- 8231,8237 ---- 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 @command{g77} compiler. For example, it will appear somewhat different when running your program, when running Emacs, and so on. *************** a reference to it in future versions of *** 10529,10565 **** @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 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}). ! If this happens to you, try appending @samp{-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 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}. @cindex undefined reference (_main) @cindex linking error, user code ! @cindex @code{ld}, error linking user code @cindex code, user ! @cindex @code{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 link, since this command ensures that the necessary libraries are ! loaded by specifying @samp{-lg2c -lm} when it invokes the @code{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} commands.) ! Also, try specifying @samp{-lc} as the last item on the @code{g77} command line, in case that helps. @node Large Common Blocks --- 8255,8291 ---- @cindex unresolved reference (various) @cindex linking error for user code @cindex code, user ! @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 @command{g77}-compiled ! programs (which should be done using @command{g77}). ! 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}. ! @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 @command{g77}. @cindex undefined reference (_main) @cindex linking error, user code ! @cindex @command{ld}, error linking user code @cindex code, user ! @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 @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 @command{gcc} command to do the actual link. ! (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 @option{-lc} as the last item on the @command{g77} command line, in case that helps. @node Large Common Blocks *************** command line, in case that helps. *** 10567,10596 **** @cindex common blocks, large @cindex large common blocks @cindex linking, errors ! @cindex @code{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 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}. 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}.) @node NeXTStep Problems @subsection NeXTStep Problems --- 8293,8322 ---- @cindex common blocks, large @cindex large common blocks @cindex linking, 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 @command{ld}, fixed in more recent versions of @code{binutils}, such as version 2.6. @node Debugger Problems @subsection Debugger Problems ! @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 @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 *************** common) with the @samp{UNIX STACK} segme *** 10609,10615 **** 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 problem as follows: @smallexample --- 8335,8341 ---- This leads to all sorts of trouble, from the executable simply not executing, to bus errors. ! The NeXTStep command line tool @command{ebadexec} points to the problem as follows: @smallexample *************** not enough.) *** 10650,10656 **** @subsection Stack Overflow @cindex stack, overflow @cindex segmentation violation ! @code{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 --- 8376,8382 ---- @subsection Stack Overflow @cindex stack, overflow @cindex segmentation violation ! @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 *************** space. *** 10659,10675 **** 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). 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 expense of speed. ! @code{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 --- 8385,8401 ---- Often this can be cured by increasing or removing your shell's limit on stack usage, typically ! 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 ! @option{-fno-automatic} option to reduce stack usage, probably at the expense of speed. ! @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 *************** However, if your program uses large auto *** 10696,10707 **** (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, 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 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 --- 8422,8433 ---- (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 @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. ! @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 *************** simply too large for the system, or bugg *** 10718,10725 **** @subsection Nothing Happens @cindex nothing happens @cindex naming programs ! @cindex @code{test} programs ! @cindex programs, @code{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, --- 8444,8451 ---- @subsection Nothing Happens @cindex nothing happens @cindex naming programs ! @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, *************** despite the program containing nothing o *** 10727,10733 **** simple @code{PRINT} statement. This most often happens because the program has been ! compiled and linked on a UNIX system and named @code{test}, though other names can lead to similarly unexpected run-time behavior on various systems. --- 8453,8459 ---- simple @code{PRINT} statement. This most often happens because the program has been ! 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. *************** sh# *** 10745,10751 **** 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} command commonly installed on UNIX systems). The reliable way to invoke a program you just linked in --- 8471,8477 ---- 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 @command{test} command commonly installed on UNIX systems). The reliable way to invoke a program you just linked in *************** Users who encounter this problem should *** 10762,10769 **** 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}. @node Strange Behavior at Run Time @subsection Strange Behavior at Run Time --- 8488,8495 ---- 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 ! @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 *************** The relevant UNIX commands to learn abou *** 10771,10777 **** @cindex bus error @cindex overwritten data @cindex data, overwritten ! @code{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. --- 8497,8503 ---- @cindex bus error @cindex overwritten data @cindex data, overwritten ! @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. *************** themselves as @emph{visible} problems so *** 10783,10789 **** 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 to catch many of these kinds of errors at program run time.) The other kind of bug is a mismatch between the actual arguments --- 8509,8515 ---- 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 @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 *************** That is, these bugs can be quite sensiti *** 10798,10804 **** 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 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), --- 8524,8530 ---- data representing the placement of other data in memory (that is, pointers, such as the placement of stack frames in memory). ! @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), *************** avoid picking up the @code{BSD} library *** 10836,10853 **** @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. 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}, 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 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 --- 8562,8579 ---- @cindex inconsistent floating-point results @cindex results, inconsistent Some programs appear to produce inconsistent floating-point ! 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 @command{g77}, use binary arithmetic to represent these approximations. Therefore, the exact value of any floating-point approximation ! 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 *************** PRINT *, 0.2 *** 10887,10899 **** END @end smallexample ! When compiled by @code{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. Since @samp{0.2} in the program is a single-precision value, it is converted to double precision (still in binary notation) --- 8613,8625 ---- END @end smallexample ! 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 @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) *************** PRINT *, 0.2D0 *** 10934,10940 **** END @end smallexample ! Future versions of @code{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 --- 8660,8666 ---- END @end smallexample ! 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 *************** as ``spills''. *** 10972,10978 **** @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, does arbitrarily truncate 80-bit results during spills as of this writing. It is not yet clear whether a future version of --- 8698,8704 ---- @cindex spills of floating-point results @cindex 80-bit spills @cindex truncation, of floating-point values ! (@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 *************** documentation about this. *** 10990,10996 **** @node Missing Features @section Missing Features ! This section lists features we know are missing from @code{g77}, and which we want to add someday. (There is no priority implied in the ordering below.) --- 8716,8722 ---- @node Missing Features @section Missing Features ! 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.) *************** Debugging: *** 11062,11068 **** @node Better Source Model @subsection Better Source Model ! @code{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 --- 8788,8794 ---- @node Better Source Model @subsection Better Source 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 *************** to not treat lines with tabs as if they *** 11080,11086 **** 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}, 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 --- 8806,8812 ---- 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, @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 *************** various limits and diagnostics as approp *** 11088,11094 **** @cindex sequence numbers @cindex columns 73 through 80 ! Also, @code{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 --- 8814,8820 ---- @cindex sequence numbers @cindex columns 73 through 80 ! 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 *************** but one of the most frequent bugs encoun *** 11097,11110 **** 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. @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 distinguish Fortran 90 (and, now, Fortran 95) from ANSI FORTRAN 77. --- 8823,8836 ---- 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 @option{-Wno-col73to80} option. @node Fortran 90 Support @subsection Fortran 90 Support @cindex Fortran 90, support @cindex support, Fortran 90 ! @command{g77} does not support many of the features that distinguish Fortran 90 (and, now, Fortran 95) from ANSI FORTRAN 77. *************** Some Fortran 90 features are supported, *** 11112,11125 **** 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 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}. 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 --- 8838,8851 ---- 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 @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 @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 *************** to fund a comprehensive project to creat *** 11130,11148 **** @cindex PARAMETER statement @cindex statements, PARAMETER ! @code{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 exponentiation in @code{PARAMETER} statements, such as @samp{PARAMETER (R=2**.25)}. ! It is unlikely @code{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 in implementing this feature soon afterwards. @node Arbitrary Concatenation --- 8856,8872 ---- @cindex PARAMETER statement @cindex statements, PARAMETER ! @command{g77} doesn't allow intrinsics in @code{PARAMETER} statements. ! 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 @command{g77} will ever support this feature, as doing it properly requires complete emulation of a target computer's floating-point facilities when ! 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 *************** in implementing this feature soon afterw *** 11151,11157 **** @cindex CHARACTER*(*) @cindex run-time, dynamic allocation ! @code{g77} doesn't support arbitrary operands for concatenation in contexts where run-time allocation is required. For example: --- 8875,8881 ---- @cindex CHARACTER*(*) @cindex run-time, dynamic allocation ! @command{g77} doesn't support arbitrary operands for concatenation in contexts where run-time allocation is required. For example: *************** are not supported. *** 11174,11180 **** @cindex recursion, lack of @cindex lack of recursion ! @code{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. --- 8898,8904 ---- @cindex recursion, lack of @cindex lack of recursion ! @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. *************** but the result is not pretty. *** 11195,11221 **** @cindex Toolpack @cindex Netlib ! Some compilers, such as @code{f2c}, have an option (@samp{-r8}, ! @samp{-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 @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 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 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 --- 8919,8945 ---- @cindex Toolpack @cindex Netlib ! 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 (@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.) ! @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 @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 *************** alleviate this problem). *** 11234,11243 **** @cindex @code{LOGICAL*1} support @cindex types, @code{LOGICAL*1} ! @code{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. In the meantime, version 0.5.18 provides rudimentary support for them. --- 8958,8965 ---- @cindex @code{LOGICAL*1} support @cindex types, @code{LOGICAL*1} ! @command{g77} doesn't fully support @code{INTEGER*2}, @code{LOGICAL*1}, and similar. In the meantime, version 0.5.18 provides rudimentary support for them. *************** for them. *** 11248,11254 **** @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 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 --- 8970,8976 ---- @cindex types, @code{REAL*16} @cindex @code{INTEGER*8} support @cindex types, @code{INTEGER*8} ! @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 *************** support (using F90 syntax) as well, and, *** 11256,11262 **** machines will result in automatic support of @code{INTEGER*1}, @code{INTEGER*2}, @code{INTEGER*8}, maybe even @code{REAL*16}, and so on. - This is scheduled for version 0.6. @node Array Bounds Expressions @subsection Array Bounds Expressions --- 8978,8983 ---- *************** This is scheduled for version 0.6. *** 11266,11276 **** @cindex @code{DIMENSION} statement @cindex statements, @code{DIMENSION} ! @code{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: @smallexample SUBROUTINE X(M, N) --- 8987,8997 ---- @cindex @code{DIMENSION} statement @cindex statements, @code{DIMENSION} ! @command{g77} doesn't support more general expressions to dimension arrays, such as array element references, function references, etc. ! For example, @command{g77} currently does not accept the following: @smallexample SUBROUTINE X(M, N) *************** INTEGER N(10), M(N(2), N(1)) *** 11283,11301 **** @cindex statements, POINTER @cindex Cray pointers ! @code{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}. 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. @xref{Functions and Subroutines}, for information on @code{%VAL()}, @code{%REF()}, and @code{%DESCR()} --- 9004,9022 ---- @cindex statements, POINTER @cindex Cray pointers ! @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 @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 @command{g77} is used. @xref{Functions and Subroutines}, for information on @code{%VAL()}, @code{%REF()}, and @code{%DESCR()} *************** procedures written in languages other th *** 11305,11318 **** @node Sensible Non-standard Constructs @subsection Sensible Non-standard Constructs ! @code{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 trigger warnings about such non-standard constructs). ! Until @code{g77} no longer gratuitously rejects sensible code, you might as well fix your code to be more standard-conforming and portable. --- 9026,9039 ---- @node Sensible Non-standard Constructs @subsection Sensible Non-standard Constructs ! @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 @command{g77} (though @option{-fpedantic} should trigger warnings about such non-standard constructs). ! Until @command{g77} no longer gratuitously rejects sensible code, you might as well fix your code to be more standard-conforming and portable. *************** from also specifying the @code{SAVE} sta *** 11335,11352 **** 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 allow this combination, because although the general problem of gratuitously rejecting unambiguous and ! ``safe'' constructs still exists in @code{g77}, this particular construct was deemed useful enough that ! it was worth fixing @code{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) gratuitously rejects it. Until the general problem is solved, if you have --- 9056,9073 ---- to indicate that all local variables and arrays are to have the @code{SAVE} attribute. ! 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 @command{g77}, this particular construct was deemed useful enough that ! 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 @command{g77} (or any other compiler) gratuitously rejects it. Until the general problem is solved, if you have *************** any such construct you believe is worthw *** 11354,11360 **** 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. @node READONLY Keyword @subsection @code{READONLY} Keyword --- 9075,9081 ---- 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 @command{g77} just for cases like yours. @node READONLY Keyword @subsection @code{READONLY} Keyword *************** and perhaps to trigger a fatal diagnosti *** 11369,11380 **** 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} (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! Further, mounting of non-UNIX filesystems on UNIX systems (such as via NFS) --- 9090,9101 ---- if a @code{WRITE} or @code{PRINT} to such a unit is attempted. ! @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. ! @command{g77} is not just a UNIX-based compiler! Further, mounting of non-UNIX filesystems on UNIX systems (such as via NFS) *************** keyword.) *** 11387,11393 **** @node FLUSH Statement @subsection @code{FLUSH} Statement ! @code{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=} --- 9108,9114 ---- @node FLUSH Statement @subsection @code{FLUSH} Statement ! @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=} *************** specifiers. *** 11398,11408 **** @cindex FORMAT statement @cindex statements, FORMAT ! @code{g77} doesn't support @samp{FORMAT(I)} and the like. Supporting this requires a significant redesign or replacement of @code{libg2c}. ! However, @code{g77} does support this construct when the expression is constant (as of version 0.5.22). For example: --- 9119,9129 ---- @cindex FORMAT statement @cindex statements, FORMAT ! @command{g77} doesn't support @samp{FORMAT(I)} and the like. Supporting this requires a significant redesign or replacement of @code{libg2c}. ! However, @command{g77} does support this construct when the expression is constant (as of version 0.5.22). For example: *************** when @code{ERR=} and @code{END=} constru *** 11439,11445 **** @node Explicit Assembler Code @subsection Explicit Assembler Code ! @code{g77} needs to provide some way, a la @code{gcc}, for @code{g77} code to specify explicit assembler code. @node Q Edit Descriptor --- 9160,9166 ---- @node Explicit Assembler Code @subsection Explicit Assembler Code ! @command{g77} needs to provide some way, a la @command{gcc}, for @command{g77} code to specify explicit assembler code. @node Q Edit Descriptor *************** A workaround might be using internal I/O *** 11461,11467 **** @cindex PARAMETER statement @cindex statements, PARAMETER ! @code{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. --- 9182,9188 ---- @cindex PARAMETER statement @cindex statements, PARAMETER ! @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. *************** assigned to it). *** 11481,11487 **** @cindex ACCEPT statement @cindex statements, ACCEPT ! @code{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. --- 9202,9208 ---- @cindex ACCEPT statement @cindex statements, ACCEPT ! @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. *************** replaced by @samp{READ fmt,list}. *** 11502,11511 **** @cindex MAP statement @cindex statements, MAP ! @code{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 because it requires a great deal of work either upgrading or replacing @code{libg2c}. --- 9223,9232 ---- @cindex MAP statement @cindex statements, MAP ! @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 @command{g77}, partly because it requires a great deal of work either upgrading or replacing @code{libg2c}. *************** replacing @code{libg2c}. *** 11519,11527 **** @cindex INQUIRE statement @cindex statements, INQUIRE ! @code{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 require much more work on @code{libg2c}. @cindex FORM='PRINT' --- 9240,9248 ---- @cindex INQUIRE statement @cindex statements, INQUIRE ! @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 @command{g77} itself, but require much more work on @code{libg2c}. @cindex FORM='PRINT' *************** require much more work on @code{libg2c}. *** 11529,11543 **** @cindex carriage control @pindex asa @pindex fpr ! @code{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 @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 sites. @c (Can both programs can be used in a pipeline, --- 9250,9264 ---- @cindex carriage control @pindex asa @pindex fpr ! @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 @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, @command{fpr} is in BSD distributions in various archive sites. @c (Can both programs can be used in a pipeline, *************** sites. *** 11551,11557 **** @cindex DECODE statement @cindex statements, DECODE ! @code{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). --- 9272,9278 ---- @cindex DECODE statement @cindex statements, 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). *************** with: *** 11599,11605 **** @end smallexample It is entirely possible that @code{ENCODE} and @code{DECODE} will ! be supported by a future version of @code{g77}. @node AUTOMATIC Statement @subsection @code{AUTOMATIC} Statement --- 9320,9326 ---- @end smallexample It is entirely possible that @code{ENCODE} and @code{DECODE} will ! be supported by a future version of @command{g77}. @node AUTOMATIC Statement @subsection @code{AUTOMATIC} Statement *************** be supported by a future version of @cod *** 11608,11620 **** @cindex automatic variables @cindex variables, automatic ! @code{g77} doesn't support the @code{AUTOMATIC} statement that ! @code{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. @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. --- 9329,9341 ---- @cindex automatic variables @cindex variables, automatic ! @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 @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. *************** should be provided as well. *** 11642,11648 **** @node Suppressing Space Padding @subsection Suppressing Space Padding of Source Lines ! @code{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. --- 9363,9369 ---- @node Suppressing Space Padding @subsection Suppressing Space Padding of Source Lines ! @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. *************** source file, as in the following example *** 11656,11662 **** @end smallexample @noindent ! @code{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?} --- 9377,9383 ---- @end smallexample @noindent ! @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?} *************** command-line option is specified, appare *** 11668,11680 **** 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 to Digital's approach to handling the above example. @node Fortran Preprocessor @subsection Fortran Preprocessor ! @code{g77} should offer a preprocessor designed specifically for Fortran to replace @samp{cpp -traditional}. There are several out there worth evaluating, at least. --- 9389,9401 ---- from readers of the USENET group @file{comp.lang.fortran} to offer conformance to this widespread practice in the industry. ! @command{g77} should return the favor by offering conformance to Digital's approach to handling the above example. @node Fortran Preprocessor @subsection Fortran Preprocessor ! @command{g77} should offer a preprocessor designed specifically for Fortran to replace @samp{cpp -traditional}. There are several out there worth evaluating, at least. *************** files included via the @code{INCLUDE} di *** 11692,11701 **** @cindex @code{Shift} intrinsic @cindex intrinsics, @code{Shift} ! @code{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 the intrinsic @code{Iand} does not accept @code{REAL} arguments: @smallexample --- 9413,9422 ---- @cindex @code{Shift} intrinsic @cindex intrinsics, @code{Shift} ! @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 @command{g77}, because the intrinsic @code{Iand} does not accept @code{REAL} arguments: @smallexample *************** END *** 11707,11713 **** @node Really Ugly Character Assignments @subsection Really Ugly Character Assignments ! An option such as @samp{-fugly-char} should be provided to allow @smallexample --- 9428,9434 ---- @node Really Ugly Character Assignments @subsection Really Ugly Character Assignments ! An option such as @option{-fugly-char} should be provided to allow @smallexample *************** A1 = 'ABCDEFGH' *** 11725,11731 **** @node POSIX Standard @subsection @code{POSIX} Standard ! @code{g77} should support the POSIX standard for Fortran. @node Floating-point Exception Handling @subsection Floating-point Exception Handling --- 9446,9452 ---- @node POSIX Standard @subsection @code{POSIX} Standard ! @command{g77} should support the POSIX standard for Fortran. @node Floating-point Exception Handling @subsection Floating-point Exception Handling *************** A1 = 'ABCDEFGH' *** 11734,11740 **** @cindex FPE handling @cindex NaN values ! The @code{gcc} backend and, consequently, @code{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 --- 9455,9461 ---- @cindex FPE handling @cindex NaN values ! 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 *************** code, though some targets, such as the A *** 11744,11750 **** 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. For example, just compiling and linking the following C code with your program will turn on exception trapping for the ``common'' exceptions on a GNU system using glibc 2.2 or newer: --- 9465,9471 ---- options which change the behaviour. Most systems provide some C-callable mechanism to change this; this can ! 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 a GNU system using glibc 2.2 or newer: *************** A convenient trick is to compile this so *** 11765,11771 **** @smallexample gcc -o libtrapfpe.a trapfpe.c @end smallexample ! and then use it by adding @samp{-trapfpe} to the @code{g77} command line when linking. @node Nonportable Conversions --- 9486,9492 ---- @smallexample gcc -o libtrapfpe.a trapfpe.c @end smallexample ! and then use it by adding @option{-trapfpe} to the @command{g77} command line when linking. @node Nonportable Conversions *************** when linking. *** 11773,11786 **** @cindex nonportable conversions @cindex conversions, nonportable ! @code{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. Perhaps it should accept more or all of them. @node Large Automatic Arrays --- 9494,9507 ---- @cindex nonportable conversions @cindex conversions, 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 @command{g77} ! when the @option{-fugly-logint} option is specified. Perhaps it should accept more or all of them. @node Large Automatic Arrays *************** Perhaps it should accept more or all of *** 11790,11796 **** 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 allocation of automatic arrays in heap storage. @node Support for Threads --- 9511,9517 ---- Currently, automatic arrays always are allocated on the stack. For situations where the stack cannot be made large enough, ! @command{g77} should offer a compiler option that specifies allocation of automatic arrays in heap storage. @node Support for Threads *************** allocation of automatic arrays in heap s *** 11798,11805 **** @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 (other than the instruction-level parallelism available on some processors). A package such as PVM might help here. --- 9519,9526 ---- @cindex threads @cindex 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. *************** A package such as PVM might help here. *** 11809,11815 **** @cindex debug line @cindex comment line, debug ! An option such as @samp{-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} --- 9530,9536 ---- @cindex debug line @cindex comment line, debug ! 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} *************** instead of as if they began with a @samp *** 11818,11824 **** @node Better Warnings @subsection Better Warnings ! Because of how @code{g77} generates code via the back end, it doesn't always provide warnings the user wants. Consider: --- 9539,9545 ---- @node Better Warnings @subsection Better Warnings ! Because of how @command{g77} generates code via the back end, it doesn't always provide warnings the user wants. Consider: *************** END *** 11830,11836 **** 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, 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!) --- 9551,9557 ---- Currently, the above is not flagged as a case of using an uninitialized variable, ! 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!) *************** at least theoretically, and, ultimately, *** 11849,11855 **** for some types of code. @item ! Have @code{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 --- 9570,9576 ---- for some types of code. @item ! 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 *************** because @samp{A} might then end up livin *** 11860,11880 **** which could help with inner loops. @item ! Have @code{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 - pretty solid. @end itemize @node Gracefully Handle Sensible Bad Code @subsection Gracefully Handle Sensible Bad Code ! @code{g77} generally should continue processing for warnings and recoverable (user) errors whenever possible---that is, it shouldn't gratuitously make bad or useless code. --- 9581,9599 ---- which could help with inner loops. @item ! 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. @end itemize @node Gracefully Handle Sensible Bad Code @subsection Gracefully Handle Sensible Bad Code ! @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. *************** END *** 11887,11894 **** @end smallexample @noindent ! When compiling the above with @samp{-ff2c-intrinsics-disable}, ! @code{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 --- 9606,9613 ---- @end smallexample @noindent ! 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 *************** the compiler internals to improve how st *** 11897,11910 **** @node Non-standard Conversions @subsection Non-standard Conversions ! @samp{-Wconversion} and related should flag places where non-standard conversions are found. ! Perhaps much of this would be part of @samp{-Wugly*}. @node Non-standard Intrinsics @subsection Non-standard Intrinsics ! @code{g77} needs a new option, like @samp{-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. --- 9616,9629 ---- @node Non-standard Conversions @subsection Non-standard Conversions ! @option{-Wconversion} and related should flag places where non-standard conversions are found. ! Perhaps much of this would be part of @option{-Wugly*}. @node Non-standard Intrinsics @subsection Non-standard Intrinsics ! @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. *************** compiler. *** 11912,11925 **** @node Modifying DO Variable @subsection Modifying @code{DO} Variable ! @code{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 the invalid assignment to @samp{NOTHER}: @smallexample --- 9631,9644 ---- @node Modifying DO Variable @subsection Modifying @code{DO} Variable ! @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 @command{g77} should warn about the invalid assignment to @samp{NOTHER}: @smallexample *************** END DO *** 11932,11938 **** @node Better Pedantic Compilation @subsection Better Pedantic Compilation ! @code{g77} needs to support @samp{-fpedantic} more thoroughly, and use it only to generate warnings instead of rejecting constructs outright. Have it warn: --- 9651,9657 ---- @node Better Pedantic Compilation @subsection Better Pedantic Compilation ! @command{g77} needs to support @option{-fpedantic} more thoroughly, and use it only to generate warnings instead of rejecting constructs outright. Have it warn: *************** syntactic extensions. *** 11945,11951 **** @node Warn About Implicit Conversions @subsection Warn About Implicit Conversions ! @code{g77} needs a @samp{-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. --- 9664,9670 ---- @node Warn About Implicit Conversions @subsection Warn About Implicit Conversions ! @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. *************** FOO = TZPHI * 3D0 *** 11961,11967 **** @node Invalid Use of Hollerith Constant @subsection Invalid Use of Hollerith Constant ! @code{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 --- 9680,9686 ---- @node Invalid Use of Hollerith Constant @subsection Invalid Use of Hollerith Constant ! @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 *************** in a way that is a bit difficult to unde *** 11972,11988 **** @node Dummy Array Without Dimensioning Dummy @subsection Dummy Array Without Dimensioning Dummy ! @code{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 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} below, since it includes @samp{ARRAY} but not @samp{ISIZE} in its list of arguments: --- 9691,9707 ---- @node Dummy Array Without Dimensioning Dummy @subsection Dummy Array Without Dimensioning Dummy ! @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, @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, @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: *************** ENTRY ALT(ARRAY) *** 11995,12001 **** @node Invalid FORMAT Specifiers @subsection Invalid FORMAT Specifiers ! @code{g77} should check @code{FORMAT} specifiers for validity as it does @code{FORMAT} statements. For example, a diagnostic would be produced for: --- 9714,9720 ---- @node Invalid FORMAT Specifiers @subsection Invalid FORMAT Specifiers ! @command{g77} should check @code{FORMAT} specifiers for validity as it does @code{FORMAT} statements. For example, a diagnostic would be produced for: *************** PRINT 'HI THERE!' !User meant PRINT *, *** 12007,12014 **** @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. 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. --- 9726,9733 ---- @node Ambiguous Dialects @subsection Ambiguous Dialects ! @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. *************** dialect or dialects. *** 12016,12028 **** @node Unused Labels @subsection Unused Labels ! @code{g77} should warn about unused labels when @samp{-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. The default should be to suppress info messages. Perhaps info messages should simply be eliminated. --- 9735,9747 ---- @node Unused Labels @subsection Unused Labels ! @command{g77} should warn about unused labels when @option{-Wunused} is in effect. @node Informational Messages @subsection Informational Messages ! @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. *************** Perhaps info messages should simply be e *** 12030,12036 **** @node Uninitialized Variables at Run Time @subsection Uninitialized Variables at Run Time ! @code{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 --- 9749,9755 ---- @node Uninitialized Variables at Run Time @subsection Uninitialized Variables at Run Time ! @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 *************** many such bugs at compile time. *** 12046,12064 **** @cindex file formats @cindex binary data @cindex byte ordering ! @code{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 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 follows: @table @asis @item Sequential --- 9765,9783 ---- @cindex file formats @cindex binary data @cindex byte ordering ! @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 @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 ! @command{g77} (@code{libf2c}) unformatted files, they are written as follows: @table @asis @item Sequential *************** between big- and little-endian 32-bit sy *** 12091,12099 **** 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}. ! If necessary, it is possible to do byte-oriented i/o with @code{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. --- 9810,9818 ---- 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 ! @command{g77}. ! 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. *************** or PACT's PDB@footnote{No, not @emph{tha *** 12107,12113 **** (@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 techniques. @node Better List-directed I/O --- 9826,9832 ---- (@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 @command{g77} runtime library should use such techniques. @node Better List-directed I/O *************** to be undertaken. *** 12127,12133 **** In the meantime, use of formatted I/O is recommended. While it might be of little consolation, ! @code{g77} does support @samp{FORMAT(F.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 --- 9846,9852 ---- In the meantime, use of formatted I/O is recommended. While it might be of little consolation, ! @command{g77} does support @samp{FORMAT(F.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 *************** This change probably requires the @code{ *** 12156,12162 **** @node Labels Visible to Debugger @subsection Labels Visible to Debugger ! @code{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. --- 9875,9881 ---- @node Labels Visible to Debugger @subsection Labels Visible to Debugger ! @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. *************** with popular existing compilers. *** 12205,12233 **** @cindex statements, @code{COMMON} @cindex naming conflicts ! @code{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}. ! @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 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 force-load BLOCK DATA program units. ! In that case, if @code{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 @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.) --- 9924,9952 ---- @cindex statements, @code{COMMON} @cindex naming conflicts ! @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 @command{g77} does not, ! to be compatible with @command{f2c}. ! @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 @command{g77} would treat these references as requests to force-load BLOCK DATA program units. ! 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, ! @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.) *************** worth.) *** 12237,12243 **** @cindex IMPLICIT CHARACTER*(*) statement @cindex statements, IMPLICIT CHARACTER*(*) ! @code{g77} disallows @code{IMPLICIT CHARACTER*(*)}. This is not standard-conforming. @node Non-bugs --- 9956,9962 ---- @cindex IMPLICIT CHARACTER*(*) statement @cindex statements, IMPLICIT CHARACTER*(*) ! @command{g77} disallows @code{IMPLICIT CHARACTER*(*)}. This is not standard-conforming. @node Non-bugs *************** we do not make because we think GNU Fort *** 12264,12282 **** @node Backslash in Constants @subsection Backslash in Constants @cindex backslash ! @cindex @code{f77} support ! @cindex support, @code{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}. First of all, you can always specify ! @samp{-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 default to, and apparently lots of code depends on this feature. This is a particularly troubling issue. --- 9983,10001 ---- @node Backslash in Constants @subsection Backslash in Constants @cindex backslash ! @cindex @command{f77} support ! @cindex support, @command{f77} In the opinion of many experienced Fortran users, ! @option{-fno-backslash} should be the default, not @option{-fbackslash}, ! as currently set by @command{g77}. First of all, you can always specify ! @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, @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. *************** The use of a C construct in the midst of *** 12284,12332 **** 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 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} 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 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. It is probably the case that more code exists ! that would @emph{not} work with @samp{-fbackslash} in force than code that requires it be in force. However, most of @emph{that} code is not being compiled ! with @code{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 would have to modify existing, working build procedures ! to explicitly specify @samp{-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}. This is technically quite straightforward, but will be avoided even in cases where not configuring defaults to be --- 10003,10051 ---- 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 @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 @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 @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 @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 @option{-fbackslash} in force than code that requires it be in force. However, most of @emph{that} code is not being compiled ! 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 ! @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 @option{-fbackslash} if that was not the default. One suggestion has been to configure the default for ! @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 *************** But such applications are rare. *** 12348,12358 **** 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 not widely agreed-upon, goals for GNU compilers in general.) This is why GNU Fortran does and will treat backslashes in the same --- 10067,10077 ---- 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 @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 *************** be used instead, for readability.) *** 12391,12410 **** @cindex initialization, statement placement @cindex placing initialization statements ! @code{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 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, 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} so that it can possibly immediately write constants to the output file, thus saving time and space. --- 10110,10129 ---- @cindex initialization, statement placement @cindex placing initialization statements ! @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, @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} @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 ! @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. *************** and to do this it cannot be followed by *** 12418,12459 **** @cindex intrinsics, context-sensitive @cindex context-sensitive intrinsics ! @code{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 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} 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, @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 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. 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 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 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) --- 10137,10178 ---- @cindex intrinsics, context-sensitive @cindex context-sensitive intrinsics ! @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 @command{g77} as an invalid reference to the @code{SQRT} intrinsic function, because the reference is a subroutine invocation. ! 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, @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, @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, @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, @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, @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) *************** a user-written subroutine named @samp{SQ *** 12467,12473 **** @cindex constants, context-sensitive @cindex context-sensitive constants ! @code{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}. --- 10186,10192 ---- @cindex constants, context-sensitive @cindex context-sensitive constants ! @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}. *************** PRINT *, 9.435784839284958 * 2D0 *** 12478,12489 **** @end smallexample @noindent ! @code{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'' than when compiled by other compilers. In these and other cases, some compilers detect the --- 10197,10208 ---- @end smallexample @noindent ! @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 @command{g77} will appear to have ``less precision'' than when compiled by other compilers. In these and other cases, some compilers detect the *************** END *** 12516,12522 **** Running the above program should result in the same value being printed three times. ! With @code{g77} as the compiler, it does. However, compiled by many other compilers, --- 10235,10241 ---- Running the above program should result in the same value being printed three times. ! With @command{g77} as the compiler, it does. However, compiled by many other compilers, *************** to replace some constants with variables *** 12540,12553 **** 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 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 could be very helpful. @node Equivalence Versus Equality --- 10259,10272 ---- 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. ! @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 ! @command{g77} can do to help flag cases of this in such code could be very helpful. @node Equivalence Versus Equality *************** could be very helpful. *** 12557,12563 **** @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 recommended except for legacy code (where the behavior expected by the @emph{code} is assumed). --- 10276,10282 ---- @cindex logical expressions, comparing Use of @code{.EQ.} and @code{.NE.} on @code{LOGICAL} operands ! 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). *************** own distinct precedence) to compare @cod *** 12607,12613 **** 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 that were well-designed in the first place. (Ask C programmers about the precedence of expressions such as --- 10326,10332 ---- This requirement results in expression syntax with more certain precedence (without requiring substantial context), making it easier for programmers to read existing code. ! @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 *************** that might diagnose it. *** 12634,12644 **** @cindex side effects, order of evaluation @cindex order of evaluation, side effects ! @code{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}. 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 --- 10353,10363 ---- @cindex side effects, order of evaluation @cindex order of evaluation, side effects ! @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 @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 *************** Warnings might indicate danger points wh *** 12714,12742 **** 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 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 ! 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. ! @c ! @c Say this when it is true -- hopefully 0.6, maybe 0.7 or later. --burley ! @c ! @c GNU Fortran always tries to compile your program if possible; it never ! @c gratuitously rejects a program whose meaning is clear merely because ! @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 This does not mean that @emph{all} non-ANSI constructs get warnings ! @c or errors. @xref{Warning Options,,Options to Request or Suppress Warnings}, for more detail on these and related command-line options. --- 10433,10443 ---- 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 ! @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 @command{g77} diagnostics. @xref{Warning Options,,Options to Request or Suppress Warnings}, for more detail on these and related command-line options. *************** If you are an experienced user of Fortra *** 12863,12895 **** for improvement of GNU Fortran are welcome in any case. @end itemize ! Many, perhaps most, bug reports against @code{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 code, better. Some steps you can take to verify that the bug is not certainly ! in the code you're compiling with @code{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 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}. @item ! Compile your code using the @code{g77} options @samp{-finit-local-zero}, ! @samp{-fno-automatic}, @samp{-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 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 --- 10564,10596 ---- for improvement of GNU Fortran are welcome in any case. @end itemize ! 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 @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 @command{g77}: @itemize @bullet @item ! 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 @command{g77}. @item ! 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 @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 *************** about the Fortran dialect and/or underly *** 12897,12920 **** 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 their use into selective changes in your own code. @item @pindex ftnchek ! Validate your code with @code{ftnchek} or a similar code-checking tool. ! @code{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} (from @uref{ftp://ahab.rutgers.edu/pub/perl/sfmakedepend}) to maintain dependencies automatically. ! These assume the use of GNU @code{make}. @smallexample # Dummy suffix for ftnchek targets: --- 10598,10621 ---- being compiled and run on. @xref{Overly Convenient Options,,Overly Convenient Command-Line Options}, ! 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 @command{ftnchek} or a similar code-checking tool. ! @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 @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 @command{make}. @smallexample # Dummy suffix for ftnchek targets: *************** depend: ; \ *** 12966,12979 **** @end smallexample @item ! Try your code out using other Fortran compilers, such as @code{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 exposes it more readily than other compilers. @end itemize --- 10667,10680 ---- @end smallexample @item ! 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} ! @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 *************** for now, if you are sending more than a *** 13061,13074 **** 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} archive or source file) ! using @code{gzip} and encode it via @code{uuencode}. Do not use any MIME stuff---the current maintainer can't decode this. ! Using @code{compress} instead of @code{gzip} is acceptable, assuming you have licensed the use of the patented algorithm in ! @code{compress} from Unisys.) To enable someone to investigate the bug, you should include all these things: --- 10762,10775 ---- 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 @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 @command{gzip} and encode it via @command{uuencode}. Do not use any MIME stuff---the current maintainer can't decode this. ! Using @command{compress} instead of @command{gzip} is acceptable, assuming you have licensed the use of the patented algorithm in ! @command{compress} from Unisys.) To enable someone to investigate the bug, you should include all these things: *************** things: *** 13076,13082 **** @itemize @bullet @item The version of GNU Fortran. ! You can get this by running @code{g77} with the @samp{-v} option. (Ignore any error messages that might be displayed when the linker is run.) --- 10777,10783 ---- @itemize @bullet @item The version of GNU Fortran. ! 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.) *************** run your source file through the C prepr *** 13099,13105 **** 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 compilation.) A single statement is not enough of an example. --- 10800,10806 ---- 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 ! @option{-I}, @option{-D}, and @option{-U}---that you used in actual compilation.) A single statement is not enough of an example. *************** chases. *** 13136,13142 **** @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 you won't omit something important, list all the options. If we were to try to guess the arguments, we would probably guess wrong --- 10837,10843 ---- @item The command arguments you gave GNU Fortran to compile that example ! 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 *************** include that, send along any additional *** 13150,13156 **** don't see clearly represented in that output.) @item ! The operands you gave to the @code{configure} command when you installed the compiler. @item --- 10851,10857 ---- don't see clearly represented in that output.) @item ! The operands you gave to the @command{configure} command when you installed the compiler. @item *************** bug in the program itself. *** 13204,13210 **** @item If you send examples of assembler code output from GNU Fortran, ! please use @samp{-g} when you make them. The debugging information includes source line numbers which are essential for correlating the output with the input. --- 10905,10911 ---- @item If you send examples of assembler code output from GNU Fortran, ! 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. *************** not in an argument. *** 13244,13250 **** 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 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 --- 10945,10951 ---- 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 @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 *************** Send a message to @email{@value{email-he *** 13343,13351 **** @cindex options, adding @cindex adding options ! To add a new command-line option to @code{g77}, first decide what kind of option you wish to add. ! Search the @code{g77} and @code{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. --- 11044,11052 ---- @cindex options, adding @cindex adding options ! To add a new command-line option to @command{g77}, first decide what kind of option you wish to add. ! 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. *************** help clarify its nature. *** 13354,13360 **** @item @emph{Fortran options} are options that apply only when compiling Fortran programs. ! They are accepted by @code{g77} and @code{gcc}, but they apply only when compiling Fortran programs. @item --- 11055,11061 ---- @item @emph{Fortran options} are options that apply only when compiling Fortran programs. ! They are accepted by @command{g77} and @command{gcc}, but they apply only when compiling Fortran programs. @item *************** when compiling most any kind of program. *** 13364,13370 **** @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 build a list of all options that are accepted by at least one language's compiler. This list goes into the @code{documented_lang_options} array --- 11065,11071 ---- @emph{Fortran options} are listed in the file @file{@value{path-g77}/lang-options.h}, ! 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{documented_lang_options} array *************** in @file{gcc/toplev.c}, which uses this *** 13372,13378 **** 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 calls @code{ffe_decode_option}. If the linked-in front end ``rejects'' a --- 11073,11079 ---- determine whether a particular option should be offered to the linked-in front end for processing by calling @code{lang_option_decode}, which, for ! @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 *************** language's compiler is willing to accept *** 13382,13397 **** 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; even though the @code{f771} version of @code{lang_decode_option} ! rejects @samp{-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 a warning about this would be helpful if it were possible. --- 11083,11098 ---- This allows commands like @samp{gcc -fno-asm foo.c bar.f} to work, even though Fortran compilation does ! not currently support the @option{-fno-asm} option; even though the @code{f771} version of @code{lang_decode_option} ! 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 @option{-fno-asm}---perhaps a warning about this would be helpful if it were possible. *************** should behave the same way on all config *** 13410,13419 **** (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}. Accessor macros for Fortran options, used by code ! in the @code{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}. --- 11111,11120 ---- (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 @command{g77}. Accessor macros for Fortran options, used by code ! 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}. *************** some of which are in @file{gcc/toplev.c} *** 13426,13467 **** 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}: @table @code @item G77 0.5.24 (EGCS 1.1) @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} perform internal consistency checking automatically ! when the @samp{-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} option, which is always provided as the first option when ! called by @code{g77} or @code{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} 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, 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, even when the user has not explicitly specified them. ! Other ``internal'' options such as @samp{-quiet} also are passed via this mechanism. @end table --- 11127,11168 ---- You can set different defaults for @emph{Fortran-oriented} or @emph{Fortran-reticent} compiler options by changing ! 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 - which became GCC 2.95) Change the @code{lang_init_options} routine in @file{gcc/gcc/f/com.c}. ! (Note that these versions of @command{g77} perform internal consistency checking automatically ! 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 @option{-fset-g77-defaults} option, which is always provided as the first option when ! 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 @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 @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 @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 @option{-quiet} also are passed via this mechanism. @end table *************** are passed via this mechanism. *** 13469,13490 **** @chapter Projects @cindex projects ! If you want to contribute to @code{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, and install. * More Extensions:: Features many users won't know to ask for. ! * Machine Model:: @code{g77} should better leverage @code{gcc}. * Internals Documentation:: Make maintenance easier. * Internals Improvements:: Make internals more robust. ! * Better Diagnostics:: Make using @code{g77} on new code easier. @end menu @node Efficiency --- 11170,11191 ---- @chapter Projects @cindex projects ! 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 @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:: @command{g77} should better leverage @command{gcc}. * Internals Documentation:: Make maintenance easier. * Internals Improvements:: Make internals more robust. ! * Better Diagnostics:: Make using @command{g77} on new code easier. @end menu @node Efficiency *************** is not a subroutine intrinsic, would res *** 13524,13530 **** unimplemented-statement catch-all. @item ! Throughout @code{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. --- 11225,11231 ---- unimplemented-statement catch-all. @item ! 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. *************** improve maintainability.) *** 13543,13549 **** 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} 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.}). --- 11244,11250 ---- 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 @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.}). *************** own. *** 13562,13568 **** @cindex optimization, better @cindex code generation, improving ! Much of this work should be put off until after @code{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 --- 11263,11269 ---- @cindex optimization, better @cindex code generation, improving ! 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 *************** the feature-adding work. *** 13572,13578 **** @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 that are at all worth inlining. (Some of this has already been done, such as for integral exponentiation.) --- 11273,11279 ---- @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 @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.) *************** Among the important things the library w *** 13607,13613 **** 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 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 --- 11308,11314 ---- 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 ! @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 *************** devices). *** 13617,13630 **** @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}, 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.) @item Do something useful with @code{doiter} references where possible. --- 11318,11331 ---- @item Probably requiring the new library design, change interface to normally have @code{COMPLEX} functions return their values in the way ! @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 @command{g77} uses ! @command{gcc} rather than @command{f2c} calling conventions.) @item Do something useful with @code{doiter} references where possible. *************** for Fortran-77 code.) *** 13643,13649 **** @cindex porting, simplify @cindex simplify porting ! Making @code{g77} easier to configure, port, build, and install, either as a single-system compiler or as a cross-compiler, would be very useful. --- 11344,11350 ---- @cindex porting, simplify @cindex simplify porting ! 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. *************** very useful. *** 13651,13657 **** @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 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. --- 11352,11358 ---- @item A new library (replacing @code{libg2c}) should improve portability as well as produce more optimal code. ! 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. *************** Fortran intrinsics that get Fortran unit *** 13662,13669 **** 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 main program unit, instead of compiling something that must be called by a library implementation of @code{main()}. --- 11363,11370 ---- descriptors. @item ! 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()}. *************** not requiring programmers to start their *** 13676,13682 **** @item The GBE needs to understand the difference between alignment requirements and desires. ! For example, on Intel x86 machines, @code{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 --- 11377,11383 ---- @item The GBE needs to understand the difference between alignment requirements and desires. ! 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 *************** processor @emph{requirements}. *** 13688,13696 **** @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 general, in the long run. ! Some of these items really pertain to improving @code{g77} internals so that some popular extensions can be more easily supported. @itemize @bullet --- 11389,11397 ---- @cindex extensions, more These extensions are not the sort of things users ask for ``by name'', ! 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 @command{g77} internals so that some popular extensions can be more easily supported. @itemize @bullet *************** later @code{UNIT=} in the first example *** 13729,13735 **** Make sure this is what users of this feature would expect. @item ! Currently @code{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 --- 11430,11436 ---- Make sure this is what users of this feature would expect. @item ! 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 *************** This requires either major *** 13747,13753 **** changes to @code{libg2c} or its replacement. @item ! F90 and @code{g77} probably disagree about label scoping relative to @code{INTERFACE} and @code{END INTERFACE}, and their contained procedure interface bodies (blocks?). --- 11448,11454 ---- changes to @code{libg2c} or its replacement. @item ! F90 and @command{g77} probably disagree about label scoping relative to @code{INTERFACE} and @code{END INTERFACE}, and their contained procedure interface bodies (blocks?). *************** other (besides @code{CLOSE}) to assist i *** 13771,13777 **** @node Machine Model @section Machine Model ! This items pertain to generalizing @code{g77}'s view of the machine model to more fully accept whatever the GBE provides it via its configuration. --- 11472,11478 ---- @node Machine Model @section Machine Model ! 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. *************** provides it via its configuration. *** 13780,13786 **** 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 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 --- 11481,11487 ---- 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 @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 *************** what to stuff in elements of the arrays. *** 13789,13800 **** @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 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 and help determine if the compiler works (especially with whatever libraries are installed) after building. @end itemize --- 11490,11501 ---- @item Rely more and more on back-end info and capabilities, especially in the ! 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 @command{g77} before building and help determine if the compiler works (especially with whatever libraries are installed) after building. @end itemize *************** libraries are installed) after building. *** 13802,13818 **** @node Internals Documentation @section Internals Documentation ! Better info on how @code{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. @node Internals Improvements @section Internals Improvements ! Some more items that would make @code{g77} more reliable and easier to maintain: @itemize @bullet --- 11503,11517 ---- @node Internals Documentation @section Internals Documentation ! Better info on how @command{g77} works and how to port it is needed. @xref{Front End}, which contains some information ! on @command{g77} internals. @node Internals Improvements @section Internals Improvements ! Some more items that would make @command{g77} more reliable and easier to maintain: @itemize @bullet *************** important to preserve the left-to-right- *** 13829,13835 **** of diagnostics.) @item ! Come up with better naming conventions for @samp{-D} to establish requirements to achieve desired implementation dialect via @file{proj.h}. @item --- 11528,11534 ---- of diagnostics.) @item ! Come up with better naming conventions for @option{-D} to establish requirements to achieve desired implementation dialect via @file{proj.h}. @item *************** not worth the time). *** 13866,13872 **** @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 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()}. --- 11565,11571 ---- @item Implement C macros @samp{RETURNS(value)} and @samp{SETS(something,value)} in @file{proj.h} ! 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()}. *************** statements.) *** 13945,13955 **** @chapter Diagnostics @cindex diagnostics ! Some diagnostics produced by @code{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} command that displays the explanation is given within square brackets in the diagnostic. For example: --- 11644,11654 ---- @chapter Diagnostics @cindex diagnostics ! 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 @command{info} command that displays the explanation is given within square brackets in the diagnostic. For example: *************** For example: *** 13958,13964 **** 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 documentation, menu item @samp{M}, submenu item @samp{FOOEY}, which is displayed by typing the UNIX command @samp{info -f g77 M FOOEY}. --- 11657,11663 ---- foo.f:5: Invalid statement [info -f g77 M FOOEY] @end smallexample ! 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}. *************** this chapter, which is the very text you *** 13972,13978 **** @samp{FOOEY} is the menu item to select. @iftex ! In this printed version of the @code{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 --- 11671,11677 ---- @samp{FOOEY} is the menu item to select. @iftex ! 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 *************** the same expectation regarding interpret *** 14125,14135 **** @itemize @bullet @item ! Compile with the @code{g77} option @samp{-ff90}, to enable the Fortran 90 interpretation. @item ! Compile with the @code{g77} options @samp{-fno-f90 -fugly-complex}, to enable the non-Fortran-90 interpretations. @end itemize --- 11824,11834 ---- @itemize @bullet @item ! Compile with the @command{g77} option @option{-ff90}, to enable the Fortran 90 interpretation. @item ! Compile with the @command{g77} options @samp{-fno-f90 -fugly-complex}, to enable the non-Fortran-90 interpretations. @end itemize *************** in another program unit in the same sour *** 14203,14209 **** 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 the name as an intrinsic in both cases. After verifying that the program unit making implicit use --- 11902,11908 ---- 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 @command{g77} recognizes the name as an intrinsic in both cases. After verifying that the program unit making implicit use *************** add an @samp{INTRINSIC @var{intrinsic}} *** 14212,14226 **** program unit to prevent this warning. This and related warnings are disabled by using ! the @samp{-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 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}. @node INTGLOB @section @code{INTGLOB} --- 11911,11925 ---- program unit to prevent this warning. This and related warnings are disabled by using ! 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 @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 @command{g77}. @node INTGLOB @section @code{INTGLOB} *************** block or a program unit) in one program *** 14235,14241 **** 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} recognizes the name as an intrinsic in the program unit that references the name, a situation that would likely produce incorrect code. --- 11934,11940 ---- 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 @command{g77} recognizes the name as an intrinsic in the program unit that references the name, a situation that would likely produce incorrect code. *************** END *** 14255,14268 **** 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 @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 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 --- 11954,11967 ---- 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 @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 @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 *************** program unit to prevent this warning. *** 14275,14294 **** 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}} 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. 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 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}. @node LEX @section @code{LEX} --- 11974,11993 ---- Or, if you believe the program unit is designed to invoke the program-defined procedure instead of the intrinsic (as ! 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 @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 @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 @command{g77}. @node LEX @section @code{LEX} *************** of parentheses, it might be Lisp source *** 14325,14331 **** contains lots of bugs, it might be C++ source code. @item ! The source file contains free-form Fortran code, but @samp{-ffree-form} was not specified on the command line to compile it. Free form is a newer form for Fortran code. --- 12024,12030 ---- contains lots of bugs, it might be C++ source code. @item ! 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. *************** requires preprocessing. *** 14417,14442 **** 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}. 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} 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 the language @samp{f77-cpp-input} for Fortran files that require preprocessing. ! @xref{Overall Options,,gcc,Using and Porting GNU CC}. @item The source file is preprocessed, and the results of preprocessing --- 12116,12142 ---- If the file's suffix is @samp{.f}, @samp{.for}, or @samp{.FOR}, the file normally will be compiled @emph{without} preprocessing ! 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}. ! @command{g77} compiles files with such names @emph{with} preprocessing. @pindex cpp @cindex preprocessor @cindex cpp program @cindex programs, cpp ! @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,,Options Controlling the Kind of ! Output,gcc,Using the GNU Compiler Collection (GCC)}. @item The source file is preprocessed, and the results of preprocessing *************** Other disagreements are diagnosed via wa *** 14485,14500 **** @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 to inline only those procedure invocations that are @emph{preceded} by the corresponding procedure definitions. ! If the @code{gcc} back end is changed to inline ``forward references'', in which invocations precede definitions, ! the @code{g77} front end will be changed to treat both orderings as errors, accordingly. ! The sorts of disagreements that are diagnosed by @code{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; --- 12185,12200 ---- @cindex in-line code @cindex compilation, in-line This distinction, between warnings and errors, ! 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 @command{gcc} back end is changed to inline ``forward references'', in which invocations precede definitions, ! the @command{g77} front end will be changed to treat both orderings as errors, accordingly. ! 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; *************** in a Fortran program @emph{should} be fi *** 14505,14522 **** 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. ! The @samp{-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} suppresses all of these diagnostics. ! (@samp{-Wno-globals} by itself disables only the warnings, not the errors.) ! After using @samp{-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 --- 12205,12222 ---- 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 @option{-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 @option{-Wno-globals} option as well as @option{-fno-globals} suppresses all of these diagnostics. ! (@option{-Wno-globals} by itself disables only the warnings, not the errors.) ! 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 *************** without exhibiting any other outward man *** 14529,14542 **** @section @code{LINKFAIL} @noindent ! 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 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} might solve this problem, e.g.@: by adding @smallexample BOOT_CFLAGS='-mminimal-toc -O2 -g' --- 12229,12242 ---- @section @code{LINKFAIL} @noindent ! 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 @option{-mminimal-toc} might solve this problem, e.g.@: by adding @smallexample BOOT_CFLAGS='-mminimal-toc -O2 -g' diff -Nrc3pad gcc-3.0.4/gcc/f/g77install.texi gcc-3.1/gcc/f/g77install.texi *** gcc-3.0.4/gcc/f/g77install.texi Sun Jun 10 11:12:55 2001 --- gcc-3.1/gcc/f/g77install.texi Thu Jan 1 00:00:00 1970 *************** *** 1,14 **** - @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. - - @set last-update-install 2001-06-10 - - @include root.texi - - @node Installation - @chapter Installing GNU Fortran - @cindex installing, GNU Fortran - - The information describing how to install @code{g77} is contained - in the @value{which-gcc} installation procedures. --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/f/g77spec.c gcc-3.1/gcc/f/g77spec.c *** gcc-3.0.4/gcc/f/g77spec.c Fri Jan 12 17:28:23 2001 --- gcc-3.1/gcc/f/g77spec.c Thu Jan 31 19:36:24 2002 *************** *** 1,5 **** /* Specific flags and argument handling of the Fortran front-end. ! Copyright (C) 1997, 1999, 2000 Free Software Foundation, Inc. This file is part of GNU CC. --- 1,5 ---- /* Specific flags and argument handling of the Fortran front-end. ! Copyright (C) 1997, 1999, 2000, 2001, 2002 Free Software Foundation, Inc. This file is part of GNU CC. *************** Boston, MA 02111-1307, USA. */ *** 53,58 **** --- 53,62 ---- #define MATH_LIBRARY "-lm" #endif + #ifndef FORTRAN_INIT + #define FORTRAN_INIT "-lfrtbegin" + #endif + #ifndef FORTRAN_LIBRARY #define FORTRAN_LIBRARY "-lg2c" #endif *************** lookup_option (xopt, xskip, xarg, text) *** 190,195 **** --- 194,201 ---- 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; *************** lang_specific_driver (in_argc, in_argv, *** 270,282 **** link in libf2c. */ const 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; - /* 0 => -xnone in effect. 1 => -xfoo in effect. */ int saw_speclang = 0; --- 276,281 ---- *************** lang_specific_driver (in_argc, in_argv, *** 286,291 **** --- 285,293 ---- 2 => last two args were -l -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'); *************** lang_specific_driver (in_argc, in_argv, *** 324,337 **** { 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; } --- 326,337 ---- *************** lang_specific_driver (in_argc, in_argv, *** 349,371 **** /* 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 (Fortran Frontend version %s)\n", - version_string, ffe_version_string); verbose = 1; break; --- 349,365 ---- *************** lang_specific_driver (in_argc, in_argv, *** 380,397 **** case OPTION_version: printf ("\ ! GNU Fortran %s\n\ ! Copyright (C) 2001 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\ \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); exit (0); break; --- 374,388 ---- case OPTION_version: printf ("\ ! 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\ ! ", version_string, ffe_version_string); exit (0); break; *************** or type the command `info -f g77 Copying *** 400,443 **** 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: fatal ("--driver no longer supported"); break; default: - add_version_magic = 0; break; } --- 391,401 ---- *************** For bug reporting instructions, please s *** 451,457 **** } if ((n_outfiles != 0) && (n_infiles == 0)) ! fatal ("No input files; unwilling to write output files"); /* Second pass through arglist, transforming arguments as appropriate. */ --- 409,419 ---- } if ((n_outfiles != 0) && (n_infiles == 0)) ! 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. */ *************** For bug reporting instructions, please s *** 518,524 **** if (saw_library == 1) saw_library = 2; /* -l -lm. */ else ! append_arg (FORTRAN_LIBRARY); } else if (strcmp (argv[i], FORTRAN_LIBRARY) == 0) saw_library = 1; /* -l. */ --- 480,493 ---- if (saw_library == 1) saw_library = 2; /* -l -lm. */ else ! { ! 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. */ *************** For bug reporting instructions, please s *** 534,540 **** /* Append `-lg2c -lm' as necessary. */ ! if (! add_version_magic && library) { /* Doing a link and no -nostdlib. */ if (saw_speclang) append_arg ("-xnone"); --- 503,509 ---- /* Append `-lg2c -lm' as necessary. */ ! if (library) { /* Doing a link and no -nostdlib. */ if (saw_speclang) append_arg ("-xnone"); *************** For bug reporting instructions, please s *** 542,547 **** --- 511,521 ---- switch (saw_library) { case 0: + if (0 == use_init) + { + append_arg (FORTRAN_INIT); + use_init = 1; + } append_arg (library); case 1: if (need_math) *************** For bug reporting instructions, please s *** 550,562 **** break; } } ! else if (add_version_magic && verbose) { ! append_arg ("-c"); ! append_arg ("-xf77-version"); ! append_arg ("/dev/null"); ! append_arg ("-xnone"); } if (verbose && g77_newargv != g77_xargv) --- 524,546 ---- break; } } ! ! #ifdef ENABLE_SHARED_LIBGCC ! if (library) { ! 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 -Nrc3pad gcc-3.0.4/gcc/f/global.c gcc-3.1/gcc/f/global.c *** gcc-3.0.4/gcc/f/global.c Sat Mar 27 10:23:48 1999 --- gcc-3.1/gcc/f/global.c Wed Sep 12 16:52:41 2001 *************** the Free Software Foundation, 59 Temple *** 60,66 **** #if FFEGLOBAL_ENABLED static ffenameSpace ffeglobal_filewide_ = NULL; ! static const char *ffeglobal_type_string_[] = { [FFEGLOBAL_typeNONE] "??", [FFEGLOBAL_typeMAIN] "main program", --- 60,66 ---- #if FFEGLOBAL_ENABLED static ffenameSpace ffeglobal_filewide_ = NULL; ! static const char *const ffeglobal_type_string_[] = { [FFEGLOBAL_typeNONE] "??", [FFEGLOBAL_typeMAIN] "main program", diff -Nrc3pad gcc-3.0.4/gcc/f/global.h gcc-3.1/gcc/f/global.h *** gcc-3.0.4/gcc/f/global.h Sat Mar 27 10:23:49 1999 --- gcc-3.1/gcc/f/global.h Wed Oct 17 22:34:52 2001 *************** the Free Software Foundation, 59 Temple *** 27,34 **** /* Allow multiple inclusion to work. */ ! #ifndef _H_f_global ! #define _H_f_global /* Simple definitions and enumerations. */ --- 27,34 ---- /* Allow multiple inclusion to work. */ ! #ifndef GCC_F_GLOBAL_H ! #define GCC_F_GLOBAL_H /* Simple definitions and enumerations. */ *************** void ffeglobal_terminate_1 (void); *** 153,165 **** /* 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) --- 153,159 ---- *************** void ffeglobal_terminate_1 (void); *** 197,200 **** /* End of #include file. */ ! #endif --- 191,195 ---- /* End of #include file. */ ! #endif /* ! GCC_F_GLOBAL_H */ ! diff -Nrc3pad gcc-3.0.4/gcc/f/implic.c gcc-3.1/gcc/f/implic.c *** gcc-3.0.4/gcc/f/implic.c Sat Mar 27 10:23:50 1999 --- gcc-3.1/gcc/f/implic.c Mon Feb 4 16:07:58 2002 *************** *** 1,5 **** /* implic.c -- Implementation File (module.c template V1.0) ! Copyright (C) 1995 Free Software Foundation, Inc. Contributed by James Craig Burley. This file is part of GNU Fortran. --- 1,5 ---- /* implic.c -- Implementation File (module.c template V1.0) ! Copyright (C) 1995, 2002 Free Software Foundation, Inc. Contributed by James Craig Burley. This file is part of GNU Fortran. *************** static ffeimplic_ *** 92,98 **** ffeimplic_lookup_ (unsigned char c) { /* NOTE: This is definitely ASCII-specific!! */ ! if (ISALPHA (c) || (c == '_')) return &ffeimplic_table_[c - 'A']; return NULL; } --- 92,98 ---- ffeimplic_lookup_ (unsigned char c) { /* NOTE: This is definitely ASCII-specific!! */ ! if (ISIDST (c)) return &ffeimplic_table_[c - 'A']; return NULL; } *************** ffeimplic_establish_symbol (ffesymbol s) *** 199,204 **** --- 199,205 ---- if (ffe_is_warn_implicit ()) { + /* xgettext:no-c-format */ ffebad_start_msg ("Implicit declaration of `%A' at %0", FFEBAD_severityWARNING); ffebad_here (0, ffesymbol_where_line (s), diff -Nrc3pad gcc-3.0.4/gcc/f/implic.h gcc-3.1/gcc/f/implic.h *** gcc-3.0.4/gcc/f/implic.h Sat Mar 27 10:23:51 1999 --- gcc-3.1/gcc/f/implic.h Sat May 26 01:31:46 2001 *************** the Free Software Foundation, 59 Temple *** 27,34 **** /* Allow multiple inclusion to work. */ ! #ifndef _H_f_implic ! #define _H_f_implic /* Simple definitions and enumerations. */ --- 27,34 ---- /* Allow multiple inclusion to work. */ ! #ifndef GCC_F_IMPLIC_H ! #define GCC_F_IMPLIC_H /* Simple definitions and enumerations. */ *************** void ffeimplic_terminate_2 (void); *** 71,74 **** /* End of #include file. */ ! #endif --- 71,74 ---- /* End of #include file. */ ! #endif /* ! GCC_F_IMPLIC_H */ diff -Nrc3pad gcc-3.0.4/gcc/f/info-k.def gcc-3.1/gcc/f/info-k.def *** gcc-3.0.4/gcc/f/info-k.def Mon Feb 15 18:16:56 1999 --- gcc-3.1/gcc/f/info-k.def Wed Jan 23 03:01:53 2002 *************** *** 1,5 **** /* info-k.def -- Public #include File (module.h template V1.0) ! Copyright (C) 1995 Free Software Foundation, Inc. Contributed by James Craig Burley. This file is part of GNU Fortran. --- 1,5 ---- /* info-k.def -- Public #include File (module.h template V1.0) ! Copyright (C) 1995, 2002 Free Software Foundation, Inc. Contributed by James Craig Burley. This file is part of GNU Fortran. *************** the Free Software Foundation, 59 Temple *** 25,37 **** 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", "~") --- 25,41 ---- Modifications: */ ! # ! /* Kind messages are used in diagnostic location reports of the ! form ": In function `foo': ". */ ! ! 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 -Nrc3pad gcc-3.0.4/gcc/f/info.c gcc-3.1/gcc/f/info.c *** gcc-3.0.4/gcc/f/info.c Sat Mar 27 10:23:52 1999 --- gcc-3.1/gcc/f/info.c Wed Jan 23 03:01:53 2002 *************** *** 1,5 **** /* info.c -- Implementation File (module.c template V1.0) ! Copyright (C) 1995 Free Software Foundation, Inc. Contributed by James Craig Burley. This file is part of GNU Fortran. --- 1,5 ---- /* info.c -- Implementation File (module.c template V1.0) ! Copyright (C) 1995, 2002 Free Software Foundation, Inc. Contributed by James Craig Burley. This file is part of GNU Fortran. *************** the Free Software Foundation, 59 Temple *** 55,75 **** /* Static objects accessed by functions in this module. */ ! static const char *ffeinfo_basictype_string_[] = { #define FFEINFO_BASICTYPE(KWD,LNAM,SNAM) SNAM, #include "info-b.def" #undef FFEINFO_BASICTYPE }; ! static const char *ffeinfo_kind_message_[] = { ! #define FFEINFO_KIND(KWD,LNAM,SNAM) LNAM, #include "info-k.def" #undef FFEINFO_KIND }; ! static const char *ffeinfo_kind_string_[] = { #define FFEINFO_KIND(KWD,LNAM,SNAM) SNAM, --- 55,75 ---- /* Static objects accessed by functions in this module. */ ! static const char *const ffeinfo_basictype_string_[] = { #define FFEINFO_BASICTYPE(KWD,LNAM,SNAM) SNAM, #include "info-b.def" #undef FFEINFO_BASICTYPE }; ! static const char *const ffeinfo_kind_message_[] = { ! #define FFEINFO_KIND(kwd,msgid,snam) msgid, #include "info-k.def" #undef FFEINFO_KIND }; ! static const char *const ffeinfo_kind_string_[] = { #define FFEINFO_KIND(KWD,LNAM,SNAM) SNAM, *************** static const char *ffeinfo_kind_string_[ *** 77,83 **** #undef FFEINFO_KIND }; static ffeinfoBasictype ffeinfo_combine_[FFEINFO_basictype][FFEINFO_basictype]; ! static const char *ffeinfo_kindtype_string_[] = { "", --- 77,83 ---- #undef FFEINFO_KIND }; static ffeinfoBasictype ffeinfo_combine_[FFEINFO_basictype][FFEINFO_basictype]; ! static const char *const ffeinfo_kindtype_string_[] = { "", *************** static const char *ffeinfo_kindtype_stri *** 91,105 **** "8", "*", }; ! static const char *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 functions (internal). */ --- 91,104 ---- "8", "*", }; ! 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]; /* Static functions (internal). */ diff -Nrc3pad gcc-3.0.4/gcc/f/info.h gcc-3.1/gcc/f/info.h *** gcc-3.0.4/gcc/f/info.h Sat Mar 27 10:23:53 1999 --- gcc-3.1/gcc/f/info.h Sat May 26 01:31:46 2001 *************** the Free Software Foundation, 59 Temple *** 29,36 **** /* Allow multiple inclusion to work. */ ! #ifndef _H_f_info ! #define _H_f_info /* Simple definitions and enumerations. */ --- 29,36 ---- /* Allow multiple inclusion to work. */ ! #ifndef GCC_F_INFO_H ! #define GCC_F_INFO_H /* Simple definitions and enumerations. */ *************** ffetype ffeinfo_type (ffeinfoBasictype b *** 183,186 **** /* End of #include file. */ ! #endif --- 183,186 ---- /* End of #include file. */ ! #endif /* ! GCC_F_INFO_H */ diff -Nrc3pad gcc-3.0.4/gcc/f/intdoc.c gcc-3.1/gcc/f/intdoc.c *** gcc-3.0.4/gcc/f/intdoc.c Thu Mar 15 19:02:13 2001 --- gcc-3.1/gcc/f/intdoc.c Wed Feb 6 21:49:42 2002 *************** *** 1,5 **** /* intdoc.c ! Copyright (C) 1997, 2000 Free Software Foundation, Inc. Contributed by James Craig Burley. This file is part of GNU Fortran. --- 1,5 ---- /* intdoc.c ! Copyright (C) 1997, 2000, 2001 Free Software Foundation, Inc. Contributed by James Craig Burley. This file is part of GNU Fortran. *************** Usage: intdoc > intdoc.texi\n\ *** 70,108 **** struct _ffeintrin_name_ { ! const char *name_uc; ! const char *name_lc; ! const char *name_ic; ! ffeintrinGen generic; ! ffeintrinSpec specific; }; struct _ffeintrin_gen_ { ! const char *name; /* Name as seen in program. */ ! ffeintrinSpec specs[2]; }; struct _ffeintrin_spec_ { ! const char *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; }; 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; }; ! static struct _ffeintrin_name_ names[] = { #define DEFNAME(UPPER,LOWER,MIXED,GEN,SPEC) \ { UPPER, LOWER, MIXED, FFEINTRIN_ ## GEN, FFEINTRIN_ ## SPEC }, #define DEFGEN(CODE,NAME,SPEC1,SPEC2) --- 70,105 ---- struct _ffeintrin_name_ { ! 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 *const name; /* Name as seen in program. */ ! const ffeintrinSpec specs[2]; }; struct _ffeintrin_spec_ { ! const char *const name; /* Uppercase name as seen in source code, lowercase if no source name, "none" if no name at all (NONE case). */ ! const bool is_actualarg; /* Ok to pass as actual arg if -pedantic. */ ! const ffeintrinFamily family; ! const ffeintrinImp implementation; }; struct _ffeintrin_imp_ { ! const char *const name; /* Name of implementation. */ ! const char *const control; }; ! 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) *************** static struct _ffeintrin_name_ names[] = *** 117,123 **** #undef DEFIMPY }; ! static struct _ffeintrin_gen_ gens[] = { #define DEFNAME(UPPER,LOWER,MIXED,GEN,SPEC) #define DEFGEN(CODE,NAME,SPEC1,SPEC2) \ { NAME, { SPEC1, SPEC2, }, }, --- 114,120 ---- #undef DEFIMPY }; ! static const struct _ffeintrin_gen_ gens[] = { #define DEFNAME(UPPER,LOWER,MIXED,GEN,SPEC) #define DEFGEN(CODE,NAME,SPEC1,SPEC2) \ { NAME, { SPEC1, SPEC2, }, }, *************** static struct _ffeintrin_gen_ gens[] = { *** 132,154 **** #undef DEFIMPY }; ! static 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 --- 129,142 ---- #undef DEFIMPY }; ! 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) #define DEFIMP(CODE,NAME,GFRTDIRECT,GFRTF2C,GFRTGNU,CONTROL) \ { NAME, CONTROL }, #define DEFIMPY(CODE,NAME,GFRTDIRECT,GFRTF2C,GFRTGNU,CONTROL,Y2KBAD) \ { NAME, CONTROL }, #include "intrin.def" #undef DEFNAME #undef DEFGEN *************** static struct _ffeintrin_imp_ imps[] = { *** 157,163 **** #undef DEFIMPY }; ! static struct _ffeintrin_spec_ specs[] = { #define DEFNAME(UPPER,LOWER,MIXED,GEN,SPEC) #define DEFGEN(CODE,NAME,SPEC1,SPEC2) #define DEFSPEC(CODE,NAME,CALLABLE,FAMILY,IMP) \ --- 145,151 ---- #undef DEFIMPY }; ! 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) \ *************** static struct _ffeintrin_spec_ specs[] = *** 171,187 **** #undef DEFIMPY }; ! struct cc_pair { ffeintrinImp imp; const char *text; }; static const char *descriptions[FFEINTRIN_imp] = { 0 }; ! static 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[] = { #define DEFDOC(IMP,SUMMARY,DESCRIPTION) { FFEINTRIN_imp ## IMP, SUMMARY }, #include "intdoc.h0" #undef DEFDOC --- 159,175 ---- #undef DEFIMPY }; ! struct cc_pair { const ffeintrinImp imp; const char *const text; }; static const char *descriptions[FFEINTRIN_imp] = { 0 }; ! 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 const struct cc_pair cc_summaries[] = { #define DEFDOC(IMP,SUMMARY,DESCRIPTION) { FFEINTRIN_imp ## IMP, SUMMARY }, #include "intdoc.h0" #undef DEFDOC *************** dumpimp (int menu, const char *name, con *** 411,425 **** for (c = summaries[imp]; c[0] != '\0'; ++c) { ! if ((c[0] == '@') ! && (c[1] >= '0') ! && (c[1] <= '9')) { int argno = c[1] - '0'; c += 2; ! while ((c[0] >= '0') ! && (c[0] <= '9')) { argno = 10 * argno + (c[0] - '0'); ++c; --- 399,410 ---- for (c = summaries[imp]; c[0] != '\0'; ++c) { ! if (c[0] == '@' && ISDIGIT (c[1])) { int argno = c[1] - '0'; c += 2; ! while (ISDIGIT (c[0])) { argno = 10 * argno + (c[0] - '0'); ++c; *************** external procedure.\n\ *** 507,514 **** const char *arg_string; const char *arg_info; ! if ((c[colon + 1] >= '0') ! && (c[colon + 1] <= '9')) { other_arg = c[colon + 1] - '0'; arg_string = argument_name_string (imp, other_arg); --- 492,498 ---- const char *arg_string; const char *arg_info; ! if (ISDIGIT (c[colon + 1])) { other_arg = c[colon + 1] - '0'; arg_string = argument_name_string (imp, other_arg); *************** this intrinsic is valid only when used a *** 560,568 **** 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')) { assert (other_arg >= 0); --- 544,550 ---- 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] == '=' && ISDIGIT (c[colon + 1])) { assert (other_arg >= 0); *************** types of all the arguments.\n\n"); *** 727,732 **** --- 709,718 ---- argument_name_string (imp, 0)); break; + case 'N': + printf ("@code{INTEGER} not wider than the default kind"); + break; + default: assert ("Ia" == NULL); break; *************** types of all the arguments.\n\n"); *** 750,755 **** --- 736,745 ---- argument_name_string (imp, 0)); break; + case 'N': + printf ("@code{LOGICAL} not wider than the default kind"); + break; + default: assert ("La" == NULL); break; *************** types of all the arguments.\n\n"); *** 797,802 **** --- 787,796 ---- argument_name_string (imp, 0)); break; + case 'N': + printf ("@code{INTEGER} or @code{LOGICAL} not wider than the default kind"); + break; + default: assert ("Ba" == NULL); break; *************** Description:\n\ *** 1023,1037 **** while (c[0] != '\0') { ! if ((c[0] == '@') ! && (c[1] >= '0') ! && (c[1] <= '9')) { int argno = c[1] - '0'; c += 2; ! while ((c[0] >= '0') ! && (c[0] <= '9')) { argno = 10 * argno + (c[0] - '0'); ++c; --- 1017,1028 ---- while (c[0] != '\0') { ! if (c[0] == '@' && ISDIGIT (c[1])) { int argno = c[1] - '0'; c += 2; ! while (ISDIGIT (c[0])) { argno = 10 * argno + (c[0] - '0'); ++c; diff -Nrc3pad gcc-3.0.4/gcc/f/intdoc.in gcc-3.1/gcc/f/intdoc.in *** gcc-3.0.4/gcc/f/intdoc.in Mon May 3 16:07:20 1999 --- gcc-3.1/gcc/f/intdoc.in Tue Jul 10 09:41:04 2001 *************** If @var{@1@} is type @code{COMPLEX}, the *** 55,65 **** value is computed as: @example ! SQRT(REALPART(@var{@1@})**2, IMAGPART(@var{@1@})**2) @end example @noindent ! Otherwise, it is computed by negating the @var{@1@} if it is negative, or returning @var{@1@}. @xref{Sign Intrinsic}, for how to explicitly --- 55,65 ---- value is computed as: @example ! SQRT(REALPART(@var{@1@})**2+IMAGPART(@var{@1@})**2) @end example @noindent ! Otherwise, it is computed by negating @var{@1@} if it is negative, or returning @var{@1@}. @xref{Sign Intrinsic}, for how to explicitly diff -Nrc3pad gcc-3.0.4/gcc/f/intdoc.texi gcc-3.1/gcc/f/intdoc.texi *** gcc-3.0.4/gcc/f/intdoc.texi Wed Feb 20 19:40:47 2002 --- gcc-3.1/gcc/f/intdoc.texi Wed Feb 6 21:49:42 2002 *************** If @var{A} is type @code{COMPLEX}, the a *** 868,878 **** value is computed as: @example ! SQRT(REALPART(@var{A})**2, IMAGPART(@var{A})**2) @end example @noindent ! Otherwise, it is computed by negating the @var{A} if it is negative, or returning @var{A}. @xref{Sign Intrinsic}, for how to explicitly --- 868,878 ---- value is computed as: @example ! SQRT(REALPART(@var{A})**2+IMAGPART(@var{A})**2) @end example @noindent ! Otherwise, it is computed by negating @var{A} if it is negative, or returning @var{A}. @xref{Sign Intrinsic}, for how to explicitly *************** BesJN(@var{N}, @var{X}) *** 1673,1679 **** BesJN: @code{REAL} function, the @samp{KIND=} value of the type being that of argument @var{X}. @noindent ! @var{N}: @code{INTEGER}; scalar; INTENT(IN). @noindent @var{X}: @code{REAL}; scalar; INTENT(IN). --- 1673,1679 ---- BesJN: @code{REAL} function, the @samp{KIND=} value of the type being that of argument @var{X}. @noindent ! @var{N}: @code{INTEGER} not wider than the default kind; scalar; INTENT(IN). @noindent @var{X}: @code{REAL}; scalar; INTENT(IN). *************** BesYN(@var{N}, @var{X}) *** 1748,1754 **** BesYN: @code{REAL} function, the @samp{KIND=} value of the type being that of argument @var{X}. @noindent ! @var{N}: @code{INTEGER}; scalar; INTENT(IN). @noindent @var{X}: @code{REAL}; scalar; INTENT(IN). --- 1748,1754 ---- BesYN: @code{REAL} function, the @samp{KIND=} value of the type being that of argument @var{X}. @noindent ! @var{N}: @code{INTEGER} not wider than the default kind; scalar; INTENT(IN). @noindent @var{X}: @code{REAL}; scalar; INTENT(IN). *************** DbesJN(@var{N}, @var{X}) *** 3113,3119 **** DbesJN: @code{REAL(KIND=2)} function. @noindent ! @var{N}: @code{INTEGER}; scalar; INTENT(IN). @noindent @var{X}: @code{REAL(KIND=2)}; scalar; INTENT(IN). --- 3113,3119 ---- DbesJN: @code{REAL(KIND=2)} function. @noindent ! @var{N}: @code{INTEGER} not wider than the default kind; scalar; INTENT(IN). @noindent @var{X}: @code{REAL(KIND=2)}; scalar; INTENT(IN). *************** DbesYN(@var{N}, @var{X}) *** 3194,3200 **** DbesYN: @code{REAL(KIND=2)} function. @noindent ! @var{N}: @code{INTEGER}; scalar; INTENT(IN). @noindent @var{X}: @code{REAL(KIND=2)}; scalar; INTENT(IN). --- 3194,3200 ---- DbesYN: @code{REAL(KIND=2)} function. @noindent ! @var{N}: @code{INTEGER} not wider than the default kind; scalar; INTENT(IN). @noindent @var{X}: @code{REAL(KIND=2)}; scalar; INTENT(IN). *************** CALL Exit(@var{Status}) *** 4385,4391 **** @end example @noindent ! @var{Status}: @code{INTEGER}; OPTIONAL; scalar; INTENT(IN). @noindent Intrinsic groups: @code{unix}. --- 4385,4391 ---- @end example @noindent ! @var{Status}: @code{INTEGER} not wider than the default kind; OPTIONAL; scalar; INTENT(IN). @noindent Intrinsic groups: @code{unix}. *************** CALL GetArg(@var{Pos}, @var{Value}) *** 5249,5255 **** @end example @noindent ! @var{Pos}: @code{INTEGER}; scalar; INTENT(IN). @noindent @var{Value}: @code{CHARACTER}; scalar; INTENT(OUT). --- 5249,5255 ---- @end example @noindent ! @var{Pos}: @code{INTEGER} not wider than the default kind; scalar; INTENT(IN). @noindent @var{Value}: @code{CHARACTER}; scalar; INTENT(OUT). diff -Nrc3pad gcc-3.0.4/gcc/f/intrin.c gcc-3.1/gcc/f/intrin.c *** gcc-3.0.4/gcc/f/intrin.c Fri Dec 8 03:00:25 2000 --- gcc-3.1/gcc/f/intrin.c Wed Feb 6 21:49:42 2002 *************** *** 1,5 **** /* intrin.c -- Recognize references to intrinsics ! Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. Contributed by James Craig Burley. This file is part of GNU Fortran. --- 1,5 ---- /* intrin.c -- Recognize references to intrinsics ! Copyright (C) 1995, 1996, 1997, 1998, 2002 Free Software Foundation, Inc. Contributed by James Craig Burley. This file is part of GNU Fortran. *************** the Free Software Foundation, 59 Temple *** 32,70 **** struct _ffeintrin_name_ { ! const char *name_uc; ! const char *name_lc; ! const char *name_ic; ! ffeintrinGen generic; ! ffeintrinSpec specific; }; struct _ffeintrin_gen_ { ! const char *name; /* Name as seen in program. */ ! ffeintrinSpec specs[2]; }; struct _ffeintrin_spec_ { ! const char *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; }; 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; }; static ffebad ffeintrin_check_ (ffeintrinImp imp, ffebldOp op, --- 32,68 ---- struct _ffeintrin_name_ { ! 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 *const name; /* Name as seen in program. */ ! const ffeintrinSpec specs[2]; }; struct _ffeintrin_spec_ { ! const char *const name; /* Uppercase name as seen in source code, lowercase if no source name, "none" if no name at all (NONE case). */ ! const bool is_actualarg; /* Ok to pass as actual arg if -pedantic. */ ! const ffeintrinFamily family; ! const ffeintrinImp implementation; }; struct _ffeintrin_imp_ { ! 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, *************** static ffebad ffeintrin_check_ (ffeintri *** 77,83 **** static bool ffeintrin_check_any_ (ffebld arglist); static int ffeintrin_cmp_name_ (const void *name, const void *intrinsic); ! static struct _ffeintrin_name_ ffeintrin_names_[] = { /* Alpha order. */ #define DEFNAME(UPPER,LOWER,MIXED,GEN,SPEC) \ --- 75,81 ---- static bool ffeintrin_check_any_ (ffebld arglist); static int ffeintrin_cmp_name_ (const void *name, const void *intrinsic); ! static const struct _ffeintrin_name_ ffeintrin_names_[] = { /* Alpha order. */ #define DEFNAME(UPPER,LOWER,MIXED,GEN,SPEC) \ *************** static struct _ffeintrin_name_ ffeintrin *** 94,100 **** #undef DEFIMPY }; ! static struct _ffeintrin_gen_ ffeintrin_gens_[] = { #define DEFNAME(UPPER,LOWER,MIXED,GEN,SPEC) --- 92,98 ---- #undef DEFIMPY }; ! static const struct _ffeintrin_gen_ ffeintrin_gens_[] = { #define DEFNAME(UPPER,LOWER,MIXED,GEN,SPEC) *************** static struct _ffeintrin_gen_ ffeintrin_ *** 111,137 **** #undef DEFIMPY }; ! static 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 --- 109,126 ---- #undef DEFIMPY }; ! 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) #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 }, #include "intrin.def" #undef DEFNAME #undef DEFGEN *************** static struct _ffeintrin_imp_ ffeintrin_ *** 140,146 **** #undef DEFIMPY }; ! static struct _ffeintrin_spec_ ffeintrin_specs_[] = { #define DEFNAME(UPPER,LOWER,MIXED,GEN,SPEC) --- 129,135 ---- #undef DEFIMPY }; ! static const struct _ffeintrin_spec_ ffeintrin_specs_[] = { #define DEFNAME(UPPER,LOWER,MIXED,GEN,SPEC) *************** ffeintrin_check_ (ffeintrinImp imp, ffeb *** 425,430 **** --- 414,437 ---- : firstarg_kt; break; + case 'N': + /* Accept integers and logicals not wider than the default integer/logical. */ + if (ffeinfo_basictype (i) == FFEINFO_basictypeINTEGER) + { + okay &= anynum || (ffeinfo_kindtype (i) == FFEINFO_kindtypeINTEGER1 + || ffeinfo_kindtype (i) == FFEINFO_kindtypeINTEGER2 + || ffeinfo_kindtype (i) == FFEINFO_kindtypeINTEGER3); + akt = FFEINFO_kindtypeINTEGER1; /* The default. */ + } + else if (ffeinfo_basictype (i) == FFEINFO_basictypeLOGICAL) + { + okay &= anynum || (ffeinfo_kindtype (i) == FFEINFO_kindtypeLOGICAL1 + || ffeinfo_kindtype (i) == FFEINFO_kindtypeLOGICAL2 + || ffeinfo_kindtype (i) == FFEINFO_kindtypeLOGICAL3); + akt = FFEINFO_kindtypeLOGICAL1; /* The default. */ + } + break; + case '*': default: break; *************** ffeintrin_check_ (ffeintrinImp imp, ffeb *** 633,642 **** { bool okay = TRUE; bool have_anynum = FALSE; ! for (arg = args; arg != NULL; ! arg = (c[colon + 1] == '*') ? ffebld_trail (arg) : NULL) { ffebld a = ffebld_head (arg); ffeinfo i; --- 640,650 ---- { bool okay = TRUE; bool have_anynum = FALSE; + int arg_count=0; ! for (arg = args, arg_count=0; arg != NULL; ! arg = ffebld_trail (arg), arg_count++ ) { ffebld a = ffebld_head (arg); ffeinfo i; *************** ffeintrin_check_ (ffeintrinImp imp, ffeb *** 646,651 **** --- 654,662 ---- 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) *************** ffeintrin_check_any_ (ffebld arglist) *** 1160,1175 **** return FALSE; } ! /* Compare name to intrinsic's name. Uses strcmp on arguments' names. */ static int ffeintrin_cmp_name_ (const void *name, const void *intrinsic) { ! const char *uc = ((const struct _ffeintrin_name_ *) intrinsic)->name_uc; ! const char *lc = ((const struct _ffeintrin_name_ *) intrinsic)->name_lc; ! const char *ic = ((const struct _ffeintrin_name_ *) intrinsic)->name_ic; ! return ffesrc_strcmp_2c (ffe_case_intrin (), name, uc, lc, ic); } /* Return basic type of intrinsic implementation, based on its --- 1171,1219 ---- return FALSE; } ! /* 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 *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 i; } /* Return basic type of intrinsic implementation, based on its *************** ffeintrin_basictype (ffeintrinSpec spec) *** 1195,1201 **** if (ffe_is_f2c ()) gfrt = ffeintrin_imps_[imp].gfrt_f2c; ! else gfrt = ffeintrin_imps_[imp].gfrt_gnu; assert (gfrt != FFECOM_gfrt); --- 1239,1245 ---- if (ffe_is_f2c ()) gfrt = ffeintrin_imps_[imp].gfrt_f2c; ! else gfrt = ffeintrin_imps_[imp].gfrt_gnu; assert (gfrt != FFECOM_gfrt); *************** ffeintrin_fulfill_specific (ffebld *expr *** 1523,1529 **** /* Return run-time index of intrinsic implementation as direct call. */ - #if FFECOM_targetCURRENT == FFECOM_targetGCC ffecomGfrt ffeintrin_gfrt_direct (ffeintrinImp imp) { --- 1567,1572 ---- *************** ffeintrin_gfrt_direct (ffeintrinImp imp) *** 1531,1541 **** 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) { --- 1574,1582 ---- *************** ffeintrin_gfrt_indirect (ffeintrinImp im *** 1545,1551 **** return ffeintrin_imps_[imp].gfrt_gnu; return ffeintrin_imps_[imp].gfrt_f2c; } - #endif void ffeintrin_init_0 () --- 1586,1591 ---- *************** ffeintrin_init_0 () *** 1643,1650 **** } if ((c[colon + 1] != '-') && (c[colon + 1] != '*') ! && ((c[colon + 1] < '0') ! || (c[colon + 1] > '9'))) { fprintf (stderr, "%s: bad COL-spec\n", ffeintrin_imps_[i].name); --- 1683,1689 ---- } if ((c[colon + 1] != '-') && (c[colon + 1] != '*') ! && (! ISDIGIT (c[colon + 1]))) { fprintf (stderr, "%s: bad COL-spec\n", ffeintrin_imps_[i].name); *************** ffeintrin_init_0 () *** 1698,1706 **** } if (c[3] == '[') { ! if (((c[4] < '0') || (c[4] > '9')) || ((c[5] != ']') ! && (++c, (c[4] < '0') || (c[4] > '9') || (c[5] != ']')))) { fprintf (stderr, "%s: bad arg-len\n", --- 1737,1745 ---- } if (c[3] == '[') { ! if ((! ISDIGIT (c[4])) || ((c[5] != ']') ! && (++c, ! ISDIGIT (c[4]) || (c[5] != ']')))) { fprintf (stderr, "%s: bad arg-len\n", *************** ffeintrin_init_0 () *** 1711,1719 **** } if (c[3] == '(') { ! if (((c[4] < '0') || (c[4] > '9')) || ((c[5] != ')') ! && (++c, (c[4] < '0') || (c[4] > '9') || (c[5] != ')')))) { fprintf (stderr, "%s: bad arg-rank\n", --- 1750,1758 ---- } if (c[3] == '(') { ! if ((! ISDIGIT (c[4])) || ((c[5] != ')') ! && (++c, ! ISDIGIT (c[4]) || (c[5] != ')')))) { fprintf (stderr, "%s: bad arg-rank\n", *************** ffeintrin_is_actualarg (ffeintrinSpec sp *** 1758,1770 **** 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)); } --- 1797,1807 ---- diff -Nrc3pad gcc-3.0.4/gcc/f/intrin.def gcc-3.1/gcc/f/intrin.def *** gcc-3.0.4/gcc/f/intrin.def Wed Aug 23 21:16:19 2000 --- gcc-3.1/gcc/f/intrin.def Wed Feb 6 21:49:42 2002 *************** DEFSPEC (NONE, *** 3102,3107 **** --- 3102,3108 ---- 4 (Twice the size of 2) 6 (Twice the size as 3) A Same as first argument + N Not wider than the default kind is: *************** DEFIMP (ALARM, "ALARM", ALARM,,, "--:-: *** 3218,3227 **** DEFIMP (AND, "AND", ,,, "B=:*:I=B*,J=B*") DEFIMP (BESJ0, "BESJ0", L_BESJ0,,, "R=:0:X=R*") DEFIMP (BESJ1, "BESJ1", L_BESJ1,,, "R=:0:X=R*") ! DEFIMP (BESJN, "BESJN", L_BESJN,,, "R=:1:N=I*,X=R*") DEFIMP (BESY0, "BESY0", L_BESY0,,, "R=:0:X=R*") DEFIMP (BESY1, "BESY1", L_BESY1,,, "R=:0:X=R*") ! DEFIMP (BESYN, "BESYN", L_BESYN,,, "R=:1:N=I*,X=R*") DEFIMP (BIT_SIZE, "BIT_SIZE", ,,, "I=:0:I=I*i") DEFIMP (BTEST, "BTEST", ,,, "L1:*:I=I*,Pos=I*") DEFIMP (CDABS, "CDABS", ,CDABS,, "R2:-:A=C2") --- 3219,3228 ---- DEFIMP (AND, "AND", ,,, "B=:*:I=B*,J=B*") DEFIMP (BESJ0, "BESJ0", L_BESJ0,,, "R=:0:X=R*") DEFIMP (BESJ1, "BESJ1", L_BESJ1,,, "R=:0:X=R*") ! DEFIMP (BESJN, "BESJN", L_BESJN,,, "R=:1:N=IN,X=R*") DEFIMP (BESY0, "BESY0", L_BESY0,,, "R=:0:X=R*") DEFIMP (BESY1, "BESY1", L_BESY1,,, "R=:0:X=R*") ! DEFIMP (BESYN, "BESYN", L_BESYN,,, "R=:1:N=IN,X=R*") DEFIMP (BIT_SIZE, "BIT_SIZE", ,,, "I=:0:I=I*i") DEFIMP (BTEST, "BTEST", ,,, "L1:*:I=I*,Pos=I*") DEFIMP (CDABS, "CDABS", ,CDABS,, "R2:-:A=C2") *************** DEFIMPY (DATE, "DATE", DATE,,, "--:-: *** 3242,3251 **** DEFIMP (DATE_AND_TIME, "DATE_AND_TIME", DATE_AND_TIME,,, "--:-:Date=A1w,Time=?A1w,Zone=?A1w,Values=?I1(8)w") DEFIMP (DBESJ0, "DBESJ0", L_BESJ0,,, "R2:-:X=R2") DEFIMP (DBESJ1, "DBESJ1", L_BESJ1,,, "R2:-:X=R2") ! DEFIMP (DBESJN, "DBESJN", L_BESJN,,, "R2:-:N=I*,X=R2") DEFIMP (DBESY0, "DBESY0", L_BESY0,,, "R2:-:X=R2") DEFIMP (DBESY1, "DBESY1", L_BESY1,,, "R2:-:X=R2") ! DEFIMP (DBESYN, "DBESYN", L_BESYN,,, "R2:-:N=I*,X=R2") DEFIMP (DCONJG, "DCONJG", ,DCONJG,, "C2:-:Z=C2") DEFIMP (DERF, "DERF", L_ERF,DERF,, "R2:-:X=R2") DEFIMP (DERFC, "DERFC", L_ERFC,DERFC,, "R2:-:X=R2") --- 3243,3252 ---- DEFIMP (DATE_AND_TIME, "DATE_AND_TIME", DATE_AND_TIME,,, "--:-:Date=A1w,Time=?A1w,Zone=?A1w,Values=?I1(8)w") DEFIMP (DBESJ0, "DBESJ0", L_BESJ0,,, "R2:-:X=R2") DEFIMP (DBESJ1, "DBESJ1", L_BESJ1,,, "R2:-:X=R2") ! DEFIMP (DBESJN, "DBESJN", L_BESJN,,, "R2:-:N=IN,X=R2") DEFIMP (DBESY0, "DBESY0", L_BESY0,,, "R2:-:X=R2") DEFIMP (DBESY1, "DBESY1", L_BESY1,,, "R2:-:X=R2") ! DEFIMP (DBESYN, "DBESYN", L_BESYN,,, "R2:-:N=IN,X=R2") DEFIMP (DCONJG, "DCONJG", ,DCONJG,, "C2:-:Z=C2") DEFIMP (DERF, "DERF", L_ERF,DERF,, "R2:-:X=R2") DEFIMP (DERFC, "DERFC", L_ERFC,DERFC,, "R2:-:X=R2") *************** DEFIMP (ERF, "ERF", L_ERF,ERF,, "R=:0: *** 3258,3264 **** DEFIMP (ERFC, "ERFC", L_ERFC,ERFC,, "R=:0:X=R*") DEFIMP (ETIME_func, "ETIME_func", ETIME,,, "R1:-:TArray=R1(2)w") DEFIMP (ETIME_subr, "ETIME_subr", ETIME,,, "--:-:TArray=R1(2)w,Result=R1w") ! DEFIMP (EXIT, "EXIT", EXIT,,, "--:-:Status=?I*") DEFIMP (FDATE_func, "FDATE_func", FDATE,,, "A1*:-:") DEFIMP (FDATE_subr, "FDATE_subr", FDATE,,, "--:-:Date=A1w") DEFIMP (FGET_func, "FGET_func", FGET,,, "I1:-:C=A1w") --- 3259,3265 ---- DEFIMP (ERFC, "ERFC", L_ERFC,ERFC,, "R=:0:X=R*") DEFIMP (ETIME_func, "ETIME_func", ETIME,,, "R1:-:TArray=R1(2)w") DEFIMP (ETIME_subr, "ETIME_subr", ETIME,,, "--:-:TArray=R1(2)w,Result=R1w") ! DEFIMP (EXIT, "EXIT", EXIT,,, "--:-:Status=?IN") DEFIMP (FDATE_func, "FDATE_func", FDATE,,, "A1*:-:") DEFIMP (FDATE_subr, "FDATE_subr", FDATE,,, "--:-:Date=A1w") DEFIMP (FGET_func, "FGET_func", FGET,,, "I1:-:C=A1w") *************** DEFIMP (FSTAT_subr, "FSTAT_subr", FSTAT, *** 3277,3283 **** DEFIMP (FTELL_func, "FTELL_func", FTELL,,, "I1:-:Unit=I*") DEFIMP (FTELL_subr, "FTELL_subr", FTELL,,, "--:-:Unit=I*,Offset=I1w") DEFIMP (GERROR, "GERROR", GERROR,,, "--:-:Message=A1w") ! DEFIMP (GETARG, "GETARG", GETARG,,, "--:-:Pos=I*,Value=A1w") DEFIMP (GETCWD_func, "GETCWD_func", GETCWD,,, "I1:-:Name=A1w") DEFIMP (GETCWD_subr, "GETCWD_subr", GETCWD,,, "--:-:Name=A1w,Status=?I1w") DEFIMP (GETGID, "GETGID", GETGID,,, "I1:-:") --- 3278,3284 ---- DEFIMP (FTELL_func, "FTELL_func", FTELL,,, "I1:-:Unit=I*") DEFIMP (FTELL_subr, "FTELL_subr", FTELL,,, "--:-:Unit=I*,Offset=I1w") DEFIMP (GERROR, "GERROR", GERROR,,, "--:-:Message=A1w") ! DEFIMP (GETARG, "GETARG", GETARG,,, "--:-:Pos=IN,Value=A1w") DEFIMP (GETCWD_func, "GETCWD_func", GETCWD,,, "I1:-:Name=A1w") DEFIMP (GETCWD_subr, "GETCWD_subr", GETCWD,,, "--:-:Name=A1w,Status=?I1w") DEFIMP (GETGID, "GETGID", GETGID,,, "I1:-:") diff -Nrc3pad gcc-3.0.4/gcc/f/intrin.h gcc-3.1/gcc/f/intrin.h *** gcc-3.0.4/gcc/f/intrin.h Sat Feb 26 20:02:01 2000 --- gcc-3.1/gcc/f/intrin.h Wed Oct 17 22:34:52 2001 *************** the Free Software Foundation, 59 Temple *** 21,28 **** */ ! #ifndef _H_f_intrin ! #define _H_f_intrin #ifndef FFEINTRIN_DOC #define FFEINTRIN_DOC 0 /* 1 means intrinsic documentation only (intdoc.c). */ --- 21,28 ---- */ ! #ifndef GCC_F_INTRIN_H ! #define GCC_F_INTRIN_H #ifndef FFEINTRIN_DOC #define FFEINTRIN_DOC 0 /* 1 means intrinsic documentation only (intdoc.c). */ *************** ffeintrinFamily ffeintrin_family (ffeint *** 105,114 **** 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() --- 105,112 ---- *************** ffeIntrinsicState ffeintrin_state_family *** 134,137 **** /* End of #include file. */ ! #endif --- 132,135 ---- /* End of #include file. */ ! #endif /* ! GCC_F_INTRIN_H */ diff -Nrc3pad gcc-3.0.4/gcc/f/invoke.texi gcc-3.1/gcc/f/invoke.texi *** gcc-3.0.4/gcc/f/invoke.texi Thu Jan 1 00:00:00 1970 --- gcc-3.1/gcc/f/invoke.texi Mon Apr 29 07:58:32 2002 *************** *** 0 **** --- 1,2222 ---- + @c Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002 + @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, 2002 + 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 @gol + -fvxt -fdollar-ok -fno-backslash @gol + -fno-ugly-args -fno-ugly-assign -fno-ugly-assumed @gol + -fugly-comma -fugly-complex -fugly-init -fugly-logint @gol + -fonetrip -ftypeless-boz @gol + -fintrin-case-initcap -fintrin-case-upper @gol + -fintrin-case-lower -fintrin-case-any @gol + -fmatch-case-initcap -fmatch-case-upper @gol + -fmatch-case-lower -fmatch-case-any @gol + -fsource-case-upper -fsource-case-lower @gol + -fsource-case-preserve @gol + -fsymbol-case-initcap -fsymbol-case-upper @gol + -fsymbol-case-lower -fsymbol-case-any @gol + -fcase-strict-upper -fcase-strict-lower @gol + -fcase-initcap -fcase-upper -fcase-lower -fcase-preserve @gol + -ff2c-intrinsics-delete -ff2c-intrinsics-hide @gol + -ff2c-intrinsics-disable -ff2c-intrinsics-enable @gol + -fbadu77-intrinsics-delete -fbadu77-intrinsics-hide @gol + -fbadu77-intrinsics-disable -fbadu77-intrinsics-enable @gol + -ff90-intrinsics-delete -ff90-intrinsics-hide @gol + -ff90-intrinsics-disable -ff90-intrinsics-enable @gol + -fgnu-intrinsics-delete -fgnu-intrinsics-hide @gol + -fgnu-intrinsics-disable -fgnu-intrinsics-enable @gol + -fmil-intrinsics-delete -fmil-intrinsics-hide @gol + -fmil-intrinsics-disable -fmil-intrinsics-enable @gol + -funix-intrinsics-delete -funix-intrinsics-hide @gol + -funix-intrinsics-disable -funix-intrinsics-enable @gol + -fvxt-intrinsics-delete -fvxt-intrinsics-hide @gol + -fvxt-intrinsics-disable -fvxt-intrinsics-enable @gol + -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 @gol + -w -Wno-globals -Wimplicit -Wunused -Wuninitialized @gol + -Wall -Wsurprising @gol + -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 @gol + -ffloat-store -fforce-mem -fforce-addr -fno-inline @gol + -ffast-math -fstrength-reduce -frerun-cse-after-loop @gol + -funsafe-math-optimizations -fno-trapping-math @gol + -fexpensive-optimizations -fdelayed-branch @gol + -fschedule-insns -fschedule-insn2 -fcaller-saves @gol + -funroll-loops -funroll-all-loops @gol + -fno-move-all-movables -fno-reduce-all-givs @gol + -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 @gol + -ff2c-library -fno-underscoring -fno-ident @gol + -fpcc-struct-return -freg-struct-return @gol + -fshort-double -fno-common -fpack-struct @gol + -fzeros -fno-second-underscore @gol + -femulate-complex @gol + -falias-check -fargument-alias @gol + -fargument-noalias -fno-argument-noalias-global @gol + -fno-globals -fflatten-arrays @gol + -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. + + A sample debugging session looks like this (note the use of the breakpoint): + @smallexample + $ cat gdb.f + PROGRAM PROG + DIMENSION A(10) + DATA A /1.,2.,3.,4.,5.,6.,7.,8.,9.,10./ + A(5) = 4. + PRINT*,A + END + $ g77 -g -O gdb.f + $ gdb a.out + ... + (gdb) break MAIN__ + Breakpoint 1 at 0x8048e96: file gdb.f, line 4. + (gdb) run + Starting program: /home/toon/g77-bugs/./a.out + Breakpoint 1, MAIN__ () at gdb.f:4 + 4 A(5) = 4. + Current language: auto; currently fortran + (gdb) print a(5) + $1 = 5 + (gdb) step + 5 PRINT*,A + (gdb) print a(5) + $2 = 4 + ... + @end smallexample + One could also add the setting of the breakpoint and the first run command + to the file @file{.gdbinit} in the current directory, to simplify the debugging + session. + @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 -Nrc3pad gcc-3.0.4/gcc/f/lab.h gcc-3.1/gcc/f/lab.h *** gcc-3.0.4/gcc/f/lab.h Mon Feb 15 18:17:05 1999 --- gcc-3.1/gcc/f/lab.h Sat May 26 01:31:46 2001 *************** the Free Software Foundation, 59 Temple *** 29,36 **** /* Allow multiple inclusion to work. */ ! #ifndef _H_f_lab ! #define _H_f_lab /* Simple definitions and enumerations. */ --- 29,36 ---- /* Allow multiple inclusion to work. */ ! #ifndef GCC_F_LAB_H ! #define GCC_F_LAB_H /* Simple definitions and enumerations. */ *************** ffelab ffelab_new (ffelabValue v); *** 151,154 **** /* End of #include file. */ ! #endif --- 151,154 ---- /* End of #include file. */ ! #endif /* ! GCC_F_LAB_H */ diff -Nrc3pad gcc-3.0.4/gcc/f/lang-options.h gcc-3.1/gcc/f/lang-options.h *** gcc-3.0.4/gcc/f/lang-options.h Sat May 26 05:45:49 2001 --- gcc-3.1/gcc/f/lang-options.h Fri Nov 9 17:50:06 2001 *************** DEFINE_LANG_NAME ("Fortran") *** 31,37 **** { "-fversion", N_("Print g77-specific compiler version info, run internal tests") }, - { "-fnull-version", "" }, /*"-fident",*/ /*"-fno-ident",*/ { "-ff66", --- 31,36 ---- diff -Nrc3pad gcc-3.0.4/gcc/f/lang-specs.h gcc-3.1/gcc/f/lang-specs.h *** gcc-3.0.4/gcc/f/lang-specs.h Sun Nov 25 12:12:24 2001 --- gcc-3.1/gcc/f/lang-specs.h Sat Nov 24 21:36:56 2001 *************** the Free Software Foundation, 59 Temple *** 41,59 **** {"@f77", "%{!M:%{!MM:%{!E:f771 %i %(cc1_options) %{I*}\ %{!fsyntax-only:%(invoke_as)}}}}", 0}, - /* XXX This is perverse and should not be necessary. */ - {"@f77-version", - "tradcpp0 -lang-fortran %(cpp_options) %j \n\ - f771 -fnull-version %1 \ - %{!Q:-quiet} -dumpbase g77-version.f %{d*} %{m*} %{a*} \ - %{g*} %{O*} %{W*} %{w} %{pedantic*} \ - -version -fversion %{f*} %{I*} -o %g.s %j \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", 0}, --- 41,43 ---- diff -Nrc3pad gcc-3.0.4/gcc/f/lex.c gcc-3.1/gcc/f/lex.c *** gcc-3.0.4/gcc/f/lex.c Mon Apr 2 21:29:03 2001 --- gcc-3.1/gcc/f/lex.c Mon Feb 4 16:07:58 2002 *************** *** 1,5 **** /* Implementation of Fortran lexer ! Copyright (C) 1995, 1996, 1997, 1998, 2001 Free Software Foundation, Inc. Contributed by James Craig Burley. This file is part of GNU Fortran. --- 1,6 ---- /* Implementation of Fortran lexer ! Copyright (C) 1995, 1996, 1997, 1998, 2001, 2002 ! Free Software Foundation, Inc. Contributed by James Craig Burley. This file is part of GNU Fortran. *************** the Free Software Foundation, 59 Temple *** 26,42 **** #include "lex.h" #include "malloc.h" #include "src.h" ! #if FFECOM_targetCURRENT == FFECOM_targetGCC #include "flags.h" #include "input.h" #include "toplev.h" #include "output.h" #include "ggc.h" - #endif - - #ifdef DWARF_DEBUGGING_INFO - #include "dwarfout.h" - #endif static void ffelex_append_to_token_ (char c); static int ffelex_backslash_ (int c, ffewhereColumnNumber col); --- 27,38 ---- #include "lex.h" #include "malloc.h" #include "src.h" ! #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); *************** static void ffelex_bad_2_ (ffebad errnum *** 48,57 **** 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); --- 44,51 ---- *************** ffelex_backslash_ (int c, ffewhereColumn *** 276,281 **** --- 270,276 ---- case 'x': if (warn_traditional) { + /* xgettext:no-c-format */ ffebad_start_msg_lex ("The meaning of `\\x' (at %0) varies with -traditional", FFEBAD_severityWARNING); ffelex_bad_here_ (0, line, column); *************** ffelex_backslash_ (int c, ffewhereColumn *** 326,331 **** --- 321,327 ---- case 'a': if (warn_traditional) { + /* xgettext:no-c-format */ ffebad_start_msg_lex ("The meaning of `\\a' (at %0) varies with -traditional", FFEBAD_severityWARNING); ffelex_bad_here_ (0, line, column); *************** ffelex_backslash_ (int c, ffewhereColumn *** 355,361 **** m[0] = c; m[1] = '\0'; ! ffebad_start_msg_lex ("Non-ANSI-C-standard escape sequence `\\%A' at %0", FFEBAD_severityPEDANTIC); ffelex_bad_here_ (0, line, column); ffebad_string (m); --- 351,358 ---- m[0] = c; m[1] = '\0'; ! /* xgettext:no-c-format */ ! ffebad_start_msg_lex ("Non-ISO-C-standard escape sequence `\\%A' at %0", FFEBAD_severityPEDANTIC); ffelex_bad_here_ (0, line, column); ffebad_string (m); *************** ffelex_backslash_ (int c, ffewhereColumn *** 373,378 **** --- 370,376 ---- m[0] = c; m[1] = '\0'; + /* xgettext:no-c-format */ ffebad_start_msg_lex ("Unknown escape sequence `\\%A' at %0", FFEBAD_severityPEDANTIC); ffelex_bad_here_ (0, line, column); *************** ffelex_backslash_ (int c, ffewhereColumn *** 381,386 **** --- 379,385 ---- } else if (c == EOF) { + /* xgettext:no-c-format */ ffebad_start_msg_lex ("Unterminated escape sequence `\\' at %0", FFEBAD_severityPEDANTIC); ffelex_bad_here_ (0, line, column); *************** ffelex_backslash_ (int c, ffewhereColumn *** 391,396 **** --- 390,396 ---- char m[20]; sprintf (&m[0], "%x", c); + /* xgettext:no-c-format */ ffebad_start_msg_lex ("Unknown escape sequence `\\' followed by char code 0x%A at %0", FFEBAD_severityPEDANTIC); ffelex_bad_here_ (0, line, column); *************** ffelex_backslash_ (int c, ffewhereColumn *** 401,417 **** return c; case 2: ! if ((c >= 'a' && c <= 'f') ! || (c >= 'A' && c <= 'F') ! || (c >= '0' && c <= '9')) { ! 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'; if (code != 0 || count != 0) { if (count == 0) --- 401,409 ---- return c; case 2: ! if (ISXDIGIT (c)) { ! code = (code * 16) + hex_value (c); if (code != 0 || count != 0) { if (count == 0) *************** ffelex_backslash_ (int c, ffewhereColumn *** 426,431 **** --- 418,424 ---- if (! nonnull) { + /* xgettext:no-c-format */ ffebad_start_msg_lex ("\\x used at %0 with no following hex digits", FFEBAD_severityFATAL); ffelex_bad_here_ (0, line, column); *************** ffelex_backslash_ (int c, ffewhereColumn *** 439,444 **** --- 432,438 ---- && ((1 << (TYPE_PRECISION (integer_type_node) - (count - 1) * 4)) <= (int) firstdig))) { + /* xgettext:no-c-format */ ffebad_start_msg_lex ("Hex escape at %0 out of range", FFEBAD_severityPEDANTIC); ffelex_bad_here_ (0, line, column); *************** ffelex_backslash_ (int c, ffewhereColumn *** 472,477 **** --- 466,472 ---- && TYPE_PRECISION (char_type_node) < HOST_BITS_PER_INT && code >= (1 << TYPE_PRECISION (char_type_node))) { + /* xgettext:no-c-format */ ffebad_start_msg_lex ("Escape sequence at %0 out of range for character", FFEBAD_severityFATAL); ffelex_bad_here_ (0, line, column); *************** ffelex_bad_here_ (int n, ffewhereLineNum *** 564,570 **** ffewhere_column_kill (wc0); } - #if FFECOM_targetCURRENT == FFECOM_targetGCC static int ffelex_getc_ (FILE *finput) { --- 559,564 ---- *************** ffelex_getc_ (FILE *finput) *** 581,588 **** return getc (finput); } - #endif - #if FFECOM_targetCURRENT == FFECOM_targetGCC static int ffelex_cfebackslash_ (int *use_d, int *d, FILE *finput) { --- 575,580 ---- *************** ffelex_cfebackslash_ (int *use_d, int *d *** 609,629 **** while (1) { c = getc (finput); ! if (!(c >= 'a' && c <= 'f') ! && !(c >= 'A' && c <= 'F') ! && !(c >= '0' && c <= '9')) { *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'; if (code != 0 || count != 0) { if (count == 0) --- 601,613 ---- while (1) { c = getc (finput); ! if (! ISXDIGIT (c)) { *use_d = 1; *d = c; break; } ! code = (code * 16) + hex_value (c); if (code != 0 || count != 0) { if (count == 0) *************** ffelex_cfebackslash_ (int *use_d, int *d *** 718,724 **** /* `\%' is used to prevent SCCS from getting confused. */ case '%': if (pedantic) ! pedwarn ("non-ANSI escape sequence `\\%c'", c); return c; } if (c >= 040 && c < 0177) --- 702,708 ---- /* `\%' is used to prevent SCCS from getting confused. */ case '%': if (pedantic) ! pedwarn ("non-ISO escape sequence `\\%c'", c); return c; } if (c >= 040 && c < 0177) *************** ffelex_cfebackslash_ (int *use_d, int *d *** 728,737 **** 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) { --- 712,719 ---- *************** ffelex_cfelex_ (ffelexToken *xtoken, FIL *** 803,809 **** case EOF: case '\n': ! error ("Badly formed directive -- no closing quote"); done = TRUE; break; --- 785,791 ---- case EOF: case '\n': ! error ("badly formed directive -- no closing quote"); done = TRUE; break; *************** ffelex_cfelex_ (ffelexToken *xtoken, FIL *** 848,856 **** *xtoken = token; return c; } - #endif - #if FFECOM_targetCURRENT == FFECOM_targetGCC static void ffelex_file_pop_ (const char *input_filename) { --- 830,836 ---- *************** ffelex_file_pop_ (const char *input_file *** 860,870 **** 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 */ } else error ("#-lines for entering and leaving files don't match"); --- 840,846 ---- input_file_stack = p->next; free (p); input_file_stack_tick++; ! (*debug_hooks->end_source_file) (input_file_stack->line); } else error ("#-lines for entering and leaving files don't match"); *************** ffelex_file_pop_ (const char *input_file *** 875,882 **** input_file_stack->name = input_filename; } - #endif - #if FFECOM_targetCURRENT == FFECOM_targetGCC static void ffelex_file_push_ (int old_lineno, const char *input_filename) { --- 851,856 ---- *************** ffelex_file_push_ (int old_lineno, const *** 888,905 **** 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 */ /* 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 --- 862,875 ---- p->name = input_filename; input_file_stack = p; input_file_stack_tick++; ! ! (*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; } /* Prepare to finish a statement-in-progress by sending the current token, if any, then setting up EOS as the current token with the *************** ffelex_finish_statement_ () *** 990,996 **** /* Copied from gcc/c-common.c get_directive_line. */ - #if FFECOM_targetCURRENT == FFECOM_targetGCC static int ffelex_get_directive_line_ (char **text, FILE *finput) { --- 960,965 ---- *************** ffelex_get_directive_line_ (char **text, *** 1036,1042 **** || c == EOF) { if (looking_for != 0) ! error ("Bad directive -- missing close-quote"); *p++ = '\0'; *text = directive_buffer; --- 1005,1011 ---- || c == EOF) { if (looking_for != 0) ! error ("bad directive -- missing close-quote"); *p++ = '\0'; *text = directive_buffer; *************** ffelex_get_directive_line_ (char **text, *** 1062,1068 **** 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 --- 1031,1036 ---- *************** ffelex_get_directive_line_ (char **text, *** 1073,1080 **** 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 --- 1041,1046 ---- *************** ffelex_hash_ (FILE *finput) *** 1107,1113 **** 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 (c == 'p') { --- 1073,1079 ---- it and ignore it; otherwise, ignore the line, with an error if the word isn't `pragma', `ident', `define', or `undef'. */ ! if (ISALPHA(c)) { if (c == 'p') { *************** ffelex_hash_ (FILE *finput) *** 1127,1133 **** ISSPACE() may evaluate its argument more than once! */ while (((c = getc (finput)), ISSPACE(c))) continue; ! do { * buff ++ = c; --- 1093,1099 ---- ISSPACE() may evaluate its argument more than once! */ while (((c = getc (finput)), ISSPACE(c))) continue; ! do { * buff ++ = c; *************** ffelex_hash_ (FILE *finput) *** 1137,1143 **** && buff < buffer + 128); pragma_ungetc (c); ! * -- buff = 0; #ifdef HANDLE_PRAGMA if (HANDLE_PRAGMA (pragma_getc, pragma_ungetc, buffer)) --- 1103,1109 ---- && buff < buffer + 128); pragma_ungetc (c); ! * -- buff = 0; #ifdef HANDLE_PRAGMA if (HANDLE_PRAGMA (pragma_getc, pragma_ungetc, buffer)) *************** ffelex_hash_ (FILE *finput) *** 1173,1183 **** 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 */ goto skipline; } --- 1139,1146 ---- c = ffelex_get_directive_line_ (&text, finput); ! if (debug_info_level == DINFO_LEVEL_VERBOSE) ! (*debug_hooks->define) (lineno, text); goto skipline; } *************** ffelex_hash_ (FILE *finput) *** 1195,1205 **** 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 */ goto skipline; } --- 1158,1165 ---- c = ffelex_get_directive_line_ (&text, finput); ! if (debug_info_level == DINFO_LEVEL_VERBOSE) ! (*debug_hooks->undef) (lineno, text); goto skipline; } *************** ffelex_hash_ (FILE *finput) *** 1366,1372 **** { lineno = 1; input_filename = old_input_filename; ! error ("Use `#line ...' instead of `# ...' in first line"); } if (num == 1) --- 1326,1332 ---- { lineno = 1; input_filename = old_input_filename; ! error ("use `#line ...' instead of `# ...' in first line"); } if (num == 1) *************** ffelex_hash_ (FILE *finput) *** 1410,1416 **** { lineno = 1; input_filename = old_input_filename; ! error ("Use `#line ...' instead of `# ...' in first line"); } if (c == '\n' || c == EOF) { --- 1370,1376 ---- { lineno = 1; input_filename = old_input_filename; ! error ("use `#line ...' instead of `# ...' in first line"); } if (c == '\n' || c == EOF) { *************** ffelex_hash_ (FILE *finput) *** 1430,1436 **** ; return c; } - #endif /* FFECOM_targetCURRENT == FFECOM_targetGCC */ /* "Image" a character onto the card image, return incremented column number. --- 1390,1395 ---- *************** ffelex_image_char_ (int c, ffewhereColum *** 1513,1518 **** --- 1472,1478 ---- ffelex_bad_line_ = TRUE; strcpy (&ffelex_card_image_[column], "[\\0]"); ffelex_card_length_ = column + 4; + /* xgettext:no-c-format */ ffebad_start_msg_lex ("Null character at %0 -- line ignored", FFEBAD_severityFATAL); ffelex_bad_here_ (0, ffelex_linecount_current_, column + 1); *************** ffelex_include_ () *** 1554,1563 **** ffewhereLineNumber linecount_current = ffelex_linecount_current_; ffewhereLineNumber linecount_offset = ffewhere_line_filelinenum (current_wl); - #if FFECOM_targetCURRENT == FFECOM_targetGCC int old_lineno = lineno; const char *old_input_filename = input_filename; - #endif if (card_length != 0) { --- 1514,1521 ---- *************** ffelex_include_ () *** 1575,1592 **** 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); --- 1533,1546 ---- *************** ffelex_include_ () *** 1602,1611 **** } 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; --- 1556,1563 ---- *************** ffelex_next_line_ () *** 1663,1671 **** { ffelex_linecount_current_ = ffelex_linecount_next_; ++ffelex_linecount_next_; - #if FFECOM_targetCURRENT == FFECOM_targetGCC ++lineno; - #endif } static void --- 1615,1621 ---- *************** ffelex_token_new_ () *** 1758,1764 **** static const char * ffelex_type_string_ (ffelexType type) { ! static const char *types[] = { "FFELEX_typeNONE", "FFELEX_typeCOMMENT", "FFELEX_typeEOS", --- 1708,1714 ---- static const char * ffelex_type_string_ (ffelexType type) { ! static const char *const types[] = { "FFELEX_typeNONE", "FFELEX_typeCOMMENT", "FFELEX_typeEOS", *************** ffelex_file_fixed (ffewhereFile wf, FILE *** 1881,1890 **** 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; --- 1831,1838 ---- *************** ffelex_file_fixed (ffewhereFile wf, FILE *** 1895,1916 **** 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. */ --- 1843,1848 ---- *************** ffelex_file_fixed (ffewhereFile wf, FILE *** 1973,1982 **** 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. */ --- 1905,1912 ---- *************** ffelex_file_fixed (ffewhereFile wf, FILE *** 2059,2066 **** column = ffelex_final_nontab_column_; } - have_line: /* :::::::::::::::::::: */ - ffelex_card_image_[column] = '\0'; ffelex_card_length_ = column; --- 1989,1994 ---- *************** ffelex_file_free (ffewhereFile wf, FILE *** 3093,3102 **** 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; --- 3021,3028 ---- *************** ffelex_file_free (ffewhereFile wf, FILE *** 3134,3147 **** || (c == '#')) { if (c == '#') ! { ! #if FFECOM_targetCURRENT == FFECOM_targetGCC ! c = ffelex_hash_ (f); ! #else ! /* Don't skip over # line after all. */ ! break; ! #endif ! } comment_line: /* :::::::::::::::::::: */ --- 3060,3066 ---- || (c == '#')) { if (c == '#') ! c = ffelex_hash_ (f); comment_line: /* :::::::::::::::::::: */ *************** ffelex_file_free (ffewhereFile wf, FILE *** 3984,4000 **** /* 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 int kludge[ARRAY_SIZE (match) + 1]; int c; ! char *p; int *q; /* Read chars as long as they match the target string. --- 3903,3918 ---- /* See the code in com.c that calls this to understand why. */ 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 const char match[] = "# 1 \""; static int kludge[ARRAY_SIZE (match) + 1]; int c; ! const char *p; int *q; /* Read chars as long as they match the target string. *************** ffelex_hash_kludge (FILE *finput) *** 4021,4027 **** } } - #endif void ffelex_init_1 () { --- 3939,3944 ---- diff -Nrc3pad gcc-3.0.4/gcc/f/lex.h gcc-3.1/gcc/f/lex.h *** gcc-3.0.4/gcc/f/lex.h Sat Mar 27 10:23:58 1999 --- gcc-3.1/gcc/f/lex.h Sun Oct 21 21:32:07 2001 *************** the Free Software Foundation, 59 Temple *** 29,36 **** /* Allow multiple inclusion to work. */ ! #ifndef _H_f_lex ! #define _H_f_lex /* Simple definitions and enumerations. */ --- 29,36 ---- /* Allow multiple inclusion to work. */ ! #ifndef GCC_F_LEX_H ! #define GCC_F_LEX_H /* Simple definitions and enumerations. */ *************** ffelexToken ffelex_token_use (ffelexToke *** 171,178 **** #define ffelex_init_2() #define ffelex_init_3() #define ffelex_init_4() ! #define ffelex_is_firstnamechar(c) \ ! (ISALPHA ((c)) || ((c) == '_')) #define ffelex_terminate_0() #define ffelex_terminate_1() #define ffelex_terminate_2() --- 171,177 ---- #define ffelex_init_2() #define ffelex_init_3() #define ffelex_init_4() ! #define ffelex_is_firstnamechar(c) ISIDST (c) #define ffelex_terminate_0() #define ffelex_terminate_1() #define ffelex_terminate_2() *************** ffelexToken ffelex_token_use (ffelexToke *** 198,201 **** /* End of #include file. */ ! #endif --- 197,200 ---- /* End of #include file. */ ! #endif /* ! GCC_F_LEX_H */ diff -Nrc3pad gcc-3.0.4/gcc/f/malloc.c gcc-3.1/gcc/f/malloc.c *** gcc-3.0.4/gcc/f/malloc.c Fri Nov 17 04:16:55 2000 --- gcc-3.1/gcc/f/malloc.c Wed Sep 12 16:52:41 2001 *************** struct _malloc_root_ malloc_root_ *** 70,76 **** static void *malloc_reserve_ = NULL; /* For crashes. */ #if MALLOC_DEBUG ! static const char *malloc_types_[] = {"KS", "KSR", "NF", "NFR", "US", "USR"}; #endif --- 70,76 ---- static void *malloc_reserve_ = NULL; /* For crashes. */ #if MALLOC_DEBUG ! static const char *const malloc_types_[] = {"KS", "KSR", "NF", "NFR", "US", "USR"}; #endif diff -Nrc3pad gcc-3.0.4/gcc/f/malloc.h gcc-3.1/gcc/f/malloc.h *** gcc-3.0.4/gcc/f/malloc.h Sat Mar 27 10:24:00 1999 --- gcc-3.1/gcc/f/malloc.h Sat May 26 01:31:46 2001 *************** the Free Software Foundation, 59 Temple *** 27,34 **** /* Allow multiple inclusion to work. */ ! #ifndef _H_f_malloc ! #define _H_f_malloc #ifndef MALLOC_DEBUG #define MALLOC_DEBUG 0 /* 1 means check caller's use of this module. */ --- 27,34 ---- /* Allow multiple inclusion to work. */ ! #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. */ *************** void malloc_verify_inpool_ (mallocPool p *** 180,183 **** /* End of #include file. */ ! #endif --- 180,183 ---- /* End of #include file. */ ! #endif /* ! GCC_F_MALLOC_H */ diff -Nrc3pad gcc-3.0.4/gcc/f/name.h gcc-3.1/gcc/f/name.h *** gcc-3.0.4/gcc/f/name.h Sat Mar 27 10:24:02 1999 --- gcc-3.1/gcc/f/name.h Sat May 26 01:31:46 2001 *************** the Free Software Foundation, 59 Temple *** 27,34 **** /* Allow multiple inclusion to work. */ ! #ifndef _H_f_name ! #define _H_f_name /* Simple definitions and enumerations. */ --- 27,34 ---- /* Allow multiple inclusion to work. */ ! #ifndef GCC_F_NAME_H ! #define GCC_F_NAME_H /* Simple definitions and enumerations. */ *************** ffenameSpace ffename_space_new (mallocPo *** 106,109 **** /* End of #include file. */ ! #endif --- 106,109 ---- /* End of #include file. */ ! #endif /* ! GCC_F_NAME_H */ diff -Nrc3pad gcc-3.0.4/gcc/f/news.texi gcc-3.1/gcc/f/news.texi *** gcc-3.0.4/gcc/f/news.texi Sun Jun 3 11:41:20 2001 --- gcc-3.1/gcc/f/news.texi Sat Apr 13 16:44:44 2002 *************** *** 1,4 **** ! @c Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000 Free Software Foundation, Inc. @c This is part of the G77 manual. @c For copying conditions, see the file g77.texi. --- 1,5 ---- ! @c Copyright (C) 1995, 1996, 1997, 1998, 1999, 2000, 2001, 2002 ! @c Free Software Foundation, Inc. @c This is part of the G77 manual. @c For copying conditions, see the file g77.texi. *************** *** 7,15 **** @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,1996,1997,1998,1999,2000,2001 ! @set last-update-news 2001-06-03 @include root.texi --- 8,16 ---- @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,1996,1997,1998,1999,2000,2001,2002 ! @set last-update-news 2002-04-13 @include root.texi *************** this copyright notice and permission not *** 40,54 **** @cindex changes, user-visible @cindex user-visible changes ! This chapter describes changes to @code{g77} that are visible to the programmers who actually write and maintain Fortran ! code they compile with @code{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}. @xref{News,,News About GNU Fortran}, for information on ! such changes to @code{g77}. @end ifset @ifclear USERVISONLY --- 41,55 ---- @cindex changes, user-visible @cindex user-visible changes ! This chapter describes changes to @command{g77} that are visible to the programmers who actually write and maintain Fortran ! 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 @command{g77}. @xref{News,,News About GNU Fortran}, for information on ! such changes to @command{g77}. @end ifset @ifclear USERVISONLY *************** This order is not strict---for example, *** 93,99 **** involve a combination of these elements. @end ifclear ! Note that two variants of @code{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. --- 94,100 ---- involve a combination of these elements. @end ifclear ! 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. *************** of what a particular @code{egcs} version *** 107,137 **** somewhat more difficult. @ifset DOC-G77 ! For information on bugs in the @value{which-g77} version of @code{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}, 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 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}. In particular, while this information is intended to apply to ! the @value{which-g77} version of @code{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. ! Nevertheless, information on @emph{previous} releases of @code{g77}, below, is likely to be more up-to-date and accurate than the equivalent information that accompanied those releases, --- 108,138 ---- somewhat more difficult. @ifset DOC-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 @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 @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} @command{g77}. In particular, while this information is intended to apply to ! 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 @command{g77} product in that version. ! 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, *************** assuming the last-updated date of the in *** 139,157 **** 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. @end ifset @ifclear USERVISONLY An online, ``live'' version of this document (derived directly from the mainline, development version ! of @code{g77} within @code{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 0.5.26, @code{GCC} 3.0 versus @code{GCC} 2.95: @itemize @bullet @item --- 140,243 ---- is later than the dates of those releases. That's due to attempts to keep this development version ! 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 @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 @code{GCC} 3.1 (formerly known as g77-0.5.27) versus @code{GCC} 3.0: + @itemize @bullet + @item + Problem Reports fixed (in chronological order of submission): + @table @code + @item 947 + Data statement initialization with subscript of kind INTEGER*2 + @item 3743 + Reference to intrinsic `ISHFT' invalid + @item 3807 + Function BESJN(integer,double) problems + @item 3957 + g77 -pipe -xf77-cpp-input sends output to stdout + @item 4279 + g77 -h" gives bogus output + @item 4730 + ICE on valid input using CALL EXIT(%VAL(...)) + @item 4752 + g77 -v -c -xf77-version /dev/null -xnone causes ice + @item 4885 + BACKSPACE example that doesn't work as of gcc/g77-3.0.x + @item 5122 + g77 rejects accepted use of INTEGER*2 as type of DATA statement loop index + @item 5397 + ICE on compiling source with 540 000 000 REAL array + @item 5473 + ICE on BESJN(integer*8,real) + @item 5837 + bug in loop unrolling + @end table + + @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 *************** the @code{ftruncate} OS function. Thank *** 162,168 **** for bringing this to our attention. @item ! Using options @code{-g}, @code{-ggdb} or @code{-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 --- 248,254 ---- 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 *** 170,176 **** fixing this longstanding problem. @item ! It is not necessary anymore to use the option @code{-femulate-complex} to compile Fortran code using COMPLEX arithmetic, even on 64-bit machines (like the Alpha). This will improve code generation. --- 256,262 ---- 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. *************** not necessarily starting at @samp{K(6)}. *** 208,214 **** @itemize @bullet @ifclear USERVISONLY @item ! @code{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)} --- 294,300 ---- @itemize @bullet @ifclear USERVISONLY @item ! @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)} *************** For example, @samp{INTEGER*8 J; J = 4E10 *** 219,225 **** @ifclear USERVISONLY @item ! @code{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)} --- 305,311 ---- @ifclear USERVISONLY @item ! @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)} *************** on systems with pointers widers than @co *** 228,234 **** @ifclear USERVISONLY @item ! @code{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 --- 314,320 ---- @ifclear USERVISONLY @item ! @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 *************** on big-endian systems. *** 269,275 **** @ifclear USERVISONLY @item ! Fix @code{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} --- 355,361 ---- @ifclear USERVISONLY @item ! 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} *************** Instead, it issues a diagnostic. *** 279,312 **** @ifclear USERVISONLY @item ! Fix @code{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}. @end ifclear @ifclear USERVISONLY @item ! The @samp{-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 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} to work properly. @item Source file names with the suffixes @samp{.FOR} and @samp{.FPP} ! now are recognized by @code{g77} as if they ended in @samp{.for} and @samp{.fpp}, respectively. @item --- 365,398 ---- @ifclear USERVISONLY @item ! 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 @command{g77}. @end ifclear @ifclear USERVISONLY @item ! The @option{-ax} option is now obeyed when compiling Fortran programs. (It is passed to the @file{f771} driver.) @end ifclear @item ! 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 @option{-mieee} to work properly. @item Source file names with the suffixes @samp{.FOR} and @samp{.FPP} ! now are recognized by @command{g77} as if they ended in @samp{.for} and @samp{.fpp}, respectively. @item *************** making these consistent with the other s *** 320,326 **** of @code{libU77} intrinsics. @item ! @code{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 --- 406,412 ---- of @code{libU77} intrinsics. @item ! @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 *************** using the @code{EXTERNAL} mechanism *** 333,345 **** @ifclear USERVISONLY @item ! @code{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. This should result in improved performance of code that uses the @code{COMPLEX} data type. --- 419,431 ---- @ifclear USERVISONLY @item ! @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 ! @option{-fno-emulate-complex} is now the default option. This should result in improved performance of code that uses the @code{COMPLEX} data type. *************** of code that uses the @code{COMPLEX} dat *** 347,381 **** @cindex double-precision performance @cindex -malign-double @item ! The @samp{-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 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 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. @end ifclear @item ! @code{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 to compare how the compiler handles code generation using C-like constructs as compared to the Fortran-like method constructs normally used. --- 433,467 ---- @cindex double-precision performance @cindex -malign-double @item ! 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 @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 ! @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 @option{-Os} option is specified. @end ifclear @item ! @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 ! @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. *************** Fortran-like method constructs normally *** 383,399 **** @ifclear USERVISONLY @item ! A substantial portion of the @code{g77} front end's code-generation component was rewritten. It now generates code using facilities more robustly supported ! by the @code{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. @ifclear USERVISONLY @item --- 469,485 ---- @ifclear USERVISONLY @item ! 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 @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 @option{-fugly} option has been removed. @ifclear USERVISONLY @item *************** Upgrade to @code{libf2c} as of 1999-05-1 *** 410,421 **** @heading In 0.5.24 versus 0.5.23: ! There is no @code{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, as 0.5.24 was planned to require. Due to @code{EGCS} becoming @code{GCC} --- 496,507 ---- @heading In 0.5.24 versus 0.5.23: ! 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 @command{gcc} 2.8.1, as 0.5.24 was planned to require. Due to @code{EGCS} becoming @code{GCC} *************** and @code{EGCS} 1.2 becoming officially *** 424,437 **** 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 during that period, ! ``mainline'' @code{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. Please remain calm and return to your keypunch units. @c 1999-03-15: EGCS 1.1.2 released. --- 510,523 ---- 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 @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'' @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 @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. *************** Fix @code{libg2c} so it performs an impl *** 474,494 **** 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}.) @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}.) @item ! Fix @code{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 better on some systems (those with shells requiring @samp{else true} clauses on @code{if} constructs --- 560,580 ---- whenever a @code{REWIND} is done. (This bug was introduced in 0.5.23 and @code{egcs} 1.1 in ! @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 ! @command{g77}'s version of @code{libf2c}.) @item ! Fix @command{g77} so it no longer crashes compiling references to the @code{Rand} intrinsic on some systems. @item ! 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 *************** that overwrote their arguments. *** 513,524 **** @item Assumed arrays with negative bounds (such as @samp{REAL A(-1:*)}) ! no longer elicit spurious diagnostics from @code{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}. It was introduced in an early release of @code{egcs}. @end ifclear --- 599,610 ---- @item Assumed arrays with negative bounds (such as @samp{REAL A(-1:*)}) ! 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 @command{gcc}. It was introduced in an early release of @code{egcs}. @end ifclear *************** without explicitly giving it a type, *** 530,548 **** and, in a subsequent program unit, referencing that external as an external function with a different type ! no longer crash @code{g77}. @end ifclear @ifclear USERVISONLY @item ! @code{CASE DEFAULT} no longer crashes @code{g77}. @end ifclear @ifclear USERVISONLY @item ! The @samp{-Wunused} option no longer issues a spurious warning about the ``master'' procedure generated by ! @code{g77} for procedures containing @code{ENTRY} statements. @end ifclear @item --- 616,634 ---- and, in a subsequent program unit, referencing that external as an external function with a different type ! no longer crash @command{g77}. @end ifclear @ifclear USERVISONLY @item ! @code{CASE DEFAULT} no longer crashes @command{g77}. @end ifclear @ifclear USERVISONLY @item ! The @option{-Wunused} option no longer issues a spurious warning about the ``master'' procedure generated by ! @command{g77} for procedures containing @code{ENTRY} statements. @end ifclear @item *************** Support @samp{FORMAT(I<@var{expr}>)} whe *** 550,558 **** compile-time constant @code{INTEGER} expression. @item ! Fix @code{g77} @samp{-g} option so procedures that use @code{ENTRY} can be stepped through, line by line, ! in @code{gdb}. @item Allow any @code{REAL} argument to intrinsics --- 636,644 ---- compile-time constant @code{INTEGER} expression. @item ! Fix @command{g77} @option{-g} option so procedures that use @code{ENTRY} can be stepped through, line by line, ! in @command{gdb}. @item Allow any @code{REAL} argument to intrinsics *************** so that the @code{TMPDIR} environment va *** 565,571 **** if present, is used. @item ! @code{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 --- 651,657 ---- if present, is used. @item ! @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 *************** when @code{libf2c} (now @code{libg2c}) i *** 578,586 **** @ifclear USERVISONLY @item ! @code{g77} no longer installs the @file{f77} command and @file{f77.1} man page ! in the @file{/usr} or @file{/usr/local} heirarchy, even if the @file{f77-install-ok} file exists in the source or build directory. See the installation documentation for more information. --- 664,672 ---- @ifclear USERVISONLY @item ! @command{g77} no longer installs the @file{f77} command and @file{f77.1} man page ! 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. *************** See the installation documentation for m *** 588,596 **** @ifclear USERVISONLY @item ! @code{g77} no longer installs the @file{libf2c.a} library and @file{f2c.h} include file ! in the @file{/usr} or @file{/usr/local} heirarchy, 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. --- 674,682 ---- @ifclear USERVISONLY @item ! @command{g77} no longer installs the @file{libf2c.a} library and @file{f2c.h} include file ! 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. *************** See the installation documentation for m *** 598,607 **** @ifclear USERVISONLY @item ! The @file{libf2c.a} library produced by @code{g77} has been renamed to @file{libg2c.a}. ! It is installed only in the @code{gcc} ``private'' ! directory heirarchy, @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. --- 684,693 ---- @ifclear USERVISONLY @item ! The @file{libf2c.a} library produced by @command{g77} has been renamed to @file{libg2c.a}. ! 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. *************** See the installation documentation for m *** 610,619 **** @ifclear USERVISONLY @item ! The @file{f2c.h} include (header) file produced by @code{g77} has been renamed to @file{g2c.h}. ! It is installed only in the @code{gcc} ``private'' ! directory heirarchy, @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. --- 696,705 ---- @ifclear USERVISONLY @item ! The @file{f2c.h} include (header) file produced by @command{g77} has been renamed to @file{g2c.h}. ! 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. *************** See the installation documentation for m *** 621,635 **** @end ifclear @item ! The @code{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. @ifclear USERVISONLY @item During the configuration and build process, ! @code{g77} creates subdirectories it needs only as it needs them. Other cleaning up of the configuration and build process has been performed as well. --- 707,721 ---- @end ifclear @item ! 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 @command{g77} version is picked up. @ifclear USERVISONLY @item During the configuration and build process, ! @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. *************** has been performed as well. *** 638,644 **** @ifclear USERVISONLY @item @code{install-info} now used to update the directory of ! Info documentation to contain an entry for @code{g77} (during installation). @end ifclear --- 724,730 ---- @ifclear USERVISONLY @item @code{install-info} now used to update the directory of ! Info documentation to contain an entry for @command{g77} (during installation). @end ifclear *************** as well. *** 676,682 **** @end itemize @c 1998-09-03: EGCS 1.1 released. ! @heading In @code{EGCS} 1.1 versus @code{g77} 0.5.23: @itemize @bullet @ifclear USERVISONLY @cindex DNRM2 --- 762,768 ---- @end itemize @c 1998-09-03: EGCS 1.1 released. ! @heading In @code{EGCS} 1.1 versus @command{g77} 0.5.23: @itemize @bullet @ifclear USERVISONLY @cindex DNRM2 *************** as well. *** 685,691 **** @cindex -O2 @item Fix a code-generation bug that afflicted ! Intel x86 targets when @samp{-O2} was specified compiling, for example, an old version of the @code{DNRM2} routine. --- 771,777 ---- @cindex -O2 @item Fix a code-generation bug that afflicted ! Intel x86 targets when @option{-O2} was specified compiling, for example, an old version of the @code{DNRM2} routine. *************** and @code{ASSIGN}. *** 696,702 **** @ifclear USERVISONLY @item ! @code{g77} no longer produces incorrect code and initial values for @code{EQUIVALENCE} and @code{COMMON} aggregates that, due to ``unnatural'' ordering of members --- 782,788 ---- @ifclear USERVISONLY @item ! @command{g77} no longer produces incorrect code and initial values for @code{EQUIVALENCE} and @code{COMMON} aggregates that, due to ``unnatural'' ordering of members *************** vis-a-vis their types, require initial p *** 705,743 **** @ifclear USERVISONLY @item ! Fix @code{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 containing specification statements such as @samp{INTEGER(KIND=7) PTR}. @end ifclear @ifclear USERVISONLY @item ! @code{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 @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 for these cases. ! Previously, @code{g77} treated these expressions as denoting special ``pointer'' arguments for the purposes of filewide analysis. @ifclear USERVISONLY @item ! Fix @code{g77} crash (or apparently infinite run-time) when compiling certain complicated expressions involving @code{COMPLEX} arithmetic --- 791,829 ---- @ifclear USERVISONLY @item ! Fix @command{g77} crash compiling code containing the construct @samp{CMPLX(0.)} or similar. @end ifclear @ifclear USERVISONLY @item ! @command{g77} no longer crashes when compiling code containing specification statements such as @samp{INTEGER(KIND=7) PTR}. @end ifclear @ifclear USERVISONLY @item ! @command{g77} no longer crashes when compiling code such as @samp{J = SIGNAL(1, 2)}. @end ifclear @item ! @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 @command{g77} actually generates code for these cases. ! Previously, @command{g77} treated these expressions as denoting special ``pointer'' arguments for the purposes of filewide analysis. @ifclear USERVISONLY @item ! Fix @command{g77} crash (or apparently infinite run-time) when compiling certain complicated expressions involving @code{COMPLEX} arithmetic *************** involving @code{COMPLEX} arithmetic *** 750,776 **** @item Align static double-precision variables and arrays on Intel x86 targets ! regardless of whether @samp{-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} is specified in the link phase prior to any ! occurrence of @samp{-lm}. This prevents accidentally linking to a routine ! in the SunOS4 @samp{-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. This new information allows, for example, ! @kbd{which __g77_length_a} to be used in @code{gdb} to determine the type of the phantom length argument supplied with @code{CHARACTER} variables. --- 836,862 ---- @item Align static double-precision variables and arrays on Intel x86 targets ! 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 @command{g77} driver now ensures that @option{-lg2c} is specified in the link phase prior to any ! occurrence of @option{-lm}. This prevents accidentally linking to a routine ! in the SunOS4 @option{-lm} library when the generated code wants to link to the one in @code{libf2c} (@code{libg2c}). @item ! @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 @command{gdb} to determine the type of the phantom length argument supplied with @code{CHARACTER} variables. *************** for such information. *** 817,870 **** @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 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} 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}, 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 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}. (@code{egcs} supports these options. ! @code{g77} users of @code{egcs} benefit from them even if they are not explicitly specified, ! because the defaults are optimized for @code{g77} users.) @item ! Support for the @samp{-W} option warning about integer division by zero. @item ! The Intel x86-specific option @samp{-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. @end ifclear @ifclear USERVISONLY --- 903,956 ---- @itemize @bullet @item This release contains several regressions against ! 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 @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 @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} @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 ! @option{-fmove-all-movables}, ! @option{-freduce-all-givs}, ! and @option{-frerun-loop-opt}. (@code{egcs} supports these options. ! @command{g77} users of @code{egcs} benefit from them even if they are not explicitly specified, ! because the defaults are optimized for @command{g77} users.) @item ! Support for the @option{-W} option warning about integer division by zero. @item ! 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 @command{g77} no longer ! including patches for the @command{gcc} back end. @end ifclear @ifclear USERVISONLY *************** that overwrote their arguments. *** 878,897 **** @end ifclear @item ! Support @code{gcc} version 2.8, ! and remove support for prior versions of @code{gcc}. @cindex -@w{}-driver option ! @cindex @code{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}. @ifclear USERVISONLY @item ! @code{CASE DEFAULT} no longer crashes @code{g77}. @end ifclear @ifclear USERVISONLY --- 964,983 ---- @end ifclear @item ! Support @command{gcc} version 2.8, ! and remove support for prior versions of @command{gcc}. @cindex -@w{}-driver option ! @cindex @command{g77} options, -@w{}-driver @cindex options, -@w{}-driver @item ! 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 @command{g77}. @end ifclear @ifclear USERVISONLY *************** without explicitly giving it a type, *** 902,915 **** and, in a subsequent program unit, referencing that external as an external function with a different type ! no longer crash @code{g77}. @end ifclear @ifclear USERVISONLY @item ! @code{g77} no longer installs the @file{f77} command and @file{f77.1} man page ! in the @file{/usr} or @file{/usr/local} heirarchy, even if the @file{f77-install-ok} file exists in the source or build directory. See the installation documentation for more information. --- 988,1001 ---- and, in a subsequent program unit, referencing that external as an external function with a different type ! no longer crash @command{g77}. @end ifclear @ifclear USERVISONLY @item ! @command{g77} no longer installs the @file{f77} command and @file{f77.1} man page ! 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. *************** See the installation documentation for m *** 917,925 **** @ifclear USERVISONLY @item ! @code{g77} no longer installs the @file{libf2c.a} library and @file{f2c.h} include file ! in the @file{/usr} or @file{/usr/local} heirarchy, 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. --- 1003,1011 ---- @ifclear USERVISONLY @item ! @command{g77} no longer installs the @file{libf2c.a} library and @file{f2c.h} include file ! 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. *************** See the installation documentation for m *** 927,936 **** @ifclear USERVISONLY @item ! The @file{libf2c.a} library produced by @code{g77} has been renamed to @file{libg2c.a}. ! It is installed only in the @code{gcc} ``private'' ! directory heirarchy, @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. --- 1013,1022 ---- @ifclear USERVISONLY @item ! The @file{libf2c.a} library produced by @command{g77} has been renamed to @file{libg2c.a}. ! 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. *************** See the installation documentation for m *** 939,948 **** @ifclear USERVISONLY @item ! The @file{f2c.h} include (header) file produced by @code{g77} has been renamed to @file{g2c.h}. ! It is installed only in the @code{gcc} ``private'' ! directory heirarchy, @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. --- 1025,1034 ---- @ifclear USERVISONLY @item ! The @file{f2c.h} include (header) file produced by @command{g77} has been renamed to @file{g2c.h}. ! 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. *************** See the installation documentation for m *** 950,969 **** @end ifclear @item ! The @code{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. @ifclear USERVISONLY @item ! The @samp{-Wunused} option no longer issues a spurious warning about the ``master'' procedure generated by ! @code{g77} for procedures containing @code{ENTRY} statements. @end ifclear @item ! @code{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 --- 1036,1055 ---- @end ifclear @item ! 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 @command{g77} version is picked up. @ifclear USERVISONLY @item ! The @option{-Wunused} option no longer issues a spurious warning about the ``master'' procedure generated by ! @command{g77} for procedures containing @code{ENTRY} statements. @end ifclear @item ! @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 *************** when @code{libf2c} (now @code{libg2c}) i *** 977,983 **** @ifclear USERVISONLY @item During the configuration and build process, ! @code{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 --- 1063,1069 ---- @ifclear USERVISONLY @item During the configuration and build process, ! @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 *************** has been performed as well. *** 987,993 **** @ifclear USERVISONLY @item @code{install-info} now used to update the directory of ! Info documentation to contain an entry for @code{g77} (during installation). @end ifclear --- 1073,1079 ---- @ifclear USERVISONLY @item @code{install-info} now used to update the directory of ! Info documentation to contain an entry for @command{g77} (during installation). @end ifclear *************** For example, @samp{DO 10 J=2,J} now is c *** 1034,1040 **** @cindex -O2 @item Fix a code-generation bug that afflicted ! Intel x86 targets when @samp{-O2} was specified compiling, for example, an old version of the @code{DNRM2} routine. --- 1120,1126 ---- @cindex -O2 @item Fix a code-generation bug that afflicted ! Intel x86 targets when @option{-O2} was specified compiling, for example, an old version of the @code{DNRM2} routine. *************** machines such as Alphas. *** 1062,1068 **** @ifclear USERVISONLY @item ! Fix @code{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 --- 1148,1154 ---- @ifclear USERVISONLY @item ! 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 *************** via the @code{f_exit} routine (such as v *** 1071,1089 **** @ifclear USERVISONLY @item ! Fix @code{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} intrinsic. @end ifclear @ifclear USERVISONLY @item ! Fix @code{g77} crash (or apparently infinite run-time) when compiling certain complicated expressions involving @code{COMPLEX} arithmetic --- 1157,1175 ---- @ifclear USERVISONLY @item ! Fix @command{g77} crash triggered by @code{CASE} statement with an omitted lower or upper bound. @end ifclear @ifclear USERVISONLY @item ! Fix @command{g77} crash compiling references to @code{CPU_Time} intrinsic. @end ifclear @ifclear USERVISONLY @item ! Fix @command{g77} crash (or apparently infinite run-time) when compiling certain complicated expressions involving @code{COMPLEX} arithmetic *************** involving @code{COMPLEX} arithmetic *** 1092,1105 **** @ifclear USERVISONLY @item ! Fix @code{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. @end ifclear @item --- 1178,1191 ---- @ifclear USERVISONLY @item ! 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 @command{g++} crash. @end ifclear @item *************** Support @samp{FORMAT(I<@var{expr}>)} whe *** 1107,1119 **** compile-time constant @code{INTEGER} expression. @item ! Fix @code{g77} @samp{-g} option so procedures that use @code{ENTRY} can be stepped through, line by line, ! in @code{gdb}. @ifclear USERVISONLY @item ! Fix a profiling-related bug in @code{gcc} back end for Intel x86 architecture. @end ifclear --- 1193,1205 ---- compile-time constant @code{INTEGER} expression. @item ! Fix @command{g77} @option{-g} option so procedures that use @code{ENTRY} can be stepped through, line by line, ! in @command{gdb}. @ifclear USERVISONLY @item ! Fix a profiling-related bug in @command{gcc} back end for Intel x86 architecture. @end ifclear *************** so that the @code{TMPDIR} environment va *** 1132,1138 **** if present, is used. @item ! Rename the @code{gcc} keyword @code{restrict} to @code{__restrict__}, to avoid rejecting valid, existing, C programs. Support for @code{restrict} is now more like support --- 1218,1224 ---- if present, is used. @item ! 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 *************** for @code{complex}. *** 1140,1158 **** @ifclear USERVISONLY @item ! Fix @samp{-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 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. @ifclear USERVISONLY @item --- 1226,1244 ---- @ifclear USERVISONLY @item ! Fix @option{-fpedantic} to not reject procedure invocations such as @samp{I=J()} and @samp{CALL FOO()}. @end ifclear @item ! 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 @option{-fgnu-intrinsics-*} and ! @option{-fbadu77-intrinsics-*} options. @ifclear USERVISONLY @item *************** so it is more likely that the printing o *** 1161,1170 **** active format string is limited to the string, with no trailing garbage being printed. ! (Unlike @code{f2c}, @code{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 anyway for a statement like @samp{PRINT '(I)garbage', 1} by printing @samp{(I)garbage} as the format string.) @end ifclear --- 1247,1256 ---- active format string is limited to the string, with no trailing garbage being printed. ! (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, @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 *************** This fixes a formatted-I/O bug that affl *** 1212,1224 **** @itemize @bullet @ifclear USERVISONLY @item ! Fix @code{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 @samp{PRINT *, (REAL(Z(I)),I=1,2)}, where @samp{Z} is @code{DOUBLE COMPLEX}. @end ifclear --- 1298,1310 ---- @itemize @bullet @ifclear USERVISONLY @item ! Fix @command{g77} crash triggered by @code{CASE} statement with an omitted lower or upper bound. @end ifclear @ifclear USERVISONLY @item ! 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 *************** Fix @code{g77} crash on statements such *** 1229,1256 **** @cindex -fPIC option @cindex options, -fPIC @item ! Fix @samp{-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 such as @samp{I=J()} and @samp{CALL FOO()}. @end ifclear @ifclear USERVISONLY @item ! Fix @samp{-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. @end itemize @c 1998-01-06: EGCS 1.0.1 released. --- 1315,1342 ---- @cindex -fPIC option @cindex options, -fPIC @item ! 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 @option{-fpedantic} to not reject procedure invocations such as @samp{I=J()} and @samp{CALL FOO()}. @end ifclear @ifclear USERVISONLY @item ! 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 @option{-fgnu-intrinsics-*} and ! @option{-fbadu77-intrinsics-*} options. @end itemize @c 1998-01-06: EGCS 1.0.1 released. *************** machines such as Alphas. *** 1264,1283 **** @end ifclear @c 1997-12-03: EGCS 1.0 released. ! @heading In @code{EGCS} 1.0 versus @code{g77} 0.5.21: @itemize @bullet @item Version 1.0 of @code{egcs} contains several regressions against ! version 0.5.21 of @code{g77}, due to using the ! ``vanilla'' @code{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} back end in previous releases include: @itemize @minus --- 1350,1369 ---- @end ifclear @c 1997-12-03: EGCS 1.0 released. ! @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 @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 @command{g77} due to their being implemented ! via @command{g77}-specific patches to the @command{gcc} back end in previous releases include: @itemize @minus *************** back end in previous releases include: *** 1285,1304 **** Support for the C-language @code{restrict} keyword. @item ! Support for the @samp{-W} option warning about integer division by zero. @item ! The Intel x86-specific option @samp{-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} being fully integrated with ! the @code{egcs} variant of the @code{gcc} back end. @end ifclear @ifclear USERVISONLY --- 1371,1390 ---- Support for the C-language @code{restrict} keyword. @item ! Support for the @option{-W} option warning about integer division by zero. @item ! 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 @command{g77} being fully integrated with ! the @code{egcs} variant of the @command{gcc} back end. @end ifclear @ifclear USERVISONLY *************** results to integer values (on some syste *** 1319,1327 **** @item @c Toon Moene discovered these. Some Fortran code, miscompiled ! by @code{g77} built on @code{gcc} version 2.8.1 on m68k-next-nextstep3 configurations ! when using the @samp{-O2} option, is now compiled correctly. It is believed that a C function known to miscompile on that configuration --- 1405,1413 ---- @item @c Toon Moene discovered these. Some Fortran code, miscompiled ! by @command{g77} built on @command{gcc} version 2.8.1 on m68k-next-nextstep3 configurations ! when using the @option{-O2} option, is now compiled correctly. It is believed that a C function known to miscompile on that configuration *************** also is now compiled correctly. *** 1331,1346 **** @ifclear USERVISONLY @item ! Remove support for non-@code{egcs} versions of @code{gcc}. @end ifclear @cindex -@w{}-driver option ! @cindex @code{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}. @item Allow any numeric argument to intrinsics --- 1417,1432 ---- @ifclear USERVISONLY @item ! Remove support for non-@code{egcs} versions of @command{gcc}. @end ifclear @cindex -@w{}-driver option ! @cindex @command{g77} options, -@w{}-driver @cindex options, -@w{}-driver @item ! 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 *************** so it is more likely that the printing o *** 1353,1359 **** active format string is limited to the string, with no trailing garbage being printed. ! (Unlike @code{f2c}, @code{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 --- 1439,1445 ---- active format string is limited to the string, with no trailing garbage being printed. ! (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 *************** This fixes a formatted-I/O bug that affl *** 1377,1385 **** @item Fix a code-generation bug introduced by 0.5.20 caused by loop unrolling (by specifying ! @samp{-funroll-loops} or similar). This bug afflicted all code compiled by ! version 2.7.2.2.f.2 of @code{gcc} (C, C++, Fortran, and so on). @end ifclear --- 1463,1471 ---- @item Fix a code-generation bug introduced by 0.5.20 caused by loop unrolling (by specifying ! @option{-funroll-loops} or similar). This bug afflicted all code compiled by ! version 2.7.2.2.f.2 of @command{gcc} (C, C++, Fortran, and so on). @end ifclear *************** combining local @code{EQUIVALENCE} with *** 1390,1414 **** @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} option). @end ifclear @ifclear USERVISONLY @item ! Fix a compiler crash that occured 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. This bug afflicted all code compiled by ! version 2.7.2.2.f.2 of @code{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 a warning about integer division by constant zero. @end ifset --- 1476,1500 ---- @code{DATA} statement that follows the first executable statement (or is treated as an executable-context statement ! as a result of using the @option{-fpedantic} option). @end ifclear @ifclear USERVISONLY @item ! Fix a compiler crash that occurred when an integer division by a constant zero is detected. ! 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 @command{gcc} (C, C++, Fortran, and so on). @end ifclear @ifset USERVISONLY @item ! 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 *************** Such dual use of a name in a program is *** 1450,1466 **** the standard. @end ifclear ! @c @code{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 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 routine @code{fputc_}. @c This would conflict with a Fortran procedure named @code{FPUTC} @c (using default compiler options), and this conflict --- 1536,1552 ---- the standard. @end ifclear ! @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 @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 @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 *************** the standard. *** 1478,1497 **** @ifclear USERVISONLY @item Place automatic arrays on the stack, even if ! @code{SAVE} or the @samp{-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 @code{DOUBLE PRECISION} optimally on Pentium and ! Pentium Pro architectures (586 and 686 in @code{gcc}). @end ifclear @item ! New option @samp{-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 --- 1564,1583 ---- @ifclear USERVISONLY @item Place automatic arrays on the stack, even if ! @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 @option{-malign-double} option now reliably aligns @code{DOUBLE PRECISION} optimally on Pentium and ! Pentium Pro architectures (586 and 686 in @command{gcc}). @end ifclear @item ! 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 *************** arguments passed to global procedures, o *** 1499,1508 **** natures of the procedures themselves. The default is to issue such warnings, which are ! new as of this version of @code{g77}. @item ! New option @samp{-fno-globals} disables diagnostics about potentially fatal disagreements analysis problems, such as disagreements over the number or natures of arguments passed to global --- 1585,1594 ---- natures of the procedures themselves. The default is to issue such warnings, which are ! new as of this version of @command{g77}. @item ! 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 *************** procedures, or the natures of those proc *** 1511,1517 **** 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, are not issued at all. This option also disables inlining of global procedures, --- 1597,1603 ---- The default is to issue such diagnostics and flag the compilation as unsuccessful. With this option, the diagnostics are issued as ! warnings, or, if @option{-Wno-globals} is specified, are not issued at all. This option also disables inlining of global procedures, *************** This avoids a compiler crash. *** 1529,1535 **** @ifclear USERVISONLY @item ! Fix parsing bug whereby @code{g77} rejected a second initialization specification immediately following the first's closing @samp{/} without an intervening comma in a @code{DATA} statement, --- 1615,1621 ---- @ifclear USERVISONLY @item ! 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, *************** and the second specification was an impl *** 1538,1544 **** @ifclear USERVISONLY @item ! Improve performance of the @code{gcc} back end so certain complicated expressions involving @code{COMPLEX} arithmetic (especially multiplication) don't appear to take forever to compile. --- 1624,1630 ---- @ifclear USERVISONLY @item ! 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. *************** take forever to compile. *** 1546,1552 **** @ifclear USERVISONLY @item ! Fix a couple of profiling-related bugs in @code{gcc} back end. @end ifclear --- 1632,1638 ---- @ifclear USERVISONLY @item ! Fix a couple of profiling-related bugs in @command{gcc} back end. @end ifclear *************** These fixes are circa version 3.10p of G *** 1559,1566 **** @ifclear USERVISONLY @item ! Include some other @code{gcc} fixes that seem useful in ! @code{g77}'s version of @code{gcc}. (See @file{gcc/ChangeLog} for details---compare it to that file in the vanilla @code{gcc-2.7.2.3.tar.gz} distribution.) --- 1645,1652 ---- @ifclear USERVISONLY @item ! 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.) *************** Improve @code{libU77} so it is more port *** 1608,1615 **** @end ifclear @item ! Add options @samp{-fbadu77-intrinsics-delete}, ! @samp{-fbadu77-intrinsics-hide}, and so on. @ifclear USERVISONLY @item --- 1694,1701 ---- @end ifclear @item ! Add options @option{-fbadu77-intrinsics-delete}, ! @option{-fbadu77-intrinsics-hide}, and so on. @ifclear USERVISONLY @item *************** Fix crashes involving diagnosed or inval *** 1618,1624 **** @ifclear USERVISONLY @item ! @code{g77} and @code{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 --- 1704,1710 ---- @ifclear USERVISONLY @item ! @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 *************** Make some fixes to alias analysis code. *** 1632,1664 **** @ifclear USERVISONLY @item ! Add support for @code{restrict} keyword in @code{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), and remove ! support for prior versions of @code{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} from the same source tree. @end ifclear @ifclear USERVISONLY @item ! Modify @code{make} rules and related code so that generation of Info documentation doesn't require ! compilation using @code{gcc}. Now, any ANSI C compiler should be adequate to ! produce the @code{g77} documentation (in particular, the tables of intrinsics) from scratch. @end ifclear --- 1718,1750 ---- @ifclear USERVISONLY @item ! Add support for @code{restrict} keyword in @command{gcc} front end. @end ifclear @ifclear USERVISONLY @item ! 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 @command{gcc}. @end ifclear @ifclear USERVISONLY @item ! 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 @command{make} rules and related code so that generation of Info documentation doesn't require ! compilation using @command{gcc}. Now, any ANSI C compiler should be adequate to ! produce the @command{g77} documentation (in particular, the tables of intrinsics) from scratch. @end ifclear *************** the type of an intrinsic invocation. *** 1683,1694 **** @ifclear USERVISONLY @item ! Support @samp{*f771} entry in @code{gcc} @file{specs} file. @end ifclear @ifclear USERVISONLY @item ! Fix typo in @code{make} rule @code{g77-cross}, used only for cross-compiling. @end ifclear --- 1769,1780 ---- @ifclear USERVISONLY @item ! Support @samp{*f771} entry in @command{gcc} @file{specs} file. @end ifclear @ifclear USERVISONLY @item ! Fix typo in @command{make} rule @command{g77-cross}, used only for cross-compiling. @end ifclear *************** if previous attempt to archive was inter *** 1700,1726 **** @ifclear USERVISONLY @item ! Change @code{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 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. @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. @end ifclear @ifclear USERVISONLY --- 1786,1812 ---- @ifclear USERVISONLY @item ! 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 @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 @option{-ff2c} in effect. @end ifclear @ifclear USERVISONLY @item ! 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 *************** recursive I/O (at run time). *** 1735,1751 **** @end ifclear @item ! @code{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 separately. @ifclear USERVISONLY @item ! Fix some aspects of how @code{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. --- 1821,1837 ---- @end ifclear @item ! @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 @command{ratfor} command, available separately. @ifclear USERVISONLY @item ! 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. *************** Improve documentation and indexing. *** 1765,1771 **** @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 @code{libf2c} the suffix @samp{.netlib}. @end ifclear --- 1851,1857 ---- @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 @command{g77}'s version of @code{libf2c} the suffix @samp{.netlib}. @end ifclear *************** Reserve @code{INTEGER(KIND=0)} for futur *** 1779,1810 **** @heading In 0.5.20: @itemize @bullet @item ! The @samp{-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 constants to be interpreted as typeless. ! (Version 0.5.19 introduced @samp{-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. @end ifset @item ! Options @samp{-ff90-intrinsics-enable} and ! @samp{-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}) or, better yet, insert appropriate @code{EXTERNAL} statements specifying that these names are not intended to be names of intrinsics. --- 1865,1896 ---- @heading In 0.5.20: @itemize @bullet @item ! 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 @option{-ftypeless-boz} to cause such constants to be interpreted as typeless. ! (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 @option{-ftypeless-boz} option. @end ifset @item ! 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, @option{-ff90-intrinsics-disable}) or, better yet, insert appropriate @code{EXTERNAL} statements specifying that these names are not intended to be names of intrinsics. *************** I/O performance, especially over NFS. *** 1817,1823 **** @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}. @ifset DOC-G77 @xref{Output Assumed To Flush}, for more information. --- 1903,1909 ---- @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 @command{g77}. @ifset DOC-G77 @xref{Output Assumed To Flush}, for more information. *************** building it from this and future version *** 1826,1869 **** @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 as intrinsics. @item ! New option @samp{-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. @end ifset @item ! The @samp{-fvxt-not-f90} option has been deleted, ! along with its inverse, @samp{-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}. @ifset DOC-G77 @xref{Other Dialects}, for more information. @end ifset @item ! The @samp{-fugly} option now issues a warning, as it likely will be removed in a future version. ! (Enabling all the @samp{-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 particular source file.) @item ! The @samp{-fugly-assumed} option, introduced in version 0.5.19, has been changed to better accommodate old and new code. --- 1912,1955 ---- @item Dave Love's implementation of @code{libU77} has been added to the version of @code{libf2c} distributed with ! and built as part of @command{g77}. ! @command{g77} now knows about the routines in this library as intrinsics. @item ! 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 @option{-fvxt} option is specified. @end ifset @item ! 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 @command{g77}. @ifset DOC-G77 @xref{Other Dialects}, for more information. @end ifset @item ! The @option{-fugly} option now issues a warning, as it likely will be removed in a future version. ! (Enabling all the @option{-fugly-*} options is unlikely to be feasible, or sensible, in the future, so users should learn to specify only those ! @option{-fugly-*} options they really need for a particular source file.) @item ! The @option{-fugly-assumed} option, introduced in version 0.5.19, has been changed to better accommodate old and new code. *************** better accommodate old and new code. *** 1873,1883 **** @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) machines. This includes providing at least one bug-fix to the ! @code{gcc} back end for Alphas. @end ifclear @item --- 1959,1969 ---- @ifclear USERVISONLY @item ! 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 ! @command{gcc} back end for Alphas. @end ifclear @item *************** instead of the more common @code{INTEGER *** 1898,1931 **** (often referred to as @code{INTEGER*4}). @item ! Emulate @code{COMPLEX} arithmetic in the @code{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. @ifclear USERVISONLY @item Fix bug whereby @samp{REAL A(1)}, for example, caused ! a compiler crash if @samp{-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}. @end ifclear @ifclear USERVISONLY @item ! Fix @code{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 handled. @end ifclear @ifclear USERVISONLY @item ! Enable inlining of subroutines and functions by the @code{gcc} back end. ! This works as it does for @code{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. --- 1984,2017 ---- (often referred to as @code{INTEGER*4}). @item ! Emulate @code{COMPLEX} arithmetic in the @command{g77} front end, to avoid bugs in @code{complex} support in the ! @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 @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 @option{-fugly-assumed}. @end ifclear @ifclear USERVISONLY @item ! 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 @option{-x} option is properly handled. @end ifclear @ifclear USERVISONLY @item ! Enable inlining of subroutines and functions by the @command{gcc} back end. ! 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. *************** these are defined (assigned to) by Fortr *** 1939,1956 **** 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} 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. @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}. @end ifset @ifclear USERVISONLY --- 2025,2042 ---- This can result in faster and/or smaller programs when compiling with optimization enabled, though on some ! systems this effect is observed only when @option{-fforce-addr} also is specified. ! 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 @command{g77}. @end ifset @ifclear USERVISONLY *************** are compiled in-line. *** 1962,1968 **** @ifclear USERVISONLY @item The bug-fix for 0.5.19.1 has been re-done. ! The @code{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. --- 2048,2054 ---- @ifclear USERVISONLY @item The bug-fix for 0.5.19.1 has been re-done. ! 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. *************** or all cases, due to this change alone. *** 1975,1981 **** @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. Use @samp{g77 -v} to determine the version numbers of the @code{libF77}, @code{libI77}, and @code{libU77} components of the @code{libf2c} library. --- 2061,2067 ---- @emph{Note:} This change requires version 0.5.20 of @code{libf2c}, at least, when linking code produced ! 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. *************** version of @code{libf2c}.) *** 1987,1997 **** @end ifclear @item ! New option @samp{-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 to hold assigned statement labels.) @ifset DOC-G77 --- 2073,2083 ---- @end ifclear @item ! 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, @command{g77} uses a separate memory location to hold assigned statement labels.) @ifset DOC-G77 *************** Fix crashes involving diagnosed or inval *** 2018,2024 **** 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 access to the build tree (whereas the user doing the build might not have access to install new software on the system). --- 2104,2110 ---- 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 @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). *************** on the system). *** 2026,2035 **** @ifclear USERVISONLY @item ! Support @code{gcc} version 2.7.2.2 ! (modified by @code{g77} into version 2.7.2.2.f.2), and remove ! support for prior versions of @code{gcc}. @end ifclear @ifclear USERVISONLY --- 2112,2121 ---- @ifclear USERVISONLY @item ! 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 @command{gcc}. @end ifclear @ifclear USERVISONLY *************** fix up some of the build procedures. *** 2040,2046 **** @ifclear USERVISONLY @item ! Improve general build procedures for @code{g77}, fixing minor bugs (such as deletion of any file named @file{f771} in the parent directory of @code{gcc/}). @end ifclear --- 2126,2132 ---- @ifclear USERVISONLY @item ! 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 *************** named @file{f771} in the parent director *** 2049,2061 **** 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} version of @file{f2c.h} and the @code{INTEGER(KIND=2)} ! support routines in the @code{g77} version of @code{libf2c}. @item ! Improve @code{g77} driver and @code{libf2c} so that @samp{g77 -v} yields version information on the library. @item --- 2135,2147 ---- 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 @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 @command{g77} version of @code{libf2c}. @item ! Improve @command{g77} driver and @code{libf2c} so that @samp{g77 -v} yields version information on the library. @item *************** Complain about industry-wide ambiguous r *** 2080,2088 **** @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. @ifclear USERVISONLY @item --- 2166,2174 ---- @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 ! @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 *************** A temporary kludge option provides bare- *** 2158,2195 **** @code{COMMON} and @code{EQUIVALENCE} members at debug time. @item ! New @samp{-fonetrip} option specifies FORTRAN-66-style one-trip @code{DO} loops. @item ! New @samp{-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}. @item ! New @samp{-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 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 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. @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, in that they do nothing more than enable (or disable) other ! @samp{-fugly-*} options. @item Fix parsing of assignment statements involving targets that --- 2244,2281 ---- @code{COMMON} and @code{EQUIVALENCE} members at debug time. @item ! New @option{-fonetrip} option specifies FORTRAN-66-style one-trip @code{DO} loops. @item ! New @option{-fno-silent} option causes names of program units to be printed as they are compiled, in a fashion similar to ! UNIX @command{f77} and @command{f2c}. @item ! 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 @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 @option{-ff66} option is a ``shorthand'' option that specifies behaviors considered appropriate for FORTRAN 66 programs. @item ! New @option{-ff77} option is a ``shorthand'' option that specifies ! behaviors considered appropriate for UNIX @command{f77} programs. @item ! 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 ! @option{-fugly-*} options. @item Fix parsing of assignment statements involving targets that *************** of valid Fortran programs are not misdia *** 2206,2212 **** extending the area backwards. @item ! Support @code{gcc} version 2.7.2.1. @item Upgrade to @code{libf2c} as of 1996-09-26, and --- 2292,2298 ---- extending the area backwards. @item ! Support @command{gcc} version 2.7.2.1. @item Upgrade to @code{libf2c} as of 1996-09-26, and *************** Modify @code{fseek_()} in @code{libf2c} *** 2233,2255 **** matters) and to catch invalid @code{whence} arguments. @item ! Some useless warnings from the @samp{-Wunused} option have been eliminated. @item Fix a problem building the @file{f771} executable ! on AIX systems by linking with the @samp{-bbigtoc} option. @item ! Abort configuration if @code{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. @item Change internally generated name for local @code{EQUIVALENCE} --- 2319,2341 ---- matters) and to catch invalid @code{whence} arguments. @item ! 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 @option{-bbigtoc} option. @item ! Abort configuration if @command{gcc} has not been patched using the patch file provided in the @file{gcc/f/gbe/} subdirectory. @item ! 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} *************** Improvements to documentation and indexi *** 2268,2274 **** 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.) Thanks to Scott Snyder (@email{snyder@@d0sgif.fnal.gov}) for providing the patch for this! --- 2354,2360 ---- 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, @command{gcc} targets.) Thanks to Scott Snyder (@email{snyder@@d0sgif.fnal.gov}) for providing the patch for this! *************** in some cases significantly (though, aga *** 2311,2328 **** is only a subset of the general problem to be addressed in 0.6). ! A new option, @samp{-fzeros}, is introduced to enable the traditional treatment of zeros as any other value. @item ! With @samp{-ff90} in force, @code{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 unchanged, since this appears to be how at least some F77 code using the @code{DOUBLE COMPLEX} extension expected it to work. --- 2397,2414 ---- is only a subset of the general problem to be addressed in 0.6). ! A new option, @option{-fzeros}, is introduced to enable the traditional treatment of zeros as any other value. @item ! 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 @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. *************** triggered in a long time. *** 2357,2365 **** @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, for Fortran compilations. These optimizations are intended to help toon Fortran programs. --- 2443,2451 ---- @item Introduce three new options that ! 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. *************** Patch the GBE to do a better job optimiz *** 2368,2386 **** kinds of references to array elements. @item ! Due to patches to the GBE, the version number of @code{gcc} also is patched to make it easier to manage installations, ! especially useful if it turns out a @code{g77} change to the GBE has a bug. ! The @code{g77}-modified version number is the @code{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 second, and so on. ! So, this introduces version 2.7.2.f.1 of @code{gcc}. @item Make several improvements and fixes to diagnostics, including --- 2454,2472 ---- kinds of references to array elements. @item ! 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 @command{g77} change to the GBE has a bug. ! 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 @command{gcc}, @samp{2} for the second, and so on. ! So, this introduces version 2.7.2.f.1 of @command{gcc}. @item Make several improvements and fixes to diagnostics, including *************** the removal of two that were inappropria *** 2388,2409 **** @item Warning about two successive arithmetic operators, produced ! by @samp{-Wsurprising}, now produced @emph{only} when both operators are, indeed, arithmetic (not relational/boolean). @item ! @samp{-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. @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 @file{gcc/f/PROJECTS}. These files will be removed in a future release. The files @file{gcc/f/BUGS}, @file{gcc/f/INSTALL}, and --- 2474,2495 ---- @item Warning about two successive arithmetic operators, produced ! by @option{-Wsurprising}, now produced @emph{only} when both operators are, indeed, arithmetic (not relational/boolean). @item ! @option{-Wsurprising} now warns about the remaining cases of using non-integral variables for implied-@code{DO} ! 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 @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 *************** This effort was inspired by a first pass *** 2415,2422 **** 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 underscore is not to be appended to Fortran names already containing an underscore. --- 2501,2508 ---- David Ronis (@email{ronis@@onsager.chem.mcgill.ca}). @item ! 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. *************** the result of the calculation is always *** 2430,2449 **** the default @code{INTEGER} type. (This should have no effect on existing code compiled ! by @code{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. @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} 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}. --- 2516,2535 ---- the default @code{INTEGER} type. (This should have no effect on existing code compiled ! 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 @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 @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}. *************** various applications and programs exhibi *** 2470,2477 **** 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 it is supposed to build (especially if it reports unresolved references, which it should in this case)! --- 2556,2563 ---- behaviors. I sincerely apologize for not realizing the ! 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)! *************** never happen). *** 2493,2502 **** @item Make @code{libf2c} build procedures work on more systems again by ! eliminating unnecessary invocations of @samp{ld -r -x} and @code{mv}. @item ! Fix omission of @samp{-funix-intrinsics-@dots{}} options in list of permitted options to compiler. @item --- 2579,2588 ---- @item Make @code{libf2c} build procedures work on more systems again by ! eliminating unnecessary invocations of @samp{ld -r -x} and @command{mv}. @item ! Fix omission of @option{-funix-intrinsics-@dots{}} options in list of permitted options to compiler. @item *************** in the back end) involving exponentiatio *** 2510,2521 **** constant for the right-hand operator (e.g. @samp{I**32767}). @item ! Fix build procedures so cross-compiling @code{g77} (the @code{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 are surprising to many programmers. @item --- 2596,2607 ---- constant for the right-hand operator (e.g. @samp{I**32767}). @item ! Fix build procedures so cross-compiling @command{g77} (the @command{fini} utility in particular) is properly built using the host compiler. @item ! 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 *************** Add @code{ERF()} and @code{ERFC()} as ge *** 2526,2537 **** 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}). @item ! Remove from @samp{-fno-pedantic} the diagnostic about @code{DO} with non-@code{INTEGER} index variable; issue that under ! @samp{-Wsurprising} instead. @item Clarify some diagnostics that say things like ``ignored'' when that's --- 2612,2623 ---- 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. @command{f2c}). @item ! Remove from @option{-fno-pedantic} the diagnostic about @code{DO} with non-@code{INTEGER} index variable; issue that under ! @option{-Wsurprising} instead. @item Clarify some diagnostics that say things like ``ignored'' when that's *************** Minor improvement to code generation for *** 2550,2556 **** machines. @item ! Support @code{gcc} version 2.7.1. @item Upgrade to @code{libf2c} as of 1995-11-15. --- 2636,2642 ---- machines. @item ! Support @command{gcc} version 2.7.1. @item Upgrade to @code{libf2c} as of 1995-11-15. *************** not involving @code{COMMON}. *** 2565,2578 **** @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). 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 consistent with other Fortran implementations by outputting leading zeros in formatted and list-directed output. --- 2651,2664 ---- @item Fix code-generation bugs involving invoking ``gratis'' library procedures ! 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 @command{g77}-compiled code more consistent with other Fortran implementations by outputting leading zeros in formatted and list-directed output. *************** leading zeros in formatted and list-dire *** 2580,2586 **** 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 @file{gcc-2.7.0} or later). @item --- 2666,2672 ---- 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 @command{f2c} plus @command{gcc} (but apparently only when using @file{gcc-2.7.0} or later). @item *************** that overlaps one or more of the argumen *** 2593,2600 **** @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 construct, as it turns out). @item --- 2679,2686 ---- @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 @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 *************** area when any member of area has initial *** 2621,2645 **** 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. @item ! Fix @code{gcc} driver (affects @code{g77} thereby) to not gratuitously invoke the ! @code{f771} program (e.g. when @samp{-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 compiling Fortran files. ! These options include @samp{-p}, @samp{-pg}, @samp{-aux-info}, @samp{-P}, correct setting of version-number macros for preprocessing, full ! recognition of @samp{-O0}, and automatic insertion of configuration-specific linker specs. @item --- 2707,2731 ---- for example). @item ! 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 @command{gcc} driver (affects @command{g77} thereby) to not gratuitously invoke the ! @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 @command{gcc}/@command{g77} when compiling Fortran files. ! These options include @option{-p}, @option{-pg}, @option{-aux-info}, @option{-P}, correct setting of version-number macros for preprocessing, full ! recognition of @option{-O0}, and automatic insertion of configuration-specific linker specs. @item *************** Move @code{LOC()} intrinsic out of the @ *** 2662,2676 **** @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). @item ! Add new @code{g77} option @samp{--driver=name} to specify driver when ! default, @code{gcc}, isn't appropriate. @item Add support for @samp{#} directives (as output by the preprocessor) in the --- 2748,2762 ---- @code{unix} group. @item ! 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 @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 *************** preprocessor (when compiling @samp{.F} f *** 2679,2692 **** info are more useful to users of the preprocessor. @item ! Produce better diagnostics, more like @code{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. @item ! When @samp{-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. --- 2765,2778 ---- info are more useful to users of the preprocessor. @item ! Produce better diagnostics, more like @command{gcc}, with info such as @samp{In function `foo':} and @samp{In file included from...:}. @item ! Support @command{gcc}'s @option{-fident} and @option{-fno-ident} options. @item ! 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. *************** of the variables themselves. *** 2694,2712 **** @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 warn about unused dummy arguments. @item ! New option @samp{-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). Please do not report bugs showing problems compilers have with macros defined in @file{gcc/f/target.h} and used in places like --- 2780,2798 ---- @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 (@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 @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 ! @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 *************** macros defined in @file{gcc/f/target.h} *** 2716,2729 **** 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. @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 (by default), to produce smaller library without lots of debugging clutter. @end itemize --- 2802,2815 ---- 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 @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 @option{-g0}, not @option{-g2}, in effect (by default), to produce smaller library without lots of debugging clutter. @end itemize *************** smaller library without lots of debuggin *** 2733,2739 **** @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). @item Fix crash given @samp{CHARACTER A;DATA A/.TRUE./}. --- 2819,2825 ---- @itemize @bullet @item Fix bad code generation involving @samp{X**I} and temporary, internal variables ! generated by @command{g77} and the back end (such as for @code{DO} loops). @item Fix crash given @samp{CHARACTER A;DATA A/.TRUE./}. *************** Fix crash or other erratic behavior invo *** 2750,2775 **** @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. @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 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. @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 turned out to slow down some code in some cases after all. @item --- 2836,2861 ---- @item Fix code generation for external functions returning type @code{REAL} when ! 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 @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 ! @option{-ffixed-line-length-none} was in effect. @item No longer generate better code for some kinds of array references, ! 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 *************** In @code{COMMON} and @code{EQUIVALENCE} *** 2777,2783 **** 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}). 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 --- 2863,2869 ---- 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 @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 *************** Fix crash on @code{DCMPLX()} with a sing *** 2821,2827 **** Fix various crashes involving code with diagnosed errors. @item ! Support @samp{-I} option for @code{INCLUDE} statement, plus @code{gcc}'s @file{header.gcc} facility for handling systems like MS-DOS. @item --- 2907,2913 ---- Fix various crashes involving code with diagnosed errors. @item ! Support @option{-I} option for @code{INCLUDE} statement, plus @command{gcc}'s @file{header.gcc} facility for handling systems like MS-DOS. @item *************** fixes a bug involving infinite loops rea *** 2834,2846 **** I/O list. @item ! Remove all the @code{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). @item Complain if initialized common redeclared as larger in subsequent program --- 2920,2932 ---- I/O list. @item ! 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 @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 *************** Warn if blank common initialized, since *** 2851,2890 **** related warnings that might be helpful won't be seen. @item ! New @samp{-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 a limited subset of backslash (escape) sequences. @item ! Make @samp{-fugly-args} the default. @item ! New @samp{-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}. @item ! New @samp{-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, 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. @item ! @samp{-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). --- 2937,2976 ---- related warnings that might be helpful won't be seen. @item ! 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 @command{f2c}'s, which supports only a limited subset of backslash (escape) sequences. @item ! Make @option{-fugly-args} the default. @item ! 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 @option{-fno-ugly-init}. @item ! 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 @option{-Wimplicit} option to warn about implicitly typed variables, arrays, and functions. (Basically causes all program units to default to @code{IMPLICIT NONE}.) @item ! @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 ! @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). *************** Support @code{%LOC()} and @code{LOC()} o *** 2895,2901 **** Support null (zero-length) character constants and expressions. @item ! Support @code{f2c}'s @code{IMAG()} generic intrinsic. @item Support @code{ICHAR()}, @code{IACHAR()}, and @code{LEN()} of --- 2981,2987 ---- Support null (zero-length) character constants and expressions. @item ! Support @command{f2c}'s @code{IMAG()} generic intrinsic. @item Support @code{ICHAR()}, @code{IACHAR()}, and @code{LEN()} of *************** character expressions that are valid in *** 2903,2909 **** not normally as actual arguments. @item ! Support @code{f2c}-style @samp{&} in column 1 to mean continuation line. @item Allow @code{NAMELIST}, @code{EXTERNAL}, @code{INTRINSIC}, and @code{VOLATILE} --- 2989,2995 ---- not normally as actual arguments. @item ! Support @command{f2c}-style @samp{&} in column 1 to mean continuation line. @item Allow @code{NAMELIST}, @code{EXTERNAL}, @code{INTRINSIC}, and @code{VOLATILE} *************** too small, otherwise fully intact if con *** 2935,2943 **** type) instead of by value. @end itemize ! @strong{Warning:} @code{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 as @samp{CALL FOO(%REF('X '))} (padded with as many spaces as necessary to widen to @code{INTEGER}), essentially. --- 3021,3029 ---- type) instead of by value. @end itemize ! @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 @command{g77} treat as @samp{CALL FOO(%REF('X '))} (padded with as many spaces as necessary to widen to @code{INTEGER}), essentially. *************** Remove redundant message about zero-step *** 2984,2990 **** Clean up diagnostic messages, shortening many of them. @item ! Fix typo in @code{g77} man page. @item Clarify implications of constant-handling bugs in @file{f/BUGS}. --- 3070,3076 ---- Clean up diagnostic messages, shortening many of them. @item ! Fix typo in @command{g77} man page. @item Clarify implications of constant-handling bugs in @file{f/BUGS}. *************** type @code{INTEGER}. *** 2995,3001 **** @item Generate better code for @code{SQRT()} and @code{DSQRT()}, ! also when @samp{-ffast-math} specified, enable better code generation for @code{SIN()} and @code{COS()}. @item --- 3081,3087 ---- @item Generate better code for @code{SQRT()} and @code{DSQRT()}, ! also when @option{-ffast-math} specified, enable better code generation for @code{SIN()} and @code{COS()}. @item diff -Nrc3pad gcc-3.0.4/gcc/f/parse.c gcc-3.1/gcc/f/parse.c *** gcc-3.0.4/gcc/f/parse.c Wed Jun 21 20:11:14 2000 --- gcc-3.1/gcc/f/parse.c Wed Oct 17 22:34:52 2001 *************** the Free Software Foundation, 59 Temple *** 24,95 **** #include "com.h" #include "where.h" #include "version.h" - #if FFECOM_targetCURRENT == FFECOM_targetGCC #include "flags.h" - #endif #define NAME_OF_STDIN "" ! #if FFECOM_targetCURRENT == FFECOM_targetFFE ! void ! main (int argc, char *argv[]) ! #elif FFECOM_targetCURRENT == FFECOM_targetGCC ! 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 } --- 24,51 ---- #include "com.h" #include "where.h" #include "version.h" #include "flags.h" #define NAME_OF_STDIN "" ! extern FILE *finput; int yyparse () { ffewhereFile wf; if (ffe_is_version ()) fprintf (stderr, "GNU Fortran Front End version %s\n", ffe_version_string); if (!ffe_is_pedantic ()) ffe_set_is_pedantic (pedantic); wf = ffewhere_file_new (main_input_filename, strlen (main_input_filename)); ffecom_file (main_input_filename); ffe_file (wf, finput); ffecom_finish_compile (); return 0; } diff -Nrc3pad gcc-3.0.4/gcc/f/proj.c gcc-3.1/gcc/f/proj.c *** gcc-3.0.4/gcc/f/proj.c Wed Jun 21 20:11:14 2000 --- gcc-3.1/gcc/f/proj.c Thu Jan 1 00:00:00 1970 *************** *** 1,68 **** - /* proj.c file for GNU Fortran - Copyright (C) 1995 Free Software Foundation, Inc. - Contributed by James Craig Burley. - - This file is part of GNU Fortran. - - GNU Fortran is free software; you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation; either version 2, or (at your option) - any later version. - - GNU Fortran 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 GNU Fortran; see the file COPYING. If not, write to - the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA - 02111-1307, USA. */ - - #include "proj.h" - #include "glimits.h" - - #ifndef HAVE_STRTOUL - unsigned long int - strtoul (const char *nptr, char **endptr, int base) - { - unsigned long int number = 0; - unsigned long int old_number = 0; - - assert (base == 10); - assert (endptr == NULL); - - while (ISDIGIT (*nptr)) - { - number = old_number * 10 + (*(nptr++) - '0'); - if ((number <= old_number) && (old_number != 0)) - return ULONG_MAX; - old_number = number; - } - - return number; - } - #endif - - #ifndef HAVE_BSEARCH - void * - bsearch (const void *key, const void *base, size_t nmemb, size_t size, - int (*compar) (const void *, const void *)) - { - size_t i; - int cmp; - - /* We do a dumb incremental search, not a binary search, for now. */ - - for (i = 0; i < nmemb; ++i) - { - if ((cmp = (*compar) (key, base)) == 0) - return base; - if (cmp < 0) - break; - base += size; - } - - return NULL; - } - #endif --- 0 ---- diff -Nrc3pad gcc-3.0.4/gcc/f/proj.h gcc-3.1/gcc/f/proj.h *** gcc-3.0.4/gcc/f/proj.h Thu Mar 15 19:02:13 2001 --- gcc-3.1/gcc/f/proj.h Sat Feb 2 11:42:19 2002 *************** *** 1,5 **** /* proj.h file for Gnu Fortran ! Copyright (C) 1995, 1996, 2000 Free Software Foundation, Inc. Contributed by James Craig Burley. This file is part of GNU Fortran. --- 1,5 ---- /* proj.h file for Gnu Fortran ! Copyright (C) 1995, 1996, 2000, 2001, 2002 Free Software Foundation, Inc. Contributed by James Craig Burley. This file is part of GNU Fortran. *************** the Free Software Foundation, 59 Temple *** 21,28 **** */ ! #ifndef _H_f_proj ! #define _H_f_proj #ifdef USE_HCONFIG #include "hconfig.h" --- 21,28 ---- */ ! #ifndef GCC_F_PROJ_H ! #define GCC_F_PROJ_H #ifdef USE_HCONFIG #include "hconfig.h" *************** the Free Software Foundation, 59 Temple *** 32,38 **** #include "system.h" #if (GCC_VERSION < 2000) ! #error "You have to use gcc 2.x to build g77 (might be fixed in g77-0.6)." #endif /* Include files everyone gets. is needed for assert(). */ --- 32,38 ---- #include "system.h" #if (GCC_VERSION < 2000) ! #error "You have to use gcc 2.x to build g77." #endif /* Include files everyone gets. is needed for assert(). */ *************** the Free Software Foundation, 59 Temple *** 47,50 **** #define dmpout stderr #endif ! #endif --- 47,50 ---- #define dmpout stderr #endif ! #endif /* ! GCC_F_PROJ_H */ diff -Nrc3pad gcc-3.0.4/gcc/f/root.texi gcc-3.1/gcc/f/root.texi *** gcc-3.0.4/gcc/f/root.texi Sun Jun 3 14:13:43 2001 --- gcc-3.1/gcc/f/root.texi Sat Apr 20 11:07:45 2002 *************** *** 3,10 **** @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.26 ! @set version-gcc 3.0 @set email-general gcc@@gcc.gnu.org @set email-help gcc-help@@gcc.gnu.org --- 3,9 ---- @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-gcc 3.1 @set email-general gcc@@gcc.gnu.org @set email-help gcc-help@@gcc.gnu.org diff -Nrc3pad gcc-3.0.4/gcc/f/src.h gcc-3.1/gcc/f/src.h *** gcc-3.0.4/gcc/f/src.h Fri Dec 8 03:00:25 2000 --- gcc-3.1/gcc/f/src.h Sat May 26 01:31:46 2001 *************** the Free Software Foundation, 59 Temple *** 27,34 **** /* Allow multiple inclusion to work. */ ! #ifndef _H_f_src ! #define _H_f_src #include "bad.h" #include "top.h" --- 27,34 ---- /* Allow multiple inclusion to work. */ ! #ifndef GCC_F_SRC_H ! #define GCC_F_SRC_H #include "bad.h" #include "top.h" *************** int ffesrc_strncmp_2c (ffeCase mcase, co *** 137,140 **** /* End of #include file. */ ! #endif --- 137,140 ---- /* End of #include file. */ ! #endif /* ! GCC_F_SRC_H */ diff -Nrc3pad gcc-3.0.4/gcc/f/st.h gcc-3.1/gcc/f/st.h *** gcc-3.0.4/gcc/f/st.h Mon Feb 15 18:17:23 1999 --- gcc-3.1/gcc/f/st.h Sat May 26 01:31:46 2001 *************** the Free Software Foundation, 59 Temple *** 27,34 **** /* Allow multiple inclusion to work. */ ! #ifndef _H_f_st ! #define _H_f_st /* Simple definitions and enumerations. */ --- 27,34 ---- /* Allow multiple inclusion to work. */ ! #ifndef GCC_F_ST_H ! #define GCC_F_ST_H /* Simple definitions and enumerations. */ *************** void ffest_terminate_4 (void); *** 78,81 **** /* End of #include file. */ ! #endif --- 78,81 ---- /* End of #include file. */ ! #endif /* ! GCC_F_ST_H */ diff -Nrc3pad gcc-3.0.4/gcc/f/sta.c gcc-3.1/gcc/f/sta.c *** gcc-3.0.4/gcc/f/sta.c Sat Feb 26 20:02:01 2000 --- gcc-3.1/gcc/f/sta.c Wed Oct 17 22:34:52 2001 *************** ffesta_eof () *** 1452,1460 **** if (ffe_is_ffedebug ()) { ffestorag_report (); - #if FFECOM_targetCURRENT == FFECOM_targetFFE - ffesymbol_report_all (); - #endif } } --- 1452,1457 ---- *************** ffesta_zero (ffelexToken t) *** 1990,1998 **** if (ffe_is_ffedebug ()) { ffestorag_report (); - #if FFECOM_targetCURRENT == FFECOM_targetFFE - ffesymbol_report_all (); - #endif } ffelex_set_names (TRUE); --- 1987,1992 ---- diff -Nrc3pad gcc-3.0.4/gcc/f/sta.h gcc-3.1/gcc/f/sta.h *** gcc-3.0.4/gcc/f/sta.h Tue Mar 30 09:23:34 1999 --- gcc-3.1/gcc/f/sta.h Sat May 26 01:31:46 2001 *************** the Free Software Foundation, 59 Temple *** 27,34 **** /* Allow multiple inclusion to work. */ ! #ifndef _H_f_sta ! #define _H_f_sta /* Simple definitions and enumerations. */ --- 27,34 ---- /* Allow multiple inclusion to work. */ ! #ifndef GCC_F_STA_H ! #define GCC_F_STA_H /* Simple definitions and enumerations. */ *************** void ffesta_set_outpooldisp (ffestaPoold *** 114,117 **** /* End of #include file. */ ! #endif --- 114,117 ---- /* End of #include file. */ ! #endif /* ! GCC_F_STA_H */ diff -Nrc3pad gcc-3.0.4/gcc/f/stb.c gcc-3.1/gcc/f/stb.c *** gcc-3.0.4/gcc/f/stb.c Mon Apr 19 22:27:03 1999 --- gcc-3.1/gcc/f/stb.c Mon Feb 4 16:07:59 2002 *************** *** 1,5 **** /* stb.c -- Implementation File (module.c template V1.0) ! Copyright (C) 1995, 1996 Free Software Foundation, Inc. Contributed by James Craig Burley. This file is part of GNU Fortran. --- 1,5 ---- /* stb.c -- Implementation File (module.c template V1.0) ! Copyright (C) 1995, 1996, 2002 Free Software Foundation, Inc. Contributed by James Craig Burley. This file is part of GNU Fortran. *************** ffestb_S3P41_ (ffelexToken ft, ffebld ex *** 12074,12079 **** --- 12074,12080 ---- && ((ffelex_token_type (t) == FFELEX_typeSEMICOLON) || ffesta_line_has_semicolons)) { + /* xgettext:no-c-format */ ffebad_start_msg ("INCLUDE at %0 not the only statement on the source line", FFEBAD_severityWARNING); ffebad_here (0, ffelex_token_where_line (ffesta_tokens[0]), ffelex_token_where_column (ffesta_tokens[0])); diff -Nrc3pad gcc-3.0.4/gcc/f/stb.h gcc-3.1/gcc/f/stb.h *** gcc-3.0.4/gcc/f/stb.h Tue Mar 30 09:23:38 1999 --- gcc-3.1/gcc/f/stb.h Sat May 26 01:31:46 2001 *************** the Free Software Foundation, 59 Temple *** 27,34 **** /* Allow multiple inclusion to work. */ ! #ifndef _H_f_stb ! #define _H_f_stb /* Simple definitions and enumerations. */ --- 27,34 ---- /* Allow multiple inclusion to work. */ ! #ifndef GCC_F_STB_H ! #define GCC_F_STB_H /* Simple definitions and enumerations. */ *************** ffelexHandler ffestb_V027 (ffelexToken t *** 250,253 **** /* End of #include file. */ ! #endif --- 250,253 ---- /* End of #include file. */ ! #endif /* ! GCC_F_STB_H */ diff -Nrc3pad gcc-3.0.4/gcc/f/stc.c gcc-3.1/gcc/f/stc.c *** gcc-3.0.4/gcc/f/stc.c Sat Feb 26 20:02:01 2000 --- gcc-3.1/gcc/f/stc.c Thu Sep 13 14:37:23 2001 *************** static void ffestc_shriek_where_ (bool o *** 339,346 **** #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 ffestvFormat ffestc_subr_format_ (ffestpFile *spec); static bool ffestc_subr_is_branch_ (ffestpFile *spec); static bool ffestc_subr_is_format_ (ffestpFile *spec); --- 339,346 ---- #if FFESTR_F90 static void ffestc_shriek_wherethen_ (bool ok); #endif ! 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); *************** ffestc_shriek_wherethen_ (bool ok) *** 5044,5050 **** using "etc" as the pick-one-of-these string. */ static int ! ffestc_subr_binsrch_ (const char **list, int size, ffestpFile *spec, const char *whine) { int lowest_tested; int highest_tested; --- 5044,5051 ---- using "etc" as the pick-one-of-these string. */ static int ! ffestc_subr_binsrch_ (const char *const *list, int size, ffestpFile *spec, ! const char *whine) { int lowest_tested; int highest_tested; *************** ffestc_R904 () *** 10202,10209 **** { int i; int expect_file; ! const char *status_strs[] ! = { "New", "Old", --- 10203,10209 ---- { int i; int expect_file; ! static const char *const status_strs[] = { "New", "Old", *************** ffestc_R904 () *** 10211,10239 **** "Scratch", "Unknown" }; ! const char *access_strs[] ! = { "Append", "Direct", "Keyed", "Sequential" }; ! const char *blank_strs[] ! = { "Null", "Zero" }; ! const char *carriagecontrol_strs[] ! = { "Fortran", "List", "None" }; ! const char *dispose_strs[] ! = { "Delete", "Keep", --- 10211,10235 ---- "Scratch", "Unknown" }; ! static const char *const access_strs[] = { "Append", "Direct", "Keyed", "Sequential" }; ! static const char *const blank_strs[] = { "Null", "Zero" }; ! static const char *const carriagecontrol_strs[] = { "Fortran", "List", "None" }; ! static const char *const dispose_strs[] = { "Delete", "Keep", *************** ffestc_R904 () *** 10243,10284 **** "Submit", "Submit/Delete" }; ! const char *form_strs[] ! = { "Formatted", "Unformatted" }; ! const char *organization_strs[] ! = { "Indexed", "Relative", "Sequential" }; ! const char *position_strs[] ! = { "Append", "AsIs", "Rewind" }; ! const char *action_strs[] ! = { "Read", "ReadWrite", "Write" }; ! const char *delim_strs[] ! = { "Apostrophe", "None", "Quote" }; ! const char *recordtype_strs[] ! = { "Fixed", "Segmented", --- 10239,10274 ---- "Submit", "Submit/Delete" }; ! static const char *const form_strs[] = { "Formatted", "Unformatted" }; ! static const char *const organization_strs[] = { "Indexed", "Relative", "Sequential" }; ! static const char *const position_strs[] = { "Append", "AsIs", "Rewind" }; ! static const char *const action_strs[] = { "Read", "ReadWrite", "Write" }; ! static const char *const delim_strs[] = { "Apostrophe", "None", "Quote" }; ! static const char *const recordtype_strs[] = { "Fixed", "Segmented", *************** ffestc_R904 () *** 10287,10294 **** "Stream_LF", "Variable" }; ! const char *pad_strs[] ! = { "No", "Yes" --- 10277,10283 ---- "Stream_LF", "Variable" }; ! static const char *const pad_strs[] = { "No", "Yes" *************** ffestc_R904 () *** 10457,10464 **** void ffestc_R907 () { ! const char *status_strs[] ! = { "Delete", "Keep", --- 10446,10452 ---- void ffestc_R907 () { ! static const char *const status_strs[] = { "Delete", "Keep", diff -Nrc3pad gcc-3.0.4/gcc/f/stc.h gcc-3.1/gcc/f/stc.h *** gcc-3.0.4/gcc/f/stc.h Mon Feb 15 18:17:31 1999 --- gcc-3.1/gcc/f/stc.h Sat May 26 01:31:46 2001 *************** the Free Software Foundation, 59 Temple *** 27,34 **** /* Allow multiple inclusion to work. */ ! #ifndef _H_f_stc ! #define _H_f_stc /* Simple definitions and enumerations. */ --- 27,34 ---- /* Allow multiple inclusion to work. */ ! #ifndef GCC_F_STC_H ! #define GCC_F_STC_H /* Simple definitions and enumerations. */ *************** void ffestc_any (void); *** 357,360 **** /* End of #include file. */ ! #endif --- 357,360 ---- /* End of #include file. */ ! #endif /* ! GCC_F_STC_H */ diff -Nrc3pad gcc-3.0.4/gcc/f/std.c gcc-3.1/gcc/f/std.c *** gcc-3.0.4/gcc/f/std.c Fri Oct 13 06:26:45 2000 --- gcc-3.1/gcc/f/std.c Thu Oct 18 03:57:51 2001 *************** typedef enum *** 69,75 **** FFESTD_ } ffestdStatelet_; - #if FFECOM_TWOPASS typedef enum { FFESTD_stmtidENDDOLOOP_, --- 69,74 ---- *************** typedef enum *** 134,147 **** FFESTD_stmtid_, } ffestdStmtId_; - #endif - /* Internal typedefs. */ typedef struct _ffestd_expr_item_ *ffestdExprItem_; - #if FFECOM_TWOPASS typedef struct _ffestd_stmt_ *ffestdStmt_; - #endif /* Private include files. */ --- 133,142 ---- *************** struct _ffestd_expr_item_ *** 155,170 **** 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 --- 150,162 ---- *************** struct _ffestd_stmt_ *** 491,537 **** 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_ ! = { NULL, NULL }; ! #endif ! #if FFECOM_targetCURRENT == FFECOM_targetGCC ! static int ffestd_2pass_entrypoints_ = 0; /* # ENTRY statements ! pending. */ ! #endif /* 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 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 --- 483,518 ---- u; }; /* 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; static ffestdExprItem_ *ffestd_expr_list_; static struct { ffestdStmt_ first; ffestdStmt_ last; } ! ffestd_stmt_list_ = { NULL, NULL }; ! ! /* # ENTRY statements pending. */ ! static int ffestd_2pass_entrypoints_ = 0; /* Static functions (internal). */ static void ffestd_stmt_append_ (ffestdStmt_ stmt); static ffestdStmt_ ffestd_stmt_new_ (ffestdStmtId_ id); static void ffestd_stmt_pass_ (void); ! #if FFESTD_COPY_EASY_ static ffestpInquireStmt *ffestd_subr_copy_easy_ (ffestpInquireIx max); #endif static void ffestd_subr_vxt_ (void); #if FFESTR_F90 static void ffestd_subr_f90_ (void); #endif *************** static void ffestd_R1001rtexpr_ (ffests *** 562,568 **** /* 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])) --- 543,548 ---- *************** static void ffestd_R1001rtexpr_ (ffests *** 571,583 **** #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_() \ --- 551,556 ---- *************** static void ffestd_R1001rtexpr_ (ffests *** 603,609 **** || ffestd_statelet_ == FFESTD_stateletITEM_); \ ffestd_statelet_ = FFESTD_stateletSIMPLE_ ! #if FFESTD_COPY_EASY_ && FFECOM_TWOPASS #define ffestd_subr_copy_accept_() (ffestpAcceptStmt *) \ ffestd_subr_copy_easy_((ffestpInquireIx) FFESTP_acceptix) #define ffestd_subr_copy_beru_() (ffestpBeruStmt *) \ --- 576,582 ---- || ffestd_statelet_ == FFESTD_stateletITEM_); \ ffestd_statelet_ = FFESTD_stateletSIMPLE_ ! #if FFESTD_COPY_EASY_ #define ffestd_subr_copy_accept_() (ffestpAcceptStmt *) \ ffestd_subr_copy_easy_((ffestpInquireIx) FFESTP_acceptix) #define ffestd_subr_copy_beru_() (ffestpBeruStmt *) \ *************** static void ffestd_R1001rtexpr_ (ffests *** 636,642 **** ffestd_stmt_append_(ffestd_stmt_new_(FFESTD_stmtidR737A_)); */ - #if FFECOM_TWOPASS static void ffestd_stmt_append_ (ffestdStmt_ stmt) { --- 609,614 ---- *************** ffestd_stmt_append_ (ffestdStmt_ stmt) *** 646,658 **** 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) { --- 618,628 ---- *************** ffestd_stmt_new_ (ffestdStmtId_ id) *** 663,674 **** return stmt; } - #endif /* ffestd_stmt_pass_ -- Pass all statements on list to ffeste ffestd_stmt_pass_(); */ - #if FFECOM_TWOPASS static void ffestd_stmt_pass_ () { --- 633,642 ---- *************** ffestd_stmt_pass_ () *** 676,682 **** 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 (); --- 644,649 ---- *************** ffestd_stmt_pass_ () *** 717,723 **** expand_end_case (which); } - #endif for (stmt = ffestd_stmt_list_.first; stmt != (ffestdStmt_) &ffestd_stmt_list_.first; --- 684,689 ---- *************** ffestd_stmt_pass_ () *** 1175,1181 **** } } - #endif /* ffestd_subr_copy_easy_ -- Copy I/O statement data structure ffestd_subr_copy_easy_(); --- 1141,1146 ---- *************** ffestd_stmt_pass_ () *** 1187,1193 **** and structure references assume (though not necessarily dangerous if FALSE) that INQUIRE has the most file elements. */ ! #if FFESTD_COPY_EASY_ && FFECOM_TWOPASS static ffestpInquireStmt * ffestd_subr_copy_easy_ (ffestpInquireIx max) { --- 1152,1158 ---- and structure references assume (though not necessarily dangerous if FALSE) that INQUIRE has the most file elements. */ ! #if FFESTD_COPY_EASY_ static ffestpInquireStmt * ffestd_subr_copy_easy_ (ffestpInquireIx max) { *************** ffestd_subr_f90_ () *** 1326,1332 **** ffestd_subr_vxt_(); */ - #if FFECOM_targetCURRENT == FFECOM_targetGCC static void ffestd_subr_vxt_ () { --- 1291,1296 ---- *************** ffestd_subr_vxt_ () *** 1336,1342 **** ffebad_finish (); } - #endif /* ffestd_begin_uses -- Start a bunch of USE statements ffestd_begin_uses(); --- 1300,1305 ---- *************** ffestd_subr_vxt_ () *** 1350,1361 **** 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 --- 1313,1318 ---- *************** ffestd_begin_uses () *** 1371,1389 **** void ffestd_do (bool ok UNUSED) { ! #if FFECOM_ONEPASS ! ffestd_subr_line_now_ (); ! ffeste_do (ffestw_stack_top ()); ! #else ! { ! 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 --ffestd_block_level_; assert (ffestd_block_level_ >= 0); --- 1328,1339 ---- void ffestd_do (bool ok UNUSED) { ! ffestdStmt_ stmt; ! 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); *************** ffestd_do (bool ok UNUSED) *** 1400,1411 **** 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) --- 1350,1355 ---- *************** ffestd_end_R740 (bool ok) *** 1432,1449 **** void ffestd_end_R807 (bool ok UNUSED) { ! #if FFECOM_ONEPASS ! ffestd_subr_line_now_ (); ! ffeste_end_R807 (); ! #else ! { ! ffestdStmt_ stmt; ! stmt = ffestd_stmt_new_ (FFESTD_stmtidENDLOGIF_); ! ffestd_stmt_append_ (stmt); ! ffestd_subr_line_save_ (stmt); ! } ! #endif --ffestd_block_level_; assert (ffestd_block_level_ >= 0); --- 1376,1386 ---- void ffestd_end_R807 (bool ok UNUSED) { ! ffestdStmt_ stmt; ! stmt = ffestd_stmt_new_ (FFESTD_stmtidENDLOGIF_); ! ffestd_stmt_append_ (stmt); ! ffestd_subr_line_save_ (stmt); --ffestd_block_level_; assert (ffestd_block_level_ >= 0); *************** ffestd_exec_begin () *** 1458,1468 **** { 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. */ --- 1395,1400 ---- *************** ffestd_exec_begin () *** 1484,1490 **** } while (--ents != 0); } - #endif } /* ffestd_exec_end -- Executable statements can no longer come in now --- 1416,1421 ---- *************** ffestd_exec_begin () *** 1494,1516 **** void ffestd_exec_end () { - #if FFECOM_targetCURRENT == FFECOM_targetGCC int old_lineno = lineno; const char *old_input_filename = input_filename; - #endif 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) --- 1425,1437 ---- *************** ffestd_exec_end () *** 1539,1545 **** lineno = old_lineno; input_filename = old_input_filename; - #endif } /* ffestd_init_3 -- Initialize for any program unit --- 1460,1465 ---- *************** ffestd_exec_end () *** 1549,1558 **** 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. */ --- 1469,1476 ---- *************** ffestd_init_3 () *** 1560,1571 **** 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 --- 1478,1483 ---- *************** ffestd_labeldef_any (ffelab label UNUSED *** 1575,1591 **** void ffestd_labeldef_branch (ffelab label) { ! #if FFECOM_ONEPASS ! ffeste_labeldef_branch (label); ! #else ! { ! ffestdStmt_ stmt; ! stmt = ffestd_stmt_new_ (FFESTD_stmtidEXECLABEL_); ! ffestd_stmt_append_ (stmt); ! stmt->u.execlabel.label = label; ! } ! #endif ffestd_is_reachable_ = TRUE; } --- 1487,1497 ---- void ffestd_labeldef_branch (ffelab label) { ! ffestdStmt_ stmt; ! stmt = ffestd_stmt_new_ (FFESTD_stmtidEXECLABEL_); ! ffestd_stmt_append_ (stmt); ! stmt->u.execlabel.label = label; ffestd_is_reachable_ = TRUE; } *************** ffestd_labeldef_branch (ffelab label) *** 1597,1627 **** void ffestd_labeldef_format (ffelab label) { ! ffestd_label_formatdef_ = label; ! #if FFECOM_ONEPASS ! ffeste_labeldef_format (label); ! #else ! { ! ffestdStmt_ stmt; ! 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 } /* ffestd_labeldef_useless -- Generate "code" for useless label def --- 1503,1515 ---- void ffestd_labeldef_format (ffelab label) { ! ffestdStmt_ stmt; ! ffestd_label_formatdef_ = label; ! stmt = ffestd_stmt_new_ (FFESTD_stmtidFORMATLABEL_); ! ffestd_stmt_append_ (stmt); ! stmt->u.formatlabel.label = label; } /* ffestd_labeldef_useless -- Generate "code" for useless label def *************** ffestd_labeldef_format (ffelab label) *** 1631,1642 **** 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) --- 1519,1524 ---- *************** void *** 1648,1660 **** 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) --- 1530,1535 ---- *************** void *** 1665,1677 **** 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 --- 1540,1545 ---- *************** ffestd_R424 (ffelexToken access, ffestrO *** 1720,1731 **** 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 --- 1588,1593 ---- *************** void *** 2016,2028 **** 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 --- 1878,1883 ---- *************** void *** 2035,2047 **** 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 --- 1890,1895 ---- *************** void *** 2054,2066 **** 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 --- 1902,1907 ---- *************** void *** 2073,2085 **** 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 --- 1914,1919 ---- *************** void *** 2092,2104 **** 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 --- 1926,1931 ---- *************** void *** 2111,2126 **** 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 --- 1938,1943 ---- *************** void *** 2133,2148 **** 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 --- 1950,1955 ---- *************** void *** 2155,2167 **** 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 --- 1962,1967 ---- *************** void *** 2365,2377 **** 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 --- 2165,2170 ---- *************** void *** 2385,2400 **** 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 --- 2178,2183 ---- *************** void *** 2407,2419 **** 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 --- 2190,2195 ---- *************** void *** 2426,2438 **** 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 --- 2202,2207 ---- *************** void *** 2445,2457 **** 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) --- 2214,2219 ---- *************** ffestd_R539item (ffestpType type UNUSED, *** 2465,2552 **** 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 --- 2227,2233 ---- *************** void *** 2559,2571 **** 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 --- 2240,2245 ---- *************** void *** 2578,2590 **** 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 --- 2252,2257 ---- *************** void *** 2597,2609 **** 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 --- 2264,2269 ---- *************** void *** 2616,2628 **** 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 --- 2276,2281 ---- *************** void *** 2635,2647 **** 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 --- 2288,2293 ---- *************** void *** 2656,2668 **** ffestd_R544_start () { ffestd_check_start_ (); - - #if FFECOM_targetCURRENT == FFECOM_targetFFE - fputs ("* EQUIVALENCE (", dmpout); - #elif FFECOM_targetCURRENT == FFECOM_targetGCC - #else - #error - #endif } #endif --- 2302,2307 ---- *************** void *** 2677,2690 **** 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 --- 2316,2321 ---- *************** void *** 2699,2711 **** ffestd_R544_finish () { ffestd_check_finish_ (); - - #if FFECOM_targetCURRENT == FFECOM_targetFFE - fputs (")\n", dmpout); - #elif FFECOM_targetCURRENT == FFECOM_targetGCC - #else - #error - #endif } #endif --- 2330,2335 ---- *************** void *** 2719,2731 **** 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 --- 2343,2348 ---- *************** ffestd_R547_item_object (ffelexToken nam *** 2739,2758 **** 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 --- 2356,2361 ---- *************** void *** 2765,2780 **** 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 --- 2368,2373 ---- *************** void *** 2787,2799 **** 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 --- 2380,2385 ---- *************** ffestd_R620 (ffesttExprList exprlist, ff *** 2809,2826 **** 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 --- 2395,2400 ---- *************** ffestd_R625 (ffesttExprList exprlist, ff *** 2857,2874 **** 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 --- 2431,2436 ---- *************** ffestd_R625 (ffesttExprList exprlist, ff *** 2879,2902 **** void ffestd_R737A (ffebld dest, ffebld source) { ! 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 } /* ffestd_R737B -- Assignment statement inside of WHERE --- 2441,2457 ---- void ffestd_R737A (ffebld dest, ffebld source) { ! ffestdStmt_ stmt; ! ffestd_check_simple_ (); ! 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 *************** void *** 2908,2923 **** 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 --- 2463,2468 ---- *************** ffestd_R738 (ffebld dest, ffebld source) *** 2932,2946 **** 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 --- 2477,2482 ---- *************** ffestd_R740 (ffebld expr) *** 2955,2970 **** 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 --- 2491,2496 ---- *************** ffestd_R742 (ffebld expr) *** 2979,2994 **** 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 --- 2505,2510 ---- *************** ffestd_R745 (bool ok) *** 3032,3055 **** void ffestd_R803 (ffelexToken construct_name UNUSED, ffebld expr) { ! 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 ++ffestd_block_level_; assert (ffestd_block_level_ > 0); --- 2548,2564 ---- void ffestd_R803 (ffelexToken construct_name UNUSED, ffebld expr) { ! ffestdStmt_ stmt; ! ffestd_check_simple_ (); ! 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); *************** ffestd_R803 (ffelexToken construct_name *** 3060,3083 **** void ffestd_R804 (ffebld expr, ffelexToken name UNUSED) { ! 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 } /* ELSE statement. */ --- 2569,2585 ---- void ffestd_R804 (ffebld expr, ffelexToken name UNUSED) { ! ffestdStmt_ stmt; ! ffestd_check_simple_ (); ! 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. */ *************** ffestd_R804 (ffebld expr, ffelexToken na *** 3085,3105 **** void ffestd_R805 (ffelexToken name UNUSED) { ! ffestd_check_simple_ (); ! #if FFECOM_ONEPASS ! ffestd_subr_line_now_ (); ! ffeste_R805 (); /* Don't bother with name. */ ! #else ! { ! ffestdStmt_ stmt; ! 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 } /* END IF statement. */ --- 2587,2600 ---- void ffestd_R805 (ffelexToken name UNUSED) { ! 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 ()); } /* END IF statement. */ *************** ffestd_R805 (ffelexToken name UNUSED) *** 3107,3125 **** void ffestd_R806 (bool ok UNUSED) { ! #if FFECOM_ONEPASS ! ffestd_subr_line_now_ (); ! ffeste_R806 (); ! #else ! { ! 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 --ffestd_block_level_; assert (ffestd_block_level_ >= 0); --- 2602,2613 ---- void ffestd_R806 (bool ok UNUSED) { ! 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 ()); --ffestd_block_level_; assert (ffestd_block_level_ >= 0); *************** ffestd_R806 (bool ok UNUSED) *** 3134,3156 **** void ffestd_R807 (ffebld expr) { ! 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 ++ffestd_block_level_; assert (ffestd_block_level_ > 0); --- 2622,2637 ---- void ffestd_R807 (ffebld expr) { ! ffestdStmt_ stmt; ! ffestd_check_simple_ (); ! 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); *************** ffestd_R807 (ffebld expr) *** 3165,3189 **** void ffestd_R809 (ffelexToken construct_name UNUSED, ffebld expr) { ! 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 ++ffestd_block_level_; assert (ffestd_block_level_ > 0); --- 2646,2663 ---- void ffestd_R809 (ffelexToken construct_name UNUSED, ffebld expr) { ! ffestdStmt_ stmt; ! ffestd_check_simple_ (); ! 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); *************** ffestd_R809 (ffelexToken construct_name *** 3200,3223 **** void ffestd_R810 (unsigned long casenum) { ! 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 } /* ffestd_R811 -- End a SELECT --- 2674,2690 ---- void ffestd_R810 (unsigned long casenum) { ! ffestdStmt_ stmt; ! ffestd_check_simple_ (); ! 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 *************** ffestd_R810 (unsigned long casenum) *** 3227,3245 **** void ffestd_R811 (bool ok UNUSED) { ! #if FFECOM_ONEPASS ! ffestd_subr_line_now_ (); ! ffeste_R811 (ffestw_stack_top ()); ! #else ! { ! 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 --ffestd_block_level_; assert (ffestd_block_level_ >= 0); --- 2694,2705 ---- void ffestd_R811 (bool ok UNUSED) { ! ffestdStmt_ stmt; ! 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); *************** ffestd_R819A (ffelexToken construct_name *** 3257,3289 **** ffebld end, ffelexToken end_token, ffebld incr, ffelexToken incr_token) { ! 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 ++ffestd_block_level_; assert (ffestd_block_level_ > 0); --- 2717,2741 ---- ffebld end, ffelexToken end_token, ffebld incr, ffelexToken incr_token) { ! ffestdStmt_ stmt; ! ffestd_check_simple_ (); ! 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); *************** void *** 3299,3323 **** ffestd_R819B (ffelexToken construct_name UNUSED, ffelab label, ffebld expr) { ! 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 ++ffestd_block_level_; assert (ffestd_block_level_ > 0); --- 2751,2768 ---- ffestd_R819B (ffelexToken construct_name UNUSED, ffelab label, ffebld expr) { ! ffestdStmt_ stmt; ! ffestd_check_simple_ (); ! 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); *************** ffestd_R819B (ffelexToken construct_name *** 3337,3356 **** void ffestd_R825 (ffelexToken name UNUSED) { ! ffestd_check_simple_ (); ! #if FFECOM_ONEPASS ! ffestd_subr_line_now_ (); ! ffeste_R825 (); ! #else ! { ! ffestdStmt_ stmt; ! stmt = ffestd_stmt_new_ (FFESTD_stmtidR825_); ! ffestd_stmt_append_ (stmt); ! ffestd_subr_line_save_ (stmt); ! } ! #endif } /* ffestd_R834 -- CYCLE statement --- 2782,2794 ---- void ffestd_R825 (ffelexToken name UNUSED) { ! ffestdStmt_ stmt; ! ffestd_check_simple_ (); ! stmt = ffestd_stmt_new_ (FFESTD_stmtidR825_); ! ffestd_stmt_append_ (stmt); ! ffestd_subr_line_save_ (stmt); } /* ffestd_R834 -- CYCLE statement *************** ffestd_R825 (ffelexToken name UNUSED) *** 3362,3382 **** void ffestd_R834 (ffestw block) { ! ffestd_check_simple_ (); ! #if FFECOM_ONEPASS ! ffestd_subr_line_now_ (); ! ffeste_R834 (block); ! #else ! { ! ffestdStmt_ stmt; ! stmt = ffestd_stmt_new_ (FFESTD_stmtidR834_); ! ffestd_stmt_append_ (stmt); ! ffestd_subr_line_save_ (stmt); ! stmt->u.R834.block = block; ! } ! #endif } /* ffestd_R835 -- EXIT statement --- 2800,2813 ---- void ffestd_R834 (ffestw block) { ! 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; } /* ffestd_R835 -- EXIT statement *************** ffestd_R834 (ffestw block) *** 3388,3408 **** void ffestd_R835 (ffestw block) { ! ffestd_check_simple_ (); ! #if FFECOM_ONEPASS ! ffestd_subr_line_now_ (); ! ffeste_R835 (block); ! #else ! { ! ffestdStmt_ stmt; ! stmt = ffestd_stmt_new_ (FFESTD_stmtidR835_); ! ffestd_stmt_append_ (stmt); ! ffestd_subr_line_save_ (stmt); ! stmt->u.R835.block = block; ! } ! #endif } /* ffestd_R836 -- GOTO statement --- 2819,2832 ---- void ffestd_R835 (ffestw block) { ! 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; } /* ffestd_R836 -- GOTO statement *************** ffestd_R835 (ffestw block) *** 3415,3435 **** void ffestd_R836 (ffelab label) { ! ffestd_check_simple_ (); ! #if FFECOM_ONEPASS ! ffestd_subr_line_now_ (); ! ffeste_R836 (label); ! #else ! { ! ffestdStmt_ stmt; ! stmt = ffestd_stmt_new_ (FFESTD_stmtidR836_); ! ffestd_stmt_append_ (stmt); ! ffestd_subr_line_save_ (stmt); ! stmt->u.R836.label = label; ! } ! #endif if (ffestd_block_level_ == 0) ffestd_is_reachable_ = FALSE; --- 2839,2852 ---- void ffestd_R836 (ffelab label) { ! 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; if (ffestd_block_level_ == 0) ffestd_is_reachable_ = FALSE; *************** ffestd_R836 (ffelab label) *** 3445,3469 **** void ffestd_R837 (ffelab *labels, int count, ffebld expr) { ! 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 } /* ffestd_R838 -- ASSIGN statement --- 2862,2879 ---- void ffestd_R837 (ffelab *labels, int count, ffebld expr) { ! ffestdStmt_ stmt; ! ffestd_check_simple_ (); ! 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 *************** ffestd_R837 (ffelab *labels, int count, *** 3478,3501 **** void ffestd_R838 (ffelab label, ffebld target) { ! 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 } /* ffestd_R839 -- Assigned GOTO statement --- 2888,2904 ---- void ffestd_R838 (ffelab label, ffebld target) { ! ffestdStmt_ stmt; ! ffestd_check_simple_ (); ! 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 *************** ffestd_R838 (ffelab label, ffebld target *** 3508,3530 **** void ffestd_R839 (ffebld target, ffelab *labels UNUSED, int count UNUSED) { ! 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 if (ffestd_block_level_ == 0) ffestd_is_reachable_ = FALSE; --- 2911,2926 ---- void ffestd_R839 (ffebld target, ffelab *labels UNUSED, int count UNUSED) { ! ffestdStmt_ stmt; ! ffestd_check_simple_ (); ! 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; *************** ffestd_R839 (ffebld target, ffelab *labe *** 3539,3564 **** void ffestd_R840 (ffebld expr, ffelab neg, ffelab zero, ffelab pos) { ! 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 if (ffestd_block_level_ == 0) ffestd_is_reachable_ = FALSE; --- 2935,2953 ---- void ffestd_R840 (ffebld expr, ffelab neg, ffelab zero, ffelab pos) { ! ffestdStmt_ stmt; ! ffestd_check_simple_ (); ! 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; *************** ffestd_R840 (ffebld expr, ffelab neg, ff *** 3571,3590 **** void ffestd_R841 (bool in_where UNUSED) { ! ffestd_check_simple_ (); ! #if FFECOM_ONEPASS ! ffestd_subr_line_now_ (); ! ffeste_R841 (); ! #else ! { ! ffestdStmt_ stmt; ! stmt = ffestd_stmt_new_ (FFESTD_stmtidR841_); ! ffestd_stmt_append_ (stmt); ! ffestd_subr_line_save_ (stmt); ! } ! #endif } /* ffestd_R842 -- STOP statement --- 2960,2972 ---- void ffestd_R841 (bool in_where UNUSED) { ! ffestdStmt_ stmt; ! ffestd_check_simple_ (); ! stmt = ffestd_stmt_new_ (FFESTD_stmtidR841_); ! ffestd_stmt_append_ (stmt); ! ffestd_subr_line_save_ (stmt); } /* ffestd_R842 -- STOP statement *************** ffestd_R841 (bool in_where UNUSED) *** 3594,3629 **** void ffestd_R842 (ffebld expr) { ! ffestd_check_simple_ (); ! #if FFECOM_ONEPASS ! ffestd_subr_line_now_ (); ! ffeste_R842 (expr); ! #else ! { ! ffestdStmt_ stmt; ! 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 if (ffestd_block_level_ == 0) ffestd_is_reachable_ = FALSE; --- 2976,3004 ---- void ffestd_R842 (ffebld expr) { ! 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); ! } if (ffestd_block_level_ == 0) ffestd_is_reachable_ = FALSE; *************** ffestd_R842 (ffebld expr) *** 3639,3661 **** void ffestd_R843 (ffebld expr) { ! 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 } /* ffestd_R904 -- OPEN statement --- 3014,3029 ---- void ffestd_R843 (ffebld expr) { ! ffestdStmt_ stmt; ! ffestd_check_simple_ (); ! 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 *************** ffestd_R843 (ffebld expr) *** 3667,3675 **** void ffestd_R904 () { ffestd_check_simple_ (); - #if FFECOM_targetCURRENT == FFECOM_targetGCC #define specified(something) \ (ffestp_file.open.open_spec[something].kw_or_val_present) --- 3035,3044 ---- void ffestd_R904 () { + ffestdStmt_ stmt; + ffestd_check_simple_ (); #define specified(something) \ (ffestp_file.open.open_spec[something].kw_or_val_present) *************** ffestd_R904 () *** 3703,3725 **** } #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 } /* ffestd_R907 -- CLOSE statement --- 3072,3084 ---- } #undef specified ! 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 *************** ffestd_R904 () *** 3731,3753 **** void ffestd_R907 () { ! 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 } /* ffestd_R909_start -- READ(...) statement list begin --- 3090,3105 ---- void ffestd_R907 () { ! ffestdStmt_ stmt; ! ffestd_check_simple_ (); ! 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 *************** void *** 3761,3769 **** ffestd_R909_start (bool only_format, ffestvUnit unit, ffestvFormat format, bool rec, bool key) { ffestd_check_start_ (); - #if FFECOM_targetCURRENT == FFECOM_targetGCC #define specified(something) \ (ffestp_file.read.read_spec[something].kw_or_val_present) --- 3113,3122 ---- ffestd_R909_start (bool only_format, ffestvUnit unit, ffestvFormat format, bool rec, bool key) { + ffestdStmt_ stmt; + ffestd_check_start_ (); #define specified(something) \ (ffestp_file.read.read_spec[something].kw_or_val_present) *************** ffestd_R909_start (bool only_format, ffe *** 3784,3813 **** } #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 } /* ffestd_R909_item -- READ statement i/o item --- 3137,3156 ---- } #undef specified ! 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 *************** ffestd_R909_start (bool only_format, ffe *** 3819,3841 **** void ffestd_R909_item (ffebld expr, ffelexToken expr_token) { 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 } /* ffestd_R909_finish -- READ statement list complete --- 3162,3179 ---- void ffestd_R909_item (ffebld expr, ffelexToken expr_token) { + ffestdExprItem_ item; + ffestd_check_item_ (); ! 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 *************** void *** 3848,3859 **** 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 --- 3186,3191 ---- *************** ffestd_R909_finish () *** 3866,3874 **** void ffestd_R910_start (ffestvUnit unit, ffestvFormat format, bool rec) { ffestd_check_start_ (); - #if FFECOM_targetCURRENT == FFECOM_targetGCC #define specified(something) \ (ffestp_file.write.write_spec[something].kw_or_val_present) --- 3198,3207 ---- void ffestd_R910_start (ffestvUnit unit, ffestvFormat format, bool rec) { + ffestdStmt_ stmt; + ffestd_check_start_ (); #define specified(something) \ (ffestp_file.write.write_spec[something].kw_or_val_present) *************** ffestd_R910_start (ffestvUnit unit, ffes *** 3883,3910 **** } #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 } /* ffestd_R910_item -- WRITE statement i/o item --- 3216,3233 ---- } #undef specified ! 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 *************** ffestd_R910_start (ffestvUnit unit, ffes *** 3916,3938 **** void ffestd_R910_item (ffebld expr, ffelexToken expr_token) { 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 } /* ffestd_R910_finish -- WRITE statement list complete --- 3239,3256 ---- void ffestd_R910_item (ffebld expr, ffelexToken expr_token) { + ffestdExprItem_ item; + ffestd_check_item_ (); ! 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 *************** void *** 3945,3956 **** 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 --- 3263,3268 ---- *************** ffestd_R910_finish () *** 3963,3988 **** void ffestd_R911_start (ffestvFormat format) { ! 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 } /* ffestd_R911_item -- PRINT statement i/o item --- 3275,3293 ---- void ffestd_R911_start (ffestvFormat format) { ! ffestdStmt_ stmt; ! ffestd_check_start_ (); ! 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 *************** ffestd_R911_start (ffestvFormat format) *** 3994,4016 **** void ffestd_R911_item (ffebld expr, ffelexToken expr_token) { 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 } /* ffestd_R911_finish -- PRINT statement list complete --- 3299,3316 ---- void ffestd_R911_item (ffebld expr, ffelexToken expr_token) { + ffestdExprItem_ item; + ffestd_check_item_ (); ! 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 *************** void *** 4023,4034 **** ffestd_R911_finish () { ffestd_check_finish_ (); - - #if FFECOM_ONEPASS - ffeste_R911_finish (); - #else - /* Nothing to do, it's implicit. */ - #endif } /* ffestd_R919 -- BACKSPACE statement --- 3323,3328 ---- *************** ffestd_R911_finish () *** 4040,4062 **** void ffestd_R919 () { ! 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 } /* ffestd_R920 -- ENDFILE statement --- 3334,3349 ---- void ffestd_R919 () { ! ffestdStmt_ stmt; ! ffestd_check_simple_ (); ! 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 *************** ffestd_R919 () *** 4068,4090 **** void ffestd_R920 () { ! 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 } /* ffestd_R921 -- REWIND statement --- 3355,3370 ---- void ffestd_R920 () { ! ffestdStmt_ stmt; ! ffestd_check_simple_ (); ! 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 *************** ffestd_R920 () *** 4096,4118 **** void ffestd_R921 () { ! 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 } /* ffestd_R923A -- INQUIRE statement (non-IOLENGTH version) --- 3376,3391 ---- void ffestd_R921 () { ! ffestdStmt_ stmt; ! ffestd_check_simple_ (); ! 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) *************** ffestd_R921 () *** 4124,4132 **** void ffestd_R923A (bool by_file) { ffestd_check_simple_ (); - #if FFECOM_targetCURRENT == FFECOM_targetGCC #define specified(something) \ (ffestp_file.inquire.inquire_spec[something].kw_or_val_present) --- 3397,3406 ---- void ffestd_R923A (bool by_file) { + ffestdStmt_ stmt; + ffestd_check_simple_ (); #define specified(something) \ (ffestp_file.inquire.inquire_spec[something].kw_or_val_present) *************** ffestd_R923A (bool by_file) *** 4151,4174 **** } #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 } /* ffestd_R923B_start -- INQUIRE(IOLENGTH=expr) statement list begin --- 3425,3438 ---- } #undef specified ! 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 *************** ffestd_R923A (bool by_file) *** 4181,4205 **** void ffestd_R923B_start () { ! 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 } /* ffestd_R923B_item -- INQUIRE statement i/o item --- 3445,3462 ---- void ffestd_R923B_start () { ! ffestdStmt_ stmt; ! ffestd_check_start_ (); ! 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 *************** ffestd_R923B_start () *** 4211,4232 **** void ffestd_R923B_item (ffebld expr) { 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 } /* ffestd_R923B_finish -- INQUIRE statement list complete --- 3468,3484 ---- void ffestd_R923B_item (ffebld expr) { + ffestdExprItem_ item; + ffestd_check_item_ (); ! 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 *************** void *** 4239,4250 **** ffestd_R923B_finish () { ffestd_check_finish_ (); - - #if FFECOM_ONEPASS - ffeste_R923B_finish (); - #else - /* Nothing to do, it's implicit. */ - #endif } /* ffestd_R1001 -- FORMAT statement --- 3491,3496 ---- *************** ffestd_R1001 (ffesttFormatList f) *** 4256,4261 **** --- 3502,3508 ---- { ffestsHolder str; ffests s = &str; + ffestdStmt_ stmt; ffestd_check_simple_ (); *************** ffestd_R1001 (ffesttFormatList f) *** 4267,4301 **** 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 ffestd_label_formatdef_ = NULL; } --- 3514,3522 ---- ffestd_R1001dump_ (s, f); /* Build the string in s. */ ffests_putc (s, ')'); ! stmt = ffestd_stmt_new_ (FFESTD_stmtidR1001_); ! ffestd_stmt_append_ (stmt); ! stmt->u.R1001.str = str; ffestd_label_formatdef_ = NULL; } *************** ffestd_R1001dump_ (ffests s, ffesttForma *** 4323,4335 **** 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: --- 3544,3550 ---- *************** ffestd_R1001dump_ (ffests s, ffesttForma *** 4349,4361 **** 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: --- 3564,3570 ---- *************** ffestd_R1001dump_ (ffests s, ffesttForma *** 4375,4387 **** 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: --- 3584,3590 ---- *************** ffestd_R1102 (ffesymbol s, ffelexToken n *** 4852,4867 **** 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 --- 4055,4060 ---- *************** ffestd_R1102 (ffesymbol s, ffelexToken n *** 4871,4876 **** --- 4064,4071 ---- void ffestd_R1103 (bool ok UNUSED) { + ffestdStmt_ stmt; + assert (ffestd_block_level_ == 0); if (FFESTD_IS_END_OPTIMIZED_ && ffestd_is_reachable_) *************** ffestd_R1103 (bool ok UNUSED) *** 4879,4894 **** 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 } /* ffestd_R1105 -- MODULE statement --- 4074,4081 ---- if (ffestw_state (ffestw_stack_top ()) != FFESTV_statePROGRAM5) ffestd_subr_labels_ (FALSE);/* Handle any undefined labels. */ ! stmt = ffestd_stmt_new_ (FFESTD_stmtidR1103_); ! ffestd_stmt_append_ (stmt); } /* ffestd_R1105 -- MODULE statement *************** ffestd_R1111 (ffesymbol s, ffelexToken n *** 5017,5032 **** 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 --- 4204,4209 ---- *************** ffestd_R1111 (ffesymbol s, ffelexToken n *** 5036,5041 **** --- 4213,4220 ---- void ffestd_R1112 (bool ok UNUSED) { + ffestdStmt_ stmt; + assert (ffestd_block_level_ == 0); /* Generate any return-like code here (not likely for BLOCK DATA!). */ *************** ffestd_R1112 (bool ok UNUSED) *** 5043,5058 **** 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 } /* ffestd_R1202 -- INTERFACE statement --- 4222,4229 ---- if (ffestw_state (ffestw_stack_top ()) != FFESTV_stateBLOCKDATA5) ffestd_subr_labels_ (TRUE); /* Handle any undefined labels. */ ! stmt = ffestd_stmt_new_ (FFESTD_stmtidR1112_); ! ffestd_stmt_append_ (stmt); } /* ffestd_R1202 -- INTERFACE statement *************** void *** 5249,5261 **** 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 --- 4420,4425 ---- *************** ffestd_R1207_item (ffelexToken name) *** 5269,5281 **** { 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 --- 4433,4438 ---- *************** void *** 5288,5300 **** 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 --- 4445,4450 ---- *************** void *** 5307,5319 **** 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 --- 4457,4462 ---- *************** ffestd_R1208_item (ffelexToken name) *** 5327,5339 **** { 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 --- 4470,4475 ---- *************** void *** 5346,5358 **** 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 --- 4482,4487 ---- *************** ffestd_R1208_finish () *** 5364,5386 **** void ffestd_R1212 (ffebld expr) { ! 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 } /* ffestd_R1213 -- Defined assignment statement --- 4493,4508 ---- void ffestd_R1212 (ffebld expr) { ! ffestdStmt_ stmt; ! ffestd_check_simple_ (); ! 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 *************** ffestd_R1213 (ffebld dest, ffebld source *** 5396,5410 **** 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 --- 4518,4523 ---- *************** ffestd_R1219 (ffesymbol s, ffelexToken f *** 5427,5436 **** 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; --- 4540,4545 ---- *************** ffestd_R1219 (ffesymbol s, ffelexToken f *** 5438,5534 **** 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 --- 4547,4552 ---- *************** ffestd_R1219 (ffesymbol s, ffelexToken f *** 5538,5543 **** --- 4556,4563 ---- void ffestd_R1221 (bool ok UNUSED) { + ffestdStmt_ stmt; + assert (ffestd_block_level_ == 0); if (FFESTD_IS_END_OPTIMIZED_ && ffestd_is_reachable_) *************** ffestd_R1221 (bool ok UNUSED) *** 5546,5561 **** 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 } /* ffestd_R1223 -- SUBROUTINE statement --- 4566,4573 ---- if (ffestw_state (ffestw_stack_top ()) != FFESTV_stateFUNCTION5) ffestd_subr_labels_ (FALSE);/* Handle any undefined labels. */ ! stmt = ffestd_stmt_new_ (FFESTD_stmtidR1221_); ! ffestd_stmt_append_ (stmt); } /* ffestd_R1223 -- SUBROUTINE statement *************** ffestd_R1223 (ffesymbol s, ffelexToken s *** 5580,5601 **** 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 --- 4592,4597 ---- *************** ffestd_R1223 (ffesymbol s, ffelexToken s *** 5605,5610 **** --- 4601,4608 ---- void ffestd_R1225 (bool ok UNUSED) { + ffestdStmt_ stmt; + assert (ffestd_block_level_ == 0); if (FFESTD_IS_END_OPTIMIZED_ && ffestd_is_reachable_) *************** ffestd_R1225 (bool ok UNUSED) *** 5613,5628 **** 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 } /* ffestd_R1226 -- ENTRY statement --- 4611,4618 ---- if (ffestw_state (ffestw_stack_top ()) != FFESTV_stateSUBROUTINE5) ffestd_subr_labels_ (FALSE);/* Handle any undefined labels. */ ! stmt = ffestd_stmt_new_ (FFESTD_stmtidR1225_); ! ffestd_stmt_append_ (stmt); } /* ffestd_R1226 -- ENTRY statement *************** ffestd_R1226 (ffesymbol entry) *** 5637,5646 **** { 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; --- 4627,4632 ---- *************** ffestd_R1226 (ffesymbol entry) *** 5651,5657 **** stmt->u.R1226.entry = entry; stmt->u.R1226.entrynum = ++ffestd_2pass_entrypoints_; } - #endif ffestd_is_reachable_ = TRUE; } --- 4637,4642 ---- *************** ffestd_R1226 (ffesymbol entry) *** 5666,5689 **** void ffestd_R1227 (ffebld expr) { ! 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 if (ffestd_block_level_ == 0) ffestd_is_reachable_ = FALSE; --- 4651,4667 ---- void ffestd_R1227 (ffebld expr) { ! ffestdStmt_ stmt; ! ffestd_check_simple_ (); ! 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; *************** void *** 5732,5743 **** 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 --- 4710,4715 ---- *************** ffestd_R1229_start (ffelexToken name UNU *** 5761,5769 **** 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_ (); --- 4733,4738 ---- *************** ffestd_R1229_finish (ffesymbol s) *** 5771,5807 **** 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 --- 4740,4748 ---- *************** void *** 5852,5868 **** 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 --- 4793,4799 ---- *************** void *** 5875,5894 **** 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 --- 4806,4811 ---- *************** void *** 5901,5913 **** 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 --- 4818,4823 ---- *************** ffestd_V003_finish () *** 5917,5928 **** 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 --- 4827,4832 ---- *************** void *** 5933,5945 **** 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 --- 4837,4842 ---- *************** ffestd_V009 () *** 5949,5960 **** 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 --- 4846,4851 ---- *************** void *** 5965,5977 **** 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 --- 4856,4861 ---- *************** ffestd_V012 () *** 5981,5992 **** void ffestd_V013 (bool ok) { - #if FFECOM_targetCURRENT == FFECOM_targetFFE - fputs ("* END_MAP\n", dmpout); - #elif FFECOM_targetCURRENT == FFECOM_targetGCC - #else - #error - #endif } #endif --- 4865,4870 ---- *************** void *** 6000,6013 **** 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 --- 4878,4883 ---- *************** void *** 6020,6032 **** 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 --- 4890,4895 ---- *************** void *** 6039,6051 **** 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 --- 4902,4907 ---- *************** void *** 6058,6070 **** 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 --- 4914,4919 ---- *************** void *** 6078,6091 **** 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 --- 4927,4932 ---- *************** void *** 6098,6110 **** 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 --- 4939,4944 ---- *************** void *** 6117,6136 **** 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 --- 4951,4956 ---- *************** void *** 6143,6155 **** 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 --- 4963,4968 ---- *************** void *** 6163,6194 **** 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 --- 4976,4982 ---- *************** void *** 6201,6227 **** 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 --- 4989,4994 ---- *************** void *** 6234,6251 **** 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 --- 5001,5006 ---- *************** void *** 6259,6290 **** 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 --- 5014,5020 ---- *************** void *** 6297,6323 **** 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 --- 5027,5032 ---- *************** void *** 6330,6347 **** 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 --- 5039,5044 ---- *************** void *** 6356,6387 **** 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 --- 5053,5059 ---- *************** void *** 6394,6420 **** 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 --- 5066,5071 ---- *************** void *** 6427,6444 **** 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 --- 5078,5083 ---- *************** void *** 6452,6480 **** 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 --- 5091,5097 ---- *************** void *** 6487,6515 **** 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 --- 5104,5110 ---- *************** void *** 6523,6553 **** 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 --- 5118,5124 ---- *************** void *** 6560,6586 **** 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 --- 5131,5136 ---- *************** void *** 6593,6610 **** 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 --- 5143,5148 ---- *************** void *** 6618,6648 **** 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 --- 5156,5162 ---- *************** void *** 6655,6681 **** 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 --- 5169,5174 ---- *************** void *** 6688,6705 **** 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 --- 5181,5186 ---- *************** void *** 6713,6739 **** 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 --- 5194,5200 ---- *************** void *** 6747,6773 **** 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 --- 5208,5213 ---- *************** void *** 6780,6803 **** 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 --- 5220,5225 ---- *************** void *** 6810,6838 **** 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 --- 5232,5238 ---- *************** void *** 6846,6859 **** 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 --- 5246,5252 ---- *************** void *** 6867,6882 **** 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 --- 5260,5265 ---- *************** void *** 6889,6901 **** 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. */ --- 5272,5277 ---- *************** ffestd_V027_finish () *** 6903,6920 **** void ffestd_any () { ! ffestd_check_simple_ (); ! #if FFECOM_ONEPASS ! ffestd_subr_line_now_ (); ! ffeste_R841 (); ! #else ! { ! ffestdStmt_ stmt; ! stmt = ffestd_stmt_new_ (FFESTD_stmtidR841_); ! ffestd_stmt_append_ (stmt); ! ffestd_subr_line_save_ (stmt); ! } ! #endif } --- 5279,5289 ---- void ffestd_any () { ! ffestdStmt_ stmt; ! ffestd_check_simple_ (); ! stmt = ffestd_stmt_new_ (FFESTD_stmtidR841_); ! ffestd_stmt_append_ (stmt); ! ffestd_subr_line_save_ (stmt); } diff -Nrc3pad gcc-3.0.4/gcc/f/std.h gcc-3.1/gcc/f/std.h *** gcc-3.0.4/gcc/f/std.h Mon Feb 15 18:17:33 1999 --- gcc-3.1/gcc/f/std.h Sat May 26 01:31:46 2001 *************** the Free Software Foundation, 59 Temple *** 27,34 **** /* Allow multiple inclusion to work. */ ! #ifndef _H_f_std ! #define _H_f_std /* Simple definitions and enumerations. */ --- 27,34 ---- /* Allow multiple inclusion to work. */ ! #ifndef GCC_F_STD_H ! #define GCC_F_STD_H /* Simple definitions and enumerations. */ *************** void ffestd_any (void); *** 295,298 **** /* End of #include file. */ ! #endif --- 295,298 ---- /* End of #include file. */ ! #endif /* ! GCC_F_STD_H */ diff -Nrc3pad gcc-3.0.4/gcc/f/ste.c gcc-3.1/gcc/f/ste.c *** gcc-3.0.4/gcc/f/ste.c Sun Feb 3 05:16:40 2002 --- gcc-3.1/gcc/f/ste.c Mon Feb 4 16:07:59 2002 *************** *** 1,5 **** /* ste.c -- Implementation File (module.c template V1.0) ! Copyright (C) 1995, 1996, 2000 Free Software Foundation, Inc. Contributed by James Craig Burley. This file is part of GNU Fortran. --- 1,5 ---- /* ste.c -- Implementation File (module.c template V1.0) ! Copyright (C) 1995, 1996, 2000, 2002 Free Software Foundation, Inc. Contributed by James Craig Burley. This file is part of GNU Fortran. *************** the Free Software Foundation, 59 Temple *** 31,43 **** /* Include files. */ #include "proj.h" - - #if FFECOM_targetCURRENT == FFECOM_targetGCC #include "rtl.h" #include "toplev.h" #include "ggc.h" - #endif - #include "ste.h" #include "bld.h" #include "com.h" --- 31,39 ---- *************** typedef enum *** 79,85 **** /* 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. */ --- 75,80 ---- *************** static tree ffeste_io_end_; /* END= labe *** 89,99 **** 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, --- 84,92 ---- *************** static tree ffeste_io_olist_ (bool have_ *** 144,161 **** 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_() \ --- 137,147 ---- *************** ffeste_end_stmt_(void) *** 499,505 **** /* 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, --- 485,490 ---- *************** ffeste_begin_iterdo_ (ffestw block, tree *** 738,749 **** } } - #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) { --- 723,731 ---- *************** ffeste_end_iterdo_ (ffestw block, tree t *** 789,799 **** 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) { --- 771,779 ---- *************** ffeste_io_call_ (tree call, bool do_chec *** 816,822 **** expand_goto (ffeste_io_abort_); expand_end_cond (); } - #endif /* Handle implied-DO in I/O list. --- 796,801 ---- *************** ffeste_io_call_ (tree call, bool do_chec *** 824,830 **** 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) { --- 803,808 ---- *************** ffeste_io_impdo_ (ffebld impdo, ffelexTo *** 903,909 **** ffeste_end_iterdo_ (NULL, tvar, tincr, titervar); } - #endif /* I/O driver for formatted I/O item (do_fio) --- 881,886 ---- *************** ffeste_io_impdo_ (ffebld impdo, ffelexTo *** 914,920 **** 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) { --- 891,896 ---- *************** ffeste_io_dofio_ (ffebld expr) *** 993,999 **** 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 --- 969,974 ---- *************** ffeste_io_dofio_ (ffebld expr) *** 1003,1009 **** 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) { --- 978,983 ---- *************** ffeste_io_dolio_ (ffebld expr) *** 1086,1092 **** 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 --- 1060,1065 ---- *************** ffeste_io_dolio_ (ffebld expr) *** 1096,1102 **** 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) { --- 1069,1074 ---- *************** ffeste_io_douio_ (ffebld expr) *** 1175,1181 **** 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 --- 1147,1152 ---- *************** ffeste_io_douio_ (ffebld expr) *** 1191,1197 **** 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, --- 1162,1167 ---- *************** ffeste_io_ialist_ (bool have_err, *** 1298,1304 **** 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 --- 1268,1273 ---- *************** ffeste_io_ialist_ (bool have_err, *** 1314,1320 **** 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, --- 1283,1288 ---- *************** ffeste_io_cilist_ (bool have_err, *** 1525,1531 **** return t; } - #endif /* Make arglist with ptr to CLOSE control list. Returns a tree suitable as an argument list containing a pointer to --- 1493,1498 ---- *************** ffeste_io_cilist_ (bool have_err, *** 1541,1547 **** 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, --- 1508,1513 ---- *************** ffeste_io_cllist_ (bool have_err, *** 1641,1647 **** 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 --- 1607,1612 ---- *************** ffeste_io_cllist_ (bool have_err, *** 1657,1663 **** 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, --- 1622,1627 ---- *************** ffeste_io_icilist_ (bool have_err, *** 1837,1843 **** { 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); --- 1801,1807 ---- { 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); *************** ffeste_io_icilist_ (bool have_err, *** 1871,1877 **** return t; } - #endif /* Make arglist with ptr to INQUIRE control list --- 1835,1840 ---- *************** ffeste_io_icilist_ (bool have_err, *** 1888,1894 **** 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, --- 1851,1856 ---- *************** ffeste_io_inlist_ (bool have_err, *** 2132,2138 **** return t; } - #endif /* Make arglist with ptr to OPEN control list Returns a tree suitable as an argument list containing a pointer to --- 2094,2099 ---- *************** ffeste_io_inlist_ (bool have_err, *** 2148,2154 **** 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, --- 2109,2114 ---- *************** ffeste_io_olist_ (bool have_err, *** 2291,2325 **** 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) { --- 2251,2258 ---- *************** ffeste_subr_beru_ (ffestpBeruStmt *info, *** 2419,2425 **** ffeste_end_stmt_ (); } - #endif /* END DO statement --- 2352,2357 ---- *************** ffeste_subr_beru_ (ffestpBeruStmt *info, *** 2431,2439 **** 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) --- 2363,2368 ---- *************** ffeste_do (ffestw block) *** 2447,2455 **** ffestw_do_tvar (block), ffestw_do_incr_saved (block), ffestw_do_count_var (block)); - #else - #error - #endif } /* End of statement following logical IF. --- 2376,2381 ---- *************** ffeste_do (ffestw block) *** 2459,2475 **** 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. */ --- 2385,2395 ---- *************** ffeste_end_R807 () *** 2477,2506 **** 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; ! glabel = ffecom_lookup_label (label); ! assert (glabel != NULL_TREE); ! if (TREE_CODE (glabel) == ERROR_MARK) ! return; ! 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); ! emit_nop (); ! expand_label (glabel); ! } ! #else ! #error ! #endif } /* Generate "code" for FORMAT label definition. */ --- 2397,2418 ---- void ffeste_labeldef_branch (ffelab label) { ! tree glabel; ! glabel = ffecom_lookup_label (label); ! assert (glabel != NULL_TREE); ! if (TREE_CODE (glabel) == ERROR_MARK) ! return; ! 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); ! emit_nop (); ! expand_label (glabel); } /* Generate "code" for FORMAT label definition. */ *************** ffeste_labeldef_branch (ffelab label) *** 2508,2520 **** 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). */ --- 2420,2426 ---- *************** ffeste_R737A (ffebld dest, ffebld source *** 2524,2536 **** { 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_ (); --- 2430,2435 ---- *************** ffeste_R737A (ffebld dest, ffebld source *** 2538,2546 **** ffecom_expand_let_stmt (dest, source); ffeste_end_stmt_ (); - #else - #error - #endif } /* Block IF (IF-THEN) statement. */ --- 2437,2442 ---- *************** ffeste_R737A (ffebld dest, ffebld source *** 2548,2601 **** void ffeste_R803 (ffestw block, ffebld expr) { ! ffeste_check_simple_ (); ! #if FFECOM_targetCURRENT == FFECOM_targetFFE ! fputs ("+ IF_block (", dmpout); ! ffebld_dump (expr); ! fputs (")\n", dmpout); ! #elif FFECOM_targetCURRENT == FFECOM_targetGCC ! { ! tree temp; ! ffeste_emit_line_note_ (); ! ffeste_start_block_ (block); ! temp = ffecom_make_tempvar ("ifthen", integer_type_node, ! FFETARGET_charactersizeNONE, -1); ! ffeste_start_stmt_ (); ! ffecom_prepare_expr (expr); ! if (ffecom_prepare_end ()) ! { ! tree result; ! result = ffecom_modify (void_type_node, ! temp, ! ffecom_truth_value (ffecom_expr (expr))); ! expand_expr_stmt (result); ! ffeste_end_stmt_ (); ! } ! else ! { ! ffeste_end_stmt_ (); ! temp = ffecom_truth_value (ffecom_expr (expr)); ! } ! expand_start_cond (temp, 0); ! /* No fake `else' constructs introduced (yet). */ ! ffestw_set_ifthen_fake_else (block, 0); ! } ! #else ! #error ! #endif } /* ELSE IF statement. */ --- 2444,2487 ---- void ffeste_R803 (ffestw block, ffebld expr) { ! tree temp; ! ffeste_check_simple_ (); ! ffeste_emit_line_note_ (); ! ffeste_start_block_ (block); ! temp = ffecom_make_tempvar ("ifthen", integer_type_node, ! FFETARGET_charactersizeNONE, -1); ! ffeste_start_stmt_ (); ! ffecom_prepare_expr (expr); ! if (ffecom_prepare_end ()) ! { ! tree result; ! result = ffecom_modify (void_type_node, ! temp, ! ffecom_truth_value (ffecom_expr (expr))); ! expand_expr_stmt (result); ! ffeste_end_stmt_ (); ! } ! else ! { ! ffeste_end_stmt_ (); ! temp = ffecom_truth_value (ffecom_expr (expr)); ! } ! expand_start_cond (temp, 0); ! /* No fake `else' constructs introduced (yet). */ ! ffestw_set_ifthen_fake_else (block, 0); } /* ELSE IF statement. */ *************** ffeste_R803 (ffestw block, ffebld expr) *** 2603,2668 **** void ffeste_R804 (ffestw block, ffebld expr) { ! ffeste_check_simple_ (); ! #if FFECOM_targetCURRENT == FFECOM_targetFFE ! fputs ("+ ELSE_IF (", dmpout); ! ffebld_dump (expr); ! fputs (")\n", dmpout); ! #elif FFECOM_targetCURRENT == FFECOM_targetGCC ! { ! tree temp; ! ffeste_emit_line_note_ (); ! /* Since ELSEIF(expr) might require preparations for expr, ! implement as ELSE; prepare-expr; IF (expr) THEN ...; ENDIF. */ ! expand_start_else (); ! ffeste_start_block_ (block); ! temp = ffecom_make_tempvar ("elseif", integer_type_node, ! FFETARGET_charactersizeNONE, -1); ! ffeste_start_stmt_ (); ! ffecom_prepare_expr (expr); ! if (ffecom_prepare_end ()) ! { ! tree result; ! result = ffecom_modify (void_type_node, ! temp, ! ffecom_truth_value (ffecom_expr (expr))); ! 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_ (); ! temp = ffecom_truth_value (ffecom_expr (expr)); ! } ! 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 } /* ELSE statement. */ --- 2489,2544 ---- void ffeste_R804 (ffestw block, ffebld expr) { ! tree temp; ! ffeste_check_simple_ (); ! ffeste_emit_line_note_ (); ! /* Since ELSEIF(expr) might require preparations for expr, ! implement as ELSE; prepare-expr; IF (expr) THEN ...; ENDIF. */ ! expand_start_else (); ! ffeste_start_block_ (block); ! temp = ffecom_make_tempvar ("elseif", integer_type_node, ! FFETARGET_charactersizeNONE, -1); ! ffeste_start_stmt_ (); ! ffecom_prepare_expr (expr); ! if (ffecom_prepare_end ()) ! { ! tree result; ! result = ffecom_modify (void_type_node, ! temp, ! ffecom_truth_value (ffecom_expr (expr))); ! 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_ (); ! temp = ffecom_truth_value (ffecom_expr (expr)); ! } ! 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 statement. */ *************** ffeste_R805 (ffestw block UNUSED) *** 2672,2686 **** { 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. */ --- 2548,2556 ---- *************** ffeste_R805 (ffestw block UNUSED) *** 2688,2711 **** 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; ! ffeste_emit_line_note_ (); ! for (; i; --i) ! { ! expand_end_cond (); ! ffeste_end_block_ (block); ! } ! } ! #else ! #error ! #endif } /* Logical IF statement. */ --- 2558,2573 ---- void ffeste_R806 (ffestw block) { ! int i = ffestw_ifthen_fake_else (block) + 1; ! ffeste_emit_line_note_ (); ! for (; i; --i) ! { ! expand_end_cond (); ! ffeste_end_block_ (block); ! } } /* Logical IF statement. */ *************** ffeste_R806 (ffestw block) *** 2713,2763 **** void ffeste_R807 (ffebld expr) { ! 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_start_block_ (NULL); ! temp = ffecom_make_tempvar ("if", integer_type_node, ! FFETARGET_charactersizeNONE, -1); ! ffeste_start_stmt_ (); ! ffecom_prepare_expr (expr); ! if (ffecom_prepare_end ()) ! { ! tree result; ! result = ffecom_modify (void_type_node, ! temp, ! ffecom_truth_value (ffecom_expr (expr))); ! expand_expr_stmt (result); ! ffeste_end_stmt_ (); ! } ! else ! { ! ffeste_end_stmt_ (); ! temp = ffecom_truth_value (ffecom_expr (expr)); ! } ! expand_start_cond (temp, 0); ! } ! #else ! #error ! #endif } /* SELECT CASE statement. */ --- 2575,2615 ---- void ffeste_R807 (ffebld expr) { ! tree temp; ! ffeste_check_simple_ (); ! ffeste_emit_line_note_ (); ! ffeste_start_block_ (NULL); ! temp = ffecom_make_tempvar ("if", integer_type_node, ! FFETARGET_charactersizeNONE, -1); ! ffeste_start_stmt_ (); ! ffecom_prepare_expr (expr); ! if (ffecom_prepare_end ()) ! { ! tree result; ! result = ffecom_modify (void_type_node, ! temp, ! ffecom_truth_value (ffecom_expr (expr))); ! expand_expr_stmt (result); ! ffeste_end_stmt_ (); ! } ! else ! { ! ffeste_end_stmt_ (); ! temp = ffecom_truth_value (ffecom_expr (expr)); ! } ! expand_start_cond (temp, 0); } /* SELECT CASE statement. */ *************** ffeste_R809 (ffestw block, ffebld expr) *** 2767,2777 **** { 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); --- 2619,2624 ---- *************** ffeste_R809 (ffestw block, ffebld expr) *** 2785,2790 **** --- 2632,2638 ---- { /* ~~~Someday handle CHARACTER*1, CHARACTER*N */ + /* xgettext:no-c-format */ ffebad_start_msg ("SELECT CASE on CHARACTER type (at %0) not supported -- sorry", FFEBAD_severityFATAL); ffebad_here (0, ffestw_line (block), ffestw_col (block)); *************** ffeste_R809 (ffestw block, ffebld expr) *** 2823,2831 **** ffestw_set_select_texpr (block, texpr); ffestw_set_select_break (block, FALSE); } - #else - #error - #endif } /* CASE statement. --- 2671,2676 ---- *************** ffeste_R810 (ffestw block, unsigned long *** 2839,2844 **** --- 2684,2694 ---- { ffestwSelect s = ffestw_select (block); ffestwCase c; + tree texprlow; + tree texprhigh; + tree tlabel; + int pushok; + tree duplicate; ffeste_check_simple_ (); *************** ffeste_R810 (ffestw block, unsigned long *** 2847,2944 **** 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_ (); ! if (ffestw_select_texpr (block) == error_mark_node) ! return; ! /* ~~~Someday handle CHARACTER*1, CHARACTER*N */ ! 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 ((c == NULL) || (casenum != c->casenum)) { ! if (casenum == 0) /* Intentional CASE DEFAULT. */ { ! pushok = pushcase (NULL_TREE, 0, tlabel, &duplicate); ! assert (pushok == 0); } } ! 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)); ! } ! #else ! #error ! #endif } /* END SELECT statement. */ --- 2697,2749 ---- else c = s->first_stmt; ! ffeste_emit_line_note_ (); ! if (ffestw_select_texpr (block) == error_mark_node) ! return; ! /* ~~~Someday handle CHARACTER*1, CHARACTER*N */ ! 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 ((c == NULL) || (casenum != c->casenum)) ! { ! if (casenum == 0) /* Intentional CASE DEFAULT. */ ! { ! pushok = pushcase (NULL_TREE, 0, tlabel, &duplicate); ! assert (pushok == 0); ! } ! } ! 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)); } /* END SELECT statement. */ *************** ffeste_R810 (ffestw block, unsigned long *** 2946,2954 **** 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 */ --- 2751,2756 ---- *************** ffeste_R811 (ffestw block) *** 2957,2965 **** expand_end_case (ffestw_select_texpr (block)); ffeste_end_block_ (block); - #else - #error - #endif } /* Iterative DO statement. */ --- 2759,2764 ---- *************** ffeste_R819A (ffestw block, ffelab label *** 2972,3015 **** { 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. */ ! } ! ! 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 } /* DO WHILE statement. */ --- 2771,2784 ---- { ffeste_check_simple_ (); ! ffeste_emit_line_note_ (); ! ffeste_begin_iterdo_ (block, NULL, NULL, NULL, ! var, ! start, start_token, ! end, end_token, ! incr, incr_token, ! "Iterative DO loop"); } /* DO WHILE statement. */ *************** ffeste_R819A (ffestw block, ffelab label *** 3017,3072 **** void ffeste_R819B (ffestw block, ffelab label UNUSED, ffebld expr) { ! ffeste_check_simple_ (); ! #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_emit_line_note_ (); ! ffeste_start_block_ (block); ! if (expr) ! { ! struct nesting *loop; ! tree mod; ! result = ffecom_make_tempvar ("dowhile", integer_type_node, ! FFETARGET_charactersizeNONE, -1); ! loop = expand_start_loop (1); ! ffeste_start_stmt_ (); ! ffecom_prepare_expr (expr); ! ffecom_prepare_end (); ! mod = ffecom_modify (void_type_node, ! result, ! ffecom_truth_value (ffecom_expr (expr))); ! expand_expr_stmt (mod); ! ffeste_end_stmt_ (); ! 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 } /* END DO statement. --- 2786,2828 ---- void ffeste_R819B (ffestw block, ffelab label UNUSED, ffebld expr) { ! tree result; ! ffeste_check_simple_ (); ! ffeste_emit_line_note_ (); ! ffeste_start_block_ (block); ! if (expr) ! { ! struct nesting *loop; ! tree mod; ! result = ffecom_make_tempvar ("dowhile", integer_type_node, ! FFETARGET_charactersizeNONE, -1); ! loop = expand_start_loop (1); ! ffeste_start_stmt_ (); ! ffecom_prepare_expr (expr); ! ffecom_prepare_end (); ! mod = ffecom_modify (void_type_node, ! result, ! ffecom_truth_value (ffecom_expr (expr))); ! expand_expr_stmt (mod); ! ffeste_end_stmt_ (); ! 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); } /* END DO statement. *************** ffeste_R825 () *** 3082,3096 **** { 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. */ --- 2838,2846 ---- *************** ffeste_R834 (ffestw block) *** 3100,3114 **** { 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. */ --- 2850,2858 ---- *************** ffeste_R835 (ffestw block) *** 3118,3132 **** { 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. */ --- 2862,2870 ---- *************** ffeste_R835 (ffestw block) *** 3134,3160 **** void ffeste_R836 (ffelab label) { ! ffeste_check_simple_ (); ! #if FFECOM_targetCURRENT == FFECOM_targetFFE ! fprintf (dmpout, "+ GOTO %lu\n", ffelab_value (label)); ! #elif FFECOM_targetCURRENT == FFECOM_targetGCC ! { ! tree glabel; ! 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 } /* Computed GOTO statement. */ --- 2872,2890 ---- void ffeste_R836 (ffelab label) { ! tree glabel; ! ffeste_check_simple_ (); ! 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; ! } } /* Computed GOTO statement. */ *************** void *** 3163,3225 **** ffeste_R837 (ffelab *labels, int count, ffebld expr) { int i; 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_start_stmt_ (); ! ffecom_prepare_expr (expr); ! ffecom_prepare_end (); ! texpr = ffecom_expr (expr); ! 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); ! 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; ! expand_goto (tlabel); ! TREE_USED (tlabel) = 1; ! } ! expand_end_case (texpr); ! ffeste_end_stmt_ (); ! } ! #else ! #error ! #endif } /* ASSIGN statement. */ --- 2893,2937 ---- ffeste_R837 (ffelab *labels, int count, ffebld expr) { int i; + tree texpr; + tree value; + tree tlabel; + int pushok; + tree duplicate; ffeste_check_simple_ (); ! ffeste_emit_line_note_ (); ! ffeste_start_stmt_ (); ! ffecom_prepare_expr (expr); ! ffecom_prepare_end (); ! texpr = ffecom_expr (expr); ! 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); ! 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; ! expand_goto (tlabel); ! TREE_USED (tlabel) = 1; ! } ! expand_end_case (texpr); ! ffeste_end_stmt_ (); } /* ASSIGN statement. */ *************** ffeste_R837 (ffelab *labels, int count, *** 3227,3274 **** void ffeste_R838 (ffelab label, ffebld target) { ! ffeste_check_simple_ (); ! #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_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 = convert (TREE_TYPE (target_tree), label_tree); ! expr_tree = ffecom_modify (void_type_node, ! target_tree, ! label_tree); ! expand_expr_stmt (expr_tree); ! } ! } ! #else ! #error ! #endif } /* Assigned GOTO statement. */ --- 2939,2976 ---- void ffeste_R838 (ffelab label, ffebld target) { ! tree expr_tree; ! tree label_tree; ! tree target_tree; ! ffeste_check_simple_ (); ! 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 = convert (TREE_TYPE (target_tree), label_tree); ! expr_tree = ffecom_modify (void_type_node, ! target_tree, ! label_tree); ! expand_expr_stmt (expr_tree); ! } } /* Assigned GOTO statement. */ *************** ffeste_R838 (ffelab label, ffebld target *** 3276,3306 **** 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; ! ffeste_emit_line_note_ (); ! /* No need to call ffeste_start_stmt_(), as the sorts of expressions ! seen here should never require use of temporaries. */ ! 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"); ! expand_computed_goto (convert (TREE_TYPE (null_pointer_node), t)); ! } ! #else ! #error ! #endif } /* Arithmetic IF statement. */ --- 2978,2998 ---- void ffeste_R839 (ffebld target) { ! tree t; ! ffeste_check_simple_ (); ! ffeste_emit_line_note_ (); ! /* No need to call ffeste_start_stmt_(), as the sorts of expressions ! seen here should never require use of temporaries. */ ! 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"); ! expand_computed_goto (convert (TREE_TYPE (null_pointer_node), t)); } /* Arithmetic IF statement. */ *************** ffeste_R839 (ffebld target) *** 3308,3419 **** void ffeste_R840 (ffebld expr, ffelab neg, ffelab zero, ffelab pos) { ! ffeste_check_simple_ (); ! #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_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; ! ffeste_start_stmt_ (); ! ffecom_prepare_expr (expr); ! 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 (); ! expand_goto (gzero); ! expand_end_cond (); ! } ! ffeste_end_stmt_ (); ! } ! #else ! #error ! #endif } /* CONTINUE statement. */ --- 3000,3100 ---- void ffeste_R840 (ffebld expr, ffelab neg, ffelab zero, ffelab pos) { ! 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_ (); ! 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_ (); ! ffecom_prepare_expr (expr); ! 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 (); ! expand_goto (gzero); ! expand_end_cond (); ! } ! ffeste_end_stmt_ (); } /* CONTINUE statement. */ *************** ffeste_R841 () *** 3423,3437 **** { 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. */ --- 3104,3112 ---- *************** ffeste_R841 () *** 3439,3520 **** void ffeste_R842 (ffebld expr) { ffeste_check_simple_ (); ! #if FFECOM_targetCURRENT == FFECOM_targetFFE ! if (expr == NULL) { ! fputs ("+ STOP\n", dmpout); } else { ! fputs ("+ STOP_coded ", dmpout); ! ffebld_dump (expr); ! fputc ('\n', dmpout); } - #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; ! expand_expr_stmt (callit); ! } ! #else ! #error ! #endif } /* PAUSE statement. */ --- 3114,3179 ---- void ffeste_R842 (ffebld expr) { + tree callit; + ffelexToken msg; + ffeste_check_simple_ (); ! 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; ! expand_expr_stmt (callit); } /* PAUSE statement. */ *************** ffeste_R842 (ffebld expr) *** 3522,3629 **** void ffeste_R843 (ffebld expr) { ffeste_check_simple_ (); ! #if FFECOM_targetCURRENT == FFECOM_targetFFE ! if (expr == NULL) { ! fputs ("+ PAUSE\n", dmpout); } else { ! fputs ("+ PAUSE_coded ", dmpout); ! ffebld_dump (expr); ! fputc ('\n', dmpout); } - #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_gfrtPAUSE, ! ffecom_list_ptr_to_expr (ffebld_new_item (expr, NULL)), ! NULL_TREE); ! TREE_SIDE_EFFECTS (callit) = 1; ! ! expand_expr_stmt (callit); ! } ! #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); ! } ! #endif ! #else ! #error ! #endif } /* OPEN statement. */ --- 3181,3243 ---- void ffeste_R843 (ffebld expr) { + tree callit; + ffelexToken msg; + ffeste_check_simple_ (); ! 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_gfrtPAUSE, ! ffecom_list_ptr_to_expr (ffebld_new_item (expr, NULL)), ! NULL_TREE); ! TREE_SIDE_EFFECTS (callit) = 1; ! expand_expr_stmt (callit); } /* OPEN statement. */ *************** ffeste_R843 (ffebld expr) *** 3631,3763 **** void ffeste_R904 (ffestpOpenStmt *info) { ! ffeste_check_simple_ (); ! #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_emit_line_note_ (); #define specified(something) (info->open_spec[something].kw_or_val_present) ! iostat = specified (FFESTP_openixIOSTAT); ! errl = specified (FFESTP_openixERR); #undef specified ! 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 ((ffeste_io_abort_is_temp_ = iostat)) ! ffeste_io_abort_ = ffecom_temp_label (); ! else ! ffeste_io_abort_ = NULL_TREE; ! } ! 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_ = 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; ! } ! /* 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]); ! /* 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_); ! /* 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_); ! assert (ffeste_io_err_ == NULL_TREE); ! } ! ffeste_end_stmt_ (); ! } ! #else ! #error ! #endif } /* CLOSE statement. */ --- 3245,3339 ---- void ffeste_R904 (ffestpOpenStmt *info) { ! tree args; ! bool iostat; ! bool errl; ! ffeste_check_simple_ (); ! ffeste_emit_line_note_ (); #define specified(something) (info->open_spec[something].kw_or_val_present) ! iostat = specified (FFESTP_openixIOSTAT); ! errl = specified (FFESTP_openixERR); #undef specified ! 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 ((ffeste_io_abort_is_temp_ = iostat)) ! ffeste_io_abort_ = ffecom_temp_label (); ! else ! ffeste_io_abort_ = NULL_TREE; ! } ! 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_ = 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; ! } ! /* 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]); ! /* 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_); ! /* 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_); ! assert (ffeste_io_err_ == NULL_TREE); ! } ! ffeste_end_stmt_ (); } /* CLOSE statement. */ *************** ffeste_R904 (ffestpOpenStmt *info) *** 3765,3867 **** void ffeste_R907 (ffestpCloseStmt *info) { ! ffeste_check_simple_ (); ! #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_emit_line_note_ (); #define specified(something) (info->close_spec[something].kw_or_val_present) ! iostat = specified (FFESTP_closeixIOSTAT); ! errl = specified (FFESTP_closeixERR); #undef specified ! 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 ((ffeste_io_abort_is_temp_ = iostat)) ! ffeste_io_abort_ = ffecom_temp_label (); ! else ! ffeste_io_abort_ = NULL_TREE; ! } ! 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_ = 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; ! } ! /* 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]); ! /* 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_); ! /* 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_); ! assert (ffeste_io_err_ == NULL_TREE); ! } ! ffeste_end_stmt_ (); ! } ! #else ! #error ! #endif } /* READ(...) statement -- start. */ --- 3341,3430 ---- void ffeste_R907 (ffestpCloseStmt *info) { ! tree args; ! bool iostat; ! bool errl; ! ffeste_check_simple_ (); ! ffeste_emit_line_note_ (); #define specified(something) (info->close_spec[something].kw_or_val_present) ! iostat = specified (FFESTP_closeixIOSTAT); ! errl = specified (FFESTP_closeixERR); #undef specified ! 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 ((ffeste_io_abort_is_temp_ = iostat)) ! ffeste_io_abort_ = ffecom_temp_label (); ! else ! ffeste_io_abort_ = NULL_TREE; ! } ! 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_ = 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; ! } ! /* 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]); ! /* 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_); ! /* 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_); ! assert (ffeste_io_err_ == NULL_TREE); ! } ! ffeste_end_stmt_ (); } /* READ(...) statement -- start. */ *************** ffeste_R909_start (ffestpReadStmt *info, *** 3871,4124 **** ffestvUnit unit, ffestvFormat format, bool rec, bool key UNUSED) { ffeste_check_start_ (); ! #if FFECOM_targetCURRENT == FFECOM_targetFFE switch (format) { ! case FFESTV_formatNONE: if (rec) ! fputs ("+ READ_ufdac", dmpout); ! else if (key) ! fputs ("+ READ_ufidx", dmpout); else ! fputs ("+ READ_ufseq", dmpout); break; ! case FFESTV_formatLABEL: ! case FFESTV_formatCHAREXPR: ! case FFESTV_formatINTEXPR: if (rec) ! fputs ("+ READ_fmdac", dmpout); ! else if (key) ! fputs ("+ READ_fmidx", dmpout); else if (unit == FFESTV_unitCHAREXPR) ! fputs ("+ READ_fmint", dmpout); else ! fputs ("+ READ_fmseq", dmpout); break; ! case FFESTV_formatASTERISK: if (unit == FFESTV_unitCHAREXPR) ! fputs ("+ READ_lsint", dmpout); else ! fputs ("+ READ_lsseq", dmpout); break; ! case FFESTV_formatNAMELIST: ! fputs ("+ READ_nlseq", dmpout); 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; } ! ! 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; #define specified(something) (info->read_spec[something].kw_or_val_present) ! iostat = specified (FFESTP_readixIOSTAT); ! errl = specified (FFESTP_readixERR); ! endl = specified (FFESTP_readixEND); #undef specified ! ffeste_start_stmt_ (); ! if (errl) ! { ! /* Have ERR= specification. */ ! 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; 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. */ ! 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; ! } ! } ! 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_ = 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; ! } ! /* 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 } /* READ statement -- I/O item. */ --- 3434,3607 ---- ffestvUnit unit, ffestvFormat format, bool rec, bool key UNUSED) { + ffecomGfrt start; + ffecomGfrt end; + tree cilist; + bool iostat; + bool errl; + bool endl; + ffeste_check_start_ (); ! 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: /* no FMT= */ ! ffeste_io_driver_ = ffeste_io_douio_; if (rec) ! start = FFECOM_gfrtSRDUE, end = FFECOM_gfrtERDUE; 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; 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; #define specified(something) (info->read_spec[something].kw_or_val_present) ! iostat = specified (FFESTP_readixIOSTAT); ! errl = specified (FFESTP_readixERR); ! endl = specified (FFESTP_readixEND); #undef specified ! ffeste_start_stmt_ (); ! if (errl) ! { ! /* Have ERR= specification. */ ! 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; ! 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. */ ! 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; ! } ! } ! 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_ = 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; ! } ! /* 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. */ *************** ffeste_R909_item (ffebld expr, ffelexTok *** 4128,4137 **** { ffeste_check_item_ (); - #if FFECOM_targetCURRENT == FFECOM_targetFFE - ffebld_dump (expr); - fputc (',', dmpout); - #elif FFECOM_targetCURRENT == FFECOM_targetGCC if (expr == NULL) return; --- 3611,3616 ---- *************** ffeste_R909_item (ffebld expr, ffelexTok *** 4157,4165 **** ffeste_end_stmt_ (); } - #else - #error - #endif } /* READ statement -- end. */ --- 3636,3641 ---- *************** ffeste_R909_finish () *** 4169,4178 **** { 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. */ --- 3645,3650 ---- *************** ffeste_R909_finish () *** 4220,4228 **** } ffeste_end_stmt_ (); - #else - #error - #endif } /* WRITE statement -- start. */ --- 3692,3697 ---- *************** void *** 4231,4425 **** ffeste_R910_start (ffestpWriteStmt *info, ffestvUnit unit, ffestvFormat format, bool rec) { ffeste_check_start_ (); ! #if FFECOM_targetCURRENT == FFECOM_targetFFE switch (format) { ! case FFESTV_formatNONE: if (rec) ! fputs ("+ WRITE_ufdac (", dmpout); else ! fputs ("+ WRITE_ufseq_or_idx (", dmpout); break; ! case FFESTV_formatLABEL: ! case FFESTV_formatCHAREXPR: ! case FFESTV_formatINTEXPR: if (rec) ! fputs ("+ WRITE_fmdac (", dmpout); else if (unit == FFESTV_unitCHAREXPR) ! fputs ("+ WRITE_fmint (", dmpout); else ! fputs ("+ WRITE_fmseq_or_idx (", dmpout); break; ! case FFESTV_formatASTERISK: if (unit == FFESTV_unitCHAREXPR) ! fputs ("+ WRITE_lsint (", dmpout); else ! fputs ("+ WRITE_lsseq (", dmpout); break; ! case FFESTV_formatNAMELIST: ! fputs ("+ WRITE_nlseq (", dmpout); break; default: ! assert ("Unexpected kind of format item in R910 WRITE" == NULL); } ! ! 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; #define specified(something) (info->write_spec[something].kw_or_val_present) ! iostat = specified (FFESTP_writeixIOSTAT); ! errl = specified (FFESTP_writeixERR); #undef specified ! ffeste_start_stmt_ (); ! ffeste_io_end_ = NULL_TREE; ! 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_ = 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. */ ! 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_ = 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 } /* WRITE statement -- I/O item. */ --- 3700,3843 ---- ffeste_R910_start (ffestpWriteStmt *info, ffestvUnit unit, ffestvFormat format, bool rec) { + ffecomGfrt start; + ffecomGfrt end; + tree cilist; + bool iostat; + bool errl; + ffeste_check_start_ (); ! 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: /* 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; #define specified(something) (info->write_spec[something].kw_or_val_present) ! iostat = specified (FFESTP_writeixIOSTAT); ! errl = specified (FFESTP_writeixERR); #undef specified ! ffeste_start_stmt_ (); ! ffeste_io_end_ = NULL_TREE; ! 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_ = 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. */ ! 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_ = 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)); } /* WRITE statement -- I/O item. */ *************** ffeste_R910_item (ffebld expr, ffelexTok *** 4429,4438 **** { ffeste_check_item_ (); - #if FFECOM_targetCURRENT == FFECOM_targetFFE - ffebld_dump (expr); - fputc (',', dmpout); - #elif FFECOM_targetCURRENT == FFECOM_targetGCC if (expr == NULL) return; --- 3847,3852 ---- *************** ffeste_R910_item (ffebld expr, ffelexTok *** 4453,4461 **** ffeste_end_stmt_ (); } - #else - #error - #endif } /* WRITE statement -- end. */ --- 3867,3872 ---- *************** ffeste_R910_finish () *** 4465,4474 **** { 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. */ --- 3876,3881 ---- *************** ffeste_R910_finish () *** 4489,4497 **** } ffeste_end_stmt_ (); - #else - #error - #endif } /* PRINT statement -- start. */ --- 3896,3901 ---- *************** ffeste_R910_finish () *** 4499,4594 **** void ffeste_R911_start (ffestpPrintStmt *info, ffestvFormat format) { ffeste_check_start_ (); ! #if FFECOM_targetCURRENT == FFECOM_targetFFE switch (format) { ! case FFESTV_formatLABEL: ! case FFESTV_formatCHAREXPR: ! case FFESTV_formatINTEXPR: ! fputs ("+ PRINT_fm ", dmpout); break; ! case FFESTV_formatASTERISK: ! fputs ("+ PRINT_ls ", dmpout); break; ! case FFESTV_formatNAMELIST: ! fputs ("+ PRINT_nl ", dmpout); break; default: ! assert ("Unexpected kind of format item in R911 PRINT" == NULL); } ! 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_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; ! /* 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); ! /* 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 } /* PRINT statement -- I/O item. */ --- 3903,3970 ---- void ffeste_R911_start (ffestpPrintStmt *info, ffestvFormat format) { + ffecomGfrt start; + ffecomGfrt end; + tree cilist; + ffeste_check_start_ (); ! 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: /* 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_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; ! /* 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); ! /* 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)); } /* PRINT statement -- I/O item. */ *************** ffeste_R911_item (ffebld expr, ffelexTok *** 4598,4607 **** { ffeste_check_item_ (); - #if FFECOM_targetCURRENT == FFECOM_targetFFE - ffebld_dump (expr); - fputc (',', dmpout); - #elif FFECOM_targetCURRENT == FFECOM_targetGCC if (expr == NULL) return; --- 3974,3979 ---- *************** ffeste_R911_item (ffebld expr, ffelexTok *** 4622,4630 **** ffeste_end_stmt_ (); } - #else - #error - #endif } /* PRINT statement -- end. */ --- 3994,3999 ---- *************** ffeste_R911_finish () *** 4634,4652 **** { 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. */ --- 4003,4014 ---- *************** ffeste_R919 (ffestpBeruStmt *info) *** 4656,4672 **** { 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. */ --- 4018,4024 ---- *************** ffeste_R920 (ffestpBeruStmt *info) *** 4676,4692 **** { 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. */ --- 4028,4034 ---- *************** ffeste_R921 (ffestpBeruStmt *info) *** 4696,4712 **** { 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). */ --- 4038,4044 ---- *************** ffeste_R921 (ffestpBeruStmt *info) *** 4714,4864 **** void ffeste_R923A (ffestpInquireStmt *info, bool by_file UNUSED) { ! ffeste_check_simple_ (); ! #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_emit_line_note_ (); #define specified(something) (info->inquire_spec[something].kw_or_val_present) ! iostat = specified (FFESTP_inquireixIOSTAT); ! errl = specified (FFESTP_inquireixERR); #undef specified ! 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 ((ffeste_io_abort_is_temp_ = iostat)) ! ffeste_io_abort_ = ffecom_temp_label (); ! else ! ffeste_io_abort_ = NULL_TREE; ! } ! 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_ = 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; ! } ! /* 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. */ ! ffeste_io_call_ (ffecom_call_gfrt (FFECOM_gfrtFINQU, args, NULL_TREE), ! ! ffeste_io_abort_is_temp_); ! /* 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_); ! assert (ffeste_io_err_ == NULL_TREE); ! } ! ffeste_end_stmt_ (); ! } ! #else ! #error ! #endif } /* INQUIRE(IOLENGTH=expr) statement -- start. */ --- 4046,4150 ---- void ffeste_R923A (ffestpInquireStmt *info, bool by_file UNUSED) { ! tree args; ! bool iostat; ! bool errl; ! ffeste_check_simple_ (); ! ffeste_emit_line_note_ (); #define specified(something) (info->inquire_spec[something].kw_or_val_present) ! iostat = specified (FFESTP_inquireixIOSTAT); ! errl = specified (FFESTP_inquireixERR); #undef specified ! 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 ((ffeste_io_abort_is_temp_ = iostat)) ! ffeste_io_abort_ = ffecom_temp_label (); ! else ! ffeste_io_abort_ = NULL_TREE; ! } ! 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_ = 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; ! } ! /* 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. */ ! ffeste_io_call_ (ffecom_call_gfrt (FFECOM_gfrtFINQU, args, NULL_TREE), ! ! ffeste_io_abort_is_temp_); ! /* 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_); ! assert (ffeste_io_err_ == NULL_TREE); ! } ! ffeste_end_stmt_ (); } /* INQUIRE(IOLENGTH=expr) statement -- start. */ *************** ffeste_R923B_start (ffestpInquireStmt *i *** 4868,4884 **** { 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=) not implemented yet! ~~~" == NULL); ffeste_emit_line_note_ (); - #else - #error - #endif } /* INQUIRE(IOLENGTH=expr) statement -- I/O item. */ --- 4154,4162 ---- *************** void *** 4887,4900 **** 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. */ --- 4165,4170 ---- *************** void *** 4903,4915 **** 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 --- 4173,4178 ---- *************** ffeste_R923B_finish () *** 4919,4975 **** void ffeste_R1001 (ffests s) { ! ffeste_check_simple_ (); ! #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; ! assert (ffeste_label_formatdef_ != NULL); ! ffeste_emit_line_note_ (); ! 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, build_int_2 (ffests_length (s), 0))), ! 1, 0); ! TREE_CONSTANT (t) = 1; ! TREE_STATIC (t) = 1; ! 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 } /* END PROGRAM. */ --- 4182,4230 ---- void ffeste_R1001 (ffests s) { ! tree t; ! tree ttype; ! tree maxindex; ! tree var; ! ffeste_check_simple_ (); ! assert (ffeste_label_formatdef_ != NULL); ! ffeste_emit_line_note_ (); ! 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, build_int_2 (ffests_length (s), 0))), ! 1, 0); ! TREE_CONSTANT (t) = 1; ! TREE_STATIC (t) = 1; ! 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; } /* END PROGRAM. */ *************** ffeste_R1001 (ffests s) *** 4977,4988 **** void ffeste_R1103 () { - #if FFECOM_targetCURRENT == FFECOM_targetFFE - fputs ("+ END_PROGRAM\n", dmpout); - #elif FFECOM_targetCURRENT == FFECOM_targetGCC - #else - #error - #endif } /* END BLOCK DATA. */ --- 4232,4237 ---- *************** ffeste_R1103 () *** 4990,5001 **** void ffeste_R1112 () { - #if FFECOM_targetCURRENT == FFECOM_targetFFE - fputs ("* END_BLOCK_DATA\n", dmpout); - #elif FFECOM_targetCURRENT == FFECOM_targetGCC - #else - #error - #endif } /* CALL statement. */ --- 4239,4244 ---- *************** ffeste_R1112 () *** 5003,5131 **** void ffeste_R1212 (ffebld expr) { 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; ! 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. */ ! 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_ (); ! /* 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); ! } ! expand_end_case (texpr); ! } ! ffeste_end_stmt_ (); ! } ! #else ! #error ! #endif } /* END FUNCTION. */ --- 4246,4366 ---- 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_ (); ! args = ffebld_right (expr); ! 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. */ ! 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_ (); ! /* 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); ! } ! expand_end_case (texpr); ! } ! ffeste_end_stmt_ (); } /* END FUNCTION. */ *************** ffeste_R1212 (ffebld expr) *** 5133,5144 **** void ffeste_R1221 () { - #if FFECOM_targetCURRENT == FFECOM_targetFFE - fputs ("+ END_FUNCTION\n", dmpout); - #elif FFECOM_targetCURRENT == FFECOM_targetGCC - #else - #error - #endif } /* END SUBROUTINE. */ --- 4368,4373 ---- *************** ffeste_R1221 () *** 5146,5157 **** void ffeste_R1225 () { - #if FFECOM_targetCURRENT == FFECOM_targetFFE - fprintf (dmpout, "+ END_SUBROUTINE\n"); - #elif FFECOM_targetCURRENT == FFECOM_targetGCC - #else - #error - #endif } /* ENTRY statement. */ --- 4375,4380 ---- *************** ffeste_R1225 () *** 5159,5217 **** void ffeste_R1226 (ffesymbol entry) { ! ffeste_check_simple_ (); ! ! #if FFECOM_targetCURRENT == FFECOM_targetFFE ! fprintf (dmpout, "+ ENTRY %s", ffesymbol_text (entry)); ! if (ffesymbol_dummyargs (entry) != NULL) ! { ! ffebld argh; ! ! 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_ (); ! if (label == error_mark_node) ! return; ! DECL_INITIAL (label) = error_mark_node; ! emit_nop (); ! expand_label (label); ! } ! #else ! #error ! #endif } /* RETURN statement. */ --- 4382,4401 ---- void ffeste_R1226 (ffesymbol entry) { ! tree label; ! ffeste_check_simple_ (); ! label = ffesymbol_hook (entry).length_tree; ! ffeste_emit_line_note_ (); ! if (label == error_mark_node) ! return; ! DECL_INITIAL (label) = error_mark_node; ! emit_nop (); ! expand_label (label); } /* RETURN statement. */ *************** ffeste_R1226 (ffesymbol entry) *** 5219,5273 **** void ffeste_R1227 (ffestw block UNUSED, ffebld expr) { ! ffeste_check_simple_ (); ! #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_emit_line_note_ (); ! ffeste_start_stmt_ (); ! ffecom_prepare_return_expr (expr); ! ffecom_prepare_end (); ! 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 (); ! } ! ffeste_end_stmt_ (); ! } ! #else ! #error ! #endif } /* REWRITE statement -- start. */ --- 4403,4440 ---- void ffeste_R1227 (ffestw block UNUSED, ffebld expr) { ! tree rtn; ! ffeste_check_simple_ (); ! ffeste_emit_line_note_ (); ! ffeste_start_stmt_ (); ! ffecom_prepare_return_expr (expr); ! ffecom_prepare_end (); ! 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 (); ! } ! ffeste_end_stmt_ (); } /* REWRITE statement -- start. */ *************** void *** 5277,5308 **** 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. */ --- 4444,4449 ---- *************** void *** 5311,5324 **** 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. */ --- 4452,4457 ---- *************** void *** 5327,5339 **** 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. */ --- 4460,4465 ---- *************** void *** 5342,5374 **** 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. */ --- 4468,4473 ---- *************** void *** 5377,5390 **** 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. */ --- 4476,4481 ---- *************** void *** 5393,5405 **** ffeste_V019_finish () { ffeste_check_finish_ (); - - #if FFECOM_targetCURRENT == FFECOM_targetFFE - fputc ('\n', dmpout); - #elif FFECOM_targetCURRENT == FFECOM_targetGCC - #else - #error - #endif } #endif --- 4484,4489 ---- *************** ffeste_V020_start (ffestpTypeStmt *info *** 5410,5442 **** 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. */ --- 4494,4499 ---- *************** void *** 5445,5458 **** 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. */ --- 4502,4507 ---- *************** void *** 5461,5473 **** ffeste_V020_finish () { ffeste_check_finish_ (); - - #if FFECOM_targetCURRENT == FFECOM_targetFFE - fputc ('\n', dmpout); - #elif FFECOM_targetCURRENT == FFECOM_targetGCC - #else - #error - #endif } /* DELETE statement. */ --- 4510,4515 ---- *************** void *** 5477,5494 **** 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. */ --- 4519,4524 ---- *************** void *** 5497,5513 **** 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. */ --- 4527,4532 ---- *************** void *** 5516,5534 **** 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. */ --- 4535,4540 ---- *************** void *** 5537,5550 **** 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. */ --- 4543,4548 ---- *************** void *** 5553,5565 **** 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. */ --- 4551,4556 ---- *************** void *** 5568,5586 **** 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. */ --- 4559,4564 ---- *************** void *** 5589,5602 **** 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. */ --- 4567,4572 ---- *************** void *** 5605,5617 **** 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. */ --- 4575,4580 ---- *************** void *** 5620,5632 **** 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. */ --- 4583,4588 ---- *************** void *** 5635,5654 **** 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. */ --- 4591,4596 ---- *************** void *** 5657,5669 **** ffeste_V025_finish () { ffeste_check_finish_ (); - - #if FFECOM_targetCURRENT == FFECOM_targetFFE - fputc ('\n', dmpout); - #elif FFECOM_targetCURRENT == FFECOM_targetGCC - #else - #error - #endif } /* FIND statement. */ --- 4599,4604 ---- *************** void *** 5672,5689 **** 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 --- 4607,4612 ---- diff -Nrc3pad gcc-3.0.4/gcc/f/ste.h gcc-3.1/gcc/f/ste.h *** gcc-3.0.4/gcc/f/ste.h Sat Apr 17 10:58:30 1999 --- gcc-3.1/gcc/f/ste.h Wed Oct 17 22:34:54 2001 *************** the Free Software Foundation, 59 Temple *** 27,34 **** /* Allow multiple inclusion to work. */ ! #ifndef _H_f_ste ! #define _H_f_ste /* Simple definitions and enumerations. */ --- 27,34 ---- /* Allow multiple inclusion to work. */ ! #ifndef GCC_F_STE_H ! #define GCC_F_STE_H /* Simple definitions and enumerations. */ *************** void ffeste_V026 (ffestpFindStmt *info); *** 147,162 **** #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 --- 147,156 ---- *************** void ffeste_terminate_2 (void); *** 169,172 **** /* End of #include file. */ ! #endif --- 163,166 ---- /* End of #include file. */ ! #endif /* ! GCC_F_STE_H */ diff -Nrc3pad gcc-3.0.4/gcc/f/storag.h gcc-3.1/gcc/f/storag.h *** gcc-3.0.4/gcc/f/storag.h Mon Feb 15 18:17:37 1999 --- gcc-3.1/gcc/f/storag.h Sat May 26 01:31:46 2001 *************** the Free Software Foundation, 59 Temple *** 27,34 **** /* Allow multiple inclusion to work. */ ! #ifndef _H_f_storag ! #define _H_f_storag /* Simple definitions and enumerations. */ --- 27,34 ---- /* Allow multiple inclusion to work. */ ! #ifndef GCC_F_STORAG_H ! #define GCC_F_STORAG_H /* Simple definitions and enumerations. */ *************** void ffestorag_update_save (ffestorag s) *** 164,167 **** /* End of #include file. */ ! #endif --- 164,167 ---- /* End of #include file. */ ! #endif /* ! GCC_F_STORAG_H */ diff -Nrc3pad gcc-3.0.4/gcc/f/stp.h gcc-3.1/gcc/f/stp.h *** gcc-3.0.4/gcc/f/stp.h Mon Feb 15 18:17:39 1999 --- gcc-3.1/gcc/f/stp.h Sat May 26 01:31:46 2001 *************** the Free Software Foundation, 59 Temple *** 27,34 **** /* Allow multiple inclusion to work. */ ! #ifndef _H_f_stp ! #define _H_f_stp /* Simple definitions and enumerations. */ --- 27,34 ---- /* Allow multiple inclusion to work. */ ! #ifndef GCC_F_STP_H ! #define GCC_F_STP_H /* Simple definitions and enumerations. */ *************** extern union _ffestp_fileu_ ffestp_file; *** 505,508 **** /* End of #include file. */ ! #endif --- 505,508 ---- /* End of #include file. */ ! #endif /* ! GCC_F_STP_H */ diff -Nrc3pad gcc-3.0.4/gcc/f/str.h gcc-3.1/gcc/f/str.h *** gcc-3.0.4/gcc/f/str.h Mon Feb 15 18:17:49 1999 --- gcc-3.1/gcc/f/str.h Sat May 26 01:31:46 2001 *************** the Free Software Foundation, 59 Temple *** 27,34 **** /* Allow multiple inclusion to work. */ ! #ifndef _H_f_str ! #define _H_f_str /* Simple definitions and enumerations. */ --- 27,34 ---- /* Allow multiple inclusion to work. */ ! #ifndef GCC_F_STR_H ! #define GCC_F_STR_H /* Simple definitions and enumerations. */ *************** ffestrSecond ffestr_second (ffelexToken *** 82,85 **** /* End of #include file. */ ! #endif --- 82,85 ---- /* End of #include file. */ ! #endif /* ! GCC_F_STR_H */ diff -Nrc3pad gcc-3.0.4/gcc/f/sts.h gcc-3.1/gcc/f/sts.h *** gcc-3.0.4/gcc/f/sts.h Mon Nov 29 02:26:49 1999 --- gcc-3.1/gcc/f/sts.h Sat May 26 01:31:46 2001 *************** the Free Software Foundation, 59 Temple *** 27,34 **** /* Allow multiple inclusion to work. */ ! #ifndef _H_f_sts ! #define _H_f_sts /* Simple definitions and enumerations. */ --- 27,34 ---- /* Allow multiple inclusion to work. */ ! #ifndef GCC_F_STS_H ! #define GCC_F_STS_H /* Simple definitions and enumerations. */ *************** void ffests_puttext (ffests s, const cha *** 82,85 **** /* End of #include file. */ ! #endif --- 82,85 ---- /* End of #include file. */ ! #endif /* ! GCC_F_STS_H */ diff -Nrc3pad gcc-3.0.4/gcc/f/stt.c gcc-3.1/gcc/f/stt.c *** gcc-3.0.4/gcc/f/stt.c Tue Mar 30 09:23:46 1999 --- gcc-3.1/gcc/f/stt.c Wed Oct 17 22:34:54 2001 *************** ffestt_caselist_create () *** 114,148 **** 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; --- 114,119 ---- *************** ffestt_dimlist_create () *** 438,469 **** 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; --- 409,414 ---- *************** ffestt_exprlist_drive (ffesttExprList li *** 611,638 **** } } - /* 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; --- 556,561 ---- *************** ffestt_implist_drive (ffesttImpList list *** 850,884 **** } } - /* 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; --- 773,778 ---- *************** ffestt_tokenlist_drive (ffesttTokenList *** 964,1007 **** } } - /* 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; --- 858,863 ---- diff -Nrc3pad gcc-3.0.4/gcc/f/stt.h gcc-3.1/gcc/f/stt.h *** gcc-3.0.4/gcc/f/stt.h Tue Mar 30 09:23:47 1999 --- gcc-3.1/gcc/f/stt.h Wed Oct 17 22:34:54 2001 *************** the Free Software Foundation, 59 Temple *** 27,34 **** /* Allow multiple inclusion to work. */ ! #ifndef _H_f_stt ! #define _H_f_stt /* Simple definitions and enumerations. */ --- 27,34 ---- /* Allow multiple inclusion to work. */ ! #ifndef GCC_F_STT_H ! #define GCC_F_STT_H /* Simple definitions and enumerations. */ *************** struct _ffest_format_list_ *** 164,172 **** 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); --- 164,169 ---- *************** ffebld ffestt_dimlist_as_expr (ffesttDim *** 174,212 **** 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); --- 171,194 ---- *************** void ffestt_tokenlist_kill (ffesttTokenL *** 227,230 **** /* End of #include file. */ ! #endif --- 209,212 ---- /* End of #include file. */ ! #endif /* ! GCC_F_STT_H */ diff -Nrc3pad gcc-3.0.4/gcc/f/stu.c gcc-3.1/gcc/f/stu.c *** gcc-3.0.4/gcc/f/stu.c Sat Feb 26 20:02:01 2000 --- gcc-3.1/gcc/f/stu.c Mon Feb 4 16:07:59 2002 *************** *** 1,5 **** /* stu.c -- Implementation File (module.c template V1.0) ! Copyright (C) 1995, 1996, 1997 Free Software Foundation, Inc. Contributed by James Craig Burley. This file is part of GNU Fortran. --- 1,5 ---- /* stu.c -- Implementation File (module.c template V1.0) ! Copyright (C) 1995, 1996, 1997, 2002 Free Software Foundation, Inc. Contributed by James Craig Burley. This file is part of GNU Fortran. *************** ffestu_sym_end_transition (ffesymbol s) *** 301,306 **** --- 301,307 ---- if (sa & FFESYMBOL_attrsADJUSTABLE) { /* Not actually in any dummy list! */ if (ffe_is_pedantic () + /* xgettext:no-c-format */ && ffebad_start_msg ("Local adjustable symbol `%A' at %0", FFEBAD_severityPEDANTIC)) { diff -Nrc3pad gcc-3.0.4/gcc/f/stu.h gcc-3.1/gcc/f/stu.h *** gcc-3.0.4/gcc/f/stu.h Mon Feb 15 18:17:55 1999 --- gcc-3.1/gcc/f/stu.h Sat May 26 01:31:46 2001 *************** the Free Software Foundation, 59 Temple *** 27,34 **** /* Allow multiple inclusion to work. */ ! #ifndef _H_f_stu ! #define _H_f_stu /* Simple definitions and enumerations. */ --- 27,34 ---- /* Allow multiple inclusion to work. */ ! #ifndef GCC_F_STU_H ! #define GCC_F_STU_H /* Simple definitions and enumerations. */ *************** ffesymbol ffestu_sym_exec_transition (ff *** 66,69 **** /* End of #include file. */ ! #endif --- 66,69 ---- /* End of #include file. */ ! #endif /* ! GCC_F_STU_H */ diff -Nrc3pad gcc-3.0.4/gcc/f/stv.h gcc-3.1/gcc/f/stv.h *** gcc-3.0.4/gcc/f/stv.h Mon Feb 15 18:17:57 1999 --- gcc-3.1/gcc/f/stv.h Sat May 26 01:31:46 2001 *************** the Free Software Foundation, 59 Temple *** 27,34 **** /* Allow multiple inclusion to work. */ ! #ifndef _H_f_stv ! #define _H_f_stv /* Simple definitions and enumerations. */ --- 27,34 ---- /* Allow multiple inclusion to work. */ ! #ifndef GCC_F_STV_H ! #define GCC_F_STV_H /* Simple definitions and enumerations. */ *************** extern ffelabNumber ffestv_num_label_def *** 162,165 **** /* End of #include file. */ ! #endif --- 162,165 ---- /* End of #include file. */ ! #endif /* ! GCC_F_STV_H */ diff -Nrc3pad gcc-3.0.4/gcc/f/stw.h gcc-3.1/gcc/f/stw.h *** gcc-3.0.4/gcc/f/stw.h Thu Dec 30 21:15:24 1999 --- gcc-3.1/gcc/f/stw.h Wed Oct 17 22:34:54 2001 *************** the Free Software Foundation, 59 Temple *** 27,34 **** /* Allow multiple inclusion to work. */ ! #ifndef _H_f_stw ! #define _H_f_stw /* Simple definitions and enumerations. */ --- 27,34 ---- /* Allow multiple inclusion to work. */ ! #ifndef GCC_F_STW_H ! #define GCC_F_STW_H /* Simple definitions and enumerations. */ *************** struct _ffestw_ *** 73,79 **** 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. */ --- 73,78 ---- *************** struct _ffestw_ *** 82,88 **** 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_ --- 81,86 ---- *************** ffestw ffestw_use (ffestw block); *** 184,187 **** /* End of #include file. */ ! #endif --- 182,185 ---- /* End of #include file. */ ! #endif /* ! GCC_F_STW_H */ diff -Nrc3pad gcc-3.0.4/gcc/f/symbol.c gcc-3.1/gcc/f/symbol.c *** gcc-3.0.4/gcc/f/symbol.c Sat Feb 26 20:02:01 2000 --- gcc-3.1/gcc/f/symbol.c Wed Oct 17 22:34:54 2001 *************** the Free Software Foundation, 59 Temple *** 47,61 **** /* 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. */ --- 47,55 ---- *************** static ffesymbolRetract_ *ffesymbol_retr *** 117,123 **** /* List of state names. */ ! static const char *ffesymbol_state_name_[] = { "?", "@", --- 111,117 ---- /* List of state names. */ ! static const char *const ffesymbol_state_name_[] = { "?", "@", *************** static const char *ffesymbol_state_name_ *** 127,133 **** /* List of attribute names. */ ! static const char *ffesymbol_attr_name_[] = { #define DEFATTR(ATTR,ATTRS,NAME) NAME, #include "symbol.def" --- 121,127 ---- /* List of attribute names. */ ! static const char *const ffesymbol_attr_name_[] = { #define DEFATTR(ATTR,ATTRS,NAME) NAME, #include "symbol.def" *************** ffesymbol_drive_sfnames (ffesymbol (*fn) *** 793,837 **** 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 --- 787,792 ---- *************** ffesymbol_reference (ffesymbol s, ffelex *** 1012,1195 **** 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 ("\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 --- 967,972 ---- diff -Nrc3pad gcc-3.0.4/gcc/f/symbol.h gcc-3.1/gcc/f/symbol.h *** gcc-3.0.4/gcc/f/symbol.h Sat Apr 17 10:58:34 1999 --- gcc-3.1/gcc/f/symbol.h Wed Oct 17 22:34:54 2001 *************** along with GNU Fortran; see the file COP *** 19,26 **** the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ! #ifndef _H_f_symbol ! #define _H_f_symbol /* The main symbol type. */ --- 19,26 ---- the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ! #ifndef GCC_F_SYMBOL_H ! #define GCC_F_SYMBOL_H /* The main symbol type. */ *************** ffesymbol ffesymbol_declare_subrunit (ff *** 182,190 **** 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) --- 182,187 ---- *************** ffesymbol ffesymbol_lookup_local (ffelex *** 223,232 **** #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); --- 220,225 ---- *************** void ffesymbol_update_save (ffesymbol s) *** 293,296 **** #define ffesymbol_where_line(s) (((s)->name == NULL) ? ffewhere_line_unknown() \ : ffename_where_line((s)->name)) ! #endif --- 286,289 ---- #define ffesymbol_where_line(s) (((s)->name == NULL) ? ffewhere_line_unknown() \ : ffename_where_line((s)->name)) ! #endif /* ! GCC_F_SYMBOL_H */ diff -Nrc3pad gcc-3.0.4/gcc/f/target.c gcc-3.1/gcc/f/target.c *** gcc-3.0.4/gcc/f/target.c Wed Jun 21 20:11:14 2000 --- gcc-3.1/gcc/f/target.c Sun Apr 14 16:21:51 2002 *************** *** 1,5 **** /* target.c -- Implementation File (module.c template V1.0) ! Copyright (C) 1995, 1996, 1997, 1998 Free Software Foundation, Inc. Contributed by James Craig Burley. This file is part of GNU Fortran. --- 1,5 ---- /* target.c -- Implementation File (module.c template V1.0) ! Copyright (C) 1995, 1996, 1997, 1998, 2002 Free Software Foundation, Inc. Contributed by James Craig Burley. This file is part of GNU Fortran. *************** the Free Software Foundation, 59 Temple *** 71,76 **** --- 71,77 ---- #include "proj.h" #include "glimits.h" #include "target.h" + #include "diagnostic.h" #include "bad.h" #include "info.h" #include "lex.h" *************** ffetarget_integerhex (ffetargetIntegerDe *** 1447,1458 **** 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'; else { bad_digit = TRUE; --- 1448,1455 ---- bad_digit = FALSE; while (c != '\0') { ! if (hex_p (c)) ! c = hex_value (c); else { bad_digit = TRUE; *************** ffetarget_typeless_hex (ffetargetTypeles *** 2482,2493 **** 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; else bad_digit = TRUE; value = new_value; --- 2479,2486 ---- new_value <<= 4; if ((new_value >> 4) != value) overflow = TRUE; ! if (hex_p (c)) ! new_value += hex_value (c); else bad_digit = TRUE; value = new_value; *************** ffetarget_verify_character1 (mallocPool *** 2527,2532 **** --- 2520,2566 ---- void * ffetarget_memcpy_ (void *dst, void *src, size_t len) { + #ifdef CROSS_COMPILE + int host_words_big_endian = + #ifndef HOST_WORDS_BIG_ENDIAN + 0 + #else + HOST_WORDS_BIG_ENDIAN + #endif + ; + + int host_bytes_big_endian = + #ifndef HOST_BYTES_BIG_ENDIAN + 0 + #else + HOST_BYTES_BIG_ENDIAN + #endif + ; + + int host_bits_big_endian = + #ifndef HOST_BITS_BIG_ENDIAN + 0 + #else + HOST_BITS_BIG_ENDIAN + #endif + ; + + /* This is just hands thrown up in the air over bits coming through this + function representing a number being memcpy:d as-is from host to + target. We can't generally adjust endianness here since we don't + know whether it's an integer or floating point number; they're passed + differently. Better to not emit code at all than to emit wrong code. + We will get some false hits because some data coming through here + seems to be just character vectors, but often enough it's numbers, + for instance in g77.f-torture/execute/980628-[4-6].f and alpha2.f. + Still, we compile *some* code. FIXME: Rewrite handling of numbers. */ + if (!WORDS_BIG_ENDIAN != !host_words_big_endian + || !BYTES_BIG_ENDIAN != !host_bytes_big_endian + || !BITS_BIG_ENDIAN != !host_bits_big_endian) + sorry ("data initializer on host with different endianness"); + + #endif /* CROSS_COMPILE */ + return (void *) memcpy (dst, src, len); } diff -Nrc3pad gcc-3.0.4/gcc/f/target.h gcc-3.1/gcc/f/target.h *** gcc-3.0.4/gcc/f/target.h Thu Nov 15 20:56:18 2001 --- gcc-3.1/gcc/f/target.h Mon Mar 18 17:47:23 2002 *************** the Free Software Foundation, 59 Temple *** 27,34 **** /* Allow multiple inclusion to work. */ ! #ifndef _H_f_target ! #define _H_f_target #ifdef FFE_STANDALONE #define HOST_WIDE_INT long --- 27,34 ---- /* Allow multiple inclusion to work. */ ! #ifndef GCC_F_TARGET_H ! #define GCC_F_TARGET_H #ifdef FFE_STANDALONE #define HOST_WIDE_INT long *************** the Free Software Foundation, 59 Temple *** 234,240 **** #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 --- 234,240 ---- #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__) && !defined(__x86_64__) #define FFETARGET_32bit_longs #endif *************** void *ffetarget_memcpy_ (void *dst, void *** 860,872 **** /* 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 #ifdef REAL_ARITHMETIC #define ffetarget_add_complex1(res,l,r) \ --- 860,868 ---- /* Define macros. */ ! #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) \ *************** void *ffetarget_memcpy_ (void *dst, void *** 1892,1895 **** /* End of #include file. */ ! #endif --- 1888,1891 ---- /* End of #include file. */ ! #endif /* ! GCC_F_TARGET_H */ diff -Nrc3pad gcc-3.0.4/gcc/f/top.c gcc-3.1/gcc/f/top.c *** gcc-3.0.4/gcc/f/top.c Thu Jul 19 19:41:00 2001 --- gcc-3.1/gcc/f/top.c Fri Nov 9 17:50:06 2001 *************** the Free Software Foundation, 59 Temple *** 53,62 **** #include "symbol.h" #include "target.h" #include "where.h" - #if FFECOM_targetCURRENT == FFECOM_targetGCC #include "flags.h" #include "toplev.h" - #endif /* Externals defined here. */ --- 53,60 ---- *************** bool ffe_is_globals_ = TRUE; *** 80,86 **** 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_typeless_boz_ = FALSE; --- 78,83 ---- *************** ffe_decode_option (argc, argv) *** 175,182 **** 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); --- 172,177 ---- diff -Nrc3pad gcc-3.0.4/gcc/f/top.h gcc-3.1/gcc/f/top.h *** gcc-3.0.4/gcc/f/top.h Sat Feb 26 20:02:01 2000 --- gcc-3.1/gcc/f/top.h Fri Nov 9 17:50:06 2001 *************** the Free Software Foundation, 59 Temple *** 27,34 **** /* Allow multiple inclusion to work. */ ! #ifndef _H_f_parse ! #define _H_f_parse /* Simple definitions and enumerations. */ --- 27,34 ---- /* Allow multiple inclusion to work. */ ! #ifndef GCC_F_TOP_H ! #define GCC_F_TOP_H /* Simple definitions and enumerations. */ *************** extern bool ffe_is_free_form_; *** 95,101 **** 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_typeless_boz_; --- 95,100 ---- *************** void ffe_terminate_4 (void); *** 183,189 **** #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_) --- 182,187 ---- *************** void ffe_terminate_4 (void); *** 235,241 **** #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)) --- 233,238 ---- *************** void ffe_terminate_4 (void); *** 261,264 **** /* End of #include file. */ ! #endif --- 258,261 ---- /* End of #include file. */ ! #endif /* ! GCC_F_TOP_H */ diff -Nrc3pad gcc-3.0.4/gcc/f/type.h gcc-3.1/gcc/f/type.h *** gcc-3.0.4/gcc/f/type.h Mon Feb 15 18:18:14 1999 --- gcc-3.1/gcc/f/type.h Sat May 26 01:31:46 2001 *************** along with GNU Fortran; see the file COP *** 19,26 **** the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ! #ifndef _H_f_type ! #define _H_f_type typedef struct _ffetype_ *ffetype; typedef struct _ffetype_indexes_ *ffetype_indexes_; --- 19,26 ---- the Free Software Foundation, 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ ! #ifndef GCC_F_TYPE_H ! #define GCC_F_TYPE_H typedef struct _ffetype_ *ffetype; typedef struct _ffetype_indexes_ *ffetype_indexes_; *************** void ffetype_set_star (ffetype base_type *** 61,64 **** #define ffetype_terminate_3() #define ffetype_terminate_4() ! #endif --- 61,64 ---- #define ffetype_terminate_3() #define ffetype_terminate_4() ! #endif /* ! GCC_F_TYPE_H */ diff -Nrc3pad gcc-3.0.4/gcc/f/version.c gcc-3.1/gcc/f/version.c *** gcc-3.0.4/gcc/f/version.c Wed Feb 20 18:48:00 2002 --- gcc-3.1/gcc/f/version.c Tue May 14 21:41:20 2002 *************** *** 1 **** ! const char *ffe_version_string = "0.5.26 20020220 (release)"; --- 1,4 ---- ! #include "ansidecl.h" ! #include "f/version.h" ! ! const char *const ffe_version_string = "3.1 20020514 (release)"; diff -Nrc3pad gcc-3.0.4/gcc/f/version.h gcc-3.1/gcc/f/version.h *** gcc-3.0.4/gcc/f/version.h Tue Mar 30 09:23:52 1999 --- gcc-3.1/gcc/f/version.h Wed Sep 12 16:52:42 2001 *************** *** 1,6 **** ! #ifndef _H_f_version ! #define _H_f_version ! extern const char *ffe_version_string; ! #endif --- 1,6 ---- ! #ifndef GCC_F_VERSION_H ! #define GCC_F_VERSION_H ! extern const char *const ffe_version_string; ! #endif /* ! GCC_F_VERSION_H */ diff -Nrc3pad gcc-3.0.4/gcc/f/where.h gcc-3.1/gcc/f/where.h *** gcc-3.0.4/gcc/f/where.h Wed Jun 21 20:11:14 2000 --- gcc-3.1/gcc/f/where.h Sat May 26 01:31:46 2001 *************** the Free Software Foundation, 59 Temple *** 27,34 **** /* Allow multiple inclusion to work. */ ! #ifndef _H_f_where ! #define _H_f_where /* Simple definitions and enumerations. */ --- 27,34 ---- /* Allow multiple inclusion to work. */ ! #ifndef GCC_F_WHERE_H ! #define GCC_F_WHERE_H /* Simple definitions and enumerations. */ *************** void ffewhere_track_kill (ffewhereLine w *** 135,138 **** /* End of #include file. */ ! #endif --- 135,138 ---- /* End of #include file. */ ! #endif /* ! GCC_F_EHERE_H */ diff -Nrc3pad gcc-3.0.4/libf2c/ChangeLog gcc-3.1/libf2c/ChangeLog *** gcc-3.0.4/libf2c/ChangeLog Wed Feb 20 18:45:46 2002 --- gcc-3.1/libf2c/ChangeLog Wed May 15 02:24:32 2002 *************** *** 1,12 **** ! 2002-02-20 Release Manager ! * GCC 3.0.4 Released. ! 2001-12-20 Release Manager ! * GCC 3.0.3 Released. ! 2001-12-03 Toon Moene PR fortran/4885 * endfile.c (t_runc): After ftruncate, seek to end-of-file. --- 1,106 ---- ! 2002-05-14 Release Manager ! * GCC 3.1 Released. ! 2002-05-14 Release Manager ! * GCC 3.1 Released. ! 2002-05-08 Alexandre Oliva ! ! * configure.in (ORIGINAL_LD_FOR_MULTILIBS): Preserve LD at ! script entry, and set LD to it when configuring multilibs. ! * configure: Rebuilt. ! ! 2002-05-02 Alexandre Oliva ! ! * Makefile.in: Fix for multilibbed natives. ! ! 2002-04-15 Loren J. Rittle ! ! * aclocal.m4 (gcc_version_trigger): Use robust path construction. ! * configure: Rebuilt. ! ! 2002-04-01 Phil Edwards ! ! * libF77/Version.c: Fix misplaced leading blanks on first line. ! * libI77/Version.c: Likewise. ! * libU77/Version.c: Likewise. ! ! 2002-01-28 Geoffrey Keating ! ! * aclocal.m4: Replace with version copied from libstdc++-v3. ! * configure.in: Update for changes to aclocal and Makefile. ! * configure: Regenerate. ! * Makefile.in: Correct install and uninstall for cross targets. ! * libU77/configure: Regenerate. ! ! 2002-01-20 Toon Moene ! ! * Makefile.in: $(MULTISUBDIR) has an implied leading `/'; ! remove duplicates. ! Use libtool for removing libg2c{a|la|so} for the `uninstall' target. ! ! 2002-01-18 Toon Moene ! ! * Makefile.in: Add missing `/' separator in last change. ! ! 2002-01-18 Toon Moene ! ! * Makefile.in: Install libg2c.{a|la|so} in $(libdir)$(MULTISUBDIR) ! instead of $(libsubdir)$(MULTISUBDIR). ! ! 2002-01-15 Loren J. Rittle ! ! * libI77/configure.in: Remove fcntl.h check; never define ! _POSIX_SOURCE, NO_FCNTL or OPEN_DECL. Add check for tmpnam(). ! * libI77/configure: Rebuilt. ! * libI77/config.h.in: Rebuilt. ! * libI77/Makefile.in: Remove all traces of rawio.h from ! dependencies lists. ! * libI77/fio.h (FSEEK): Unroll -j1.7 -j1.6 made 2002-01-04. ! * libI77/open.c (f_open): Use HAVE_TMPNAM. ! * libI77/rawio.h: Remove file. ! ! 2002-01-14 John David Anglin ! ! * libI77/configure.in (_LARGEFILE_SOURCE): AC_DEFINE. ! * libI77/configure: Rebuilt. ! * libI77/config.h.in: Rebuilt. ! ! 2002-01-04 Loren J. Rittle ! ! * libI77/fio.h (FSEEK): Enforce type of second parameter to be ! off_t when prototype is missing from system headers for the ! non-standard function. ! ! 2002-01-03 Loren J. Rittle ! ! * Makefile.in ($(LIBG2C):): Let libtool decide when to add -lc. ! ! 2001-12-04 Alexandre Oliva ! ! * Makefile.in ($(LIBG2C)): Fix -rpath argument to libtool. ! ! * Makefile.in (AR, RANLIB): Add, for substitutions. ! (all-unilib, $(LIBG2C)): Depend on object lists, not ! convenience libraries. ! (s-libe77): Renamed from libE77.la; build object list. ! (install): Do not move libraries to libdir. ! (mostlyclean, clean): Adjust. ! * libF77/Makefile.in (RANLIB): Add. ! (LINK): Remove. ! (../s-libf77): Renamed from ../libF77.la; build object list. ! (../libfrtbegin.a): Remove target first. Don't use $<. ! (all, clean, distclean): Adjust. ! * libF77/configure.in: Substitute RANLIB. ! * libF77/configure: Rebuilt. ! * libI77/Makefile.in (LINK): Delete. ! (../s-libi77): Renamed from ../libI77.la; build object list. ! (all, clean, distclean): Adjust. ! * libU77/Makefile.in: Likewise. ! ! 2001-12-02 Toon Moene PR fortran/4885 * endfile.c (t_runc): After ftruncate, seek to end-of-file. *************** *** 15,40 **** * libF77/Makefile.in: Fix non-portable use of `$<' in z_log.c's rule. ! 2001-11-25 Toon Moene PR libf2c/4930 * libF77/Makefile.in: Compile z_log.c with -ffloat-store. ! 2001-10-23 Release Manager ! * GCC 3.0.2 Released. ! 2001-08-19 Release Manager ! * GCC 3.0.1 Released. ! 2001-08-19 Release Manager ! * GCC 3.0.1 Released. ! 20010617 Release Manager ! * GCC 3.0 Released. 2001-06-13 Toon Moene --- 109,278 ---- * libF77/Makefile.in: Fix non-portable use of `$<' in z_log.c's rule. ! 2001-11-23 Toon Moene PR libf2c/4930 * libF77/Makefile.in: Compile z_log.c with -ffloat-store. ! 2001-11-16 John David Anglin ! * Makefile.in: Add MAKEOVERRIDES= to suppress exporting ! environment to (sub)shells. ! 2001-11-13 Toon Moene ! * Makefile.in: Change dependencies on stamp files ! into dependencies on the generated .la files. ! Get rid of objlist. Update comment. ! * libF77/Makefile.in: Ditto. ! * libI77/Makefile.in: Ditto. ! * libU77/Makefile.in: Ditto. ! 2001-10-20 Hans-Peter Nilsson ! * configure.in: Fake AC_EXEEXT invocation. ! * configure: Regenerate. ! 2001-10-20 David Edelsohn ! * Makefile.in: Do not include SUBDIRS in objlist. Create ! libg2c.so from F2CEXT and SUBDIRS archives. ! * libF77/Makefile.in: Create archive. ! * libI77/Makefile.in: Same. ! * libU77/Makefile.in: Same. ! ! 2001-10-05 Toon Moene ! ! * Makefile.in: Move libg2c.so and libg2c.{l}a to ! the same directory at install. ! ! 2001-10-03 Toon Moene ! ! * Makefile.in: Add "AR" reference, change ! from frtbegin.o to libfrtbegin.a. ! * libF77/Makefile.in: Ditto. ! ! 2001-10-02 Toon Moene ! ! * libF77/Makefile.in: Make .lo the target of compilation. ! * libI77/Makefile.in: Ditto. ! * libU77/Makefile.in: Ditto. ! ! 2001-10-01 Toon Moene ! ! * Makefile.in: Set major:minor:sub version number ! of shared libf2c to 0:0:0. ! ! 2001-09-29 Juergen Pfeifer ! Toon Moene ! ! Make libf2c a shared library. ! ! * aclocal.m4: Get definition of libtool. ! * Makefile.in: Use libtool. ! * configure.in: Use libtool. ! * configure: Regenerated. ! * libF77/Makefile.in: Use libtool; treat main program contained in ! libF77/main.c specially. ! * libF77/configure.in: Use libtool. ! * libF77/configure: Regenerated. ! * libI77/Makefile.in: Use libtool. ! * libI77/configure.in: Use libtool. ! * libI77/configure: Regenerated. ! * libU77/Makefile.in: Use libtool. ! * libU77/configure.in: Use libtool. ! * libU77/configure: Regenerated. ! * libU77/date_.c: Adapt for -fPIC compiling. ! * libU77/vxtidate_.c: Ditto. ! ! 2001-09-22 Richard Earnshaw ! ! * libI77/configure.in (__EXTENSIONS__): Define. ! * libI77/config.h.in, libI77/conifgure: regenerate. ! * libU77/configure.in (__EXTENSIONS__): Likewise. ! ! 2001-07-18 Toon Moene ! ! * libI77/configure.in (_XOPEN_SOURCE, _FILE_OFFSET_BITS): Move ! these defines before tests which might be affected by them. ! (_XOPEN_SOURCE_EXTENDED): Define. ! * libI77/configure, libI77/config.h.in: Regenerate. ! ! Wed Jul 18 11:14:33 2001 Kaveh R. Ghazi ! ! * libU77/configure.in (_XOPEN_SOURCE, _FILE_OFFSET_BITS): Move ! these defines before tests which might be affected by them. ! (_XOPEN_SOURCE_EXTENDED): Define. ! ! * libU77/configure, libU77/config.hin: Regenerate. ! ! 2001-07-10 Toon Moene ! ! * libI77/fio.h: Revert type of url from off_t to int. ! * libI77/dfe.c (c_dfe): Cast offset expression in FSEEK to off_t. ! * libI77/due.c (c_due): Ditto. (e_rdue): Ditto. ! * libI77/ftell_.c (G77_ftell_0): Cast result of FTELL to integer. ! (G77_fseek_0): Cast offset argument of FSEEK to off_t. ! ! 2001-07-07 Toon Moene ! ! * libI77/Makefile.in: Update config.h dependencies. ! * libI77/configure.in: Define _XOPEN_SOURCE and ! _FILE_OFFSET_BITS unconditionally. ! * libI77/configure: Rebuilt. ! * libI77/config.h.in: Rebuilt. ! * libI77/endfile.c (t_runc): Replace rewind by FSEEK. ! * libI77/err.c (f__nowwriting): The type of `loc' is off_t. ! * libI77/open.c (f_open): Replace rewind by FSEEK. ! * libI77/rewind.c: Include config.h. (f_rew): Replace ! rewind by FSEEK. ! * libI77/sfe.c: Include config.h. ! * libI77/wsfe.c: Ditto. ! * libU77/configure.in: Define _XOPEN_SOURCE and ! _FILE_OFFSET_BITS unconditionally. ! * libU77/configure: Rebuilt. ! * libU77/config.hin: Rebuilt. ! ! 2001-07-07 Toon Moene ! ! * libI77/Makefile.in: Add necessary dependencies on config.h. ! ! 2001-07-06 Toon Moene ! Pedro Vazquez ! ! * libI77/configure.in: Check for fseeko, ftello. ! * libI77/configure: Rebuilt. ! * libI77/config.h.in: Rebuilt. ! * libI77/fio.h: Define FSEEK to be fseek or fseeko, depending ! on configure's findings. Ditto for FTELL and ftell / ftello. ! * libI77/backspace.c (f_back): Use FSEEK for fseek, FTELL for ftell. ! * libI77/dfe.c (c_dfe): Ditto. ! * libI77/due.c (c_due, e_rdue): Ditto. ! * libI77/endfile.c (t_runc): Ditto. ! * libI77/err.c (f__nowreading, f__nowwriting): Ditto. ! * libI77/ftell_.c (G77_ftell_0, G77_fseek_0): Ditto. ! * libI77/inquire.c (f_inqu): Ditto. ! * libI77/open.c (f_open): Ditto. ! * libI77/rdfmt.c (rd_ed): Ditto. ! * libI77/sue.c (s_wsue, e_wsue, e_rsue): Ditto. ! ! 2001-07-04 Zack Weinberg ! ! * Makefile.in: Take PICFLAG and RUNTESTFLAGS out of FLAGS_TO_PASS. ! ! 2001-07-01 Toon Moene ! ! * libI77/fio.h: Include for off_t. ! ! 2001-07-01 Toon Moene ! Pedro Vazquez ! ! * libI77/fio.h: Use off_t when appropriate. ! * libI77/backspace.c (f_back): Ditto. ! * libI77/endfile.c (t_runc): Ditto. ! * libI77/err.c (f__nowreading): Ditto. ! * libI77/ftell_.c (unit_chk): Ditto. ! * libI77/sue.c (global f__recloc, s_wsue): Ditto. 2001-06-13 Toon Moene *************** *** 102,113 **** ftruncate() prototype is somehow missing even though autoconf test found it properly. ! 2001-02-27 Toon Moene * libI77/configure.in: Test for ftruncate. * libI77/configure: Rebuilt. * libI77/endfile.c: Use fflush/ftruncate when available. 2001-02-08 Geoffrey Keating * configure.in: Don't run AC_PROG_CC_WORKS, because --- 340,356 ---- ftruncate() prototype is somehow missing even though autoconf test found it properly. ! 2001-02-26 Toon Moene * libI77/configure.in: Test for ftruncate. * libI77/configure: Rebuilt. * libI77/endfile.c: Use fflush/ftruncate when available. + 2001-02-19 Joseph S. Myers + + * libF77/Version.c, libI77/Version.c, libU77/Version.c: Update G77 + version number to 0.5.27. + 2001-02-08 Geoffrey Keating * configure.in: Don't run AC_PROG_CC_WORKS, because diff -Nrc3pad gcc-3.0.4/libf2c/Makefile.in gcc-3.1/libf2c/Makefile.in *** gcc-3.0.4/libf2c/Makefile.in Tue Sep 14 07:44:19 1999 --- gcc-3.1/libf2c/Makefile.in Fri May 3 18:41:12 2002 *************** *** 1,5 **** # Makefile for GNU F77 compiler runtime. ! # Copyright (C) 1995-1998 Free Software Foundation, Inc. # Contributed by Dave Love (d.love@dl.ac.uk). # #This file is part of GNU Fortran. --- 1,5 ---- # Makefile for GNU F77 compiler runtime. ! # Copyright (C) 1995-1998, 2001, 2002 Free Software Foundation, Inc. # Contributed by Dave Love (d.love@dl.ac.uk). # #This file is part of GNU Fortran. *************** *** 20,38 **** #02111-1307, USA. SHELL = /bin/sh #### Start of system configuration section. #### ! srcdir = @srcdir@ ! VPATH = @srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ target_alias = @target_alias@ gcc_version = @gcc_version@ gcc_version_trigger = @gcc_version_trigger@ libdir = $(exec_prefix)/lib libsubdir = $(libdir)/gcc-lib/$(target_alias)/$(gcc_version) # Multilib support variables. MULTISRCTOP = --- 20,52 ---- #02111-1307, USA. SHELL = /bin/sh + MAKEOVERRIDES= + .NOEXPORTS: #### Start of system configuration section. #### ! srcdir = @glibcpp_srcdir@ ! VPATH = @glibcpp_srcdir@ prefix = @prefix@ exec_prefix = @exec_prefix@ target_alias = @target_alias@ gcc_version = @gcc_version@ gcc_version_trigger = @gcc_version_trigger@ + top_srcdir = @top_srcdir@ + toplevel_srcdir = @toplevel_srcdir@ + toolexecdir = @glibcpp_toolexecdir@ + glibcpp_toolexecdir = @glibcpp_toolexecdir@ + glibcpp_toolexeclibdir = @glibcpp_toolexeclibdir@ + + top_builddir = . libdir = $(exec_prefix)/lib libsubdir = $(libdir)/gcc-lib/$(target_alias)/$(gcc_version) + # + # Versions should start at 0:0:0 - See libtool manual. + VERSION_MAJOR=0 + VERSION_MINOR=0 + VERSION_SUB=0 # Multilib support variables. MULTISRCTOP = *************** MULTIDO = true *** 43,80 **** MULTICLEAN = true # Not configured per top-level version, since that doesn't get passed # down at configure time, but overrridden by the top-level install # target. INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ ! AR = @AR@ ! AR_FLAGS = rc ! ! RANLIB = @RANLIB@ ! CC = @CC@ CFLAGS = @CFLAGS@ # List of variables to pass to sub-makes. # Quote this way so that it can be used to set shell variables too. - # Currently no use for PICFLAG, RUNTESTFLAGS -- check usage. FLAGS_TO_PASS= \ CC='$(CC)' \ CFLAGS='$(CFLAGS)' \ CPPFLAGS='$(CPPFLAGS)' \ AR='$(AR)' \ RANLIB='$(RANLIB)' \ - PICFLAG='$(PICFLAG)' \ - RUNTESTFLAGS='$(RUNTESTFLAGS)' \ prefix='$(prefix)' \ exec_prefix='$(exec_prefix)' \ libdir='$(libdir)' \ libsubdir='$(libsubdir)' \ tooldir='$(tooldir)' ! LIBG2C = libg2c.a SUBDIRS = libI77 libF77 libU77 --- 57,93 ---- MULTICLEAN = true # Not configured per top-level version, since that doesn't get passed + # Versions should start at 0:0:0 - See libtool manual. # down at configure time, but overrridden by the top-level install # target. INSTALL = @INSTALL@ INSTALL_PROGRAM = @INSTALL_PROGRAM@ INSTALL_DATA = @INSTALL_DATA@ ! LIBTOOL = @LIBTOOL@ CC = @CC@ CFLAGS = @CFLAGS@ + AR = @AR@ + RANLIB = @RANLIB@ # List of variables to pass to sub-makes. # Quote this way so that it can be used to set shell variables too. FLAGS_TO_PASS= \ CC='$(CC)' \ + LD='$(LD)' \ + LIBTOOL='$(LIBTOOL)' \ CFLAGS='$(CFLAGS)' \ CPPFLAGS='$(CPPFLAGS)' \ AR='$(AR)' \ RANLIB='$(RANLIB)' \ prefix='$(prefix)' \ exec_prefix='$(exec_prefix)' \ libdir='$(libdir)' \ libsubdir='$(libsubdir)' \ tooldir='$(tooldir)' ! LIBG2C_BASE = libg2c ! LIBG2C = $(LIBG2C_BASE).la SUBDIRS = libI77 libF77 libU77 *************** all: all-unilib *** 114,122 **** # meant to be invoked via multi-do for multilibs. # Its dependencies can be satisfied in parallel. The [fiu]77 targets ! # update stamp files (see the subdir makefiles) which the $(LIBG2C) ! # target checks in the sub make to decide whether to run ar/ranlib. ! # (Probably only one stamp file is really needed.) The stamp files # s-lib[fiu]77 are intentionally not targets, since we're only meant # to come in at the level of this target. The [fiu]77 targets always # invoke sub makes to check dependencies in the subdirs, else we'd --- 127,134 ---- # meant to be invoked via multi-do for multilibs. # Its dependencies can be satisfied in parallel. The [fiu]77 targets ! # update stamp files (object file lists, actually, see the subdir ! # makefiles) on which the $(LIBG2C) depends. The stamp files # s-lib[fiu]77 are intentionally not targets, since we're only meant # to come in at the level of this target. The [fiu]77 targets always # invoke sub makes to check dependencies in the subdirs, else we'd *************** i77 f77 u77: g2c.h *** 130,148 **** # This target should normally only get invoked via `all-unilib' -- # after all's well in the subdirs -- actually to assemble the library. ! # The stamp file dependencies are just to check whether libg2c.a is ! # up-to-date (to avoid running ar regardless) -- the files should ! # always have been created by a successful `all-unilib'. $(LIBG2C): s-libi77 s-libf77 s-libu77 s-libe77 ! rm -f $(LIBG2C) ! set -e; \ ! for i in $(SUBDIRS); \ ! do (cd $$i && $(MAKE) $(FLAGS_TO_PASS) LIBG2C=../$(LIBG2C) archive); \ ! done ! objs=""; for i in $(F2CEXT); do objs="$$objs libE77/L$$i.o"; done; \ ! $(AR) $(AR_FLAGS) $(LIBG2C) $$objs ! $(RANLIB) $(LIBG2C) i77: cd libI77; $(MAKE) $(FLAGS_TO_PASS) all --- 142,160 ---- # This target should normally only get invoked via `all-unilib' -- # after all's well in the subdirs -- actually to assemble the library. ! # The stamp files contain the object lists of each component of the ! # library. The point of breaking them up is to avoid command-line ! # length limitations. $(LIBG2C): s-libi77 s-libf77 s-libu77 s-libe77 ! $(LIBTOOL) --mode=link $(CC) -o $@ \ ! -version-info $(VERSION_MAJOR):$(VERSION_MINOR):$(VERSION_SUB) \ ! -rpath $(libdir)$(MULTISUBDIR) \ ! -objectlist s-libe77 \ ! -objectlist s-libf77 \ ! -objectlist s-libi77 \ ! -objectlist s-libu77 \ ! -lm i77: cd libI77; $(MAKE) $(FLAGS_TO_PASS) all *************** u77: *** 154,169 **** cd libU77; $(MAKE) $(FLAGS_TO_PASS) all s-libe77: f2cext.c ! if [ -d libE77 ]; then rm -f libE77/*.o; else mkdir libE77; fi for name in $(F2CEXT); \ do \ echo $${name}; \ ! $(CC) -c -I. -I$(srcdir) -I../../include $(CPPFLAGS) $(CFLAGS) \ ! -DL$${name} $(srcdir)/f2cext.c \ ! -o libE77/L$${name}.o; \ if [ $$? -eq 0 ] ; then true; else exit 1; fi; \ done ! echo timestamp >s-libe77 f2cext.c: g2c.h --- 166,183 ---- cd libU77; $(MAKE) $(FLAGS_TO_PASS) all s-libe77: f2cext.c ! if [ -d libE77 ]; then rm -f libE77/*.o libE77/*.lo; else mkdir libE77; fi ! -rm -f $@.T $@ for name in $(F2CEXT); \ do \ echo $${name}; \ ! $(LIBTOOL) --mode=compile $(CC) -c -I. -I$(srcdir) -I../../include \ ! $(CPPFLAGS) $(CFLAGS) -DL$${name} $(srcdir)/f2cext.c \ ! -o libE77/L$${name}.lo ; \ if [ $$? -eq 0 ] ; then true; else exit 1; fi; \ + echo libE77/L$${name}.lo >> $@.T; \ done ! mv $@.T $@ f2cext.c: g2c.h *************** check: *** 197,226 **** cd libU77; $(MAKE) G77DIR=../../../gcc/ check install: all ! $(INSTALL_DATA) $(LIBG2C) $(libsubdir)/$(MULTISUBDIR)/$(LIBG2C).n ! ( cd $(libsubdir)/$(MULTISUBDIR) ; $(RANLIB) $(LIBG2C).n ) ! mv -f $(libsubdir)/$(MULTISUBDIR)/$(LIBG2C).n $(libsubdir)/$(MULTISUBDIR)/$(LIBG2C) $(INSTALL_DATA) g2c.h $(libsubdir)/include/g2c.h - @if [ -f f2c-install-ok -o -f $(srcdir)/f2c-install-ok ]; then \ - echo ''; \ - echo 'Warning: g77 no longer installs libf2c.a or f2c.h.'; \ - echo ' You must do so yourself. For more information,'; \ - echo ' read "Distributing Binaries" in the g77 docs.'; \ - echo ' (To turn off this warning, delete the file'; \ - echo ' f2c-install-ok in the source or build directory.)'; \ - echo ''; \ - else true; fi $(MULTIDO) $(FLAGS_TO_PASS) multi-do DO="$@" install-strip: $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' install uninstall: ! rm -f $(libsubdir)/$(MULTISUBDIR)/include/g2c.h $(libsubdir)/$(MULTISUBDIR)/$(LIBG2C) $(MULTIDO) $(FLAGS_TO_PASS) multi-do DO="$@" mostlyclean: ! rm -f $(LIBG2C) $(MAKE) DO=$@ DODIRS="$(SUBDIRS)" $(FLAGS_TO_PASS) subdir_do; \ $(MULTICLEAN) multi-clean DO=$@ rm -fr libE77 s-libe77 --- 211,235 ---- cd libU77; $(MAKE) G77DIR=../../../gcc/ check install: all ! $(SHELL) $(toplevel_srcdir)/mkinstalldirs $(glibcpp_toolexeclibdir) ! $(LIBTOOL) --mode=install $(INSTALL) $(LIBG2C) $(glibcpp_toolexeclibdir) ! $(INSTALL_DATA) libfrtbegin.a $(glibcpp_toolexeclibdir) ! $(RANLIB) $(glibcpp_toolexeclibdir)/libfrtbegin.a $(INSTALL_DATA) g2c.h $(libsubdir)/include/g2c.h $(MULTIDO) $(FLAGS_TO_PASS) multi-do DO="$@" + @-$(LIBTOOL) --mode=finish $(glibcpp_toolexeclibdir) install-strip: $(MAKE) INSTALL_PROGRAM='$(INSTALL_PROGRAM) -s' install uninstall: ! rm -f $(libsubdir)/include/g2c.h ! rm -f $(glibcpp_toolexeclibdir)/libfrtbegin.a ! $(LIBTOOL) --mode=uninstall rm -f $(glibcpp_toolexeclibdir)$(LIBG2C_BASE).la $(MULTIDO) $(FLAGS_TO_PASS) multi-do DO="$@" mostlyclean: ! rm -f $(LIBG2C) objlist $(MAKE) DO=$@ DODIRS="$(SUBDIRS)" $(FLAGS_TO_PASS) subdir_do; \ $(MULTICLEAN) multi-clean DO=$@ rm -fr libE77 s-libe77 *************** clean: mostlyclean *** 229,234 **** --- 238,244 ---- rm -f config.log $(MAKE) DO=$@ DODIRS="$(SUBDIRS)" $(FLAGS_TO_PASS) subdir_do; \ $(MULTICLEAN) multi-clean DO=$@ + rm -rf .libs distclean: clean rm -f g2c.h s-libe77 diff -Nrc3pad gcc-3.0.4/libf2c/aclocal.m4 gcc-3.1/libf2c/aclocal.m4 *** gcc-3.0.4/libf2c/aclocal.m4 Thu Jan 1 00:00:00 1970 --- gcc-3.1/libf2c/aclocal.m4 Mon Apr 15 21:57:52 2002 *************** *** 0 **** --- 1,224 ---- + dnl Copyright (C) 1994, 1995-8, 1999, 2001 Free Software Foundation, Inc. + dnl This file is free software; the Free Software Foundation + dnl gives unlimited permission to copy and/or distribute it, + dnl with or without modifications, as long as this notice is preserved. + + dnl This program is distributed in the hope that it will be useful, + dnl but WITHOUT ANY WARRANTY, to the extent permitted by law; without + dnl even the implied warranty of MERCHANTABILITY or FITNESS FOR A + dnl PARTICULAR PURPOSE. + + dnl + dnl Initialize configure bits. + dnl + dnl GLIBCPP_CONFIGURE + AC_DEFUN(GLIBCPP_CONFIGURE, [ + dnl Default to --enable-multilib + AC_ARG_ENABLE(multilib, + [ --enable-multilib build hella library versions (default)], + [case "${enableval}" in + yes) multilib=yes ;; + no) multilib=no ;; + *) AC_MSG_ERROR(bad value ${enableval} for multilib option) ;; + esac], [multilib=yes])dnl + + # When building with srcdir == objdir, links to the source files will + # be created in directories within the target_subdir. We have to + # adjust toplevel_srcdir accordingly, so that configure finds + # install-sh and other auxiliary files that live in the top-level + # source directory. + if test "${srcdir}" = "."; then + if test -z "${with_target_subdir}"; then + toprel=".." + else + if test "${with_target_subdir}" != "."; then + toprel="${with_multisrctop}../.." + else + toprel="${with_multisrctop}.." + fi + fi + else + toprel=".." + fi + AC_CONFIG_AUX_DIR(${srcdir}/$toprel) + toplevel_srcdir=\${top_srcdir}/$toprel + AC_SUBST(toplevel_srcdir) + + # Export build and source directories. + # These need to be absolute paths, yet at the same time need to + # canonicalize only relative paths, because then amd will not unmount + # drives. Thus the use of PWDCMD: set it to 'pawd' or 'amq -w' if using amd. + glibcpp_builddir=`pwd` + case $srcdir in + [\\/$]* | ?:[\\/]*) glibcpp_srcdir=${srcdir} ;; + *) glibcpp_srcdir=`cd "$srcdir" && ${PWDCMD-pwd} || echo "$srcdir"` ;; + esac + AC_SUBST(glibcpp_builddir) + AC_SUBST(glibcpp_srcdir) + + dnl This is here just to satisfy automake. + ifelse(not,equal,[AC_CONFIG_AUX_DIR(..)]) + + # Will set LN_S to either 'ln -s' or 'ln'. With autoconf 2.50+, can also + # be 'cp -p' if linking isn't available. + #ac_cv_prog_LN_S='cp -p' + AC_PROG_LN_S + + # We use these options to decide which functions to include. + AC_ARG_WITH(target-subdir, + [ --with-target-subdir=SUBDIR + configuring in a subdirectory]) + AC_ARG_WITH(cross-host, + [ --with-cross-host=HOST configuring with a cross compiler]) + + # Never versions of autoconf add an underscore to these functions. + # Prevent future problems ... + ifdef([AC_PROG_CC_G],[],[define([AC_PROG_CC_G],defn([_AC_PROG_CC_G]))]) + ifdef([AC_PROG_CC_GNU],[],[define([AC_PROG_CC_GNU],defn([_AC_PROG_CC_GNU]))]) + ifdef([AC_PROG_CXX_G],[],[define([AC_PROG_CXX_G],defn([_AC_PROG_CXX_G]))]) + ifdef([AC_PROG_CXX_GNU],[],[define([AC_PROG_CXX_GNU],defn([_AC_PROG_CXX_GNU]))]) + + # AC_PROG_CC + + # FIXME: We temporarily define our own version of AC_PROG_CC. This is + # copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS. We + # are probably using a cross compiler, which will not be able to fully + # link an executable. This should really be fixed in autoconf + # itself. + + AC_DEFUN(LIB_AC_PROG_CC, + [AC_BEFORE([$0], [AC_PROG_CPP])dnl + dnl Fool anybody using AC_PROG_CC. + AC_PROVIDE([AC_PROG_CC]) + AC_CHECK_PROG(CC, gcc, gcc) + if test -z "$CC"; then + AC_CHECK_PROG(CC, cc, cc, , , /usr/ucb/cc) + test -z "$CC" && AC_MSG_ERROR([no acceptable cc found in \$PATH]) + fi + + AC_PROG_CC_GNU + + if test $ac_cv_prog_gcc = yes; then + GCC=yes + dnl Check whether -g works, even if CFLAGS is set, in case the package + dnl plays around with CFLAGS (such as to build both debugging and + dnl normal versions of a library), tasteless as that idea is. + ac_test_CFLAGS="${CFLAGS+set}" + ac_save_CFLAGS="$CFLAGS" + CFLAGS= + AC_PROG_CC_G + if test "$ac_test_CFLAGS" = set; then + CFLAGS="$ac_save_CFLAGS" + elif test $ac_cv_prog_cc_g = yes; then + CFLAGS="-g -O2" + else + CFLAGS="-O2" + fi + else + GCC= + test "${CFLAGS+set}" = set || CFLAGS="-g" + fi + ]) + + LIB_AC_PROG_CC + + AC_CHECK_TOOL(AS, as) + AC_CHECK_TOOL(AR, ar) + AC_CHECK_TOOL(RANLIB, ranlib, ranlib-not-found-in-path-error) + AC_PROG_INSTALL + + # We need AC_EXEEXT to keep automake happy in cygnus mode. However, + # at least currently, we never actually build a program, so we never + # need to use $(EXEEXT). Moreover, the test for EXEEXT normally + # fails, because we are probably configuring with a cross compiler + # which can't create executables. So we include AC_EXEEXT to keep + # automake happy, but we don't execute it, since we don't care about + # the result. + if false; then + # autoconf 2.50 runs AC_EXEEXT by default, and the macro expands + # to nothing, so nothing would remain between `then' and `fi' if it + # were not for the `:' below. + : + AC_EXEEXT + fi + ]) + + + dnl + dnl GLIBCPP_EXPORT_INSTALL_INFO + dnl calculates gxx_install_dir + dnl exports glibcpp_toolexecdir + dnl exports glibcpp_toolexeclibdir + dnl exports glibcpp_prefixdir + dnl + dnl Assumes cross_compiling bits already done, and with_cross_host in + dnl particular + dnl + dnl GLIBCPP_EXPORT_INSTALL_INFO + AC_DEFUN(GLIBCPP_EXPORT_INSTALL_INFO, [ + # Assumes glibcpp_builddir, glibcpp_srcdir are alreay set up and + # exported correctly in GLIBCPP_CONFIGURE. + glibcpp_toolexecdir=no + glibcpp_toolexeclibdir=no + glibcpp_prefixdir=${prefix} + + AC_MSG_CHECKING([for interface version number]) + libstdcxx_interface=$INTERFACE + AC_MSG_RESULT($libstdcxx_interface) + + # Process the option "--enable-version-specific-runtime-libs" + AC_MSG_CHECKING([for --enable-version-specific-runtime-libs]) + AC_ARG_ENABLE(version-specific-runtime-libs, + [ --enable-version-specific-runtime-libs Specify that runtime libraries should be installed in a compiler-specific directory ], + [case "$enableval" in + yes) version_specific_libs=yes ;; + no) version_specific_libs=no ;; + *) AC_MSG_ERROR([Unknown argument to enable/disable version-specific libs]);; + esac], + version_specific_libs=no)dnl + # Option set, now we can test it. + AC_MSG_RESULT($version_specific_libs) + + gcc_version_trigger=${toplevel_srcdir}/gcc/version.c + gcc_version_full=`grep version_string ${gcc_version_trigger} | sed -e 's/.*\"\([[^ \"]]*\)[[ \"]].*/\1/'` + gcc_version=`echo ${gcc_version_full} | sed -e 's/\([^ ]*\) .*/\1/'` + AC_SUBST(gcc_version) + AC_SUBST(gcc_version_trigger) + + if test $version_specific_libs = yes; then + # Need the gcc compiler version to know where to install libraries + # and header files if --enable-version-specific-runtime-libs option + # is selected. + changequote(,)dnl + glibcpp_toolexecdir='$(libdir)/gcc-lib/$(target_alias)' + glibcpp_toolexeclibdir='$(toolexecdir)/'${gcc_version}'$(MULTISUBDIR)' + changequote([,])dnl + fi + + # Calculate glibcpp_toolexecdir, glibcpp_toolexeclibdir + # Install a library built with a cross compiler in tooldir, not libdir. + if test x"$glibcpp_toolexecdir" = x"no"; then + if test -n "$with_cross_host" && + test x"$with_cross_host" != x"no"; then + glibcpp_toolexecdir='$(exec_prefix)/$(target_alias)' + glibcpp_toolexeclibdir='$(toolexecdir)/lib$(MULTISUBDIR)' + else + glibcpp_toolexecdir='$(libdir)/gcc-lib/$(target_alias)' + glibcpp_toolexeclibdir='$(libdir)$(MULTISUBDIR)' + fi + fi + + AC_SUBST(glibcpp_prefixdir) + AC_SUBST(glibcpp_toolexecdir) + AC_SUBST(glibcpp_toolexeclibdir) + ]) + + sinclude(../libtool.m4) + dnl The lines below arrange for aclocal not to bring an installed + dnl libtool.m4 into aclocal.m4, while still arranging for automake to + dnl add a definition of LIBTOOL to Makefile.in. + ifelse(,,,[AC_SUBST(LIBTOOL) + AC_DEFUN([AM_PROG_LIBTOOL]) + AC_DEFUN([AC_LIBTOOL_DLOPEN]) + AC_DEFUN([AC_PROG_LD]) + ]) diff -Nrc3pad gcc-3.0.4/libf2c/configure gcc-3.1/libf2c/configure *** gcc-3.0.4/libf2c/configure Fri Feb 9 07:14:34 2001 --- gcc-3.1/libf2c/configure Wed May 8 04:25:36 2002 *************** *** 11,16 **** --- 11,37 ---- ac_help= ac_default_prefix=/usr/local # Any additions from configure.in: + ac_help="$ac_help + --enable-multilib build hella library versions (default)" + ac_help="$ac_help + --with-target-subdir=SUBDIR + configuring in a subdirectory" + ac_help="$ac_help + --with-cross-host=HOST configuring with a cross compiler" + ac_help="$ac_help + --enable-version-specific-runtime-libs Specify that runtime libraries should be installed in a compiler-specific directory " + ac_help="$ac_help + --enable-shared[=PKGS] build shared libraries [default=yes]" + ac_help="$ac_help + --enable-static[=PKGS] build static libraries [default=yes]" + ac_help="$ac_help + --enable-fast-install[=PKGS] optimize for fast installation [default=yes]" + ac_help="$ac_help + --with-gnu-ld assume the C compiler uses GNU ld [default=no]" + ac_help="$ac_help + --disable-libtool-lock avoid locking (might break parallel builds)" + ac_help="$ac_help + --with-pic try to use only PIC/non-PIC objects [default=use both]" # Initialize some variables set by options. # The variables have the same names as the options, with *************** program_suffix=NONE *** 28,33 **** --- 49,55 ---- program_transform_name=s,x,x, silent= site= + sitefile= srcdir= target=NONE verbose= *************** Configuration: *** 142,147 **** --- 164,170 ---- --help print this message --no-create do not create output files --quiet, --silent do not print \`checking...' messages + --site-file=FILE use FILE as the site file --version print the version of autoconf that created configure Directory and file names: --prefix=PREFIX install architecture-independent files in PREFIX *************** EOF *** 312,317 **** --- 335,345 ---- -site=* | --site=* | --sit=*) site="$ac_optarg" ;; + -site-file | --site-file | --site-fil | --site-fi | --site-f) + ac_prev=sitefile ;; + -site-file=* | --site-file=* | --site-fil=* | --site-fi=* | --site-f=*) + sitefile="$ac_optarg" ;; + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) *************** fi *** 477,488 **** srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` # Prefer explicitly selected file to automatically selected ones. ! if test -z "$CONFIG_SITE"; then ! if test "x$prefix" != xNONE; then ! CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" ! else ! CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then --- 505,520 ---- srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` # Prefer explicitly selected file to automatically selected ones. ! if test -z "$sitefile"; then ! if test -z "$CONFIG_SITE"; then ! if test "x$prefix" != xNONE; then ! CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" ! else ! CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" ! fi fi + else + CONFIG_SITE="$sitefile" fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then *************** fi *** 522,538 **** ! if test "${srcdir}" = "." ; then ! if test "${with_target_subdir}" != "." ; then ! topsrcdir=${with_multisrctop}../.. else ! topsrcdir=${with_multisrctop}.. fi else ! topsrcdir=${srcdir}/.. fi ac_aux_dir= ! for ac_dir in $topsrcdir $srcdir/$topsrcdir; do if test -f $ac_dir/install-sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" --- 554,777 ---- ! # This works around the fact that libtool configuration may change LD ! # for this particular configuration, but some shells, instead of ! # keeping the changes in LD private, export them just because LD is ! # exported. ! ORIGINAL_LD_FOR_MULTILIBS=$LD ! ! ac_aux_dir= ! for ac_dir in $srcdir $srcdir/.. $srcdir/../..; do ! if test -f $ac_dir/install-sh; then ! ac_aux_dir=$ac_dir ! ac_install_sh="$ac_aux_dir/install-sh -c" ! break ! elif test -f $ac_dir/install.sh; then ! ac_aux_dir=$ac_dir ! ac_install_sh="$ac_aux_dir/install.sh -c" ! break ! fi ! done ! if test -z "$ac_aux_dir"; then ! { echo "configure: error: can not find install-sh or install.sh in $srcdir $srcdir/.. $srcdir/../.." 1>&2; exit 1; } ! fi ! ac_config_guess=$ac_aux_dir/config.guess ! ac_config_sub=$ac_aux_dir/config.sub ! ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. ! ! ! # Do some error checking and defaulting for the host and target type. ! # The inputs are: ! # configure --host=HOST --target=TARGET --build=BUILD NONOPT ! # ! # The rules are: ! # 1. You are not allowed to specify --host, --target, and nonopt at the ! # same time. ! # 2. Host defaults to nonopt. ! # 3. If nonopt is not specified, then host defaults to the current host, ! # as determined by config.guess. ! # 4. Target and build default to nonopt. ! # 5. If nonopt is not specified, then target and build default to host. ! ! # The aliases save the names the user supplied, while $host etc. ! # will get canonicalized. ! case $host---$target---$nonopt in ! NONE---*---* | *---NONE---* | *---*---NONE) ;; ! *) { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } ;; ! esac ! ! ! # Make sure we can run config.sub. ! if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then : ! else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } ! fi ! ! echo $ac_n "checking host system type""... $ac_c" 1>&6 ! echo "configure:611: checking host system type" >&5 ! ! host_alias=$host ! case "$host_alias" in ! NONE) ! case $nonopt in ! NONE) ! if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then : ! else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; } ! fi ;; ! *) host_alias=$nonopt ;; ! esac ;; ! esac ! ! host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias` ! host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` ! host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` ! host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` ! echo "$ac_t""$host" 1>&6 ! ! echo $ac_n "checking target system type""... $ac_c" 1>&6 ! echo "configure:632: checking target system type" >&5 ! ! target_alias=$target ! case "$target_alias" in ! NONE) ! case $nonopt in ! NONE) target_alias=$host_alias ;; ! *) target_alias=$nonopt ;; ! esac ;; ! esac ! ! target=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $target_alias` ! target_cpu=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` ! target_vendor=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` ! target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` ! echo "$ac_t""$target" 1>&6 ! ! echo $ac_n "checking build system type""... $ac_c" 1>&6 ! echo "configure:650: checking build system type" >&5 ! ! build_alias=$build ! case "$build_alias" in ! NONE) ! case $nonopt in ! NONE) build_alias=$host_alias ;; ! *) build_alias=$nonopt ;; ! esac ;; ! esac ! ! build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias` ! build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` ! build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` ! build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` ! echo "$ac_t""$build" 1>&6 ! ! test "$host_alias" != "$target_alias" && ! test "$program_prefix$program_suffix$program_transform_name" = \ ! NONENONEs,x,x, && ! program_prefix=${target_alias}- ! ! target_alias=${target_alias-$target} ! ! ! if test $host != $build; then ! ac_tool_prefix=${host_alias}- ! else ! ac_tool_prefix= ! fi ! ! echo $ac_n "checking for Cygwin environment""... $ac_c" 1>&6 ! echo "configure:682: checking for Cygwin environment" >&5 ! if eval "test \"`echo '$''{'ac_cv_cygwin'+set}'`\" = set"; then ! echo $ac_n "(cached) $ac_c" 1>&6 ! else ! cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then ! rm -rf conftest* ! ac_cv_cygwin=yes ! else ! echo "configure: failed program was:" >&5 ! cat conftest.$ac_ext >&5 ! rm -rf conftest* ! ac_cv_cygwin=no ! fi ! rm -f conftest* ! rm -f conftest* ! fi ! ! echo "$ac_t""$ac_cv_cygwin" 1>&6 ! CYGWIN= ! test "$ac_cv_cygwin" = yes && CYGWIN=yes ! echo $ac_n "checking for mingw32 environment""... $ac_c" 1>&6 ! echo "configure:715: checking for mingw32 environment" >&5 ! if eval "test \"`echo '$''{'ac_cv_mingw32'+set}'`\" = set"; then ! echo $ac_n "(cached) $ac_c" 1>&6 ! else ! cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then ! rm -rf conftest* ! ac_cv_mingw32=yes ! else ! echo "configure: failed program was:" >&5 ! cat conftest.$ac_ext >&5 ! rm -rf conftest* ! ac_cv_mingw32=no ! fi ! rm -f conftest* ! rm -f conftest* ! fi ! ! echo "$ac_t""$ac_cv_mingw32" 1>&6 ! MINGW32= ! test "$ac_cv_mingw32" = yes && MINGW32=yes ! ! # Check whether --enable-multilib or --disable-multilib was given. ! if test "${enable_multilib+set}" = set; then ! enableval="$enable_multilib" ! case "${enableval}" in ! yes) multilib=yes ;; ! no) multilib=no ;; ! *) { echo "configure: error: bad value ${enableval} for multilib option" 1>&2; exit 1; } ;; ! esac ! else ! multilib=yes ! fi ! ! # When building with srcdir == objdir, links to the source files will ! # be created in directories within the target_subdir. We have to ! # adjust toplevel_srcdir accordingly, so that configure finds ! # install-sh and other auxiliary files that live in the top-level ! # source directory. ! if test "${srcdir}" = "."; then ! if test -z "${with_target_subdir}"; then ! toprel=".." else ! if test "${with_target_subdir}" != "."; then ! toprel="${with_multisrctop}../.." ! else ! toprel="${with_multisrctop}.." ! fi fi else ! toprel=".." fi ac_aux_dir= ! for ac_dir in ${srcdir}/$toprel $srcdir/${srcdir}/$toprel; do if test -f $ac_dir/install-sh; then ac_aux_dir=$ac_dir ac_install_sh="$ac_aux_dir/install-sh -c" *************** for ac_dir in $topsrcdir $srcdir/$topsrc *** 544,599 **** fi done if test -z "$ac_aux_dir"; then ! { echo "configure: error: can not find install-sh or install.sh in $topsrcdir $srcdir/$topsrcdir" 1>&2; exit 1; } fi ac_config_guess=$ac_aux_dir/config.guess ac_config_sub=$ac_aux_dir/config.sub ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. ! # If the language specific compiler does not exist, but the "gcc" directory ! # does, we do not build anything. Note, $r is set by the top-level Makefile. ! # Note that when we look for the compiler, we search both with and without ! # extension to handle cross and canadian cross builds. ! compiler_name=f771 ! rm -f skip-this-dir ! echo $ac_n "checking if compiler $compiler_name has been built""... $ac_c" 1>&6 ! echo "configure:562: checking if compiler $compiler_name has been built" >&5 ! if eval "test \"`echo '$''{'g77_cv_compiler_exists'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ! g77_cv_compiler_exists=yes ! if test -n "$r"; then ! if test -d "$r"/gcc; then ! if test -f "$r"/gcc/$compiler_name \ ! || test -f "$r"/gcc/$compiler_name.exe; then ! true ! else ! g77_cv_compiler_exists=no ! echo "rm -f config.cache config.log multilib.out" > skip-this-dir ! fi ! fi fi fi ! echo "$ac_t""$g77_cv_compiler_exists" 1>&6 ! if test x$g77_cv_compiler_exists = xno ! then ! rm -f Makefile conftest* confdefs* core ! exit 0 fi - # For g77 we'll set CC to point at the built gcc, but this will get it into - # the makefiles # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:597: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 783,872 ---- fi done if test -z "$ac_aux_dir"; then ! { echo "configure: error: can not find install-sh or install.sh in ${srcdir}/$toprel $srcdir/${srcdir}/$toprel" 1>&2; exit 1; } fi ac_config_guess=$ac_aux_dir/config.guess ac_config_sub=$ac_aux_dir/config.sub ac_configure=$ac_aux_dir/configure # This should be Cygnus configure. + toplevel_srcdir=\${top_srcdir}/$toprel ! ! # Export build and source directories. ! # These need to be absolute paths, yet at the same time need to ! # canonicalize only relative paths, because then amd will not unmount ! # drives. Thus the use of PWDCMD: set it to 'pawd' or 'amq -w' if using amd. ! glibcpp_builddir=`pwd` ! case $srcdir in ! \\/$* | ?:\\/*) glibcpp_srcdir=${srcdir} ;; ! *) glibcpp_srcdir=`cd "$srcdir" && ${PWDCMD-pwd} || echo "$srcdir"` ;; ! esac ! ! ! ! ! ! # Will set LN_S to either 'ln -s' or 'ln'. With autoconf 2.50+, can also ! # be 'cp -p' if linking isn't available. ! #ac_cv_prog_LN_S='cp -p' ! echo $ac_n "checking whether ln -s works""... $ac_c" 1>&6 ! echo "configure:814: checking whether ln -s works" >&5 ! if eval "test \"`echo '$''{'ac_cv_prog_LN_S'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ! rm -f conftestdata ! if ln -s X conftestdata 2>/dev/null ! then ! rm -f conftestdata ! ac_cv_prog_LN_S="ln -s" ! else ! ac_cv_prog_LN_S=ln ! fi ! fi ! LN_S="$ac_cv_prog_LN_S" ! if test "$ac_cv_prog_LN_S" = "ln -s"; then ! echo "$ac_t""yes" 1>&6 ! else ! echo "$ac_t""no" 1>&6 fi + + # We use these options to decide which functions to include. + # Check whether --with-target-subdir or --without-target-subdir was given. + if test "${with_target_subdir+set}" = set; then + withval="$with_target_subdir" + : fi ! # Check whether --with-cross-host or --without-cross-host was given. ! if test "${with_cross_host+set}" = set; then ! withval="$with_cross_host" ! : fi + # Never versions of autoconf add an underscore to these functions. + # Prevent future problems ... + + + + + + # AC_PROG_CC + + # FIXME: We temporarily define our own version of AC_PROG_CC. This is + # copied from autoconf 2.12, but does not call AC_PROG_CC_WORKS. We + # are probably using a cross compiler, which will not be able to fully + # link an executable. This should really be fixed in autoconf + # itself. + # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:870: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** if test -z "$CC"; then *** 623,629 **** # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:627: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 896,902 ---- # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:900: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** else *** 668,771 **** echo "$ac_t""no" 1>&6 fi ! if test -z "$CC"; then ! case "`uname -s`" in ! *win32* | *WIN32*) ! # Extract the first word of "cl", so it can be a program name with args. ! set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:678: checking for $ac_word" >&5 ! if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ! if test -n "$CC"; then ! ac_cv_prog_CC="$CC" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ! ac_cv_prog_CC="cl" break fi done IFS="$ac_save_ifs" fi fi ! CC="$ac_cv_prog_CC" ! if test -n "$CC"; then ! echo "$ac_t""$CC" 1>&6 else echo "$ac_t""no" 1>&6 fi ! ;; esac fi - test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } fi ! echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 ! echo "configure:711: checking whether we are using GNU C" >&5 ! if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ! cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ! ac_cv_prog_gcc=yes else ! ac_cv_prog_gcc=no fi fi ! echo "$ac_t""$ac_cv_prog_gcc" 1>&6 ! if test $ac_cv_prog_gcc = yes; then ! GCC=yes else ! GCC= fi ! ac_test_CFLAGS="${CFLAGS+set}" ! ac_save_CFLAGS="$CFLAGS" ! CFLAGS= ! echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 ! echo "configure:739: checking whether ${CC-cc} accepts -g" >&5 ! if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ! echo 'void f(){}' > conftest.c ! if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then ! ac_cv_prog_cc_g=yes else ! ac_cv_prog_cc_g=no fi rm -f conftest* fi - echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 - if test "$ac_test_CFLAGS" = set; then - CFLAGS="$ac_save_CFLAGS" - elif test $ac_cv_prog_cc_g = yes; then - if test "$GCC" = yes; then - CFLAGS="-g -O2" else ! CFLAGS="-g" fi else ! if test "$GCC" = yes; then ! CFLAGS="-O2" else ! CFLAGS= fi fi test "$AR" || AR=ar --- 941,2206 ---- echo "$ac_t""no" 1>&6 fi ! test -z "$CC" && { echo "configure: error: no acceptable cc found in \$PATH" 1>&2; exit 1; } ! fi ! ! echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 ! echo "configure:949: checking whether we are using GNU C" >&5 ! if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then ! echo $ac_n "(cached) $ac_c" 1>&6 ! else ! cat > conftest.c <&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ! ac_cv_prog_gcc=yes ! else ! ac_cv_prog_gcc=no ! fi ! fi ! ! echo "$ac_t""$ac_cv_prog_gcc" 1>&6 ! ! if test $ac_cv_prog_gcc = yes; then ! GCC=yes ! ac_test_CFLAGS="${CFLAGS+set}" ! ac_save_CFLAGS="$CFLAGS" ! CFLAGS= ! echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 ! echo "configure:973: checking whether ${CC-cc} accepts -g" >&5 ! if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then ! echo $ac_n "(cached) $ac_c" 1>&6 ! else ! echo 'void f(){}' > conftest.c ! if test -z "`${CC-cc} -g -c conftest.c 2>&1`"; then ! ac_cv_prog_cc_g=yes ! else ! ac_cv_prog_cc_g=no ! fi ! rm -f conftest* ! ! fi ! ! echo "$ac_t""$ac_cv_prog_cc_g" 1>&6 ! if test "$ac_test_CFLAGS" = set; then ! CFLAGS="$ac_save_CFLAGS" ! elif test $ac_cv_prog_cc_g = yes; then ! CFLAGS="-g -O2" ! else ! CFLAGS="-O2" ! fi ! else ! GCC= ! test "${CFLAGS+set}" = set || CFLAGS="-g" ! fi ! ! ! # Extract the first word of "${ac_tool_prefix}as", so it can be a program name with args. ! set dummy ${ac_tool_prefix}as; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:1004: checking for $ac_word" >&5 ! if eval "test \"`echo '$''{'ac_cv_prog_AS'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ! if test -n "$AS"; then ! ac_cv_prog_AS="$AS" # Let the user override the test. else IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ac_dummy="$PATH" for ac_dir in $ac_dummy; do test -z "$ac_dir" && ac_dir=. if test -f $ac_dir/$ac_word; then ! ac_cv_prog_AS="${ac_tool_prefix}as" break fi done IFS="$ac_save_ifs" + test -z "$ac_cv_prog_AS" && ac_cv_prog_AS="as" fi fi ! AS="$ac_cv_prog_AS" ! if test -n "$AS"; then ! echo "$ac_t""$AS" 1>&6 else echo "$ac_t""no" 1>&6 fi ! ! ! ! # Extract the first word of "${ac_tool_prefix}ar", so it can be a program name with args. ! set dummy ${ac_tool_prefix}ar; ac_word=$2 ! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:1036: checking for $ac_word" >&5 ! if eval "test \"`echo '$''{'ac_cv_prog_AR'+set}'`\" = set"; then ! echo $ac_n "(cached) $ac_c" 1>&6 ! else ! if test -n "$AR"; then ! ac_cv_prog_AR="$AR" # Let the user override the test. ! else ! IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ! ac_dummy="$PATH" ! for ac_dir in $ac_dummy; do ! test -z "$ac_dir" && ac_dir=. ! if test -f $ac_dir/$ac_word; then ! ac_cv_prog_AR="${ac_tool_prefix}ar" ! break ! fi ! done ! IFS="$ac_save_ifs" ! test -z "$ac_cv_prog_AR" && ac_cv_prog_AR="ar" ! fi ! fi ! AR="$ac_cv_prog_AR" ! if test -n "$AR"; then ! echo "$ac_t""$AR" 1>&6 ! else ! echo "$ac_t""no" 1>&6 ! fi ! ! ! ! # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. ! set dummy ${ac_tool_prefix}ranlib; ac_word=$2 ! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:1068: checking for $ac_word" >&5 ! if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then ! echo $ac_n "(cached) $ac_c" 1>&6 ! else ! if test -n "$RANLIB"; then ! ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. ! else ! IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ! ac_dummy="$PATH" ! for ac_dir in $ac_dummy; do ! test -z "$ac_dir" && ac_dir=. ! if test -f $ac_dir/$ac_word; then ! ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" ! break ! fi ! done ! IFS="$ac_save_ifs" ! fi ! fi ! RANLIB="$ac_cv_prog_RANLIB" ! if test -n "$RANLIB"; then ! echo "$ac_t""$RANLIB" 1>&6 ! else ! echo "$ac_t""no" 1>&6 ! fi ! ! ! if test -z "$ac_cv_prog_RANLIB"; then ! if test -n "$ac_tool_prefix"; then ! # Extract the first word of "ranlib", so it can be a program name with args. ! set dummy ranlib; ac_word=$2 ! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:1100: checking for $ac_word" >&5 ! if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then ! echo $ac_n "(cached) $ac_c" 1>&6 ! else ! if test -n "$RANLIB"; then ! ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. ! else ! IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ! ac_dummy="$PATH" ! for ac_dir in $ac_dummy; do ! test -z "$ac_dir" && ac_dir=. ! if test -f $ac_dir/$ac_word; then ! ac_cv_prog_RANLIB="ranlib" ! break ! fi ! done ! IFS="$ac_save_ifs" ! test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB="ranlib-not-found-in-path-error" ! fi ! fi ! RANLIB="$ac_cv_prog_RANLIB" ! if test -n "$RANLIB"; then ! echo "$ac_t""$RANLIB" 1>&6 ! else ! echo "$ac_t""no" 1>&6 ! fi ! ! else ! RANLIB="ranlib-not-found-in-path-error" ! fi ! fi ! ! # Find a good install program. We prefer a C program (faster), ! # so one script is as good as another. But avoid the broken or ! # incompatible versions: ! # SysV /etc/install, /usr/sbin/install ! # SunOS /usr/etc/install ! # IRIX /sbin/install ! # AIX /bin/install ! # AIX 4 /usr/bin/installbsd, which doesn't work without a -g flag ! # AFS /usr/afsws/bin/install, which mishandles nonexistent args ! # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" ! # ./install, which can be erroneously created by make from ./install.sh. ! echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 ! echo "configure:1144: checking for a BSD compatible install" >&5 ! if test -z "$INSTALL"; then ! if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then ! echo $ac_n "(cached) $ac_c" 1>&6 ! else ! IFS="${IFS= }"; ac_save_IFS="$IFS"; IFS=":" ! for ac_dir in $PATH; do ! # Account for people who put trailing slashes in PATH elements. ! case "$ac_dir/" in ! /|./|.//|/etc/*|/usr/sbin/*|/usr/etc/*|/sbin/*|/usr/afsws/bin/*|/usr/ucb/*) ;; ! *) ! # OSF1 and SCO ODT 3.0 have their own names for install. ! # Don't use installbsd from OSF since it installs stuff as root ! # by default. ! for ac_prog in ginstall scoinst install; do ! if test -f $ac_dir/$ac_prog; then ! if test $ac_prog = install && ! grep dspmsg $ac_dir/$ac_prog >/dev/null 2>&1; then ! # AIX install. It has an incompatible calling convention. ! : ! else ! ac_cv_path_install="$ac_dir/$ac_prog -c" ! break 2 ! fi ! fi ! done ! ;; esac + done + IFS="$ac_save_IFS" + + fi + if test "${ac_cv_path_install+set}" = set; then + INSTALL="$ac_cv_path_install" + else + # As a last resort, use the slow shell script. We don't cache a + # path for INSTALL within a source directory, because that will + # break other packages using the cache if that directory is + # removed, or if the path is relative. + INSTALL="$ac_install_sh" fi fi + echo "$ac_t""$INSTALL" 1>&6 + + # Use test -z because SunOS4 sh mishandles braces in ${var-val}. + # It thinks the first close brace ends the variable substitution. + test -z "$INSTALL_PROGRAM" && INSTALL_PROGRAM='${INSTALL}' + test -z "$INSTALL_SCRIPT" && INSTALL_SCRIPT='${INSTALL_PROGRAM}' ! test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' ! ! ! # We need AC_EXEEXT to keep automake happy in cygnus mode. However, ! # at least currently, we never actually build a program, so we never ! # need to use $(EXEEXT). Moreover, the test for EXEEXT normally ! # fails, because we are probably configuring with a cross compiler ! # which can't create executables. So we include AC_EXEEXT to keep ! # automake happy, but we don't execute it, since we don't care about ! # the result. ! if false; then ! # autoconf 2.50 runs AC_EXEEXT by default, and the macro expands ! # to nothing, so nothing would remain between `then' and `fi' if it ! # were not for the `:' below. ! : ! ! ! echo $ac_n "checking for executable suffix""... $ac_c" 1>&6 ! echo "configure:1212: checking for executable suffix" >&5 ! if eval "test \"`echo '$''{'ac_cv_exeext'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ! if test "$CYGWIN" = yes || test "$MINGW32" = yes; then ! ac_cv_exeext=.exe else ! rm -f conftest* ! echo 'int main () { return 0; }' > conftest.$ac_ext ! ac_cv_exeext= ! if { (eval echo configure:1222: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; }; then ! for file in conftest.*; do ! case $file in ! *.c | *.o | *.obj | *.ilk | *.pdb) ;; ! *) ac_cv_exeext=`echo $file | sed -e s/conftest//` ;; ! esac ! done ! else ! { echo "configure: error: installation or configuration problem: compiler cannot create executables." 1>&2; exit 1; } ! fi ! rm -f conftest* ! test x"${ac_cv_exeext}" = x && ac_cv_exeext=no fi fi ! EXEEXT="" ! test x"${ac_cv_exeext}" != xno && EXEEXT=${ac_cv_exeext} ! echo "$ac_t""${ac_cv_exeext}" 1>&6 ! ac_exeext=$EXEEXT ! fi ! ! ! # Assumes glibcpp_builddir, glibcpp_srcdir are alreay set up and ! # exported correctly in GLIBCPP_CONFIGURE. ! glibcpp_toolexecdir=no ! glibcpp_toolexeclibdir=no ! glibcpp_prefixdir=${prefix} ! ! echo $ac_n "checking for interface version number""... $ac_c" 1>&6 ! echo "configure:1252: checking for interface version number" >&5 ! libstdcxx_interface=$INTERFACE ! echo "$ac_t""$libstdcxx_interface" 1>&6 ! ! # Process the option "--enable-version-specific-runtime-libs" ! echo $ac_n "checking for --enable-version-specific-runtime-libs""... $ac_c" 1>&6 ! echo "configure:1258: checking for --enable-version-specific-runtime-libs" >&5 ! # Check whether --enable-version-specific-runtime-libs or --disable-version-specific-runtime-libs was given. ! if test "${enable_version_specific_runtime_libs+set}" = set; then ! enableval="$enable_version_specific_runtime_libs" ! case "$enableval" in ! yes) version_specific_libs=yes ;; ! no) version_specific_libs=no ;; ! *) { echo "configure: error: Unknown argument to enable/disable version-specific libs" 1>&2; exit 1; };; ! esac else ! version_specific_libs=no fi + # Option set, now we can test it. + echo "$ac_t""$version_specific_libs" 1>&6 ! gcc_version_trigger=${toplevel_srcdir}/gcc/version.c ! gcc_version_full=`grep version_string ${gcc_version_trigger} | sed -e 's/.*\"\([^ \"]*\)[ \"].*/\1/'` ! gcc_version=`echo ${gcc_version_full} | sed -e 's/\(^ *\) .*/\1/'` ! ! ! ! if test $version_specific_libs = yes; then ! # Need the gcc compiler version to know where to install libraries ! # and header files if --enable-version-specific-runtime-libs option ! # is selected. ! glibcpp_toolexecdir='$(libdir)/gcc-lib/$(target_alias)' ! glibcpp_toolexeclibdir='$(toolexecdir)/'${gcc_version}'$(MULTISUBDIR)' ! fi ! ! # Calculate glibcpp_toolexecdir, glibcpp_toolexeclibdir ! # Install a library built with a cross compiler in tooldir, not libdir. ! if test x"$glibcpp_toolexecdir" = x"no"; then ! if test -n "$with_cross_host" && ! test x"$with_cross_host" != x"no"; then ! glibcpp_toolexecdir='$(exec_prefix)/$(target_alias)' ! glibcpp_toolexeclibdir='$(toolexecdir)/lib$(MULTISUBDIR)' ! else ! glibcpp_toolexecdir='$(libdir)/gcc-lib/$(target_alias)' ! glibcpp_toolexeclibdir='$(libdir)$(MULTISUBDIR)' ! fi ! fi ! ! ! ! ! ! ! # If the language specific compiler does not exist, but the "gcc" directory ! # does, we do not build anything. Note, $r is set by the top-level Makefile. ! # Note that when we look for the compiler, we search both with and without ! # extension to handle cross and canadian cross builds. ! compiler_name=f771 ! rm -f skip-this-dir ! echo $ac_n "checking if compiler $compiler_name has been built""... $ac_c" 1>&6 ! echo "configure:1312: checking if compiler $compiler_name has been built" >&5 ! if eval "test \"`echo '$''{'g77_cv_compiler_exists'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else ! g77_cv_compiler_exists=yes ! if test -n "$r"; then ! if test -d "$r"/gcc; then ! if test -f "$r"/gcc/$compiler_name \ ! || test -f "$r"/gcc/$compiler_name.exe; then ! true ! else ! g77_cv_compiler_exists=no ! echo "rm -f config.cache config.log multilib.out" > skip-this-dir ! fi ! fi ! fi ! ! fi ! ! echo "$ac_t""$g77_cv_compiler_exists" 1>&6 ! if test x$g77_cv_compiler_exists = xno ! then ! rm -f Makefile conftest* confdefs* core ! exit 0 ! fi ! ! ! # Check whether --enable-shared or --disable-shared was given. ! if test "${enable_shared+set}" = set; then ! enableval="$enable_shared" ! p=${PACKAGE-default} ! case $enableval in ! yes) enable_shared=yes ;; ! no) enable_shared=no ;; ! *) ! enable_shared=no ! # Look at the argument we got. We use all the common list separators. ! IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," ! for pkg in $enableval; do ! if test "X$pkg" = "X$p"; then ! enable_shared=yes ! fi ! done ! IFS="$ac_save_ifs" ! ;; ! esac else ! enable_shared=yes ! fi ! ! # Check whether --enable-static or --disable-static was given. ! if test "${enable_static+set}" = set; then ! enableval="$enable_static" ! p=${PACKAGE-default} ! case $enableval in ! yes) enable_static=yes ;; ! no) enable_static=no ;; ! *) ! enable_static=no ! # Look at the argument we got. We use all the common list separators. ! IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," ! for pkg in $enableval; do ! if test "X$pkg" = "X$p"; then ! enable_static=yes ! fi ! done ! IFS="$ac_save_ifs" ! ;; ! esac ! else ! enable_static=yes ! fi ! ! # Check whether --enable-fast-install or --disable-fast-install was given. ! if test "${enable_fast_install+set}" = set; then ! enableval="$enable_fast_install" ! p=${PACKAGE-default} ! case $enableval in ! yes) enable_fast_install=yes ;; ! no) enable_fast_install=no ;; ! *) ! enable_fast_install=no ! # Look at the argument we got. We use all the common list separators. ! IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}:," ! for pkg in $enableval; do ! if test "X$pkg" = "X$p"; then ! enable_fast_install=yes ! fi ! done ! IFS="$ac_save_ifs" ! ;; ! esac ! else ! enable_fast_install=yes ! fi ! ! # Check whether --with-gnu-ld or --without-gnu-ld was given. ! if test "${with_gnu_ld+set}" = set; then ! withval="$with_gnu_ld" ! test "$withval" = no || with_gnu_ld=yes ! else ! with_gnu_ld=no ! fi ! ! ac_prog=ld ! if test "$GCC" = yes; then ! # Check if gcc -print-prog-name=ld gives a path. ! echo $ac_n "checking for ld used by GCC""... $ac_c" 1>&6 ! echo "configure:1420: checking for ld used by GCC" >&5 ! case $host in ! *-*-mingw*) ! # gcc leaves a trailing carriage return which upsets mingw ! ac_prog=`($CC -print-prog-name=ld) 2>&5 | tr -d '\015'` ;; ! *) ! ac_prog=`($CC -print-prog-name=ld) 2>&5` ;; ! esac ! case $ac_prog in ! # Accept absolute paths. ! [\\/]* | [A-Za-z]:[\\/]*) ! re_direlt='/[^/][^/]*/\.\./' ! # Canonicalize the path of ld ! ac_prog=`echo $ac_prog| sed 's%\\\\%/%g'` ! while echo $ac_prog | grep "$re_direlt" > /dev/null 2>&1; do ! ac_prog=`echo $ac_prog| sed "s%$re_direlt%/%"` ! done ! test -z "$LD" && LD="$ac_prog" ! ;; ! "") ! # If it fails, then pretend we aren't using GCC. ! ac_prog=ld ! ;; ! *) ! # If it is relative, then search for the first ld in PATH. ! with_gnu_ld=unknown ! ;; ! esac ! elif test "$with_gnu_ld" = yes; then ! echo $ac_n "checking for GNU ld""... $ac_c" 1>&6 ! echo "configure:1450: checking for GNU ld" >&5 ! else ! echo $ac_n "checking for non-GNU ld""... $ac_c" 1>&6 ! echo "configure:1453: checking for non-GNU ld" >&5 ! fi ! if eval "test \"`echo '$''{'lt_cv_path_LD'+set}'`\" = set"; then ! echo $ac_n "(cached) $ac_c" 1>&6 ! else ! if test -z "$LD"; then ! IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" ! for ac_dir in $PATH; do ! test -z "$ac_dir" && ac_dir=. ! if test -f "$ac_dir/$ac_prog" || test -f "$ac_dir/$ac_prog$ac_exeext"; then ! lt_cv_path_LD="$ac_dir/$ac_prog" ! # Check to see if the program is GNU ld. I'd rather use --version, ! # but apparently some GNU ld's only accept -v. ! # Break only if it was the GNU/non-GNU ld that we prefer. ! if "$lt_cv_path_LD" -v 2>&1 < /dev/null | egrep '(GNU|with BFD)' > /dev/null; then ! test "$with_gnu_ld" != no && break ! else ! test "$with_gnu_ld" != yes && break ! fi ! fi ! done ! IFS="$ac_save_ifs" ! else ! lt_cv_path_LD="$LD" # Let the user override the test with a path. ! fi ! fi ! ! LD="$lt_cv_path_LD" ! if test -n "$LD"; then ! echo "$ac_t""$LD" 1>&6 ! else ! echo "$ac_t""no" 1>&6 ! fi ! test -z "$LD" && { echo "configure: error: no acceptable ld found in \$PATH" 1>&2; exit 1; } ! echo $ac_n "checking if the linker ($LD) is GNU ld""... $ac_c" 1>&6 ! echo "configure:1488: checking if the linker ($LD) is GNU ld" >&5 ! if eval "test \"`echo '$''{'lt_cv_prog_gnu_ld'+set}'`\" = set"; then ! echo $ac_n "(cached) $ac_c" 1>&6 ! else ! # I'd rather use --version here, but apparently some GNU ld's only accept -v. ! if $LD -v 2>&1 &5; then ! lt_cv_prog_gnu_ld=yes ! else ! lt_cv_prog_gnu_ld=no ! fi ! fi ! ! echo "$ac_t""$lt_cv_prog_gnu_ld" 1>&6 ! with_gnu_ld=$lt_cv_prog_gnu_ld ! ! ! echo $ac_n "checking for $LD option to reload object files""... $ac_c" 1>&6 ! echo "configure:1505: checking for $LD option to reload object files" >&5 ! if eval "test \"`echo '$''{'lt_cv_ld_reload_flag'+set}'`\" = set"; then ! echo $ac_n "(cached) $ac_c" 1>&6 ! else ! lt_cv_ld_reload_flag='-r' ! fi ! ! echo "$ac_t""$lt_cv_ld_reload_flag" 1>&6 ! reload_flag=$lt_cv_ld_reload_flag ! test -n "$reload_flag" && reload_flag=" $reload_flag" ! ! echo $ac_n "checking for BSD-compatible nm""... $ac_c" 1>&6 ! echo "configure:1517: checking for BSD-compatible nm" >&5 ! if eval "test \"`echo '$''{'lt_cv_path_NM'+set}'`\" = set"; then ! echo $ac_n "(cached) $ac_c" 1>&6 ! else ! if test -n "$NM"; then ! # Let the user override the test. ! lt_cv_path_NM="$NM" ! else ! IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS="${IFS}${PATH_SEPARATOR-:}" ! for ac_dir in $PATH /usr/ccs/bin /usr/ucb /bin; do ! test -z "$ac_dir" && ac_dir=. ! tmp_nm=$ac_dir/${ac_tool_prefix}nm ! if test -f $tmp_nm || test -f $tmp_nm$ac_exeext ; then ! # Check to see if the nm accepts a BSD-compat flag. ! # Adding the `sed 1q' prevents false positives on HP-UX, which says: ! # nm: unknown option "B" ignored ! # Tru64's nm complains that /dev/null is an invalid object file ! if ($tmp_nm -B /dev/null 2>&1 | sed '1q'; exit 0) | egrep '(/dev/null|Invalid file or object type)' >/dev/null; then ! lt_cv_path_NM="$tmp_nm -B" ! break ! elif ($tmp_nm -p /dev/null 2>&1 | sed '1q'; exit 0) | egrep /dev/null >/dev/null; then ! lt_cv_path_NM="$tmp_nm -p" ! break ! else ! lt_cv_path_NM=${lt_cv_path_NM="$tmp_nm"} # keep the first match, but ! continue # so that we can try to find one that supports BSD flags ! fi ! fi ! done ! IFS="$ac_save_ifs" ! test -z "$lt_cv_path_NM" && lt_cv_path_NM=nm ! fi ! fi ! ! NM="$lt_cv_path_NM" ! echo "$ac_t""$NM" 1>&6 ! ! echo $ac_n "checking how to recognise dependant libraries""... $ac_c" 1>&6 ! echo "configure:1555: checking how to recognise dependant libraries" >&5 ! if eval "test \"`echo '$''{'lt_cv_deplibs_check_method'+set}'`\" = set"; then ! echo $ac_n "(cached) $ac_c" 1>&6 ! else ! lt_cv_file_magic_cmd='$MAGIC_CMD' ! lt_cv_file_magic_test_file= ! lt_cv_deplibs_check_method='unknown' ! # Need to set the preceding variable on all platforms that support ! # interlibrary dependencies. ! # 'none' -- dependencies not supported. ! # `unknown' -- same as none, but documents that we really don't know. ! # 'pass_all' -- all dependencies passed with no checks. ! # 'test_compile' -- check by making test program. ! # 'file_magic [regex]' -- check by looking for files in library path ! # which responds to the $file_magic_cmd with a given egrep regex. ! # If you have `file' or equivalent on your system and you're not sure ! # whether `pass_all' will *always* work, you probably want this one. ! ! case $host_os in ! aix*) ! lt_cv_deplibs_check_method=pass_all ! ;; ! ! beos*) ! lt_cv_deplibs_check_method=pass_all ! ;; ! ! bsdi4*) ! lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib)' ! lt_cv_file_magic_cmd='/usr/bin/file -L' ! lt_cv_file_magic_test_file=/shlib/libc.so ! ;; ! ! cygwin* | mingw* |pw32*) ! lt_cv_deplibs_check_method='file_magic file format pei*-i386(.*architecture: i386)?' ! lt_cv_file_magic_cmd='$OBJDUMP -f' ! ;; ! ! darwin* | rhapsody*) ! lt_cv_deplibs_check_method='file_magic Mach-O dynamically linked shared library' ! lt_cv_file_magic_cmd='/usr/bin/file -L' ! case "$host_os" in ! rhapsody* | darwin1.012) ! lt_cv_file_magic_test_file='/System/Library/Frameworks/System.framework/System' ! ;; ! *) # Darwin 1.3 on ! lt_cv_file_magic_test_file='/usr/lib/libSystem.dylib' ! ;; ! esac ! ;; ! ! freebsd* ) ! if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then ! case $host_cpu in ! i*86 ) ! # Not sure whether the presence of OpenBSD here was a mistake. ! # Let's accept both of them until this is cleared up. ! lt_cv_deplibs_check_method='file_magic (FreeBSD|OpenBSD)/i[3-9]86 (compact )?demand paged shared library' ! lt_cv_file_magic_cmd=/usr/bin/file ! lt_cv_file_magic_test_file=`echo /usr/lib/libc.so.*` ! ;; ! esac ! else ! lt_cv_deplibs_check_method=pass_all ! fi ! ;; ! ! gnu*) ! lt_cv_deplibs_check_method=pass_all ! ;; ! ! hpux10.20*|hpux11*) ! lt_cv_deplibs_check_method='file_magic (s[0-9][0-9][0-9]|PA-RISC[0-9].[0-9]) shared library' ! lt_cv_file_magic_cmd=/usr/bin/file ! lt_cv_file_magic_test_file=/usr/lib/libc.sl ! ;; ! ! irix5* | irix6*) ! case $host_os in ! irix5*) ! # this will be overridden with pass_all, but let us keep it just in case ! lt_cv_deplibs_check_method="file_magic ELF 32-bit MSB dynamic lib MIPS - version 1" ! ;; ! *) ! case $LD in ! *-32|*"-32 ") libmagic=32-bit;; ! *-n32|*"-n32 ") libmagic=N32;; ! *-64|*"-64 ") libmagic=64-bit;; ! *) libmagic=never-match;; ! esac ! # this will be overridden with pass_all, but let us keep it just in case ! lt_cv_deplibs_check_method="file_magic ELF ${libmagic} MSB mips-[1234] dynamic lib MIPS - version 1" ! ;; ! esac ! lt_cv_file_magic_test_file=`echo /lib${libsuff}/libc.so*` ! lt_cv_deplibs_check_method=pass_all ! ;; ! ! # This must be Linux ELF. ! linux-gnu*) ! case $host_cpu in ! alpha* | hppa* | i*86 | powerpc* | sparc* | ia64* ) ! lt_cv_deplibs_check_method=pass_all ;; ! *) ! # glibc up to 2.1.1 does not perform some relocations on ARM ! lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [LM]SB (shared object|dynamic lib )' ;; ! esac ! lt_cv_file_magic_test_file=`echo /lib/libc.so* /lib/libc-*.so` ! ;; ! ! netbsd*) ! if echo __ELF__ | $CC -E - | grep __ELF__ > /dev/null; then ! lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so\.[0-9]+\.[0-9]+$' ! else ! lt_cv_deplibs_check_method='match_pattern /lib[^/\.]+\.so$' ! fi ! ;; ! ! newsos6) ! lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (executable|dynamic lib)' ! lt_cv_file_magic_cmd=/usr/bin/file ! lt_cv_file_magic_test_file=/usr/lib/libnls.so ! ;; ! ! osf3* | osf4* | osf5*) ! # this will be overridden with pass_all, but let us keep it just in case ! lt_cv_deplibs_check_method='file_magic COFF format alpha shared library' ! lt_cv_file_magic_test_file=/shlib/libc.so ! lt_cv_deplibs_check_method=pass_all ! ;; ! ! sco3.2v5*) ! lt_cv_deplibs_check_method=pass_all ! ;; ! ! solaris*) ! lt_cv_deplibs_check_method=pass_all ! lt_cv_file_magic_test_file=/lib/libc.so ! ;; ! ! sysv5uw[78]* | sysv4*uw2*) ! lt_cv_deplibs_check_method=pass_all ! ;; ! ! sysv4 | sysv4.2uw2* | sysv4.3* | sysv5*) ! case $host_vendor in ! ncr) ! lt_cv_deplibs_check_method=pass_all ! ;; ! motorola) ! lt_cv_deplibs_check_method='file_magic ELF [0-9][0-9]*-bit [ML]SB (shared object|dynamic lib) M[0-9][0-9]* Version [0-9]' ! lt_cv_file_magic_test_file=`echo /usr/lib/libc.so*` ! ;; ! esac ! ;; ! esac ! ! fi ! ! echo "$ac_t""$lt_cv_deplibs_check_method" 1>&6 ! file_magic_cmd=$lt_cv_file_magic_cmd ! deplibs_check_method=$lt_cv_deplibs_check_method ! ! echo $ac_n "checking for object suffix""... $ac_c" 1>&6 ! echo "configure:1719: checking for object suffix" >&5 ! if eval "test \"`echo '$''{'ac_cv_objext'+set}'`\" = set"; then ! echo $ac_n "(cached) $ac_c" 1>&6 ! else ! rm -f conftest* ! echo 'int i = 1;' > conftest.$ac_ext ! if { (eval echo configure:1725: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then ! for ac_file in conftest.*; do ! case $ac_file in ! *.c) ;; ! *) ac_cv_objext=`echo $ac_file | sed -e s/conftest.//` ;; ! esac ! done ! else ! { echo "configure: error: installation or configuration problem; compiler does not work" 1>&2; exit 1; } fi rm -f conftest* + fi + + echo "$ac_t""$ac_cv_objext" 1>&6 + OBJEXT=$ac_cv_objext + ac_objext=$ac_cv_objext + + # Autoconf 2.13's AC_OBJEXT and AC_EXEEXT macros only works for C compilers! + + # Only perform the check for file, if the check method requires it + case $deplibs_check_method in + file_magic*) + if test "$file_magic_cmd" = '$MAGIC_CMD'; then + echo $ac_n "checking for ${ac_tool_prefix}file""... $ac_c" 1>&6 + echo "configure:1749: checking for ${ac_tool_prefix}file" >&5 + if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + case $MAGIC_CMD in + /*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; + ?:/*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path. + ;; + *) + ac_save_MAGIC_CMD="$MAGIC_CMD" + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="/usr/bin:$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/${ac_tool_prefix}file; then + lt_cv_path_MAGIC_CMD="$ac_dir/${ac_tool_prefix}file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + egrep "$file_magic_regex" > /dev/null; then + : + else + cat <&2 + + *** Warning: the command libtool uses to detect shared libraries, + *** $file_magic_cmd, produces output that libtool cannot recognize. + *** The result is that libtool may fail to recognize shared libraries + *** as such. This will affect the creation of libtool libraries that + *** depend on shared libraries, but programs linked with such libtool + *** libraries will work regardless of this problem. Nevertheless, you + *** may want to report the problem to your system manager and/or to + *** bug-libtool@gnu.org + + EOF + fi ;; + esac + fi + break + fi + done + IFS="$ac_save_ifs" + MAGIC_CMD="$ac_save_MAGIC_CMD" + ;; + esac + fi + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if test -n "$MAGIC_CMD"; then + echo "$ac_t""$MAGIC_CMD" 1>&6 + else + echo "$ac_t""no" 1>&6 + fi + + if test -z "$lt_cv_path_MAGIC_CMD"; then + if test -n "$ac_tool_prefix"; then + echo $ac_n "checking for file""... $ac_c" 1>&6 + echo "configure:1811: checking for file" >&5 + if eval "test \"`echo '$''{'lt_cv_path_MAGIC_CMD'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + case $MAGIC_CMD in + /*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a path. + ;; + ?:/*) + lt_cv_path_MAGIC_CMD="$MAGIC_CMD" # Let the user override the test with a dos path. + ;; + *) + ac_save_MAGIC_CMD="$MAGIC_CMD" + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="/usr/bin:$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/file; then + lt_cv_path_MAGIC_CMD="$ac_dir/file" + if test -n "$file_magic_test_file"; then + case $deplibs_check_method in + "file_magic "*) + file_magic_regex="`expr \"$deplibs_check_method\" : \"file_magic \(.*\)\"`" + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if eval $file_magic_cmd \$file_magic_test_file 2> /dev/null | + egrep "$file_magic_regex" > /dev/null; then + : + else + cat <&2 + + *** Warning: the command libtool uses to detect shared libraries, + *** $file_magic_cmd, produces output that libtool cannot recognize. + *** The result is that libtool may fail to recognize shared libraries + *** as such. This will affect the creation of libtool libraries that + *** depend on shared libraries, but programs linked with such libtool + *** libraries will work regardless of this problem. Nevertheless, you + *** may want to report the problem to your system manager and/or to + *** bug-libtool@gnu.org + + EOF + fi ;; + esac + fi + break + fi + done + IFS="$ac_save_ifs" + MAGIC_CMD="$ac_save_MAGIC_CMD" + ;; + esac + fi + + MAGIC_CMD="$lt_cv_path_MAGIC_CMD" + if test -n "$MAGIC_CMD"; then + echo "$ac_t""$MAGIC_CMD" 1>&6 + else + echo "$ac_t""no" 1>&6 fi else ! MAGIC_CMD=: ! fi ! fi ! fi + ;; + esac + + # Extract the first word of "${ac_tool_prefix}ranlib", so it can be a program name with args. + set dummy ${ac_tool_prefix}ranlib; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 + echo "configure:1882: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 else ! if test -n "$RANLIB"; then ! ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. ! else ! IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ! ac_dummy="$PATH" ! for ac_dir in $ac_dummy; do ! test -z "$ac_dir" && ac_dir=. ! if test -f $ac_dir/$ac_word; then ! ac_cv_prog_RANLIB="${ac_tool_prefix}ranlib" ! break ! fi ! done ! IFS="$ac_save_ifs" ! fi ! fi ! RANLIB="$ac_cv_prog_RANLIB" ! if test -n "$RANLIB"; then ! echo "$ac_t""$RANLIB" 1>&6 ! else ! echo "$ac_t""no" 1>&6 ! fi ! ! ! if test -z "$ac_cv_prog_RANLIB"; then ! if test -n "$ac_tool_prefix"; then ! # Extract the first word of "ranlib", so it can be a program name with args. ! set dummy ranlib; ac_word=$2 ! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:1914: checking for $ac_word" >&5 ! if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then ! echo $ac_n "(cached) $ac_c" 1>&6 ! else ! if test -n "$RANLIB"; then ! ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. ! else ! IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ! ac_dummy="$PATH" ! for ac_dir in $ac_dummy; do ! test -z "$ac_dir" && ac_dir=. ! if test -f $ac_dir/$ac_word; then ! ac_cv_prog_RANLIB="ranlib" ! break ! fi ! done ! IFS="$ac_save_ifs" ! test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" ! fi ! fi ! RANLIB="$ac_cv_prog_RANLIB" ! if test -n "$RANLIB"; then ! echo "$ac_t""$RANLIB" 1>&6 ! else ! echo "$ac_t""no" 1>&6 ! fi ! ! else ! RANLIB=":" ! fi ! fi ! ! # Extract the first word of "${ac_tool_prefix}strip", so it can be a program name with args. ! set dummy ${ac_tool_prefix}strip; ac_word=$2 ! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:1949: checking for $ac_word" >&5 ! if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then ! echo $ac_n "(cached) $ac_c" 1>&6 ! else ! if test -n "$STRIP"; then ! ac_cv_prog_STRIP="$STRIP" # Let the user override the test. ! else ! IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ! ac_dummy="$PATH" ! for ac_dir in $ac_dummy; do ! test -z "$ac_dir" && ac_dir=. ! if test -f $ac_dir/$ac_word; then ! ac_cv_prog_STRIP="${ac_tool_prefix}strip" ! break ! fi ! done ! IFS="$ac_save_ifs" ! fi ! fi ! STRIP="$ac_cv_prog_STRIP" ! if test -n "$STRIP"; then ! echo "$ac_t""$STRIP" 1>&6 ! else ! echo "$ac_t""no" 1>&6 ! fi ! ! ! if test -z "$ac_cv_prog_STRIP"; then ! if test -n "$ac_tool_prefix"; then ! # Extract the first word of "strip", so it can be a program name with args. ! set dummy strip; ac_word=$2 ! echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:1981: checking for $ac_word" >&5 ! if eval "test \"`echo '$''{'ac_cv_prog_STRIP'+set}'`\" = set"; then ! echo $ac_n "(cached) $ac_c" 1>&6 ! else ! if test -n "$STRIP"; then ! ac_cv_prog_STRIP="$STRIP" # Let the user override the test. ! else ! IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" ! ac_dummy="$PATH" ! for ac_dir in $ac_dummy; do ! test -z "$ac_dir" && ac_dir=. ! if test -f $ac_dir/$ac_word; then ! ac_cv_prog_STRIP="strip" ! break ! fi ! done ! IFS="$ac_save_ifs" ! test -z "$ac_cv_prog_STRIP" && ac_cv_prog_STRIP=":" ! fi ! fi ! STRIP="$ac_cv_prog_STRIP" ! if test -n "$STRIP"; then ! echo "$ac_t""$STRIP" 1>&6 ! else ! echo "$ac_t""no" 1>&6 ! fi ! ! else ! STRIP=":" ! fi ! fi ! ! ! # Check for any special flags to pass to ltconfig. ! libtool_flags="--cache-file=$cache_file" ! test "$enable_shared" = no && libtool_flags="$libtool_flags --disable-shared" ! test "$enable_static" = no && libtool_flags="$libtool_flags --disable-static" ! test "$enable_fast_install" = no && libtool_flags="$libtool_flags --disable-fast-install" ! test "$GCC" = yes && libtool_flags="$libtool_flags --with-gcc" ! test "$lt_cv_prog_gnu_ld" = yes && libtool_flags="$libtool_flags --with-gnu-ld" ! ! ! # Check whether --enable-libtool-lock or --disable-libtool-lock was given. ! if test "${enable_libtool_lock+set}" = set; then ! enableval="$enable_libtool_lock" ! : ! fi ! ! test "x$enable_libtool_lock" = xno && libtool_flags="$libtool_flags --disable-lock" ! test x"$silent" = xyes && libtool_flags="$libtool_flags --silent" ! ! # Check whether --with-pic or --without-pic was given. ! if test "${with_pic+set}" = set; then ! withval="$with_pic" ! pic_mode="$withval" ! else ! pic_mode=default ! fi ! ! test x"$pic_mode" = xyes && libtool_flags="$libtool_flags --prefer-pic" ! test x"$pic_mode" = xno && libtool_flags="$libtool_flags --prefer-non-pic" ! ! # Some flags need to be propagated to the compiler or linker for good ! # libtool support. ! case $host in ! *-*-irix6*) ! # Find out which ABI we are using. ! echo '#line 2048 "configure"' > conftest.$ac_ext ! if { (eval echo configure:2049: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then ! case `/usr/bin/file conftest.$ac_objext` in ! *32-bit*) ! LD="${LD-ld} -32" ! ;; ! *N32*) ! LD="${LD-ld} -n32" ! ;; ! *64-bit*) ! LD="${LD-ld} -64" ! ;; ! esac ! fi ! rm -rf conftest* ! ;; ! ! *-*-sco3.2v5*) ! # On SCO OpenServer 5, we need -belf to get full-featured binaries. ! SAVE_CFLAGS="$CFLAGS" ! CFLAGS="$CFLAGS -belf" ! echo $ac_n "checking whether the C compiler needs -belf""... $ac_c" 1>&6 ! echo "configure:2070: checking whether the C compiler needs -belf" >&5 ! if eval "test \"`echo '$''{'lt_cv_cc_needs_belf'+set}'`\" = set"; then ! echo $ac_n "(cached) $ac_c" 1>&6 ! else ! ! ac_ext=c ! # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ! ac_cpp='$CPP $CPPFLAGS' ! ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ! ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' ! cross_compiling=$ac_cv_prog_cc_cross ! ! cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ! rm -rf conftest* ! lt_cv_cc_needs_belf=yes ! else ! echo "configure: failed program was:" >&5 ! cat conftest.$ac_ext >&5 ! rm -rf conftest* ! lt_cv_cc_needs_belf=no ! fi ! rm -f conftest* ! ac_ext=c ! # CFLAGS is not in ac_cpp because -g, -O, etc. are not valid cpp options. ! ac_cpp='$CPP $CPPFLAGS' ! ac_compile='${CC-cc} -c $CFLAGS $CPPFLAGS conftest.$ac_ext 1>&5' ! ac_link='${CC-cc} -o conftest${ac_exeext} $CFLAGS $CPPFLAGS $LDFLAGS conftest.$ac_ext $LIBS 1>&5' ! cross_compiling=$ac_cv_prog_cc_cross ! ! fi ! ! echo "$ac_t""$lt_cv_cc_needs_belf" 1>&6 ! if test x"$lt_cv_cc_needs_belf" != x"yes"; then ! # this is probably gcc 2.8.0, egcs 1.0 or newer; no need for -belf ! CFLAGS="$SAVE_CFLAGS" ! fi ! ;; ! ! ! esac ! ! ! # Save cache, so that ltconfig can load it ! cat > confcache <<\EOF ! # This file is a shell script that caches the results of configure ! # tests run on this system so they can be shared between configure ! # scripts and configure runs. It is not useful on other systems. ! # If it contains results you don't want to keep, you may remove or edit it. ! # ! # By default, configure uses ./config.cache as the cache file, ! # creating it if it does not exist already. You can give configure ! # the --cache-file=FILE option to use a different cache file; that is ! # what configure does when it calls configure scripts in ! # subdirectories, so they share the cache. ! # Giving --cache-file=/dev/null disables caching, for debugging configure. ! # config.status only pays attention to the cache file if you give it the ! # --recheck option to rerun configure. ! # ! EOF ! # The following way of writing the cache mishandles newlines in values, ! # but we know of no workaround that is simple, portable, and efficient. ! # So, don't put newlines in cache variables' values. ! # Ultrix sh set writes to stderr and can't be redirected directly, ! # and sets the high bit in the cache file unless we assign to the vars. ! (set) 2>&1 | ! case `(ac_space=' '; set | grep ac_space) 2>&1` in ! *ac_space=\ *) ! # `set' does not quote correctly, so add quotes (double-quote substitution ! # turns \\\\ into \\, and sed turns \\ into \). ! sed -n \ ! -e "s/'/'\\\\''/g" \ ! -e "s/^\\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\\)=\\(.*\\)/\\1=\${\\1='\\2'}/p" ! ;; ! *) ! # `set' quotes correctly as required by POSIX, so do not add quotes. ! sed -n -e 's/^\([a-zA-Z0-9_]*_cv_[a-zA-Z0-9_]*\)=\(.*\)/\1=${\1=\2}/p' ! ;; ! esac >> confcache ! if cmp -s $cache_file confcache; then ! : ! else ! if test -w $cache_file; then ! echo "updating cache $cache_file" ! cat confcache > $cache_file else ! echo "not updating unwritable cache $cache_file" fi fi + rm -f confcache + + + # Actually configure libtool. ac_aux_dir is where install-sh is found. + AR="$AR" LTCC="$CC" CC="$CC" CFLAGS="$CFLAGS" CPPFLAGS="$CPPFLAGS" \ + MAGIC_CMD="$MAGIC_CMD" LD="$LD" LDFLAGS="$LDFLAGS" LIBS="$LIBS" \ + LN_S="$LN_S" NM="$NM" RANLIB="$RANLIB" STRIP="$STRIP" \ + AS="$AS" DLLTOOL="$DLLTOOL" OBJDUMP="$OBJDUMP" \ + objext="$OBJEXT" exeext="$EXEEXT" reload_flag="$reload_flag" \ + deplibs_check_method="$deplibs_check_method" file_magic_cmd="$file_magic_cmd" \ + ${CONFIG_SHELL-/bin/sh} $ac_aux_dir/ltconfig --no-reexec \ + $libtool_flags --no-verify --build="$build" $ac_aux_dir/ltmain.sh $host \ + || { echo "configure: error: libtool configure failed" 1>&2; exit 1; } + + # Reload cache, that may have been modified by ltconfig + if test -r "$cache_file"; then + echo "loading cache $cache_file" + . $cache_file + else + echo "creating cache $cache_file" + > $cache_file + fi + + + # This can be used to rebuild libtool when needed + LIBTOOL_DEPS="$ac_aux_dir/ltconfig $ac_aux_dir/ltmain.sh $ac_aux_dir/ltcf-c.sh" + + # Always use our own libtool. + LIBTOOL='$(SHELL) $(top_builddir)/libtool' + + # Redirect the config.log output again, so that the ltconfig log is not + # clobbered by the next message. + exec 5>>./config.log + + + + + test "$AR" || AR=ar *************** else *** 775,781 **** # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:779: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 2210,2216 ---- # Extract the first word of "ranlib", so it can be a program name with args. set dummy ranlib; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:2214: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** fi *** 815,821 **** # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 ! echo "configure:819: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 2250,2256 ---- # SVR4 /usr/ucb/install, which tries to use the nonexistent group "staff" # ./install, which can be erroneously created by make from ./install.sh. echo $ac_n "checking for a BSD compatible install""... $ac_c" 1>&6 ! echo "configure:2254: checking for a BSD compatible install" >&5 if test -z "$INSTALL"; then if eval "test \"`echo '$''{'ac_cv_path_install'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** test -z "$INSTALL_SCRIPT" && INSTALL_SCR *** 868,874 **** test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 ! echo "configure:872: checking whether ${MAKE-make} sets \${MAKE}" >&5 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 2303,2309 ---- test -z "$INSTALL_DATA" && INSTALL_DATA='${INSTALL} -m 644' echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 ! echo "configure:2307: checking whether ${MAKE-make} sets \${MAKE}" >&5 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** fi *** 897,903 **** # Sanity check for the cross-compilation case: echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 ! echo "configure:901: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= --- 2332,2338 ---- # Sanity check for the cross-compilation case: echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 ! echo "configure:2336: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= *************** else *** 912,924 **** # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:922: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : --- 2347,2359 ---- # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:2357: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : *************** else *** 929,941 **** rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:939: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : --- 2364,2376 ---- rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:2374: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : *************** else *** 946,958 **** rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:956: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : --- 2381,2393 ---- rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:2391: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : *************** echo "$ac_t""$CPP" 1>&6 *** 978,994 **** ac_safe=`echo "stdio.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for stdio.h""... $ac_c" 1>&6 ! echo "configure:982: checking for stdio.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:992: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* --- 2413,2429 ---- ac_safe=`echo "stdio.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for stdio.h""... $ac_c" 1>&6 ! echo "configure:2417: checking for stdio.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:2427: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* *************** fi *** 1016,1027 **** echo $ac_n "checking for built-in g77 integer types""... $ac_c" 1>&6 ! echo "configure:1020: checking for built-in g77 integer types" >&5 if eval "test \"`echo '$''{'libf2c_cv_has_g77_builtin_types'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:2455: checking for built-in g77 integer types" >&5 if eval "test \"`echo '$''{'libf2c_cv_has_g77_builtin_types'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* libf2c_cv_has_g77_builtin_types=yes else --- 2466,2472 ---- __g77_ulongint g77ul; ; return 0; } EOF ! if { (eval echo configure:2470: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* libf2c_cv_has_g77_builtin_types=yes else *************** test -f libF77/makefile && mv libF77/mak *** 1057,1163 **** test -f libI77/makefile && mv libI77/makefile libI77/makefile.ori test -f libU77/makefile && mv libU77/makefile libU77/makefile.ori - # Get the version trigger filename from the toplevel - if [ "${with_gcc_version_trigger+set}" = set ]; then - gcc_version_trigger=$with_gcc_version_trigger - gcc_version=`grep version_string ${gcc_version_trigger} | sed -e 's/.*\"\([^ \"]*\)[ \"].*/\1/'` - else - gcc_version_trigger= - gcc_version=UNKNOWN - fi - - - - - # Do some error checking and defaulting for the host and target type. - # The inputs are: - # configure --host=HOST --target=TARGET --build=BUILD NONOPT - # - # The rules are: - # 1. You are not allowed to specify --host, --target, and nonopt at the - # same time. - # 2. Host defaults to nonopt. - # 3. If nonopt is not specified, then host defaults to the current host, - # as determined by config.guess. - # 4. Target and build default to nonopt. - # 5. If nonopt is not specified, then target and build default to host. - - # The aliases save the names the user supplied, while $host etc. - # will get canonicalized. - case $host---$target---$nonopt in - NONE---*---* | *---NONE---* | *---*---NONE) ;; - *) { echo "configure: error: can only configure for one host and one target at a time" 1>&2; exit 1; } ;; - esac - - - # Make sure we can run config.sub. - if ${CONFIG_SHELL-/bin/sh} $ac_config_sub sun4 >/dev/null 2>&1; then : - else { echo "configure: error: can not run $ac_config_sub" 1>&2; exit 1; } - fi - - echo $ac_n "checking host system type""... $ac_c" 1>&6 - echo "configure:1100: checking host system type" >&5 - - host_alias=$host - case "$host_alias" in - NONE) - case $nonopt in - NONE) - if host_alias=`${CONFIG_SHELL-/bin/sh} $ac_config_guess`; then : - else { echo "configure: error: can not guess host type; you must specify one" 1>&2; exit 1; } - fi ;; - *) host_alias=$nonopt ;; - esac ;; - esac - - host=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $host_alias` - host_cpu=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` - host_vendor=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` - host_os=`echo $host | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` - echo "$ac_t""$host" 1>&6 - - echo $ac_n "checking target system type""... $ac_c" 1>&6 - echo "configure:1121: checking target system type" >&5 - - target_alias=$target - case "$target_alias" in - NONE) - case $nonopt in - NONE) target_alias=$host_alias ;; - *) target_alias=$nonopt ;; - esac ;; - esac - - target=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $target_alias` - target_cpu=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` - target_vendor=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` - target_os=`echo $target | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` - echo "$ac_t""$target" 1>&6 - - echo $ac_n "checking build system type""... $ac_c" 1>&6 - echo "configure:1139: checking build system type" >&5 - - build_alias=$build - case "$build_alias" in - NONE) - case $nonopt in - NONE) build_alias=$host_alias ;; - *) build_alias=$nonopt ;; - esac ;; - esac - - build=`${CONFIG_SHELL-/bin/sh} $ac_config_sub $build_alias` - build_cpu=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\1/'` - build_vendor=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\2/'` - build_os=`echo $build | sed 's/^\([^-]*\)-\([^-]*\)-\(.*\)$/\3/'` - echo "$ac_t""$build" 1>&6 - - test "$host_alias" != "$target_alias" && - test "$program_prefix$program_suffix$program_transform_name" = \ - NONENONEs,x,x, && - program_prefix=${target_alias}- - - subdirs="libU77 libI77 libF77" # Do Makefile first since g2c.h depends on it and shouldn't get an --- 2492,2497 ---- *************** s%@includedir@%$includedir%g *** 1308,1323 **** s%@oldincludedir@%$oldincludedir%g s%@infodir@%$infodir%g s%@mandir@%$mandir%g - s%@CC@%$CC%g - s%@AR@%$AR%g - s%@RANLIB@%$RANLIB%g - s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g - s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g - s%@INSTALL_DATA@%$INSTALL_DATA%g - s%@SET_MAKE@%$SET_MAKE%g - s%@CPP@%$CPP%g - s%@gcc_version@%$gcc_version%g - s%@gcc_version_trigger@%$gcc_version_trigger%g s%@host@%$host%g s%@host_alias@%$host_alias%g s%@host_cpu@%$host_cpu%g --- 2642,2647 ---- *************** s%@build_alias@%$build_alias%g *** 1333,1338 **** --- 2657,2684 ---- s%@build_cpu@%$build_cpu%g s%@build_vendor@%$build_vendor%g s%@build_os@%$build_os%g + s%@toplevel_srcdir@%$toplevel_srcdir%g + s%@glibcpp_builddir@%$glibcpp_builddir%g + s%@glibcpp_srcdir@%$glibcpp_srcdir%g + s%@LN_S@%$LN_S%g + s%@CC@%$CC%g + s%@AS@%$AS%g + s%@AR@%$AR%g + s%@RANLIB@%$RANLIB%g + s%@INSTALL_PROGRAM@%$INSTALL_PROGRAM%g + s%@INSTALL_SCRIPT@%$INSTALL_SCRIPT%g + s%@INSTALL_DATA@%$INSTALL_DATA%g + s%@EXEEXT@%$EXEEXT%g + s%@gcc_version@%$gcc_version%g + s%@gcc_version_trigger@%$gcc_version_trigger%g + s%@glibcpp_prefixdir@%$glibcpp_prefixdir%g + s%@glibcpp_toolexecdir@%$glibcpp_toolexecdir%g + s%@glibcpp_toolexeclibdir@%$glibcpp_toolexeclibdir%g + s%@OBJEXT@%$OBJEXT%g + s%@STRIP@%$STRIP%g + s%@LIBTOOL@%$LIBTOOL%g + s%@SET_MAKE@%$SET_MAKE%g + s%@CPP@%$CPP%g s%@subdirs@%$subdirs%g CEOF *************** target=${target} *** 1442,1458 **** with_target_subdir=${with_target_subdir} with_multisubdir=${with_multisubdir} ac_configure_args="--enable-multilib ${ac_configure_args}" CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} - topsrcdir=${topsrcdir} EOF cat >> $CONFIG_STATUS <<\EOF test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h if test -n "$CONFIG_FILES"; then if test -n "${with_target_subdir}"; then # FIXME: We shouldn't need to set ac_file ac_file=Makefile ! . ${topsrcdir}/config-ml.in touch g2c.h # to keep it more recent than Makefile fi fi --- 2788,2805 ---- with_target_subdir=${with_target_subdir} with_multisubdir=${with_multisubdir} ac_configure_args="--enable-multilib ${ac_configure_args}" + toplevel_srcdir=${toplevel_srcdir} CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} EOF cat >> $CONFIG_STATUS <<\EOF test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h if test -n "$CONFIG_FILES"; then + LD="${ORIGINAL_LD_FOR_MULTILIBS}" if test -n "${with_target_subdir}"; then # FIXME: We shouldn't need to set ac_file ac_file=Makefile ! . ${toplevel_srcdir}/config-ml.in touch g2c.h # to keep it more recent than Makefile fi fi diff -Nrc3pad gcc-3.0.4/libf2c/configure.in gcc-3.1/libf2c/configure.in *** gcc-3.0.4/libf2c/configure.in Fri Feb 9 07:14:34 2001 --- gcc-3.1/libf2c/configure.in Wed May 8 04:25:36 2002 *************** *** 1,5 **** # Process this file with autoconf to produce a configure script. ! # Copyright (C) 1995, 1997, 1998, 1999 Free Software Foundation, Inc. # Contributed by Dave Love (d.love@dl.ac.uk). # #This file is part of GNU Fortran. --- 1,5 ---- # Process this file with autoconf to produce a configure script. ! # Copyright (C) 1995, 1997, 1998, 1999, 2002 Free Software Foundation, Inc. # Contributed by Dave Love (d.love@dl.ac.uk). # #This file is part of GNU Fortran. *************** *** 22,39 **** AC_PREREQ(2.13) AC_INIT(libF77/Version.c) ! if test "${srcdir}" = "." ; then ! if test "${with_target_subdir}" != "." ; then ! topsrcdir=${with_multisrctop}../.. ! else ! topsrcdir=${with_multisrctop}.. ! fi ! else ! topsrcdir=${srcdir}/.. ! fi ! dnl This is needed for a multilibbed build in the source tree so ! dnl that install-sh and config.sub get found. ! AC_CONFIG_AUX_DIR($topsrcdir) # If the language specific compiler does not exist, but the "gcc" directory # does, we do not build anything. Note, $r is set by the top-level Makefile. --- 22,39 ---- AC_PREREQ(2.13) AC_INIT(libF77/Version.c) ! # This works around the fact that libtool configuration may change LD ! # for this particular configuration, but some shells, instead of ! # keeping the changes in LD private, export them just because LD is ! # exported. ! ORIGINAL_LD_FOR_MULTILIBS=$LD ! ! AC_CANONICAL_SYSTEM ! target_alias=${target_alias-$target} ! AC_SUBST(target_alias) ! ! GLIBCPP_CONFIGURE(.) ! GLIBCPP_EXPORT_INSTALL_INFO # If the language specific compiler does not exist, but the "gcc" directory # does, we do not build anything. Note, $r is set by the top-level Makefile. *************** fi *** 65,78 **** dnl Checks for programs. ! dnl FIXME AC_PROG_CC wants CC to be able to link things, but it may ! dnl not be able to. ! define([AC_PROG_CC_WORKS],[]) ! ! # For g77 we'll set CC to point at the built gcc, but this will get it into ! # the makefiles ! ! AC_PROG_CC dnl These should be inherited in the recursive make, but ensure they are dnl defined: --- 65,71 ---- dnl Checks for programs. ! AM_PROG_LIBTOOL dnl These should be inherited in the recursive make, but ensure they are dnl defined: *************** test -f libF77/makefile && mv libF77/mak *** 119,137 **** test -f libI77/makefile && mv libI77/makefile libI77/makefile.ori test -f libU77/makefile && mv libU77/makefile libU77/makefile.ori - # Get the version trigger filename from the toplevel - if [[ "${with_gcc_version_trigger+set}" = set ]]; then - gcc_version_trigger=$with_gcc_version_trigger - gcc_version=`grep version_string ${gcc_version_trigger} | sed -e 's/.*\"\([[^ \"]]*\)[[ \"]].*/\1/'` - else - gcc_version_trigger= - gcc_version=UNKNOWN - fi - - AC_SUBST(gcc_version) - AC_SUBST(gcc_version_trigger) - AC_CANONICAL_SYSTEM - AC_SUBST(target_alias) AC_CONFIG_SUBDIRS(libU77 libI77 libF77) # Do Makefile first since g2c.h depends on it and shouldn't get an # earlier timestamp. Of course, it does when the multilib gunk below --- 112,117 ---- *************** AC_CONFIG_SUBDIRS(libU77 libI77 libF77) *** 139,148 **** AC_OUTPUT(Makefile g2c.h:g2c.hin, [test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h if test -n "$CONFIG_FILES"; then if test -n "${with_target_subdir}"; then # FIXME: We shouldn't need to set ac_file ac_file=Makefile ! . ${topsrcdir}/config-ml.in touch g2c.h # to keep it more recent than Makefile fi fi], --- 119,129 ---- AC_OUTPUT(Makefile g2c.h:g2c.hin, [test -z "$CONFIG_HEADERS" || echo timestamp > stamp-h if test -n "$CONFIG_FILES"; then + LD="${ORIGINAL_LD_FOR_MULTILIBS}" if test -n "${with_target_subdir}"; then # FIXME: We shouldn't need to set ac_file ac_file=Makefile ! . ${toplevel_srcdir}/config-ml.in touch g2c.h # to keep it more recent than Makefile fi fi], *************** target=${target} *** 152,159 **** with_target_subdir=${with_target_subdir} with_multisubdir=${with_multisubdir} ac_configure_args="--enable-multilib ${ac_configure_args}" CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} - topsrcdir=${topsrcdir} ) --- 133,140 ---- with_target_subdir=${with_target_subdir} with_multisubdir=${with_multisubdir} ac_configure_args="--enable-multilib ${ac_configure_args}" + toplevel_srcdir=${toplevel_srcdir} CONFIG_SHELL=${CONFIG_SHELL-/bin/sh} ) diff -Nrc3pad gcc-3.0.4/libf2c/libF77/Makefile.in gcc-3.1/libf2c/libF77/Makefile.in *** gcc-3.0.4/libf2c/libF77/Makefile.in Sun Nov 25 16:17:56 2001 --- gcc-3.1/libf2c/libF77/Makefile.in Tue Dec 4 09:53:17 2001 *************** *** 1,7 **** # Makefile for GNU F77 compiler runtime. # Copyright 1990 - 1994 by AT&T Bell Laboratories and Bellcore (see the # file `Notice'). ! # Portions of this file Copyright (C) 1995-1998 Free Software Foundation, Inc. # Contributed by Dave Love (d.love@dl.ac.uk). # #This file is part of GNU Fortran. --- 1,7 ---- # Makefile for GNU F77 compiler runtime. # Copyright 1990 - 1994 by AT&T Bell Laboratories and Bellcore (see the # file `Notice'). ! # Portions of this file Copyright (C) 1995-1998, 2001 Free Software Foundation, Inc. # Contributed by Dave Love (d.love@dl.ac.uk). # #This file is part of GNU Fortran. *************** VPATH = @srcdir@ *** 31,38 **** # configuration. DEFS = @DEFS@ - LIBG2C = ../libg2c.a - F2C_H_DIR = @srcdir@/.. G2C_H_DIR = .. CC = @CC@ --- 31,36 ---- *************** CFLAGS = @CFLAGS@ *** 40,45 **** --- 38,44 ---- CPPFLAGS = @CPPFLAGS@ AR = @AR@ ARFLAGS = rc + RANLIB = @RANLIB@ @SET_MAKE@ SHELL = /bin/sh *************** SHELL = /bin/sh *** 49,92 **** ALL_CFLAGS = -I. -I$(srcdir) -I$(G2C_H_DIR) -I$(F2C_H_DIR) $(CPPFLAGS) $(DEFS) $(CFLAGS) .SUFFIXES: ! .SUFFIXES: .c .o ! .c.o: ! $(CC) -c -DSkip_f2c_Undefs $(ALL_CFLAGS) $< ! MISC = F77_aloc.o VersionF.o main.o s_rnge.o abort_.o getarg_.o iargc_.o\ ! getenv_.o signal_.o s_stop.o s_paus.o system_.o cabs.o\ ! derf_.o derfc_.o erf_.o erfc_.o sig_die.o exit_.o setarg.o setsig.o ! POW = pow_ci.o pow_dd.o pow_di.o pow_hh.o pow_ii.o pow_ri.o pow_zi.o pow_zz.o \ ! pow_qq.o ! CX = c_abs.o c_cos.o c_div.o c_exp.o c_log.o c_sin.o c_sqrt.o ! DCX = z_abs.o z_cos.o z_div.o z_exp.o z_log.o z_sin.o z_sqrt.o ! REAL = r_abs.o r_acos.o r_asin.o r_atan.o r_atn2.o r_cnjg.o r_cos.o\ ! r_cosh.o r_dim.o r_exp.o r_imag.o r_int.o\ ! r_lg10.o r_log.o r_mod.o r_nint.o r_sign.o\ ! r_sin.o r_sinh.o r_sqrt.o r_tan.o r_tanh.o ! DBL = d_abs.o d_acos.o d_asin.o d_atan.o d_atn2.o\ ! d_cnjg.o d_cos.o d_cosh.o d_dim.o d_exp.o\ ! d_imag.o d_int.o d_lg10.o d_log.o d_mod.o\ ! d_nint.o d_prod.o d_sign.o d_sin.o d_sinh.o\ ! d_sqrt.o d_tan.o d_tanh.o ! INT = i_abs.o i_dim.o i_dnnt.o i_indx.o i_len.o i_mod.o i_nint.o i_sign.o ! HALF = h_abs.o h_dim.o h_dnnt.o h_indx.o h_len.o h_mod.o h_nint.o h_sign.o ! CMP = l_ge.o l_gt.o l_le.o l_lt.o hl_ge.o hl_gt.o hl_le.o hl_lt.o ! EFL = ef1asc_.o ef1cmc_.o ! CHAR = s_cat.o s_cmp.o s_copy.o ! F90BIT = lbitbits.o lbitshft.o qbitbits.o qbitshft.o OBJS = $(MISC) $(POW) $(CX) $(DCX) $(REAL) $(DBL) $(INT) \ $(HALF) $(CMP) $(EFL) $(CHAR) $(F90BIT) ! all: ../s-libf77 ../s-libf77: $(OBJS) ! echo timestamp > ../s-libf77 ! ! archive: ! $(AR) $(ARFLAGS) $(LIBG2C) $(OBJS) Makefile: Makefile.in config.status $(SHELL) config.status --- 48,91 ---- ALL_CFLAGS = -I. -I$(srcdir) -I$(G2C_H_DIR) -I$(F2C_H_DIR) $(CPPFLAGS) $(DEFS) $(CFLAGS) .SUFFIXES: ! .SUFFIXES: .c .lo ! .c.lo: ! @LIBTOOL@ --mode=compile $(CC) -c -DSkip_f2c_Undefs $(ALL_CFLAGS) $< ! MISC = F77_aloc.lo VersionF.lo s_rnge.lo abort_.lo getarg_.lo iargc_.lo\ ! getenv_.lo signal_.lo s_stop.lo s_paus.lo system_.lo cabs.lo\ ! derf_.lo derfc_.lo erf_.lo erfc_.lo sig_die.lo exit_.lo setarg.lo setsig.lo ! POW = pow_ci.lo pow_dd.lo pow_di.lo pow_hh.lo pow_ii.lo pow_ri.lo pow_zi.lo pow_zz.lo \ ! pow_qq.lo ! CX = c_abs.lo c_cos.lo c_div.lo c_exp.lo c_log.lo c_sin.lo c_sqrt.lo ! DCX = z_abs.lo z_cos.lo z_div.lo z_exp.lo z_log.lo z_sin.lo z_sqrt.lo ! REAL = r_abs.lo r_acos.lo r_asin.lo r_atan.lo r_atn2.lo r_cnjg.lo r_cos.lo\ ! r_cosh.lo r_dim.lo r_exp.lo r_imag.lo r_int.lo\ ! r_lg10.lo r_log.lo r_mod.lo r_nint.lo r_sign.lo\ ! r_sin.lo r_sinh.lo r_sqrt.lo r_tan.lo r_tanh.lo ! DBL = d_abs.lo d_acos.lo d_asin.lo d_atan.lo d_atn2.lo\ ! d_cnjg.lo d_cos.lo d_cosh.lo d_dim.lo d_exp.lo\ ! d_imag.lo d_int.lo d_lg10.lo d_log.lo d_mod.lo\ ! d_nint.lo d_prod.lo d_sign.lo d_sin.lo d_sinh.lo\ ! d_sqrt.lo d_tan.lo d_tanh.lo ! INT = i_abs.lo i_dim.lo i_dnnt.lo i_indx.lo i_len.lo i_mod.lo i_nint.lo i_sign.lo ! HALF = h_abs.lo h_dim.lo h_dnnt.lo h_indx.lo h_len.lo h_mod.lo h_nint.lo h_sign.lo ! CMP = l_ge.lo l_gt.lo l_le.lo l_lt.lo hl_ge.lo hl_gt.lo hl_le.lo hl_lt.lo ! EFL = ef1asc_.lo ef1cmc_.lo ! CHAR = s_cat.lo s_cmp.lo s_copy.lo ! F90BIT = lbitbits.lo lbitshft.lo qbitbits.lo qbitshft.lo OBJS = $(MISC) $(POW) $(CX) $(DCX) $(REAL) $(DBL) $(INT) \ $(HALF) $(CMP) $(EFL) $(CHAR) $(F90BIT) ! all: ../s-libf77 ../libfrtbegin.a ../s-libf77: $(OBJS) ! -rm -f $@.T $@ ! objs='$(OBJS)'; for name in $$objs; do \ ! echo libF77/$${name} >> $@.T; done ! mv $@.T $@ Makefile: Makefile.in config.status $(SHELL) config.status *************** ${srcdir}/configure: configure.in *** 100,230 **** rm -f config.cache cd ${srcdir} && autoconf ! VersionF.o: Version.c ! $(CC) -c $(ALL_CFLAGS) -o $@ $(srcdir)/Version.c ! F77_aloc.o: F77_aloc.c ! main.o: main.c ! s_rnge.o: s_rnge.c ! abort_.o: abort_.c ! getarg_.o: getarg_.c ! iargc_.o: iargc_.c ! getenv_.o: getenv_.c ! signal_.o: signal_.c ! s_stop.o: s_stop.c ! s_paus.o: s_paus.c ! system_.o: system_.c ! cabs.o: cabs.c ! derf_.o: derf_.c ! derfc_.o: derfc_.c ! erf_.o: erf_.c ! erfc_.o: erfc_.c ! sig_die.o: sig_die.c ! exit_.o: exit_.c ! setarg.o: setarg.c ! setsig.o: setsig.c ! pow_ci.o: pow_ci.c ! pow_dd.o: pow_dd.c ! pow_di.o: pow_di.c ! pow_hh.o: pow_hh.c ! pow_ii.o: pow_ii.c ! pow_ri.o: pow_ri.c ! pow_zi.o: pow_zi.c ! pow_zz.o: pow_zz.c ! pow_qq.o: pow_qq.c ! c_abs.o: c_abs.c ! c_cos.o: c_cos.c ! c_div.o: c_div.c ! c_exp.o: c_exp.c ! c_log.o: c_log.c ! c_sin.o: c_sin.c ! c_sqrt.o: c_sqrt.c ! z_abs.o: z_abs.c ! z_cos.o: z_cos.c ! z_div.o: z_div.c ! z_exp.o: z_exp.c ! z_log.o: z_log.c ! $(CC) -c -DSkip_f2c_Undefs $(ALL_CFLAGS) -ffloat-store $(srcdir)/z_log.c ! z_sin.o: z_sin.c ! z_sqrt.o: z_sqrt.c ! r_abs.o: r_abs.c ! r_acos.o: r_acos.c ! r_asin.o: r_asin.c ! r_atan.o: r_atan.c ! r_atn2.o: r_atn2.c ! r_cnjg.o: r_cnjg.c ! r_cos.o: r_cos.c ! r_cosh.o: r_cosh.c ! r_dim.o: r_dim.c ! r_exp.o: r_exp.c ! r_imag.o: r_imag.c ! r_int.o: r_int.c ! r_lg10.o: r_lg10.c ! r_log.o: r_log.c ! r_mod.o: r_mod.c ! r_nint.o: r_nint.c ! r_sign.o: r_sign.c ! r_sin.o: r_sin.c ! r_sinh.o: r_sinh.c ! r_sqrt.o: r_sqrt.c ! r_tan.o: r_tan.c ! r_tanh.o: r_tanh.c ! d_abs.o: d_abs.c ! d_acos.o: d_acos.c ! d_asin.o: d_asin.c ! d_atan.o: d_atan.c ! d_atn2.o: d_atn2.c ! d_cnjg.o: d_cnjg.c ! d_cos.o: d_cos.c ! d_cosh.o: d_cosh.c ! d_dim.o: d_dim.c ! d_exp.o: d_exp.c ! d_imag.o: d_imag.c ! d_int.o: d_int.c ! d_lg10.o: d_lg10.c ! d_log.o: d_log.c ! d_mod.o: d_mod.c ! d_nint.o: d_nint.c ! d_prod.o: d_prod.c ! d_sign.o: d_sign.c ! d_sin.o: d_sin.c ! d_sinh.o: d_sinh.c ! d_sqrt.o: d_sqrt.c ! d_tan.o: d_tan.c ! d_tanh.o: d_tanh.c ! i_abs.o: i_abs.c ! i_dim.o: i_dim.c ! i_dnnt.o: i_dnnt.c ! i_indx.o: i_indx.c ! i_len.o: i_len.c ! i_mod.o: i_mod.c ! i_nint.o: i_nint.c ! i_sign.o: i_sign.c ! h_abs.o: h_abs.c ! h_dim.o: h_dim.c ! h_dnnt.o: h_dnnt.c ! h_indx.o: h_indx.c ! h_len.o: h_len.c ! h_mod.o: h_mod.c ! h_nint.o: h_nint.c ! h_sign.o: h_sign.c ! l_ge.o: l_ge.c ! l_gt.o: l_gt.c ! l_le.o: l_le.c ! l_lt.o: l_lt.c ! hl_ge.o: hl_ge.c ! hl_gt.o: hl_gt.c ! hl_le.o: hl_le.c ! hl_lt.o: hl_lt.c ! ef1asc_.o: ef1asc_.c ! ef1cmc_.o: ef1cmc_.c ! s_cat.o: s_cat.c ! s_cmp.o: s_cmp.c ! s_copy.o: s_copy.c ! lbitbits.o: lbitbits.c ! lbitshft.o: lbitshft.c ! qbitbits.o: qbitbits.c ! qbitshft.o: qbitshft.c # Not quite all these actually do depend on f2c.h... $(MISC) $(POW) $(CX) $(DCX) $(REAL) $(DBL) $(INT) $(HALF) $(CMP) $(EFL) \ --- 99,236 ---- rm -f config.cache cd ${srcdir} && autoconf ! VersionF.lo: Version.c ! @LIBTOOL@ --mode=compile $(CC) -c $(ALL_CFLAGS) $(srcdir)/Version.c -o $@ ! frtbegin.o : main.c ! $(CC) -c $(ALL_CFLAGS) $(srcdir)/main.c -o $@ ! ! ../libfrtbegin.a: frtbegin.o ! -rm -f $@ ! $(AR) $(ARFLAGS) $@ frtbegin.o ! $(RANLIB) $@ ! ! F77_aloc.lo: F77_aloc.c ! s_rnge.lo: s_rnge.c ! abort_.lo: abort_.c ! getarg_.lo: getarg_.c ! iargc_.lo: iargc_.c ! getenv_.lo: getenv_.c ! signal_.lo: signal_.c ! s_stop.lo: s_stop.c ! s_paus.lo: s_paus.c ! system_.lo: system_.c ! cabs.lo: cabs.c ! derf_.lo: derf_.c ! derfc_.lo: derfc_.c ! erf_.lo: erf_.c ! erfc_.lo: erfc_.c ! sig_die.lo: sig_die.c ! exit_.lo: exit_.c ! setarg.lo: setarg.c ! setsig.lo: setsig.c ! pow_ci.lo: pow_ci.c ! pow_dd.lo: pow_dd.c ! pow_di.lo: pow_di.c ! pow_hh.lo: pow_hh.c ! pow_ii.lo: pow_ii.c ! pow_ri.lo: pow_ri.c ! pow_zi.lo: pow_zi.c ! pow_zz.lo: pow_zz.c ! pow_qq.lo: pow_qq.c ! c_abs.lo: c_abs.c ! c_cos.lo: c_cos.c ! c_div.lo: c_div.c ! c_exp.lo: c_exp.c ! c_log.lo: c_log.c ! c_sin.lo: c_sin.c ! c_sqrt.lo: c_sqrt.c ! z_abs.lo: z_abs.c ! z_cos.lo: z_cos.c ! z_div.lo: z_div.c ! z_exp.lo: z_exp.c ! z_log.lo: z_log.c ! @LIBTOOL@ --mode=compile $(CC) -c -DSkip_f2c_Undefs $(ALL_CFLAGS) -ffloat-store $(srcdir)/z_log.c ! z_sin.lo: z_sin.c ! z_sqrt.lo: z_sqrt.c ! r_abs.lo: r_abs.c ! r_acos.lo: r_acos.c ! r_asin.lo: r_asin.c ! r_atan.lo: r_atan.c ! r_atn2.lo: r_atn2.c ! r_cnjg.lo: r_cnjg.c ! r_cos.lo: r_cos.c ! r_cosh.lo: r_cosh.c ! r_dim.lo: r_dim.c ! r_exp.lo: r_exp.c ! r_imag.lo: r_imag.c ! r_int.lo: r_int.c ! r_lg10.lo: r_lg10.c ! r_log.lo: r_log.c ! r_mod.lo: r_mod.c ! r_nint.lo: r_nint.c ! r_sign.lo: r_sign.c ! r_sin.lo: r_sin.c ! r_sinh.lo: r_sinh.c ! r_sqrt.lo: r_sqrt.c ! r_tan.lo: r_tan.c ! r_tanh.lo: r_tanh.c ! d_abs.lo: d_abs.c ! d_acos.lo: d_acos.c ! d_asin.lo: d_asin.c ! d_atan.lo: d_atan.c ! d_atn2.lo: d_atn2.c ! d_cnjg.lo: d_cnjg.c ! d_cos.lo: d_cos.c ! d_cosh.lo: d_cosh.c ! d_dim.lo: d_dim.c ! d_exp.lo: d_exp.c ! d_imag.lo: d_imag.c ! d_int.lo: d_int.c ! d_lg10.lo: d_lg10.c ! d_log.lo: d_log.c ! d_mod.lo: d_mod.c ! d_nint.lo: d_nint.c ! d_prod.lo: d_prod.c ! d_sign.lo: d_sign.c ! d_sin.lo: d_sin.c ! d_sinh.lo: d_sinh.c ! d_sqrt.lo: d_sqrt.c ! d_tan.lo: d_tan.c ! d_tanh.lo: d_tanh.c ! i_abs.lo: i_abs.c ! i_dim.lo: i_dim.c ! i_dnnt.lo: i_dnnt.c ! i_indx.lo: i_indx.c ! i_len.lo: i_len.c ! i_mod.lo: i_mod.c ! i_nint.lo: i_nint.c ! i_sign.lo: i_sign.c ! h_abs.lo: h_abs.c ! h_dim.lo: h_dim.c ! h_dnnt.lo: h_dnnt.c ! h_indx.lo: h_indx.c ! h_len.lo: h_len.c ! h_mod.lo: h_mod.c ! h_nint.lo: h_nint.c ! h_sign.lo: h_sign.c ! l_ge.lo: l_ge.c ! l_gt.lo: l_gt.c ! l_le.lo: l_le.c ! l_lt.lo: l_lt.c ! hl_ge.lo: hl_ge.c ! hl_gt.lo: hl_gt.c ! hl_le.lo: hl_le.c ! hl_lt.lo: hl_lt.c ! ef1asc_.lo: ef1asc_.c ! ef1cmc_.lo: ef1cmc_.c ! s_cat.lo: s_cat.c ! s_cmp.lo: s_cmp.c ! s_copy.lo: s_copy.c ! lbitbits.lo: lbitbits.c ! lbitshft.lo: lbitshft.c ! qbitbits.lo: qbitbits.c ! qbitshft.lo: qbitshft.c # Not quite all these actually do depend on f2c.h... $(MISC) $(POW) $(CX) $(DCX) $(REAL) $(DBL) $(INT) $(HALF) $(CMP) $(EFL) \ *************** $(MISC) $(POW) $(CX) $(DCX) $(REAL) $(DB *** 233,239 **** check install uninstall install-strip dist installcheck installdirs: mostlyclean: ! rm -f *.o clean: mostlyclean rm -f config.log --- 239,246 ---- check install uninstall install-strip dist installcheck installdirs: mostlyclean: ! rm -f *.o *.lo ../libfrtbegin.a ! rm -rf .libs clean: mostlyclean rm -f config.log diff -Nrc3pad gcc-3.0.4/libf2c/libF77/Version.c gcc-3.1/libf2c/libF77/Version.c *** gcc-3.0.4/libf2c/libF77/Version.c Wed Feb 20 18:48:07 2002 --- gcc-3.1/libf2c/libF77/Version.c Tue May 14 21:42:29 2002 *************** static char junk[] = "\n@(#)LIBF77 VERSI *** 3,9 **** /* */ ! char __G77_LIBF77_VERSION__[] = "0.5.26 20020220 (release)"; /* 2.00 11 June 1980. File version.c added to library. --- 3,9 ---- /* */ ! char __G77_LIBF77_VERSION__[] = "3.1 20020514 (release)"; /* 2.00 11 June 1980. File version.c added to library. diff -Nrc3pad gcc-3.0.4/libf2c/libF77/configure gcc-3.1/libf2c/libF77/configure *** gcc-3.0.4/libf2c/libF77/configure Fri Feb 9 07:14:34 2001 --- gcc-3.1/libf2c/libF77/configure Tue Dec 4 09:53:17 2001 *************** program_suffix=NONE *** 28,33 **** --- 28,34 ---- program_transform_name=s,x,x, silent= site= + sitefile= srcdir= target=NONE verbose= *************** Configuration: *** 142,147 **** --- 143,149 ---- --help print this message --no-create do not create output files --quiet, --silent do not print \`checking...' messages + --site-file=FILE use FILE as the site file --version print the version of autoconf that created configure Directory and file names: --prefix=PREFIX install architecture-independent files in PREFIX *************** EOF *** 312,317 **** --- 314,324 ---- -site=* | --site=* | --sit=*) site="$ac_optarg" ;; + -site-file | --site-file | --site-fil | --site-fi | --site-f) + ac_prev=sitefile ;; + -site-file=* | --site-file=* | --site-fil=* | --site-fi=* | --site-f=*) + sitefile="$ac_optarg" ;; + -srcdir | --srcdir | --srcdi | --srcd | --src | --sr) ac_prev=srcdir ;; -srcdir=* | --srcdir=* | --srcdi=* | --srcd=* | --src=* | --sr=*) *************** fi *** 477,488 **** srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` # Prefer explicitly selected file to automatically selected ones. ! if test -z "$CONFIG_SITE"; then ! if test "x$prefix" != xNONE; then ! CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" ! else ! CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" fi fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then --- 484,499 ---- srcdir=`echo "${srcdir}" | sed 's%\([^/]\)/*$%\1%'` # Prefer explicitly selected file to automatically selected ones. ! if test -z "$sitefile"; then ! if test -z "$CONFIG_SITE"; then ! if test "x$prefix" != xNONE; then ! CONFIG_SITE="$prefix/share/config.site $prefix/etc/config.site" ! else ! CONFIG_SITE="$ac_default_prefix/share/config.site $ac_default_prefix/etc/config.site" ! fi fi + else + CONFIG_SITE="$sitefile" fi for ac_site_file in $CONFIG_SITE; do if test -r "$ac_site_file"; then *************** fi *** 530,536 **** # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:534: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 541,547 ---- # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:545: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** if test -z "$CC"; then *** 560,566 **** # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:564: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 571,577 ---- # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:575: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** fi *** 611,617 **** # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:615: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 622,628 ---- # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:626: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** fi *** 644,650 **** echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 ! echo "configure:648: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 655,661 ---- echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 ! echo "configure:659: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** else *** 653,659 **** yes; #endif EOF ! if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:657: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no --- 664,670 ---- yes; #endif EOF ! if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:668: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no *************** ac_test_CFLAGS="${CFLAGS+set}" *** 672,678 **** ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 ! echo "configure:676: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 683,689 ---- ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 ! echo "configure:687: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** else *** 704,713 **** fi test "$AR" || AR=ar echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 ! echo "configure:711: checking whether ${MAKE-make} sets \${MAKE}" >&5 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 715,761 ---- fi + LIBTOOL='$(SHELL) ../libtool' + + test "$AR" || AR=ar + if test "$RANLIB"; then : + + else + # Extract the first word of "ranlib", so it can be a program name with args. + set dummy ranlib; ac_word=$2 + echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 + echo "configure:730: checking for $ac_word" >&5 + if eval "test \"`echo '$''{'ac_cv_prog_RANLIB'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + if test -n "$RANLIB"; then + ac_cv_prog_RANLIB="$RANLIB" # Let the user override the test. + else + IFS="${IFS= }"; ac_save_ifs="$IFS"; IFS=":" + ac_dummy="$PATH" + for ac_dir in $ac_dummy; do + test -z "$ac_dir" && ac_dir=. + if test -f $ac_dir/$ac_word; then + ac_cv_prog_RANLIB="ranlib" + break + fi + done + IFS="$ac_save_ifs" + test -z "$ac_cv_prog_RANLIB" && ac_cv_prog_RANLIB=":" + fi + fi + RANLIB="$ac_cv_prog_RANLIB" + if test -n "$RANLIB"; then + echo "$ac_t""$RANLIB" 1>&6 + else + echo "$ac_t""no" 1>&6 + fi + + fi echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 ! echo "configure:759: checking whether ${MAKE-make} sets \${MAKE}" >&5 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** fi *** 737,743 **** # Sanity check for the cross-compilation case: echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 ! echo "configure:741: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= --- 785,791 ---- # Sanity check for the cross-compilation case: echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 ! echo "configure:789: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= *************** else *** 752,764 **** # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:762: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : --- 800,812 ---- # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:810: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : *************** else *** 769,781 **** rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:779: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : --- 817,829 ---- rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:827: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : *************** else *** 786,798 **** rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:796: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : --- 834,846 ---- rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:844: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : *************** echo "$ac_t""$CPP" 1>&6 *** 818,834 **** ac_safe=`echo "stdio.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for stdio.h""... $ac_c" 1>&6 ! echo "configure:822: checking for stdio.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:832: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* --- 866,882 ---- ac_safe=`echo "stdio.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for stdio.h""... $ac_c" 1>&6 ! echo "configure:870: checking for stdio.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:880: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* *************** fi *** 856,867 **** echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 ! echo "configure:860: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include --- 904,915 ---- echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 ! echo "configure:908: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include *************** else *** 869,875 **** #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:873: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* --- 917,923 ---- #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:921: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* *************** rm -f conftest* *** 886,892 **** if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF --- 934,940 ---- if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF *************** fi *** 904,910 **** if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF --- 952,958 ---- if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF *************** if test "$cross_compiling" = yes; then *** 925,931 **** : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') --- 973,979 ---- : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') *************** if (XOR (islower (i), ISLOWER (i)) || to *** 936,942 **** exit (0); } EOF ! if { (eval echo configure:940: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else --- 984,990 ---- exit (0); } EOF ! if { (eval echo configure:988: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else *************** fi *** 961,972 **** echo $ac_n "checking for posix""... $ac_c" 1>&6 ! echo "configure:965: checking for posix" >&5 if eval "test \"`echo '$''{'g77_cv_header_posix'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include --- 1009,1020 ---- echo $ac_n "checking for posix""... $ac_c" 1>&6 ! echo "configure:1013: checking for posix" >&5 if eval "test \"`echo '$''{'g77_cv_header_posix'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include *************** echo "$ac_t""$g77_cv_header_posix" 1>&6 *** 992,1003 **** # We can rely on the GNU library being posix-ish. I guess checking the # header isn't actually like checking the functions, though... echo $ac_n "checking for GNU library""... $ac_c" 1>&6 ! echo "configure:996: checking for GNU library" >&5 if eval "test \"`echo '$''{'g77_cv_lib_gnu'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #ifdef __GNU_LIBRARY__ --- 1040,1051 ---- # We can rely on the GNU library being posix-ish. I guess checking the # header isn't actually like checking the functions, though... echo $ac_n "checking for GNU library""... $ac_c" 1>&6 ! echo "configure:1044: checking for GNU library" >&5 if eval "test \"`echo '$''{'g77_cv_lib_gnu'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #ifdef __GNU_LIBRARY__ *************** fi *** 1020,1031 **** echo "$ac_t""$g77_cv_lib_gnu" 1>&6 echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 ! echo "configure:1024: checking return type of signal handlers" >&5 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include --- 1068,1079 ---- echo "$ac_t""$g77_cv_lib_gnu" 1>&6 echo $ac_n "checking return type of signal handlers""... $ac_c" 1>&6 ! echo "configure:1072: checking return type of signal handlers" >&5 if eval "test \"`echo '$''{'ac_cv_type_signal'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include *************** int main() { *** 1042,1048 **** int i; ; return 0; } EOF ! if { (eval echo configure:1046: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else --- 1090,1096 ---- int i; ; return 0; } EOF ! if { (eval echo configure:1094: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_type_signal=void else *************** EOF *** 1063,1074 **** # we'll get atexit by default if test $ac_cv_header_stdc != yes; then echo $ac_n "checking for atexit""... $ac_c" 1>&6 ! echo "configure:1067: checking for atexit" >&5 if eval "test \"`echo '$''{'ac_cv_func_atexit'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:1115: checking for atexit" >&5 if eval "test \"`echo '$''{'ac_cv_func_atexit'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_atexit=yes" else --- 1139,1145 ---- ; return 0; } EOF ! if { (eval echo configure:1143: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_atexit=yes" else *************** else *** 1116,1127 **** EOF echo $ac_n "checking for onexit""... $ac_c" 1>&6 ! echo "configure:1120: checking for onexit" >&5 if eval "test \"`echo '$''{'ac_cv_func_onexit'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:1168: checking for onexit" >&5 if eval "test \"`echo '$''{'ac_cv_func_onexit'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_onexit=yes" else --- 1192,1198 ---- ; return 0; } EOF ! if { (eval echo configure:1196: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_onexit=yes" else *************** if eval "test \"`echo '$ac_cv_func_'onex *** 1162,1173 **** else echo "$ac_t""no" 1>&6 echo $ac_n "checking for on_exit""... $ac_c" 1>&6 ! echo "configure:1166: checking for on_exit" >&5 if eval "test \"`echo '$''{'ac_cv_func_on_exit'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 echo $ac_n "checking for on_exit""... $ac_c" 1>&6 ! echo "configure:1214: checking for on_exit" >&5 if eval "test \"`echo '$''{'ac_cv_func_on_exit'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_on_exit=yes" else --- 1238,1244 ---- ; return 0; } EOF ! if { (eval echo configure:1242: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_on_exit=yes" else *************** else true *** 1220,1226 **** fi echo $ac_n "checking for drem in -lm""... $ac_c" 1>&6 ! echo "configure:1224: checking for drem in -lm" >&5 ac_lib_var=`echo m'_'drem | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 1268,1274 ---- fi echo $ac_n "checking for drem in -lm""... $ac_c" 1>&6 ! echo "configure:1272: checking for drem in -lm" >&5 ac_lib_var=`echo m'_'drem | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** else *** 1228,1234 **** ac_save_LIBS="$LIBS" LIBS="-lm $LIBS" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else --- 1287,1293 ---- drem() ; return 0; } EOF ! if { (eval echo configure:1291: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else *************** s%@oldincludedir@%$oldincludedir%g *** 1417,1423 **** --- 1465,1473 ---- s%@infodir@%$infodir%g s%@mandir@%$mandir%g s%@CC@%$CC%g + s%@LIBTOOL@%$LIBTOOL%g s%@AR@%$AR%g + s%@RANLIB@%$RANLIB%g s%@SET_MAKE@%$SET_MAKE%g s%@CPP@%$CPP%g diff -Nrc3pad gcc-3.0.4/libf2c/libF77/configure.in gcc-3.1/libf2c/libF77/configure.in *** gcc-3.0.4/libf2c/libF77/configure.in Fri Feb 9 07:14:34 2001 --- gcc-3.1/libf2c/libF77/configure.in Tue Dec 4 09:53:17 2001 *************** *** 1,5 **** # Process this file with autoconf to produce a configure script. ! # Copyright (C) 1995, 1997, 1998 Free Software Foundation, Inc. # Contributed by Dave Love (d.love@dl.ac.uk). # #This file is part of GNU Fortran. --- 1,5 ---- # Process this file with autoconf to produce a configure script. ! # Copyright (C) 1995, 1997, 1998, 2001 Free Software Foundation, Inc. # Contributed by Dave Love (d.love@dl.ac.uk). # #This file is part of GNU Fortran. *************** define([AC_PROG_CC_WORKS],[]) *** 32,39 **** --- 32,47 ---- # the makefiles AC_PROG_CC + LIBTOOL='$(SHELL) ../libtool' + AC_SUBST(LIBTOOL) + test "$AR" || AR=ar AC_SUBST(AR) + if test "$RANLIB"; then : + AC_SUBST(RANLIB) + else + AC_PROG_RANLIB + fi AC_PROG_MAKE_SET dnl Checks for libraries. diff -Nrc3pad gcc-3.0.4/libf2c/libI77/Makefile.in gcc-3.1/libf2c/libI77/Makefile.in *** gcc-3.0.4/libf2c/libI77/Makefile.in Tue May 22 11:18:52 2001 --- gcc-3.1/libf2c/libI77/Makefile.in Tue Jan 15 17:27:05 2002 *************** VPATH = @srcdir@ *** 31,45 **** # configuration. DEFS = @DEFS@ - LIBG2C = ../libg2c.a - F2C_H_DIR = @srcdir@/.. G2C_H_DIR = .. CC = @CC@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ - AR = @AR@ - ARFLAGS = rc @SET_MAKE@ SHELL = /bin/sh --- 31,41 ---- *************** ALL_CFLAGS = -I. -I$(srcdir) -I$(G2C_H_D *** 50,80 **** $(DEFS) $(CFLAGS) .SUFFIXES: ! .SUFFIXES: .c .o ! .c.o: ! $(CC) -c -DSkip_f2c_Undefs -DAllow_TYQUAD $(ALL_CFLAGS) $< ! OBJ = VersionI.o backspace.o close.o dfe.o dolio.o due.o endfile.o err.o \ ! fmt.o fmtlib.o iio.o ilnw.o inquire.o lread.o lwrite.o open.o \ ! rdfmt.o rewind.o rsfe.o rsli.o rsne.o sfe.o sue.o typesize.o uio.o \ ! util.o wref.o wrtfmt.o wsfe.o wsle.o wsne.o xwsne.o \ ! ftell_.o all: ../s-libi77 ! ../s-libi77: $(OBJ) ! echo timestamp > ../s-libi77 ! ! archive: ! $(AR) $(ARFLAGS) $(LIBG2C) $(OBJ) Makefile: Makefile.in config.status $(SHELL) config.status config.status: configure rm -f config.cache ! CONFIG_SITE=no-such-file CC='$(CC)' AR='$(AR)' CFLAGS='$(CFLAGS)' \ CPPFLAGS='$(CPPFLAGS)' $(SHELL) config.status --recheck ${srcdir}/configure: configure.in --- 46,76 ---- $(DEFS) $(CFLAGS) .SUFFIXES: ! .SUFFIXES: .c .lo ! .c.lo: ! @LIBTOOL@ --mode=compile $(CC) -c -DSkip_f2c_Undefs -DAllow_TYQUAD $(ALL_CFLAGS) $< ! OBJS = VersionI.lo backspace.lo close.lo dfe.lo dolio.lo due.lo endfile.lo err.lo \ ! fmt.lo fmtlib.lo iio.lo ilnw.lo inquire.lo lread.lo lwrite.lo open.lo \ ! rdfmt.lo rewind.lo rsfe.lo rsli.lo rsne.lo sfe.lo sue.lo typesize.lo uio.lo \ ! util.lo wref.lo wrtfmt.lo wsfe.lo wsle.lo wsne.lo xwsne.lo \ ! ftell_.lo all: ../s-libi77 ! ../s-libi77: $(OBJS) ! -rm -f $@.T $@ ! objs='$(OBJS)'; for name in $$objs; do \ ! echo libI77/$${name} >> $@.T; done ! mv $@.T $@ Makefile: Makefile.in config.status $(SHELL) config.status config.status: configure rm -f config.cache ! CONFIG_SITE=no-such-file CC='$(CC)' CFLAGS='$(CFLAGS)' \ CPPFLAGS='$(CPPFLAGS)' $(SHELL) config.status --recheck ${srcdir}/configure: configure.in *************** stamp-h: config.h.in config.status *** 93,164 **** CONFIG_FILES= CONFIG_HEADERS=config.h $(SHELL) config.status echo timestamp > stamp-h ! VersionI.o: Version.c ! $(CC) -c $(ALL_CFLAGS) -o $@ $(srcdir)/Version.c ! backspace.o: backspace.c fio.h ! close.o: close.c fio.h ! dfe.o: fio.h ! dfe.o: dfe.c fmt.h ! dolio.o: dolio.c ! due.o: due.c fio.h ! endfile.o: endfile.c fio.h rawio.h config.h ! err.o: err.c fio.h rawio.h ! fmt.o: fio.h ! fmt.o: fmt.c fmt.h ! fmtlib.o: fmtlib.c ! ftell_.o: ftell_.c fio.h ! iio.o: fio.h ! iio.o: iio.c fmt.h ! ilnw.o: fio.h ! ilnw.o: ilnw.c lio.h ! inquire.o: inquire.c fio.h ! lread.o: fio.h ! lread.o: fmt.h ! lread.o: lio.h ! lread.o: lread.c fp.h ! lwrite.o: fio.h ! lwrite.o: fmt.h ! lwrite.o: lwrite.c lio.h ! open.o: open.c fio.h rawio.h ! rdfmt.o: fio.h ! rdfmt.o: fmt.h ! rdfmt.o: rdfmt.c fp.h ! rewind.o: rewind.c fio.h ! rsfe.o: fio.h ! rsfe.o: rsfe.c fmt.h ! rsli.o: fio.h ! rsli.o: rsli.c lio.h ! rsne.o: fio.h ! rsne.o: rsne.c lio.h ! sfe.o: sfe.c fio.h ! sue.o: sue.c fio.h ! typesize.o: typesize.c ! uio.o: uio.c fio.h ! util.o: util.c fio.h ! wref.o: fio.h ! wref.o: fmt.h ! wref.o: wref.c fp.h ! wrtfmt.o: fio.h ! wrtfmt.o: wrtfmt.c fmt.h ! wsfe.o: fio.h ! wsfe.o: wsfe.c fmt.h ! wsle.o: fio.h ! wsle.o: fmt.h ! wsle.o: wsle.c lio.h ! wsne.o: fio.h ! wsne.o: wsne.c lio.h ! xwsne.o: fio.h ! xwsne.o: lio.h ! xwsne.o: xwsne.c fmt.h # May be pessimistic: ! $(OBJ): $(F2C_H_DIR)/f2c.h $(G2C_H_DIR)/g2c.h check install uninstall install-strip dist installcheck installdirs: mostlyclean: ! rm -f *.o clean: mostlyclean rm -f config.log ../s-libi77 --- 89,161 ---- CONFIG_FILES= CONFIG_HEADERS=config.h $(SHELL) config.status echo timestamp > stamp-h ! VersionI.lo: Version.c ! @LIBTOOL@ --mode=compile $(CC) -c $(ALL_CFLAGS) $(srcdir)/Version.c -o $@ ! backspace.lo: backspace.c fio.h config.h ! close.lo: close.c fio.h config.h ! dfe.lo: fio.h config.h ! dfe.lo: dfe.c fmt.h ! dolio.lo: dolio.c config.h ! due.lo: due.c fio.h config.h ! endfile.lo: endfile.c fio.h config.h ! err.lo: err.c fio.h config.h ! fmt.lo: fio.h config.h ! fmt.lo: fmt.c fmt.h ! fmtlib.lo: fmtlib.c config.h ! ftell_.lo: ftell_.c fio.h config.h ! iio.lo: fio.h ! iio.lo: iio.c fmt.h ! ilnw.lo: fio.h config.h ! ilnw.lo: ilnw.c lio.h ! inquire.lo: inquire.c fio.h config.h ! lread.lo: fio.h config.h ! lread.lo: fmt.h ! lread.lo: lio.h ! lread.lo: lread.c fp.h ! lwrite.lo: fio.h ! lwrite.lo: fmt.h ! lwrite.lo: lwrite.c lio.h ! open.lo: open.c fio.h config.h ! rdfmt.lo: fio.h config.h ! rdfmt.lo: fmt.h ! rdfmt.lo: rdfmt.c fp.h ! rewind.lo: rewind.c fio.h config.h ! rsfe.lo: fio.h config.h ! rsfe.lo: rsfe.c fmt.h ! rsli.lo: fio.h ! rsli.lo: rsli.c lio.h ! rsne.lo: fio.h config.h ! rsne.lo: rsne.c lio.h ! sfe.lo: sfe.c fio.h config.h ! sue.lo: sue.c fio.h config.h ! typesize.lo: typesize.c config.h ! uio.lo: uio.c fio.h ! util.lo: util.c fio.h config.h ! wref.lo: fio.h ! wref.lo: fmt.h ! wref.lo: wref.c fp.h ! wrtfmt.lo: fio.h config.h ! wrtfmt.lo: wrtfmt.c fmt.h ! wsfe.lo: fio.h config.h ! wsfe.lo: wsfe.c fmt.h ! wsle.lo: fio.h config.h ! wsle.lo: fmt.h ! wsle.lo: wsle.c lio.h ! wsne.lo: fio.h ! wsne.lo: wsne.c lio.h ! xwsne.lo: fio.h config.h ! xwsne.lo: lio.h ! xwsne.lo: xwsne.c fmt.h # May be pessimistic: ! $(OBJS): $(F2C_H_DIR)/f2c.h $(G2C_H_DIR)/g2c.h check install uninstall install-strip dist installcheck installdirs: mostlyclean: ! rm -f *.o *.lo ! rm -rf .libs clean: mostlyclean rm -f config.log ../s-libi77 diff -Nrc3pad gcc-3.0.4/libf2c/libI77/Version.c gcc-3.1/libf2c/libI77/Version.c *** gcc-3.0.4/libf2c/libI77/Version.c Wed Feb 20 18:48:15 2002 --- gcc-3.1/libf2c/libI77/Version.c Tue May 14 21:42:32 2002 *************** static char junk[] = "\n@(#) LIBI77 VERS *** 3,9 **** /* */ ! char __G77_LIBI77_VERSION__[] = "0.5.26 20020220 (release)"; /* 2.01 $ format added --- 3,9 ---- /* */ ! char __G77_LIBI77_VERSION__[] = "3.1 20020514 (release)"; /* 2.01 $ format added diff -Nrc3pad gcc-3.0.4/libf2c/libI77/backspace.c gcc-3.1/libf2c/libI77/backspace.c *** gcc-3.0.4/libf2c/libI77/backspace.c Wed May 16 19:03:07 2001 --- gcc-3.1/libf2c/libI77/backspace.c Fri Jul 6 12:09:39 2001 *************** integer f_back(a) alist *a; *** 8,14 **** integer f_back(alist *a) #endif { unit *b; ! long v, w, x, y, z; uiolen n; FILE *f; --- 8,14 ---- integer f_back(alist *a) #endif { unit *b; ! off_t v, w, x, y, z; uiolen n; FILE *f; *************** integer f_back(alist *a) *** 34,64 **** f = b->ufd; /* may have changed in t_runc() */ if(b->url>0) { ! x=ftell(f); y = x % b->url; if(y == 0) x--; x /= b->url; x *= b->url; ! (void) fseek(f,x,SEEK_SET); return(0); } if(b->ufmt==0) ! { fseek(f,-(long)sizeof(uiolen),SEEK_CUR); fread((char *)&n,sizeof(uiolen),1,f); ! fseek(f,-(long)n-2*sizeof(uiolen),SEEK_CUR); return(0); } ! w = x = ftell(f); z = 0; loop: while(x) { x -= x < 64 ? x : 64; ! fseek(f,x,SEEK_SET); for(y = x; y < w; y++) { if (getc(f) != '\n') continue; ! v = ftell(f); if (v == w) { if (z) goto break2; --- 34,64 ---- f = b->ufd; /* may have changed in t_runc() */ if(b->url>0) { ! x=FTELL(f); y = x % b->url; if(y == 0) x--; x /= b->url; x *= b->url; ! FSEEK(f,x,SEEK_SET); return(0); } if(b->ufmt==0) ! { FSEEK(f,-(off_t)sizeof(uiolen),SEEK_CUR); fread((char *)&n,sizeof(uiolen),1,f); ! FSEEK(f,-(off_t)n-2*sizeof(uiolen),SEEK_CUR); return(0); } ! w = x = FTELL(f); z = 0; loop: while(x) { x -= x < 64 ? x : 64; ! FSEEK(f,x,SEEK_SET); for(y = x; y < w; y++) { if (getc(f) != '\n') continue; ! v = FTELL(f); if (v == w) { if (z) goto break2; *************** integer f_back(alist *a) *** 69,74 **** err(a->aerr,(EOF),"backspace"); } break2: ! fseek(f, z, SEEK_SET); return 0; } --- 69,74 ---- err(a->aerr,(EOF),"backspace"); } break2: ! FSEEK(f, z, SEEK_SET); return 0; } diff -Nrc3pad gcc-3.0.4/libf2c/libI77/config.h.in gcc-3.1/libf2c/libI77/config.h.in *** gcc-3.0.4/libf2c/libI77/config.h.in Wed Feb 20 19:40:47 2002 --- gcc-3.1/libf2c/libI77/config.h.in Wed May 15 02:40:18 2002 *************** *** 6,20 **** /* Define to `long' if doesn't define. */ #undef off_t - /* Define if you need to in order for stat and other things to work. */ - #undef _POSIX_SOURCE - /* Define to `unsigned' if doesn't define. */ #undef size_t /* Define if you have the ANSI C header files. */ #undef STDC_HEADERS /* Define if you have the ftruncate function. */ #undef HAVE_FTRUNCATE --- 6,23 ---- /* Define to `long' if doesn't define. */ #undef off_t /* Define to `unsigned' if doesn't define. */ #undef size_t /* Define if you have the ANSI C header files. */ #undef STDC_HEADERS + /* Define if you have the fseeko function. */ + #undef HAVE_FSEEKO + + /* Define if you have the ftello function. */ + #undef HAVE_FTELLO + /* Define if you have the ftruncate function. */ #undef HAVE_FTRUNCATE *************** *** 24,34 **** /* Define if you have the tempnam function. */ #undef HAVE_TEMPNAM ! /* Define if fcntl.h is missing. */ ! #undef NO_FCNTL ! /* Define if fcntl.h is missing. */ ! #undef OPEN_DECL /* Define if we do not have Unix Stdio. */ #undef NON_UNIX_STDIO --- 27,49 ---- /* Define if you have the tempnam function. */ #undef HAVE_TEMPNAM ! /* Define if you have the tmpnam function. */ ! #undef HAVE_TMPNAM ! /* Get Single Unix Specification semantics */ ! #undef _XOPEN_SOURCE ! ! /* Get Single Unix Specification semantics */ ! #undef _XOPEN_SOURCE_EXTENDED ! ! /* Solaris extensions */ ! #undef __EXTENSIONS__ ! ! /* Get 64-bit file size support */ ! #undef _FILE_OFFSET_BITS ! ! /* Define for HP-UX ftello and fseeko extension. */ ! #undef _LARGEFILE_SOURCE /* Define if we do not have Unix Stdio. */ #undef NON_UNIX_STDIO diff -Nrc3pad gcc-3.0.4/libf2c/libI77/configure gcc-3.1/libf2c/libI77/configure *** gcc-3.0.4/libf2c/libI77/configure Wed May 16 19:03:07 2001 --- gcc-3.1/libf2c/libI77/configure Tue Jan 15 17:27:05 2002 *************** fi *** 523,528 **** --- 523,553 ---- + # These defines are necessary to get 64-bit file size support. + + cat >> confdefs.h <<\EOF + #define _XOPEN_SOURCE 500L + EOF + + # The following is needed by irix6.2 so that struct timeval is declared. + cat >> confdefs.h <<\EOF + #define _XOPEN_SOURCE_EXTENDED 1 + EOF + + # The following is needed by Solaris2.5.1 so that struct timeval is declared. + cat >> confdefs.h <<\EOF + #define __EXTENSIONS__ 1 + EOF + + cat >> confdefs.h <<\EOF + #define _FILE_OFFSET_BITS 64 + EOF + + cat >> confdefs.h <<\EOF + #define _LARGEFILE_SOURCE 1 + EOF + + *************** fi *** 531,537 **** # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:535: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 556,562 ---- # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:560: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** if test -z "$CC"; then *** 561,567 **** # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:565: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 586,592 ---- # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:590: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** fi *** 612,618 **** # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:616: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 637,643 ---- # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:641: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** fi *** 645,651 **** echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 ! echo "configure:649: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 670,676 ---- echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 ! echo "configure:674: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** else *** 654,660 **** yes; #endif EOF ! if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:658: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no --- 679,685 ---- yes; #endif EOF ! if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:683: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no *************** ac_test_CFLAGS="${CFLAGS+set}" *** 673,679 **** ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 ! echo "configure:677: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 698,704 ---- ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 ! echo "configure:702: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** else *** 705,714 **** fi test "$AR" || AR=ar echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 ! echo "configure:712: checking whether ${MAKE-make} sets \${MAKE}" >&5 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 730,742 ---- fi + LIBTOOL='$(SHELL) ../libtool' + + test "$AR" || AR=ar echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 ! echo "configure:740: checking whether ${MAKE-make} sets \${MAKE}" >&5 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** fi *** 738,744 **** # Sanity check for the cross-compilation case: echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 ! echo "configure:742: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= --- 766,772 ---- # Sanity check for the cross-compilation case: echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 ! echo "configure:770: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= *************** else *** 753,765 **** # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:763: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : --- 781,793 ---- # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:791: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : *************** else *** 770,782 **** rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:780: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : --- 798,810 ---- rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:808: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : *************** else *** 787,799 **** rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:797: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : --- 815,827 ---- rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:825: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : *************** echo "$ac_t""$CPP" 1>&6 *** 819,835 **** ac_safe=`echo "stdio.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for stdio.h""... $ac_c" 1>&6 ! echo "configure:823: checking for stdio.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:833: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* --- 847,863 ---- ac_safe=`echo "stdio.h" | sed 'y%./+-%__p_%'` echo $ac_n "checking for stdio.h""... $ac_c" 1>&6 ! echo "configure:851: checking for stdio.h" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:861: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* *************** fi *** 857,868 **** echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 ! echo "configure:861: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include --- 885,896 ---- echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 ! echo "configure:889: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include *************** else *** 870,876 **** #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:874: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* --- 898,904 ---- #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:902: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* *************** rm -f conftest* *** 887,893 **** if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF --- 915,921 ---- if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF *************** fi *** 905,911 **** if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF --- 933,939 ---- if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF *************** if test "$cross_compiling" = yes; then *** 926,932 **** : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') --- 954,960 ---- : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') *************** if (XOR (islower (i), ISLOWER (i)) || to *** 937,943 **** exit (0); } EOF ! if { (eval echo configure:941: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else --- 965,971 ---- exit (0); } EOF ! if { (eval echo configure:969: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else *************** fi *** 962,973 **** echo $ac_n "checking for posix""... $ac_c" 1>&6 ! echo "configure:966: checking for posix" >&5 if eval "test \"`echo '$''{'g77_cv_header_posix'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include --- 990,1001 ---- echo $ac_n "checking for posix""... $ac_c" 1>&6 ! echo "configure:994: checking for posix" >&5 if eval "test \"`echo '$''{'g77_cv_header_posix'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include *************** echo "$ac_t""$g77_cv_header_posix" 1>&6 *** 993,1004 **** # We can rely on the GNU library being posix-ish. I guess checking the # header isn't actually like checking the functions, though... echo $ac_n "checking for GNU library""... $ac_c" 1>&6 ! echo "configure:997: checking for GNU library" >&5 if eval "test \"`echo '$''{'g77_cv_lib_gnu'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #ifdef __GNU_LIBRARY__ --- 1021,1032 ---- # We can rely on the GNU library being posix-ish. I guess checking the # header isn't actually like checking the functions, though... echo $ac_n "checking for GNU library""... $ac_c" 1>&6 ! echo "configure:1025: checking for GNU library" >&5 if eval "test \"`echo '$''{'g77_cv_lib_gnu'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #ifdef __GNU_LIBRARY__ *************** echo "$ac_t""$g77_cv_lib_gnu" 1>&6 *** 1022,1033 **** # Apparently cygwin needs to be special-cased. echo $ac_n "checking for cyg\`win'32""... $ac_c" 1>&6 ! echo "configure:1026: checking for cyg\`win'32" >&5 if eval "test \"`echo '$''{'g77_cv_sys_cygwin32'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:1054: checking for cyg\`win'32" >&5 if eval "test \"`echo '$''{'g77_cv_sys_cygwin32'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 *** 1050,1061 **** # ditto for mingw32. echo $ac_n "checking for mingw32""... $ac_c" 1>&6 ! echo "configure:1054: checking for mingw32" >&5 if eval "test \"`echo '$''{'g77_cv_sys_mingw32'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:1082: checking for mingw32" >&5 if eval "test \"`echo '$''{'g77_cv_sys_mingw32'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 - ac_safe=`echo "fcntl.h" | sed 'y%./+-%__p_%'` - echo $ac_n "checking for fcntl.h""... $ac_c" 1>&6 - echo "configure:1083: checking for fcntl.h" >&5 - if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then - echo $ac_n "(cached) $ac_c" 1>&6 - else - cat > conftest.$ac_ext < - EOF - ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" - { (eval echo configure:1093: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } - ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` - if test -z "$ac_err"; then - rm -rf conftest* - eval "ac_cv_header_$ac_safe=yes" - else - echo "$ac_err" >&5 - echo "configure: failed program was:" >&5 - cat conftest.$ac_ext >&5 - rm -rf conftest* - eval "ac_cv_header_$ac_safe=no" - fi - rm -f conftest* - fi - if eval "test \"`echo '$ac_cv_header_'$ac_safe`\" = yes"; then - echo "$ac_t""yes" 1>&6 - test $g77_cv_header_posix = yes && cat >> confdefs.h <<\EOF - #define _POSIX_SOURCE 1 - EOF - - else - echo "$ac_t""no" 1>&6 - cat >> confdefs.h <<\EOF - #define NO_FCNTL 1 - EOF - - cat >> confdefs.h <<\EOF - #define OPEN_DECL 1 - EOF - - fi - - echo $ac_n "checking for working const""... $ac_c" 1>&6 ! echo "configure:1127: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 echo $ac_n "checking for working const""... $ac_c" 1>&6 ! echo "configure:1110: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else --- 1160,1166 ---- ; return 0; } EOF ! if { (eval echo configure:1164: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else *************** EOF *** 1198,1209 **** fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 ! echo "configure:1202: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS --- 1181,1192 ---- fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 ! echo "configure:1185: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS *************** fi *** 1236,1247 **** # Apparently positive result on cygwin loses re. NON_UNIX_STDIO # (as of cygwin b18). Likewise on mingw. echo $ac_n "checking for fstat""... $ac_c" 1>&6 ! echo "configure:1240: checking for fstat" >&5 if eval "test \"`echo '$''{'ac_cv_func_fstat'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:1223: checking for fstat" >&5 if eval "test \"`echo '$''{'ac_cv_func_fstat'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_fstat=yes" else --- 1247,1253 ---- ; return 0; } EOF ! if { (eval echo configure:1251: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_fstat=yes" else *************** else *** 1284,1290 **** fi echo $ac_n "checking need for NON_UNIX_STDIO""... $ac_c" 1>&6 ! echo "configure:1288: checking need for NON_UNIX_STDIO" >&5 if test $g77_cv_sys_cygwin32 = yes \ || test $g77_cv_sys_mingw32 = yes \ || test $ac_cv_func_fstat = no; then --- 1267,1273 ---- fi echo $ac_n "checking need for NON_UNIX_STDIO""... $ac_c" 1>&6 ! echo "configure:1271: checking need for NON_UNIX_STDIO" >&5 if test $g77_cv_sys_cygwin32 = yes \ || test $g77_cv_sys_mingw32 = yes \ || test $ac_cv_func_fstat = no; then *************** else *** 1297,1311 **** echo "$ac_t""no" 1>&6 fi for ac_func in ftruncate do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 ! echo "configure:1304: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 fi + for ac_func in fseeko + do + echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 + echo "configure:1287: checking for $ac_func" >&5 + if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext < + /* Override any gcc2 internal prototype to avoid an error. */ + /* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ + char $ac_func(); + + int main() { + + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ + #if defined (__stub_$ac_func) || defined (__stub___$ac_func) + choke me + #else + $ac_func(); + #endif + + ; return 0; } + EOF + if { (eval echo configure:1315: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" + else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" + fi + rm -f conftest* + fi + + if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 + fi + done + + for ac_func in ftello + do + echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 + echo "configure:1342: checking for $ac_func" >&5 + if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then + echo $ac_n "(cached) $ac_c" 1>&6 + else + cat > conftest.$ac_ext < + /* Override any gcc2 internal prototype to avoid an error. */ + /* We use char because int might match the return type of a gcc2 + builtin and then its argument prototype would still apply. */ + char $ac_func(); + + int main() { + + /* The GNU C library defines this for functions which it implements + to always fail with ENOSYS. Some functions are actually named + something starting with __ and the normal name is an alias. */ + #if defined (__stub_$ac_func) || defined (__stub___$ac_func) + choke me + #else + $ac_func(); + #endif + + ; return 0; } + EOF + if { (eval echo configure:1370: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then + rm -rf conftest* + eval "ac_cv_func_$ac_func=yes" + else + echo "configure: failed program was:" >&5 + cat conftest.$ac_ext >&5 + rm -rf conftest* + eval "ac_cv_func_$ac_func=no" + fi + rm -f conftest* + fi + + if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then + echo "$ac_t""yes" 1>&6 + ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` + cat >> confdefs.h <&6 + fi + done + for ac_func in ftruncate do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 ! echo "configure:1397: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else --- 1421,1427 ---- ; return 0; } EOF ! if { (eval echo configure:1425: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else *************** done *** 1355,1366 **** for ac_func in mkstemp do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 ! echo "configure:1359: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:1452: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else --- 1476,1482 ---- ; return 0; } EOF ! if { (eval echo configure:1480: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else *************** done *** 1410,1421 **** for ac_func in tempnam do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 ! echo "configure:1414: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:1507: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else --- 1531,1592 ---- ; return 0; } EOF ! if { (eval echo configure:1535: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then ! rm -rf conftest* ! eval "ac_cv_func_$ac_func=yes" ! else ! echo "configure: failed program was:" >&5 ! cat conftest.$ac_ext >&5 ! rm -rf conftest* ! eval "ac_cv_func_$ac_func=no" ! fi ! rm -f conftest* ! fi ! ! if eval "test \"`echo '$ac_cv_func_'$ac_func`\" = yes"; then ! echo "$ac_t""yes" 1>&6 ! ac_tr_func=HAVE_`echo $ac_func | tr 'abcdefghijklmnopqrstuvwxyz' 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'` ! cat >> confdefs.h <&6 ! fi ! done ! ! for ac_func in tmpnam ! do ! echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 ! echo "configure:1562: checking for $ac_func" >&5 ! if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then ! echo $ac_n "(cached) $ac_c" 1>&6 ! else ! cat > conftest.$ac_ext < ! /* Override any gcc2 internal prototype to avoid an error. */ ! /* We use char because int might match the return type of a gcc2 ! builtin and then its argument prototype would still apply. */ ! char $ac_func(); ! ! int main() { ! ! /* The GNU C library defines this for functions which it implements ! to always fail with ENOSYS. Some functions are actually named ! something starting with __ and the normal name is an alias. */ ! #if defined (__stub_$ac_func) || defined (__stub___$ac_func) ! choke me ! #else ! $ac_func(); ! #endif ! ! ; return 0; } ! EOF ! if { (eval echo configure:1590: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else *************** done *** 1468,1486 **** # However, on my sunos4/gcc setup unistd.h leads us wrongly to believe # we're posix-conformant, so always do the test. echo $ac_n "checking for ansi/posix sprintf result""... $ac_c" 1>&6 ! echo "configure:1472: checking for ansi/posix sprintf result" >&5 if test "$cross_compiling" = yes; then g77_cv_sys_sprintf_ansi=no else cat > conftest.$ac_ext < /* does sprintf return the number of chars transferred? */ main () {char foo[2]; (sprintf(foo, "1") == 1) ? exit(0) : exit(1);} EOF ! if { (eval echo configure:1484: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then g77_cv_sys_sprintf_ansi=yes else --- 1616,1634 ---- # However, on my sunos4/gcc setup unistd.h leads us wrongly to believe # we're posix-conformant, so always do the test. echo $ac_n "checking for ansi/posix sprintf result""... $ac_c" 1>&6 ! echo "configure:1620: checking for ansi/posix sprintf result" >&5 if test "$cross_compiling" = yes; then g77_cv_sys_sprintf_ansi=no else cat > conftest.$ac_ext < /* does sprintf return the number of chars transferred? */ main () {char foo[2]; (sprintf(foo, "1") == 1) ? exit(0) : exit(1);} EOF ! if { (eval echo configure:1632: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then g77_cv_sys_sprintf_ansi=yes else *************** fi *** 1511,1519 **** # define NON_ANSI_RW_MODES on unix (can't hurt) echo $ac_n "checking NON_ANSI_RW_MODES""... $ac_c" 1>&6 ! echo "configure:1515: checking NON_ANSI_RW_MODES" >&5 cat > conftest.$ac_ext <&6 ! echo "configure:1663: checking NON_ANSI_RW_MODES" >&5 cat > conftest.$ac_ext <&6 ! echo "configure:1562: checking for off_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS --- 1706,1717 ---- echo $ac_n "checking for off_t""... $ac_c" 1>&6 ! echo "configure:1710: checking for off_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_off_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS *************** s%@oldincludedir@%$oldincludedir%g *** 1729,1734 **** --- 1877,1883 ---- s%@infodir@%$infodir%g s%@mandir@%$mandir%g s%@CC@%$CC%g + s%@LIBTOOL@%$LIBTOOL%g s%@AR@%$AR%g s%@SET_MAKE@%$SET_MAKE%g s%@CPP@%$CPP%g diff -Nrc3pad gcc-3.0.4/libf2c/libI77/configure.in gcc-3.1/libf2c/libI77/configure.in *** gcc-3.0.4/libf2c/libI77/configure.in Wed May 16 19:03:07 2001 --- gcc-3.1/libf2c/libI77/configure.in Tue Jan 15 17:27:05 2002 *************** *** 1,5 **** # Process this file with autoconf to produce a configure script. ! # Copyright (C) 1995, 1997, 1998, 2001 Free Software Foundation, Inc. # Contributed by Dave Love (d.love@dl.ac.uk). # #This file is part of GNU Fortran. --- 1,5 ---- # Process this file with autoconf to produce a configure script. ! # Copyright (C) 1995, 1997, 1998, 2001, 2002 Free Software Foundation, Inc. # Contributed by Dave Love (d.love@dl.ac.uk). # #This file is part of GNU Fortran. *************** AC_PREREQ(2.12.1) *** 23,28 **** --- 23,38 ---- AC_INIT(ftell_.c) AC_CONFIG_HEADER(config.h) + # These defines are necessary to get 64-bit file size support. + + AC_DEFINE(_XOPEN_SOURCE, 500L, [Get Single Unix Specification semantics]) + # The following is needed by irix6.2 so that struct timeval is declared. + AC_DEFINE(_XOPEN_SOURCE_EXTENDED, 1, [Get Single Unix Specification semantics]) + # The following is needed by Solaris2.5.1 so that struct timeval is declared. + AC_DEFINE(__EXTENSIONS__, 1, [Solaris extensions]) + AC_DEFINE(_FILE_OFFSET_BITS, 64, [Get 64-bit file size support]) + AC_DEFINE(_LARGEFILE_SOURCE, 1, [Define for HP-UX ftello and fseeko extension.]) + dnl Checks for programs. dnl FIXME AC_PROG_CC wants CC to be able to link things, but it may *************** define([AC_PROG_CC_WORKS],[]) *** 33,38 **** --- 43,51 ---- # the makefiles AC_PROG_CC + LIBTOOL='$(SHELL) ../libtool' + AC_SUBST(LIBTOOL) + test "$AR" || AR=ar AC_SUBST(AR) AC_PROG_MAKE_SET *************** AC_CACHE_VAL(g77_cv_sys_mingw32, *** 111,121 **** AC_MSG_RESULT($g77_cv_sys_mingw32) - AC_CHECK_HEADER(fcntl.h, - test $g77_cv_header_posix = yes && AC_DEFINE(_POSIX_SOURCE), - AC_DEFINE(NO_FCNTL, 1, [Define if fcntl.h is missing.]) - AC_DEFINE(OPEN_DECL, 1, [Define if fcntl.h is missing.])) - dnl Checks for typedefs, structures, and compiler characteristics. AC_C_CONST AC_TYPE_SIZE_T --- 124,129 ---- *************** else *** 136,144 **** --- 144,155 ---- AC_MSG_RESULT(no) fi + AC_CHECK_FUNCS(fseeko) + AC_CHECK_FUNCS(ftello) AC_CHECK_FUNCS(ftruncate) AC_CHECK_FUNCS(mkstemp) AC_CHECK_FUNCS(tempnam) + AC_CHECK_FUNCS(tmpnam) # posix will guarantee the right behaviour for sprintf, else we can't be # sure; HEADER_STDC wouldn't be the right check in sunos4, for instance. diff -Nrc3pad gcc-3.0.4/libf2c/libI77/dfe.c gcc-3.1/libf2c/libI77/dfe.c *** gcc-3.0.4/libf2c/libI77/dfe.c Wed May 16 19:03:07 2001 --- gcc-3.1/libf2c/libI77/dfe.c Tue Jul 10 20:39:40 2001 *************** c_dfe(cilist *a) *** 82,88 **** f__fmtbuf=a->cifmt; if(a->cirec <= 0) err(a->cierr,130,"dfe"); ! (void) fseek(f__cf,(long)f__curunit->url * (a->cirec-1),SEEK_SET); f__curunit->uend = 0; return(0); } --- 82,88 ---- f__fmtbuf=a->cifmt; if(a->cirec <= 0) err(a->cierr,130,"dfe"); ! FSEEK(f__cf,(off_t)f__curunit->url * (a->cirec-1),SEEK_SET); f__curunit->uend = 0; return(0); } diff -Nrc3pad gcc-3.0.4/libf2c/libI77/due.c gcc-3.1/libf2c/libI77/due.c *** gcc-3.0.4/libf2c/libI77/due.c Wed May 16 19:03:07 2001 --- gcc-3.1/libf2c/libI77/due.c Tue Jul 10 20:39:40 2001 *************** c_due(cilist *a) *** 25,31 **** if(f__curunit->ufd==NULL) err(a->cierr,114,"cdue"); if(a->cirec <= 0) err(a->cierr,130,"due"); ! fseek(f__cf,(long)(a->cirec-1)*f__curunit->url,SEEK_SET); f__curunit->uend = 0; return(0); } --- 25,31 ---- if(f__curunit->ufd==NULL) err(a->cierr,114,"cdue"); if(a->cirec <= 0) err(a->cierr,130,"due"); ! FSEEK(f__cf,(off_t)(a->cirec-1)*f__curunit->url,SEEK_SET); f__curunit->uend = 0; return(0); } *************** integer e_rdue(Void) *** 60,67 **** f__init = 1; if(f__curunit->url==1 || f__recpos==f__curunit->url) return(0); ! fseek(f__cf,(long)(f__curunit->url-f__recpos),SEEK_CUR); ! if(ftell(f__cf)%f__curunit->url) err(f__elist->cierr,200,"syserr"); return(0); } --- 60,67 ---- f__init = 1; if(f__curunit->url==1 || f__recpos==f__curunit->url) return(0); ! FSEEK(f__cf,(off_t)(f__curunit->url-f__recpos),SEEK_CUR); ! if(FTELL(f__cf)%f__curunit->url) err(f__elist->cierr,200,"syserr"); return(0); } diff -Nrc3pad gcc-3.0.4/libf2c/libI77/endfile.c gcc-3.1/libf2c/libI77/endfile.c *** gcc-3.0.4/libf2c/libI77/endfile.c Mon Dec 3 23:50:11 2001 --- gcc-3.1/libf2c/libI77/endfile.c Sun Dec 2 14:00:56 2001 *************** t_runc(a) alist *a; *** 70,76 **** t_runc(alist *a) #endif { ! long loc, len; unit *b; int rc; FILE *bf; --- 70,76 ---- t_runc(alist *a) #endif { ! off_t loc, len; unit *b; int rc; FILE *bf; *************** t_runc(alist *a) *** 81,89 **** b = &f__units[a->aunit]; if(b->url) return(0); /*don't truncate direct files*/ ! loc=ftell(bf = b->ufd); ! fseek(bf,0L,SEEK_END); ! len=ftell(bf); if (loc >= len || b->useek == 0 || b->ufnm == NULL) return(0); #ifndef HAVE_FTRUNCATE --- 81,89 ---- b = &f__units[a->aunit]; if(b->url) return(0); /*don't truncate direct files*/ ! loc=FTELL(bf = b->ufd); ! FSEEK(bf,0,SEEK_END); ! len=FTELL(bf); if (loc >= len || b->useek == 0 || b->ufnm == NULL) return(0); #ifndef HAVE_FTRUNCATE *************** t_runc(alist *a) *** 111,117 **** } if (!(bf = freopen(b->ufnm, f__w_mode[0], bf))) goto bad1; ! rewind(tf); if (copy(tf, loc, bf)) goto bad1; b->uwrt = 1; --- 111,117 ---- } if (!(bf = freopen(b->ufnm, f__w_mode[0], bf))) goto bad1; ! FSEEK(tf, 0, SEEK_SET); if (copy(tf, loc, bf)) goto bad1; b->uwrt = 1; *************** t_runc(alist *a) *** 121,127 **** fclose(bf); if (!(bf = fopen(b->ufnm, f__w_mode[3]))) goto bad; ! fseek(bf,0L,SEEK_END); b->urw = 3; } #endif --- 121,127 ---- fclose(bf); if (!(bf = fopen(b->ufnm, f__w_mode[3]))) goto bad; ! FSEEK(bf,0,SEEK_END); b->urw = 3; } #endif *************** done: *** 131,138 **** f__cf = b->ufd = bf; #else /* !defined(HAVE_FTRUNCATE) */ fflush(b->ufd); ! rc = ftruncate(fileno(b->ufd), (off_t)loc); ! fseek(bf,loc,SEEK_SET); #endif /* !defined(HAVE_FTRUNCATE) */ if (rc) err(a->aerr,111,"endfile"); --- 131,138 ---- f__cf = b->ufd = bf; #else /* !defined(HAVE_FTRUNCATE) */ fflush(b->ufd); ! rc = ftruncate(fileno(b->ufd), loc); ! FSEEK(bf,loc,SEEK_SET); #endif /* !defined(HAVE_FTRUNCATE) */ if (rc) err(a->aerr,111,"endfile"); diff -Nrc3pad gcc-3.0.4/libf2c/libI77/err.c gcc-3.1/libf2c/libI77/err.c *** gcc-3.0.4/libf2c/libI77/err.c Wed May 16 19:03:07 2001 --- gcc-3.1/libf2c/libI77/err.c Sat Jul 7 18:51:58 2001 *************** f__nowreading(x) unit *x; *** 210,216 **** f__nowreading(unit *x) #endif { ! long loc; int ufmt, urw; extern char *f__r_mode[], *f__w_mode[]; --- 210,216 ---- f__nowreading(unit *x) #endif { ! off_t loc; int ufmt, urw; extern char *f__r_mode[], *f__w_mode[]; *************** f__nowreading(unit *x) *** 219,225 **** if (!x->ufnm) goto cantread; ufmt = x->url ? 0 : x->ufmt; ! loc = ftell(x->ufd); urw = 3; if (!freopen(x->ufnm, f__w_mode[ufmt|2], x->ufd)) { urw = 1; --- 219,225 ---- if (!x->ufnm) goto cantread; ufmt = x->url ? 0 : x->ufmt; ! loc = FTELL(x->ufd); urw = 3; if (!freopen(x->ufnm, f__w_mode[ufmt|2], x->ufd)) { urw = 1; *************** f__nowreading(unit *x) *** 229,235 **** return 1; } } ! fseek(x->ufd,loc,SEEK_SET); x->urw = urw; done: x->uwrt = 0; --- 229,235 ---- return 1; } } ! FSEEK(x->ufd,loc,SEEK_SET); x->urw = urw; done: x->uwrt = 0; *************** f__nowwriting(x) unit *x; *** 241,247 **** f__nowwriting(unit *x) #endif { ! long loc; int ufmt; extern char *f__w_mode[]; --- 241,247 ---- f__nowwriting(unit *x) #endif { ! off_t loc; int ufmt; extern char *f__w_mode[]; *************** f__nowwriting(unit *x) *** 257,263 **** x->urw = 2; } else { ! loc=ftell(x->ufd); if (!(f__cf = x->ufd = freopen(x->ufnm, f__w_mode[ufmt |= 2], x->ufd))) { --- 257,263 ---- x->urw = 2; } else { ! loc=FTELL(x->ufd); if (!(f__cf = x->ufd = freopen(x->ufnm, f__w_mode[ufmt |= 2], x->ufd))) { *************** f__nowwriting(unit *x) *** 267,273 **** return(1); } x->urw = 3; ! fseek(x->ufd,loc,SEEK_SET); } done: x->uwrt = 1; --- 267,273 ---- return(1); } x->urw = 3; ! FSEEK(x->ufd,loc,SEEK_SET); } done: x->uwrt = 1; diff -Nrc3pad gcc-3.0.4/libf2c/libI77/fio.h gcc-3.1/libf2c/libI77/fio.h *** gcc-3.0.4/libf2c/libI77/fio.h Tue May 19 10:51:07 1998 --- gcc-3.1/libf2c/libI77/fio.h Tue Jan 15 17:27:05 2002 *************** *** 1,3 **** --- 1,4 ---- + #include #include #include #ifndef NULL *************** *** 14,19 **** --- 15,30 ---- #define SEEK_END 2 #endif + /* Only use fseeko/ftello if they are both there. */ + + #if defined (HAVE_FSEEKO) && defined (HAVE_FTELLO) + #define FSEEK fseeko + #define FTELL ftello + #else + #define FSEEK fseek + #define FTELL ftell + #endif + #if defined (MSDOS) && !defined (GO32) #ifndef NON_UNIX_STDIO #define NON_UNIX_STDIO diff -Nrc3pad gcc-3.0.4/libf2c/libI77/ftell_.c gcc-3.1/libf2c/libI77/ftell_.c *** gcc-3.0.4/libf2c/libI77/ftell_.c Wed May 16 19:03:07 2001 --- gcc-3.1/libf2c/libI77/ftell_.c Tue Jul 10 20:39:40 2001 *************** G77_ftell_0 (integer *Unit) *** 22,28 **** #endif { FILE *f; ! return (f = unit_chk(*Unit, "ftell")) ? ftell(f) : -1L; } integer --- 22,28 ---- #endif { FILE *f; ! return (f = unit_chk(*Unit, "ftell")) ? (integer) FTELL(f) : -1L; } integer *************** G77_fseek_0 (integer *Unit, integer *off *** 43,47 **** w = wohin[w]; #endif return !(f = unit_chk(*Unit, "fseek")) ! || fseek(f, *offset, w) ? 1 : 0; } --- 43,47 ---- w = wohin[w]; #endif return !(f = unit_chk(*Unit, "fseek")) ! || FSEEK(f, (off_t) *offset, w) ? 1 : 0; } diff -Nrc3pad gcc-3.0.4/libf2c/libI77/inquire.c gcc-3.1/libf2c/libI77/inquire.c *** gcc-3.0.4/libf2c/libI77/inquire.c Wed Jun 13 21:03:22 2001 --- gcc-3.1/libf2c/libI77/inquire.c Fri Jul 6 12:09:39 2001 *************** integer f_inqu(inlist *a) *** 100,106 **** if(a->inrecl!=NULL && p!=NULL) *a->inrecl=p->url; if(a->innrec!=NULL && p!=NULL && p->url>0) ! *a->innrec=ftell(p->ufd)/p->url+1; if(a->inblank && p!=NULL && p->ufmt) if(p->ublnk) b_char("ZERO",a->inblank,a->inblanklen); --- 100,106 ---- if(a->inrecl!=NULL && p!=NULL) *a->inrecl=p->url; if(a->innrec!=NULL && p!=NULL && p->url>0) ! *a->innrec=FTELL(p->ufd)/p->url+1; if(a->inblank && p!=NULL && p->ufmt) if(p->ublnk) b_char("ZERO",a->inblank,a->inblanklen); diff -Nrc3pad gcc-3.0.4/libf2c/libI77/open.c gcc-3.1/libf2c/libI77/open.c *** gcc-3.0.4/libf2c/libI77/open.c Wed May 16 19:03:07 2001 --- gcc-3.1/libf2c/libI77/open.c Tue Jan 15 17:27:05 2002 *************** integer f_open(olist *a) *** 231,237 **** (void) strcpy (buf, s); free (s); #else /* ! defined (HAVE_TEMPNAM) */ ! #ifdef _POSIX_SOURCE tmpnam(buf); #else (void) strcpy(buf,"tmp.FXXXXXX"); --- 231,237 ---- (void) strcpy (buf, s); free (s); #else /* ! defined (HAVE_TEMPNAM) */ ! #ifdef HAVE_TMPNAM tmpnam(buf); #else (void) strcpy(buf,"tmp.FXXXXXX"); *************** integer f_open(olist *a) *** 281,289 **** #endif if(b->useek) if (a->orl) ! rewind(b->ufd); else if ((s = a->oacc) && (*s == 'a' || *s == 'A') ! && fseek(b->ufd, 0L, SEEK_END)) opnerr(a->oerr,129,"open"); return(0); } --- 281,289 ---- #endif if(b->useek) if (a->orl) ! FSEEK(b->ufd, 0, SEEK_SET); else if ((s = a->oacc) && (*s == 'a' || *s == 'A') ! && FSEEK(b->ufd, 0, SEEK_END)) opnerr(a->oerr,129,"open"); return(0); } diff -Nrc3pad gcc-3.0.4/libf2c/libI77/rawio.h gcc-3.1/libf2c/libI77/rawio.h *** gcc-3.0.4/libf2c/libI77/rawio.h Tue May 19 10:51:13 1998 --- gcc-3.1/libf2c/libI77/rawio.h Thu Jan 1 00:00:00 1970 *************** *** 1,45 **** - #ifndef KR_headers - #if defined (MSDOS) && !defined (GO32) - #include "io.h" - #ifndef WATCOM - #define close _close - #define creat _creat - #define open _open - #define read _read - #define write _write - #endif /*WATCOM*/ - #endif /*MSDOS*/ - #ifdef __cplusplus - extern "C" { - #endif - #if !(defined (MSDOS) && !defined (GO32)) - #ifdef OPEN_DECL - extern int creat(const char*,int), open(const char*,int); - #endif - extern int close(int); - #if !(defined(_WIN32) && !defined(__CYGWIN32__)) - extern int read(int,void*,size_t), write(int,void*,size_t); - #endif - extern int unlink(const char*); - #ifndef _POSIX_SOURCE - #ifndef NON_UNIX_STDIO - extern FILE *fdopen(int, const char*); - #endif - #endif - #endif /*KR_HEADERS*/ - - extern char *mktemp(char*); - - #ifdef __cplusplus - } - #endif - #endif - - #ifndef NO_FCNTL - #include - #endif - - #ifndef O_WRONLY - #define O_RDONLY 0 - #define O_WRONLY 1 - #endif --- 0 ---- diff -Nrc3pad gcc-3.0.4/libf2c/libI77/rdfmt.c gcc-3.1/libf2c/libI77/rdfmt.c *** gcc-3.0.4/libf2c/libI77/rdfmt.c Wed May 16 19:03:07 2001 --- gcc-3.1/libf2c/libI77/rdfmt.c Fri Jul 6 12:09:39 2001 *************** rd_ed(struct syl *p, char *ptr, ftnlen l *** 471,477 **** f__icptr += f__cursor; } else if(f__curunit && f__curunit->useek) ! (void) fseek(f__cf,(long) f__cursor,SEEK_CUR); else err(f__elist->cierr,106,"fmt"); f__recpos += f__cursor; --- 471,477 ---- f__icptr += f__cursor; } else if(f__curunit && f__curunit->useek) ! FSEEK(f__cf,(off_t)f__cursor,SEEK_CUR); else err(f__elist->cierr,106,"fmt"); f__recpos += f__cursor; diff -Nrc3pad gcc-3.0.4/libf2c/libI77/rewind.c gcc-3.1/libf2c/libI77/rewind.c *** gcc-3.0.4/libf2c/libI77/rewind.c Sat Sep 4 15:09:18 1999 --- gcc-3.1/libf2c/libI77/rewind.c Sat Jul 7 18:51:58 2001 *************** *** 1,3 **** --- 1,4 ---- + #include "config.h" #include "f2c.h" #include "fio.h" #ifdef KR_headers *************** integer f_rew(alist *a) *** 20,26 **** (void) t_runc(a); b->uwrt = 3; } ! rewind(b->ufd); b->uend=0; return(0); } --- 21,27 ---- (void) t_runc(a); b->uwrt = 3; } ! FSEEK(b->ufd, 0, SEEK_SET); b->uend=0; return(0); } diff -Nrc3pad gcc-3.0.4/libf2c/libI77/sfe.c gcc-3.1/libf2c/libI77/sfe.c *** gcc-3.0.4/libf2c/libI77/sfe.c Sun Mar 12 19:20:47 2000 --- gcc-3.1/libf2c/libI77/sfe.c Sat Jul 7 18:51:58 2001 *************** *** 1,4 **** --- 1,5 ---- /* sequential formatted external common routines*/ + #include "config.h" #include "f2c.h" #include "fio.h" diff -Nrc3pad gcc-3.0.4/libf2c/libI77/sue.c gcc-3.1/libf2c/libI77/sue.c *** gcc-3.0.4/libf2c/libI77/sue.c Wed May 16 19:03:07 2001 --- gcc-3.1/libf2c/libI77/sue.c Fri Jul 6 12:09:39 2001 *************** *** 2,8 **** #include "f2c.h" #include "fio.h" extern uiolen f__reclen; ! long f__recloc; #ifdef KR_headers c_sue(a) cilist *a; --- 2,8 ---- #include "f2c.h" #include "fio.h" extern uiolen f__reclen; ! off_t f__recloc; #ifdef KR_headers c_sue(a) cilist *a; *************** integer s_wsue(cilist *a) *** 62,88 **** f__reclen=0; if(f__curunit->uwrt != 1 && f__nowwriting(f__curunit)) err(a->cierr, errno, "write start"); ! f__recloc=ftell(f__cf); ! (void) fseek(f__cf,(long)sizeof(uiolen),SEEK_CUR); return(0); } integer e_wsue(Void) ! { long loc; f__init = 1; fwrite((char *)&f__reclen,sizeof(uiolen),1,f__cf); #ifdef ALWAYS_FLUSH if (fflush(f__cf)) err(f__elist->cierr, errno, "write end"); #endif ! loc=ftell(f__cf); ! fseek(f__cf,f__recloc,SEEK_SET); fwrite((char *)&f__reclen,sizeof(uiolen),1,f__cf); ! fseek(f__cf,loc,SEEK_SET); return(0); } integer e_rsue(Void) { f__init = 1; ! (void) fseek(f__cf,(long)(f__reclen-f__recpos+sizeof(uiolen)),SEEK_CUR); return(0); } --- 62,88 ---- f__reclen=0; if(f__curunit->uwrt != 1 && f__nowwriting(f__curunit)) err(a->cierr, errno, "write start"); ! f__recloc=FTELL(f__cf); ! FSEEK(f__cf,(off_t)sizeof(uiolen),SEEK_CUR); return(0); } integer e_wsue(Void) ! { off_t loc; f__init = 1; fwrite((char *)&f__reclen,sizeof(uiolen),1,f__cf); #ifdef ALWAYS_FLUSH if (fflush(f__cf)) err(f__elist->cierr, errno, "write end"); #endif ! loc=FTELL(f__cf); ! FSEEK(f__cf,f__recloc,SEEK_SET); fwrite((char *)&f__reclen,sizeof(uiolen),1,f__cf); ! FSEEK(f__cf,loc,SEEK_SET); return(0); } integer e_rsue(Void) { f__init = 1; ! FSEEK(f__cf,(off_t)(f__reclen-f__recpos+sizeof(uiolen)),SEEK_CUR); return(0); } diff -Nrc3pad gcc-3.0.4/libf2c/libI77/wsfe.c gcc-3.1/libf2c/libI77/wsfe.c *** gcc-3.0.4/libf2c/libI77/wsfe.c Wed Jul 1 10:30:22 1998 --- gcc-3.1/libf2c/libI77/wsfe.c Sat Jul 7 18:51:58 2001 *************** *** 1,4 **** --- 1,5 ---- /*write sequential formatted external*/ + #include "config.h" #include "f2c.h" #include "fio.h" #include "fmt.h" diff -Nrc3pad gcc-3.0.4/libf2c/libU77/Makefile.in gcc-3.1/libf2c/libU77/Makefile.in *** gcc-3.0.4/libf2c/libU77/Makefile.in Wed Jan 24 22:24:48 2001 --- gcc-3.1/libf2c/libU77/Makefile.in Tue Dec 4 09:53:18 2001 *************** *** 1,5 **** # Makefile for GNU F77 compiler runtime, libc interface. ! # Copyright (C) 1995-1998 Free Software Foundation, Inc. # Contributed by Dave Love (d.love@dl.ac.uk). # #This file is part of the GNU Fortran libU77 library. --- 1,5 ---- # Makefile for GNU F77 compiler runtime, libc interface. ! # Copyright (C) 1995-1998, 2001 Free Software Foundation, Inc. # Contributed by Dave Love (d.love@dl.ac.uk). # #This file is part of the GNU Fortran libU77 library. *************** VPATH = @srcdir@ *** 30,44 **** DEFS = @DEFS@ LIBS = @LIBS@ - LIBG2C = ../libg2c.a - F2C_H_DIR = @srcdir@/.. G2C_H_DIR = .. CC = @CC@ CFLAGS = @CFLAGS@ CPPFLAGS = @CPPFLAGS@ - AR = @AR@ - ARFLAGS = rc @SET_MAKE@ SHELL = /bin/sh --- 30,40 ---- *************** ALL_CFLAGS = -I. -I$(srcdir) -I$(F2C_H_D *** 54,74 **** G77DIR = ../../../gcc/ .SUFFIXES: ! .SUFFIXES: .c .o ! .c.o: ! $(CC) -c -DSkip_f2c_Undefs $(ALL_CFLAGS) $< ! OBJS = VersionU.o gerror_.o perror_.o ierrno_.o itime_.o time_.o \ ! unlink_.o fnum_.o getpid_.o getuid_.o getgid_.o kill_.o rand_.o \ ! srand_.o irand_.o sleep_.o idate_.o ctime_.o etime_.o \ ! dtime_.o isatty_.o ltime_.o fstat_.o stat_.o \ ! lstat_.o access_.o link_.o getlog_.o ttynam_.o getcwd_.o symlnk_.o \ ! vxttime_.o vxtidate_.o gmtime_.o fdate_.o secnds_.o \ ! bes.o dbes.o \ ! chdir_.o chmod_.o lnblnk_.o hostnm_.o rename_.o fgetc_.o fputc_.o \ ! umask_.o sys_clock_.o date_.o second_.o flush1_.o mclock_.o \ ! alarm_.o datetime_.o SRCS = Version.c gerror_.c perror_.c ierrno_.c itime_.c time_.c \ unlink_.c fnum_.c getpid_.c getuid_.c getgid_.c kill_.c rand_.c \ srand_.c irand_.c sleep_.c idate_.c ctime_.c etime_.c \ --- 50,70 ---- G77DIR = ../../../gcc/ .SUFFIXES: ! .SUFFIXES: .c .lo ! .c.lo: ! @LIBTOOL@ --mode=compile $(CC) -c -DSkip_f2c_Undefs $(ALL_CFLAGS) $< ! OBJS = VersionU.lo gerror_.lo perror_.lo ierrno_.lo itime_.lo time_.lo \ ! unlink_.lo fnum_.lo getpid_.lo getuid_.lo getgid_.lo kill_.lo rand_.lo \ ! srand_.lo irand_.lo sleep_.lo idate_.lo ctime_.lo etime_.lo \ ! dtime_.lo isatty_.lo ltime_.lo fstat_.lo stat_.lo \ ! lstat_.lo access_.lo link_.lo getlog_.lo ttynam_.lo getcwd_.lo symlnk_.lo \ ! vxttime_.lo vxtidate_.lo gmtime_.lo fdate_.lo secnds_.lo \ ! bes.lo dbes.lo \ ! chdir_.lo chmod_.lo lnblnk_.lo hostnm_.lo rename_.lo fgetc_.lo fputc_.lo \ ! umask_.lo sys_clock_.lo date_.lo second_.lo flush1_.lo mclock_.lo \ ! alarm_.lo datetime_.lo SRCS = Version.c gerror_.c perror_.c ierrno_.c itime_.c time_.c \ unlink_.c fnum_.c getpid_.c getuid_.c getgid_.c kill_.c rand_.c \ srand_.c irand_.c sleep_.c idate_.c ctime_.c etime_.c \ *************** SRCS = Version.c gerror_.c perror_.c ie *** 83,99 **** all: ../s-libu77 ../s-libu77: $(OBJS) ! echo timestamp > ../s-libu77 ! ! archive: ! $(AR) $(ARFLAGS) $(LIBG2C) $(OBJS) Makefile: Makefile.in config.status $(SHELL) config.status config.status: configure rm -f config.cache ! CONFIG_SITE=no-such-file CC='$(CC)' AR='$(AR)' CFLAGS='$(CFLAGS)' \ CPPFLAGS='$(CPPFLAGS)' $(SHELL) config.status --recheck ${srcdir}/configure: configure.in --- 79,95 ---- all: ../s-libu77 ../s-libu77: $(OBJS) ! -rm -f $@.T $@ ! objs='$(OBJS)'; for name in $$objs; do \ ! echo libU77/$${name} >> $@.T; done ! mv $@.T $@ Makefile: Makefile.in config.status $(SHELL) config.status config.status: configure rm -f config.cache ! CONFIG_SITE=no-such-file CC='$(CC)' CFLAGS='$(CFLAGS)' \ CPPFLAGS='$(CPPFLAGS)' $(SHELL) config.status --recheck ${srcdir}/configure: configure.in *************** stamp-h: config.hin config.status *** 109,175 **** $(SHELL) config.status echo timestamp > stamp-h ! VersionU.o: Version.c ! $(CC) -c $(ALL_CFLAGS) -o $@ $(srcdir)/Version.c $(OBJS): $(F2C_H_DIR)/f2c.h $(G2C_H_DIR)/g2c.h config.h ! access_.o: access_.c ! ctime_.o: ctime_.c ! dtime_.o: dtime_.c ! etime_.o: etime_.c ! fnum_.o: fnum_.c $(F2C_H_DIR)/libI77/fio.h ! fstat_.o: fstat_.c ! gerror_.o: gerror_.c ! getcwd_.o: getcwd_.c ! getgid_.o: getgid_.c ! getlog_.o: getlog_.c ! getpid_.o: getpid_.c ! getuid_.o: getuid_.c ! idate_.o: idate_.c ! ierrno_.o: ierrno_.c ! irand_.o: irand_.c ! isatty_.o: isatty_.c $(F2C_H_DIR)/libI77/fio.h ! itime_.o: itime_.c ! kill_.o: kill_.c ! link_.o: link_.c ! loc_.o: loc_.c ! lstat_.o: lstat_.c ! ltime_.o: ltime_.c ! perror_.o: perror_.c ! qsort.o: qsort.c ! qsort_.o: qsort_.c ! rand_.o: rand_.c ! rename_.o: rename_.c ! second_.o: second_.c ! sleep_.o: sleep_.c ! srand_.o: srand_.c ! stat_.o: stat_.c ! symlnk_.o: symlnk_.c ! time_.o: time_.c ! ttynam_.o: ttynam_.c ! unlink_.o: unlink_.c ! wait_.o: wait_.c ! vxttime_.o: vxttime_.c ! vtxidate_.o: vxtidate_.c ! fdate_.o: fdate_.c ! gmtime_.o: gmtime_.c ! secnds_.o: secnds_.c ! bes.o: bes.c ! dbes.o: dbes.c ! lnblnk_.o: lnblnk_.c ! chmod_.o: chmod_.c ! chdir_.o: chdir_.c ! hostnm_.o: hostnm_.c ! rename_.o: rename_.c ! fputc_.o: fputc_.c ! fgetc_.o: fgetc_.c ! sys_clock_.o: sys_clock_.c ! date_.o: date_.c ! umask_.o: umask_.c ! flush1_.o: flush1_.c ! mclock_.o: mclock_.c ! alarm_.o: alarm_.c ! datetime_.o: datetime_.c check: -$(G77DIR)g77 -B$(G77DIR) -L.. -g $(srcdir)/u77-test.f \ --- 105,171 ---- $(SHELL) config.status echo timestamp > stamp-h ! VersionU.lo: Version.c ! @LIBTOOL@ --mode=compile $(CC) -c $(ALL_CFLAGS) $(srcdir)/Version.c -o $@ $(OBJS): $(F2C_H_DIR)/f2c.h $(G2C_H_DIR)/g2c.h config.h ! access_.lo: access_.c ! ctime_.lo: ctime_.c ! dtime_.lo: dtime_.c ! etime_.lo: etime_.c ! fnum_.lo: fnum_.c $(F2C_H_DIR)/libI77/fio.h ! fstat_.lo: fstat_.c ! gerror_.lo: gerror_.c ! getcwd_.lo: getcwd_.c ! getgid_.lo: getgid_.c ! getlog_.lo: getlog_.c ! getpid_.lo: getpid_.c ! getuid_.lo: getuid_.c ! idate_.lo: idate_.c ! ierrno_.lo: ierrno_.c ! irand_.lo: irand_.c ! isatty_.lo: isatty_.c $(F2C_H_DIR)/libI77/fio.h ! itime_.lo: itime_.c ! kill_.lo: kill_.c ! link_.lo: link_.c ! loc_.lo: loc_.c ! lstat_.lo: lstat_.c ! ltime_.lo: ltime_.c ! perror_.lo: perror_.c ! qsort.lo: qsort.c ! qsort_.lo: qsort_.c ! rand_.lo: rand_.c ! rename_.lo: rename_.c ! second_.lo: second_.c ! sleep_.lo: sleep_.c ! srand_.lo: srand_.c ! stat_.lo: stat_.c ! symlnk_.lo: symlnk_.c ! time_.lo: time_.c ! ttynam_.lo: ttynam_.c ! unlink_.lo: unlink_.c ! wait_.lo: wait_.c ! vxttime_.lo: vxttime_.c ! vtxidate_.lo: vxtidate_.c ! fdate_.lo: fdate_.c ! gmtime_.lo: gmtime_.c ! secnds_.lo: secnds_.c ! bes.lo: bes.c ! dbes.lo: dbes.c ! lnblnk_.lo: lnblnk_.c ! chmod_.lo: chmod_.c ! chdir_.lo: chdir_.c ! hostnm_.lo: hostnm_.c ! rename_.lo: rename_.c ! fputc_.lo: fputc_.c ! fgetc_.lo: fgetc_.c ! sys_clock_.lo: sys_clock_.c ! date_.lo: date_.c ! umask_.lo: umask_.c ! flush1_.lo: flush1_.c ! mclock_.lo: mclock_.c ! alarm_.lo: alarm_.c ! datetime_.lo: datetime_.c check: -$(G77DIR)g77 -B$(G77DIR) -L.. -g $(srcdir)/u77-test.f \ *************** check: *** 179,185 **** install uninstall install-strip dist installcheck installdirs: mostlyclean: ! rm -f *.o a.out clean: mostlyclean rm -f config.log ../s-libu77 --- 175,182 ---- install uninstall install-strip dist installcheck installdirs: mostlyclean: ! rm -f *.o *.lo a.out ! rm -rf .libs clean: mostlyclean rm -f config.log ../s-libu77 diff -Nrc3pad gcc-3.0.4/libf2c/libU77/Version.c gcc-3.1/libf2c/libU77/Version.c *** gcc-3.0.4/libf2c/libU77/Version.c Wed Feb 20 18:48:23 2002 --- gcc-3.1/libf2c/libU77/Version.c Tue May 14 21:42:35 2002 *************** *** 1,6 **** static char junk[] = "\n@(#) LIBU77 VERSION 19980709\n"; ! char __G77_LIBU77_VERSION__[] = "0.5.26 20020220 (release)"; #include --- 1,6 ---- static char junk[] = "\n@(#) LIBU77 VERSION 19980709\n"; ! char __G77_LIBU77_VERSION__[] = "3.1 20020514 (release)"; #include diff -Nrc3pad gcc-3.0.4/libf2c/libU77/config.hin gcc-3.1/libf2c/libU77/config.hin *** gcc-3.0.4/libf2c/libU77/config.hin Thu Oct 14 08:05:09 1999 --- gcc-3.1/libf2c/libU77/config.hin Sun Sep 30 22:50:54 2001 *************** *** 33,44 **** /* Define as the path of the `chmod' program. */ #undef CHMOD_PATH - /* Define if your gettimeofday takes only one argument. */ - #undef GETTIMEOFDAY_ONE_ARGUMENT - - /* Define if your gettimeofday takes a time zome argument. */ - #undef HAVE_TIMEZONE - /* Define if you have the alarm function. */ #undef HAVE_ALARM --- 33,38 ---- *************** *** 60,68 **** /* Define if you have the getrusage function. */ #undef HAVE_GETRUSAGE - /* Define if you have the gettimeofday function. */ - #undef HAVE_GETTIMEOFDAY - /* Define if you have the getuid function. */ #undef HAVE_GETUID --- 54,59 ---- *************** *** 110,112 **** --- 101,116 ---- /* Define if you have the header file. */ #undef HAVE_UNISTD_H + + /* Get Single Unix Specification semantics */ + #undef _XOPEN_SOURCE + + /* Get Single Unix Specification semantics */ + #undef _XOPEN_SOURCE_EXTENDED + + /* Solaris extensions */ + #undef __EXTENSIONS__ + + /* Get 64-bit file size support */ + #undef _FILE_OFFSET_BITS + diff -Nrc3pad gcc-3.0.4/libf2c/libU77/configure gcc-3.1/libf2c/libU77/configure *** gcc-3.0.4/libf2c/libU77/configure Fri Feb 9 07:14:35 2001 --- gcc-3.1/libf2c/libU77/configure Tue Jan 29 13:21:08 2002 *************** fi *** 523,528 **** --- 523,549 ---- + # These defines are necessary to get 64-bit file size support. + + cat >> confdefs.h <<\EOF + #define _XOPEN_SOURCE 500L + EOF + + # The following is needed by irix6.2 so that struct timeval is declared. + cat >> confdefs.h <<\EOF + #define _XOPEN_SOURCE_EXTENDED 1 + EOF + + # The following is needed by Solaris2.5.1 so that struct timeval is declared. + cat >> confdefs.h <<\EOF + #define __EXTENSIONS__ 1 + EOF + + cat >> confdefs.h <<\EOF + #define _FILE_OFFSET_BITS 64 + EOF + + *************** fi *** 531,537 **** # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:535: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 552,558 ---- # Extract the first word of "gcc", so it can be a program name with args. set dummy gcc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:556: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** if test -z "$CC"; then *** 561,567 **** # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:565: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 582,588 ---- # Extract the first word of "cc", so it can be a program name with args. set dummy cc; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:586: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** fi *** 612,618 **** # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:616: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 633,639 ---- # Extract the first word of "cl", so it can be a program name with args. set dummy cl; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:637: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_prog_CC'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** fi *** 645,651 **** echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 ! echo "configure:649: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 666,672 ---- echo $ac_n "checking whether we are using GNU C""... $ac_c" 1>&6 ! echo "configure:670: checking whether we are using GNU C" >&5 if eval "test \"`echo '$''{'ac_cv_prog_gcc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** else *** 654,660 **** yes; #endif EOF ! if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:658: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no --- 675,681 ---- yes; #endif EOF ! if { ac_try='${CC-cc} -E conftest.c'; { (eval echo configure:679: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; }; } | egrep yes >/dev/null 2>&1; then ac_cv_prog_gcc=yes else ac_cv_prog_gcc=no *************** ac_test_CFLAGS="${CFLAGS+set}" *** 673,679 **** ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 ! echo "configure:677: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 694,700 ---- ac_save_CFLAGS="$CFLAGS" CFLAGS= echo $ac_n "checking whether ${CC-cc} accepts -g""... $ac_c" 1>&6 ! echo "configure:698: checking whether ${CC-cc} accepts -g" >&5 if eval "test \"`echo '$''{'ac_cv_prog_cc_g'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** else *** 704,709 **** --- 725,734 ---- fi fi + + LIBTOOL='$(SHELL) ../libtool' + + if test "$CROSS";then ac_cv_c_cross=yes else *************** fi *** 713,719 **** test "$AR" || AR=ar echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 ! echo "configure:717: checking whether ${MAKE-make} sets \${MAKE}" >&5 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 738,744 ---- test "$AR" || AR=ar echo $ac_n "checking whether ${MAKE-make} sets \${MAKE}""... $ac_c" 1>&6 ! echo "configure:742: checking whether ${MAKE-make} sets \${MAKE}" >&5 set dummy ${MAKE-make}; ac_make=`echo "$2" | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_prog_make_${ac_make}_set'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** fi *** 743,749 **** # Extract the first word of "chmod", so it can be a program name with args. set dummy chmod; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:747: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_ac_cv_prog_chmod'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else --- 768,774 ---- # Extract the first word of "chmod", so it can be a program name with args. set dummy chmod; ac_word=$2 echo $ac_n "checking for $ac_word""... $ac_c" 1>&6 ! echo "configure:772: checking for $ac_word" >&5 if eval "test \"`echo '$''{'ac_cv_path_ac_cv_prog_chmod'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else *************** else *** 787,793 **** fi echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 ! echo "configure:791: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= --- 812,818 ---- fi echo $ac_n "checking how to run the C preprocessor""... $ac_c" 1>&6 ! echo "configure:816: checking how to run the C preprocessor" >&5 # On Suns, sometimes $CPP names a directory. if test -n "$CPP" && test -d "$CPP"; then CPP= *************** else *** 802,814 **** # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:812: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : --- 827,839 ---- # On the NeXT, cc -E runs the code through the compiler's parser, # not just through cpp. cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:837: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : *************** else *** 819,831 **** rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:829: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : --- 844,856 ---- rm -rf conftest* CPP="${CC-cc} -E -traditional-cpp" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:854: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : *************** else *** 836,848 **** rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:846: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : --- 861,873 ---- rm -rf conftest* CPP="${CC-cc} -nologo -E" cat > conftest.$ac_ext < Syntax Error EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:871: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then : *************** fi *** 867,878 **** echo "$ac_t""$CPP" 1>&6 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 ! echo "configure:871: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include --- 892,903 ---- echo "$ac_t""$CPP" 1>&6 echo $ac_n "checking for ANSI C header files""... $ac_c" 1>&6 ! echo "configure:896: checking for ANSI C header files" >&5 if eval "test \"`echo '$''{'ac_cv_header_stdc'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include *************** else *** 880,886 **** #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:884: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* --- 905,911 ---- #include EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:909: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* *************** rm -f conftest* *** 897,903 **** if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF --- 922,928 ---- if test $ac_cv_header_stdc = yes; then # SunOS 4.x string.h does not declare mem*, contrary to ANSI. cat > conftest.$ac_ext < EOF *************** fi *** 915,921 **** if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF --- 940,946 ---- if test $ac_cv_header_stdc = yes; then # ISC 2.0.2 stdlib.h does not declare free, contrary to ANSI. cat > conftest.$ac_ext < EOF *************** if test "$cross_compiling" = yes; then *** 936,942 **** : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') --- 961,967 ---- : else cat > conftest.$ac_ext < #define ISLOWER(c) ('a' <= (c) && (c) <= 'z') *************** if (XOR (islower (i), ISLOWER (i)) || to *** 947,953 **** exit (0); } EOF ! if { (eval echo configure:951: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else --- 972,978 ---- exit (0); } EOF ! if { (eval echo configure:976: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then : else *************** fi *** 972,983 **** echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 ! echo "configure:976: checking whether time.h and sys/time.h may both be included" >&5 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include --- 997,1008 ---- echo $ac_n "checking whether time.h and sys/time.h may both be included""... $ac_c" 1>&6 ! echo "configure:1001: checking whether time.h and sys/time.h may both be included" >&5 if eval "test \"`echo '$''{'ac_cv_header_time'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include *************** int main() { *** 986,992 **** struct tm *tp; ; return 0; } EOF ! if { (eval echo configure:990: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_time=yes else --- 1011,1017 ---- struct tm *tp; ; return 0; } EOF ! if { (eval echo configure:1015: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_header_time=yes else *************** for ac_hdr in limits.h unistd.h sys/time *** 1011,1027 **** do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 ! echo "configure:1015: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:1025: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* --- 1036,1052 ---- do ac_safe=`echo "$ac_hdr" | sed 'y%./+-%__p_%'` echo $ac_n "checking for $ac_hdr""... $ac_c" 1>&6 ! echo "configure:1040: checking for $ac_hdr" >&5 if eval "test \"`echo '$''{'ac_cv_header_$ac_safe'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < EOF ac_try="$ac_cpp conftest.$ac_ext >/dev/null 2>conftest.out" ! { (eval echo configure:1050: \"$ac_try\") 1>&5; (eval $ac_try) 2>&5; } ac_err=`grep -v '^ *+' conftest.out | grep -v "^conftest.${ac_ext}\$"` if test -z "$ac_err"; then rm -rf conftest* *************** done *** 1049,1060 **** echo $ac_n "checking for working const""... $ac_c" 1>&6 ! echo "configure:1053: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:1078: checking for working const" >&5 if eval "test \"`echo '$''{'ac_cv_c_const'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else --- 1128,1134 ---- ; return 0; } EOF ! if { (eval echo configure:1132: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_c_const=yes else *************** EOF *** 1124,1135 **** fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 ! echo "configure:1128: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS --- 1149,1160 ---- fi echo $ac_n "checking for size_t""... $ac_c" 1>&6 ! echo "configure:1153: checking for size_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_size_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS *************** EOF *** 1157,1168 **** fi echo $ac_n "checking for mode_t""... $ac_c" 1>&6 ! echo "configure:1161: checking for mode_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS --- 1182,1193 ---- fi echo $ac_n "checking for mode_t""... $ac_c" 1>&6 ! echo "configure:1186: checking for mode_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_mode_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS *************** fi *** 1191,1202 **** echo $ac_n "checking for pid_t""... $ac_c" 1>&6 ! echo "configure:1195: checking for pid_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS --- 1216,1227 ---- echo $ac_n "checking for pid_t""... $ac_c" 1>&6 ! echo "configure:1220: checking for pid_t" >&5 if eval "test \"`echo '$''{'ac_cv_type_pid_t'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #if STDC_HEADERS *************** EOF *** 1224,1235 **** fi echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6 ! echo "configure:1228: checking for st_blksize in struct stat" >&5 if eval "test \"`echo '$''{'ac_cv_struct_st_blksize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include --- 1249,1260 ---- fi echo $ac_n "checking for st_blksize in struct stat""... $ac_c" 1>&6 ! echo "configure:1253: checking for st_blksize in struct stat" >&5 if eval "test \"`echo '$''{'ac_cv_struct_st_blksize'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include *************** int main() { *** 1237,1243 **** struct stat s; s.st_blksize; ; return 0; } EOF ! if { (eval echo configure:1241: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_st_blksize=yes else --- 1262,1268 ---- struct stat s; s.st_blksize; ; return 0; } EOF ! if { (eval echo configure:1266: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_st_blksize=yes else *************** EOF *** 1258,1269 **** fi echo $ac_n "checking for st_blocks in struct stat""... $ac_c" 1>&6 ! echo "configure:1262: checking for st_blocks in struct stat" >&5 if eval "test \"`echo '$''{'ac_cv_struct_st_blocks'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include --- 1283,1294 ---- fi echo $ac_n "checking for st_blocks in struct stat""... $ac_c" 1>&6 ! echo "configure:1287: checking for st_blocks in struct stat" >&5 if eval "test \"`echo '$''{'ac_cv_struct_st_blocks'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include *************** int main() { *** 1271,1277 **** struct stat s; s.st_blocks; ; return 0; } EOF ! if { (eval echo configure:1275: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_st_blocks=yes else --- 1296,1302 ---- struct stat s; s.st_blocks; ; return 0; } EOF ! if { (eval echo configure:1300: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_st_blocks=yes else *************** else *** 1294,1305 **** fi echo $ac_n "checking for st_rdev in struct stat""... $ac_c" 1>&6 ! echo "configure:1298: checking for st_rdev in struct stat" >&5 if eval "test \"`echo '$''{'ac_cv_struct_st_rdev'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include --- 1319,1330 ---- fi echo $ac_n "checking for st_rdev in struct stat""... $ac_c" 1>&6 ! echo "configure:1323: checking for st_rdev in struct stat" >&5 if eval "test \"`echo '$''{'ac_cv_struct_st_rdev'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include *************** int main() { *** 1307,1313 **** struct stat s; s.st_rdev; ; return 0; } EOF ! if { (eval echo configure:1311: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_st_rdev=yes else --- 1332,1338 ---- struct stat s; s.st_rdev; ; return 0; } EOF ! if { (eval echo configure:1336: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_st_rdev=yes else *************** EOF *** 1328,1339 **** fi echo $ac_n "checking whether struct tm is in sys/time.h or time.h""... $ac_c" 1>&6 ! echo "configure:1332: checking whether struct tm is in sys/time.h or time.h" >&5 if eval "test \"`echo '$''{'ac_cv_struct_tm'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include --- 1353,1364 ---- fi echo $ac_n "checking whether struct tm is in sys/time.h or time.h""... $ac_c" 1>&6 ! echo "configure:1357: checking whether struct tm is in sys/time.h or time.h" >&5 if eval "test \"`echo '$''{'ac_cv_struct_tm'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < #include *************** int main() { *** 1341,1347 **** struct tm *tp; tp->tm_sec; ; return 0; } EOF ! if { (eval echo configure:1345: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_tm=time.h else --- 1366,1372 ---- struct tm *tp; tp->tm_sec; ; return 0; } EOF ! if { (eval echo configure:1370: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* ac_cv_struct_tm=time.h else *************** fi *** 1363,1369 **** echo $ac_n "checking for gethostname in -lsocket""... $ac_c" 1>&6 ! echo "configure:1367: checking for gethostname in -lsocket" >&5 ac_lib_var=`echo socket'_'gethostname | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 --- 1388,1394 ---- echo $ac_n "checking for gethostname in -lsocket""... $ac_c" 1>&6 ! echo "configure:1392: checking for gethostname in -lsocket" >&5 ac_lib_var=`echo socket'_'gethostname | sed 'y%./+-%__p_%'` if eval "test \"`echo '$''{'ac_cv_lib_$ac_lib_var'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 *************** else *** 1371,1377 **** ac_save_LIBS="$LIBS" LIBS="-lsocket $LIBS" cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else --- 1407,1413 ---- gethostname() ; return 0; } EOF ! if { (eval echo configure:1411: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_lib_$ac_lib_var=yes" else *************** for ac_func in symlink getcwd getwd lsta *** 1408,1419 **** getrusage times alarm getlogin getgid getuid kill link ttyname do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 ! echo "configure:1412: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:1437: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else --- 1461,1467 ---- ; return 0; } EOF ! if { (eval echo configure:1465: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else *************** done *** 1465,1476 **** for ac_func in gettimeofday do echo $ac_n "checking for $ac_func""... $ac_c" 1>&6 ! echo "configure:1469: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:1494: checking for $ac_func" >&5 if eval "test \"`echo '$''{'ac_cv_func_$ac_func'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else --- 1518,1524 ---- ; return 0; } EOF ! if { (eval echo configure:1522: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* eval "ac_cv_func_$ac_func=yes" else *************** done *** 1519,1537 **** if test "$ac_cv_func_gettimeofday" = yes; then echo $ac_n "checking for struct timezone""... $ac_c" 1>&6 ! echo "configure:1523: checking for struct timezone" >&5 if eval "test \"`echo '$''{'g77_cv_struct_timezone'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct timezone tz; ; return 0; } EOF ! if { (eval echo configure:1535: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* g77_cv_struct_timezone=yes else --- 1544,1562 ---- if test "$ac_cv_func_gettimeofday" = yes; then echo $ac_n "checking for struct timezone""... $ac_c" 1>&6 ! echo "configure:1548: checking for struct timezone" >&5 if eval "test \"`echo '$''{'g77_cv_struct_timezone'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext < int main() { struct timezone tz; ; return 0; } EOF ! if { (eval echo configure:1560: \"$ac_compile\") 1>&5; (eval $ac_compile) 2>&5; }; then rm -rf conftest* g77_cv_struct_timezone=yes else *************** EOF *** 1552,1558 **** else cat > conftest.$ac_ext < conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then cat >> confdefs.h <<\EOF #define HAVE_TIMEZONE 1 --- 1600,1606 ---- exit (0); } EOF ! if { (eval echo configure:1604: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext} && (./conftest; exit) 2>/dev/null then cat >> confdefs.h <<\EOF #define HAVE_TIMEZONE 1 *************** fi *** 1591,1602 **** fi echo $ac_n "checking whether gettimeofday can accept two arguments""... $ac_c" 1>&6 ! echo "configure:1595: checking whether gettimeofday can accept two arguments" >&5 if eval "test \"`echo '$''{'emacs_cv_gettimeofday_two_arguments'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&6 ! echo "configure:1620: checking whether gettimeofday can accept two arguments" >&5 if eval "test \"`echo '$''{'emacs_cv_gettimeofday_two_arguments'+set}'`\" = set"; then echo $ac_n "(cached) $ac_c" 1>&6 else cat > conftest.$ac_ext <&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* emacs_cv_gettimeofday_two_arguments=yes else --- 1647,1653 ---- gettimeofday (&time, DUMMY); ; return 0; } EOF ! if { (eval echo configure:1651: \"$ac_link\") 1>&5; (eval $ac_link) 2>&5; } && test -s conftest${ac_exeext}; then rm -rf conftest* emacs_cv_gettimeofday_two_arguments=yes else *************** test $ac_cv_func_clock = yes && MAYBES=" *** 1652,1657 **** --- 1677,1683 ---- + trap '' 1 2 15 cat > confcache <<\EOF # This file is a shell script that caches the results of configure *************** s%@oldincludedir@%$oldincludedir%g *** 1785,1790 **** --- 1811,1817 ---- s%@infodir@%$infodir%g s%@mandir@%$mandir%g s%@CC@%$CC%g + s%@LIBTOOL@%$LIBTOOL%g s%@AR@%$AR%g s%@SET_MAKE@%$SET_MAKE%g s%@ac_cv_prog_chmod@%$ac_cv_prog_chmod%g diff -Nrc3pad gcc-3.0.4/libf2c/libU77/configure.in gcc-3.1/libf2c/libU77/configure.in *** gcc-3.0.4/libf2c/libU77/configure.in Fri Feb 9 07:14:35 2001 --- gcc-3.1/libf2c/libU77/configure.in Sun Sep 30 22:06:23 2001 *************** AC_PREREQ(2.12.1) *** 23,28 **** --- 23,37 ---- AC_INIT(access_.c) AC_CONFIG_HEADER(config.h:config.hin) + # These defines are necessary to get 64-bit file size support. + + AC_DEFINE(_XOPEN_SOURCE, 500L, [Get Single Unix Specification semantics]) + # The following is needed by irix6.2 so that struct timeval is declared. + AC_DEFINE(_XOPEN_SOURCE_EXTENDED, 1, [Get Single Unix Specification semantics]) + # The following is needed by Solaris2.5.1 so that struct timeval is declared. + AC_DEFINE(__EXTENSIONS__, 1, [Solaris extensions]) + AC_DEFINE(_FILE_OFFSET_BITS, 64, [Get 64-bit file size support]) + dnl Checks for programs. dnl FIXME AC_PROG_CC wants CC to be able to link things, but it may *************** define([AC_PROG_CC_WORKS],[]) *** 32,37 **** --- 41,50 ---- # For g77 we'll set CC to point at the built gcc, but this will get it into # the makefiles AC_PROG_CC + + LIBTOOL='$(SHELL) ../libtool' + AC_SUBST(LIBTOOL) + dnl AC_C_CROSS dnl Gives misleading `(cached)' message from the check. if test "$CROSS";then *************** AC_SUBST(MAYBES) *** 107,110 **** --- 120,124 ---- AC_SUBST(CROSS) AC_SUBST(RANLIB) AC_SUBST(RANLIB_TEST) + AC_OUTPUT(Makefile) diff -Nrc3pad gcc-3.0.4/libf2c/libU77/date_.c gcc-3.1/libf2c/libU77/date_.c *** gcc-3.0.4/libf2c/libU77/date_.c Thu Jul 8 12:33:14 1999 --- gcc-3.1/libf2c/libU77/date_.c Sun Sep 30 22:06:23 2001 *************** static integer c__5 = 5; *** 38,40 **** --- 38,55 ---- return 0; } /* date_ */ + #ifdef PIC + # include + + const char *G77_Non_Y2K_Compliance_Message = + "Call to non Y2K compliant subroutine detected."; + + int G77_date_y2kbuggy_0 (char *buf, ftnlen buf_len) + { + extern int G77_abort_0(); + fprintf (stderr, "%s\n", G77_Non_Y2K_Compliance_Message); + G77_abort_0(); + } + #endif + + diff -Nrc3pad gcc-3.0.4/libf2c/libU77/vxtidate_.c gcc-3.1/libf2c/libU77/vxtidate_.c *** gcc-3.0.4/libf2c/libU77/vxtidate_.c Tue Jan 23 23:20:30 2001 --- gcc-3.1/libf2c/libU77/vxtidate_.c Sun Sep 30 22:06:23 2001 *************** int G77_vxtidate_y2kbug_0 (integer *m, i *** 54,56 **** --- 54,71 ---- *d = lt->tm_mday; return 0; } + + #ifdef PIC + extern const char *G77_Non_Y2K_Compliance_Message; + # ifdef KR_headers + int G77_vxtidate_y2kbuggy_0 (m, d, y) + integer *y, *m, *d; + # else + int G77_vxtidate_y2kbuggy_0 (integer *m, integer *d, integer *y) + # endif + { + extern int G77_abort_0(); + fprintf (stderr, "%s\n", G77_Non_Y2K_Compliance_Message); + G77_abort_0(); + } + #endif