From f52f3c6dab8faaba5db2b7c1fb558134210d8b93 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Tue, 24 May 2011 19:44:59 -0400 Subject: [PATCH] re PR c++/49042 ([C++0x] wrong "protected" when using template and decltype) PR c++/49042 * pt.c (get_mostly_instantiated_function_type): Use push_deferring_access_checks rather than set flag_access_control. From-SVN: r174151 --- gcc/cp/ChangeLog | 6 ++++++ gcc/cp/pt.c | 7 +++---- gcc/testsuite/ChangeLog | 4 ++++ gcc/testsuite/g++.dg/cpp0x/access01.C | 15 +++++++++++++++ 4 files changed, 28 insertions(+), 4 deletions(-) create mode 100644 gcc/testsuite/g++.dg/cpp0x/access01.C diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 6397194d738..d9d8a549e62 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2011-05-24 Jason Merrill + + PR c++/49042 + * pt.c (get_mostly_instantiated_function_type): Use + push_deferring_access_checks rather than set flag_access_control. + 2011-05-24 Nicola Pero , * parser.c (cp_parser_objc_class_ivars): Deal gracefully with a diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 98844c37017..bd9aeba91b8 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -18045,7 +18045,7 @@ get_mostly_instantiated_function_type (tree decl) ; else { - int i, save_access_control; + int i; tree partial_args; /* Replace the innermost level of the TARGS with NULL_TREEs to @@ -18060,8 +18060,7 @@ get_mostly_instantiated_function_type (tree decl) /* Disable access control as this function is used only during name-mangling. */ - save_access_control = flag_access_control; - flag_access_control = 0; + push_deferring_access_checks (dk_no_check); ++processing_template_decl; /* Now, do the (partial) substitution to figure out the @@ -18076,7 +18075,7 @@ get_mostly_instantiated_function_type (tree decl) TREE_VEC_LENGTH (partial_args)--; tparms = tsubst_template_parms (tparms, partial_args, tf_error); - flag_access_control = save_access_control; + pop_deferring_access_checks (); } return fn_type; diff --git a/gcc/testsuite/ChangeLog b/gcc/testsuite/ChangeLog index c1dcaedaf65..14ef5becfa7 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2011-05-24 Jason Merrill + + * g++.dg/cpp0x/access01.C: New. + 2011-05-24 Nicola Pero PR libobjc/48177 diff --git a/gcc/testsuite/g++.dg/cpp0x/access01.C b/gcc/testsuite/g++.dg/cpp0x/access01.C new file mode 100644 index 00000000000..43e5e863720 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/access01.C @@ -0,0 +1,15 @@ +// PR c++/49042 +// { dg-options -std=c++0x } + +template +class A +{ + T p; +public: + template auto f() -> decltype(+p) { } +}; + +int main() +{ + A().f(); +}