aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSteven Bosscher <steven@gcc.gnu.org>2014-08-22 18:43:50 +0000
committerSteven Bosscher <steven@gcc.gnu.org>2014-08-22 18:43:50 +0000
commitf172301ff40160dedd796d9846613e2706f7e3ea (patch)
treede25251af4f315ddc40ce91466bee5d1aedab763
parent596e808cf6cc91f556838099b832bd01ce71e828 (diff)
downloadgcc-f172301ff40160dedd796d9846613e2706f7e3ea.zip
gcc-f172301ff40160dedd796d9846613e2706f7e3ea.tar.gz
gcc-f172301ff40160dedd796d9846613e2706f7e3ea.tar.bz2
re PR fortran/62135 (ICE with invalid SELECT CASE selector)
fortran/ PR fortran/62135 * resolve.c (resolve_select): Fix list traversal in case the last element of the CASE list was dropped as unreachable code. testsuite/ PR fortran/62135 * gfortran.dg/pr62135.f90: New test. From-SVN: r214351
-rw-r--r--gcc/fortran/ChangeLog6
-rw-r--r--gcc/fortran/resolve.c2
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/gfortran.dg/pr62135.f9017
4 files changed, 29 insertions, 1 deletions
diff --git a/gcc/fortran/ChangeLog b/gcc/fortran/ChangeLog
index 1ced6fa..27ef131 100644
--- a/gcc/fortran/ChangeLog
+++ b/gcc/fortran/ChangeLog
@@ -1,3 +1,9 @@
+2014-08-22 Steven Bosscher <steven@gcc.gnu.org>
+
+ PR fortran/62135
+ * resolve.c (resolve_select): Fix list traversal in case the
+ last element of the CASE list was dropped as unreachable code.
+
2014-08-22 Joost VandeVondele <Joost.VandeVondele@mat.ethz.ch>
PR fortran/61234
diff --git a/gcc/fortran/resolve.c b/gcc/fortran/resolve.c
index 32ff9dd..52aae90e 100644
--- a/gcc/fortran/resolve.c
+++ b/gcc/fortran/resolve.c
@@ -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)
{
diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog
index b47e090..a6415d6 100644
--- a/gcc/testsuite/ChangeLog
+++ b/gcc/testsuite/ChangeLog
@@ -1,3 +1,8 @@
+2014-08-22 Steven Bosscher <steven@gcc.gnu.org>
+
+ PR fortran/62135
+ * gfortran.dg/pr62135.f90: New test.
+
2014-08-22 Manuel López-Ibáñez <manu@gcc.gnu.org>
* g++.dg/warn/wdate-time.C: Remove.
diff --git a/gcc/testsuite/gfortran.dg/pr62135.f90 b/gcc/testsuite/gfortran.dg/pr62135.f90
new file mode 100644
index 0000000..d5e674b
--- /dev/null
+++ b/gcc/testsuite/gfortran.dg/pr62135.f90
@@ -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
+