Re: [PATCH] PR fortran/85521 -- Zero length substrings in array aconstructors
Hi, sorry, I didn't get, that this is standard conforming. So go for it: Ok for trunk and thanks for the patch. - Andre On Thu, 10 May 2018 08:41:21 -0700 Steve Karglwrote: > It is certainly possible to give a warning, but it > would be odd (to me) to warn about technically > standard conforming code. gfortran doesn't warn > for zero-sized array references or zero-length > substrings in other context. > > program foo >real a(4) >character(len=10) s >s = '12345' >a = 1 >print *, size(a(2:1)), len(s(3:2)) > end program foo > % gfc -o z a.f90 > % ./z >0 0 > -- Andre Vehreschild * Email: vehre ad gmx dot de
Re: [PATCH] PR fortran/85521 -- Zero length substrings in array aconstructors
On Thu, May 10, 2018 at 07:56:59PM +0200, Thomas Koenig wrote: > Am 10.05.2018 um 17:41 schrieb Steve Kargl: > > It is certainly possible to give a warning, but it > > would be odd (to me) to warn about technically > > standard conforming code. > > Maybe we could add > > gfc_warning (0, "Standard-conforming code found, your code may run as > expected"); > > at the end of the compilation :-) Given the amount of nonstandard code gfortran has to cope with, the above isn't a bad idea! Perhaps, we can also hand out merit badges. :-) -- Steve
Re: [PATCH] PR fortran/85521 -- Zero length substrings in array aconstructors
Am 10.05.2018 um 17:41 schrieb Steve Kargl: It is certainly possible to give a warning, but it would be odd (to me) to warn about technically standard conforming code. Maybe we could add gfc_warning (0, "Standard-conforming code found, your code may run as expected"); at the end of the compilation :-)
Re: [PATCH] PR fortran/85521 -- Zero length substrings in array aconstructors
It is certainly possible to give a warning, but it would be odd (to me) to warn about technically standard conforming code. gfortran doesn't warn for zero-sized array references or zero-length substrings in other context. program foo real a(4) character(len=10) s s = '12345' a = 1 print *, size(a(2:1)), len(s(3:2)) end program foo % gfc -o z a.f90 % ./z 0 0 -- steve On Thu, May 10, 2018 at 05:18:25PM +0200, Andre Vehreschild wrote: > Hi Steve, > > the patch looks OK to me. Is it possible to give a warning > there, at least with some higher warning-level? Or is there > already one? I haven't tested it. > > Regards, > Andre > > On Thu, 10 May 2018 07:15:21 -0700 > Steve Karglwrote: > > > On Thu, May 10, 2018 at 11:48:24AM +0200, Dominique d'Humières wrote: > > > Hi Steve, > > > > > > AFAICT the patch is missing. > > > > > > Thanks for working on these PRs. > > > > > > > Whoops. Looks like attached the log instead of diff. > > > > Index: gcc/fortran/array.c > > === > > --- gcc/fortran/array.c (revision 259945) > > +++ gcc/fortran/array.c (working copy) > > @@ -2046,7 +2046,8 @@ got_charlen: > > else > > return true; > > > > - gcc_assert (current_length != -1); > > + if (current_length < 0) > > + current_length = 0; > > > > if (found_length == -1) > > found_length = current_length; > > Index: gcc/testsuite/gfortran.dg/pr85521_1.f90 > > === > > --- gcc/testsuite/gfortran.dg/pr85521_1.f90 (nonexistent) > > +++ gcc/testsuite/gfortran.dg/pr85521_1.f90 (working copy) > > @@ -0,0 +1,8 @@ > > +! { dg-do compile } > > +! PR fortran/85521 > > +program p > > + character(3) :: c = 'abc' > > + character(3) :: z(1) > > + z = [ c(:-1) ] > > + print *, z > > +end > > Index: gcc/testsuite/gfortran.dg/pr85521_2.f90 > > === > > --- gcc/testsuite/gfortran.dg/pr85521_2.f90 (nonexistent) > > +++ gcc/testsuite/gfortran.dg/pr85521_2.f90 (working copy) > > @@ -0,0 +1,8 @@ > > +! { dg-do compile } > > +! PR fortran/85521 > > +program p > > + character(3) :: c = 'abc' > > + character(3) :: z(1) > > + z = [ c(:-2) ] > > + print *, z > > +end > > > > > -- > Andre Vehreschild * Email: vehre ad gmx dot de -- Steve 20170425 https://www.youtube.com/watch?v=VWUpyCsUKR4 20161221 https://www.youtube.com/watch?v=IbCHE-hONow
Re: [PATCH] PR fortran/85521 -- Zero length substrings in array aconstructors
Hi Steve, the patch looks OK to me. Is it possible to give a warning there, at least with some higher warning-level? Or is there already one? I haven't tested it. Regards, Andre On Thu, 10 May 2018 07:15:21 -0700 Steve Karglwrote: > On Thu, May 10, 2018 at 11:48:24AM +0200, Dominique d'Humières wrote: > > Hi Steve, > > > > AFAICT the patch is missing. > > > > Thanks for working on these PRs. > > > > Whoops. Looks like attached the log instead of diff. > > Index: gcc/fortran/array.c > === > --- gcc/fortran/array.c (revision 259945) > +++ gcc/fortran/array.c (working copy) > @@ -2046,7 +2046,8 @@ got_charlen: > else > return true; > > - gcc_assert (current_length != -1); > + if (current_length < 0) > + current_length = 0; > > if (found_length == -1) > found_length = current_length; > Index: gcc/testsuite/gfortran.dg/pr85521_1.f90 > === > --- gcc/testsuite/gfortran.dg/pr85521_1.f90 (nonexistent) > +++ gcc/testsuite/gfortran.dg/pr85521_1.f90 (working copy) > @@ -0,0 +1,8 @@ > +! { dg-do compile } > +! PR fortran/85521 > +program p > + character(3) :: c = 'abc' > + character(3) :: z(1) > + z = [ c(:-1) ] > + print *, z > +end > Index: gcc/testsuite/gfortran.dg/pr85521_2.f90 > === > --- gcc/testsuite/gfortran.dg/pr85521_2.f90 (nonexistent) > +++ gcc/testsuite/gfortran.dg/pr85521_2.f90 (working copy) > @@ -0,0 +1,8 @@ > +! { dg-do compile } > +! PR fortran/85521 > +program p > + character(3) :: c = 'abc' > + character(3) :: z(1) > + z = [ c(:-2) ] > + print *, z > +end > -- Andre Vehreschild * Email: vehre ad gmx dot de
Re: [PATCH] PR fortran/85521 -- Zero length substrings in array aconstructors
On Thu, May 10, 2018 at 11:48:24AM +0200, Dominique d'Humières wrote: > Hi Steve, > > AFAICT the patch is missing. > > Thanks for working on these PRs. > Whoops. Looks like attached the log instead of diff. Index: gcc/fortran/array.c === --- gcc/fortran/array.c (revision 259945) +++ gcc/fortran/array.c (working copy) @@ -2046,7 +2046,8 @@ got_charlen: else return true; - gcc_assert (current_length != -1); + if (current_length < 0) + current_length = 0; if (found_length == -1) found_length = current_length; Index: gcc/testsuite/gfortran.dg/pr85521_1.f90 === --- gcc/testsuite/gfortran.dg/pr85521_1.f90 (nonexistent) +++ gcc/testsuite/gfortran.dg/pr85521_1.f90 (working copy) @@ -0,0 +1,8 @@ +! { dg-do compile } +! PR fortran/85521 +program p + character(3) :: c = 'abc' + character(3) :: z(1) + z = [ c(:-1) ] + print *, z +end Index: gcc/testsuite/gfortran.dg/pr85521_2.f90 === --- gcc/testsuite/gfortran.dg/pr85521_2.f90 (nonexistent) +++ gcc/testsuite/gfortran.dg/pr85521_2.f90 (working copy) @@ -0,0 +1,8 @@ +! { dg-do compile } +! PR fortran/85521 +program p + character(3) :: c = 'abc' + character(3) :: z(1) + z = [ c(:-2) ] + print *, z +end -- Steve
Re: [PATCH] PR fortran/85521 -- Zero length substrings in array aconstructors
Hi Steve, AFAICT the patch is missing. Thanks for working on these PRs. Dominique
[PATCH] PR fortran/85521 -- Zero length substrings in array aconstructors
I paln to commit the attached patch on Saturday unless someone objects. 2018-05-09 Steven G. KarglPR fortran/85521 * array.c (gfc_resolve_character_array_constructor): Substrings with upper bound smaller than lower bound are zero length strings. 2018-05-09 Steven G. Kargl PR fortran/85521 * gfortran.dg/pr85521_1.f90: New test. * gfortran.dg/pr85521_2.f90: New test. -- Steve 2018-05-09 Steven G. Kargl PR fortran/85521 * array.c (gfc_resolve_character_array_constructor): Substrings with upper bound smaller than lower bound are zero length strings. 2018-05-09 Steven G. Kargl PR fortran/85521 * gfortran.dg/pr85521_1.f90: New test. * gfortran.dg/pr85521_2.f90: New test.