From 0b2186594e810d529667971a22ab9906e9caf60e Mon Sep 17 00:00:00 2001
From: eedelman <eedelman@138bc75d-0d04-0410-961f-82ee72b054a4>
Date: Tue, 1 Nov 2005 21:40:06 +0000
Subject: [PATCH] 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.



git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@106353 138bc75d-0d04-0410-961f-82ee72b054a4
---
 gcc/fortran/ChangeLog | 10 ++++++++++
 gcc/fortran/parse.c   | 24 ++++++++++++++++++++++++
 gcc/fortran/trans.c   | 24 ------------------------
 3 files changed, 34 insertions(+), 24 deletions(-)

diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index d40dff57e5e4..7fad64cddf79 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,13 @@
+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.
+
 2005-11-01  Tobias Schl"uter  <tobias.schlueter@physik.uni-muenchen.de>
 
 	PR fortran/24404
diff --git a/gcc/fortran/parse.c b/gcc/fortran/parse.c
index 430d8f3761c8..0fc8f966adab 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;
     }
diff --git a/gcc/fortran/trans.c b/gcc/fortran/trans.c
index a3c3ddc48fb7..5f7c86063bd4 100644
--- a/gcc/fortran/trans.c
+++ b/gcc/fortran/trans.c
@@ -656,30 +656,6 @@ gfc_generate_code (gfc_namespace * ns)
       return;
     }
 
-  /* Main program subroutine.  */
-  if (!ns->proc_name)
-    {
-      gfc_symbol *main_program;
-      symbol_attribute attr;
-
-      /* Lots of things get upset if a subroutine doesn't have a symbol, so we
-         make one now.  Hopefully we've set all the required fields.  */
-      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;
-
-      /* Set the location to the first line of code.  */
-      if (ns->code)
-	main_program->declared_at = ns->code->loc;
-      ns->proc_name = main_program;
-      gfc_commit_symbols ();
-    }
-
   gfc_generate_function_code (ns);
 }
 
-- 
GitLab