Re: [Patch, fortran] PR68534 - No error on mismatch in number of arguments between submodule and module interface
Committed revision as 231319. Thanks for testing the patch. Paul On 5 December 2015 at 17:41, Steve Karglwrote: > On Sat, Dec 05, 2015 at 04:20:54PM +0100, Paul Richard Thomas wrote: >> >> The cause of the segfault, I believe, was an error: 'sym' being used >> instead of 'progname': Could you please try the attached patch when >> you have a moment. > > Patch fixes the issue of i386-*-freebsd. Thanks for the > prompt fix. OK to commit (with ChangeLog, of course). > > -- > Steve -- Outside of a dog, a book is a man's best friend. Inside of a dog it's too dark to read. Groucho Marx
Re: [Patch, fortran] PR68534 - No error on mismatch in number of arguments between submodule and module interface
Dear Steve, I'll take a look at this this afternoon. Thanks for bringing it to my attention. Cheers Paul On 3 December 2015 at 07:43, Steve Karglwrote: > 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 -- Outside of a dog, a book is a man's best friend. Inside of a dog it's too dark to read. Groucho Marx
Re: [Patch, fortran] PR68534 - No error on mismatch in number of arguments between submodule and module interface
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
Re: [Patch, fortran] PR68534 - No error on mismatch in number of arguments between submodule and module interface
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) > > Using valgrind on 'f951 submodule_10.f08' yields > > laptop-kargl:kargl[324] valgrind > ~/work/libexec/gcc/i386-unknown-freebsd11.0/6.0.0/f951 submodule_10.f08 > ==74201== Memcheck, a memory error detector > ==74201== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al. > ==74201== Using Valgrind-3.10.0 and LibVEX; rerun with -h for copyright info > ==74201== Command: > /home/kargl/work/libexec/gcc/i386-unknown-freebsd11.0/6.0.0/f951 > submodule_10.f08 > ==74201== > ==74201== Use of uninitialised value of size 4 > ==74201==at 0x81DC20C: gfc_match_formal_arglist(gfc_symbol*, int, int) > (decl.c:4829) > ==74201==by 0x81DE6F7: gfc_match_subroutine() (decl.c:6016) > ==74201==by 0x8248FC0: decode_statement() (parse.c:378) > ==74201==by 0x8247844: next_free (parse.c:1076) > ==74201==by 0x8247844: next_statement() (parse.c:1310) > ==74201==by 0x8258ACC: parse_contained(int) (parse.c:5038) > ==74201==by 0x824870F: parse_module() (parse.c:5431) > ==74201==by 0x82467D4: gfc_parse_file() (parse.c:5729) > ==74201==by 0x82972E7: gfc_be_parse_file() (f95-lang.c:201) > ==74201==by 0x87E4787: compile_file() (toplev.c:464) > ==74201==by 0x87E43E4: do_compile (toplev.c:1951) > ==74201==by 0x87E43E4: toplev::main(int, char**) (toplev.c:2058) > ==74201==by 0x8FCC00D: main (main.c:39) > ==74201== > ==74201== Invalid read of size 1 > ==74201==at 0x81DC20C: gfc_match_formal_arglist(gfc_symbol*, int, int) > (decl.==74201==at 0x81DC20C: gfc_match_formal_arglist(gfc_symbol*, int, > int) (decl.c:4829) > ==74201==by 0x81DE6F7: gfc_match_subroutine() (decl.c:6016) > ==74201==by 0x8248FC0: decode_statement() (parse.c:378) > ==74201==by 0x8247844: next_free (parse.c:1076) > ==74201==by 0x8247844: next_statement() (parse.c:1310) > ==74201==by 0x8258ACC: parse_contained(int) (parse.c:5038) > ==74201==by 0x824870F: parse_module() (parse.c:5431) > ==74201==by 0x82467D4: gfc_parse_file() (parse.c:5729) > ==74201==by 0x82972E7: gfc_be_parse_file() (f95-lang.c:201) > ==74201==by 0x87E4787: compile_file() (toplev.c:464) > ==74201==by 0x87E43E4: do_compile (toplev.c:1951) > ==74201==by 0x87E43E4: toplev::main(int, char**) (toplev.c:2058) > ==74201==by 0x8FCC00D: main (main.c:39) > ==74201== Address 0x8094 is not stack'd, malloc'd or (recently) free'd > ==74201== > > > I suspect that we have a sym=NULL dereferenc someplace. > > -- > steve > > > On Mon, Nov 30, 2015 at 02:35:35PM +0100, Paul Richard Thomas wrote: > > Committed as revision 231072. > > > > Thanks for the review > > > > Paul > > > > On 28 November 2015 at 17:19, Steve Kargl > >wrote: > > > On Sat, Nov 28, 2015 at 11:35:54AM +0100, Paul Richard Thomas wrote: > > >> + > > >> + /* Abreviated
Re: [Patch, fortran] PR68534 - No error on mismatch in number of arguments between submodule and module interface
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) 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) Using valgrind on 'f951 submodule_10.f08' yields laptop-kargl:kargl[324] valgrind ~/work/libexec/gcc/i386-unknown-freebsd11.0/6.0.0/f951 submodule_10.f08 ==74201== Memcheck, a memory error detector ==74201== Copyright (C) 2002-2013, and GNU GPL'd, by Julian Seward et al. ==74201== Using Valgrind-3.10.0 and LibVEX; rerun with -h for copyright info ==74201== Command: /home/kargl/work/libexec/gcc/i386-unknown-freebsd11.0/6.0.0/f951 submodule_10.f08 ==74201== ==74201== Use of uninitialised value of size 4 ==74201==at 0x81DC20C: gfc_match_formal_arglist(gfc_symbol*, int, int) (decl.c:4829) ==74201==by 0x81DE6F7: gfc_match_subroutine() (decl.c:6016) ==74201==by 0x8248FC0: decode_statement() (parse.c:378) ==74201==by 0x8247844: next_free (parse.c:1076) ==74201==by 0x8247844: next_statement() (parse.c:1310) ==74201==by 0x8258ACC: parse_contained(int) (parse.c:5038) ==74201==by 0x824870F: parse_module() (parse.c:5431) ==74201==by 0x82467D4: gfc_parse_file() (parse.c:5729) ==74201==by 0x82972E7: gfc_be_parse_file() (f95-lang.c:201) ==74201==by 0x87E4787: compile_file() (toplev.c:464) ==74201==by 0x87E43E4: do_compile (toplev.c:1951) ==74201==by 0x87E43E4: toplev::main(int, char**) (toplev.c:2058) ==74201==by 0x8FCC00D: main (main.c:39) ==74201== ==74201== Invalid read of size 1 ==74201==at 0x81DC20C: gfc_match_formal_arglist(gfc_symbol*, int, int) (decl.==74201==at 0x81DC20C: gfc_match_formal_arglist(gfc_symbol*, int, int) (decl.c:4829) ==74201==by 0x81DE6F7: gfc_match_subroutine() (decl.c:6016) ==74201==by 0x8248FC0: decode_statement() (parse.c:378) ==74201==by 0x8247844: next_free (parse.c:1076) ==74201==by 0x8247844: next_statement() (parse.c:1310) ==74201==by 0x8258ACC: parse_contained(int) (parse.c:5038) ==74201==by 0x824870F: parse_module() (parse.c:5431) ==74201==by 0x82467D4: gfc_parse_file() (parse.c:5729) ==74201==by 0x82972E7: gfc_be_parse_file() (f95-lang.c:201) ==74201==by 0x87E4787: compile_file() (toplev.c:464) ==74201==by 0x87E43E4: do_compile (toplev.c:1951) ==74201==by 0x87E43E4: toplev::main(int, char**) (toplev.c:2058) ==74201==by 0x8FCC00D: main (main.c:39) ==74201== Address 0x8094 is not stack'd, malloc'd or (recently) free'd ==74201== I suspect that we have a sym=NULL dereferenc someplace. -- steve On Mon, Nov 30, 2015 at 02:35:35PM +0100, Paul Richard Thomas wrote: > Committed as revision 231072. > > Thanks for the review > > Paul > > On 28 November 2015 at 17:19, Steve Kargl >wrote: > > On Sat, Nov 28, 2015 at 11:35:54AM +0100, Paul Richard Thomas wrote: > >> + > >> + /* Abreviated module procedure declaration is not meant to have any > > > > s/Abreviated/Abbreviated > > > >> + formal arguments! */ > >> + if (!sym->abr_modproc_decl && formal && !head) > >> + arg_count_mismatch = true; > >> + > > > > OK to commit. > > > > -- > > Steve > > > > -- > Outside of a dog, a book is a man's best friend. Inside of a dog it's > too dark to read. > > Groucho Marx -- Steve
Re: [Patch, fortran] PR68534 - No error on mismatch in number of arguments between submodule and module interface
Committed as revision 231072. Thanks for the review Paul On 28 November 2015 at 17:19, Steve Karglwrote: > On Sat, Nov 28, 2015 at 11:35:54AM +0100, Paul Richard Thomas wrote: >> + >> + /* Abreviated module procedure declaration is not meant to have any > > s/Abreviated/Abbreviated > >> + formal arguments! */ >> + if (!sym->abr_modproc_decl && formal && !head) >> + arg_count_mismatch = true; >> + > > OK to commit. > > -- > Steve -- Outside of a dog, a book is a man's best friend. Inside of a dog it's too dark to read. Groucho Marx
Re: [Patch, fortran] PR68534 - No error on mismatch in number of arguments between submodule and module interface
On Sat, Nov 28, 2015 at 11:35:54AM +0100, Paul Richard Thomas wrote: > + > + /* Abreviated module procedure declaration is not meant to have any s/Abreviated/Abbreviated > + formal arguments! */ > + if (!sym->abr_modproc_decl && formal && !head) > + arg_count_mismatch = true; > + OK to commit. -- Steve