From: nathan Date: Fri, 30 Jun 2017 11:40:08 +0000 (+0000) Subject: PR c++/81229 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=a1adbef024f4c634b7fec573ff065079752e4606;p=thirdparty%2Fgcc.git PR c++/81229 * name-lookup.c (do_pushdecl): Reset IDENTIFIER_TYPE when finding a matching TYPE_DECL. * g++.dg/lookup/pr81229.C: New. git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@249835 138bc75d-0d04-0410-961f-82ee72b054a4 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 40153aafea09..38b63e434038 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2017-06-30 Nathan Sidwell + + PR c++/81229 + * name-lookup.c (do_pushdecl): Reset IDENTIFIER_TYPE when finding + a matching TYPE_DECL. + 2017-06-29 Paolo Carlini * 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 4beab850612e..fcf06e0cf5b8 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); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 274fced11a22..8a6311a65659 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2017-06-30 Nathan Sidwell + + PR c++/81229 + * g++.dg/lookup/pr81229.C: New. + 2017-06-30 Martin Liska PR sanitizer/81021 diff --git a/gcc/testsuite/g++.dg/lookup/pr81229.C b/gcc/testsuite/g++.dg/lookup/pr81229.C new file mode 100644 index 000000000000..c9981c9f60a6 --- /dev/null +++ b/gcc/testsuite/g++.dg/lookup/pr81229.C @@ -0,0 +1,7 @@ +// PR c++/81229 GC ICE with stale pointed in identifier type. +// { dg-additional-options "--param ggc-min-heapsize=0" } + +typedef unsigned L; +typedef unsigned L; + +L l;