From 4cc20315a7e67b6ebbdbfbb736122476bf28f041 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Tue, 29 Aug 2017 15:40:32 -0400 Subject: [PATCH] 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 --- gcc/cp/ChangeLog | 4 ++++ gcc/cp/pt.c | 13 ++++++------- 2 files changed, 10 insertions(+), 7 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index b4e21f6f064..ea410c1063a 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,9 @@ 2017-08-29 Jason Merrill + * pt.c (build_deduction_guide): Set DECL_ABSTRACT_ORIGIN on the + template, not the function. + (template_guide_p): Adjust. + Support copying local_specializations. * cp-tree.h (enum lss_policy): New. (local_specialization_stack): Add policy parameter to default ctor. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index 1b726ff5398..416d17b5d18 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -25079,11 +25079,9 @@ template_guide_p (const_tree fn) gcc_assert (deduction_guide_p (fn)); if (!DECL_ARTIFICIAL (fn)) return false; - if (tree ctor = DECL_ABSTRACT_ORIGIN (fn)) - { - tree tmpl = DECL_TI_TEMPLATE (ctor); - return PRIMARY_TEMPLATE_P (tmpl); - } + tree tmpl = DECL_TI_TEMPLATE (fn); + if (tree org = DECL_ABSTRACT_ORIGIN (tmpl)) + return PRIMARY_TEMPLATE_P (org); return false; } @@ -25194,6 +25192,7 @@ build_deduction_guide (tree ctor, tree outer_args, tsubst_flags_t complain) bool memtmpl = false; bool explicit_p; location_t loc; + tree fn_tmpl = NULL_TREE; if (TYPE_P (ctor)) { @@ -25219,7 +25218,7 @@ build_deduction_guide (tree ctor, tree outer_args, tsubst_flags_t complain) { ++processing_template_decl; - tree fn_tmpl + fn_tmpl = (TREE_CODE (ctor) == TEMPLATE_DECL ? ctor : DECL_TI_TEMPLATE (ctor)); if (outer_args) @@ -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_PRIMARY_TEMPLATE (ded_tmpl) = ded_tmpl; if (DECL_P (ctor)) - DECL_ABSTRACT_ORIGIN (ded_fn) = ctor; + DECL_ABSTRACT_ORIGIN (ded_tmpl) = fn_tmpl; if (ci) set_constraints (ded_tmpl, ci); -- 2.30.2