OSDN Git Service

2007-02-14 Steven G. Kargl <kargl@gcc.gnu.org>
authorkargl <kargl@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 15 Feb 2007 00:58:01 +0000 (00:58 +0000)
committerkargl <kargl@138bc75d-0d04-0410-961f-82ee72b054a4>
Thu, 15 Feb 2007 00:58:01 +0000 (00:58 +0000)
       * primary.c (match_logical_constant): Return MATCH_ERROR on invalid kind.
       * gfortran.dg/logical_2.f90: New test.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@121974 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/fortran/ChangeLog
gcc/fortran/primary.c
gcc/testsuite/ChangeLog
gcc/testsuite/gfortran.dg/logical_2.f90 [new file with mode: 0644]

index 12b8e6f..974ee46 100644 (file)
@@ -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>
index 64cc5e4..4649b4c 100644 (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 ();
 
index d452713..b82bea0 100644 (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.
diff --git a/gcc/testsuite/gfortran.dg/logical_2.f90 b/gcc/testsuite/gfortran.dg/logical_2.f90
new file mode 100644 (file)
index 0000000..1a28fef
--- /dev/null
@@ -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