diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2016-06-09 12:02:17 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2016-06-09 12:02:17 +0000 |
commit | 392a81b96ea19e2d302372a4261b6183e82d1477 (patch) | |
tree | b4035e4632d4c0f436c43d5ea4bfde61238bbeff | |
parent | fdf3a386e02a0ab89e72437504168545fd234321 (diff) | |
download | gcc-392a81b96ea19e2d302372a4261b6183e82d1477.zip gcc-392a81b96ea19e2d302372a4261b6183e82d1477.tar.gz gcc-392a81b96ea19e2d302372a4261b6183e82d1477.tar.bz2 |
re PR c++/71465 (ICE on invalid C++ code (with duplicate base) on x86_64-linux-gnu: in dfs_build_secondary_vptr_vtt_inits, at cp/class.c:9075)
/cp
2016-06-09 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/71465
Revert:
2016-06-04 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/70202
* parser.c (cp_parser_class_head): When xref_basetypes fails and
emits an error do not zero the type.
/testsuite
2016-06-09 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/71465
* g++.dg/inherit/crash5.C: New.
Revert:
2016-06-04 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/70202
* g++.dg/inherit/crash5.C: New.
* g++.dg/inherit/virtual1.C: Adjust.
From-SVN: r237258
-rw-r--r-- | gcc/cp/ChangeLog | 10 | ||||
-rw-r--r-- | gcc/cp/parser.c | 5 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 11 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/inherit/crash5.C | 14 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/inherit/virtual1.C | 6 |
5 files changed, 32 insertions, 14 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 54c838b..a94cebe 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,13 @@ +2016-06-09 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/71465 + Revert: + 2016-06-04 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/70202 + * parser.c (cp_parser_class_head): When xref_basetypes fails and + emits an error do not zero the type. + 2016-06-08 Paolo Carlini <paolo.carlini@oracle.com> * decl.c (maybe_deduce_size_from_array_init): Use diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 2fccc5a..e01353d 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -22050,8 +22050,9 @@ cp_parser_class_head (cp_parser* parser, /* If we're really defining a class, process the base classes. If they're invalid, fail. */ - if (type && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE)) - xref_basetypes (type, bases); + if (type && cp_lexer_next_token_is (parser->lexer, CPP_OPEN_BRACE) + && !xref_basetypes (type, bases)) + type = NULL_TREE; done: /* Leave the scope given by the nested-name-specifier. We will diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 155dc11..b1ea45a 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,14 @@ +2016-06-09 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/71465 + * g++.dg/inherit/crash5.C: New. + Revert: + 2016-06-04 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/70202 + * g++.dg/inherit/crash5.C: New. + * g++.dg/inherit/virtual1.C: Adjust. + 2016-06-09 Martin Liska <mliska@suse.cz> * g++.dg/predict-loop-exit-1.C: Scan for a new dump format. diff --git a/gcc/testsuite/g++.dg/inherit/crash5.C b/gcc/testsuite/g++.dg/inherit/crash5.C index bce999c..5a4002e 100644 --- a/gcc/testsuite/g++.dg/inherit/crash5.C +++ b/gcc/testsuite/g++.dg/inherit/crash5.C @@ -1,10 +1,6 @@ -// PR c++/70202 +// PR c++/71465 -class A -{ - virtual void foo () { } -}; -class B : public A, A { }; // { dg-error "duplicate base type" } - -B b1, &b2 = b1; -A a = b2; +struct A { virtual void foo () {} }; +struct B : virtual A {}; +struct C : virtual A {}; +struct D : C, B, C {}; // { dg-error "duplicate base type" } diff --git a/gcc/testsuite/g++.dg/inherit/virtual1.C b/gcc/testsuite/g++.dg/inherit/virtual1.C index 1199b81..08bcbb1 100644 --- a/gcc/testsuite/g++.dg/inherit/virtual1.C +++ b/gcc/testsuite/g++.dg/inherit/virtual1.C @@ -5,8 +5,8 @@ struct A virtual ~A() {} }; -struct B : A, virtual A {}; // { dg-error "duplicate base" } +struct B : A, virtual A {}; // { dg-error "duplicate base|forward declaration" } -struct C : A, B {}; // { dg-error "duplicate base" } +struct C : A, B {}; // { dg-error "duplicate base|invalid use" } -C c; +C c; // { dg-error "aggregate" } |