re PR fortran/79312 (Empty array in assignment not correctly type-checked)
authorThomas Koenig <tkoenig@gcc.gnu.org>
Tue, 1 Aug 2017 19:09:02 +0000 (19:09 +0000)
committerThomas Koenig <tkoenig@gcc.gnu.org>
Tue, 1 Aug 2017 19:09:02 +0000 (19:09 +0000)
2017-08-01  Thomas König  <tkoenig@gcc.gnu.org>

PR fortran/79312
* intrisic.c (gfc_convert_type_warn):  Only set typespec for
empty array constructors which don't have it already.

2017-08-01  Thomas König  <tkoenig@gcc.gnu.org>

PR fortran/79312
* gfortran.dg/logical_assignment_1.f90:  New test.

From-SVN: r250792

gcc/fortran/ChangeLog
gcc/fortran/intrinsic.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/logical_assignment_1.f90 [new file with mode: 0644]

index bd9ecc348f4430c4df7b23f859b6dd59eb678b2c..7c10d8c59f3c32b90917610dccc37132e2ff09d7 100644 (file)
@@ -1,3 +1,9 @@
+2017-08-01  Thomas König  <tkoenig@gcc.gnu.org>
+
+       PR fortran/79312
+       * intrisic.c (gfc_convert_type_warn):  Only set typespec for
+       empty array constructors which don't have it already.
+
 2017-08-01  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        PR fortran/45435
index 2f60fe8c87721344ab2d4e3e03fdd8f0318bd5ad..8965d509882bc40dd3a03fd8dfc6a6453d8a5685 100644 (file)
@@ -4919,9 +4919,11 @@ gfc_convert_type_warn (gfc_expr *expr, gfc_typespec *ts, int eflag, int wflag)
   if (ts->type == BT_UNKNOWN)
     goto bad;
 
-  /* NULL and zero size arrays get their type here.  */
-  if (expr->expr_type == EXPR_NULL
-      || (expr->expr_type == EXPR_ARRAY && expr->value.constructor == NULL))
+  /* NULL and zero size arrays get their type here, unless they already have a
+     typespec.  */
+  if ((expr->expr_type == EXPR_NULL
+       || (expr->expr_type == EXPR_ARRAY && expr->value.constructor == NULL))
+      && expr->ts.type == BT_UNKNOWN)
     {
       /* Sometimes the RHS acquire the type.  */
       expr->ts = *ts;
index 53081a7c3304a64784ea4b005f4a03ad6ccd3543..3ba6bb980706a3f53a3bdce463f699033f4fd0b2 100644 (file)
@@ -1,3 +1,8 @@
+2017-08-01  Thomas König  <tkoenig@gcc.gnu.org>
+
+       PR fortran/79312
+       * gfortran.dg/logical_assignment_1.f90:  New test.
+
 2017-08-01  Martin Liska  <mliska@suse.cz>
 
        PR middle-end/70140
diff --git a/gcc/testsuite/gfortran.dg/logical_assignment_1.f90 b/gcc/testsuite/gfortran.dg/logical_assignment_1.f90
new file mode 100644 (file)
index 0000000..c228980
--- /dev/null
@@ -0,0 +1,10 @@
+! { dg-do compile }
+! PR 79312 - assigning a logical value to a real
+! is invalid.
+! Test case by John Harper.
+program emptyarray5
+  implicit none
+  real a(0)
+  a = [logical::] ! { dg-error "Can't convert LOGICAL" }
+  print *,size(a)
+end program emptyarray5