Re: [PATCH, v2] PR fortran/105184 - ICE in gfc_array_init_size, at fortran/trans-array.cc:5841

2022-04-10 Thread Thomas Koenig via Gcc-patches



Hi Harald,


Regtested again with no new failures.  OK for mainline?


Looks good to me.  Thanks for the patch!

Best regards

Thomas


Re: [PATCH, v2] PR fortran/105184 - ICE in gfc_array_init_size, at fortran/trans-array.cc:5841

2022-04-10 Thread Paul Richard Thomas via Gcc-patches
Hi Harald,

It looks good to me - OK for mainline.

Thanks

Paul


On Fri, 8 Apr 2022 at 21:45, Harald Anlauf via Fortran 
wrote:

> Dear all,
>
> Am 06.04.22 um 22:30 schrieb Harald Anlauf via Fortran:
> > Dear all,
> >
> > the logic for checking the allocate-coshape-spec in an ALLOCATE
> > statement was sort of sideways, and allowed to pass invalid
> > specifications to the code generation.
> >
> > The fix seems obvious (to me).
>
> after submitting the previous patch, I found another invalid case with
> a missing lower bound which was still silently accepted.  The attached
> revised patch adds this check, improves the original error message to
> actually point to the coarray specification, and renames the testcase
> to align better with existing coarray testcases.
>
> > Regtested on x86_64-pc-linux-gnu.  OK for mainline?
> > (12 or wait for 13?).
>
> Regtested again with no new failures.  OK for mainline?
>
> Thanks,
> Harald
>


-- 
"If you can't explain it simply, you don't understand it well enough" -
Albert Einstein


[PATCH, v2] PR fortran/105184 - ICE in gfc_array_init_size, at fortran/trans-array.cc:5841

2022-04-08 Thread Harald Anlauf via Gcc-patches

Dear all,

Am 06.04.22 um 22:30 schrieb Harald Anlauf via Fortran:

Dear all,

the logic for checking the allocate-coshape-spec in an ALLOCATE
statement was sort of sideways, and allowed to pass invalid
specifications to the code generation.

The fix seems obvious (to me).


after submitting the previous patch, I found another invalid case with
a missing lower bound which was still silently accepted.  The attached
revised patch adds this check, improves the original error message to
actually point to the coarray specification, and renames the testcase
to align better with existing coarray testcases.


Regtested on x86_64-pc-linux-gnu.  OK for mainline?
(12 or wait for 13?).


Regtested again with no new failures.  OK for mainline?

Thanks,
Harald
From 483cbf9942dcfcf74a912312dbbcda2f108200ea Mon Sep 17 00:00:00 2001
From: Harald Anlauf 
Date: Wed, 6 Apr 2022 22:24:21 +0200
Subject: [PATCH] Fortran: fix checking of coshape specification in ALLOCATE
 statement

gcc/fortran/ChangeLog:

	PR fortran/105184
	* array.cc (match_subscript): Reject assumed size coarray
	specification with missing lower bound.
	* resolve.cc (resolve_allocate_expr): Fix logic for checking
	allocate-coshape-spec in ALLOCATE statement.

gcc/testsuite/ChangeLog:

	PR fortran/105184
	* gfortran.dg/coarray_44.f90: Adjust expected output.
	* gfortran.dg/coarray_allocate_11.f90: Likewise.
	* gfortran.dg/coarray_allocate_12.f90: New test.
---
 gcc/fortran/array.cc  |  7 +++
 gcc/fortran/resolve.cc| 11 ++-
 gcc/testsuite/gfortran.dg/coarray_44.f90  |  2 ++
 .../gfortran.dg/coarray_allocate_11.f90   |  6 +++---
 .../gfortran.dg/coarray_allocate_12.f90   | 19 +++
 5 files changed, 37 insertions(+), 8 deletions(-)
 create mode 100644 gcc/testsuite/gfortran.dg/coarray_allocate_12.f90

diff --git a/gcc/fortran/array.cc b/gcc/fortran/array.cc
index eb9ed8580a0..90ea812d699 100644
--- a/gcc/fortran/array.cc
+++ b/gcc/fortran/array.cc
@@ -134,6 +134,13 @@ end_element:
   if (m == MATCH_ERROR)
 return MATCH_ERROR;
 
+  if (star && ar->start[i] == NULL)
+{
+  gfc_error ("Missing lower bound in assumed size "
+		 "coarray specification at %C");
+  return MATCH_ERROR;
+}
+
   /* See if we have an optional stride.  */
   if (gfc_match_char (':') == MATCH_YES)
 {
diff --git a/gcc/fortran/resolve.cc b/gcc/fortran/resolve.cc
index 21c8797c938..05f8f1bf6c2 100644
--- a/gcc/fortran/resolve.cc
+++ b/gcc/fortran/resolve.cc
@@ -8108,12 +8108,13 @@ resolve_allocate_expr (gfc_expr *e, gfc_code *code, bool *array_alloc_wo_spec)
 	goto failure;
 
 	  case  DIMEN_RANGE:
-	if (ar->start[i] == 0 || ar->end[i] == 0)
+	/* F2018:R937:
+	 * allocate-coshape-spec is [ lower-bound-expr : ] upper-bound-expr
+	 */
+	if (ar->start[i] == 0 || ar->end[i] == 0 || ar->stride[i] != NULL)
 	  {
-		/* If ar->stride[i] is NULL, we issued a previous error.  */
-		if (ar->stride[i] == NULL)
-		  gfc_error ("Bad array specification in ALLOCATE statement "
-			 "at %L", >where);
+		gfc_error ("Bad coarray specification in ALLOCATE statement "
+			   "at %L", >where);
 		goto failure;
 	  }
 	else if (gfc_dep_compare_expr (ar->start[i], ar->end[i]) == 1)
diff --git a/gcc/testsuite/gfortran.dg/coarray_44.f90 b/gcc/testsuite/gfortran.dg/coarray_44.f90
index 15fb8c76ce4..545b5462251 100644
--- a/gcc/testsuite/gfortran.dg/coarray_44.f90
+++ b/gcc/testsuite/gfortran.dg/coarray_44.f90
@@ -10,3 +10,5 @@ program pr70071
   allocate (z(2)[1::2,*])  ! { dg-error "Bad array dimension" }
   allocate (z(1::2)[2,*])  ! { dg-error "Bad array specification in ALLOCATE" }
 end program pr70071
+
+! { dg-prune-output "Bad coarray specification in ALLOCATE statement" }
diff --git a/gcc/testsuite/gfortran.dg/coarray_allocate_11.f90 b/gcc/testsuite/gfortran.dg/coarray_allocate_11.f90
index 0e806f0955b..0e4f64e1e3d 100644
--- a/gcc/testsuite/gfortran.dg/coarray_allocate_11.f90
+++ b/gcc/testsuite/gfortran.dg/coarray_allocate_11.f90
@@ -3,10 +3,10 @@
 program p
integer, allocatable :: z[:,:]
integer :: i
-   allocate (z[1:,*]) ! { dg-error "Bad array specification in ALLOCATE statement" }
-   allocate (z[:2,*]) ! { dg-error "Bad array specification in ALLOCATE statement" }
+   allocate (z[1:,*]) ! { dg-error "Bad coarray specification in ALLOCATE statement" }
+   allocate (z[:2,*]) ! { dg-error "Bad coarray specification in ALLOCATE statement" }
allocate (z[2:1,*]) ! { dg-error "Upper cobound is less than lower cobound" }
-   allocate (z[:0,*]) ! { dg-error "Bad array specification in ALLOCATE statement" }
+   allocate (z[:0,*]) ! { dg-error "Bad coarray specification in ALLOCATE statement" }
allocate (z[0,*]) ! { dg-error "Upper cobound is less than lower cobound" }
allocate (z[1,*]) ! This is OK
allocate (z[1:1,*]) ! This is OK
diff --git a/gcc/testsuite/gfortran.dg/coarray_allocate_12.f90