aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorFrancois-Xavier Coudert <fxcoudert@gcc.gnu.org>2008-05-14 21:17:54 +0000
committerFrançois-Xavier Coudert <fxcoudert@gcc.gnu.org>2008-05-14 21:17:54 +0000
commitf10827b13be2d7f3a031c93ba6fcc35f81f762fd (patch)
treed90a1cc6679a260627c1c0176e3a19d8f0be3cf1 /gcc
parent71d46ca56cb36baa54ec8a1de7cbc0fda9ae3245 (diff)
downloadgcc-f10827b13be2d7f3a031c93ba6fcc35f81f762fd.zip
gcc-f10827b13be2d7f3a031c93ba6fcc35f81f762fd.tar.gz
gcc-f10827b13be2d7f3a031c93ba6fcc35f81f762fd.tar.bz2
re PR fortran/35685 (UBOUND incorrect for run-time zero-sized section)
PR fortran/35685 * trans-intrinsic.c (gfc_conv_intrinsic_bound): Correctly handle zero-size sections. * gfortran.dg/bound_3.f90: New test. From-SVN: r135305
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/trans-intrinsic.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/bound_3.f9020
4 files changed, 33 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 7ed34a6..d478a25 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,5 +1,11 @@
2008-05-14 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
+ PR fortran/35685
+ * trans-intrinsic.c (gfc_conv_intrinsic_bound): Correctly
+ handle zero-size sections.
+
+2008-05-14 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
+
PR fortran/36215
* scanner.c (preprocessor_line): Allocate enough memory for a
wide string.
diff --git a/gcc/fortran/trans-intrinsic.c b/gcc/fortran/trans-intrinsic.c
index 9f022e7..2f9cadd 100644
--- a/gcc/fortran/trans-intrinsic.c
+++ b/gcc/fortran/trans-intrinsic.c
@@ -938,6 +938,8 @@ gfc_conv_intrinsic_bound (gfc_se * se, gfc_expr * expr, int upper)
size = fold_build2 (MINUS_EXPR, gfc_array_index_type, ubound, lbound);
se->expr = fold_build2 (PLUS_EXPR, gfc_array_index_type, size,
gfc_index_one_node);
+ se->expr = fold_build2 (MAX_EXPR, gfc_array_index_type, se->expr,
+ gfc_index_zero_node);
}
else
se->expr = gfc_index_one_node;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index ab790da..f2795bb 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2008-05-14 Francois-Xavier Coudert <fxcoudert@gcc.gnu.org>
+
+ PR fortran/35685
+ * gfortran.dg/bound_3.f90: New test.
+
2008-05-14 Michael Meissner <michael.meissner@amd.com>
Dwarakanath Rajagopal <dwarak.rajagopal@amd.com>
diff --git a/gcc/testsuite/gfortran.dg/bound_3.f90 b/gcc/testsuite/gfortran.dg/bound_3.f90
new file mode 100644
index 0000000..7b1696d
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/bound_3.f90
@@ -0,0 +1,20 @@
+! { dg-do run }
+!
+ call s(1,0)
+ call s(2,0)
+ call s(3,0)
+ call s(4,0)
+ call s(5,1)
+ call s(6,2)
+ call s(7,3)
+contains
+ subroutine s(n,m)
+ implicit none
+ integer n, m
+ real x(10)
+ if (any (lbound(x(5:n)) /= 1)) call abort
+ if (lbound(x(5:n),1) /= 1) call abort
+ if (any (ubound(x(5:n)) /= m)) call abort
+ if (ubound(x(5:n),1) /= m) call abort
+ end subroutine
+end program