Dear All,

The failure that Steve mentioned below is fixed. ChangeLogs and patch are
self-describing.

Regtests fine - OK for mainline?

Paul

On Sat, 12 Jul 2025 at 19:57, Steve Kargl <s...@troutmask.apl.washington.edu>
wrote:

> All, Paul,
>
> In testing Paul's recent addition of support for IMPORT,
> I have uncovered an ICE due to mangled source code.  The
> code leads to a NULL pointer dereference.  The patch that
> follows my .sig fixes the issue.  Note the testcase has one
> FAIL.
>
> % gmake check-fortran RUNTESTFLAGS="dg.exp=import13.f90"
>   ...
> Running /home/kargl/gcc/gcc/gcc/testsuite/gfortran.dg/dg.exp ...
> FAIL: gfortran.dg/import13.f90   -O  (test for excess errors)
> ...
>
>
diff --git a/gcc/fortran/decl.cc b/gcc/fortran/decl.cc
index 111ebc5f845..af425754d08 100644
--- a/gcc/fortran/decl.cc
+++ b/gcc/fortran/decl.cc
@@ -5272,13 +5272,15 @@ gfc_match_import (void)
       switch (m)
 	{
 	case MATCH_YES:
-	  if (gfc_current_ns->parent !=  NULL
+	  if (gfc_current_ns->parent != NULL
 	      && gfc_find_symbol (name, gfc_current_ns->parent, 1, &sym))
 	    {
 	       gfc_error ("Type name %qs at %C is ambiguous", name);
 	       return MATCH_ERROR;
 	    }
-	  else if (!sym && gfc_current_ns->proc_name->ns->parent !=  NULL
+	  else if (!sym
+		   && gfc_current_ns->proc_name
+		   && gfc_current_ns->proc_name->ns->parent
 		   && gfc_find_symbol (name,
 				       gfc_current_ns->proc_name->ns->parent,
 				       1, &sym))
@@ -5289,7 +5291,8 @@ gfc_match_import (void)
 
 	  if (sym == NULL)
 	    {
-	      if (gfc_current_ns->proc_name->attr.if_source == IFSRC_IFBODY)
+	      if (gfc_current_ns->proc_name
+		  && gfc_current_ns->proc_name->attr.if_source == IFSRC_IFBODY)
 		{
 		  gfc_error ("Cannot IMPORT %qs from host scoping unit "
 			     "at %C - does not exist.", name);
diff --git a/gcc/testsuite/gfortran.dg/import13.f90 b/gcc/testsuite/gfortran.dg/import13.f90
new file mode 100644
index 00000000000..3bcfec33723
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/import13.f90
@@ -0,0 +1,21 @@
+! { dg-do compile }
+!
+! Contributed by Steve Kargl  <s...@troutmask.apl.washington.edu>
+!
+program foo
+   implicit none
+   integer i
+   i = 42
+   if (i /= 42) stop 1
+   call bah
+   contains
+      subroutine bah       ! { dg-error "is already defined at" }
+         i = 43
+         if (i /= 43) stop 2
+      end subroutine bah
+      subroutine bah       ! { dg-error "is already defined at" }
+         ! import statement missing a comma
+         import none       ! { dg-error "Unexpected IMPORT statement" }
+         i = 44            ! { dg-error "Unexpected assignment" }
+      end subroutine bah   ! { dg-error "Expecting END PROGRAM" }
+end program foo

Attachment: Change.Logs
Description: Binary data

Reply via email to