This is the mail archive of the
fortran@gcc.gnu.org
mailing list for the GNU Fortran project.
[patch] PR fortran/62135
- From: Steven Bosscher <stevenb dot gcc at gmail dot com>
- To: "fortran at gcc dot gnu dot org" <fortran at gcc dot gnu dot org>, GCC Patches <gcc-patches at gcc dot gnu dot org>
- Date: Fri, 22 Aug 2014 00:07:21 +0200
- Subject: [patch] PR fortran/62135
- Authentication-results: sourceware.org; auth=none
Hello,
Low-hanging fruit, almost embarassing to fix. But then again I caused
this bug -- in 1999 or so :-)
Will commit after testing.
Ciao!
Steven
fortran/
* resolve.c (resolve_select): Fix list traversal in case the
last element of the CASE list was dropped as unreachable code.
testsuite/
* gfortran.dg/pr62135.f90: New test.
Index: fortran/resolve.c
===================================================================
--- fortran/resolve.c (revision 214292)
+++ fortran/resolve.c (working copy)
@@ -7761,7 +7761,7 @@ resolve_select (gfc_code *code, bool select_type)
/* Strip all other unreachable cases. */
if (body->ext.block.case_list)
{
- for (cp = body->ext.block.case_list; cp->next; cp = cp->next)
+ for (cp = body->ext.block.case_list; cp && cp->next; cp = cp->next)
{
if (cp->next->unreachable)
{
Index: testsuite/gfortran.dg/pr62135.f90
===================================================================
--- testsuite/gfortran.dg/pr62135.f90 (revision 0)
+++ testsuite/gfortran.dg/pr62135.f90 (working copy)
@@ -0,0 +1,17 @@
+! { dg-do compile }
+! { dg-options -Wsurprising }
+
+ PROGRAM PR62135
+ IMPLICIT NONE
+ CHARACTER*1 :: choice
+ choice = 'x'
+ SELECT CASE (choice)
+ ! This triggered an ICE: an unreachable case clause
+ ! as the last of a list.
+ CASE ('2':'7','9':'0') ! { dg-warning "can never be matched" }
+ WRITE(*,*) "barf"
+ CASE DEFAULT
+ CONTINUE
+ END SELECT
+ END PROGRAM PR62135
+