summaryrefslogtreecommitdiff
path: root/gcc/fortran/symbol.c
diff options
context:
space:
mode:
authortobi <tobi@138bc75d-0d04-0410-961f-82ee72b054a4>2004-06-29 18:57:25 +0000
committertobi <tobi@138bc75d-0d04-0410-961f-82ee72b054a4>2004-06-29 18:57:25 +0000
commit82f5ee132c82157465f042ee2ed5fea3642e2224 (patch)
tree1b6d752026c3acc16fa03a6a9d17146fbf0fd272 /gcc/fortran/symbol.c
parent8b780f471876d7e363f595e2f154e2af3d427f2d (diff)
downloadgcc-82f5ee132c82157465f042ee2ed5fea3642e2224.tar.gz
2004-06-29 Tobias Schlueter <tobias.schlueter@physik.uni-muenchen.de>
Andrew Vaught <andyv@firstinter.net> PR fortran/13249 PR fortran/15481 * declc (gfc_match_save): Adapt to new common structures, don't allow saving USE-associated common. * dump-parse-tree (gfc_show_attr): (saved_)common are not symbol attributes any longer. (gfc_show_symbol): Don't show old-style commons any longer. (gfc_show_namespace): Adapt call to gfc_traverse_symtree to new interface. * gfortran.h (symbol_attribute): Remove common and saved_common attributes. (gfc_symbol): Remove common_head element. (gfc_common_head): New struct. (gfc_get_common_head): New macro. (gfc_symtree): Add field 'common' to union. (gfc_namespace): Add field 'common_root'; change type of field 'blank_common' to blank_common. (gfc_add_data): New prototype. (gfc_traverse_symtree): Expect a symtree as first argument instead of namespace. * match.c (gfc_get_common): New function. (match_common_name): Change to take char * as argument, adapt, fix bug with empty name. (gfc_match_common): Adapt to new data structures. Disallow redeclaration of USE-associated COMMON-block. Fix bug with empty common. (var_element): Adapt to new common structures. * match.h (gfc_get_common): Declare. * module.c: Add 2004 to copyright years, add commons to module file layout description. (ab_attribute, attr_bits, mio_symbol_attributes): Remove code for removed attributes. (mio_symbol): Adapt to new way of storing common relations. (load_commons): New function. (read_module): Skip common list on first pass, load_commons at second. (write_commons): New function. (write_module): Call write_commons(). * symbol.c (gfc_add_saved_comon, gfc_add_common): Remove functions related to removed attributes. (gfc_add_data): New function. (gfc_clear_attr): Don't set removed attributes. (gfc_copy_attr): Don't copy removed attributes. (traverse_symtree): Remove. (gfc_traverse_symtree): Don't traverse symbol tree of the passed namespace, but require a symtree to be passed instead. Unify with traverse_symtree. (gfc_traverse_ns): Call gfc_traverse_symtree according to new interface. (save_symbol): Remove setting of removed attribute. * trans-common.c (gfc_sym_mangled_common_id): Change to take 'char *' argument instead of 'gfc_symbol'. (build_common_decl, new_segment, translate_common): Adapt to new data structures, add new argument name. (create_common): Adapt to new data structures, add new argument name. Fix typo in intialization of derived types. (finish_equivalences): Add second argument in call to create_common. (named_common): take 'gfc_symtree' instead of 'gfc_symbol'. (gfc_trans_common): Adapt to new data structures. * trans-decl.c (gfc_create_module_variables): Also output symbols from commons. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@83871 138bc75d-0d04-0410-961f-82ee72b054a4
Diffstat (limited to 'gcc/fortran/symbol.c')
-rw-r--r--gcc/fortran/symbol.c77
1 files changed, 17 insertions, 60 deletions
diff --git a/gcc/fortran/symbol.c b/gcc/fortran/symbol.c
index 4b5f34e6d2d..c1d0212a13e 100644
--- a/gcc/fortran/symbol.c
+++ b/gcc/fortran/symbol.c
@@ -673,24 +673,6 @@ gfc_add_save (symbol_attribute * attr, locus * where)
try
-gfc_add_saved_common (symbol_attribute * attr, locus * where)
-{
-
- if (check_used (attr, where))
- return FAILURE;
-
- if (attr->saved_common)
- {
- duplicate_attr ("SAVE", where);
- return FAILURE;
- }
-
- attr->saved_common = 1;
- return check_conflict (attr, where);
-}
-
-
-try
gfc_add_target (symbol_attribute * attr, locus * where)
{
@@ -722,22 +704,6 @@ gfc_add_dummy (symbol_attribute * attr, locus * where)
try
-gfc_add_common (symbol_attribute * attr, locus * where)
-{
- /* TODO: We currently add common blocks into the same namespace as normal
- variables. This is wrong. Disable the checks below as a temporary
- hack. See PR13249 */
-#if 0
- if (check_used (attr, where) || check_done (attr, where))
- return FAILURE;
-#endif
-
- attr->common = 1;
- return check_conflict (attr, where);
-}
-
-
-try
gfc_add_in_common (symbol_attribute * attr, locus * where)
{
@@ -757,6 +723,18 @@ gfc_add_in_common (symbol_attribute * attr, locus * where)
try
+gfc_add_data (symbol_attribute *attr, locus *where)
+{
+
+ if (check_used (attr, where))
+ return FAILURE;
+
+ attr->data = 1;
+ return check_conflict (attr, where);
+}
+
+
+try
gfc_add_in_namelist (symbol_attribute * attr, locus * where)
{
@@ -1061,7 +1039,6 @@ gfc_clear_attr (symbol_attribute * attr)
attr->save = 0;
attr->target = 0;
attr->dummy = 0;
- attr->common = 0;
attr->result = 0;
attr->entry = 0;
attr->data = 0;
@@ -1069,7 +1046,6 @@ gfc_clear_attr (symbol_attribute * attr)
attr->in_namelist = 0;
attr->in_common = 0;
- attr->saved_common = 0;
attr->function = 0;
attr->subroutine = 0;
attr->generic = 0;
@@ -1122,8 +1098,6 @@ gfc_copy_attr (symbol_attribute * dest, symbol_attribute * src, locus * where)
goto fail;
if (src->dummy && gfc_add_dummy (dest, where) == FAILURE)
goto fail;
- if (src->common && gfc_add_common (dest, where) == FAILURE)
- goto fail;
if (src->result && gfc_add_result (dest, where) == FAILURE)
goto fail;
if (src->entry)
@@ -1134,8 +1108,6 @@ gfc_copy_attr (symbol_attribute * dest, symbol_attribute * src, locus * where)
if (src->in_common && gfc_add_in_common (dest, where) == FAILURE)
goto fail;
- if (src->saved_common && gfc_add_saved_common (dest, where) == FAILURE)
- goto fail;
if (src->generic && gfc_add_generic (dest, where) == FAILURE)
goto fail;
@@ -2323,28 +2295,19 @@ clear_sym_mark (gfc_symtree * st)
/* Recursively traverse the symtree nodes. */
-static void
-traverse_symtree (gfc_symtree * st, void (*func) (gfc_symtree *))
+void
+gfc_traverse_symtree (gfc_symtree * st, void (*func) (gfc_symtree *))
{
-
if (st != NULL)
{
(*func) (st);
- traverse_symtree (st->left, func);
- traverse_symtree (st->right, func);
+ gfc_traverse_symtree (st->left, func);
+ gfc_traverse_symtree (st->right, func);
}
}
-void
-gfc_traverse_symtree (gfc_namespace * ns, void (*func) (gfc_symtree *))
-{
-
- traverse_symtree (ns->sym_root, func);
-}
-
-
/* Recursive namespace traversal function. */
static void
@@ -2370,7 +2333,7 @@ void
gfc_traverse_ns (gfc_namespace * ns, void (*func) (gfc_symbol *))
{
- gfc_traverse_symtree (ns, clear_sym_mark);
+ gfc_traverse_symtree (ns->sym_root, clear_sym_mark);
traverse_ns (ns->sym_root, func);
}
@@ -2385,12 +2348,6 @@ save_symbol (gfc_symbol * sym)
if (sym->attr.use_assoc)
return;
- if (sym->attr.common)
- {
- gfc_add_saved_common (&sym->attr, &sym->declared_at);
- return;
- }
-
if (sym->attr.in_common
|| sym->attr.dummy
|| sym->attr.flavor != FL_VARIABLE)