]> git.ipfire.org Git - thirdparty/gcc.git/commitdiff
backport: re PR c++/28301 (ICE with broken specialization)
authorH.J. Lu <hongjiu.lu@intel.com>
Fri, 10 Apr 2009 19:36:19 +0000 (19:36 +0000)
committerH.J. Lu <hjl@gcc.gnu.org>
Fri, 10 Apr 2009 19:36:19 +0000 (12:36 -0700)
gcc/cp/

2009-04-10  H.J. Lu  <hongjiu.lu@intel.com>

Backport from mainline:
2009-04-10  Jason Merrill  <jason@redhat.com>

PR c++/28301
* parser.c (cp_parser_skip_to_end_of_block_or_statement): Return
if we see a close brace without an open brace.

gcc/testsuite/

2009-04-10  H.J. Lu  <hongjiu.lu@intel.com>

Backport from mainline:
2009-04-10  H.J. Lu  <hongjiu.lu@intel.com>

PR c++/28301
* g++.dg/debug/pr22514.C: Updated.
* g++.dg/parse/enum2.C: Likewise.
* g++.dg/parse/enum3.C: Likewise.

* g++.dg/template/pr28301.C: New.

From-SVN: r145939

gcc/cp/ChangeLog
gcc/cp/parser.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/debug/pr22514.C
gcc/testsuite/g++.dg/parse/enum2.C
gcc/testsuite/g++.dg/parse/enum3.C
gcc/testsuite/g++.dg/template/pr28301.C [new file with mode: 0644]

index 64c0d09e796f9ec607cef2f73474f2dbc077f6fd..0d2dbc63c91f5580f69f9453c0fc79292e1097d1 100644 (file)
@@ -1,3 +1,12 @@
+2009-04-10  H.J. Lu  <hongjiu.lu@intel.com>
+
+       Backport from mainline:
+       2009-04-10  Jason Merrill  <jason@redhat.com>
+
+       PR c++/28301
+       * parser.c (cp_parser_skip_to_end_of_block_or_statement): Return
+       if we see a close brace without an open brace.
+
 2009-04-08  Dodji Seketeli  <dodji@redhat.com>
 
        PR c++/39637
index d22cee6f12b6e4073f9ef13cb805a45f6d471ff4..ec3130ab9c12c71b0e90daebeeb09436ae59a142 100644 (file)
@@ -2589,6 +2589,8 @@ cp_parser_skip_to_end_of_block_or_statement (cp_parser* parser)
          /* Stop if this is an unnested '}', or closes the outermost
             nesting level.  */
          nesting_depth--;
+         if (nesting_depth < 0)
+           return;
          if (!nesting_depth)
            nesting_depth = -1;
          break;
index e4737e5fc805d7a1fd0154db50dd4386c3db6c24..58fea4b5e1792f3d1ac2ea0fbf26864bf615e9b9 100644 (file)
@@ -1,3 +1,15 @@
+2009-04-10  H.J. Lu  <hongjiu.lu@intel.com>
+
+       Backport from mainline:
+       2009-04-10  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR c++/28301
+       * g++.dg/debug/pr22514.C: Updated.
+       * g++.dg/parse/enum2.C: Likewise.
+       * g++.dg/parse/enum3.C: Likewise.
+
+       * g++.dg/template/pr28301.C: New.
+
 2009-04-08  Dodji Seketeli  <dodji@redhat.com>
 
        PR c++/39637
index 23dc9b2b061a4bad853096a64b5782e39afcf2e0..3df9e230ecb27ab2ffb940b29adf24f599f0576a 100644 (file)
@@ -10,4 +10,4 @@ namespace s
     using _List_base<i>::_M_impl;
   }
 }  /* { dg-error "expected unqualified-id before '\}'" } */
-s::list<1> OutputModuleListType;  /* { dg-error "expected" } */
+s::list<1> OutputModuleListType;
index f29d3b569d5f71fc4349fbf7bed6a7baf023c514..f77f91701d93bddc56feebf0e79508cec47e336f 100644 (file)
@@ -4,4 +4,4 @@
 
 // PR c++/18123: ICE pushing tag from invalid template.
 
-template<int> enum E { e }; // { dg-error "template declaration" }
+template<int> enum E { e }; // { dg-error "declaration|expected" }
index 11c532c6e912c4b7c2008502e1ae5c3a985bff31..508e4b94de79f079d8a30d809c17476e07744251 100644 (file)
@@ -1,5 +1,5 @@
 // PR c++/28261
 
-struct A {}; // { dg-error "A" }
+struct A {};
 
-A::A (enum { e }) {} // { dg-error "defined|match" }
+A::A (enum { e }) {} // { dg-error "defined|token" }
diff --git a/gcc/testsuite/g++.dg/template/pr28301.C b/gcc/testsuite/g++.dg/template/pr28301.C
new file mode 100644 (file)
index 0000000..a7a0084
--- /dev/null
@@ -0,0 +1,18 @@
+// PR c++/28301
+// { dg-do compile }
+
+template<typename> struct A
+{
+    template<int> void foo()
+};     // { dg-error "initializer" }
+
+template<> struct A<void>
+{
+    template<int> void foo();
+};
+
+void bar()
+{
+    A<void> a;
+    a.foo<0>();
+}