From d2f706418a847ebd9565638d76defc30ba9c30a0 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Tue, 18 Oct 2011 13:39:31 -0400 Subject: [PATCH] re PR c++/50742 (tree check fail in check_previous_goto_1) PR c++/50742 * decl.c (check_previous_goto_1): Handle using-decl. From-SVN: r180160 --- gcc/cp/ChangeLog | 5 +++++ gcc/cp/decl.c | 3 ++- gcc/testsuite/ChangeLog | 3 +++ gcc/testsuite/g++.dg/lookup/using23.C | 13 +++++++++++++ 4 files changed, 23 insertions(+), 1 deletion(-) create mode 100644 gcc/testsuite/g++.dg/lookup/using23.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index ad46384349db..24ca6548d1c0 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,8 @@ +2011-10-18 Jason Merrill + + PR c++/50742 + * decl.c (check_previous_goto_1): Handle using-decl. + 2011-10-18 Jason Merrill PR c++/50500 diff --git a/gcc/cp/decl.c b/gcc/cp/decl.c index 8b5033f32060..4b5b6c812264 100644 --- a/gcc/cp/decl.c +++ b/gcc/cp/decl.c @@ -2683,7 +2683,8 @@ check_previous_goto_1 (tree decl, cp_binding_level* level, tree names, tree new_decls, old_decls = (b == level ? names : NULL_TREE); for (new_decls = b->names; new_decls != old_decls; - new_decls = DECL_CHAIN (new_decls)) + new_decls = (DECL_P (new_decls) ? DECL_CHAIN (new_decls) + : TREE_CHAIN (new_decls))) { int problem = decl_jump_unsafe (new_decls); if (! problem) diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c794711e678c..d2cf1a83df51 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,5 +1,8 @@ 2011-10-18 Jason Merrill + PR c++/50742 + * g++.dg/lookup/using23.C: New. + PR c++/50500 * g++.dg/cpp0x/implicit12.C: New. * g++.dg/cpp0x/defaulted20.C: Adjust. diff --git a/gcc/testsuite/g++.dg/lookup/using23.C b/gcc/testsuite/g++.dg/lookup/using23.C new file mode 100644 index 000000000000..5dd8d8594b11 --- /dev/null +++ b/gcc/testsuite/g++.dg/lookup/using23.C @@ -0,0 +1,13 @@ +// PR c++/50742 + +typedef int A; + +void f(int i) +{ + switch (i) + { + case 0: + using ::A; + default:; + } +} -- 2.47.3