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
This commit is contained in:
Steven G. Kargl 2007-02-15 00:58:01 +00:00
parent d693dd2638
commit eb62be4408
4 changed files with 41 additions and 1 deletions

View File

@ -1,3 +1,9 @@
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.

View File

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

View File

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

View File

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