aboutsummaryrefslogtreecommitdiff
path: root/gcc
diff options
context:
space:
mode:
authorDodji Seketeli <dodji@redhat.com>2012-01-05 23:00:14 +0000
committerDodji Seketeli <dodji@gcc.gnu.org>2012-01-06 00:00:14 +0100
commit45a29025db259d111bcb5093ddda1ef4ef416a19 (patch)
tree2b51c15cf590457b8907aa8174ec15416d537865 /gcc
parentc3e686a350915a66b0761fa825fc162ef0010c3e (diff)
downloadgcc-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
Diffstat (limited to 'gcc')
-rw-r--r--gcc/cp/ChangeLog6
-rw-r--r--gcc/cp/parser.c6
-rw-r--r--gcc/testsuite/ChangeLog5
-rw-r--r--gcc/testsuite/g++.dg/cpp0x/alias-decl-18.C9
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 "" }