com.c (ffecom_check_size_overflow_): Add a test so that arrays too large for 32-bit...
authorToon Moene <toon@moene.indiv.nluug.nl>
Sat, 23 Mar 2002 20:00:10 +0000 (21:00 +0100)
committerToon Moene <toon@gcc.gnu.org>
Sat, 23 Mar 2002 20:00:10 +0000 (20:00 +0000)
2002-03-23  Toon Moene  <toon@moene.indiv.nluug.nl>

* com.c (ffecom_check_size_overflow_): Add a test
so that arrays too large for 32-bit byte-offset
addressing get caught.
* news.texi: Document the fixing of this problem.

From-SVN: r51243

gcc/f/ChangeLog
gcc/f/com.c
gcc/f/news.texi

index 9f2016c73f17104f6a5b6a9d98a8cbb8e45ab1dc..2f0f678389d51f1297d7310b54dadf1c50eb8fb3 100644 (file)
@@ -1,3 +1,10 @@
+2002-03-23  Toon Moene  <toon@moene.indiv.nluug.nl>
+
+       * com.c (ffecom_check_size_overflow_): Add a test
+       so that arrays too large for 32-bit byte-offset
+       addressing get caught.
+       * news.texi: Document the fixing of this problem.
+
 Sat Mar 23 11:18:17 2002  Andrew Cagney  <ac131313@redhat.com>
 
        * invoke.texi (Warning Options): Mention -Wswitch-default.
index fa64b99ce941dd058386ce483f37e0290e085a62..f698ae9e3cfe9e4ff82f047e325e5d7d1f7cfcba 100644 (file)
@@ -2262,8 +2262,13 @@ ffecom_check_size_overflow_ (ffesymbol s, tree type, bool dummy)
   if (TREE_CODE (TYPE_SIZE (type)) != INTEGER_CST)
     return type;
 
+  /* An array is too large if size is negative or the type_size overflows
+     or its "upper half" is larger than 3 (which would make the signed
+     byte size and offset computations overflow).  */
+
   if ((tree_int_cst_sgn (TYPE_SIZE (type)) < 0)
-      || (!dummy && TREE_OVERFLOW (TYPE_SIZE (type))))
+      || (!dummy && (TREE_INT_CST_HIGH (TYPE_SIZE (type)) > 3
+                    || TREE_OVERFLOW (TYPE_SIZE (type)))))
     {
       ffebad_start (FFEBAD_ARRAY_LARGE);
       ffebad_string (ffesymbol_text (s));
index 811ae576cf4417277d1e59aab8796a2204b8d0e4..a00efe33afcb2a87bf936c84fd56415d1bb44dbb 100644 (file)
@@ -10,7 +10,7 @@
 @c in the standalone derivations of this file (e.g. NEWS).
 @set copyrights-news 1995,1996,1997,1998,1999,2000,2001,2002
 
-@set last-update-news 2002-02-13
+@set last-update-news 2002-03-23
 
 @include root.texi
 
@@ -157,26 +157,30 @@ The following information was last updated on @value{last-update-news}:
 @itemize @bullet
 @item
 Problem Reports fixed (in chronological order of submission):
-@enumerate
-@item
- 947 Data statement initialization with subscript of kind INTEGER*2
-@item
-3743 Reference to intrinsic `ISHFT' invalid
-@item
-3807 Function BESJN(integer,double) problems
-@item
-3957 g77 -pipe -xf77-cpp-input sends output to stdout
-@item
-4279 g77 -h" gives bogus output
-@item
-4752 g77 -v -c -xf77-version /dev/null -xnone causes ice
-@item
-4885 BACKSPACE example that doesn't work as of gcc/g77-3.0.x
-@item
-5122 g77 rejects accepted use of INTEGER*2 as type of DATA statement loop index
-@item
-5473 ICE on BESJN(integer*8,real)
-@end enumerate
+@table @code
+@item 947
+Data statement initialization with subscript of kind INTEGER*2
+@item 3743
+Reference to intrinsic `ISHFT' invalid
+@item 3807
+Function BESJN(integer,double) problems
+@item 3957
+g77 -pipe -xf77-cpp-input sends output to stdout
+@item 4279
+g77 -h" gives bogus output
+@item 4730
+ICE on valid input using CALL EXIT(%VAL(...))
+@item 4752
+g77 -v -c -xf77-version /dev/null -xnone causes ice
+@item 4885
+BACKSPACE example that doesn't work as of gcc/g77-3.0.x
+@item 5122
+g77 rejects accepted use of INTEGER*2 as type of DATA statement loop index
+@item 5397
+ICE on compiling source with 540 000 000 REAL array
+@item 5473
+ICE on BESJN(integer*8,real)
+@end table
 
 @item
 @command{g77} now has its man page generated from the texinfo documentation,