From 25590979d6f79d00d88ea0fe2b30ecd0143be45d Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Tue, 18 Aug 2015 10:43:44 -0400 Subject: [PATCH] re PR c++/66957 (incorrect "is protected within this context" error) PR c++/66957 * search.c (protected_accessible_p): Revert fix for 38579. From-SVN: r226974 --- gcc/cp/ChangeLog | 3 +++ gcc/cp/search.c | 2 +- gcc/testsuite/g++.dg/conversion/access1.C | 2 +- gcc/testsuite/g++.dg/inherit/access9.C | 14 ++++++++++++++ 4 files changed, 19 insertions(+), 2 deletions(-) create mode 100644 gcc/testsuite/g++.dg/inherit/access9.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 4e239fa13c01..8fe4ac59b5f3 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2015-08-17 Jason Merrill + PR c++/66957 + * search.c (protected_accessible_p): Revert fix for 38579. + PR c++/58063 * tree.c (bot_manip): Remap SAVE_EXPR. diff --git a/gcc/cp/search.c b/gcc/cp/search.c index c3eed90f6c36..0b3059849c5f 100644 --- a/gcc/cp/search.c +++ b/gcc/cp/search.c @@ -727,7 +727,7 @@ protected_accessible_p (tree decl, tree derived, tree binfo) Here DERIVED is a possible P, DECL is m and BINFO_TYPE (binfo) is N. */ /* If DERIVED isn't derived from N, then it can't be a P. */ - if (!DERIVED_FROM_P (BINFO_TYPE (binfo), derived)) + if (!DERIVED_FROM_P (context_for_name_lookup (decl), derived)) return 0; access = access_in_type (derived, decl); diff --git a/gcc/testsuite/g++.dg/conversion/access1.C b/gcc/testsuite/g++.dg/conversion/access1.C index f187e63a9d3d..6ed063aa158f 100644 --- a/gcc/testsuite/g++.dg/conversion/access1.C +++ b/gcc/testsuite/g++.dg/conversion/access1.C @@ -15,7 +15,7 @@ struct B : protected P struct C : public P { // C can access P's copy ctor, but can't convert b to const P&. - C(const B& b) : P(b) {} // { dg-error "inaccessible base" } + C(const B& b) : P(b) {} // { dg-error "inaccessible base" "" { xfail *-*-* } } }; void foo() diff --git a/gcc/testsuite/g++.dg/inherit/access9.C b/gcc/testsuite/g++.dg/inherit/access9.C new file mode 100644 index 000000000000..cdbc64043933 --- /dev/null +++ b/gcc/testsuite/g++.dg/inherit/access9.C @@ -0,0 +1,14 @@ +// PR c++/66957 + +class BaseClass { +protected: + static int x; +}; + +struct DerivedA : BaseClass { }; + +struct DerivedB : BaseClass { + DerivedB() { + (void) DerivedA::x; + } +}; -- 2.47.2