Commit efb0828d by H.J. Lu Committed by H.J. Lu

re PR fortran/26041 ([4.1]: FORTRAN compiler won't compile the valid code)

2006-02-05  H.J. Lu  <hongjiu.lu@intel.com>

	PR fortran/26041
	PR fortran/26064
	* resolve.c (resolve_types): New function.
	(resolve_codes): Likewise.
	(gfc_resolve): Use them.

From-SVN: r110619
parent c235e388
2006-02-05 H.J. Lu <hongjiu.lu@intel.com>
PR fortran/26041
PR fortran/26064
* resolve.c (resolve_types): New function.
(resolve_codes): Likewise.
(gfc_resolve): Use them.
2006-02-05 Roger Sayle <roger@eyesopen.com>
* trans-stmt.c (gfc_evaluate_where_mask): Use LOGICAL*1 for WHERE
......
......@@ -5793,21 +5793,20 @@ resolve_fntype (gfc_namespace * ns)
}
/* This function is called after a complete program unit has been compiled.
Its purpose is to examine all of the expressions associated with a program
unit, assign types to all intermediate expressions, make sure that all
assignments are to compatible types and figure out which names refer to
which functions or subroutines. */
/* Examine all of the expressions associated with a program unit,
assign types to all intermediate expressions, make sure that all
assignments are to compatible types and figure out which names
refer to which functions or subroutines. It doesn't check code
block, which is handled by resolve_code. */
void
gfc_resolve (gfc_namespace * ns)
static void
resolve_types (gfc_namespace * ns)
{
gfc_namespace *old_ns, *n;
gfc_namespace *n;
gfc_charlen *cl;
gfc_data *d;
gfc_equiv *eq;
old_ns = gfc_current_ns;
gfc_current_ns = ns;
resolve_entries (ns);
......@@ -5825,7 +5824,7 @@ gfc_resolve (gfc_namespace * ns)
"also be PURE", n->proc_name->name,
&n->proc_name->declared_at);
gfc_resolve (n);
resolve_types (n);
}
forall_flag = 0;
......@@ -5849,12 +5848,43 @@ gfc_resolve (gfc_namespace * ns)
for (eq = ns->equiv; eq; eq = eq->next)
resolve_equivalence (eq);
cs_base = NULL;
resolve_code (ns->code, ns);
/* Warn about unused labels. */
if (gfc_option.warn_unused_labels)
warn_unused_label (ns->st_labels);
}
/* Call resolve_code recursively. */
static void
resolve_codes (gfc_namespace * ns)
{
gfc_namespace *n;
for (n = ns->contained; n; n = n->sibling)
resolve_codes (n);
gfc_current_ns = ns;
cs_base = NULL;
resolve_code (ns->code, ns);
}
/* This function is called after a complete program unit has been compiled.
Its purpose is to examine all of the expressions associated with a program
unit, assign types to all intermediate expressions, make sure that all
assignments are to compatible types and figure out which names refer to
which functions or subroutines. */
void
gfc_resolve (gfc_namespace * ns)
{
gfc_namespace *old_ns;
old_ns = gfc_current_ns;
resolve_types (ns);
resolve_codes (ns);
gfc_current_ns = old_ns;
}
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment