diff options
author | Marek Polacek <polacek@redhat.com> | 2019-11-21 15:27:46 +0000 |
---|---|---|
committer | Marek Polacek <mpolacek@gcc.gnu.org> | 2019-11-21 15:27:46 +0000 |
commit | 523cfd52a29d496a5c0445e5307e9ffc05242b20 (patch) | |
tree | 540b338e28f37bfa4b9113de385e44a6c364ff63 | |
parent | 7c6f2fb9c7513d3487ab2d6d6edd235f152c0ef3 (diff) | |
download | gcc-523cfd52a29d496a5c0445e5307e9ffc05242b20.zip gcc-523cfd52a29d496a5c0445e5307e9ffc05242b20.tar.gz gcc-523cfd52a29d496a5c0445e5307e9ffc05242b20.tar.bz2 |
PR c++/92450 - ICE with invalid nested name specifier.
* parser.c (cp_parser_member_declaration): Don't attempt to print
erroneous bit-field diagnostic if grokdeclarator returns
error_mark_node.
* g++.dg/parse/crash71.C: New test.
From-SVN: r278570
-rw-r--r-- | gcc/cp/ChangeLog | 7 | ||||
-rw-r--r-- | gcc/cp/parser.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/parse/crash71.C | 11 |
4 files changed, 27 insertions, 3 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 507741b..cd1cd17 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,10 @@ +2019-11-21 Marek Polacek <polacek@redhat.com> + + PR c++/92450 - ICE with invalid nested name specifier. + * parser.c (cp_parser_member_declaration): Don't attempt to print + erroneous bit-field diagnostic if grokdeclarator returns + error_mark_node. + 2019-11-21 Jakub Jelinek <jakub@redhat.com> Jason Merrill <jason@redhat.com> diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 03b1ec7..be31286 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -25062,9 +25062,10 @@ cp_parser_member_declaration (cp_parser* parser) tree d = grokdeclarator (declarator, &decl_specifiers, BITFIELD, /*initialized=*/false, &attributes); - error_at (DECL_SOURCE_LOCATION (d), - "bit-field %qD has non-integral type %qT", - d, TREE_TYPE (d)); + if (!error_operand_p (d)) + error_at (DECL_SOURCE_LOCATION (d), + "bit-field %qD has non-integral type %qT", + d, TREE_TYPE (d)); cp_parser_skip_to_end_of_statement (parser); /* Avoid "extra ;" pedwarns. */ if (cp_lexer_next_token_is (parser->lexer, diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index af77dfa..b4a9619 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2019-11-21 Marek Polacek <polacek@redhat.com> + + PR c++/92450 - ICE with invalid nested name specifier. + * g++.dg/parse/crash71.C: New test. + 2019-11-21 Wilco Dijkstra <wdijkstr@arm.com> * gfortran.dg/global_vars_f90_init_driver.c: Add missing extern. diff --git a/gcc/testsuite/g++.dg/parse/crash71.C b/gcc/testsuite/g++.dg/parse/crash71.C new file mode 100644 index 0000000..13f4848 --- /dev/null +++ b/gcc/testsuite/g++.dg/parse/crash71.C @@ -0,0 +1,11 @@ +// PR c++/92450 - ICE with invalid nested name specifier. + +typedef int C2; +struct B1 { + struct B2 { + }; +}; + +struct S6g { + C2 : B1:B2; // { dg-error "" } +}; |