com.c (ffecom_init_0): Fix setup of INTEGER(KIND=7) pointer type.

Mon Jun  1 19:37:42 1998  Craig Burley  <burley@gnu.org>
	* com.c (ffecom_init_0): Fix setup of INTEGER(KIND=7)
	pointer type.
	* info.c (ffeinfo_type): Don't crash on null type.
	* expr.c (ffeexpr_fulfill_call_): Don't special-case
	%LOC(expr) or LOC(expr).
	Delete FFEGLOBAL_argsummaryPTR.
	* global.c, global.h: Delete FFEGLOBAL_argsummaryPTR.

From-SVN: r20225
This commit is contained in:
Craig Burley 1998-06-04 06:41:23 -04:00 committed by Dave Love
parent e69bc5b0b3
commit a835e35137
8 changed files with 58 additions and 9 deletions

View File

@ -1,3 +1,13 @@
Mon Jun 1 19:37:42 1998 Craig Burley <burley@gnu.org>
* com.c (ffecom_init_0): Fix setup of INTEGER(KIND=7)
pointer type.
* info.c (ffeinfo_type): Don't crash on null type.
* expr.c (ffeexpr_fulfill_call_): Don't special-case
%LOC(expr) or LOC(expr).
Delete FFEGLOBAL_argsummaryPTR.
* global.c, global.h: Delete FFEGLOBAL_argsummaryPTR.
Mon May 25 03:34:42 1998 Craig Burley <burley@gnu.org> Mon May 25 03:34:42 1998 Craig Burley <burley@gnu.org>
* com.c (ffecom_expr_): Fix D**I and Z**I cases to * com.c (ffecom_expr_): Fix D**I and Z**I cases to
@ -9,7 +19,8 @@ Sat May 23 06:32:52 1998 Craig Burley <burley@gnu.org>
* com.c (ffecom_finish_symbol_transform_): Don't transform * com.c (ffecom_finish_symbol_transform_): Don't transform
statement (nested) functions, to avoid gcc compiling them statement (nested) functions, to avoid gcc compiling them
and thus producing linker errors if they refer to undefined and thus producing linker errors if they refer to undefined
exteral functions. But warn if they're unused and -Wunused. external functions. But warn if they're unused and -Wunused.
* bad.def (FFEBAD_SFUNC_UNUSED): New diagnostic.
Tue May 19 14:52:41 1998 Craig Burley <burley@gnu.org> Tue May 19 14:52:41 1998 Craig Burley <burley@gnu.org>

View File

@ -12351,10 +12351,11 @@ ffecom_init_0 ()
fatal ("no INTEGER type can hold a pointer on this configuration"); fatal ("no INTEGER type can hold a pointer on this configuration");
else if (0 && ffe_is_do_internal_checks ()) else if (0 && ffe_is_do_internal_checks ())
fprintf (stderr, "Pointer type kt=%d\n", ffecom_pointer_kind_); fprintf (stderr, "Pointer type kt=%d\n", ffecom_pointer_kind_);
type = ffetype_new ();
ffetype_set_kind (ffeinfo_type (FFEINFO_basictypeINTEGER, ffetype_set_kind (ffeinfo_type (FFEINFO_basictypeINTEGER,
FFEINFO_kindtypeINTEGERDEFAULT), FFEINFO_kindtypeINTEGERDEFAULT),
7, type); 7,
ffeinfo_type (FFEINFO_basictypeINTEGER,
ffecom_pointer_kind_));
if (ffe_is_ugly_assign ()) if (ffe_is_ugly_assign ())
ffecom_label_kind_ = ffecom_pointer_kind_; /* Require ASSIGN etc to this. */ ffecom_label_kind_ = ffecom_pointer_kind_; /* Require ASSIGN etc to this. */

View File

@ -9385,9 +9385,13 @@ ffeexpr_fulfill_call_ (ffebld *expr, ffelexToken t)
as = FFEGLOBAL_argsummaryALTRTN; as = FFEGLOBAL_argsummaryALTRTN;
break; break;
#if 0
/* No, %LOC(foo) is just like any INTEGER(KIND=7)
expression, so don't treat it specially. */
case FFEBLD_opPERCENT_LOC: case FFEBLD_opPERCENT_LOC:
as = FFEGLOBAL_argsummaryPTR; as = FFEGLOBAL_argsummaryPTR;
break; break;
#endif
case FFEBLD_opPERCENT_VAL: case FFEBLD_opPERCENT_VAL:
as = FFEGLOBAL_argsummaryVAL; as = FFEGLOBAL_argsummaryVAL;
@ -9402,6 +9406,9 @@ ffeexpr_fulfill_call_ (ffebld *expr, ffelexToken t)
break; break;
case FFEBLD_opFUNCREF: case FFEBLD_opFUNCREF:
#if 0
/* No, LOC(foo) is just like any INTEGER(KIND=7)
expression, so don't treat it specially. */
if ((ffebld_op (ffebld_left (item)) == FFEBLD_opSYMTER) if ((ffebld_op (ffebld_left (item)) == FFEBLD_opSYMTER)
&& (ffesymbol_specific (ffebld_symter (ffebld_left (item))) && (ffesymbol_specific (ffebld_symter (ffebld_left (item)))
== FFEINTRIN_specLOC)) == FFEINTRIN_specLOC))
@ -9409,6 +9416,7 @@ ffeexpr_fulfill_call_ (ffebld *expr, ffelexToken t)
as = FFEGLOBAL_argsummaryPTR; as = FFEGLOBAL_argsummaryPTR;
break; break;
} }
#endif
/* Fall through. */ /* Fall through. */
default: default:
if (ffebld_op (item) == FFEBLD_opSYMTER) if (ffebld_op (item) == FFEBLD_opSYMTER)

View File

@ -5409,16 +5409,17 @@ arguments (those not passed using a construct such as @code{%VAL()})
by reference or descriptor, depending on the type of by reference or descriptor, depending on the type of
the actual argument. the actual argument.
Thus, given @samp{INTEGER I}, @samp{CALL FOO(I)} would Thus, given @samp{INTEGER I}, @samp{CALL FOO(I)} would
seem to mean the same thing as @samp{CALL FOO(%LOC(I))}, and seem to mean the same thing as @samp{CALL FOO(%VAL(%LOC(I)))}, and
in fact might compile to identical code. in fact might compile to identical code.
However, @samp{CALL FOO(%LOC(I))} emphatically means ``pass the However, @samp{CALL FOO(%VAL(%LOC(I)))} emphatically means
address of @samp{I} in memory''. ``pass, by value, the address of @samp{I} in memory''.
While @samp{CALL FOO(I)} might use that same approach in a While @samp{CALL FOO(I)} might use that same approach in a
particular version of @code{g77}, another version or compiler particular version of @code{g77}, another version or compiler
might choose a different implementation, such as copy-in/copy-out, might choose a different implementation, such as copy-in/copy-out,
to effect the desired behavior---and which will therefore not to effect the desired behavior---and which will therefore not
necessarily compile to the same code as would @samp{CALL FOO(%LOC(I))} necessarily compile to the same code as would
@samp{CALL FOO(%VAL(%LOC(I)))}
using the same version or compiler. using the same version or compiler.
@xref{Debugging and Interfacing}, for detailed information on @xref{Debugging and Interfacing}, for detailed information on

View File

@ -616,9 +616,11 @@ ffeglobal_proc_def_arg (ffesymbol s, int argno, char *name, ffeglobalArgSummary
defwhy = "an alternate-return label"; defwhy = "an alternate-return label";
break; break;
#if 0
case FFEGLOBAL_argsummaryPTR: case FFEGLOBAL_argsummaryPTR:
defwhy = "a pointer"; defwhy = "a pointer";
break; break;
#endif
default: default:
defwhy = "???"; defwhy = "???";
@ -868,6 +870,7 @@ ffeglobal_proc_ref_arg (ffesymbol s, int argno, ffeglobalArgSummary as,
} }
break; break;
#if 0
case FFEGLOBAL_argsummaryPTR: case FFEGLOBAL_argsummaryPTR:
if ((ai->as != FFEGLOBAL_argsummaryPTR) if ((ai->as != FFEGLOBAL_argsummaryPTR)
&& (ai->as != FFEGLOBAL_argsummaryNONE)) && (ai->as != FFEGLOBAL_argsummaryNONE))
@ -876,6 +879,7 @@ ffeglobal_proc_ref_arg (ffesymbol s, int argno, ffeglobalArgSummary as,
refwhy = "a pointer"; refwhy = "a pointer";
} }
break; break;
#endif
default: default:
break; break;
@ -919,9 +923,11 @@ ffeglobal_proc_ref_arg (ffesymbol s, int argno, ffeglobalArgSummary as,
defwhy = "an alternate-return label"; defwhy = "an alternate-return label";
break; break;
#if 0
case FFEGLOBAL_argsummaryPTR: case FFEGLOBAL_argsummaryPTR:
defwhy = "a pointer"; defwhy = "a pointer";
break; break;
#endif
default: default:
defwhy = "???"; defwhy = "???";

View File

@ -55,7 +55,6 @@ typedef enum
FFEGLOBAL_argsummarySUBR, /* Subroutine (intrinsic, external). */ FFEGLOBAL_argsummarySUBR, /* Subroutine (intrinsic, external). */
FFEGLOBAL_argsummaryFUNC, /* Function (intrinsic, external). */ FFEGLOBAL_argsummaryFUNC, /* Function (intrinsic, external). */
FFEGLOBAL_argsummaryALTRTN, /* Alternate-return (label). */ FFEGLOBAL_argsummaryALTRTN, /* Alternate-return (label). */
FFEGLOBAL_argsummaryPTR, /* Pointer (%LOC, LOC()). */
FFEGLOBAL_argsummaryANY, FFEGLOBAL_argsummaryANY,
FFEGLOBAL_argsummary FFEGLOBAL_argsummary
} ffeglobalArgSummary; } ffeglobalArgSummary;

View File

@ -256,7 +256,6 @@ ffeinfo_type (ffeinfoBasictype basictype, ffeinfoKindtype kindtype)
{ {
assert (basictype < FFEINFO_basictype); assert (basictype < FFEINFO_basictype);
assert (kindtype < FFEINFO_kindtype); assert (kindtype < FFEINFO_kindtype);
assert (ffeinfo_types_[basictype][kindtype] != NULL);
return ffeinfo_types_[basictype][kindtype]; return ffeinfo_types_[basictype][kindtype];
} }

View File

@ -46,6 +46,30 @@ Miscellany
This order is not strict---for example, some items This order is not strict---for example, some items
involve a combination of these elements. involve a combination of these elements.
@heading In 0.5.24:
@itemize @bullet
@item
@code{g77} no longer crashes when compiling code
containing specification statements such as
@samp{INTEGER(KIND=7) PTR}.
@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.
@item
Improve documentation and indexing.
@end itemize
@heading In 0.5.23: @heading In 0.5.23:
@itemize @bullet @itemize @bullet
@item @item