diff options
author | Jason Merrill <jason@redhat.com> | 2011-05-24 19:44:59 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2011-05-24 19:44:59 -0400 |
commit | f52f3c6dab8faaba5db2b7c1fb558134210d8b93 (patch) | |
tree | 4216f7f45aa36e01e847d24d3ffa5d1ce9dda49d | |
parent | b850be9d50210da752443e730723285bbd1b7c96 (diff) | |
download | gcc-f52f3c6dab8faaba5db2b7c1fb558134210d8b93.zip gcc-f52f3c6dab8faaba5db2b7c1fb558134210d8b93.tar.gz gcc-f52f3c6dab8faaba5db2b7c1fb558134210d8b93.tar.bz2 |
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
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/pt.c | 7 | ||||
-rw-r--r-- | gcc/testsuite/ChangeLog | 4 | ||||
-rw-r--r-- | gcc/testsuite/g++.dg/cpp0x/access01.C | 15 |
4 files changed, 28 insertions, 4 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 6397194..d9d8a54 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2011-05-24 Jason Merrill <jason@redhat.com> + + 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 <nicola.pero@meta-innovation.com>, * parser.c (cp_parser_objc_class_ivars): Deal gracefully with a diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 98844c3..bd9aeba 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 c1dcaed..14ef5be 100644 --- a/gcc/testsuite/ChangeLog +++ b/gcc/testsuite/ChangeLog @@ -1,3 +1,7 @@ +2011-05-24 Jason Merrill <jason@redhat.com> + + * g++.dg/cpp0x/access01.C: New. + 2011-05-24 Nicola Pero <nicola.pero@meta-innovation.com> 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 0000000..43e5e86 --- /dev/null +++ b/gcc/testsuite/g++.dg/cpp0x/access01.C @@ -0,0 +1,15 @@ +// PR c++/49042 +// { dg-options -std=c++0x } + +template <class T> +class A +{ + T p; +public: + template <class U> auto f() -> decltype(+p) { } +}; + +int main() +{ + A<int>().f<int>(); +} |