On Wed, Dec 02, 2015 at 10:26:30PM -0800, Steve Kargl wrote: > On Wed, Dec 02, 2015 at 10:02:33PM -0800, Steve Kargl wrote: > > Paul, > > > > I'm stumped. Something is broken on i386-*-freebsd. :-( > > > > Running /mnt/kargl/gcc/gcc/testsuite/gfortran.dg/dg.exp ... > > FAIL: gfortran.dg/submodule_10.f08 -O (internal compiler error) > > FAIL: gfortran.dg/submodule_10.f08 -O (test for excess errors) > > FAIL: gfortran.dg/submodule_11.f08 -O0 (internal compiler error) > > FAIL: gfortran.dg/submodule_11.f08 -O0 (test for excess errors) > > FAIL: gfortran.dg/submodule_11.f08 -O1 (internal compiler error) > > FAIL: gfortran.dg/submodule_11.f08 -O1 (test for excess errors) > > FAIL: gfortran.dg/submodule_11.f08 -O2 (internal compiler error) > > FAIL: gfortran.dg/submodule_11.f08 -O2 (test for excess errors) > > FAIL: gfortran.dg/submodule_11.f08 -O3 -fomit-frame-pointer > > -funroll-loops -fpeel-loops -ftracer -finline-functions (internal compiler > > error) > > FAIL: gfortran.dg/submodule_11.f08 -O3 -fomit-frame-pointer > > -funroll-loops -fpeel-loops -ftracer -finline-functions (test for excess > > errors) > > FAIL: gfortran.dg/submodule_11.f08 -O3 -g (internal compiler error) > > FAIL: gfortran.dg/submodule_11.f08 -O3 -g (test for excess errors) > > FAIL: gfortran.dg/submodule_11.f08 -Os (internal compiler error) > > FAIL: gfortran.dg/submodule_11.f08 -Os (test for excess errors) > > Well, if I change the order of the conditionals decl.c:4831, I > can get rid of the above FAILs. > > Index: decl.c > =================================================================== > --- decl.c (revision 231219) > +++ decl.c (working copy) > @@ -4826,7 +4826,7 @@ ok: > > /* Abbreviated module procedure declaration is not meant to have any > formal arguments! */ > - if (!sym->abr_modproc_decl && formal && !head) > + if (formal && !head && sym && !sym->abr_modproc_decl) > arg_count_mismatch = true; > > for (p = formal, q = head; p && q; p = p->next, q = q->next) > > -- > steve > > > FAIL: gfortran.dg/submodule_13.f08 -O (internal compiler error) > > FAIL: gfortran.dg/submodule_13.f08 -O (test for errors, line 29) > > FAIL: gfortran.dg/submodule_13.f08 -O (test for excess errors)
These ICEs persist at line 4831. In looking at the code, I'm now somewhat unsure what it should be doing. In particular, there are 2 gfc_error_now() calls in the below: for (p = formal, q = head; p && q; p = p->next, q = q->next) { if ((p->next != NULL && q->next == NULL) || (p->next == NULL && q->next != NULL)) arg_count_mismatch = true; else if ((p->sym == NULL && q->sym == NULL) || strcmp (p->sym->name, q->sym->name) == 0) continue; else gfc_error_now ("Mismatch in MODULE PROCEDURE formal " "argument names (%s/%s) at %C", p->sym->name, q->sym->name); } if (arg_count_mismatch) gfc_error_now ("Mismatch in number of MODULE PROCEDURE " "formal arguments at %C"); } return MATCH_YES; cleanup: gfc_free_formal_arglist (head); return m; But, we return MATCH_YES? I would expect setting m = MATCH_ERROR and jumping to cleanup. That's ugly. -- Steve