Fix fortran/66100 bound simplification ICE
authorMikael Morin <mikael@gcc.gnu.org>
Mon, 11 May 2015 21:03:50 +0000 (21:03 +0000)
committerMikael Morin <mikael@gcc.gnu.org>
Mon, 11 May 2015 21:03:50 +0000 (21:03 +0000)
        PR fortran/66100
gcc/fortran/
        * simplify.c (simplify_bound): Fix assert to accept subobject * arrays.
gcc/testsuite/
        * gfortran.dg/bound_simplification_6.f90: New.

From-SVN: r223019

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

index 4b1c84f0decbacb1e19f38963286118642dcb2aa..fb6824513aa962c311ee96852ba9194cb768af87 100644 (file)
@@ -1,3 +1,8 @@
+2015-05-11  Mikael Morin  <mikael@gcc.gnu.org>
+
+       PR fortran/66100
+       * simplify.c (simplify_bound): Fix assert to accept subobject arrays.
+
 2015-05-10  Thomas Koenig  <tkoenig@gcc.gnu.org>
 
        PR fortran/66041
index f8d55fdcd06071d30b7018642877ba433a38a4c6..f49c6c08851e9720dff8aedda5387a9286891096 100644 (file)
@@ -3463,8 +3463,8 @@ simplify_bound (gfc_expr *array, gfc_expr *dim, gfc_expr *kind, int upper)
   gcc_assert (!as
              || (as->type != AS_DEFERRED
                  && array->expr_type == EXPR_VARIABLE
-                 && !array->symtree->n.sym->attr.allocatable
-                 && !array->symtree->n.sym->attr.pointer));
+                 && !gfc_expr_attr (array).allocatable
+                 && !gfc_expr_attr (array).pointer));
 
   if (dim == NULL)
     {
index 4dd6efcec5132a8b5148b0f6bbab90ae14d06132..0c97ea2f84113bdb882fe324e4a6ce7792a848c9 100644 (file)
@@ -1,3 +1,8 @@
+2015-05-11  Mikael Morin  <mikael@gcc.gnu.org>
+
+       PR fortran/66100
+       * gfortran.dg/bound_simplification_6.f90: New.
+
 2015-05-11  Steve Ellcey  <sellcey@mips.com>
 
        * gcc.target/mips/branch-1.c: Pass argument to bar().
diff --git a/gcc/testsuite/gfortran.dg/bound_simplification_6.f90 b/gcc/testsuite/gfortran.dg/bound_simplification_6.f90
new file mode 100644 (file)
index 0000000..fb17836
--- /dev/null
@@ -0,0 +1,27 @@
+! { dg-do compile }
+! { dg-additional-options "-fdump-tree-original" }
+!
+! PR fortran/66100
+! ICE on lbound simplification
+!
+! Original test case by Joost VandeVondele <Joost.VandeVondele@mat.ethz.ch>
+! Reduced by Thomas Koenig <tkoenig@gcc.gnu.org>
+!
+MODULE qs_integrate_potential_low
+  INTEGER, PARAMETER :: dp = 8
+  TYPE cell_type
+    REAL(KIND=8) :: h_inv(3,3)
+  END TYPE
+  TYPE(cell_type), POINTER                 :: cell
+  REAL(KIND=dp), DIMENSION(3)              :: rp
+  CONTAINS
+    SUBROUTINE integrate_general_opt()
+    REAL(KIND=dp) :: gp(3)
+    INTEGER :: ng
+    if (any(lbound(cell%h_inv) /= 1)) call abort
+    if (any(ubound(cell%h_inv) /= 3)) call abort
+    END SUBROUTINE integrate_general_opt
+END MODULE qs_integrate_potential_low
+! { dg-final { scan-tree-dump-not "bound" "original" } }
+! { dg-final { scan-tree-dump-not "abort" "original" } }
+! { dg-final { cleanup-tree-dump "original" } }