diff options
author | Nathan Sidwell <nathan@acm.org> | 2017-06-30 11:40:08 +0000 |
---|---|---|
committer | Nathan Sidwell <nathan@gcc.gnu.org> | 2017-06-30 11:40:08 +0000 |
commit | 274c15162b9b023b8569fa39481ad1a0b7ed0070 (patch) | |
tree | 7e7b4ece8e31838a9e2eee4464327af7658812f2 /gcc/cp | |
parent | 273a94e0fa98687df97826fdaff46c29bdfa4d06 (diff) | |
download | gcc-274c15162b9b023b8569fa39481ad1a0b7ed0070.zip gcc-274c15162b9b023b8569fa39481ad1a0b7ed0070.tar.gz gcc-274c15162b9b023b8569fa39481ad1a0b7ed0070.tar.bz2 |
re PR c++/81229 (ICE in c_tree_chain_next on aarch64)
PR c++/81229
* name-lookup.c (do_pushdecl): Reset IDENTIFIER_TYPE when finding
a matching TYPE_DECL.
* g++.dg/lookup/pr81229.C: New.
From-SVN: r249835
Diffstat (limited to 'gcc/cp')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/name-lookup.c | 10 |
2 files changed, 13 insertions, 3 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 40153aa..38b63e4 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2017-06-30 Nathan Sidwell <nathan@acm.org> + + PR c++/81229 + * name-lookup.c (do_pushdecl): Reset IDENTIFIER_TYPE when finding + a matching TYPE_DECL. + 2017-06-29 Paolo Carlini <paolo.carlini@oracle.com> * class.c (add_method): Change pair of errors to error + inform. diff --git a/gcc/cp/name-lookup.c b/gcc/cp/name-lookup.c index 4beab85..fcf06e0 100644 --- a/gcc/cp/name-lookup.c +++ b/gcc/cp/name-lookup.c @@ -2354,9 +2354,13 @@ do_pushdecl (tree decl, bool is_friend) ; /* Ignore using decls here. */ else if (tree match = duplicate_decls (decl, *iter, is_friend)) { - if (iter.hidden_p () - && match != error_mark_node - && !DECL_HIDDEN_P (match)) + if (match == error_mark_node) + ; + else if (TREE_CODE (match) == TYPE_DECL) + /* The IDENTIFIER will have the type referring to the + now-smashed TYPE_DECL, because ...? Reset it. */ + SET_IDENTIFIER_TYPE_VALUE (name, TREE_TYPE (match)); + else if (iter.hidden_p () && !DECL_HIDDEN_P (match)) { /* Unhiding a previously hidden decl. */ tree head = iter.reveal_node (old); |