diff options
author | H.J. Lu <hjl@gcc.gnu.org> | 2009-04-10 11:56:07 -0700 |
---|---|---|
committer | H.J. Lu <hjl@gcc.gnu.org> | 2009-04-10 11:56:07 -0700 |
commit | 72b75d0333b5b00c02a1b3f87641269e6cd629d7 (patch) | |
tree | 41a2c06b2e7bcda06f34cd914a410620bbd48f89 | |
parent | 6e990b5462369a9f29662c13ca4537710900de07 (diff) | |
download | gcc-72b75d0333b5b00c02a1b3f87641269e6cd629d7.zip gcc-72b75d0333b5b00c02a1b3f87641269e6cd629d7.tar.gz gcc-72b75d0333b5b00c02a1b3f87641269e6cd629d7.tar.bz2 |
re PR c++/28301 (ICE with broken specialization)
gcc/cp/
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.
From-SVN: r145936
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/parser.c | 2 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/enum2.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/debug/pr22514.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/parse/enum2.C | 2 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/parse/enum3.C | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/crash79.C | 6 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/template/pr28301.C | 18 | ||||
-rw-r--r-- | gcc/testsuite/g++.old-deja/g++.jason/cond.C | 2 |
10 files changed, 45 insertions, 9 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index c70eed6..0a3af2a 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -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 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index e942635..4dec792 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -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; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c7ddb9f..da40b35 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -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 diff --git a/gcc/testsuite/g++.dg/cpp0x/enum2.C b/gcc/testsuite/g++.dg/cpp0x/enum2.C index 2353f1d..21c265a 100644 --- a/gcc/testsuite/g++.dg/cpp0x/enum2.C +++ b/gcc/testsuite/g++.dg/cpp0x/enum2.C @@ -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" } diff --git a/gcc/testsuite/g++.dg/debug/pr22514.C b/gcc/testsuite/g++.dg/debug/pr22514.C index 23dc9b2..3df9e23 100644 --- a/gcc/testsuite/g++.dg/debug/pr22514.C +++ b/gcc/testsuite/g++.dg/debug/pr22514.C @@ -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; diff --git a/gcc/testsuite/g++.dg/parse/enum2.C b/gcc/testsuite/g++.dg/parse/enum2.C index f29d3b5..f77f917 100644 --- a/gcc/testsuite/g++.dg/parse/enum2.C +++ b/gcc/testsuite/g++.dg/parse/enum2.C @@ -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" } diff --git a/gcc/testsuite/g++.dg/parse/enum3.C b/gcc/testsuite/g++.dg/parse/enum3.C index 11c532c..508e4b9 100644 --- a/gcc/testsuite/g++.dg/parse/enum3.C +++ b/gcc/testsuite/g++.dg/parse/enum3.C @@ -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/crash79.C b/gcc/testsuite/g++.dg/template/crash79.C index be71848..700fd29 100644 --- a/gcc/testsuite/g++.dg/template/crash79.C +++ b/gcc/testsuite/g++.dg/template/crash79.C @@ -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 index 0000000..a7a0084 --- /dev/null +++ b/gcc/testsuite/g++.dg/template/pr28301.C @@ -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>(); +} diff --git a/gcc/testsuite/g++.old-deja/g++.jason/cond.C b/gcc/testsuite/g++.old-deja/g++.jason/cond.C index eaddcd6..1c9e806 100644 --- a/gcc/testsuite/g++.old-deja/g++.jason/cond.C +++ b/gcc/testsuite/g++.old-deja/g++.jason/cond.C @@ -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; } }; |