diff options
author | Bud Davis <bdavis9659@comcast.net> | 2003-04-11 21:33:48 +0000 |
---|---|---|
committer | Toon Moene <toon@gcc.gnu.org> | 2003-04-11 21:33:48 +0000 |
commit | 62520b200418a0fe365740c18da27f1b0c852315 (patch) | |
tree | 9447e72ba92ded418534b60dfb93b17733812cfc /gcc | |
parent | 2ae5ae57ba6177af4fe8ba2951e8864c6bdb7c87 (diff) | |
download | gcc-62520b200418a0fe365740c18da27f1b0c852315.zip gcc-62520b200418a0fe365740c18da27f1b0c852315.tar.gz gcc-62520b200418a0fe365740c18da27f1b0c852315.tar.bz2 |
re PR fortran/9263 (ICE caused by invalid PARAMETER in implied DO loop)
2003-04-11 Bud Davis <bdavis9659@comcast.net>
PR Fortran/9263
* gcc/f/data.c (ffedata_advance_): Check initial, final and
increment values for INTEGER typeness.
PR Fortran/1832
* libf2c/libI77/iio.c (z_putc): Check for overflowing length
of output string.
* gcc/f/news.texi: Document these fixes.
PR Fortran/9263
* g77.f-torture/noncompile/9263.f: New test
PR Fortran/1832
* g77.f-torture/execute/1832.f: New test
From-SVN: r65481
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/f/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/f/data.c | 31 | ||||
-rw-r--r-- | gcc/f/news.texi | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/testsuite/g77.f-torture/execute/1832.f | 8 | ||||
-rw-r--r-- | gcc/testsuite/g77.f-torture/noncompile/9263.f | 7 |
6 files changed, 62 insertions, 4 deletions
diff --git a/gcc/f/ChangeLog b/gcc/f/ChangeLog index 14f1b84..d6ff719 100644 --- a/gcc/f/ChangeLog +++ b/gcc/f/ChangeLog @@ -1,3 +1,10 @@ +2003-04-11 Bud Davis <bdavis9659@comcast.net> + + PR Fortran/9263 + * gcc/f/data.c (ffedata_advance_): Check initial, final and + increment values for INTEGER typeness. + * gcc/f/news.texi: Document these fixes. + 2003-03-27 Steven Bosscher <steven@gcc.gnu.org> * ffe.texi: Don't mention dead file proj.c. diff --git a/gcc/f/data.c b/gcc/f/data.c index 3e1ae62..91b835d 100644 --- a/gcc/f/data.c +++ b/gcc/f/data.c @@ -1,5 +1,5 @@ /* data.c -- Implementation File (module.c template V1.0) - Copyright (C) 1995, 1996, 2002 Free Software Foundation, Inc. + Copyright (C) 1995, 1996, 2002, 2003 Free Software Foundation, Inc. Contributed by James Craig Burley. This file is part of GNU Fortran. @@ -591,13 +591,29 @@ tail_recurse: /* :::::::::::::::::::: */ assert (ffeinfo_kindtype (ffebld_info (itervar)) == FFEINFO_kindtypeINTEGERDEFAULT); ffedata_stack_->itervar = ffebld_symter (itervar); - + if (ffeinfo_basictype (ffebld_info (start)) != FFEINFO_basictypeINTEGER) + { + ffebad_start (FFEBAD_DATA_EVAL); + ffest_ffebad_here_current_stmt (0); + ffebad_finish (); + ffedata_pop_ (); + ffedata_reported_error_ = TRUE; + return FALSE; + } assert (ffeinfo_basictype (ffebld_info (start)) == FFEINFO_basictypeINTEGER); assert (ffeinfo_kindtype (ffebld_info (start)) == FFEINFO_kindtypeINTEGERDEFAULT); ffesymbol_set_value (ffedata_stack_->itervar, ffedata_eval_integer1_ (start)); - + if (ffeinfo_basictype (ffebld_info (end)) != FFEINFO_basictypeINTEGER) + { + ffebad_start (FFEBAD_DATA_EVAL); + ffest_ffebad_here_current_stmt (0); + ffebad_finish (); + ffedata_pop_ (); + ffedata_reported_error_ = TRUE; + return FALSE; + } assert (ffeinfo_basictype (ffebld_info (end)) == FFEINFO_basictypeINTEGER); assert (ffeinfo_kindtype (ffebld_info (end)) @@ -608,6 +624,15 @@ tail_recurse: /* :::::::::::::::::::: */ ffedata_stack_->increment = 1; else { + if (ffeinfo_basictype (ffebld_info (incr)) != FFEINFO_basictypeINTEGER) + { + ffebad_start (FFEBAD_DATA_EVAL); + ffest_ffebad_here_current_stmt (0); + ffebad_finish (); + ffedata_pop_ (); + ffedata_reported_error_ = TRUE; + return FALSE; + } assert (ffeinfo_basictype (ffebld_info (incr)) == FFEINFO_basictypeINTEGER); assert (ffeinfo_kindtype (ffebld_info (incr)) diff --git a/gcc/f/news.texi b/gcc/f/news.texi index 0d07df4..27edb02 100644 --- a/gcc/f/news.texi +++ b/gcc/f/news.texi @@ -11,7 +11,7 @@ @c in the standalone derivations of this file (e.g. NEWS). @set copyrights-news 1995,1996,1997,1998,1999,2000,2001,2002,2003 -@set last-update-news 2003-03-24 +@set last-update-news 2003-04-11 @ifset DOC-NEWS @include root.texi @@ -164,6 +164,8 @@ Nothing yet. @item Problem Reports fixed (in chronological order of submission): @table @code +@item 1832 +-list directed i/o overflow hangs, -fbounds-check doesn't detect @item 3924 g77 generates code which is rejected by GAS if COFF debugging info is requested @@ -191,6 +193,8 @@ Incorrect output with 0-based array of characters Double complex zero ** double precision number -> NaN instead of zero @item 9038 -ffixed-line-length-none -x f77-cpp-input gives: Warning: unknown register name line-length-none +@item 9263 +ICE caused by invalid PARAMETER in implied DO loop @item 10197 Direct access files not unformatted by default @end table diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 7c1e3bc..99bfa5f 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,10 @@ +2003-04-11 Bud Davis <bdavis9659@comcast.net> + + PR Fortran/9263 + * g77.f-torture/noncompile/9263.f: New test + PR Fortran/1832 + * g77.f-torture/execute/1832.f: New test + 2003-04-11 David Chad <davidc@freebsd.org> Loren J. Rittle <ljrittle@acm.org> diff --git a/gcc/testsuite/g77.f-torture/execute/1832.f b/gcc/testsuite/g77.f-torture/execute/1832.f new file mode 100644 index 0000000..9ae1ca9 --- /dev/null +++ b/gcc/testsuite/g77.f-torture/execute/1832.f @@ -0,0 +1,8 @@ + character*120 file + character*5 string + file = "c:/dos/adir/bdir/cdir/text.doc" + write(string, *) "a ", file + if (string .ne. ' a') call abort +C-- The leading space is normal for list-directed output +C-- "file" is not printed because it would overflow "string". + end diff --git a/gcc/testsuite/g77.f-torture/noncompile/9263.f b/gcc/testsuite/g77.f-torture/noncompile/9263.f new file mode 100644 index 0000000..e68b3e0 --- /dev/null +++ b/gcc/testsuite/g77.f-torture/noncompile/9263.f @@ -0,0 +1,7 @@ + PARAMETER (Q=1) + PARAMETER (P=10) + INTEGER C(10),D(10),E(10),F(10) + DATA (C(I),I=1,P) /10*10/ ! TERMINAL NOT INTEGER + DATA (D(I),I=Q,10) /10*10/ ! START NOT INTEGER + DATA (E(I),I=1,10,Q) /10*10/ ! INCREMENT NOT INTEGER + END |