From: Nathan Froyd Date: Wed, 10 Nov 2010 21:05:50 +0000 (+0000) Subject: re PR c++/46065 (ICE: tree check: expected tree that contains 'decl minimal' structur... X-Git-Url: https://git.libre-soc.org/?a=commitdiff_plain;h=75acdae9f346f316e82b008696cc33766c829d9a;p=gcc.git re PR c++/46065 (ICE: tree check: expected tree that contains 'decl minimal' structure, have 'tree_list' in poplevel_named_label_1, at cp/decl.c:477) gcc/cp/ PR c++/46065 * decl.c (poplevel_named_label_1): Use TREE_CHAIN if necessary. gcc/testsuite/ PR c++/46065 * g++.dg/pr46065.C: New test. From-SVN: r166558 --- diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 51e21714091..04f95bbbc97 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2010-11-10 Nathan Froyd + + PR c++/46065 + * decl.c (poplevel_named_label_1): Use TREE_CHAIN if necessary. + 2010-11-09 Jakub Jelinek PR c++/45894 diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index c3728408368..93af4b45ff7 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -475,7 +475,11 @@ poplevel_named_label_1 (void **slot, void *data) { tree decl; - for (decl = ent->names_in_scope; decl; decl = DECL_CHAIN (decl)) + /* ENT->NAMES_IN_SCOPE may contain a mixture of DECLs and + TREE_LISTs representing OVERLOADs, so be careful. */ + for (decl = ent->names_in_scope; decl; decl = (DECL_P (decl) + ? DECL_CHAIN (decl) + : TREE_CHAIN (decl))) if (decl_jump_unsafe (decl)) VEC_safe_push (tree, gc, ent->bad_decls, decl); diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index 0d711956ced..5560edeb4ac 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,8 @@ +2010-11-10 Nathan Froyd + + PR c++/46065 + * g++.dg/pr46065.C: New test. + 2010-11-10 Jan Hubicka PR tree-optimize/33172 diff --git a/gcc/testsuite/g++.dg/pr46065.C b/gcc/testsuite/g++.dg/pr46065.C new file mode 100644 index 00000000000..75c171db69e --- /dev/null +++ b/gcc/testsuite/g++.dg/pr46065.C @@ -0,0 +1,11 @@ +// PR c++/46065 +// { dg-do compile } + +void bar (); + +void +foo () +{ + using ::bar; +label:; +}