re PR fortran/77380 (ICE in gfc_check_dependency, at fortran/dependency.c:1255)
authorSteven G. Kargl <kargl@gcc.gnu.org>
Sat, 27 Aug 2016 15:45:35 +0000 (15:45 +0000)
committerSteven G. Kargl <kargl@gcc.gnu.org>
Sat, 27 Aug 2016 15:45:35 +0000 (15:45 +0000)
2016-08-27  Steven G. Kargl <kargl@gcc.gnu.org>

PR fortran/77380
* dependency.c (gfc_check_dependency): Do not assert with
-fcoarray=lib.

2016-08-27  Steven G. Kargl <kargl@gcc.gnu.org>

PR fortran/77380
* gfortran.dg/pr77380.f90: New test.

From-SVN: r239796

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

index f15e936..9ac5721 100644 (file)
@@ -1,5 +1,11 @@
 2016-08-27  Steven G. Kargl <kargl@gcc.gnu.org>
 
+       PR fortran/77380
+       * dependency.c (gfc_check_dependency): Do not assert with
+       -fcoarray=lib.
+
+2016-08-27  Steven G. Kargl <kargl@gcc.gnu.org>
+
        PR fortran/77372
        simplify.c (simplify_ieee_selected_real_kind): Check for NULL pointers.
 
index f117de0..58a443b 100644 (file)
@@ -1252,6 +1252,12 @@ gfc_check_dependency (gfc_expr *expr1, gfc_expr *expr2, bool identical)
   gfc_constructor *c;
   int n;
 
+  /* -fcoarray=lib can end up here with expr1->expr_type set to EXPR_FUNCTION
+     and a reference to _F.caf_get, so skip the assert.  */
+  if (expr1->expr_type == EXPR_FUNCTION
+      && strcmp (expr1->value.function.name, "_F.caf_get") == 0)
+    return 0;
+
   gcc_assert (expr1->expr_type == EXPR_VARIABLE);
 
   switch (expr2->expr_type)
index 68e1804..7d117ee 100644 (file)
@@ -1,5 +1,10 @@
 2016-08-27  Steven G. Kargl <kargl@gcc.gnu.org>
 
+       PR fortran/77380
+       * gfortran.dg/pr77380.f90: New test.
+
+2016-08-27  Steven G. Kargl <kargl@gcc.gnu.org>
+
        PR fortran/77372
        gfortran.dg/pr77372.f90: New test.
 
diff --git a/gcc/testsuite/gfortran.dg/pr77380.f90 b/gcc/testsuite/gfortran.dg/pr77380.f90
new file mode 100644 (file)
index 0000000..f369be6
--- /dev/null
@@ -0,0 +1,6 @@
+! { dg-do compile }
+! { dg-options "-fcoarray=lib -O2" }
+program p
+   integer :: z(2)[*] = 1
+   z(:)[1] = z(:)[*]       ! { dg-error "must be a scalar at" }
+end