aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorSteven G. Kargl <kargl@gcc.gnu.org>2007-02-15 00:58:01 +0000
committerSteven G. Kargl <kargl@gcc.gnu.org>2007-02-15 00:58:01 +0000
commiteb62be4408c6151c076aad495fba7abef9c37c03 (patch)
tree6f6184f5747f7073375f5728b544f6abb2e44ac1 /gcc
parentd693dd2638f2bb69e4663a5f7cb656e88948d3eb (diff)
downloadgcc-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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/primary.c5
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/logical_2.f9026
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