diff options
-rw-r--r-- | gcc/cp/ChangeLog | 3 | ||||
-rw-r--r-- | gcc/cp/pt.c | 9 |
2 files changed, 7 insertions, 5 deletions
diff --git a/gcc/cp/ChangeLog b/gcc/cp/ChangeLog index 858ad84..f06c257 100644 --- a/gcc/cp/ChangeLog +++ b/gcc/cp/ChangeLog @@ -1,5 +1,8 @@ 2011-06-29 Jason Merrill <jason@redhat.com> + * 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 d1d8336..dc6cd50 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); |