Remove type_dependent_init_p.
authorJason Merrill <jason@redhat.com>
Tue, 12 Dec 2017 22:09:48 +0000 (17:09 -0500)
committerJason Merrill <jason@gcc.gnu.org>
Tue, 12 Dec 2017 22:09:48 +0000 (17:09 -0500)
* decl.c (value_dependent_init_p): Check the type of a CONSTRUCTOR.
(type_dependent_init_p): Remove.

From-SVN: r255591

gcc/cp/ChangeLog
gcc/cp/decl.c

index 010f3f4..23dcc3f 100644 (file)
@@ -1,5 +1,8 @@
 2017-12-12  Jason Merrill  <jason@redhat.com>
 
+       * decl.c (value_dependent_init_p): Check the type of a CONSTRUCTOR.
+       (type_dependent_init_p): Remove.
+
        PR c++/82115 - ICE with variable initialized with its own address.
        * cp-tree.h (struct lang_decl_base): Add dependent_init_p.
        (DECL_DEPENDENT_INIT_P, SET_DECL_DEPENDENT_INIT_P): New.
index 3601fa1..445c23c 100644 (file)
@@ -6644,38 +6644,6 @@ initialize_artificial_var (tree decl, vec<constructor_elt, va_gc> *v)
 }
 
 /* INIT is the initializer for a variable, as represented by the
-   parser.  Returns true iff INIT is type-dependent.  */
-
-static bool
-type_dependent_init_p (tree init)
-{
-  if (TREE_CODE (init) == TREE_LIST)
-    /* A parenthesized initializer, e.g.: int i (3, 2); ? */
-    return any_type_dependent_elements_p (init);
-  else if (TREE_CODE (init) == CONSTRUCTOR)
-  /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
-    {
-      if (dependent_type_p (TREE_TYPE (init)))
-       return true;
-
-      vec<constructor_elt, va_gc> *elts;
-      size_t nelts;
-      size_t i;
-
-      elts = CONSTRUCTOR_ELTS (init);
-      nelts = vec_safe_length (elts);
-      for (i = 0; i < nelts; ++i)
-       if (type_dependent_init_p ((*elts)[i].value))
-         return true;
-    }
-  else
-    /* It must be a simple expression, e.g., int i = 3;  */
-    return type_dependent_expression_p (init);
-
-  return false;
-}
-
-/* INIT is the initializer for a variable, as represented by the
    parser.  Returns true iff INIT is value-dependent.  */
 
 static bool
@@ -6687,6 +6655,9 @@ value_dependent_init_p (tree init)
   else if (TREE_CODE (init) == CONSTRUCTOR)
   /* A brace-enclosed initializer, e.g.: int i = { 3 }; ? */
     {
+      if (dependent_type_p (TREE_TYPE (init)))
+       return true;
+
       vec<constructor_elt, va_gc> *elts;
       size_t nelts;
       size_t i;
@@ -6922,8 +6893,7 @@ cp_finish_decl (tree decl, tree init, bool init_const_expr_p,
               && init_const_expr_p
               && TREE_CODE (type) != REFERENCE_TYPE
               && decl_maybe_constant_var_p (decl)
-              && !(dep_init = (type_dependent_init_p (init)
-                               || value_dependent_init_p (init))))
+              && !(dep_init = value_dependent_init_p (init)))
        {
          /* This variable seems to be a non-dependent constant, so process
             its initializer.  If check_initializer returns non-null the