Commit 4cc20315 by Jason Merrill Committed by Jason Merrill

Adjust C++17 class deduction use of DECL_ABSTRACT_ORIGIN.

	* pt.c (build_deduction_guide): Set DECL_ABSTRACT_ORIGIN on the
	template, not the function.
	(template_guide_p): Adjust.

From-SVN: r251425
parent 82b0ce2e
2017-08-29 Jason Merrill <jason@redhat.com> 2017-08-29 Jason Merrill <jason@redhat.com>
* pt.c (build_deduction_guide): Set DECL_ABSTRACT_ORIGIN on the
template, not the function.
(template_guide_p): Adjust.
Support copying local_specializations. Support copying local_specializations.
* cp-tree.h (enum lss_policy): New. * cp-tree.h (enum lss_policy): New.
(local_specialization_stack): Add policy parameter to default ctor. (local_specialization_stack): Add policy parameter to default ctor.
......
...@@ -25079,11 +25079,9 @@ template_guide_p (const_tree fn) ...@@ -25079,11 +25079,9 @@ template_guide_p (const_tree fn)
gcc_assert (deduction_guide_p (fn)); gcc_assert (deduction_guide_p (fn));
if (!DECL_ARTIFICIAL (fn)) if (!DECL_ARTIFICIAL (fn))
return false; return false;
if (tree ctor = DECL_ABSTRACT_ORIGIN (fn)) tree tmpl = DECL_TI_TEMPLATE (fn);
{ if (tree org = DECL_ABSTRACT_ORIGIN (tmpl))
tree tmpl = DECL_TI_TEMPLATE (ctor); return PRIMARY_TEMPLATE_P (org);
return PRIMARY_TEMPLATE_P (tmpl);
}
return false; return false;
} }
...@@ -25194,6 +25192,7 @@ build_deduction_guide (tree ctor, tree outer_args, tsubst_flags_t complain) ...@@ -25194,6 +25192,7 @@ build_deduction_guide (tree ctor, tree outer_args, tsubst_flags_t complain)
bool memtmpl = false; bool memtmpl = false;
bool explicit_p; bool explicit_p;
location_t loc; location_t loc;
tree fn_tmpl = NULL_TREE;
if (TYPE_P (ctor)) if (TYPE_P (ctor))
{ {
...@@ -25219,7 +25218,7 @@ build_deduction_guide (tree ctor, tree outer_args, tsubst_flags_t complain) ...@@ -25219,7 +25218,7 @@ build_deduction_guide (tree ctor, tree outer_args, tsubst_flags_t complain)
{ {
++processing_template_decl; ++processing_template_decl;
tree fn_tmpl fn_tmpl
= (TREE_CODE (ctor) == TEMPLATE_DECL ? ctor = (TREE_CODE (ctor) == TEMPLATE_DECL ? ctor
: DECL_TI_TEMPLATE (ctor)); : DECL_TI_TEMPLATE (ctor));
if (outer_args) if (outer_args)
...@@ -25334,7 +25333,7 @@ build_deduction_guide (tree ctor, tree outer_args, tsubst_flags_t complain) ...@@ -25334,7 +25333,7 @@ build_deduction_guide (tree ctor, tree outer_args, tsubst_flags_t complain)
DECL_TEMPLATE_INFO (ded_fn) = build_template_info (ded_tmpl, targs); DECL_TEMPLATE_INFO (ded_fn) = build_template_info (ded_tmpl, targs);
DECL_PRIMARY_TEMPLATE (ded_tmpl) = ded_tmpl; DECL_PRIMARY_TEMPLATE (ded_tmpl) = ded_tmpl;
if (DECL_P (ctor)) if (DECL_P (ctor))
DECL_ABSTRACT_ORIGIN (ded_fn) = ctor; DECL_ABSTRACT_ORIGIN (ded_tmpl) = fn_tmpl;
if (ci) if (ci)
set_constraints (ded_tmpl, ci); set_constraints (ded_tmpl, ci);
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment