diff options
author | Jason Merrill <jason@redhat.com> | 2012-07-12 18:57:03 -0400 |
---|---|---|
committer | Jason Merrill <jason@gcc.gnu.org> | 2012-07-12 18:57:03 -0400 |
commit | 77a24503cb343fb2fd59cdb7b360893e133bae44 (patch) | |
tree | 8507814180585d62e7fc2fcb4c7e8f673db25d85 /gcc/cp | |
parent | 0d87d3076f3e9f8a1e85bdbf8304cf708d2ce370 (diff) | |
download | gcc-77a24503cb343fb2fd59cdb7b360893e133bae44.zip gcc-77a24503cb343fb2fd59cdb7b360893e133bae44.tar.gz gcc-77a24503cb343fb2fd59cdb7b360893e133bae44.tar.bz2 |
pt.c (deduction_tsubst_fntype): Just suppress access checking.
* 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.
From-SVN: r189443
Diffstat (limited to 'gcc/cp')
-rw-r--r-- | gcc/cp/ChangeLog | 6 | ||||
-rw-r--r-- | gcc/cp/pt.c | 45 |
2 files changed, 13 insertions, 38 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index fd2ba73..299116b 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,3 +1,9 @@ +2012-07-12 Jason Merrill <jason@redhat.com> + + * 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. + 2012-07-11 Jason Merrill <jason@redhat.com> DR 1402 diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 72b0c4f..fec88eb 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -116,8 +116,6 @@ enum template_base_result { static void push_access_scope (tree); static void pop_access_scope (tree); -static void push_deduction_access_scope (tree); -static void pop_deduction_access_scope (tree); static bool resolve_overloaded_unification (tree, tree, tree, tree, unification_kind_t, int, bool); @@ -14263,9 +14261,10 @@ deduction_tsubst_fntype (tree fn, tree targs, tsubst_flags_t complain) input_location = DECL_SOURCE_LOCATION (fn); ++deduction_depth; - push_deduction_access_scope (fn); + /* We will do access checks in instantiate_template. */ + push_deferring_access_checks (dk_deferred); r = tsubst (fntype, targs, complain, NULL_TREE); - pop_deduction_access_scope (fn); + pop_deferring_access_checks (); --deduction_depth; if (excessive_deduction_depth) @@ -14374,6 +14373,10 @@ instantiate_template_1 (tree tmpl, tree orig_args, tsubst_flags_t complain) if (fndecl == error_mark_node) return error_mark_node; + /* The DECL_TI_TEMPLATE should always be the immediate parent + template, not the most general template. */ + DECL_TI_TEMPLATE (fndecl) = tmpl; + /* Now we know the specialization, compute access previously deferred. */ push_access_scope (fndecl); @@ -14387,10 +14390,6 @@ instantiate_template_1 (tree tmpl, tree orig_args, tsubst_flags_t complain) pop_access_scope (fndecl); pop_deferring_access_checks (); - /* The DECL_TI_TEMPLATE should always be the immediate parent - template, not the most general template. */ - DECL_TI_TEMPLATE (fndecl) = tmpl; - /* If we've just instantiated the main entry point for a function, instantiate all the alternate entry points as well. We do this by cloning the instantiation of the main entry point, not by @@ -14413,36 +14412,6 @@ instantiate_template (tree tmpl, tree orig_args, tsubst_flags_t complain) return ret; } -/* We're going to do deduction substitution on the type of TMPL, a function - template. In C++11 mode, push into that access scope. In C++03 mode, - disable access checking. */ - -static void -push_deduction_access_scope (tree tmpl) -{ - if (cxx_dialect >= cxx0x) - { - int ptd = processing_template_decl; - push_access_scope (DECL_TEMPLATE_RESULT (tmpl)); - /* Preserve processing_template_decl across push_to_top_level. */ - if (ptd && !processing_template_decl) - ++processing_template_decl; - } - else - push_deferring_access_checks (dk_no_check); -} - -/* And pop back out. */ - -static void -pop_deduction_access_scope (tree tmpl) -{ - if (cxx_dialect >= cxx0x) - pop_access_scope (DECL_TEMPLATE_RESULT (tmpl)); - else - pop_deferring_access_checks (); -} - /* PARM is a template parameter pack for FN. Returns true iff PARM is used in a deducible way in the argument list of FN. */ |