+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
/* 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;
+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
using _List_base<i>::_M_impl;
}
} /* { dg-error "expected unqualified-id before '\}'" } */
-s::list<1> OutputModuleListType; /* { dg-error "expected" } */
+s::list<1> OutputModuleListType;
// 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" }
// 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" }
--- /dev/null
+// 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>();
+}