aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorTobias Burnus <burnus@net-b.de>2007-12-10 22:42:56 +0100
committerTobias Burnus <burnus@gcc.gnu.org>2007-12-10 22:42:56 +0100
commitda9ad92397352dceef1f0bd3d2cb7ca221489570 (patch)
treed4fafe2f112c015aa7fea4ff86ef6e25076cdb6d /gcc
parentc8305c98510ac10855723216959cbca83182aeb8 (diff)
downloadgcc-da9ad92397352dceef1f0bd3d2cb7ca221489570.zip
gcc-da9ad92397352dceef1f0bd3d2cb7ca221489570.tar.gz
gcc-da9ad92397352dceef1f0bd3d2cb7ca221489570.tar.bz2
re PR fortran/34425 (bogus warning)
2007-12-10 Tobias Burnus <burnus@net-b.de> PR fortran/34425 * interface.c (get_expr_storage_size): Use signed integer when obtaining the bounds. 2007-12-10 Tobias Burnus <burnus@net-b.de> PR fortran/34425 * gfortran.dg/argument_checking_10.f90: New. From-SVN: r130752
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/interface.c4
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/argument_checking_10.f9016
4 files changed, 29 insertions, 2 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 4c184f8..cd9b218 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2007-12-10 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/34425
+ * interface.c (get_expr_storage_size): Use signed integer when
+ obtaining the bounds.
+
2007-12-09 Jakub Jelinek <jakub@redhat.com>
PR fortran/22244
diff --git a/gcc/fortran/interface.c b/gcc/fortran/interface.c
index 0ff3112..b242d07 100644
--- a/gcc/fortran/interface.c
+++ b/gcc/fortran/interface.c
@@ -1642,8 +1642,8 @@ get_expr_storage_size (gfc_expr *e)
if (ref->u.ar.as->lower[i] && ref->u.ar.as->upper[i]
&& ref->u.ar.as->lower[i]->expr_type == EXPR_CONSTANT
&& ref->u.ar.as->upper[i]->expr_type == EXPR_CONSTANT)
- elements *= mpz_get_ui (ref->u.ar.as->upper[i]->value.integer)
- - mpz_get_ui (ref->u.ar.as->lower[i]->value.integer)
+ elements *= mpz_get_si (ref->u.ar.as->upper[i]->value.integer)
+ - mpz_get_si (ref->u.ar.as->lower[i]->value.integer)
+ 1L;
else
return 0;
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index dfcb3b0..2f438da 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2007-12-10 Tobias Burnus <burnus@net-b.de>
+
+ PR fortran/34425
+ * gfortran.dg/argument_checking_10.f90: New.
+
2007-12-10 Jakub Jelinek <jakub@redhat.com>
PR rtl-optimization/34302
diff --git a/gcc/testsuite/gfortran.dg/argument_checking_10.f90 b/gcc/testsuite/gfortran.dg/argument_checking_10.f90
new file mode 100644
index 0000000..315ee03
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/argument_checking_10.f90
@@ -0,0 +1,16 @@
+! { dg-do compile }
+!
+! PR fortran/34425
+!
+! Contributed by Joost VandeVondele
+!
+IMPLICIT NONE
+INTEGER :: i(-1:1)
+INTEGER :: j(-2:-1)
+CALL S(i)
+CALL S(j) ! { dg-warning "Actual argument contains too few elements for dummy argument 'i' .2/3." }
+CONTAINS
+ SUBROUTINE S(i)
+ INTEGER :: i(0:2)
+ END SUBROUTINE
+END