diff options
author | Thomas Koenig <tkoenig@gcc.gnu.org> | 2019-07-29 17:45:24 +0000 |
---|---|---|
committer | Thomas Koenig <tkoenig@gcc.gnu.org> | 2019-07-29 17:45:24 +0000 |
commit | 5c6aa9a8919cbf0dcf3c375f51012720bfb5f3a1 (patch) | |
tree | cd61bcbec9ac2df1a286648ec164ee57268d04c9 /gcc/fortran/dump-parse-tree.c | |
parent | 937337890108676b3588d77bd704927d349db71b (diff) | |
download | gcc-5c6aa9a8919cbf0dcf3c375f51012720bfb5f3a1.zip gcc-5c6aa9a8919cbf0dcf3c375f51012720bfb5f3a1.tar.gz gcc-5c6aa9a8919cbf0dcf3c375f51012720bfb5f3a1.tar.bz2 |
re PR fortran/90813 (gfortran.dg/proc_ptr_51.f90 fails (SIGSEGV) after 272084)
2019-07-29 Thomas Koenig <tkoenig@gcc.gnu.org>
PR fortran/90813
* dump-parse-tree.c (show_global_symbol): New function.
(gfc_dump_global_symbols): New function.
* gfortran.h (gfc_traverse_gsymbol): Add prototype.
(gfc_dump_global_symbols): Likewise.
* invoke.texi: Document -fdump-fortran-global.
* lang.opt: Add -fdump-fortran-global.
* parse.c (gfc_parse_file): Handle flag_dump_fortran_global.
* symbol.c (gfc_traverse_gsymbol): New function.
* trans-decl.c (sym_identifier): New function.
(mangled_identifier): New function, doing most of the work
of gfc_sym_mangled_identifier.
(gfc_sym_mangled_identifier): Use mangled_identifier. Add mangled
identifier to global symbol table.
(get_proc_pointer_decl): Use backend decl from global identifier
if present.
From-SVN: r273880
Diffstat (limited to 'gcc/fortran/dump-parse-tree.c')
-rw-r--r-- | gcc/fortran/dump-parse-tree.c | 33 |
1 files changed, 33 insertions, 0 deletions
diff --git a/gcc/fortran/dump-parse-tree.c b/gcc/fortran/dump-parse-tree.c index 4cff805..798519f 100644 --- a/gcc/fortran/dump-parse-tree.c +++ b/gcc/fortran/dump-parse-tree.c @@ -3462,3 +3462,36 @@ write_interop_decl (gfc_symbol *sym) else if (sym->attr.flavor == FL_PROCEDURE) write_proc (sym, true); } + +/* This section deals with dumping the global symbol tree. */ + +/* Callback function for printing out the contents of the tree. */ + +static void +show_global_symbol (gfc_gsymbol *gsym, void *f_data) +{ + FILE *out; + out = (FILE *) f_data; + + if (gsym->name) + fprintf (out, "name=%s", gsym->name); + + if (gsym->sym_name) + fprintf (out, ", sym_name=%s", gsym->sym_name); + + if (gsym->mod_name) + fprintf (out, ", mod_name=%s", gsym->mod_name); + + if (gsym->binding_label) + fprintf (out, ", binding_label=%s", gsym->binding_label); + + fputc ('\n', out); +} + +/* Show all global symbols. */ + +void +gfc_dump_global_symbols (FILE *f) +{ + gfc_traverse_gsymbol (gfc_gsym_root, show_global_symbol, (void *) f); +} |