Re: [PATCH] PR fortran/81027 -- Issue error for assumed-shape array

2018-12-27 Thread Steve Kargl
On Thu, Dec 27, 2018 at 12:54:30PM +0100, Dominique d'Humières wrote:
> Hi Steve,
> 
> The test gfortran.dg/pr81027.f90 succeeds without the patch.
> Would not it be better to replace
> 
> { dg-error "is not permitted in an" }
> 
> with something such as
> 
> { dg-error "Assumed-shape array" }
> 
> ?
> 
> Otherwise the patch works as expected.
> 
> Thank for the fix.
> 

For the record, here's the commit message and patch that I committed.

2018-12-27  Steven G. Kargl  

PR fortran/81027
* expr.c (gfc_check_init_expr): Distinguish assumed-shape versus
deferred-shape dummy arguments in an error message.

2018-12-27  Steven G. Kargl  

PR fortran/81027
* gfortran.dg/pr81027.f90: New test.
* gfortran.dg/initialization_7.f90: Update error message.
-- 
Steve
Index: gcc/fortran/expr.c
===
--- gcc/fortran/expr.c	(revision 267435)
+++ gcc/fortran/expr.c	(working copy)
@@ -2869,9 +2869,16 @@ gfc_check_init_expr (gfc_expr *e)
 		break;
 
 	  case AS_DEFERRED:
-		gfc_error ("Deferred array %qs at %L is not permitted "
-			   "in an initialization expression",
-			   e->symtree->n.sym->name, &e->where);
+		if (!e->symtree->n.sym->attr.allocatable
+		&& !e->symtree->n.sym->attr.pointer
+		&& e->symtree->n.sym->attr.dummy)
+		  gfc_error ("Assumed-shape array %qs at %L is not permitted "
+			 "in an initialization expression",
+			 e->symtree->n.sym->name, &e->where);
+		else
+		  gfc_error ("Deferred array %qs at %L is not permitted "
+			 "in an initialization expression",
+			 e->symtree->n.sym->name, &e->where);
 		break;
 
 	  case AS_EXPLICIT:
Index: gcc/testsuite/gfortran.dg/pr81027.f90
===
--- gcc/testsuite/gfortran.dg/pr81027.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr81027.f90	(working copy)
@@ -0,0 +1,11 @@
+program badarray
+  implicit none
+  integer:: j(3) = [1,2,3]
+  call doubling(j)
+contains
+  subroutine doubling(  n)
+integer,intent(in)::n(:)
+integer::m = size(n)  ! { dg-error "Assumed-shape array" }
+print *, m! { dg-error "has no IMPLICIT type" }
+  end subroutine doubling
+end program badarray
Index: gcc/testsuite/gfortran.dg/initialization_7.f90
===
--- gcc/testsuite/gfortran.dg/initialization_7.f90	(revision 267435)
+++ gcc/testsuite/gfortran.dg/initialization_7.f90	(working copy)
@@ -6,7 +6,7 @@
 
 subroutine probleme(p)
   real(kind=8), dimension(:) :: p
-  integer :: nx = size(p, 1)  ! { dg-error "Deferred array" }
+  integer :: nx = size(p, 1)  ! { dg-error "Assumed-shape array" }
   integer :: nix
 
   nix = nx


Re: [PATCH] PR fortran/81027 -- Issue error for assumed-shape array

2018-12-27 Thread Steve Kargl
On Thu, Dec 27, 2018 at 12:54:30PM +0100, Dominique d'Humières wrote:
> Hi Steve,
> 
> The test gfortran.dg/pr81027.f90 succeeds without the patch. Would not it be 
> better to replace
> 
> { dg-error "is not permitted in an" }
> 
> with something such as
> 
> { dg-error "Assumed-shape array" }
> 
> ?
> 
> Otherwise the patch works as expected.
> 

Sure.  I also need to fix initialization_7.f90 that
showed up in some additional testing.

-- 
Steve


Re: [PATCH] PR fortran/81027 -- Issue error for assumed-shape array

2018-12-27 Thread Dominique d'Humières
Hi Steve,

The test gfortran.dg/pr81027.f90 succeeds without the patch. Would not it be 
better to replace

{ dg-error "is not permitted in an" }

with something such as

{ dg-error "Assumed-shape array" }

?

Otherwise the patch works as expected.

Thank for the fix.

Dominique



[PATCH] PR fortran/81027 -- Issue error for assumed-shape array

2018-12-25 Thread Steve Kargl
Tested on i586-*-freebsd.  OK to commit?

2018-12-25  Steven G. Kargl  

PR fortran/81027
* expr.c (gfc_check_init_expr): Issue an error message for an
assumed-shape array as opposed to a deferred-shape array.

2018-12-25  Steven G. Kargl  

PR fortran/81027
* gfortran.dg/pr81027.f90: New test.

-- 
Steve
Index: gcc/fortran/expr.c
===
--- gcc/fortran/expr.c	(revision 267418)
+++ gcc/fortran/expr.c	(working copy)
@@ -2869,9 +2869,15 @@ gfc_check_init_expr (gfc_expr *e)
 		break;
 
 	  case AS_DEFERRED:
-		gfc_error ("Deferred array %qs at %L is not permitted "
-			   "in an initialization expression",
-			   e->symtree->n.sym->name, &e->where);
+		if (!e->symtree->n.sym->attr.allocatable
+		&& e->symtree->n.sym->attr.dummy)
+		  gfc_error ("Assumed-shape array %qs at %L is not permitted "
+			 "in an initialization expression",
+			 e->symtree->n.sym->name, &e->where);
+		else
+		  gfc_error ("Deferred array %qs at %L is not permitted "
+			 "in an initialization expression",
+			 e->symtree->n.sym->name, &e->where);
 		break;
 
 	  case AS_EXPLICIT:
Index: gcc/testsuite/gfortran.dg/pr81027.f90
===
--- gcc/testsuite/gfortran.dg/pr81027.f90	(nonexistent)
+++ gcc/testsuite/gfortran.dg/pr81027.f90	(working copy)
@@ -0,0 +1,11 @@
+program badarray
+  implicit none
+  integer:: j(3) = [1,2,3]
+  call doubling(j)
+contains
+  subroutine doubling(  n)
+integer,intent(in)::n(:)
+integer::m = size(n)  ! { dg-error "is not permitted in an" }
+print *, m! { dg-error "has no IMPLICIT type" }
+  end subroutine doubling
+end program badarray