Hi Steve, Your patch works as advertised. The second line in the error message receives the same dg-error line as the first, giving "# of expected passes 6".
I'll push as soon as I get a chance - likely this afternoon. Thanks! 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) > > === gfortran Summary === > > # of expected passes 4 > # of unexpected failures 1 > /home/kargl/gcc/obj/gcc/gfortran version 16.0.0 20250712 (experimental) > (GCC) > > > % gfcx -c a.f90 > a.f90:13:20: > > 9 | subroutine bah ! { dg-error "is already defined at" } > | 2~~~~~~~~~~~~~ > ...... > 13 | subroutine bah > | 1 > Error: Procedure 'bah' at (1) is already defined at (2) > a.f90:15:71: > > I do not remember how to deal with multi-line error messages > in the dg-error case. Any guidance? > > -- > Steve > > > 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..2e4470aada2 > --- /dev/null > +++ b/gcc/testsuite/gfortran.dg/import13.f90 > @@ -0,0 +1,18 @@ > +! { dg-do compile } > +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 > + ! 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 >