diff options
author | Paolo Carlini <paolo.carlini@oracle.com> | 2014-03-21 16:35:26 +0000 |
---|---|---|
committer | Paolo Carlini <paolo@gcc.gnu.org> | 2014-03-21 16:35:26 +0000 |
commit | 279d3eb8f8f81021d727b7c1c349cebc72ce29a3 (patch) | |
tree | 70fbfb08b2563f3ed88157e26fb7ddbfccefbfb4 | |
parent | 44eb6c4004298c7ff39545e50dff11dc36961147 (diff) | |
download | gcc-279d3eb8f8f81021d727b7c1c349cebc72ce29a3.zip gcc-279d3eb8f8f81021d727b7c1c349cebc72ce29a3.tar.gz gcc-279d3eb8f8f81021d727b7c1c349cebc72ce29a3.tar.bz2 |
re PR c++/60384 ([c++1y] ICE with invalid typedef)
/cp
2014-03-21 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/60384
* name-lookup.c (push_class_level_binding_1): Check identifier_p
on the name argument.
/testsuite
2014-03-21 Paolo Carlini <paolo.carlini@oracle.com>
PR c++/60384
* g++.dg/cpp1y/pr60384.C: New.
From-SVN: r208752
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/name-lookup.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 5 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp1y/pr60384.C | 9 |
4 files changed, 27 insertions, 0 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 3d043d9..1acfec3 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2014-03-21 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/60384 + * name-lookup.c (push_class_level_binding_1): Check identifier_p + on the name argument. + 2014-03-20 Jakub Jelinek <jakub@redhat.com> PR c++/60572 diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c index ea16061..53f14f3 100644 --- a/gcc/cp/name-lookup.c +++ b/gcc/cp/name-lookup.c @@ -3115,6 +3115,13 @@ push_class_level_binding_1 (tree name, tree x) if (name == error_mark_node) return false; + /* Can happen for an erroneous declaration (c++/60384). */ + if (!identifier_p (name)) + { + gcc_assert (errorcount || sorrycount); + return false; + } + /* Check for invalid member names. But don't worry about a default argument-scope lambda being pushed after the class is complete. */ gcc_assert (TYPE_BEING_DEFINED (current_class_type) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index a04e2d0..a575298 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2014-03-21 Paolo Carlini <paolo.carlini@oracle.com> + + PR c++/60384 + * g++.dg/cpp1y/pr60384.C: New. + 2014-03-21 Jakub Jelinek <jakub@redhat.com> PR target/60598 diff --git a/gcc/testsuite/g++.dg/cpp1y/pr60384.C b/gcc/testsuite/g++.dg/cpp1y/pr60384.C new file mode 100644 index 0000000..f206647 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp1y/pr60384.C @@ -0,0 +1,9 @@ +// PR c++/60384 +// { dg-do compile { target c++1y } } + +template<typename> int foo(); + +struct A +{ + typedef auto foo<>(); // { dg-error "typedef declared 'auto'" } +}; |