ICE in gfc_free_namespace. ice-on-invalid.
authorJerry DeLisle <jvdelisle@gcc.gnu.org>
Sun, 29 Jan 2023 04:00:34 +0000 (20:00 -0800)
committerJerry DeLisle <jvdelisle@gcc.gnu.org>
Sun, 29 Jan 2023 19:10:06 +0000 (11:10 -0800)
PR fortran/103506

gcc/fortran/ChangeLog:

* parse.cc (parse_module): Remove use of a bool error value
that prevented proper setting of the namespace pointer.

gcc/testsuite/ChangeLog:

* gfortran.dg/pr103506_1.f90: New test.

gcc/fortran/parse.cc
gcc/testsuite/gfortran.dg/pr103506_1.f90 [new file with mode: 0644]

index 0fb19cc..039e7e7 100644 (file)
@@ -6502,7 +6502,6 @@ parse_module (void)
 {
   gfc_statement st;
   gfc_gsymbol *s;
-  bool error;
 
   s = gfc_get_gsymbol (gfc_new_block->name, false);
   if (s->defined || (s->type != GSYM_UNKNOWN && s->type != GSYM_MODULE))
@@ -6525,7 +6524,6 @@ parse_module (void)
 
   st = parse_spec (ST_NONE);
 
-  error = false;
 loop:
   switch (st)
     {
@@ -6544,16 +6542,11 @@ loop:
     default:
       gfc_error ("Unexpected %s statement in MODULE at %C",
                 gfc_ascii_statement (st));
-
-      error = true;
       reject_statement ();
       st = next_statement ();
       goto loop;
     }
-
-  /* Make sure not to free the namespace twice on error.  */
-  if (!error)
-    s->ns = gfc_current_ns;
+  s->ns = gfc_current_ns;
 }
 
 
diff --git a/gcc/testsuite/gfortran.dg/pr103506_1.f90 b/gcc/testsuite/gfortran.dg/pr103506_1.f90
new file mode 100644 (file)
index 0000000..3f57809
--- /dev/null
@@ -0,0 +1,9 @@
+! { dg-do compile }
+! PR103506 ICE in gfc_free_namespace. ice-on-invalid
+! Test case from the PR.
+module m ! { dg-error "is already being used as a MODULE" }
+stop ! { dg-error "Unexpected STOP statement in MODULE" }
+end
+program p
+call m ! { dg-error "is already being used as a MODULE" }
+end