diff options
author | Jason Merrill <jason@redhat.com> | 2012-07-12 18:57:16 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2012-07-12 18:57:16 -0400 |
commit | b52259e162427d7ebb8205bd72b94bd093216f62 (patch) | |
tree | 562e195bb722152e8c22963f37e60d88db9436cb /gcc/cp | |
parent | 77a24503cb343fb2fd59cdb7b360893e133bae44 (diff) | |
download | gcc-b52259e162427d7ebb8205bd72b94bd093216f62.zip gcc-b52259e162427d7ebb8205bd72b94bd093216f62.tar.gz gcc-b52259e162427d7ebb8205bd72b94bd093216f62.tar.bz2 |
pt.c (instantiate_decl): Check typedefs access here.
* pt.c (instantiate_decl): Check typedefs access here.
(instantiate_template_1): Not here.
From-SVN: r189444
Diffstat (limited to 'gcc/cp')
-rw-r--r-- | gcc/cp/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/cp/pt.c | 15 | ||||
-rw-r--r-- | gcc/cp/semantics.c | 2 |
3 files changed, 12 insertions, 8 deletions
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 <jason@redhat.com> + * 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. */ |