From b52259e162427d7ebb8205bd72b94bd093216f62 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Thu, 12 Jul 2012 18:57:16 -0400 Subject: pt.c (instantiate_decl): Check typedefs access here. * pt.c (instantiate_decl): Check typedefs access here. (instantiate_template_1): Not here. From-SVN: r189444 --- gcc/cp/ChangeLog | 3 +++ gcc/cp/pt.c | 15 ++++++++------- gcc/cp/semantics.c | 2 +- 3 files changed, 12 insertions(+), 8 deletions(-) (limited to 'gcc/cp') diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 299116b..c5f2312 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2012-07-12 Jason Merrill + * pt.c (instantiate_decl): Check typedefs access here. + (instantiate_template_1): Not here. + * pt.c (deduction_tsubst_fntype): Just suppress access checking. (instantiate_template_1): Set DECL_TI_TEMPLATE before access checking. (push_deduction_access_scope, pop_deduction_access_scope): Remove. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index fec88eb..95c6464 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -8334,7 +8334,7 @@ apply_late_template_attributes (tree *decl_p, tree attributes, int attr_flags, /* Perform (or defer) access check for typedefs that were referenced from within the template TMPL code. - This is a subroutine of instantiate_template and instantiate_class_template. + This is a subroutine of instantiate_decl and instantiate_class_template. TMPL is the template to consider and TARGS is the list of arguments of that template. */ @@ -14380,12 +14380,6 @@ instantiate_template_1 (tree tmpl, tree orig_args, tsubst_flags_t complain) /* Now we know the specialization, compute access previously deferred. */ push_access_scope (fndecl); - - /* Some typedefs referenced from within the template code need to be access - checked at template instantiation time, i.e now. These types were - added to the template at parsing time. Let's get those and perfom - the acces checks then. */ - perform_typedefs_access_check (DECL_TEMPLATE_RESULT (tmpl), targ_ptr); perform_deferred_access_checks (); pop_access_scope (fndecl); pop_deferring_access_checks (); @@ -18395,6 +18389,13 @@ instantiate_decl (tree d, int defer_ok, /* Set up context. */ start_preparsed_function (d, NULL_TREE, SF_PRE_PARSED); + /* Some typedefs referenced from within the template code need to be + access checked at template instantiation time, i.e now. These + types were added to the template at parsing time. Let's get those + and perform the access checks then. */ + perform_typedefs_access_check (DECL_TEMPLATE_RESULT (gen_tmpl), + gen_args); + /* Create substitution entries for the parameters. */ subst_decl = DECL_TEMPLATE_RESULT (template_for_substitution (d)); tmpl_parm = DECL_ARGUMENTS (subst_decl); diff --git a/gcc/cp/semantics.c b/gcc/cp/semantics.c index 0cacf74..a32e48a 100644 --- a/gcc/cp/semantics.c +++ b/gcc/cp/semantics.c @@ -1625,7 +1625,7 @@ finish_non_static_data_member (tree decl, tree object, tree qualifying_scope) /* If we are currently parsing a template and we encountered a typedef TYPEDEF_DECL that is being accessed though CONTEXT, this function adds the typedef to a list tied to the current template. - At tempate instantiatin time, that list is walked and access check + At template instantiation time, that list is walked and access check performed for each typedef. LOCATION is the location of the usage point of TYPEDEF_DECL. */ -- cgit v1.1