diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog index 12b8e6f82dd..974ee46d9fe 100644 --- a/gcc/fortran/ChangeLog +++ b/gcc/fortran/ChangeLog @@ -1,3 +1,9 @@ +2007-02-14 Steven G. Kargl + + PR fortran/30799 + * primary.c (match_logical_constant): Return MATCH_ERROR on invalid + kind. + 2007-02-14 Steven G. Kargl * misc.c (gfc_typename): Fix potential buffer overflow. diff --git a/gcc/fortran/primary.c b/gcc/fortran/primary.c index 64cc5e44f8d..4649b4ca02b 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 d452713f1d7..b82bea0a0bf 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2007-02-14 Steven G. Kargl + + PR fortran/30799 + * gfortran.dg/logical_2.f90: New test. + 2007-02-14 Joseph Myers * 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 00000000000..1a28fefd50c --- /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 +! 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