Another bunch of patches from Craig. See ChangeLogs for details.
From-SVN: r18188
This commit is contained in:
parent
86fc7a6c5d
commit
56a0044b23
@ -8,6 +8,15 @@ Fri Feb 20 10:11:20 1998 Craig Burley <burley@gnu.org>
|
||||
|
||||
Sun Jan 11 02:14:47 1998 Craig Burley <burley@gnu.org>
|
||||
|
||||
Fix 970626-2.f by not doing most back-end processing
|
||||
when current_function_decl is an ERROR_MARK, and by
|
||||
making that the case when its type would be an ERROR_MARK:
|
||||
* com.c (ffecom_start_progunit_, finish_function,
|
||||
lang_printable_name, start_function,
|
||||
ffecom_finish_symbol_transform_): Test for ERROR_MARK.
|
||||
* std.c (ffestd_stmt_pass_): Don't do any downstream
|
||||
processing if ERROR_MARK.
|
||||
|
||||
Support FORMAT(I<1+2>) (constant variable-FORMAT
|
||||
expressions):
|
||||
* bad.def (FFEBAD_FORMAT_VARIABLE): New diagnostic.
|
||||
@ -106,6 +115,22 @@ Sun Nov 30 22:22:22 1997 Craig Burley <burley@gnu.org>
|
||||
* com.c (ffecom_arglist_expr_): Pass null pointers for optional
|
||||
args which aren't supplied.
|
||||
|
||||
Sun Oct 26 02:36:21 1997 Craig Burley <burley@gnu.ai.mit.edu>
|
||||
|
||||
* com.c (lang_print_error_function): Fix to more
|
||||
reliably notice when the diagnosed region changes.
|
||||
|
||||
Sat Oct 25 23:43:36 1997 Craig Burley <burley@gnu.ai.mit.edu>
|
||||
|
||||
Fix 950327-0.f:
|
||||
* sta.c, sta.h (ffesta_outpooldisp): New function.
|
||||
* std.c (ffestd_stmt_pass_): Don't kill NULL pool.
|
||||
(ffestd_R842): If pool already preserved, save NULL
|
||||
for pool, because it should be killed only once.
|
||||
|
||||
* malloc.c [MALLOC_DEBUG]: Put initializer for `name'
|
||||
component in braces, to avoid compiler warning.
|
||||
|
||||
Fri Oct 10 13:00:48 1997 Craig Burley <burley@gnu.ai.mit.edu>
|
||||
|
||||
* ste.c (ffeste_begin_iterdo_): Fix loop setup so iteration
|
||||
|
162
gcc/f/com.c
162
gcc/f/com.c
@ -6659,7 +6659,7 @@ ffecom_finish_global_ (ffeglobal global)
|
||||
static ffesymbol
|
||||
ffecom_finish_symbol_transform_ (ffesymbol s)
|
||||
{
|
||||
if (s == NULL)
|
||||
if ((s == NULL) || (TREE_CODE (current_function_decl) == ERROR_MARK))
|
||||
return s;
|
||||
|
||||
/* It's easy to know to transform an untransformed symbol, to make sure
|
||||
@ -7948,7 +7948,8 @@ ffecom_start_progunit_ ()
|
||||
|
||||
resume_momentary (yes);
|
||||
|
||||
store_parm_decls (main_program ? 1 : 0);
|
||||
if (TREE_CODE (current_function_decl) != ERROR_MARK)
|
||||
store_parm_decls (main_program ? 1 : 0);
|
||||
|
||||
ffecom_start_compstmt_ ();
|
||||
|
||||
@ -14206,31 +14207,38 @@ finish_function (int nested)
|
||||
register tree fndecl = current_function_decl;
|
||||
|
||||
assert (fndecl != NULL_TREE);
|
||||
if (nested)
|
||||
assert (DECL_CONTEXT (fndecl) != NULL_TREE);
|
||||
else
|
||||
assert (DECL_CONTEXT (fndecl) == NULL_TREE);
|
||||
if (TREE_CODE (fndecl) != ERROR_MARK)
|
||||
{
|
||||
if (nested)
|
||||
assert (DECL_CONTEXT (fndecl) != NULL_TREE);
|
||||
else
|
||||
assert (DECL_CONTEXT (fndecl) == NULL_TREE);
|
||||
}
|
||||
|
||||
/* TREE_READONLY (fndecl) = 1;
|
||||
This caused &foo to be of type ptr-to-const-function
|
||||
which then got a warning when stored in a ptr-to-function variable. */
|
||||
|
||||
poplevel (1, 0, 1);
|
||||
BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
|
||||
|
||||
/* Must mark the RESULT_DECL as being in this function. */
|
||||
if (TREE_CODE (fndecl) != ERROR_MARK)
|
||||
{
|
||||
BLOCK_SUPERCONTEXT (DECL_INITIAL (fndecl)) = fndecl;
|
||||
|
||||
DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
|
||||
/* Must mark the RESULT_DECL as being in this function. */
|
||||
|
||||
/* Obey `register' declarations if `setjmp' is called in this fn. */
|
||||
/* Generate rtl for function exit. */
|
||||
expand_function_end (input_filename, lineno, 0);
|
||||
DECL_CONTEXT (DECL_RESULT (fndecl)) = fndecl;
|
||||
|
||||
/* So we can tell if jump_optimize sets it to 1. */
|
||||
can_reach_end = 0;
|
||||
/* Obey `register' declarations if `setjmp' is called in this fn. */
|
||||
/* Generate rtl for function exit. */
|
||||
expand_function_end (input_filename, lineno, 0);
|
||||
|
||||
/* Run the optimizers and output the assembler code for this function. */
|
||||
rest_of_compilation (fndecl);
|
||||
/* So we can tell if jump_optimize sets it to 1. */
|
||||
can_reach_end = 0;
|
||||
|
||||
/* Run the optimizers and output the assembler code for this function. */
|
||||
rest_of_compilation (fndecl);
|
||||
}
|
||||
|
||||
/* Free all the tree nodes making up this function. */
|
||||
/* Switch back to allocating nodes permanently until we start another
|
||||
@ -14238,7 +14246,7 @@ finish_function (int nested)
|
||||
if (!nested)
|
||||
permanent_allocation (1);
|
||||
|
||||
if (DECL_SAVED_INSNS (fndecl) == 0 && !nested)
|
||||
if (DECL_SAVED_INSNS (fndecl) == 0 && !nested && (TREE_CODE (fndecl) != ERROR_MARK))
|
||||
{
|
||||
/* Stop pointing to the local nodes about to be freed. */
|
||||
/* But DECL_INITIAL must remain nonzero so we know this was an actual
|
||||
@ -14276,6 +14284,8 @@ lang_printable_name (tree decl, int v)
|
||||
switch (v)
|
||||
{
|
||||
default:
|
||||
if (TREE_CODE (decl) == ERROR_MARK)
|
||||
return "erroneous code";
|
||||
return IDENTIFIER_POINTER (DECL_NAME (decl));
|
||||
}
|
||||
}
|
||||
@ -14288,48 +14298,56 @@ void
|
||||
lang_print_error_function (file)
|
||||
char *file;
|
||||
{
|
||||
static ffeglobal last_g = NULL;
|
||||
static ffesymbol last_s = NULL;
|
||||
ffeglobal g;
|
||||
ffesymbol s;
|
||||
char *kind;
|
||||
|
||||
if (ffecom_primary_entry_ == NULL)
|
||||
if ((ffecom_primary_entry_ == NULL)
|
||||
|| (ffesymbol_global (ffecom_primary_entry_) == NULL))
|
||||
{
|
||||
g = NULL;
|
||||
s = NULL;
|
||||
kind = NULL;
|
||||
}
|
||||
else 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";
|
||||
g = ffesymbol_global (ffecom_primary_entry_);
|
||||
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";
|
||||
}
|
||||
}
|
||||
|
||||
if (last_s != s)
|
||||
if ((last_g != g) || (last_s != s))
|
||||
{
|
||||
if (file)
|
||||
fprintf (stderr, "%s: ", file);
|
||||
@ -14343,6 +14361,7 @@ lang_print_error_function (file)
|
||||
fprintf (stderr, "In %s `%s':\n", kind, name);
|
||||
}
|
||||
|
||||
last_g = g;
|
||||
last_s = s;
|
||||
}
|
||||
}
|
||||
@ -14615,42 +14634,51 @@ start_function (tree name, tree type, int nested, int public)
|
||||
assert (current_function_decl == NULL_TREE);
|
||||
}
|
||||
|
||||
decl1 = build_decl (FUNCTION_DECL,
|
||||
name,
|
||||
type);
|
||||
TREE_PUBLIC (decl1) = public ? 1 : 0;
|
||||
if (nested)
|
||||
DECL_INLINE (decl1) = 1;
|
||||
TREE_STATIC (decl1) = 1;
|
||||
DECL_EXTERNAL (decl1) = 0;
|
||||
if (TREE_CODE (type) == ERROR_MARK)
|
||||
decl1 = current_function_decl = error_mark_node;
|
||||
else
|
||||
{
|
||||
decl1 = build_decl (FUNCTION_DECL,
|
||||
name,
|
||||
type);
|
||||
TREE_PUBLIC (decl1) = public ? 1 : 0;
|
||||
if (nested)
|
||||
DECL_INLINE (decl1) = 1;
|
||||
TREE_STATIC (decl1) = 1;
|
||||
DECL_EXTERNAL (decl1) = 0;
|
||||
|
||||
announce_function (decl1);
|
||||
announce_function (decl1);
|
||||
|
||||
/* Make the init_value nonzero so pushdecl knows this is not tentative.
|
||||
error_mark_node is replaced below (in poplevel) with the BLOCK. */
|
||||
DECL_INITIAL (decl1) = error_mark_node;
|
||||
/* Make the init_value nonzero so pushdecl knows this is not tentative.
|
||||
error_mark_node is replaced below (in poplevel) with the BLOCK. */
|
||||
DECL_INITIAL (decl1) = error_mark_node;
|
||||
|
||||
/* Record the decl so that the function name is defined. If we already have
|
||||
a decl for this name, and it is a FUNCTION_DECL, use the old decl. */
|
||||
/* Record the decl so that the function name is defined. If we already have
|
||||
a decl for this name, and it is a FUNCTION_DECL, use the old decl. */
|
||||
|
||||
current_function_decl = pushdecl (decl1);
|
||||
}
|
||||
|
||||
current_function_decl = pushdecl (decl1);
|
||||
if (!nested)
|
||||
ffecom_outer_function_decl_ = current_function_decl;
|
||||
|
||||
pushlevel (0);
|
||||
|
||||
make_function_rtl (current_function_decl);
|
||||
if (TREE_CODE (current_function_decl) != ERROR_MARK)
|
||||
{
|
||||
make_function_rtl (current_function_decl);
|
||||
|
||||
restype = TREE_TYPE (TREE_TYPE (current_function_decl));
|
||||
DECL_RESULT (current_function_decl)
|
||||
= build_decl (RESULT_DECL, NULL_TREE, restype);
|
||||
restype = TREE_TYPE (TREE_TYPE (current_function_decl));
|
||||
DECL_RESULT (current_function_decl)
|
||||
= build_decl (RESULT_DECL, NULL_TREE, restype);
|
||||
}
|
||||
|
||||
if (!nested)
|
||||
/* Allocate further tree nodes temporarily during compilation of this
|
||||
function only. */
|
||||
temporary_allocation ();
|
||||
|
||||
if (!nested)
|
||||
if (!nested && (TREE_CODE (current_function_decl) != ERROR_MARK))
|
||||
TREE_ADDRESSABLE (current_function_decl) = 1;
|
||||
|
||||
immediate_size_expand = old_immediate_size_expand;
|
||||
|
147
gcc/f/g77.texi
147
gcc/f/g77.texi
@ -1345,6 +1345,8 @@ by type. Explanations are in the following sections.
|
||||
-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
|
||||
@ -1827,9 +1829,11 @@ had read @samp{DIMENSION X(*)}.
|
||||
@cindex -fugly-comma option
|
||||
@cindex options, -fugly-comma
|
||||
@item -fugly-comma
|
||||
Treat a trailing comma in an argument list as specification
|
||||
of a trailing null argument, and treat an empty argument
|
||||
list as specification of a single null argument.
|
||||
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))}.
|
||||
@ -1839,6 +1843,8 @@ 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.
|
||||
|
||||
@ -2046,6 +2052,24 @@ 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 badu77 intrinsics
|
||||
@cindex intrinsics, 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
|
||||
@ -2062,6 +2086,7 @@ variables named @samp{i} and @samp{I} to a procedure named @samp{Foo}.)
|
||||
@cindex intrinsics, 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
|
||||
@ -2079,6 +2104,7 @@ Specify status of f2c-specific 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
|
||||
@ -2097,6 +2123,7 @@ Specify status of F90-specific intrinsics.
|
||||
@cindex intrinsics, 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
|
||||
@ -2114,6 +2141,7 @@ Specify status of Digital's COMPLEX-related intrinsics.
|
||||
@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
|
||||
@ -2131,6 +2159,7 @@ Specify status of MIL-STD-1753-specific 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
|
||||
@ -2148,6 +2177,7 @@ Specify status of UNIX 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}
|
||||
@ -3251,7 +3281,7 @@ users use @code{g77}.
|
||||
such changes to @code{g77}.
|
||||
|
||||
To find out about existing bugs and ongoing plans for GNU
|
||||
Fortran, retrieve @code{ftp://alpha.gnu.org/g77.plan}
|
||||
Fortran, retrieve @uref{ftp://alpha.gnu.org/g77.plan}
|
||||
or, if you cannot do that, email
|
||||
@email{fortran@@gnu.org} asking for a recent copy of the
|
||||
GNU Fortran @file{.plan} file.
|
||||
@ -3699,8 +3729,8 @@ way through the compilation process instead of being lost.
|
||||
GNU Fortran supports a variety of extensions to, and dialects
|
||||
of, the Fortran language.
|
||||
Its primary base is the ANSI FORTRAN 77 standard, currently available on
|
||||
the network at @code{http://kumo.swcp.com/fortran/F77_std/f77_std.html}
|
||||
or in @code{ftp://ftp.ast.cam.ac.uk/pub/michael/}.
|
||||
the network at @uref{http://kumo.swcp.com/fortran/F77_std/f77_std.html}
|
||||
or in @uref{ftp://ftp.ast.cam.ac.uk/pub/michael/}.
|
||||
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
|
||||
@ -5726,7 +5756,7 @@ 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 Contact via Internet email: burley@@gnu.ai.mit.edu
|
||||
C Contact via Internet email: burley@@gnu.org
|
||||
C
|
||||
C Purpose:
|
||||
C Determine how compilers handle non-standard IDIM
|
||||
@ -7060,11 +7090,11 @@ without conversion.
|
||||
@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 a procedure other than a
|
||||
statement function, and use of an empty list of arguments to
|
||||
mean ``pass a single null argument''.
|
||||
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
|
||||
to mean ``pass a single null argument''.
|
||||
|
||||
@cindex omitting arguments
|
||||
@cindex arguments, omitting
|
||||
@ -7598,26 +7628,33 @@ The groups are:
|
||||
@cindex intrinsics, groups of
|
||||
@cindex groups of intrinsics
|
||||
@table @code
|
||||
@cindex @code{badu77} intrinsics group
|
||||
@item badu77
|
||||
UNIX intrinsics having inappropriate forms (usually functions that
|
||||
have intended side effects).
|
||||
|
||||
@cindex @code{gnu} intrinsics group
|
||||
@item gnu
|
||||
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
|
||||
Fortran 90 intrinsics.
|
||||
|
||||
@cindex @code{mil} intrinsics group
|
||||
@item mil
|
||||
MIL-STD 1753 intrinsics (@code{MVBITS}, @code{IAND}, @code{BTEST}, and so on).
|
||||
|
||||
@cindex @code{mil} intrinsics group
|
||||
@item unix
|
||||
UNIX intrinsics (@code{IARGC}, @code{EXIT}, @code{ERF}, and so on).
|
||||
|
||||
@cindex @code{mil} intrinsics group
|
||||
@item vxt
|
||||
VAX/VMS FORTRAN (current as of v4) intrinsics.
|
||||
@end table
|
||||
@ -7867,7 +7904,7 @@ options @code{g77} passes by running @samp{g77 -v}.
|
||||
@cindex cfortran.h
|
||||
@cindex Netlib
|
||||
Even if you don't actually use it as a compiler, @samp{f2c} from
|
||||
@code{ftp://ftp.netlib.org/f2c/src}, can be a useful tool when you're
|
||||
@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}}.
|
||||
|
||||
@ -7877,7 +7914,7 @@ build the @file{src} directory from the distribution, consult the
|
||||
@code{f2c} program on your path.
|
||||
|
||||
Something else that might be useful is @samp{cfortran.h} from
|
||||
@code{ftp://zebra/desy.de/cfortran}.
|
||||
@uref{ftp://zebra/desy.de/cfortran}.
|
||||
This is a fairly general tool which
|
||||
can be used to generate interfaces for calling in both directions
|
||||
between Fortran and C@.
|
||||
@ -7921,8 +7958,8 @@ the return type of a @code{REAL} @code{FUNCTION}.)
|
||||
@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 @samp{ftnchek} tool from @code{ftp://ftp.netlib.org/fortran}
|
||||
or @code{ftp://ftp.dsm.fordham.edu} is
|
||||
the @samp{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
|
||||
routines to be called from C is in file @file{joe.f}, use the command
|
||||
@ -10164,7 +10201,7 @@ or installing @code{g77} is not provided here.
|
||||
|
||||
To find out about major bugs discovered in the current release and
|
||||
possible workarounds for them, retrieve
|
||||
@code{ftp://alpha.gnu.org/g77.plan}.
|
||||
@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
|
||||
@ -10541,7 +10578,7 @@ In the meantime, finding and fixing the programming
|
||||
bugs that lead to these behaviors is, ultimately, the user's
|
||||
responsibility, as difficult as that task can sometimes be.
|
||||
|
||||
@cindex `infinite spaces' printed
|
||||
@cindex ``infinite spaces'' printed
|
||||
@cindex spaces, endless printing of
|
||||
@cindex libc, non-ANSI or non-default
|
||||
@cindex C library
|
||||
@ -11029,16 +11066,17 @@ specifiers.
|
||||
Supporting this requires a significant redesign or replacement
|
||||
of @code{libf2c}.
|
||||
|
||||
However, a future version of @code{g77} might support
|
||||
this construct when the expression is constant. For
|
||||
example:
|
||||
However, @code{g77} does support
|
||||
this construct when the expression is constant
|
||||
(as of version 0.5.22).
|
||||
For example:
|
||||
|
||||
@smallexample
|
||||
PARAMETER (IWIDTH = 12)
|
||||
10 FORMAT (I<IWIDTH>)
|
||||
@end smallexample
|
||||
|
||||
In the meantime, at least for output (@code{PRINT} and
|
||||
Otherwise, at least for output (@code{PRINT} and
|
||||
@code{WRITE}), Fortran code making use of this feature can
|
||||
be rewritten to avoid it by constructing the @code{FORMAT}
|
||||
string in a @code{CHARACTER} variable or array, then
|
||||
@ -12272,8 +12310,65 @@ their use into selective changes in your own code.
|
||||
@pindex ftncheck
|
||||
Validate your code with @code{ftnchek} or a similar code-checking
|
||||
tool.
|
||||
@code{ftncheck} can be found at @code{ftp://ftp.netlib.org/fortran}
|
||||
or @code{ftp://ftp.dsm.fordham.edu}.
|
||||
@code{ftncheck} 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:
|
||||
.SUFFIXES: .chek
|
||||
.PHONY: chekall
|
||||
|
||||
# How to compile .f files (for implicit rule):
|
||||
FC = g77
|
||||
# Assume `include' directory:
|
||||
FFLAGS = -Iinclude -g -O -Wall
|
||||
|
||||
# Flags for ftnchek:
|
||||
CHEK1 = -array=0 -include=includes -noarray
|
||||
CHEK2 = -nonovice -usage=1 -notruncation
|
||||
CHEKFLAGS = $(CHEK1) $(CHEK2)
|
||||
|
||||
# Run ftnchek with all the .prj files except the one corresponding
|
||||
# to the target's root:
|
||||
%.chek : %.f ; \
|
||||
ftnchek $(filter-out $*.prj,$(PRJS)) $(CHEKFLAGS) \
|
||||
-noextern -library $<
|
||||
|
||||
# Derive a project file from a source file:
|
||||
%.prj : %.f ; \
|
||||
ftnchek $(CHEKFLAGS) -noextern -project -library $<
|
||||
|
||||
# The list of objects is assumed to be in variable OBJS.
|
||||
# Sources corresponding to the objects:
|
||||
SRCS = $(OBJS:%.o=%.f)
|
||||
# ftnchek project files:
|
||||
PRJS = $(OBJS:%.o=%.prj)
|
||||
|
||||
# Build the program
|
||||
prog: $(OBJS) ; \
|
||||
$(FC) -o $@ $(OBJS)
|
||||
|
||||
chekall: $(PRJS) ; \
|
||||
ftnchek $(CHEKFLAGS) $(PRJS)
|
||||
|
||||
prjs: $(PRJS)
|
||||
|
||||
# For Emacs M-x find-tag:
|
||||
TAGS: $(SRCS) ; \
|
||||
etags $(SRCS)
|
||||
|
||||
# Rebuild dependencies:
|
||||
depend: ; \
|
||||
sfmakedepend -I $(PLTLIBDIR) -I includes -a prj $(SRCS1)
|
||||
@end smallexample
|
||||
|
||||
@item
|
||||
Try your code out using other Fortran compilers, such as @code{f2c}.
|
||||
@ -13352,7 +13447,7 @@ 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 in within square
|
||||
command that displays the explanation is given within square
|
||||
brackets in the diagnostic.
|
||||
For example:
|
||||
|
||||
@ -13556,7 +13651,7 @@ The following sample program might help:
|
||||
PROGRAM JCB003
|
||||
C
|
||||
C Written by James Craig Burley 1997-02-23.
|
||||
C Contact via Internet email: burley@@gnu.ai.mit.edu
|
||||
C Contact via Internet email: burley@@gnu.org
|
||||
C
|
||||
C Determine how compilers handle non-standard REAL
|
||||
C and AIMAG on DOUBLE COMPLEX operands.
|
||||
|
@ -5,7 +5,7 @@
|
||||
@c The text of this file appears in the file INSTALL
|
||||
@c in the G77 distribution, as well as in the G77 manual.
|
||||
|
||||
@c 1997-09-09
|
||||
@c 1997-12-23
|
||||
|
||||
Note most of this information is out of date and superceded by the EGCS
|
||||
install procedures. It is provided for historical reference only.
|
||||
@ -66,9 +66,9 @@ most systems, if desired.
|
||||
|
||||
=======
|
||||
The version of GNU @code{gzip} used to package this release
|
||||
is 1.24.
|
||||
is 1.2.4.
|
||||
(The version of GNU @code{tar} used to package this release
|
||||
is 1.11.2.)
|
||||
is 1.12.)
|
||||
|
||||
@item @file{gcc-2.7.2.3.tar.gz}
|
||||
You need to have this, or some other applicable, version
|
||||
@ -202,7 +202,7 @@ In any case, you can apply patches by hand---patch files
|
||||
are designed for humans to read them.
|
||||
|
||||
The version of GNU @code{patch} used to develop this release
|
||||
is 2.4.
|
||||
is 2.5.
|
||||
|
||||
@item @code{make}
|
||||
Your system must have @code{make}, and you will probably save
|
||||
@ -210,7 +210,7 @@ yourself a lot of trouble if it is GNU @code{make} (sometimes
|
||||
referred to as @code{gmake}).
|
||||
|
||||
The version of GNU @code{make} used to develop this release
|
||||
is 3.73.
|
||||
is 3.76.1.
|
||||
|
||||
@item @code{cc}
|
||||
Your system must have a working C compiler.
|
||||
@ -300,10 +300,10 @@ either @code{gcc} or @code{g77}.
|
||||
These problems can occur on most or all systems.
|
||||
|
||||
@menu
|
||||
* GNU C Required:: Why even ANSI C is not enough.
|
||||
* GNU C Required:: Why even ANSI C is not enough.
|
||||
* Patching GNU CC Necessary:: Why @code{gcc} must be patched first.
|
||||
* Building GNU CC Necessary:: Why you can't build @emph{just} Fortran.
|
||||
* Missing strtoul:: If linking @code{f771} fails due to an
|
||||
* Missing strtoul:: If linking @code{f771} fails due to an
|
||||
unresolved reference to @code{strtoul}.
|
||||
* Cleanup Kills Stage Directories:: A minor nit for @code{g77} developers.
|
||||
* Missing gperf?:: When building requires @code{gperf}.
|
||||
|
@ -51,7 +51,7 @@ struct _malloc_root_ malloc_root_
|
||||
(mallocArea_) &malloc_root_.malloc_pool_image_.first,
|
||||
0,
|
||||
#if MALLOC_DEBUG
|
||||
0, 0, 0, 0, 0, 0, 0, '/'
|
||||
0, 0, 0, 0, 0, 0, 0, { '/' }
|
||||
#endif
|
||||
},
|
||||
};
|
||||
|
@ -1792,9 +1792,11 @@ ffesta_ffebad_2t (ffebad errnum, ffelexToken t1, ffelexToken t2)
|
||||
}
|
||||
}
|
||||
|
||||
/* ffesta_set_outpooldisp -- Set disposition of statement output pool
|
||||
|
||||
ffesta_set_outpooldisp(FFESTA_pooldispPRESERVE); */
|
||||
ffestaPooldisp
|
||||
ffesta_outpooldisp ()
|
||||
{
|
||||
return ffesta_outpooldisp_;
|
||||
}
|
||||
|
||||
void
|
||||
ffesta_set_outpooldisp (ffestaPooldisp d)
|
||||
|
@ -98,6 +98,7 @@ void ffesta_ffebad_2st (ffebad msg, char *s, ffelexToken t1, ffelexToken t2);
|
||||
void ffesta_ffebad_2t (ffebad msg, ffelexToken t1, ffelexToken t2);
|
||||
ffelexHandler ffesta_zero (ffelexToken t);
|
||||
ffelexHandler ffesta_two (ffelexToken first, ffelexToken second);
|
||||
ffestaPooldisp ffesta_outpooldisp (void);
|
||||
void ffesta_set_outpooldisp (ffestaPooldisp d);
|
||||
|
||||
/* Define macros. */
|
||||
|
277
gcc/f/std.c
277
gcc/f/std.c
@ -662,9 +662,10 @@ ffestd_stmt_pass_ ()
|
||||
{
|
||||
ffestdStmt_ stmt;
|
||||
ffestdExprItem_ expr; /* For traversing lists. */
|
||||
bool okay = (TREE_CODE (current_function_decl) != ERROR_MARK);
|
||||
|
||||
#if FFECOM_targetCURRENT == FFECOM_targetGCC
|
||||
if (ffestd_2pass_entrypoints_ != 0)
|
||||
if ((ffestd_2pass_entrypoints_ != 0) && okay)
|
||||
{
|
||||
tree which = ffecom_which_entrypoint_decl ();
|
||||
tree value;
|
||||
@ -718,83 +719,97 @@ ffestd_stmt_pass_ ()
|
||||
{
|
||||
case FFESTD_stmtidENDDOLOOP_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_do (stmt->u.enddoloop.block);
|
||||
if (okay)
|
||||
ffeste_do (stmt->u.enddoloop.block);
|
||||
ffestw_kill (stmt->u.enddoloop.block);
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidENDLOGIF_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_end_R807 ();
|
||||
if (okay)
|
||||
ffeste_end_R807 ();
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidEXECLABEL_:
|
||||
ffeste_labeldef_branch (stmt->u.execlabel.label);
|
||||
if (okay)
|
||||
ffeste_labeldef_branch (stmt->u.execlabel.label);
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidFORMATLABEL_:
|
||||
ffeste_labeldef_format (stmt->u.formatlabel.label);
|
||||
if (okay)
|
||||
ffeste_labeldef_format (stmt->u.formatlabel.label);
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidR737A_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_R737A (stmt->u.R737A.dest, stmt->u.R737A.source);
|
||||
if (okay)
|
||||
ffeste_R737A (stmt->u.R737A.dest, stmt->u.R737A.source);
|
||||
malloc_pool_kill (stmt->u.R737A.pool);
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidR803_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_R803 (stmt->u.R803.expr);
|
||||
if (okay)
|
||||
ffeste_R803 (stmt->u.R803.expr);
|
||||
malloc_pool_kill (stmt->u.R803.pool);
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidR804_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_R804 (stmt->u.R804.expr);
|
||||
if (okay)
|
||||
ffeste_R804 (stmt->u.R804.expr);
|
||||
malloc_pool_kill (stmt->u.R804.pool);
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidR805_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_R805 ();
|
||||
if (okay)
|
||||
ffeste_R805 ();
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidR806_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_R806 ();
|
||||
if (okay)
|
||||
ffeste_R806 ();
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidR807_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_R807 (stmt->u.R807.expr);
|
||||
if (okay)
|
||||
ffeste_R807 (stmt->u.R807.expr);
|
||||
malloc_pool_kill (stmt->u.R807.pool);
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidR809_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_R809 (stmt->u.R809.block, stmt->u.R809.expr);
|
||||
if (okay)
|
||||
ffeste_R809 (stmt->u.R809.block, stmt->u.R809.expr);
|
||||
malloc_pool_kill (stmt->u.R809.pool);
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidR810_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_R810 (stmt->u.R810.block, stmt->u.R810.casenum);
|
||||
if (okay)
|
||||
ffeste_R810 (stmt->u.R810.block, stmt->u.R810.casenum);
|
||||
malloc_pool_kill (stmt->u.R810.pool);
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidR811_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_R811 (stmt->u.R811.block);
|
||||
if (okay)
|
||||
ffeste_R811 (stmt->u.R811.block);
|
||||
malloc_pool_kill (ffestw_select (stmt->u.R811.block)->pool);
|
||||
ffestw_kill (stmt->u.R811.block);
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidR819A_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_R819A (stmt->u.R819A.block, stmt->u.R819A.label,
|
||||
stmt->u.R819A.var,
|
||||
stmt->u.R819A.start, stmt->u.R819A.start_token,
|
||||
stmt->u.R819A.end, stmt->u.R819A.end_token,
|
||||
stmt->u.R819A.incr, stmt->u.R819A.incr_token);
|
||||
if (okay)
|
||||
ffeste_R819A (stmt->u.R819A.block, stmt->u.R819A.label,
|
||||
stmt->u.R819A.var,
|
||||
stmt->u.R819A.start, stmt->u.R819A.start_token,
|
||||
stmt->u.R819A.end, stmt->u.R819A.end_token,
|
||||
stmt->u.R819A.incr, stmt->u.R819A.incr_token);
|
||||
ffelex_token_kill (stmt->u.R819A.start_token);
|
||||
ffelex_token_kill (stmt->u.R819A.end_token);
|
||||
if (stmt->u.R819A.incr_token != NULL)
|
||||
@ -804,269 +819,342 @@ ffestd_stmt_pass_ ()
|
||||
|
||||
case FFESTD_stmtidR819B_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_R819B (stmt->u.R819B.block, stmt->u.R819B.label,
|
||||
stmt->u.R819B.expr);
|
||||
if (okay)
|
||||
ffeste_R819B (stmt->u.R819B.block, stmt->u.R819B.label,
|
||||
stmt->u.R819B.expr);
|
||||
malloc_pool_kill (stmt->u.R819B.pool);
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidR825_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_R825 ();
|
||||
if (okay)
|
||||
ffeste_R825 ();
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidR834_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_R834 (stmt->u.R834.block);
|
||||
if (okay)
|
||||
ffeste_R834 (stmt->u.R834.block);
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidR835_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_R835 (stmt->u.R835.block);
|
||||
if (okay)
|
||||
ffeste_R835 (stmt->u.R835.block);
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidR836_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_R836 (stmt->u.R836.label);
|
||||
if (okay)
|
||||
ffeste_R836 (stmt->u.R836.label);
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidR837_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_R837 (stmt->u.R837.labels, stmt->u.R837.count,
|
||||
stmt->u.R837.expr);
|
||||
if (okay)
|
||||
ffeste_R837 (stmt->u.R837.labels, stmt->u.R837.count,
|
||||
stmt->u.R837.expr);
|
||||
malloc_pool_kill (stmt->u.R837.pool);
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidR838_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_R838 (stmt->u.R838.label, stmt->u.R838.target);
|
||||
if (okay)
|
||||
ffeste_R838 (stmt->u.R838.label, stmt->u.R838.target);
|
||||
malloc_pool_kill (stmt->u.R838.pool);
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidR839_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_R839 (stmt->u.R839.target);
|
||||
if (okay)
|
||||
ffeste_R839 (stmt->u.R839.target);
|
||||
malloc_pool_kill (stmt->u.R839.pool);
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidR840_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_R840 (stmt->u.R840.expr, stmt->u.R840.neg, stmt->u.R840.zero,
|
||||
stmt->u.R840.pos);
|
||||
if (okay)
|
||||
ffeste_R840 (stmt->u.R840.expr, stmt->u.R840.neg, stmt->u.R840.zero,
|
||||
stmt->u.R840.pos);
|
||||
malloc_pool_kill (stmt->u.R840.pool);
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidR841_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_R841 ();
|
||||
if (okay)
|
||||
ffeste_R841 ();
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidR842_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_R842 (stmt->u.R842.expr);
|
||||
malloc_pool_kill (stmt->u.R842.pool);
|
||||
if (okay)
|
||||
ffeste_R842 (stmt->u.R842.expr);
|
||||
if (stmt->u.R842.pool != NULL)
|
||||
malloc_pool_kill (stmt->u.R842.pool);
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidR843_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_R843 (stmt->u.R843.expr);
|
||||
if (okay)
|
||||
ffeste_R843 (stmt->u.R843.expr);
|
||||
malloc_pool_kill (stmt->u.R843.pool);
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidR904_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_R904 (stmt->u.R904.params);
|
||||
if (okay)
|
||||
ffeste_R904 (stmt->u.R904.params);
|
||||
malloc_pool_kill (stmt->u.R904.pool);
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidR907_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_R907 (stmt->u.R907.params);
|
||||
if (okay)
|
||||
ffeste_R907 (stmt->u.R907.params);
|
||||
malloc_pool_kill (stmt->u.R907.pool);
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidR909_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_R909_start (stmt->u.R909.params, stmt->u.R909.only_format,
|
||||
stmt->u.R909.unit, stmt->u.R909.format,
|
||||
stmt->u.R909.rec, stmt->u.R909.key);
|
||||
if (okay)
|
||||
ffeste_R909_start (stmt->u.R909.params, stmt->u.R909.only_format,
|
||||
stmt->u.R909.unit, stmt->u.R909.format,
|
||||
stmt->u.R909.rec, stmt->u.R909.key);
|
||||
for (expr = stmt->u.R909.list; expr != NULL; expr = expr->next)
|
||||
{
|
||||
ffeste_R909_item (expr->expr, expr->token);
|
||||
if (okay)
|
||||
ffeste_R909_item (expr->expr, expr->token);
|
||||
ffelex_token_kill (expr->token);
|
||||
}
|
||||
ffeste_R909_finish ();
|
||||
if (okay)
|
||||
ffeste_R909_finish ();
|
||||
malloc_pool_kill (stmt->u.R909.pool);
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidR910_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_R910_start (stmt->u.R910.params, stmt->u.R910.unit,
|
||||
stmt->u.R910.format, stmt->u.R910.rec);
|
||||
if (okay)
|
||||
ffeste_R910_start (stmt->u.R910.params, stmt->u.R910.unit,
|
||||
stmt->u.R910.format, stmt->u.R910.rec);
|
||||
for (expr = stmt->u.R910.list; expr != NULL; expr = expr->next)
|
||||
{
|
||||
ffeste_R910_item (expr->expr, expr->token);
|
||||
if (okay)
|
||||
ffeste_R910_item (expr->expr, expr->token);
|
||||
ffelex_token_kill (expr->token);
|
||||
}
|
||||
ffeste_R910_finish ();
|
||||
if (okay)
|
||||
ffeste_R910_finish ();
|
||||
malloc_pool_kill (stmt->u.R910.pool);
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidR911_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_R911_start (stmt->u.R911.params, stmt->u.R911.format);
|
||||
if (okay)
|
||||
ffeste_R911_start (stmt->u.R911.params, stmt->u.R911.format);
|
||||
for (expr = stmt->u.R911.list; expr != NULL; expr = expr->next)
|
||||
{
|
||||
ffeste_R911_item (expr->expr, expr->token);
|
||||
if (okay)
|
||||
ffeste_R911_item (expr->expr, expr->token);
|
||||
ffelex_token_kill (expr->token);
|
||||
}
|
||||
ffeste_R911_finish ();
|
||||
if (okay)
|
||||
ffeste_R911_finish ();
|
||||
malloc_pool_kill (stmt->u.R911.pool);
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidR919_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_R919 (stmt->u.R919.params);
|
||||
if (okay)
|
||||
ffeste_R919 (stmt->u.R919.params);
|
||||
malloc_pool_kill (stmt->u.R919.pool);
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidR920_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_R920 (stmt->u.R920.params);
|
||||
if (okay)
|
||||
ffeste_R920 (stmt->u.R920.params);
|
||||
malloc_pool_kill (stmt->u.R920.pool);
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidR921_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_R921 (stmt->u.R921.params);
|
||||
if (okay)
|
||||
ffeste_R921 (stmt->u.R921.params);
|
||||
malloc_pool_kill (stmt->u.R921.pool);
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidR923A_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_R923A (stmt->u.R923A.params, stmt->u.R923A.by_file);
|
||||
if (okay)
|
||||
ffeste_R923A (stmt->u.R923A.params, stmt->u.R923A.by_file);
|
||||
malloc_pool_kill (stmt->u.R923A.pool);
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidR923B_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_R923B_start (stmt->u.R923B.params);
|
||||
if (okay)
|
||||
ffeste_R923B_start (stmt->u.R923B.params);
|
||||
for (expr = stmt->u.R923B.list; expr != NULL; expr = expr->next)
|
||||
ffeste_R923B_item (expr->expr);
|
||||
ffeste_R923B_finish ();
|
||||
{
|
||||
if (okay)
|
||||
ffeste_R923B_item (expr->expr);
|
||||
}
|
||||
if (okay)
|
||||
ffeste_R923B_finish ();
|
||||
malloc_pool_kill (stmt->u.R923B.pool);
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidR1001_:
|
||||
ffeste_R1001 (&stmt->u.R1001.str);
|
||||
if (okay)
|
||||
ffeste_R1001 (&stmt->u.R1001.str);
|
||||
ffests_kill (&stmt->u.R1001.str);
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidR1103_:
|
||||
ffeste_R1103 ();
|
||||
if (okay)
|
||||
ffeste_R1103 ();
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidR1112_:
|
||||
ffeste_R1112 ();
|
||||
if (okay)
|
||||
ffeste_R1112 ();
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidR1212_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_R1212 (stmt->u.R1212.expr);
|
||||
if (okay)
|
||||
ffeste_R1212 (stmt->u.R1212.expr);
|
||||
malloc_pool_kill (stmt->u.R1212.pool);
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidR1221_:
|
||||
ffeste_R1221 ();
|
||||
if (okay)
|
||||
ffeste_R1221 ();
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidR1225_:
|
||||
ffeste_R1225 ();
|
||||
if (okay)
|
||||
ffeste_R1225 ();
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidR1226_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
if (stmt->u.R1226.entry != NULL)
|
||||
ffeste_R1226 (stmt->u.R1226.entry);
|
||||
{
|
||||
if (okay)
|
||||
ffeste_R1226 (stmt->u.R1226.entry);
|
||||
}
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidR1227_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_R1227 (stmt->u.R1227.block, stmt->u.R1227.expr);
|
||||
if (okay)
|
||||
ffeste_R1227 (stmt->u.R1227.block, stmt->u.R1227.expr);
|
||||
malloc_pool_kill (stmt->u.R1227.pool);
|
||||
break;
|
||||
|
||||
#if FFESTR_VXT
|
||||
case FFESTD_stmtidV018_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_V018_start (stmt->u.V018.params, stmt->u.V018.format);
|
||||
if (okay)
|
||||
ffeste_V018_start (stmt->u.V018.params, stmt->u.V018.format);
|
||||
for (expr = stmt->u.V018.list; expr != NULL; expr = expr->next)
|
||||
ffeste_V018_item (expr->expr);
|
||||
ffeste_V018_finish ();
|
||||
{
|
||||
if (okay)
|
||||
ffeste_V018_item (expr->expr);
|
||||
}
|
||||
if (okay)
|
||||
ffeste_V018_finish ();
|
||||
malloc_pool_kill (stmt->u.V018.pool);
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidV019_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_V019_start (stmt->u.V019.params, stmt->u.V019.format);
|
||||
if (okay)
|
||||
ffeste_V019_start (stmt->u.V019.params, stmt->u.V019.format);
|
||||
for (expr = stmt->u.V019.list; expr != NULL; expr = expr->next)
|
||||
ffeste_V019_item (expr->expr);
|
||||
ffeste_V019_finish ();
|
||||
{
|
||||
if (okay)
|
||||
ffeste_V019_item (expr->expr);
|
||||
}
|
||||
if (okay)
|
||||
ffeste_V019_finish ();
|
||||
malloc_pool_kill (stmt->u.V019.pool);
|
||||
break;
|
||||
#endif
|
||||
|
||||
case FFESTD_stmtidV020_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_V020_start (stmt->u.V020.params, stmt->u.V020.format);
|
||||
if (okay)
|
||||
ffeste_V020_start (stmt->u.V020.params, stmt->u.V020.format);
|
||||
for (expr = stmt->u.V020.list; expr != NULL; expr = expr->next)
|
||||
ffeste_V020_item (expr->expr);
|
||||
ffeste_V020_finish ();
|
||||
{
|
||||
if (okay)
|
||||
ffeste_V020_item (expr->expr);
|
||||
}
|
||||
if (okay)
|
||||
ffeste_V020_finish ();
|
||||
malloc_pool_kill (stmt->u.V020.pool);
|
||||
break;
|
||||
|
||||
#if FFESTR_VXT
|
||||
case FFESTD_stmtidV021_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_V021 (stmt->u.V021.params);
|
||||
if (okay)
|
||||
ffeste_V021 (stmt->u.V021.params);
|
||||
malloc_pool_kill (stmt->u.V021.pool);
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidV023_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_V023_start (stmt->u.V023.params);
|
||||
if (okay)
|
||||
ffeste_V023_start (stmt->u.V023.params);
|
||||
for (expr = stmt->u.V023.list; expr != NULL; expr = expr->next)
|
||||
ffeste_V023_item (expr->expr);
|
||||
ffeste_V023_finish ();
|
||||
{
|
||||
if (okay)
|
||||
ffeste_V023_item (expr->expr);
|
||||
}
|
||||
if (okay)
|
||||
ffeste_V023_finish ();
|
||||
malloc_pool_kill (stmt->u.V023.pool);
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidV024_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_V024_start (stmt->u.V024.params);
|
||||
if (okay)
|
||||
ffeste_V024_start (stmt->u.V024.params);
|
||||
for (expr = stmt->u.V024.list; expr != NULL; expr = expr->next)
|
||||
ffeste_V024_item (expr->expr);
|
||||
ffeste_V024_finish ();
|
||||
{
|
||||
if (okay)
|
||||
ffeste_V024_item (expr->expr);
|
||||
}
|
||||
if (okay)
|
||||
ffeste_V024_finish ();
|
||||
malloc_pool_kill (stmt->u.V024.pool);
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidV025start_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_V025_start ();
|
||||
if (okay)
|
||||
ffeste_V025_start ();
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidV025item_:
|
||||
ffeste_V025_item (stmt->u.V025item.u, stmt->u.V025item.m,
|
||||
stmt->u.V025item.n, stmt->u.V025item.asv);
|
||||
if (okay)
|
||||
ffeste_V025_item (stmt->u.V025item.u, stmt->u.V025item.m,
|
||||
stmt->u.V025item.n, stmt->u.V025item.asv);
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidV025finish_:
|
||||
ffeste_V025_finish ();
|
||||
if (okay)
|
||||
ffeste_V025_finish ();
|
||||
malloc_pool_kill (stmt->u.V025finish.pool);
|
||||
break;
|
||||
|
||||
case FFESTD_stmtidV026_:
|
||||
ffestd_subr_line_restore_ (stmt);
|
||||
ffeste_V026 (stmt->u.V026.params);
|
||||
if (okay)
|
||||
ffeste_V026 (stmt->u.V026.params);
|
||||
malloc_pool_kill (stmt->u.V026.pool);
|
||||
break;
|
||||
#endif
|
||||
@ -3516,9 +3604,22 @@ ffestd_R842 (ffebld expr)
|
||||
stmt = ffestd_stmt_new_ (FFESTD_stmtidR842_);
|
||||
ffestd_stmt_append_ (stmt);
|
||||
ffestd_subr_line_save_ (stmt);
|
||||
stmt->u.R842.pool = ffesta_output_pool;
|
||||
stmt->u.R842.expr = expr;
|
||||
ffesta_set_outpooldisp (FFESTA_pooldispPRESERVE);
|
||||
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
|
||||
|
||||
|
@ -5,6 +5,10 @@ Tue Dec 23 22:56:01 1997 Craig Burley <burley@gnu.org>
|
||||
handler on 64-bit systems like Alphas.
|
||||
* f2cext.c (signal_): Changed accordingly.
|
||||
|
||||
Wed Oct 29 01:01:04 1997 Mumit Khan <khan@brahma.xraylith.wisc.edu>
|
||||
|
||||
* configure.in: Set CC to CC_FOR_TARGET when cross-compiling.
|
||||
|
||||
Tue Sep 30 00:41:39 1997 Craig Burley <burley@gnu.ai.mit.edu>
|
||||
|
||||
Do a better job of printing the offending FORMAT string
|
||||
|
@ -23,15 +23,20 @@ AC_INIT(libF77/Version.c)
|
||||
|
||||
AC_REVISION(1.10)
|
||||
|
||||
dnl Checks for programs.
|
||||
# For g77 we'll set CC to point at the built gcc, but this will get it into
|
||||
# the makefiles
|
||||
AC_PROG_CC
|
||||
dnl AC_C_CROSS
|
||||
dnl Gives misleading `(cached)' message from the check.
|
||||
if test "$CROSS";then
|
||||
if test "$CC_FOR_TARGET"; then
|
||||
CC="$CC_FOR_TARGET"
|
||||
else
|
||||
CC="../../xgcc -B../../xgcc/"
|
||||
fi
|
||||
ac_cv_c_cross=yes
|
||||
else
|
||||
dnl Checks for programs.
|
||||
# For g77 we'll set CC to point at the built gcc, but this will get it into
|
||||
# the makefiles
|
||||
AC_PROG_CC
|
||||
ac_cv_c_cross=no
|
||||
fi
|
||||
|
||||
|
@ -75,9 +75,12 @@ f_exit(void)
|
||||
static cllist xx;
|
||||
if (! (f__init & 1))
|
||||
return; /* Not initialized, so no open units. */
|
||||
/* no more I/O to be done. If this is not done, then if the
|
||||
program is interrupted during I/O, f_clos thinks, incorrectly,
|
||||
that there is an I/O recursion. */
|
||||
/* I/O no longer in progress. If, during an I/O operation (such
|
||||
as waiting for the user to enter a line), there is an
|
||||
interrupt (such as ^C to stop the program on a UNIX system),
|
||||
f_exit() is called, but there is no longer any I/O in
|
||||
progress. Without turning off this flag, f_clos() would
|
||||
think that there is an I/O recursion in this circumstance. */
|
||||
f__init &= ~2;
|
||||
if (!xx.cerr) {
|
||||
xx.cerr=1;
|
||||
|
Loading…
Reference in New Issue
Block a user