OSDN Git Service

gcc/cp/
authorhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 10 Apr 2009 18:56:07 +0000 (18:56 +0000)
committerhjl <hjl@138bc75d-0d04-0410-961f-82ee72b054a4>
Fri, 10 Apr 2009 18:56:07 +0000 (18:56 +0000)
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>

PR c++/28301
* g++.dg/cpp0x/enum2.C: Updated.
* g++.dg/debug/pr22514.C: Likewise.
* g++.dg/parse/enum2.C: Likewise.
* g++.dg/parse/enum3.C: Likewise.
* g++.dg/template/crash79.C: Likewise.
* g++.old-deja/g++.jason/cond.C: Likewise.

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

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@145936 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/parser.c
gcc/testsuite/ChangeLog
gcc/testsuite/g++.dg/cpp0x/enum2.C
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/crash79.C
gcc/testsuite/g++.dg/template/pr28301.C [new file with mode: 0644]
gcc/testsuite/g++.old-deja/g++.jason/cond.C

index c70eed6..0a3af2a 100644 (file)
@@ -1,3 +1,9 @@
+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.
+
 2008-04-10  H.J. Lu  <hongjiu.lu@intel.com>
 
        * parser.c (cp_parser_class_specifier): Remove the unused
index e942635..4dec792 100644 (file)
@@ -2623,6 +2623,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 c7ddb9f..da40b35 100644 (file)
@@ -1,3 +1,13 @@
+2009-04-10  H.J. Lu  <hongjiu.lu@intel.com>
+
+       PR c++/28301
+       * g++.dg/cpp0x/enum2.C: Updated.
+       * g++.dg/debug/pr22514.C: Likewise.
+       * g++.dg/parse/enum2.C: Likewise.
+       * g++.dg/parse/enum3.C: Likewise.
+       * g++.dg/template/crash79.C: Likewise.
+       * g++.old-deja/g++.jason/cond.C: Likewise.
+
 2009-04-10  Chao-ying Fu  <fu@mips.com>
 
        * gcc.target/mips/interrupt_handler.c: Change from compile to
index 2353f1d..21c265a 100644 (file)
@@ -2,4 +2,4 @@
 // { dg-do compile }
 // { dg-options "-std=c++0x" }
 
-template<int> enum E : int { e };      // { dg-error "template declaration of" }
+template<int> enum E : int { e };      // { dg-error "declaration|expected" }
index 23dc9b2..3df9e23 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 f29d3b5..f77f917 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 11c532c..508e4b9 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" }
index be71848..700fd29 100644 (file)
@@ -3,7 +3,7 @@
 struct A
 {
   A(int);
-  template<int> enum { e }; // { dg-error "template" }
-};
+  template<int> enum { e }; // { dg-error "template|expected" }
+}; // { dg-error "expected" }
 
-A a(A::e); // { dg-error "not a member" }
+A a(A::e);
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>();
+}
index eaddcd6..1c9e806 100644 (file)
@@ -40,7 +40,7 @@ int main()
   // { dg-error "expected" "exp" { target *-*-* } 39 }
   
   if (enum A { one, two, three } foo = one) // { dg-error "defined" "def" } 
-  // { dg-error "declared" "decl" { target *-*-* } 42 }
+  // { dg-error "expected" "expected" { target *-*-* } 42 }
     ;
 
   struct B { operator int () { return 2; } };