diff options
author | tobi <tobi@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-06-29 18:57:25 +0000 |
---|---|---|
committer | tobi <tobi@138bc75d-0d04-0410-961f-82ee72b054a4> | 2004-06-29 18:57:25 +0000 |
commit | 82f5ee132c82157465f042ee2ed5fea3642e2224 (patch) | |
tree | 1b6d752026c3acc16fa03a6a9d17146fbf0fd272 /gcc/fortran/symbol.c | |
parent | 8b780f471876d7e363f595e2f154e2af3d427f2d (diff) | |
download | gcc-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.c | 77 |
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) |