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
This commit is contained in:
Bud Davis 2003-04-11 21:33:48 +00:00 committed by Toon Moene
parent 2ae5ae57ba
commit 62520b2004
8 changed files with 69 additions and 5 deletions

View File

@ -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.

View File

@ -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))

View File

@ -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

View File

@ -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>

View File

@ -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

View File

@ -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

View File

@ -1,3 +1,9 @@
2003-04-11 Bud Davis <bdavis9659@comcast.net>
PR Fortran/1832
* libf2c/libI77/iio.c (z_putc): Check for overflowing length
of output string.
2003-03-24 Bud Davis <bdavis9659@comcast.net>
PR fortran/10197

View File

@ -21,7 +21,7 @@ z_getc (void)
void
z_putc (int c)
{
if (f__icptr < f__icend && f__recpos++ < f__svic->icirlen)
if (f__recpos++ < f__svic->icirlen && f__icptr < f__icend)
*f__icptr++ = c;
}
int