re PR fortran/50129 (ICE on where statement)
authorMikael Morin <mikael.morin@sfr.fr>
Fri, 19 Aug 2011 23:20:30 +0000 (01:20 +0200)
committerMikael Morin <mikael@gcc.gnu.org>
Fri, 19 Aug 2011 23:20:30 +0000 (23:20 +0000)
2011-08-19  Mikael Morin  <mikael.morin@sfr.fr>

PR fortran/50129
* parse.c (parse_where): Undo changes after emitting an error.

2011-08-19  Mikael Morin  <mikael.morin@sfr.fr>

PR fortran/50129
* gfortran.dg/where_3.f90: New test.

From-SVN: r177918

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

index 6b55546fc513493a8eee81cb4a73e387fb88b28c..a361d530081af32319e2090b67fb5f9dfe1b98c6 100644 (file)
@@ -1,3 +1,8 @@
+2011-08-19  Mikael Morin  <mikael.morin@sfr.fr>
+
+       PR fortran/50129
+       * parse.c (parse_where): Undo changes after emitting an error. 
+
 2011-08-19  Jakub Jelinek  <jakub@redhat.com>
 
        PR fortran/49792
index aab711cdaae534a47347e2b2e9199e4ad2977be4..9b1108671511ca8bb800d0eb640bf95a1e500688 100644 (file)
@@ -2778,6 +2778,7 @@ parse_where_block (void)
            {
              gfc_error ("ELSEWHERE statement at %C follows previous "
                         "unmasked ELSEWHERE");
+             reject_statement ();
              break;
            }
 
index b3ee4b34746c68eeeb643b396cc655b78957809c..7aae8a6d2db8a922236cb58b2bf5d08d2a30d59a 100644 (file)
@@ -1,3 +1,8 @@
+2011-08-19  Mikael Morin  <mikael.morin@sfr.fr>
+
+       PR fortran/50129
+       * gfortran.dg/where_3.f90: New test.
+
 2011-08-19  H.J. Lu  <hongjiu.lu@intel.com>
 
        PR middle-end/49721
diff --git a/gcc/testsuite/gfortran.dg/where_3.f90 b/gcc/testsuite/gfortran.dg/where_3.f90
new file mode 100644 (file)
index 0000000..1507ad9
--- /dev/null
@@ -0,0 +1,15 @@
+! { dg-do compile }
+!
+! PR fortran/50129
+! ICE after reporting an error on a masked ELSEWHERE statement following an
+! unmasked one.
+!
+! Contributed by Joost Van de Vondele <Joost.VandeVondele@pci.uzh.ch>
+
+INTEGER :: I(3)
+WHERE (I>2)
+ELSEWHERE
+ELSEWHERE (I<1) ! { dg-error "follows previous unmasked ELSEWHERE" }
+END WHERE
+END
+