diff options
author | Erik Edelmann <eedelman@gcc.gnu.org> | 2005-11-01 21:40:06 +0000 |
---|---|---|
committer | Erik Edelmann <eedelman@gcc.gnu.org> | 2005-11-01 21:40:06 +0000 |
commit | 6a8697062cd7b29a9bb17b5d4af09035e143a23d (patch) | |
tree | 0ee1433fb0643d7286402f0cb08dcb92b6e4f0f9 /gcc/fortran/parse.c | |
parent | 92119f26f7b3b4cb611ef71d5d786c9960434440 (diff) | |
download | gcc-6a8697062cd7b29a9bb17b5d4af09035e143a23d.zip gcc-6a8697062cd7b29a9bb17b5d4af09035e143a23d.tar.gz gcc-6a8697062cd7b29a9bb17b5d4af09035e143a23d.tar.bz2 |
re PR fortran/24245 (-fdump-parse-tree gives ICE for CONTAINED functions)
fortran/
2005-11-01 Erik Edelmann <eedelman@gcc.gnu.org>
PR 24245
* trans.c (gfc_generate_code): Move code to create a main
program symbol from here ...
* parse.c (main_program_symbol): ... to this new
function, setting the locus from gfc_current_locus
instead of ns->code->loc.
(gfc_parse_file): Call main_program_symbol for main programs.
From-SVN: r106353
Diffstat (limited to 'gcc/fortran/parse.c')
-rw-r--r-- | gcc/fortran/parse.c | 24 |
1 files changed, 24 insertions, 0 deletions
diff --git a/gcc/fortran/parse.c b/gcc/fortran/parse.c index 430d8f3..0fc8f96 100644 --- a/gcc/fortran/parse.c +++ b/gcc/fortran/parse.c @@ -970,6 +970,28 @@ gfc_ascii_statement (gfc_statement st) } +/* Create a symbol for the main program and assign it to ns->proc_name. */ + +static void +main_program_symbol (gfc_namespace * ns) +{ + gfc_symbol *main_program; + symbol_attribute attr; + + gfc_get_symbol ("MAIN__", ns, &main_program); + gfc_clear_attr (&attr); + attr.flavor = FL_PROCEDURE; + attr.proc = PROC_UNKNOWN; + attr.subroutine = 1; + attr.access = ACCESS_PUBLIC; + attr.is_main_program = 1; + main_program->attr = attr; + main_program->declared_at = gfc_current_locus; + ns->proc_name = main_program; + gfc_commit_symbols (); +} + + /* Do whatever is necessary to accept the last statement. */ static void @@ -2590,6 +2612,7 @@ loop: prog_locus = gfc_current_locus; push_state (&s, COMP_PROGRAM, gfc_new_block); + main_program_symbol(gfc_current_ns); accept_statement (st); add_global_program (); parse_progunit (ST_NONE); @@ -2631,6 +2654,7 @@ loop: prog_locus = gfc_current_locus; push_state (&s, COMP_PROGRAM, gfc_new_block); + main_program_symbol(gfc_current_ns); parse_progunit (st); break; } |