aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteven G. Kargl <kargl@gcc.gnu.org>2016-07-30 23:01:06 +0000
committerSteven G. Kargl <kargl@gcc.gnu.org>2016-07-30 23:01:06 +0000
commit14a1b0f62365854039c6952b54699e71b488a04b (patch)
tree54c1c5e532ad18166a3465120bb778aa7e7682a7
parent840702abfd91688a699bf44703a289427b2b44b8 (diff)
2016-07-30 Steven G. Kargl <kargl@gcc.gnu.org>
PR fortran/68566 * check.c (gfc_check_reshape): Check for constant expression. 2016-07-30 Steven G. Kargl <kargl@gcc.gnu.org> PR fortran/68566 * gfortran.dg/pr68566.f90: new test. git-svn-id: https://gcc.gnu.org/svn/gcc/trunk@238911 138bc75d-0d04-0410-961f-82ee72b054a4
-rw-r--r--gcc/fortran/ChangeLog5
-rw-r--r--gcc/fortran/check.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/pr68566.f9013
4 files changed, 24 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 13f1a9089db..32a1e86ab25 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,5 +1,10 @@
2016-07-30 Steven G. Kargl <kargl@gcc.gnu.org>
+ PR fortran/68566
+ * check.c (gfc_check_reshape): Check for constant expression.
+
+2016-07-30 Steven G. Kargl <kargl@gcc.gnu.org>
+
PR fortran/69867
* decl.c (build_struct): Ensure that pointers point to something.
diff --git a/gcc/fortran/check.c b/gcc/fortran/check.c
index 085ac40c870..288957aaa34 100644
--- a/gcc/fortran/check.c
+++ b/gcc/fortran/check.c
@@ -3827,7 +3827,7 @@ gfc_check_reshape (gfc_expr *source, gfc_expr *shape,
if (!type_check (order, 3, BT_INTEGER))
return false;
- if (order->expr_type == EXPR_ARRAY)
+ if (order->expr_type == EXPR_ARRAY && gfc_is_constant_expr (order))
{
int i, order_size, dim, perm[GFC_MAX_DIMENSIONS];
gfc_expr *e;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index a73a39defc6..e4ce4c7eceb 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2016-07-30 Steven G. Kargl <kargl@gcc.gnu.org>
+
+ PR fortran/68566
+ * gfortran.dg/pr68566.f90: new test.
+
2016-07-30 Martin Sebor <msebor@redhat.com>
PR c++/60760
diff --git a/gcc/testsuite/gfortran.dg/pr68566.f90 b/gcc/testsuite/gfortran.dg/pr68566.f90
new file mode 100644
index 00000000000..160e9ac58f6
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr68566.f90
@@ -0,0 +1,13 @@
+! { dg-do run }
+program p
+ character(len=20) s1, s2
+ integer, allocatable :: n(:)
+ n = [2,1]
+ s1 = '1 5 2 6 3 0 4 0'
+ write(s2,'(8(I0,1x))') reshape ([1,2,3,4,5,6], [2,4], [0,0], [2,1])
+ if (trim(s1) /= trim(s2)) call abort
+ write(s2,'(8(I0,1x))') reshape ([1,2,3,4,5,6], [2,4], [0,0], n)
+ if (trim(s1) /= trim(s2)) call abort
+ write(s2,'(8(I0,1x))') reshape ([1,2,3,4,5,6], [2,4], [0,0], [n])
+ if (trim(s1) /= trim(s2)) call abort
+end