diff options
author | Paul Thomas <pault@gcc.gnu.org> | 2006-07-07 04:47:24 +0000 |
---|---|---|
committer | Paul Thomas <pault@gcc.gnu.org> | 2006-07-07 04:47:24 +0000 |
commit | ba661c8b58049773f07db48352da17bd9ed24981 (patch) | |
tree | 2130c295ba64a01610afb8dab316d0cc47520ac1 /gcc | |
parent | 9e33de052d8bd5dfdceb0e495857eb0c8fd06ed3 (diff) | |
download | gcc-ba661c8b58049773f07db48352da17bd9ed24981.zip gcc-ba661c8b58049773f07db48352da17bd9ed24981.tar.gz gcc-ba661c8b58049773f07db48352da17bd9ed24981.tar.bz2 |
re PR fortran/28237 (print call())
2006-07-07 Paul Thomas <pault@gcc.gnu.org>
PR fortran/28237
PR fortran/23420
* io.c (resolve_tag): Any integer that is not an assigned
variable is an error.
2006-07-07 Paul Thomas <pault@gcc.gnu.org>
PR fortran/28237
PR fortran/23420
* gfortran.dg/print_fmt_5.f90: New test.
From-SVN: r115246
Diffstat (limited to 'gcc')
-rw-r--r-- | gcc/fortran/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/fortran/io.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/print_fmt_5.f90 | 45 |
4 files changed, 65 insertions, 0 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index cf92dea..f8d9930 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,10 @@ +2006-07-07 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/28237 + PR fortran/23420 + * io.c (resolve_tag): Any integer that is not an assigned + variable is an error. + 2006-07-06 Francois-Xavier Coudert <coudert@clipper.ens.fr> PR fortran/28129 diff --git a/gcc/fortran/io.c b/gcc/fortran/io.c index aab5d39..725e2da 100644 --- a/gcc/fortran/io.c +++ b/gcc/fortran/io.c @@ -1063,6 +1063,13 @@ resolve_tag (const io_tag * tag, gfc_expr * e) return FAILURE; } } + else if (e->ts.type == BT_INTEGER) + { + gfc_error ("scalar '%s' FORMAT tag at %L is not an ASSIGNED " + "variable", gfc_basic_typename (e->ts.type), &e->where); + return FAILURE; + } + return SUCCESS; } else diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 272acc9..095a51c 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,9 @@ +2006-07-07 Paul Thomas <pault@gcc.gnu.org> + + PR fortran/28237 + PR fortran/23420 + * gfortran.dg/print_fmt_5.f90: New test. + 2006-07-06 Francois-Xavier Coudert <coudert@clipper.ens.fr> PR fortran/28129 diff --git a/gcc/testsuite/gfortran.dg/print_fmt_5.f90 b/gcc/testsuite/gfortran.dg/print_fmt_5.f90 new file mode 100644 index 0000000..fb37d75 --- /dev/null +++ b/gcc/testsuite/gfortran.dg/print_fmt_5.f90 @@ -0,0 +1,45 @@ +! { dg-do compile } +! print_fmt_5.f90 +! Test of fix for PR28237 and the last bit of PR23420. See +! below for the description of the problem. +! +program r + character(12) :: for = '(i5)', left = '(i', right = ')' + integer :: i, j + integer :: h(4) & + = (/1h(, 1hi, 1h5, 1h)/)! { dg-warning "HOLLERITH|Hollerith" } + namelist /mynml/ i + i = fact () +! +! All these are "legal" things to do; note however the warnings +! for extensions or obsolete features! +! + print *, fact() + print 100, fact() + print '(i5)', fact() + print mynml ! { dg-warning "is an extension" } + do i = 1, 5 + print trim(left)//char(iachar('0') + i)//trim(right), i + end do + assign 100 to i ! { dg-warning "ASSIGN statement" } + print i, fact() ! { dg-warning "ASSIGNED variable" } + print h, fact () ! { dg-warning "Non-character in FORMAT" } +! +! These are not and caused a segfault in trans-io:560 +! +! PR28237 + print fact() ! { dg-error "not an ASSIGNED variable" } +! original PR23420 + print precision(1.2_8) ! { dg-error "type default CHARACTER" } +! PR23420 points 4 and 5 + print j + j ! { dg-error "not an ASSIGNED variable" } +! An extension of the above, encountered in writing the fix + write (*, fact())! { dg-error "not an ASSIGNED variable" } + 100 format (i5) +contains + function fact() + integer :: fact + fact = 1 + end function fact +end + |