From 3fe98897323ab6672dcfb765272fbdb2bdab1015 Mon Sep 17 00:00:00 2001 From: Jason Merrill Date: Wed, 29 Jun 2011 17:19:22 -0400 Subject: [PATCH] pt.c (tsubst_decl): In unevaluated operand, don't tsubst DECL_INITIAL unless our type use auto. * pt.c (tsubst_decl) [VAR_DECL]: In unevaluated operand, don't tsubst DECL_INITIAL unless our type use auto. From-SVN: r175670 --- gcc/cp/ChangeLog | 3 +++ gcc/cp/pt.c | 9 ++++----- 2 files changed, 7 insertions(+), 5 deletions(-) diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 858ad8414d5..f06c257796f 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2011-06-29 Jason Merrill + * pt.c (tsubst_decl) [VAR_DECL]: In unevaluated operand, + don't tsubst DECL_INITIAL unless our type use auto. + PR c++/49520 * semantics.c (constexpr_fn_retval): Handle CLEANUP_POINT_EXPR here. (massage_constexpr_body): Not here. diff --git a/gcc/cp/pt.c b/gcc/cp/pt.c index d1d8336b1bd..dc6cd5086d5 100644 --- a/gcc/cp/pt.c +++ b/gcc/cp/pt.c @@ -10138,12 +10138,11 @@ tsubst_decl (tree t, tree args, tsubst_flags_t complain) scope, such as for a lambda return type. Don't add it to local_specializations, do perform auto deduction. */ tree auto_node = type_uses_auto (type); - tree init - = tsubst_expr (DECL_INITIAL (t), args, complain, in_decl, - /*constant_expression_p=*/false); - - if (auto_node && init) + if (auto_node) { + tree init + = tsubst_expr (DECL_INITIAL (t), args, complain, in_decl, + /*constant_expression_p=*/false); init = resolve_nondeduced_context (init); TREE_TYPE (r) = type = do_auto_deduction (type, init, auto_node); -- 2.30.2