diff options
author | Steven G. Kargl <kargl@gcc.gnu.org> | 2007-02-15 00:58:01 +0000 |
---|---|---|
committer | Steven G. Kargl <kargl@gcc.gnu.org> | 2007-02-15 00:58:01 +0000 |
commit | eb62be4408c6151c076aad495fba7abef9c37c03 (patch) | |
tree | 6f6184f5747f7073375f5728b544f6abb2e44ac1 | |
parent | d693dd2638f2bb69e4663a5f7cb656e88948d3eb (diff) | |
download | gcc-eb62be4408c6151c076aad495fba7abef9c37c03.zip gcc-eb62be4408c6151c076aad495fba7abef9c37c03.tar.gz gcc-eb62be4408c6151c076aad495fba7abef9c37c03.tar.bz2 |
primary.c (match_logical_constant): Return MATCH_ERROR on invalid kind.
2007-02-14 Steven G. Kargl <kargl@gcc.gnu.org>
* primary.c (match_logical_constant): Return MATCH_ERROR on invalid kind.
* gfortran.dg/logical_2.f90: New test.
From-SVN: r121974
-rw-r--r-- | gcc/fortran/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/fortran/primary.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/gfortran.dg/logical_2.f90 | 26 |
4 files changed, 41 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 12b8e6f8..974ee46 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,5 +1,11 @@ 2007-02-14 Steven G. Kargl <kargl@gcc.gnu.org> + PR fortran/30799 + * primary.c (match_logical_constant): Return MATCH_ERROR on invalid + kind. + +2007-02-14 Steven G. Kargl <kargl@gcc.gnu.org> + * misc.c (gfc_typename): Fix potential buffer overflow. 2007-02-13 Paul Thomas <pault@gcc.gnu.org> diff --git a/gcc/fortran/primary.c b/gcc/fortran/primary.c index 64cc5e4..4649b4c 100644 --- a/gcc/fortran/primary.c +++ b/gcc/fortran/primary.c @@ -1025,7 +1025,10 @@ match_logical_constant (gfc_expr **result) kind = gfc_default_logical_kind; if (gfc_validate_kind (BT_LOGICAL, kind, true) < 0) - gfc_error ("Bad kind for logical constant at %C"); + { + gfc_error ("Bad kind for logical constant at %C"); + return MATCH_ERROR; + } e = gfc_get_expr (); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index d452713..b82bea0 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-02-14 Steven G. Kargl <kargl@gcc.gnu.org> + + PR fortran/30799 + * gfortran.dg/logical_2.f90: New test. + 2007-02-14 Joseph Myers <joseph@codesourcery.com> * gcc.dg/torture/complex-alias-1.c: New test. diff --git a/gcc/testsuite/gfortran.dg/logical_2.f90 b/gcc/testsuite/gfortran.dg/logical_2.f90 new file mode 100644 index 0000000..1a28fef --- /dev/null +++ b/gcc/testsuite/gfortran.dg/logical_2.f90 @@ -0,0 +1,26 @@ +! { dg-do compile } +! PR fortran/30799 +! Inconsistent handling of bad (invalid) LOGICAL kinds +! Reporter: Harald Anlauf <anlauf@gmx.de> +! Testcase altered by Steven G. Kargl +program gfcbug57 + implicit none + ! + ! These are logical kinds known by gfortran and many other compilers: + ! + print *, kind (.true._1) ! This prints "1" + print *, kind (.true._2) ! This prints "2" + print *, kind (.true._4) ! This prints "4" + print *, kind (.true._8) ! This prints "8" + ! + ! These are very strange (read: bad (invalid?)) logical kinds, + ! handled inconsistently by gfortran (there's no logical(kind=0) etc.) + ! + print *, kind (.true._0) ! { dg-error "kind for logical constant" } + print *, kind (.true._3) ! { dg-error "kind for logical constant" } + print *, kind (.true._123) ! { dg-error "kind for logical constant" } + ! + ! Here gfortran bails out with a runtime error: + ! + print *, .true._3 ! { dg-error "kind for logical constant" } +end program gfcbug57 |