OSDN Git Service

* pt.c (tsubst_decl) [VAR_DECL]: In unevaluated operand,
authorjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 29 Jun 2011 21:19:22 +0000 (21:19 +0000)
committerjason <jason@138bc75d-0d04-0410-961f-82ee72b054a4>
Wed, 29 Jun 2011 21:19:22 +0000 (21:19 +0000)
don't tsubst DECL_INITIAL unless our type use auto.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@175670 138bc75d-0d04-0410-961f-82ee72b054a4

gcc/cp/ChangeLog
gcc/cp/pt.c

index 858ad84..f06c257 100644 (file)
@@ -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.
index d1d8336..dc6cd50 100644 (file)
@@ -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);