summaryrefslogtreecommitdiffstats
path: root/gcc
diff options
context:
space:
mode:
authorhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>2006-02-05 19:53:00 +0000
committerhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>2006-02-05 19:53:00 +0000
commitdd7622e6d3b955a40e1b8e7973dfedfa57dad5e6 (patch)
tree554cf2d83f328d7dcf4ddb3ce763ba1ff8b8f42c /gcc
parent6094df5ef4215bb2020b9960814dd512e400e252 (diff)
downloadppe42-gcc-dd7622e6d3b955a40e1b8e7973dfedfa57dad5e6.tar.gz
ppe42-gcc-dd7622e6d3b955a40e1b8e7973dfedfa57dad5e6.zip
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. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@110619 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog8
-rw-r--r--gcc/fortran/resolve.c56
2 files changed, 51 insertions, 13 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 34f1cb2180f..0bdbefdb6e2 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,11 @@
+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
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 474030b1e71..2a964f74bb2 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -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;
}
OpenPOWER on IntegriCloud