Re: [PATCH] PR fortran/85521 -- Zero length substrings in array aconstructors

2018-05-13 Thread Andre Vehreschild
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 Kargl  wrote:

> 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

2018-05-10 Thread Steve Kargl
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

2018-05-10 Thread Thomas Koenig

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

2018-05-10 Thread Steve Kargl
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 Kargl  wrote:
> 
> > 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

2018-05-10 Thread Andre Vehreschild
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 Kargl  wrote:

> 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

2018-05-10 Thread Steve Kargl
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

2018-05-10 Thread Dominique d'Humières
Hi Steve,

AFAICT the patch is missing.

Thanks for working on these PRs.

Dominique



[PATCH] PR fortran/85521 -- Zero length substrings in array aconstructors

2018-05-09 Thread Steve Kargl
I paln to commit the attached patch on Saturday unless
someone objects.

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.

-- 
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.