diff options
author | Dodji Seketeli <dodji@redhat.com> | 2012-01-05 23:00:14 +0000 |
---|---|---|
committer | Dodji Seketeli <dodji@gcc.gnu.org> | 2012-01-06 00:00:14 +0100 |
commit | 45a29025db259d111bcb5093ddda1ef4ef416a19 (patch) | |
tree | 2b51c15cf590457b8907aa8174ec15416d537865 | |
parent | c3e686a350915a66b0761fa825fc162ef0010c3e (diff) | |
download | gcc-45a29025db259d111bcb5093ddda1ef4ef416a19.zip gcc-45a29025db259d111bcb5093ddda1ef4ef416a19.tar.gz gcc-45a29025db259d111bcb5093ddda1ef4ef416a19.tar.bz2 |
PR c++/51541 - ICE with invalid identifier in alias-declaration
gcc/cp/
PR c++/51541
* parser.c (cp_parser_alias_declaration): Get out early upon
errors in the identifier or the attributes.
gcc/testsuite/
PR c++/51541
* g++.dg/cpp0x/alias-decl-18.C: New test.
From-SVN: r182935
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/parser.c | 6 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/alias-decl-18.C | 9 |
4 files changed, 26 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index d889d29..e6ea3bf 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2012-01-05 Dodji Seketeli <dodji@redhat.com> + + PR c++/51541 + * parser.c (cp_parser_alias_declaration): Get out early upon + errors in the identifier or the attributes. + 2012-01-04 Paolo Carlini <paolo.carlini@oracle.com> PR c++/51064 diff --git a/gcc/cp/parser.c b/gcc/cp/parser.c index 8f2357e..0ae55a2 100644 --- a/gcc/cp/parser.c +++ b/gcc/cp/parser.c @@ -15046,7 +15046,13 @@ cp_parser_alias_declaration (cp_parser* parser) cp_parser_require_keyword (parser, RID_USING, RT_USING); id_location = cp_lexer_peek_token (parser->lexer)->location; id = cp_parser_identifier (parser); + if (id == error_mark_node) + return error_mark_node; + attributes = cp_parser_attributes_opt (parser); + if (attributes == error_mark_node) + return error_mark_node; + cp_parser_require (parser, CPP_EQ, RT_EQ); /* Now we are going to parse the type-id of the declaration. */ diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 5fdcd11..5980066 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2012-01-05 Dodji Seketeli <dodji@redhat.com> + + PR c++/51541 + * g++.dg/cpp0x/alias-decl-18.C: New test. + 2012-01-05 Eric Botcazou <ebotcazou@adacore.com> diff --git a/gcc/testsuite/g++.dg/cpp0x/alias-decl-18.C b/gcc/testsuite/g++.dg/cpp0x/alias-decl-18.C new file mode 100644 index 0000000..ba65561 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/alias-decl-18.C @@ -0,0 +1,9 @@ +// Origin: PR c++/51541 +// { dg-options -std=c++11 } + +template<typename Z> using ::T = void(int n); // { dg-error "" } +template<typename Z> using operator int = void(int n); // { dg-error "" } +template<typename Z> using typename U = void; // { dg-error "" } +template<typename Z> using typename ::V = void(int n); // { dg-error "" } +template<typename Z> using typename ::operator bool = void(int n); // { dg-error "" } +using foo __attribute__((aligned(4)) = int; // { dg-error "" } |