]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
tree-ssa-ccp.c (fold_const_aggregate_ref): Check that result of string folding is...
authorJan Hubicka <jh@suse.cz>
Thu, 9 Sep 2010 15:07:21 +0000 (17:07 +0200)
committerJan Hubicka <hubicka@gcc.gnu.org>
Thu, 9 Sep 2010 15:07:21 +0000 (15:07 +0000)
* tree-ssa-ccp.c (fold_const_aggregate_ref): Check that result of
string folding is of integral type.
* fortran.fortran-torture/compile/pr45598.f90: New test.

From-SVN: r164111

gcc/ChangeLog
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.fortran-torture/compile/pr45598.f90 [new file with mode: 0644]
gcc/tree-ssa-ccp.c

index c8bce534ca70544eb0bec1acfca2b036ab5a7fac..3b1225a3169186f03ead211ce6d189c138f23bf5 100644 (file)
@@ -1,3 +1,9 @@
+2010-09-09  Jan Hubicka  <jh@suse.cz>
+
+       PR tree-optimization/45598
+       * tree-ssa-ccp.c (fold_const_aggregate_ref): Check that result of
+       string folding is of integral type.
+
 2010-09-09  Nathan Sidwell  <nathan@codesourcery.com>
 
        * configure.ac (gnu_indirect_function): New test.
index c252a1fbd3cb1f493429c40da18f2344e6340534..2f0acf7a3fff5a4496527a5f40a2a4ccddce2e46 100644 (file)
@@ -1,3 +1,8 @@
+2010-09-08  Jan Hubicka  <jh@suse.cz>
+
+       PR tree-optimization/45598
+       * fortran.fortran-torture/compile/pr45598.f90: New test.
+
 2010-09-09  Nathan Sidwell  <nathan@codesourcery.com>
 
        * lib/target-supports-dg.exp (dg-require-ifunc): New.
diff --git a/gcc/testsuite/gfortran.fortran-torture/compile/pr45598.f90 b/gcc/testsuite/gfortran.fortran-torture/compile/pr45598.f90
new file mode 100644 (file)
index 0000000..b8a883e
--- /dev/null
@@ -0,0 +1,13 @@
+program main
+implicit none
+character(len=10) :: digit_string = '123456789'
+character :: digit_arr(10)
+call copy(digit_string, digit_arr)
+print '(1x, a1)',digit_arr(1:9)
+contains
+  subroutine copy(in, out)
+    character, dimension(10) :: in, out
+    out(1:10) = in(1:10)
+  end subroutine copy
+end program main
+
index 734147794a6b4baa3f0f82829c8f6cc7b79921f9..60e2b55b71ccea040075cc176440136f6f4f0841 100644 (file)
@@ -1398,8 +1398,7 @@ fold_const_aggregate_ref (tree t)
        }
 
       /* Fold read from constant string.  */
-      if (TREE_CODE (ctor) == STRING_CST
-         && TREE_CODE (idx) == INTEGER_CST)
+      if (TREE_CODE (ctor) == STRING_CST)
        {
          tree low_bound = array_ref_low_bound (t);
          double_int low_bound_cst;
@@ -1407,7 +1406,9 @@ fold_const_aggregate_ref (tree t)
          double_int length_cst;
          bool signed_p = TYPE_UNSIGNED (TREE_TYPE (idx));
 
-         if (TREE_CODE (low_bound) != INTEGER_CST)
+         if (TREE_CODE (idx) != INTEGER_CST
+             || !INTEGRAL_TYPE_P (TREE_TYPE (t))
+             || TREE_CODE (low_bound) != INTEGER_CST)
            return NULL_TREE;
          low_bound_cst = tree_to_double_int (low_bound);
          index_cst = tree_to_double_int (idx);