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
This commit is contained in:
parent
b850be9d50
commit
f52f3c6dab
@ -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
|
||||
|
@ -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;
|
||||
|
@ -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
|
||||
|
15
gcc/testsuite/g++.dg/cpp0x/access01.C
Normal file
15
gcc/testsuite/g++.dg/cpp0x/access01.C
Normal file
@ -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>();
|
||||
}
|
Loading…
Reference in New Issue
Block a user