diff options
Diffstat (limited to 'gcc')
-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>(); +} |