OSDN Git Service

e93e82cac57ea0ec124d0e88e93f39204607b9bc
[pf3gnuchains/gcc-fork.git] / gcc / cp / init.c
1 /* Handle initialization things in C++.
2    Copyright (C) 1987, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
3    1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010,
4    2011 Free Software Foundation, Inc.
5    Contributed by Michael Tiemann (tiemann@cygnus.com)
6
7 This file is part of GCC.
8
9 GCC is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3, or (at your option)
12 any later version.
13
14 GCC is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
17 GNU General Public License for more details.
18
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING3.  If not see
21 <http://www.gnu.org/licenses/>.  */
22
23 /* High-level class interface.  */
24
25 #include "config.h"
26 #include "system.h"
27 #include "coretypes.h"
28 #include "tm.h"
29 #include "tree.h"
30 #include "cp-tree.h"
31 #include "flags.h"
32 #include "output.h"
33 #include "target.h"
34
35 static bool begin_init_stmts (tree *, tree *);
36 static tree finish_init_stmts (bool, tree, tree);
37 static void construct_virtual_base (tree, tree);
38 static void expand_aggr_init_1 (tree, tree, tree, tree, int, tsubst_flags_t);
39 static void expand_default_init (tree, tree, tree, tree, int, tsubst_flags_t);
40 static void perform_member_init (tree, tree);
41 static tree build_builtin_delete_call (tree);
42 static int member_init_ok_or_else (tree, tree, tree);
43 static void expand_virtual_init (tree, tree);
44 static tree sort_mem_initializers (tree, tree);
45 static tree initializing_context (tree);
46 static void expand_cleanup_for_base (tree, tree);
47 static tree dfs_initialize_vtbl_ptrs (tree, void *);
48 static tree build_field_list (tree, tree, int *);
49 static tree build_vtbl_address (tree);
50 static int diagnose_uninitialized_cst_or_ref_member_1 (tree, tree, bool, bool);
51
52 /* We are about to generate some complex initialization code.
53    Conceptually, it is all a single expression.  However, we may want
54    to include conditionals, loops, and other such statement-level
55    constructs.  Therefore, we build the initialization code inside a
56    statement-expression.  This function starts such an expression.
57    STMT_EXPR_P and COMPOUND_STMT_P are filled in by this function;
58    pass them back to finish_init_stmts when the expression is
59    complete.  */
60
61 static bool
62 begin_init_stmts (tree *stmt_expr_p, tree *compound_stmt_p)
63 {
64   bool is_global = !building_stmt_list_p ();
65
66   *stmt_expr_p = begin_stmt_expr ();
67   *compound_stmt_p = begin_compound_stmt (BCS_NO_SCOPE);
68
69   return is_global;
70 }
71
72 /* Finish out the statement-expression begun by the previous call to
73    begin_init_stmts.  Returns the statement-expression itself.  */
74
75 static tree
76 finish_init_stmts (bool is_global, tree stmt_expr, tree compound_stmt)
77 {
78   finish_compound_stmt (compound_stmt);
79
80   stmt_expr = finish_stmt_expr (stmt_expr, true);
81
82   gcc_assert (!building_stmt_list_p () == is_global);
83
84   return stmt_expr;
85 }
86
87 /* Constructors */
88
89 /* Called from initialize_vtbl_ptrs via dfs_walk.  BINFO is the base
90    which we want to initialize the vtable pointer for, DATA is
91    TREE_LIST whose TREE_VALUE is the this ptr expression.  */
92
93 static tree
94 dfs_initialize_vtbl_ptrs (tree binfo, void *data)
95 {
96   if (!TYPE_CONTAINS_VPTR_P (BINFO_TYPE (binfo)))
97     return dfs_skip_bases;
98
99   if (!BINFO_PRIMARY_P (binfo) || BINFO_VIRTUAL_P (binfo))
100     {
101       tree base_ptr = TREE_VALUE ((tree) data);
102
103       base_ptr = build_base_path (PLUS_EXPR, base_ptr, binfo, /*nonnull=*/1,
104                                   tf_warning_or_error);
105
106       expand_virtual_init (binfo, base_ptr);
107     }
108
109   return NULL_TREE;
110 }
111
112 /* Initialize all the vtable pointers in the object pointed to by
113    ADDR.  */
114
115 void
116 initialize_vtbl_ptrs (tree addr)
117 {
118   tree list;
119   tree type;
120
121   type = TREE_TYPE (TREE_TYPE (addr));
122   list = build_tree_list (type, addr);
123
124   /* Walk through the hierarchy, initializing the vptr in each base
125      class.  We do these in pre-order because we can't find the virtual
126      bases for a class until we've initialized the vtbl for that
127      class.  */
128   dfs_walk_once (TYPE_BINFO (type), dfs_initialize_vtbl_ptrs, NULL, list);
129 }
130
131 /* Return an expression for the zero-initialization of an object with
132    type T.  This expression will either be a constant (in the case
133    that T is a scalar), or a CONSTRUCTOR (in the case that T is an
134    aggregate), or NULL (in the case that T does not require
135    initialization).  In either case, the value can be used as
136    DECL_INITIAL for a decl of the indicated TYPE; it is a valid static
137    initializer. If NELTS is non-NULL, and TYPE is an ARRAY_TYPE, NELTS
138    is the number of elements in the array.  If STATIC_STORAGE_P is
139    TRUE, initializers are only generated for entities for which
140    zero-initialization does not simply mean filling the storage with
141    zero bytes.  FIELD_SIZE, if non-NULL, is the bit size of the field,
142    subfields with bit positions at or above that bit size shouldn't
143    be added.  */
144
145 static tree
146 build_zero_init_1 (tree type, tree nelts, bool static_storage_p,
147                    tree field_size)
148 {
149   tree init = NULL_TREE;
150
151   /* [dcl.init]
152
153      To zero-initialize an object of type T means:
154
155      -- if T is a scalar type, the storage is set to the value of zero
156         converted to T.
157
158      -- if T is a non-union class type, the storage for each nonstatic
159         data member and each base-class subobject is zero-initialized.
160
161      -- if T is a union type, the storage for its first data member is
162         zero-initialized.
163
164      -- if T is an array type, the storage for each element is
165         zero-initialized.
166
167      -- if T is a reference type, no initialization is performed.  */
168
169   gcc_assert (nelts == NULL_TREE || TREE_CODE (nelts) == INTEGER_CST);
170
171   if (type == error_mark_node)
172     ;
173   else if (static_storage_p && zero_init_p (type))
174     /* In order to save space, we do not explicitly build initializers
175        for items that do not need them.  GCC's semantics are that
176        items with static storage duration that are not otherwise
177        initialized are initialized to zero.  */
178     ;
179   else if (TYPE_PTR_P (type) || TYPE_PTR_TO_MEMBER_P (type))
180     init = convert (type, nullptr_node);
181   else if (SCALAR_TYPE_P (type))
182     init = convert (type, integer_zero_node);
183   else if (CLASS_TYPE_P (type))
184     {
185       tree field;
186       VEC(constructor_elt,gc) *v = NULL;
187
188       /* Iterate over the fields, building initializations.  */
189       for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
190         {
191           if (TREE_CODE (field) != FIELD_DECL)
192             continue;
193
194           /* Don't add virtual bases for base classes if they are beyond
195              the size of the current field, that means it is present
196              somewhere else in the object.  */
197           if (field_size)
198             {
199               tree bitpos = bit_position (field);
200               if (TREE_CODE (bitpos) == INTEGER_CST
201                   && !tree_int_cst_lt (bitpos, field_size))
202                 continue;
203             }
204
205           /* Note that for class types there will be FIELD_DECLs
206              corresponding to base classes as well.  Thus, iterating
207              over TYPE_FIELDs will result in correct initialization of
208              all of the subobjects.  */
209           if (!static_storage_p || !zero_init_p (TREE_TYPE (field)))
210             {
211               tree new_field_size
212                 = (DECL_FIELD_IS_BASE (field)
213                    && DECL_SIZE (field)
214                    && TREE_CODE (DECL_SIZE (field)) == INTEGER_CST)
215                   ? DECL_SIZE (field) : NULL_TREE;
216               tree value = build_zero_init_1 (TREE_TYPE (field),
217                                               /*nelts=*/NULL_TREE,
218                                               static_storage_p,
219                                               new_field_size);
220               if (value)
221                 CONSTRUCTOR_APPEND_ELT(v, field, value);
222             }
223
224           /* For unions, only the first field is initialized.  */
225           if (TREE_CODE (type) == UNION_TYPE)
226             break;
227         }
228
229       /* Build a constructor to contain the initializations.  */
230       init = build_constructor (type, v);
231     }
232   else if (TREE_CODE (type) == ARRAY_TYPE)
233     {
234       tree max_index;
235       VEC(constructor_elt,gc) *v = NULL;
236
237       /* Iterate over the array elements, building initializations.  */
238       if (nelts)
239         max_index = fold_build2_loc (input_location,
240                                  MINUS_EXPR, TREE_TYPE (nelts),
241                                  nelts, integer_one_node);
242       else
243         max_index = array_type_nelts (type);
244
245       /* If we have an error_mark here, we should just return error mark
246          as we don't know the size of the array yet.  */
247       if (max_index == error_mark_node)
248         return error_mark_node;
249       gcc_assert (TREE_CODE (max_index) == INTEGER_CST);
250
251       /* A zero-sized array, which is accepted as an extension, will
252          have an upper bound of -1.  */
253       if (!tree_int_cst_equal (max_index, integer_minus_one_node))
254         {
255           constructor_elt *ce;
256
257           v = VEC_alloc (constructor_elt, gc, 1);
258           ce = VEC_quick_push (constructor_elt, v, NULL);
259
260           /* If this is a one element array, we just use a regular init.  */
261           if (tree_int_cst_equal (size_zero_node, max_index))
262             ce->index = size_zero_node;
263           else
264             ce->index = build2 (RANGE_EXPR, sizetype, size_zero_node,
265                                 max_index);
266
267           ce->value = build_zero_init_1 (TREE_TYPE (type),
268                                          /*nelts=*/NULL_TREE,
269                                          static_storage_p, NULL_TREE);
270         }
271
272       /* Build a constructor to contain the initializations.  */
273       init = build_constructor (type, v);
274     }
275   else if (TREE_CODE (type) == VECTOR_TYPE)
276     init = build_zero_cst (type);
277   else
278     gcc_assert (TREE_CODE (type) == REFERENCE_TYPE);
279
280   /* In all cases, the initializer is a constant.  */
281   if (init)
282     TREE_CONSTANT (init) = 1;
283
284   return init;
285 }
286
287 /* Return an expression for the zero-initialization of an object with
288    type T.  This expression will either be a constant (in the case
289    that T is a scalar), or a CONSTRUCTOR (in the case that T is an
290    aggregate), or NULL (in the case that T does not require
291    initialization).  In either case, the value can be used as
292    DECL_INITIAL for a decl of the indicated TYPE; it is a valid static
293    initializer. If NELTS is non-NULL, and TYPE is an ARRAY_TYPE, NELTS
294    is the number of elements in the array.  If STATIC_STORAGE_P is
295    TRUE, initializers are only generated for entities for which
296    zero-initialization does not simply mean filling the storage with
297    zero bytes.  */
298
299 tree
300 build_zero_init (tree type, tree nelts, bool static_storage_p)
301 {
302   return build_zero_init_1 (type, nelts, static_storage_p, NULL_TREE);
303 }
304
305 /* Return a suitable initializer for value-initializing an object of type
306    TYPE, as described in [dcl.init].  */
307
308 tree
309 build_value_init (tree type, tsubst_flags_t complain)
310 {
311   /* [dcl.init]
312
313      To value-initialize an object of type T means:
314
315      - if T is a class type (clause 9) with a user-provided constructor
316        (12.1), then the default constructor for T is called (and the
317        initialization is ill-formed if T has no accessible default
318        constructor);
319
320      - if T is a non-union class type without a user-provided constructor,
321        then every non-static data member and base-class component of T is
322        value-initialized;92)
323
324      - if T is an array type, then each element is value-initialized;
325
326      - otherwise, the object is zero-initialized.
327
328      A program that calls for default-initialization or
329      value-initialization of an entity of reference type is ill-formed.
330
331      92) Value-initialization for such a class object may be implemented by
332      zero-initializing the object and then calling the default
333      constructor.  */
334
335   /* The AGGR_INIT_EXPR tweaking below breaks in templates.  */
336   gcc_assert (!processing_template_decl
337               || (SCALAR_TYPE_P (type) || TREE_CODE (type) == ARRAY_TYPE));
338
339   if (CLASS_TYPE_P (type))
340     {
341       /* Instead of the above, only consider the user-providedness of the
342          default constructor itself so value-initializing a class with an
343          explicitly defaulted default constructor and another user-provided
344          constructor works properly (c++std-core-19883).  */
345       if (type_has_user_provided_default_constructor (type)
346           || (!TYPE_HAS_DEFAULT_CONSTRUCTOR (type)
347               && type_has_user_provided_constructor (type)))
348         return build_aggr_init_expr
349           (type,
350            build_special_member_call (NULL_TREE, complete_ctor_identifier,
351                                       NULL, type, LOOKUP_NORMAL,
352                                       complain),
353            complain);
354       else if (TYPE_HAS_COMPLEX_DFLT (type))
355         {
356           /* This is a class that needs constructing, but doesn't have
357              a user-provided constructor.  So we need to zero-initialize
358              the object and then call the implicitly defined ctor.
359              This will be handled in simplify_aggr_init_expr.  */
360           tree ctor = build_special_member_call
361             (NULL_TREE, complete_ctor_identifier,
362              NULL, type, LOOKUP_NORMAL, complain);
363           ctor = build_aggr_init_expr (type, ctor, complain);
364           if (ctor != error_mark_node)
365             AGGR_INIT_ZERO_FIRST (ctor) = 1;
366           return ctor;
367         }
368     }
369   return build_value_init_noctor (type, complain);
370 }
371
372 /* Like build_value_init, but don't call the constructor for TYPE.  Used
373    for base initializers.  */
374
375 tree
376 build_value_init_noctor (tree type, tsubst_flags_t complain)
377 {
378   /* FIXME the class and array cases should just use digest_init once it is
379      SFINAE-enabled.  */
380   if (CLASS_TYPE_P (type))
381     {
382       gcc_assert (!TYPE_HAS_COMPLEX_DFLT (type));
383         
384       if (TREE_CODE (type) != UNION_TYPE)
385         {
386           tree field;
387           VEC(constructor_elt,gc) *v = NULL;
388
389           /* Iterate over the fields, building initializations.  */
390           for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
391             {
392               tree ftype, value;
393
394               if (TREE_CODE (field) != FIELD_DECL)
395                 continue;
396
397               ftype = TREE_TYPE (field);
398
399               /* We could skip vfields and fields of types with
400                  user-defined constructors, but I think that won't improve
401                  performance at all; it should be simpler in general just
402                  to zero out the entire object than try to only zero the
403                  bits that actually need it.  */
404
405               /* Note that for class types there will be FIELD_DECLs
406                  corresponding to base classes as well.  Thus, iterating
407                  over TYPE_FIELDs will result in correct initialization of
408                  all of the subobjects.  */
409               value = build_value_init (ftype, complain);
410
411               if (value == error_mark_node)
412                 return error_mark_node;
413
414               if (value)
415                 CONSTRUCTOR_APPEND_ELT(v, field, value);
416             }
417
418           /* Build a constructor to contain the zero- initializations.  */
419           return build_constructor (type, v);
420         }
421     }
422   else if (TREE_CODE (type) == ARRAY_TYPE)
423     {
424       VEC(constructor_elt,gc) *v = NULL;
425
426       /* Iterate over the array elements, building initializations.  */
427       tree max_index = array_type_nelts (type);
428
429       /* If we have an error_mark here, we should just return error mark
430          as we don't know the size of the array yet.  */
431       if (max_index == error_mark_node)
432         {
433           if (complain & tf_error)
434             error ("cannot value-initialize array of unknown bound %qT",
435                    type);
436           return error_mark_node;
437         }
438       gcc_assert (TREE_CODE (max_index) == INTEGER_CST);
439
440       /* A zero-sized array, which is accepted as an extension, will
441          have an upper bound of -1.  */
442       if (!tree_int_cst_equal (max_index, integer_minus_one_node))
443         {
444           constructor_elt *ce;
445
446           v = VEC_alloc (constructor_elt, gc, 1);
447           ce = VEC_quick_push (constructor_elt, v, NULL);
448
449           /* If this is a one element array, we just use a regular init.  */
450           if (tree_int_cst_equal (size_zero_node, max_index))
451             ce->index = size_zero_node;
452           else
453             ce->index = build2 (RANGE_EXPR, sizetype, size_zero_node,
454                                 max_index);
455
456           ce->value = build_value_init (TREE_TYPE (type), complain);
457
458           if (ce->value == error_mark_node)
459             return error_mark_node;
460
461           /* We shouldn't have gotten here for anything that would need
462              non-trivial initialization, and gimplify_init_ctor_preeval
463              would need to be fixed to allow it.  */
464           gcc_assert (TREE_CODE (ce->value) != TARGET_EXPR
465                       && TREE_CODE (ce->value) != AGGR_INIT_EXPR);
466         }
467
468       /* Build a constructor to contain the initializations.  */
469       return build_constructor (type, v);
470     }
471   else if (TREE_CODE (type) == FUNCTION_TYPE)
472     {
473       if (complain & tf_error)
474         error ("value-initialization of function type %qT", type);
475       return error_mark_node;
476     }
477   else if (TREE_CODE (type) == REFERENCE_TYPE)
478     {
479       if (complain & tf_error)
480         error ("value-initialization of reference type %qT", type);
481       return error_mark_node;
482     }
483
484   return build_zero_init (type, NULL_TREE, /*static_storage_p=*/false);
485 }
486
487 /* Initialize current class with INIT, a TREE_LIST of
488    arguments for a target constructor. If TREE_LIST is void_type_node,
489    an empty initializer list was given.  */
490
491 static void
492 perform_target_ctor (tree init)
493 {
494   tree decl = current_class_ref;
495   tree type = current_class_type;
496
497   finish_expr_stmt (build_aggr_init (decl, init, LOOKUP_NORMAL,
498                                      tf_warning_or_error));
499   if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
500     {
501       tree expr = build_delete (type, decl, sfk_complete_destructor,
502                                 LOOKUP_NORMAL
503                                 |LOOKUP_NONVIRTUAL
504                                 |LOOKUP_DESTRUCTOR,
505                                 0, tf_warning_or_error);
506       if (expr != error_mark_node)
507         finish_eh_cleanup (expr);
508     }
509 }
510
511 /* Initialize MEMBER, a FIELD_DECL, with INIT, a TREE_LIST of
512    arguments.  If TREE_LIST is void_type_node, an empty initializer
513    list was given; if NULL_TREE no initializer was given.  */
514
515 static void
516 perform_member_init (tree member, tree init)
517 {
518   tree decl;
519   tree type = TREE_TYPE (member);
520
521   /* Use the non-static data member initializer if there was no
522      mem-initializer for this field.  */
523   if (init == NULL_TREE)
524     {
525       if (DECL_LANG_SPECIFIC (member) && DECL_TEMPLATE_INFO (member))
526         /* Do deferred instantiation of the NSDMI.  */
527         init = (tsubst_copy_and_build
528                 (DECL_INITIAL (DECL_TI_TEMPLATE (member)),
529                  DECL_TI_ARGS (member),
530                  tf_warning_or_error, member, /*function_p=*/false,
531                  /*integral_constant_expression_p=*/false));
532       else
533         {
534           init = DECL_INITIAL (member);
535           /* Strip redundant TARGET_EXPR so we don't need to remap it, and
536              so the aggregate init code below will see a CONSTRUCTOR.  */
537           if (init && TREE_CODE (init) == TARGET_EXPR
538               && !VOID_TYPE_P (TREE_TYPE (TARGET_EXPR_INITIAL (init))))
539             init = TARGET_EXPR_INITIAL (init);
540           init = break_out_target_exprs (init);
541         }
542     }
543
544   if (init == error_mark_node)
545     return;
546
547   /* Effective C++ rule 12 requires that all data members be
548      initialized.  */
549   if (warn_ecpp && init == NULL_TREE && TREE_CODE (type) != ARRAY_TYPE)
550     warning_at (DECL_SOURCE_LOCATION (current_function_decl), OPT_Weffc__,
551                 "%qD should be initialized in the member initialization list",
552                 member);
553
554   /* Get an lvalue for the data member.  */
555   decl = build_class_member_access_expr (current_class_ref, member,
556                                          /*access_path=*/NULL_TREE,
557                                          /*preserve_reference=*/true,
558                                          tf_warning_or_error);
559   if (decl == error_mark_node)
560     return;
561
562   if (warn_init_self && init && TREE_CODE (init) == TREE_LIST
563       && TREE_CHAIN (init) == NULL_TREE)
564     {
565       tree val = TREE_VALUE (init);
566       if (TREE_CODE (val) == COMPONENT_REF && TREE_OPERAND (val, 1) == member
567           && TREE_OPERAND (val, 0) == current_class_ref)
568         warning_at (DECL_SOURCE_LOCATION (current_function_decl),
569                     OPT_Wuninitialized, "%qD is initialized with itself",
570                     member);
571     }
572
573   if (init == void_type_node)
574     {
575       /* mem() means value-initialization.  */
576       if (TREE_CODE (type) == ARRAY_TYPE)
577         {
578           init = build_vec_init_expr (type, init, tf_warning_or_error);
579           init = build2 (INIT_EXPR, type, decl, init);
580           finish_expr_stmt (init);
581         }
582       else
583         {
584           tree value = build_value_init (type, tf_warning_or_error);
585           if (value == error_mark_node)
586             return;
587           init = build2 (INIT_EXPR, type, decl, value);
588           finish_expr_stmt (init);
589         }
590     }
591   /* Deal with this here, as we will get confused if we try to call the
592      assignment op for an anonymous union.  This can happen in a
593      synthesized copy constructor.  */
594   else if (ANON_AGGR_TYPE_P (type))
595     {
596       if (init)
597         {
598           init = build2 (INIT_EXPR, type, decl, TREE_VALUE (init));
599           finish_expr_stmt (init);
600         }
601     }
602   else if (init
603            && (TREE_CODE (type) == REFERENCE_TYPE
604                /* Pre-digested NSDMI.  */
605                || (((TREE_CODE (init) == CONSTRUCTOR
606                      && TREE_TYPE (init) == type)
607                     /* { } mem-initializer.  */
608                     || (TREE_CODE (init) == TREE_LIST
609                         && TREE_CODE (TREE_VALUE (init)) == CONSTRUCTOR
610                         && CONSTRUCTOR_IS_DIRECT_INIT (TREE_VALUE (init))))
611                    && (CP_AGGREGATE_TYPE_P (type)
612                        || is_std_init_list (type)))))
613     {
614       /* With references and list-initialization, we need to deal with
615          extending temporary lifetimes.  12.2p5: "A temporary bound to a
616          reference member in a constructor’s ctor-initializer (12.6.2)
617          persists until the constructor exits."  */
618       unsigned i; tree t;
619       VEC(tree,gc) *cleanups = make_tree_vector ();
620       if (TREE_CODE (init) == TREE_LIST)
621         init = build_x_compound_expr_from_list (init, ELK_MEM_INIT,
622                                                 tf_warning_or_error);
623       if (TREE_TYPE (init) != type)
624         init = digest_init (type, init, tf_warning_or_error);
625       if (init == error_mark_node)
626         return;
627       /* A FIELD_DECL doesn't really have a suitable lifetime, but
628          make_temporary_var_for_ref_to_temp will treat it as automatic and
629          set_up_extended_ref_temp wants to use the decl in a warning.  */
630       init = extend_ref_init_temps (member, init, &cleanups);
631       if (TREE_CODE (type) == ARRAY_TYPE
632           && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (type)))
633         init = build_vec_init_expr (type, init, tf_warning_or_error);
634       init = build2 (INIT_EXPR, type, decl, init);
635       finish_expr_stmt (init);
636       FOR_EACH_VEC_ELT (tree, cleanups, i, t)
637         push_cleanup (decl, t, false);
638       release_tree_vector (cleanups);
639     }
640   else if (type_build_ctor_call (type)
641            || (init && CLASS_TYPE_P (strip_array_types (type))))
642     {
643       if (TREE_CODE (type) == ARRAY_TYPE)
644         {
645           if (init)
646             {
647               if (TREE_CHAIN (init))
648                 init = error_mark_node;
649               else
650                 init = TREE_VALUE (init);
651               if (BRACE_ENCLOSED_INITIALIZER_P (init))
652                 init = digest_init (type, init, tf_warning_or_error);
653             }
654           if (init == NULL_TREE
655               || same_type_ignoring_top_level_qualifiers_p (type,
656                                                             TREE_TYPE (init)))
657             {
658               init = build_vec_init_expr (type, init, tf_warning_or_error);
659               init = build2 (INIT_EXPR, type, decl, init);
660               finish_expr_stmt (init);
661             }
662           else
663             error ("invalid initializer for array member %q#D", member);
664         }
665       else
666         {
667           int flags = LOOKUP_NORMAL;
668           if (DECL_DEFAULTED_FN (current_function_decl))
669             flags |= LOOKUP_DEFAULTED;
670           if (CP_TYPE_CONST_P (type)
671               && init == NULL_TREE
672               && default_init_uninitialized_part (type))
673             /* TYPE_NEEDS_CONSTRUCTING can be set just because we have a
674                vtable; still give this diagnostic.  */
675             permerror (DECL_SOURCE_LOCATION (current_function_decl),
676                        "uninitialized member %qD with %<const%> type %qT",
677                        member, type);
678           finish_expr_stmt (build_aggr_init (decl, init, flags,
679                                              tf_warning_or_error));
680         }
681     }
682   else
683     {
684       if (init == NULL_TREE)
685         {
686           tree core_type;
687           /* member traversal: note it leaves init NULL */
688           if (TREE_CODE (type) == REFERENCE_TYPE)
689             permerror (DECL_SOURCE_LOCATION (current_function_decl),
690                        "uninitialized reference member %qD",
691                        member);
692           else if (CP_TYPE_CONST_P (type))
693             permerror (DECL_SOURCE_LOCATION (current_function_decl),
694                        "uninitialized member %qD with %<const%> type %qT",
695                        member, type);
696
697           core_type = strip_array_types (type);
698
699           if (CLASS_TYPE_P (core_type)
700               && (CLASSTYPE_READONLY_FIELDS_NEED_INIT (core_type)
701                   || CLASSTYPE_REF_FIELDS_NEED_INIT (core_type)))
702             diagnose_uninitialized_cst_or_ref_member (core_type,
703                                                       /*using_new=*/false,
704                                                       /*complain=*/true);
705         }
706       else if (TREE_CODE (init) == TREE_LIST)
707         /* There was an explicit member initialization.  Do some work
708            in that case.  */
709         init = build_x_compound_expr_from_list (init, ELK_MEM_INIT,
710                                                 tf_warning_or_error);
711
712       if (init)
713         finish_expr_stmt (cp_build_modify_expr (decl, INIT_EXPR, init,
714                                                 tf_warning_or_error));
715     }
716
717   if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
718     {
719       tree expr;
720
721       expr = build_class_member_access_expr (current_class_ref, member,
722                                              /*access_path=*/NULL_TREE,
723                                              /*preserve_reference=*/false,
724                                              tf_warning_or_error);
725       expr = build_delete (type, expr, sfk_complete_destructor,
726                            LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR, 0,
727                            tf_warning_or_error);
728
729       if (expr != error_mark_node)
730         finish_eh_cleanup (expr);
731     }
732 }
733
734 /* Returns a TREE_LIST containing (as the TREE_PURPOSE of each node) all
735    the FIELD_DECLs on the TYPE_FIELDS list for T, in reverse order.  */
736
737 static tree
738 build_field_list (tree t, tree list, int *uses_unions_p)
739 {
740   tree fields;
741
742   /* Note whether or not T is a union.  */
743   if (TREE_CODE (t) == UNION_TYPE)
744     *uses_unions_p = 1;
745
746   for (fields = TYPE_FIELDS (t); fields; fields = DECL_CHAIN (fields))
747     {
748       tree fieldtype;
749
750       /* Skip CONST_DECLs for enumeration constants and so forth.  */
751       if (TREE_CODE (fields) != FIELD_DECL || DECL_ARTIFICIAL (fields))
752         continue;
753
754       fieldtype = TREE_TYPE (fields);
755       /* Keep track of whether or not any fields are unions.  */
756       if (TREE_CODE (fieldtype) == UNION_TYPE)
757         *uses_unions_p = 1;
758
759       /* For an anonymous struct or union, we must recursively
760          consider the fields of the anonymous type.  They can be
761          directly initialized from the constructor.  */
762       if (ANON_AGGR_TYPE_P (fieldtype))
763         {
764           /* Add this field itself.  Synthesized copy constructors
765              initialize the entire aggregate.  */
766           list = tree_cons (fields, NULL_TREE, list);
767           /* And now add the fields in the anonymous aggregate.  */
768           list = build_field_list (fieldtype, list, uses_unions_p);
769         }
770       /* Add this field.  */
771       else if (DECL_NAME (fields))
772         list = tree_cons (fields, NULL_TREE, list);
773     }
774
775   return list;
776 }
777
778 /* The MEM_INITS are a TREE_LIST.  The TREE_PURPOSE of each list gives
779    a FIELD_DECL or BINFO in T that needs initialization.  The
780    TREE_VALUE gives the initializer, or list of initializer arguments.
781
782    Return a TREE_LIST containing all of the initializations required
783    for T, in the order in which they should be performed.  The output
784    list has the same format as the input.  */
785
786 static tree
787 sort_mem_initializers (tree t, tree mem_inits)
788 {
789   tree init;
790   tree base, binfo, base_binfo;
791   tree sorted_inits;
792   tree next_subobject;
793   VEC(tree,gc) *vbases;
794   int i;
795   int uses_unions_p = 0;
796
797   /* Build up a list of initializations.  The TREE_PURPOSE of entry
798      will be the subobject (a FIELD_DECL or BINFO) to initialize.  The
799      TREE_VALUE will be the constructor arguments, or NULL if no
800      explicit initialization was provided.  */
801   sorted_inits = NULL_TREE;
802
803   /* Process the virtual bases.  */
804   for (vbases = CLASSTYPE_VBASECLASSES (t), i = 0;
805        VEC_iterate (tree, vbases, i, base); i++)
806     sorted_inits = tree_cons (base, NULL_TREE, sorted_inits);
807
808   /* Process the direct bases.  */
809   for (binfo = TYPE_BINFO (t), i = 0;
810        BINFO_BASE_ITERATE (binfo, i, base_binfo); ++i)
811     if (!BINFO_VIRTUAL_P (base_binfo))
812       sorted_inits = tree_cons (base_binfo, NULL_TREE, sorted_inits);
813
814   /* Process the non-static data members.  */
815   sorted_inits = build_field_list (t, sorted_inits, &uses_unions_p);
816   /* Reverse the entire list of initializations, so that they are in
817      the order that they will actually be performed.  */
818   sorted_inits = nreverse (sorted_inits);
819
820   /* If the user presented the initializers in an order different from
821      that in which they will actually occur, we issue a warning.  Keep
822      track of the next subobject which can be explicitly initialized
823      without issuing a warning.  */
824   next_subobject = sorted_inits;
825
826   /* Go through the explicit initializers, filling in TREE_PURPOSE in
827      the SORTED_INITS.  */
828   for (init = mem_inits; init; init = TREE_CHAIN (init))
829     {
830       tree subobject;
831       tree subobject_init;
832
833       subobject = TREE_PURPOSE (init);
834
835       /* If the explicit initializers are in sorted order, then
836          SUBOBJECT will be NEXT_SUBOBJECT, or something following
837          it.  */
838       for (subobject_init = next_subobject;
839            subobject_init;
840            subobject_init = TREE_CHAIN (subobject_init))
841         if (TREE_PURPOSE (subobject_init) == subobject)
842           break;
843
844       /* Issue a warning if the explicit initializer order does not
845          match that which will actually occur.
846          ??? Are all these on the correct lines?  */
847       if (warn_reorder && !subobject_init)
848         {
849           if (TREE_CODE (TREE_PURPOSE (next_subobject)) == FIELD_DECL)
850             warning (OPT_Wreorder, "%q+D will be initialized after",
851                      TREE_PURPOSE (next_subobject));
852           else
853             warning (OPT_Wreorder, "base %qT will be initialized after",
854                      TREE_PURPOSE (next_subobject));
855           if (TREE_CODE (subobject) == FIELD_DECL)
856             warning (OPT_Wreorder, "  %q+#D", subobject);
857           else
858             warning (OPT_Wreorder, "  base %qT", subobject);
859           warning_at (DECL_SOURCE_LOCATION (current_function_decl),
860                       OPT_Wreorder, "  when initialized here");
861         }
862
863       /* Look again, from the beginning of the list.  */
864       if (!subobject_init)
865         {
866           subobject_init = sorted_inits;
867           while (TREE_PURPOSE (subobject_init) != subobject)
868             subobject_init = TREE_CHAIN (subobject_init);
869         }
870
871       /* It is invalid to initialize the same subobject more than
872          once.  */
873       if (TREE_VALUE (subobject_init))
874         {
875           if (TREE_CODE (subobject) == FIELD_DECL)
876             error_at (DECL_SOURCE_LOCATION (current_function_decl),
877                       "multiple initializations given for %qD",
878                       subobject);
879           else
880             error_at (DECL_SOURCE_LOCATION (current_function_decl),
881                       "multiple initializations given for base %qT",
882                       subobject);
883         }
884
885       /* Record the initialization.  */
886       TREE_VALUE (subobject_init) = TREE_VALUE (init);
887       next_subobject = subobject_init;
888     }
889
890   /* [class.base.init]
891
892      If a ctor-initializer specifies more than one mem-initializer for
893      multiple members of the same union (including members of
894      anonymous unions), the ctor-initializer is ill-formed.
895
896      Here we also splice out uninitialized union members.  */
897   if (uses_unions_p)
898     {
899       tree last_field = NULL_TREE;
900       tree *p;
901       for (p = &sorted_inits; *p; )
902         {
903           tree field;
904           tree ctx;
905           int done;
906
907           init = *p;
908
909           field = TREE_PURPOSE (init);
910
911           /* Skip base classes.  */
912           if (TREE_CODE (field) != FIELD_DECL)
913             goto next;
914
915           /* If this is an anonymous union with no explicit initializer,
916              splice it out.  */
917           if (!TREE_VALUE (init) && ANON_UNION_TYPE_P (TREE_TYPE (field)))
918             goto splice;
919
920           /* See if this field is a member of a union, or a member of a
921              structure contained in a union, etc.  */
922           for (ctx = DECL_CONTEXT (field);
923                !same_type_p (ctx, t);
924                ctx = TYPE_CONTEXT (ctx))
925             if (TREE_CODE (ctx) == UNION_TYPE)
926               break;
927           /* If this field is not a member of a union, skip it.  */
928           if (TREE_CODE (ctx) != UNION_TYPE)
929             goto next;
930
931           /* If this union member has no explicit initializer, splice
932              it out.  */
933           if (!TREE_VALUE (init))
934             goto splice;
935
936           /* It's only an error if we have two initializers for the same
937              union type.  */
938           if (!last_field)
939             {
940               last_field = field;
941               goto next;
942             }
943
944           /* See if LAST_FIELD and the field initialized by INIT are
945              members of the same union.  If so, there's a problem,
946              unless they're actually members of the same structure
947              which is itself a member of a union.  For example, given:
948
949                union { struct { int i; int j; }; };
950
951              initializing both `i' and `j' makes sense.  */
952           ctx = DECL_CONTEXT (field);
953           done = 0;
954           do
955             {
956               tree last_ctx;
957
958               last_ctx = DECL_CONTEXT (last_field);
959               while (1)
960                 {
961                   if (same_type_p (last_ctx, ctx))
962                     {
963                       if (TREE_CODE (ctx) == UNION_TYPE)
964                         error_at (DECL_SOURCE_LOCATION (current_function_decl),
965                                   "initializations for multiple members of %qT",
966                                   last_ctx);
967                       done = 1;
968                       break;
969                     }
970
971                   if (same_type_p (last_ctx, t))
972                     break;
973
974                   last_ctx = TYPE_CONTEXT (last_ctx);
975                 }
976
977               /* If we've reached the outermost class, then we're
978                  done.  */
979               if (same_type_p (ctx, t))
980                 break;
981
982               ctx = TYPE_CONTEXT (ctx);
983             }
984           while (!done);
985
986           last_field = field;
987
988         next:
989           p = &TREE_CHAIN (*p);
990           continue;
991         splice:
992           *p = TREE_CHAIN (*p);
993           continue;
994         }
995     }
996
997   return sorted_inits;
998 }
999
1000 /* Initialize all bases and members of CURRENT_CLASS_TYPE.  MEM_INITS
1001    is a TREE_LIST giving the explicit mem-initializer-list for the
1002    constructor.  The TREE_PURPOSE of each entry is a subobject (a
1003    FIELD_DECL or a BINFO) of the CURRENT_CLASS_TYPE.  The TREE_VALUE
1004    is a TREE_LIST giving the arguments to the constructor or
1005    void_type_node for an empty list of arguments.  */
1006
1007 void
1008 emit_mem_initializers (tree mem_inits)
1009 {
1010   int flags = LOOKUP_NORMAL;
1011
1012   /* We will already have issued an error message about the fact that
1013      the type is incomplete.  */
1014   if (!COMPLETE_TYPE_P (current_class_type))
1015     return;
1016
1017   if (mem_inits
1018       && TYPE_P (TREE_PURPOSE (mem_inits))
1019       && same_type_p (TREE_PURPOSE (mem_inits), current_class_type))
1020     {
1021       /* Delegating constructor. */
1022       gcc_assert (TREE_CHAIN (mem_inits) == NULL_TREE);
1023       perform_target_ctor (TREE_VALUE (mem_inits));
1024       return;
1025     }
1026
1027   if (DECL_DEFAULTED_FN (current_function_decl))
1028     flags |= LOOKUP_DEFAULTED;
1029
1030   /* Sort the mem-initializers into the order in which the
1031      initializations should be performed.  */
1032   mem_inits = sort_mem_initializers (current_class_type, mem_inits);
1033
1034   in_base_initializer = 1;
1035
1036   /* Initialize base classes.  */
1037   while (mem_inits
1038          && TREE_CODE (TREE_PURPOSE (mem_inits)) != FIELD_DECL)
1039     {
1040       tree subobject = TREE_PURPOSE (mem_inits);
1041       tree arguments = TREE_VALUE (mem_inits);
1042
1043       if (arguments == NULL_TREE)
1044         {
1045           /* If these initializations are taking place in a copy constructor,
1046              the base class should probably be explicitly initialized if there
1047              is a user-defined constructor in the base class (other than the
1048              default constructor, which will be called anyway).  */
1049           if (extra_warnings
1050               && DECL_COPY_CONSTRUCTOR_P (current_function_decl)
1051               && type_has_user_nondefault_constructor (BINFO_TYPE (subobject)))
1052             warning_at (DECL_SOURCE_LOCATION (current_function_decl),
1053                         OPT_Wextra, "base class %q#T should be explicitly "
1054                         "initialized in the copy constructor",
1055                         BINFO_TYPE (subobject));
1056         }
1057
1058       /* Initialize the base.  */
1059       if (BINFO_VIRTUAL_P (subobject))
1060         construct_virtual_base (subobject, arguments);
1061       else
1062         {
1063           tree base_addr;
1064
1065           base_addr = build_base_path (PLUS_EXPR, current_class_ptr,
1066                                        subobject, 1, tf_warning_or_error);
1067           expand_aggr_init_1 (subobject, NULL_TREE,
1068                               cp_build_indirect_ref (base_addr, RO_NULL,
1069                                                      tf_warning_or_error),
1070                               arguments,
1071                               flags,
1072                               tf_warning_or_error);
1073           expand_cleanup_for_base (subobject, NULL_TREE);
1074         }
1075
1076       mem_inits = TREE_CHAIN (mem_inits);
1077     }
1078   in_base_initializer = 0;
1079
1080   /* Initialize the vptrs.  */
1081   initialize_vtbl_ptrs (current_class_ptr);
1082
1083   /* Initialize the data members.  */
1084   while (mem_inits)
1085     {
1086       perform_member_init (TREE_PURPOSE (mem_inits),
1087                            TREE_VALUE (mem_inits));
1088       mem_inits = TREE_CHAIN (mem_inits);
1089     }
1090 }
1091
1092 /* Returns the address of the vtable (i.e., the value that should be
1093    assigned to the vptr) for BINFO.  */
1094
1095 static tree
1096 build_vtbl_address (tree binfo)
1097 {
1098   tree binfo_for = binfo;
1099   tree vtbl;
1100
1101   if (BINFO_VPTR_INDEX (binfo) && BINFO_VIRTUAL_P (binfo))
1102     /* If this is a virtual primary base, then the vtable we want to store
1103        is that for the base this is being used as the primary base of.  We
1104        can't simply skip the initialization, because we may be expanding the
1105        inits of a subobject constructor where the virtual base layout
1106        can be different.  */
1107     while (BINFO_PRIMARY_P (binfo_for))
1108       binfo_for = BINFO_INHERITANCE_CHAIN (binfo_for);
1109
1110   /* Figure out what vtable BINFO's vtable is based on, and mark it as
1111      used.  */
1112   vtbl = get_vtbl_decl_for_binfo (binfo_for);
1113   TREE_USED (vtbl) = 1;
1114
1115   /* Now compute the address to use when initializing the vptr.  */
1116   vtbl = unshare_expr (BINFO_VTABLE (binfo_for));
1117   if (TREE_CODE (vtbl) == VAR_DECL)
1118     vtbl = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (vtbl)), vtbl);
1119
1120   return vtbl;
1121 }
1122
1123 /* This code sets up the virtual function tables appropriate for
1124    the pointer DECL.  It is a one-ply initialization.
1125
1126    BINFO is the exact type that DECL is supposed to be.  In
1127    multiple inheritance, this might mean "C's A" if C : A, B.  */
1128
1129 static void
1130 expand_virtual_init (tree binfo, tree decl)
1131 {
1132   tree vtbl, vtbl_ptr;
1133   tree vtt_index;
1134
1135   /* Compute the initializer for vptr.  */
1136   vtbl = build_vtbl_address (binfo);
1137
1138   /* We may get this vptr from a VTT, if this is a subobject
1139      constructor or subobject destructor.  */
1140   vtt_index = BINFO_VPTR_INDEX (binfo);
1141   if (vtt_index)
1142     {
1143       tree vtbl2;
1144       tree vtt_parm;
1145
1146       /* Compute the value to use, when there's a VTT.  */
1147       vtt_parm = current_vtt_parm;
1148       vtbl2 = fold_build_pointer_plus (vtt_parm, vtt_index);
1149       vtbl2 = cp_build_indirect_ref (vtbl2, RO_NULL, tf_warning_or_error);
1150       vtbl2 = convert (TREE_TYPE (vtbl), vtbl2);
1151
1152       /* The actual initializer is the VTT value only in the subobject
1153          constructor.  In maybe_clone_body we'll substitute NULL for
1154          the vtt_parm in the case of the non-subobject constructor.  */
1155       vtbl = build3 (COND_EXPR,
1156                      TREE_TYPE (vtbl),
1157                      build2 (EQ_EXPR, boolean_type_node,
1158                              current_in_charge_parm, integer_zero_node),
1159                      vtbl2,
1160                      vtbl);
1161     }
1162
1163   /* Compute the location of the vtpr.  */
1164   vtbl_ptr = build_vfield_ref (cp_build_indirect_ref (decl, RO_NULL, 
1165                                                       tf_warning_or_error),
1166                                TREE_TYPE (binfo));
1167   gcc_assert (vtbl_ptr != error_mark_node);
1168
1169   /* Assign the vtable to the vptr.  */
1170   vtbl = convert_force (TREE_TYPE (vtbl_ptr), vtbl, 0);
1171   finish_expr_stmt (cp_build_modify_expr (vtbl_ptr, NOP_EXPR, vtbl,
1172                                           tf_warning_or_error));
1173 }
1174
1175 /* If an exception is thrown in a constructor, those base classes already
1176    constructed must be destroyed.  This function creates the cleanup
1177    for BINFO, which has just been constructed.  If FLAG is non-NULL,
1178    it is a DECL which is nonzero when this base needs to be
1179    destroyed.  */
1180
1181 static void
1182 expand_cleanup_for_base (tree binfo, tree flag)
1183 {
1184   tree expr;
1185
1186   if (TYPE_HAS_TRIVIAL_DESTRUCTOR (BINFO_TYPE (binfo)))
1187     return;
1188
1189   /* Call the destructor.  */
1190   expr = build_special_member_call (current_class_ref,
1191                                     base_dtor_identifier,
1192                                     NULL,
1193                                     binfo,
1194                                     LOOKUP_NORMAL | LOOKUP_NONVIRTUAL,
1195                                     tf_warning_or_error);
1196   if (flag)
1197     expr = fold_build3_loc (input_location,
1198                         COND_EXPR, void_type_node,
1199                         c_common_truthvalue_conversion (input_location, flag),
1200                         expr, integer_zero_node);
1201
1202   finish_eh_cleanup (expr);
1203 }
1204
1205 /* Construct the virtual base-class VBASE passing the ARGUMENTS to its
1206    constructor.  */
1207
1208 static void
1209 construct_virtual_base (tree vbase, tree arguments)
1210 {
1211   tree inner_if_stmt;
1212   tree exp;
1213   tree flag;
1214
1215   /* If there are virtual base classes with destructors, we need to
1216      emit cleanups to destroy them if an exception is thrown during
1217      the construction process.  These exception regions (i.e., the
1218      period during which the cleanups must occur) begin from the time
1219      the construction is complete to the end of the function.  If we
1220      create a conditional block in which to initialize the
1221      base-classes, then the cleanup region for the virtual base begins
1222      inside a block, and ends outside of that block.  This situation
1223      confuses the sjlj exception-handling code.  Therefore, we do not
1224      create a single conditional block, but one for each
1225      initialization.  (That way the cleanup regions always begin
1226      in the outer block.)  We trust the back end to figure out
1227      that the FLAG will not change across initializations, and
1228      avoid doing multiple tests.  */
1229   flag = DECL_CHAIN (DECL_ARGUMENTS (current_function_decl));
1230   inner_if_stmt = begin_if_stmt ();
1231   finish_if_stmt_cond (flag, inner_if_stmt);
1232
1233   /* Compute the location of the virtual base.  If we're
1234      constructing virtual bases, then we must be the most derived
1235      class.  Therefore, we don't have to look up the virtual base;
1236      we already know where it is.  */
1237   exp = convert_to_base_statically (current_class_ref, vbase);
1238
1239   expand_aggr_init_1 (vbase, current_class_ref, exp, arguments,
1240                       LOOKUP_COMPLAIN, tf_warning_or_error);
1241   finish_then_clause (inner_if_stmt);
1242   finish_if_stmt (inner_if_stmt);
1243
1244   expand_cleanup_for_base (vbase, flag);
1245 }
1246
1247 /* Find the context in which this FIELD can be initialized.  */
1248
1249 static tree
1250 initializing_context (tree field)
1251 {
1252   tree t = DECL_CONTEXT (field);
1253
1254   /* Anonymous union members can be initialized in the first enclosing
1255      non-anonymous union context.  */
1256   while (t && ANON_AGGR_TYPE_P (t))
1257     t = TYPE_CONTEXT (t);
1258   return t;
1259 }
1260
1261 /* Function to give error message if member initialization specification
1262    is erroneous.  FIELD is the member we decided to initialize.
1263    TYPE is the type for which the initialization is being performed.
1264    FIELD must be a member of TYPE.
1265
1266    MEMBER_NAME is the name of the member.  */
1267
1268 static int
1269 member_init_ok_or_else (tree field, tree type, tree member_name)
1270 {
1271   if (field == error_mark_node)
1272     return 0;
1273   if (!field)
1274     {
1275       error ("class %qT does not have any field named %qD", type,
1276              member_name);
1277       return 0;
1278     }
1279   if (TREE_CODE (field) == VAR_DECL)
1280     {
1281       error ("%q#D is a static data member; it can only be "
1282              "initialized at its definition",
1283              field);
1284       return 0;
1285     }
1286   if (TREE_CODE (field) != FIELD_DECL)
1287     {
1288       error ("%q#D is not a non-static data member of %qT",
1289              field, type);
1290       return 0;
1291     }
1292   if (initializing_context (field) != type)
1293     {
1294       error ("class %qT does not have any field named %qD", type,
1295                 member_name);
1296       return 0;
1297     }
1298
1299   return 1;
1300 }
1301
1302 /* NAME is a FIELD_DECL, an IDENTIFIER_NODE which names a field, or it
1303    is a _TYPE node or TYPE_DECL which names a base for that type.
1304    Check the validity of NAME, and return either the base _TYPE, base
1305    binfo, or the FIELD_DECL of the member.  If NAME is invalid, return
1306    NULL_TREE and issue a diagnostic.
1307
1308    An old style unnamed direct single base construction is permitted,
1309    where NAME is NULL.  */
1310
1311 tree
1312 expand_member_init (tree name)
1313 {
1314   tree basetype;
1315   tree field;
1316
1317   if (!current_class_ref)
1318     return NULL_TREE;
1319
1320   if (!name)
1321     {
1322       /* This is an obsolete unnamed base class initializer.  The
1323          parser will already have warned about its use.  */
1324       switch (BINFO_N_BASE_BINFOS (TYPE_BINFO (current_class_type)))
1325         {
1326         case 0:
1327           error ("unnamed initializer for %qT, which has no base classes",
1328                  current_class_type);
1329           return NULL_TREE;
1330         case 1:
1331           basetype = BINFO_TYPE
1332             (BINFO_BASE_BINFO (TYPE_BINFO (current_class_type), 0));
1333           break;
1334         default:
1335           error ("unnamed initializer for %qT, which uses multiple inheritance",
1336                  current_class_type);
1337           return NULL_TREE;
1338       }
1339     }
1340   else if (TYPE_P (name))
1341     {
1342       basetype = TYPE_MAIN_VARIANT (name);
1343       name = TYPE_NAME (name);
1344     }
1345   else if (TREE_CODE (name) == TYPE_DECL)
1346     basetype = TYPE_MAIN_VARIANT (TREE_TYPE (name));
1347   else
1348     basetype = NULL_TREE;
1349
1350   if (basetype)
1351     {
1352       tree class_binfo;
1353       tree direct_binfo;
1354       tree virtual_binfo;
1355       int i;
1356
1357       if (same_type_p (basetype, current_class_type)
1358           || current_template_parms)
1359           return basetype;
1360
1361       class_binfo = TYPE_BINFO (current_class_type);
1362       direct_binfo = NULL_TREE;
1363       virtual_binfo = NULL_TREE;
1364
1365       /* Look for a direct base.  */
1366       for (i = 0; BINFO_BASE_ITERATE (class_binfo, i, direct_binfo); ++i)
1367         if (SAME_BINFO_TYPE_P (BINFO_TYPE (direct_binfo), basetype))
1368           break;
1369
1370       /* Look for a virtual base -- unless the direct base is itself
1371          virtual.  */
1372       if (!direct_binfo || !BINFO_VIRTUAL_P (direct_binfo))
1373         virtual_binfo = binfo_for_vbase (basetype, current_class_type);
1374
1375       /* [class.base.init]
1376
1377          If a mem-initializer-id is ambiguous because it designates
1378          both a direct non-virtual base class and an inherited virtual
1379          base class, the mem-initializer is ill-formed.  */
1380       if (direct_binfo && virtual_binfo)
1381         {
1382           error ("%qD is both a direct base and an indirect virtual base",
1383                  basetype);
1384           return NULL_TREE;
1385         }
1386
1387       if (!direct_binfo && !virtual_binfo)
1388         {
1389           if (CLASSTYPE_VBASECLASSES (current_class_type))
1390             error ("type %qT is not a direct or virtual base of %qT",
1391                    basetype, current_class_type);
1392           else
1393             error ("type %qT is not a direct base of %qT",
1394                    basetype, current_class_type);
1395           return NULL_TREE;
1396         }
1397
1398       return direct_binfo ? direct_binfo : virtual_binfo;
1399     }
1400   else
1401     {
1402       if (TREE_CODE (name) == IDENTIFIER_NODE)
1403         field = lookup_field (current_class_type, name, 1, false);
1404       else
1405         field = name;
1406
1407       if (member_init_ok_or_else (field, current_class_type, name))
1408         return field;
1409     }
1410
1411   return NULL_TREE;
1412 }
1413
1414 /* This is like `expand_member_init', only it stores one aggregate
1415    value into another.
1416
1417    INIT comes in two flavors: it is either a value which
1418    is to be stored in EXP, or it is a parameter list
1419    to go to a constructor, which will operate on EXP.
1420    If INIT is not a parameter list for a constructor, then set
1421    LOOKUP_ONLYCONVERTING.
1422    If FLAGS is LOOKUP_ONLYCONVERTING then it is the = init form of
1423    the initializer, if FLAGS is 0, then it is the (init) form.
1424    If `init' is a CONSTRUCTOR, then we emit a warning message,
1425    explaining that such initializations are invalid.
1426
1427    If INIT resolves to a CALL_EXPR which happens to return
1428    something of the type we are looking for, then we know
1429    that we can safely use that call to perform the
1430    initialization.
1431
1432    The virtual function table pointer cannot be set up here, because
1433    we do not really know its type.
1434
1435    This never calls operator=().
1436
1437    When initializing, nothing is CONST.
1438
1439    A default copy constructor may have to be used to perform the
1440    initialization.
1441
1442    A constructor or a conversion operator may have to be used to
1443    perform the initialization, but not both, as it would be ambiguous.  */
1444
1445 tree
1446 build_aggr_init (tree exp, tree init, int flags, tsubst_flags_t complain)
1447 {
1448   tree stmt_expr;
1449   tree compound_stmt;
1450   int destroy_temps;
1451   tree type = TREE_TYPE (exp);
1452   int was_const = TREE_READONLY (exp);
1453   int was_volatile = TREE_THIS_VOLATILE (exp);
1454   int is_global;
1455
1456   if (init == error_mark_node)
1457     return error_mark_node;
1458
1459   TREE_READONLY (exp) = 0;
1460   TREE_THIS_VOLATILE (exp) = 0;
1461
1462   if (init && TREE_CODE (init) != TREE_LIST
1463       && !(TREE_CODE (init) == TARGET_EXPR
1464            && TARGET_EXPR_DIRECT_INIT_P (init))
1465       && !(BRACE_ENCLOSED_INITIALIZER_P (init)
1466            && CONSTRUCTOR_IS_DIRECT_INIT (init)))
1467     flags |= LOOKUP_ONLYCONVERTING;
1468
1469   if (TREE_CODE (type) == ARRAY_TYPE)
1470     {
1471       tree itype;
1472
1473       /* An array may not be initialized use the parenthesized
1474          initialization form -- unless the initializer is "()".  */
1475       if (init && TREE_CODE (init) == TREE_LIST)
1476         {
1477           if (complain & tf_error)
1478             error ("bad array initializer");
1479           return error_mark_node;
1480         }
1481       /* Must arrange to initialize each element of EXP
1482          from elements of INIT.  */
1483       itype = init ? TREE_TYPE (init) : NULL_TREE;
1484       if (cv_qualified_p (type))
1485         TREE_TYPE (exp) = cv_unqualified (type);
1486       if (itype && cv_qualified_p (itype))
1487         TREE_TYPE (init) = cv_unqualified (itype);
1488       stmt_expr = build_vec_init (exp, NULL_TREE, init,
1489                                   /*explicit_value_init_p=*/false,
1490                                   itype && same_type_p (TREE_TYPE (init),
1491                                                         TREE_TYPE (exp)),
1492                                   complain);
1493       TREE_READONLY (exp) = was_const;
1494       TREE_THIS_VOLATILE (exp) = was_volatile;
1495       TREE_TYPE (exp) = type;
1496       if (init)
1497         TREE_TYPE (init) = itype;
1498       return stmt_expr;
1499     }
1500
1501   if (TREE_CODE (exp) == VAR_DECL || TREE_CODE (exp) == PARM_DECL)
1502     /* Just know that we've seen something for this node.  */
1503     TREE_USED (exp) = 1;
1504
1505   is_global = begin_init_stmts (&stmt_expr, &compound_stmt);
1506   destroy_temps = stmts_are_full_exprs_p ();
1507   current_stmt_tree ()->stmts_are_full_exprs_p = 0;
1508   expand_aggr_init_1 (TYPE_BINFO (type), exp, exp,
1509                       init, LOOKUP_NORMAL|flags, complain);
1510   stmt_expr = finish_init_stmts (is_global, stmt_expr, compound_stmt);
1511   current_stmt_tree ()->stmts_are_full_exprs_p = destroy_temps;
1512   TREE_READONLY (exp) = was_const;
1513   TREE_THIS_VOLATILE (exp) = was_volatile;
1514
1515   return stmt_expr;
1516 }
1517
1518 static void
1519 expand_default_init (tree binfo, tree true_exp, tree exp, tree init, int flags,
1520                      tsubst_flags_t complain)
1521 {
1522   tree type = TREE_TYPE (exp);
1523   tree ctor_name;
1524
1525   /* It fails because there may not be a constructor which takes
1526      its own type as the first (or only parameter), but which does
1527      take other types via a conversion.  So, if the thing initializing
1528      the expression is a unit element of type X, first try X(X&),
1529      followed by initialization by X.  If neither of these work
1530      out, then look hard.  */
1531   tree rval;
1532   VEC(tree,gc) *parms;
1533
1534   /* If we have direct-initialization from an initializer list, pull
1535      it out of the TREE_LIST so the code below can see it.  */
1536   if (init && TREE_CODE (init) == TREE_LIST
1537       && BRACE_ENCLOSED_INITIALIZER_P (TREE_VALUE (init))
1538       && CONSTRUCTOR_IS_DIRECT_INIT (TREE_VALUE (init)))
1539     {
1540       gcc_checking_assert ((flags & LOOKUP_ONLYCONVERTING) == 0
1541                            && TREE_CHAIN (init) == NULL_TREE);
1542       init = TREE_VALUE (init);
1543     }
1544
1545   if (init && BRACE_ENCLOSED_INITIALIZER_P (init)
1546       && CP_AGGREGATE_TYPE_P (type))
1547     /* A brace-enclosed initializer for an aggregate.  In C++0x this can
1548        happen for direct-initialization, too.  */
1549     init = digest_init (type, init, complain);
1550
1551   /* A CONSTRUCTOR of the target's type is a previously digested
1552      initializer, whether that happened just above or in
1553      cp_parser_late_parsing_nsdmi.
1554
1555      A TARGET_EXPR with TARGET_EXPR_DIRECT_INIT_P or TARGET_EXPR_LIST_INIT_P
1556      set represents the whole initialization, so we shouldn't build up
1557      another ctor call.  */
1558   if (init
1559       && (TREE_CODE (init) == CONSTRUCTOR
1560           || (TREE_CODE (init) == TARGET_EXPR
1561               && (TARGET_EXPR_DIRECT_INIT_P (init)
1562                   || TARGET_EXPR_LIST_INIT_P (init))))
1563       && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (init), type))
1564     {
1565       /* Early initialization via a TARGET_EXPR only works for
1566          complete objects.  */
1567       gcc_assert (TREE_CODE (init) == CONSTRUCTOR || true_exp == exp);
1568
1569       init = build2 (INIT_EXPR, TREE_TYPE (exp), exp, init);
1570       TREE_SIDE_EFFECTS (init) = 1;
1571       finish_expr_stmt (init);
1572       return;
1573     }
1574
1575   if (init && TREE_CODE (init) != TREE_LIST
1576       && (flags & LOOKUP_ONLYCONVERTING))
1577     {
1578       /* Base subobjects should only get direct-initialization.  */
1579       gcc_assert (true_exp == exp);
1580
1581       if (flags & DIRECT_BIND)
1582         /* Do nothing.  We hit this in two cases:  Reference initialization,
1583            where we aren't initializing a real variable, so we don't want
1584            to run a new constructor; and catching an exception, where we
1585            have already built up the constructor call so we could wrap it
1586            in an exception region.  */;
1587       else
1588         init = ocp_convert (type, init, CONV_IMPLICIT|CONV_FORCE_TEMP, flags);
1589
1590       if (TREE_CODE (init) == MUST_NOT_THROW_EXPR)
1591         /* We need to protect the initialization of a catch parm with a
1592            call to terminate(), which shows up as a MUST_NOT_THROW_EXPR
1593            around the TARGET_EXPR for the copy constructor.  See
1594            initialize_handler_parm.  */
1595         {
1596           TREE_OPERAND (init, 0) = build2 (INIT_EXPR, TREE_TYPE (exp), exp,
1597                                            TREE_OPERAND (init, 0));
1598           TREE_TYPE (init) = void_type_node;
1599         }
1600       else
1601         init = build2 (INIT_EXPR, TREE_TYPE (exp), exp, init);
1602       TREE_SIDE_EFFECTS (init) = 1;
1603       finish_expr_stmt (init);
1604       return;
1605     }
1606
1607   if (init == NULL_TREE)
1608     parms = NULL;
1609   else if (TREE_CODE (init) == TREE_LIST && !TREE_TYPE (init))
1610     {
1611       parms = make_tree_vector ();
1612       for (; init != NULL_TREE; init = TREE_CHAIN (init))
1613         VEC_safe_push (tree, gc, parms, TREE_VALUE (init));
1614     }
1615   else
1616     parms = make_tree_vector_single (init);
1617
1618   if (exp == current_class_ref && current_function_decl
1619       && DECL_HAS_IN_CHARGE_PARM_P (current_function_decl))
1620     {
1621       /* Delegating constructor. */
1622       tree complete;
1623       tree base;
1624       tree elt; unsigned i;
1625
1626       /* Unshare the arguments for the second call.  */
1627       VEC(tree,gc) *parms2 = make_tree_vector ();
1628       FOR_EACH_VEC_ELT (tree, parms, i, elt)
1629         {
1630           elt = break_out_target_exprs (elt);
1631           VEC_safe_push (tree, gc, parms2, elt);
1632         }
1633       complete = build_special_member_call (exp, complete_ctor_identifier,
1634                                             &parms2, binfo, flags,
1635                                             complain);
1636       complete = fold_build_cleanup_point_expr (void_type_node, complete);
1637       release_tree_vector (parms2);
1638
1639       base = build_special_member_call (exp, base_ctor_identifier,
1640                                         &parms, binfo, flags,
1641                                         complain);
1642       base = fold_build_cleanup_point_expr (void_type_node, base);
1643       rval = build3 (COND_EXPR, void_type_node,
1644                      build2 (EQ_EXPR, boolean_type_node,
1645                              current_in_charge_parm, integer_zero_node),
1646                      base,
1647                      complete);
1648     }
1649    else
1650     {
1651       if (true_exp == exp)
1652         ctor_name = complete_ctor_identifier;
1653       else
1654         ctor_name = base_ctor_identifier;
1655       rval = build_special_member_call (exp, ctor_name, &parms, binfo, flags,
1656                                         complain);
1657   }
1658
1659   if (parms != NULL)
1660     release_tree_vector (parms);
1661
1662   if (exp == true_exp && TREE_CODE (rval) == CALL_EXPR)
1663     {
1664       tree fn = get_callee_fndecl (rval);
1665       if (fn && DECL_DECLARED_CONSTEXPR_P (fn))
1666         {
1667           tree e = maybe_constant_init (rval);
1668           if (TREE_CONSTANT (e))
1669             rval = build2 (INIT_EXPR, type, exp, e);
1670         }
1671     }
1672
1673   /* FIXME put back convert_to_void?  */
1674   if (TREE_SIDE_EFFECTS (rval))
1675     finish_expr_stmt (rval);
1676 }
1677
1678 /* This function is responsible for initializing EXP with INIT
1679    (if any).
1680
1681    BINFO is the binfo of the type for who we are performing the
1682    initialization.  For example, if W is a virtual base class of A and B,
1683    and C : A, B.
1684    If we are initializing B, then W must contain B's W vtable, whereas
1685    were we initializing C, W must contain C's W vtable.
1686
1687    TRUE_EXP is nonzero if it is the true expression being initialized.
1688    In this case, it may be EXP, or may just contain EXP.  The reason we
1689    need this is because if EXP is a base element of TRUE_EXP, we
1690    don't necessarily know by looking at EXP where its virtual
1691    baseclass fields should really be pointing.  But we do know
1692    from TRUE_EXP.  In constructors, we don't know anything about
1693    the value being initialized.
1694
1695    FLAGS is just passed to `build_new_method_call'.  See that function
1696    for its description.  */
1697
1698 static void
1699 expand_aggr_init_1 (tree binfo, tree true_exp, tree exp, tree init, int flags,
1700                     tsubst_flags_t complain)
1701 {
1702   tree type = TREE_TYPE (exp);
1703
1704   gcc_assert (init != error_mark_node && type != error_mark_node);
1705   gcc_assert (building_stmt_list_p ());
1706
1707   /* Use a function returning the desired type to initialize EXP for us.
1708      If the function is a constructor, and its first argument is
1709      NULL_TREE, know that it was meant for us--just slide exp on
1710      in and expand the constructor.  Constructors now come
1711      as TARGET_EXPRs.  */
1712
1713   if (init && TREE_CODE (exp) == VAR_DECL
1714       && COMPOUND_LITERAL_P (init))
1715     {
1716       VEC(tree,gc)* cleanups = NULL;
1717       /* If store_init_value returns NULL_TREE, the INIT has been
1718          recorded as the DECL_INITIAL for EXP.  That means there's
1719          nothing more we have to do.  */
1720       init = store_init_value (exp, init, &cleanups, flags);
1721       if (init)
1722         finish_expr_stmt (init);
1723       gcc_assert (!cleanups);
1724       return;
1725     }
1726
1727   /* If an explicit -- but empty -- initializer list was present,
1728      that's value-initialization.  */
1729   if (init == void_type_node)
1730     {
1731       /* If no user-provided ctor, we need to zero out the object.  */
1732       if (!type_has_user_provided_constructor (type))
1733         {
1734           tree field_size = NULL_TREE;
1735           if (exp != true_exp && CLASSTYPE_AS_BASE (type) != type)
1736             /* Don't clobber already initialized virtual bases.  */
1737             field_size = TYPE_SIZE (CLASSTYPE_AS_BASE (type));
1738           init = build_zero_init_1 (type, NULL_TREE, /*static_storage_p=*/false,
1739                                     field_size);
1740           init = build2 (INIT_EXPR, type, exp, init);
1741           finish_expr_stmt (init);
1742         }
1743
1744       /* If we don't need to mess with the constructor at all,
1745          then we're done.  */
1746       if (! type_build_ctor_call (type))
1747         return;
1748
1749       /* Otherwise fall through and call the constructor.  */
1750       init = NULL_TREE;
1751     }
1752
1753   /* We know that expand_default_init can handle everything we want
1754      at this point.  */
1755   expand_default_init (binfo, true_exp, exp, init, flags, complain);
1756 }
1757
1758 /* Report an error if TYPE is not a user-defined, class type.  If
1759    OR_ELSE is nonzero, give an error message.  */
1760
1761 int
1762 is_class_type (tree type, int or_else)
1763 {
1764   if (type == error_mark_node)
1765     return 0;
1766
1767   if (! CLASS_TYPE_P (type))
1768     {
1769       if (or_else)
1770         error ("%qT is not a class type", type);
1771       return 0;
1772     }
1773   return 1;
1774 }
1775
1776 tree
1777 get_type_value (tree name)
1778 {
1779   if (name == error_mark_node)
1780     return NULL_TREE;
1781
1782   if (IDENTIFIER_HAS_TYPE_VALUE (name))
1783     return IDENTIFIER_TYPE_VALUE (name);
1784   else
1785     return NULL_TREE;
1786 }
1787
1788 /* Build a reference to a member of an aggregate.  This is not a C++
1789    `&', but really something which can have its address taken, and
1790    then act as a pointer to member, for example TYPE :: FIELD can have
1791    its address taken by saying & TYPE :: FIELD.  ADDRESS_P is true if
1792    this expression is the operand of "&".
1793
1794    @@ Prints out lousy diagnostics for operator <typename>
1795    @@ fields.
1796
1797    @@ This function should be rewritten and placed in search.c.  */
1798
1799 tree
1800 build_offset_ref (tree type, tree member, bool address_p)
1801 {
1802   tree decl;
1803   tree basebinfo = NULL_TREE;
1804
1805   /* class templates can come in as TEMPLATE_DECLs here.  */
1806   if (TREE_CODE (member) == TEMPLATE_DECL)
1807     return member;
1808
1809   if (dependent_scope_p (type) || type_dependent_expression_p (member))
1810     return build_qualified_name (NULL_TREE, type, member,
1811                                   /*template_p=*/false);
1812
1813   gcc_assert (TYPE_P (type));
1814   if (! is_class_type (type, 1))
1815     return error_mark_node;
1816
1817   gcc_assert (DECL_P (member) || BASELINK_P (member));
1818   /* Callers should call mark_used before this point.  */
1819   gcc_assert (!DECL_P (member) || TREE_USED (member));
1820
1821   type = TYPE_MAIN_VARIANT (type);
1822   if (!COMPLETE_OR_OPEN_TYPE_P (complete_type (type)))
1823     {
1824       error ("incomplete type %qT does not have member %qD", type, member);
1825       return error_mark_node;
1826     }
1827
1828   /* Entities other than non-static members need no further
1829      processing.  */
1830   if (TREE_CODE (member) == TYPE_DECL)
1831     return member;
1832   if (TREE_CODE (member) == VAR_DECL || TREE_CODE (member) == CONST_DECL)
1833     return convert_from_reference (member);
1834
1835   if (TREE_CODE (member) == FIELD_DECL && DECL_C_BIT_FIELD (member))
1836     {
1837       error ("invalid pointer to bit-field %qD", member);
1838       return error_mark_node;
1839     }
1840
1841   /* Set up BASEBINFO for member lookup.  */
1842   decl = maybe_dummy_object (type, &basebinfo);
1843
1844   /* A lot of this logic is now handled in lookup_member.  */
1845   if (BASELINK_P (member))
1846     {
1847       /* Go from the TREE_BASELINK to the member function info.  */
1848       tree t = BASELINK_FUNCTIONS (member);
1849
1850       if (TREE_CODE (t) != TEMPLATE_ID_EXPR && !really_overloaded_fn (t))
1851         {
1852           /* Get rid of a potential OVERLOAD around it.  */
1853           t = OVL_CURRENT (t);
1854
1855           /* Unique functions are handled easily.  */
1856
1857           /* For non-static member of base class, we need a special rule
1858              for access checking [class.protected]:
1859
1860                If the access is to form a pointer to member, the
1861                nested-name-specifier shall name the derived class
1862                (or any class derived from that class).  */
1863           if (address_p && DECL_P (t)
1864               && DECL_NONSTATIC_MEMBER_P (t))
1865             perform_or_defer_access_check (TYPE_BINFO (type), t, t);
1866           else
1867             perform_or_defer_access_check (basebinfo, t, t);
1868
1869           if (DECL_STATIC_FUNCTION_P (t))
1870             return t;
1871           member = t;
1872         }
1873       else
1874         TREE_TYPE (member) = unknown_type_node;
1875     }
1876   else if (address_p && TREE_CODE (member) == FIELD_DECL)
1877     /* We need additional test besides the one in
1878        check_accessibility_of_qualified_id in case it is
1879        a pointer to non-static member.  */
1880     perform_or_defer_access_check (TYPE_BINFO (type), member, member);
1881
1882   if (!address_p)
1883     {
1884       /* If MEMBER is non-static, then the program has fallen afoul of
1885          [expr.prim]:
1886
1887            An id-expression that denotes a nonstatic data member or
1888            nonstatic member function of a class can only be used:
1889
1890            -- as part of a class member access (_expr.ref_) in which the
1891            object-expression refers to the member's class or a class
1892            derived from that class, or
1893
1894            -- to form a pointer to member (_expr.unary.op_), or
1895
1896            -- in the body of a nonstatic member function of that class or
1897            of a class derived from that class (_class.mfct.nonstatic_), or
1898
1899            -- in a mem-initializer for a constructor for that class or for
1900            a class derived from that class (_class.base.init_).  */
1901       if (DECL_NONSTATIC_MEMBER_FUNCTION_P (member))
1902         {
1903           /* Build a representation of the qualified name suitable
1904              for use as the operand to "&" -- even though the "&" is
1905              not actually present.  */
1906           member = build2 (OFFSET_REF, TREE_TYPE (member), decl, member);
1907           /* In Microsoft mode, treat a non-static member function as if
1908              it were a pointer-to-member.  */
1909           if (flag_ms_extensions)
1910             {
1911               PTRMEM_OK_P (member) = 1;
1912               return cp_build_addr_expr (member, tf_warning_or_error);
1913             }
1914           error ("invalid use of non-static member function %qD",
1915                  TREE_OPERAND (member, 1));
1916           return error_mark_node;
1917         }
1918       else if (TREE_CODE (member) == FIELD_DECL)
1919         {
1920           error ("invalid use of non-static data member %qD", member);
1921           return error_mark_node;
1922         }
1923       return member;
1924     }
1925
1926   member = build2 (OFFSET_REF, TREE_TYPE (member), decl, member);
1927   PTRMEM_OK_P (member) = 1;
1928   return member;
1929 }
1930
1931 /* If DECL is a scalar enumeration constant or variable with a
1932    constant initializer, return the initializer (or, its initializers,
1933    recursively); otherwise, return DECL.  If INTEGRAL_P, the
1934    initializer is only returned if DECL is an integral
1935    constant-expression.  If RETURN_AGGREGATE_CST_OK_P, it is ok to
1936    return an aggregate constant.  */
1937
1938 static tree
1939 constant_value_1 (tree decl, bool integral_p, bool return_aggregate_cst_ok_p)
1940 {
1941   while (TREE_CODE (decl) == CONST_DECL
1942          || (integral_p
1943              ? decl_constant_var_p (decl)
1944              : (TREE_CODE (decl) == VAR_DECL
1945                 && CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (decl)))))
1946     {
1947       tree init;
1948       /* If DECL is a static data member in a template
1949          specialization, we must instantiate it here.  The
1950          initializer for the static data member is not processed
1951          until needed; we need it now.  */
1952       mark_used (decl);
1953       mark_rvalue_use (decl);
1954       init = DECL_INITIAL (decl);
1955       if (init == error_mark_node)
1956         {
1957           if (DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl))
1958             /* Treat the error as a constant to avoid cascading errors on
1959                excessively recursive template instantiation (c++/9335).  */
1960             return init;
1961           else
1962             return decl;
1963         }
1964       /* Initializers in templates are generally expanded during
1965          instantiation, so before that for const int i(2)
1966          INIT is a TREE_LIST with the actual initializer as
1967          TREE_VALUE.  */
1968       if (processing_template_decl
1969           && init
1970           && TREE_CODE (init) == TREE_LIST
1971           && TREE_CHAIN (init) == NULL_TREE)
1972         init = TREE_VALUE (init);
1973       if (!init
1974           || !TREE_TYPE (init)
1975           || !TREE_CONSTANT (init)
1976           || (!integral_p && !return_aggregate_cst_ok_p
1977               /* Unless RETURN_AGGREGATE_CST_OK_P is true, do not
1978                  return an aggregate constant (of which string
1979                  literals are a special case), as we do not want
1980                  to make inadvertent copies of such entities, and
1981                  we must be sure that their addresses are the
1982                  same everywhere.  */
1983               && (TREE_CODE (init) == CONSTRUCTOR
1984                   || TREE_CODE (init) == STRING_CST)))
1985         break;
1986       decl = unshare_expr (init);
1987     }
1988   return decl;
1989 }
1990
1991 /* If DECL is a CONST_DECL, or a constant VAR_DECL initialized by
1992    constant of integral or enumeration type, then return that value.
1993    These are those variables permitted in constant expressions by
1994    [5.19/1].  */
1995
1996 tree
1997 integral_constant_value (tree decl)
1998 {
1999   return constant_value_1 (decl, /*integral_p=*/true,
2000                            /*return_aggregate_cst_ok_p=*/false);
2001 }
2002
2003 /* A more relaxed version of integral_constant_value, used by the
2004    common C/C++ code.  */
2005
2006 tree
2007 decl_constant_value (tree decl)
2008 {
2009   return constant_value_1 (decl, /*integral_p=*/processing_template_decl,
2010                            /*return_aggregate_cst_ok_p=*/true);
2011 }
2012
2013 /* A version of integral_constant_value used by the C++ front end for
2014    optimization purposes.  */
2015
2016 tree
2017 decl_constant_value_safe (tree decl)
2018 {
2019   return constant_value_1 (decl, /*integral_p=*/processing_template_decl,
2020                            /*return_aggregate_cst_ok_p=*/false);
2021 }
2022 \f
2023 /* Common subroutines of build_new and build_vec_delete.  */
2024
2025 /* Call the global __builtin_delete to delete ADDR.  */
2026
2027 static tree
2028 build_builtin_delete_call (tree addr)
2029 {
2030   mark_used (global_delete_fndecl);
2031   return build_call_n (global_delete_fndecl, 1, addr);
2032 }
2033 \f
2034 /* Build and return a NEW_EXPR.  If NELTS is non-NULL, TYPE[NELTS] is
2035    the type of the object being allocated; otherwise, it's just TYPE.
2036    INIT is the initializer, if any.  USE_GLOBAL_NEW is true if the
2037    user explicitly wrote "::operator new".  PLACEMENT, if non-NULL, is
2038    a vector of arguments to be provided as arguments to a placement
2039    new operator.  This routine performs no semantic checks; it just
2040    creates and returns a NEW_EXPR.  */
2041
2042 static tree
2043 build_raw_new_expr (VEC(tree,gc) *placement, tree type, tree nelts,
2044                     VEC(tree,gc) *init, int use_global_new)
2045 {
2046   tree init_list;
2047   tree new_expr;
2048
2049   /* If INIT is NULL, the we want to store NULL_TREE in the NEW_EXPR.
2050      If INIT is not NULL, then we want to store VOID_ZERO_NODE.  This
2051      permits us to distinguish the case of a missing initializer "new
2052      int" from an empty initializer "new int()".  */
2053   if (init == NULL)
2054     init_list = NULL_TREE;
2055   else if (VEC_empty (tree, init))
2056     init_list = void_zero_node;
2057   else
2058     init_list = build_tree_list_vec (init);
2059
2060   new_expr = build4 (NEW_EXPR, build_pointer_type (type),
2061                      build_tree_list_vec (placement), type, nelts,
2062                      init_list);
2063   NEW_EXPR_USE_GLOBAL (new_expr) = use_global_new;
2064   TREE_SIDE_EFFECTS (new_expr) = 1;
2065
2066   return new_expr;
2067 }
2068
2069 /* Diagnose uninitialized const members or reference members of type
2070    TYPE. USING_NEW is used to disambiguate the diagnostic between a
2071    new expression without a new-initializer and a declaration. Returns
2072    the error count. */
2073
2074 static int
2075 diagnose_uninitialized_cst_or_ref_member_1 (tree type, tree origin,
2076                                             bool using_new, bool complain)
2077 {
2078   tree field;
2079   int error_count = 0;
2080
2081   if (type_has_user_provided_constructor (type))
2082     return 0;
2083
2084   for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
2085     {
2086       tree field_type;
2087
2088       if (TREE_CODE (field) != FIELD_DECL)
2089         continue;
2090
2091       field_type = strip_array_types (TREE_TYPE (field));
2092
2093       if (type_has_user_provided_constructor (field_type))
2094         continue;
2095
2096       if (TREE_CODE (field_type) == REFERENCE_TYPE)
2097         {
2098           ++ error_count;
2099           if (complain)
2100             {
2101               if (using_new)
2102                 error ("uninitialized reference member in %q#T "
2103                        "using %<new%> without new-initializer", origin);
2104               else
2105                 error ("uninitialized reference member in %q#T", origin);
2106               inform (DECL_SOURCE_LOCATION (field),
2107                       "%qD should be initialized", field);
2108             }
2109         }
2110
2111       if (CP_TYPE_CONST_P (field_type))
2112         {
2113           ++ error_count;
2114           if (complain)
2115             {
2116               if (using_new)
2117                 error ("uninitialized const member in %q#T "
2118                        "using %<new%> without new-initializer", origin);
2119               else
2120                 error ("uninitialized const member in %q#T", origin);
2121               inform (DECL_SOURCE_LOCATION (field),
2122                       "%qD should be initialized", field);
2123             }
2124         }
2125
2126       if (CLASS_TYPE_P (field_type))
2127         error_count
2128           += diagnose_uninitialized_cst_or_ref_member_1 (field_type, origin,
2129                                                          using_new, complain);
2130     }
2131   return error_count;
2132 }
2133
2134 int
2135 diagnose_uninitialized_cst_or_ref_member (tree type, bool using_new, bool complain)
2136 {
2137   return diagnose_uninitialized_cst_or_ref_member_1 (type, type, using_new, complain);
2138 }
2139
2140 /* Generate code for a new-expression, including calling the "operator
2141    new" function, initializing the object, and, if an exception occurs
2142    during construction, cleaning up.  The arguments are as for
2143    build_raw_new_expr.  This may change PLACEMENT and INIT.  */
2144
2145 static tree
2146 build_new_1 (VEC(tree,gc) **placement, tree type, tree nelts,
2147              VEC(tree,gc) **init, bool globally_qualified_p,
2148              tsubst_flags_t complain)
2149 {
2150   tree size, rval;
2151   /* True iff this is a call to "operator new[]" instead of just
2152      "operator new".  */
2153   bool array_p = false;
2154   /* If ARRAY_P is true, the element type of the array.  This is never
2155      an ARRAY_TYPE; for something like "new int[3][4]", the
2156      ELT_TYPE is "int".  If ARRAY_P is false, this is the same type as
2157      TYPE.  */
2158   tree elt_type;
2159   /* The type of the new-expression.  (This type is always a pointer
2160      type.)  */
2161   tree pointer_type;
2162   tree non_const_pointer_type;
2163   tree outer_nelts = NULL_TREE;
2164   tree alloc_call, alloc_expr;
2165   /* The address returned by the call to "operator new".  This node is
2166      a VAR_DECL and is therefore reusable.  */
2167   tree alloc_node;
2168   tree alloc_fn;
2169   tree cookie_expr, init_expr;
2170   int nothrow, check_new;
2171   int use_java_new = 0;
2172   /* If non-NULL, the number of extra bytes to allocate at the
2173      beginning of the storage allocated for an array-new expression in
2174      order to store the number of elements.  */
2175   tree cookie_size = NULL_TREE;
2176   tree placement_first;
2177   tree placement_expr = NULL_TREE;
2178   /* True if the function we are calling is a placement allocation
2179      function.  */
2180   bool placement_allocation_fn_p;
2181   /* True if the storage must be initialized, either by a constructor
2182      or due to an explicit new-initializer.  */
2183   bool is_initialized;
2184   /* The address of the thing allocated, not including any cookie.  In
2185      particular, if an array cookie is in use, DATA_ADDR is the
2186      address of the first array element.  This node is a VAR_DECL, and
2187      is therefore reusable.  */
2188   tree data_addr;
2189   tree init_preeval_expr = NULL_TREE;
2190
2191   if (nelts)
2192     {
2193       outer_nelts = nelts;
2194       array_p = true;
2195     }
2196   else if (TREE_CODE (type) == ARRAY_TYPE)
2197     {
2198       array_p = true;
2199       nelts = array_type_nelts_top (type);
2200       outer_nelts = nelts;
2201       type = TREE_TYPE (type);
2202     }
2203
2204   /* If our base type is an array, then make sure we know how many elements
2205      it has.  */
2206   for (elt_type = type;
2207        TREE_CODE (elt_type) == ARRAY_TYPE;
2208        elt_type = TREE_TYPE (elt_type))
2209     nelts = cp_build_binary_op (input_location,
2210                                 MULT_EXPR, nelts,
2211                                 array_type_nelts_top (elt_type),
2212                                 complain);
2213
2214   if (TREE_CODE (elt_type) == VOID_TYPE)
2215     {
2216       if (complain & tf_error)
2217         error ("invalid type %<void%> for new");
2218       return error_mark_node;
2219     }
2220
2221   if (abstract_virtuals_error_sfinae (NULL_TREE, elt_type, complain))
2222     return error_mark_node;
2223
2224   is_initialized = (type_build_ctor_call (elt_type) || *init != NULL);
2225
2226   if (*init == NULL)
2227     {
2228       bool maybe_uninitialized_error = false;
2229       /* A program that calls for default-initialization [...] of an
2230          entity of reference type is ill-formed. */
2231       if (CLASSTYPE_REF_FIELDS_NEED_INIT (elt_type))
2232         maybe_uninitialized_error = true;
2233
2234       /* A new-expression that creates an object of type T initializes
2235          that object as follows:
2236       - If the new-initializer is omitted:
2237         -- If T is a (possibly cv-qualified) non-POD class type
2238            (or array thereof), the object is default-initialized (8.5).
2239            [...]
2240         -- Otherwise, the object created has indeterminate
2241            value. If T is a const-qualified type, or a (possibly
2242            cv-qualified) POD class type (or array thereof)
2243            containing (directly or indirectly) a member of
2244            const-qualified type, the program is ill-formed; */
2245
2246       if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (elt_type))
2247         maybe_uninitialized_error = true;
2248
2249       if (maybe_uninitialized_error
2250           && diagnose_uninitialized_cst_or_ref_member (elt_type,
2251                                                        /*using_new=*/true,
2252                                                        complain & tf_error))
2253         return error_mark_node;
2254     }
2255
2256   if (CP_TYPE_CONST_P (elt_type) && *init == NULL
2257       && default_init_uninitialized_part (elt_type))
2258     {
2259       if (complain & tf_error)
2260         error ("uninitialized const in %<new%> of %q#T", elt_type);
2261       return error_mark_node;
2262     }
2263
2264   size = size_in_bytes (elt_type);
2265   if (array_p)
2266     size = size_binop (MULT_EXPR, size, convert (sizetype, nelts));
2267
2268   alloc_fn = NULL_TREE;
2269
2270   /* If PLACEMENT is a single simple pointer type not passed by
2271      reference, prepare to capture it in a temporary variable.  Do
2272      this now, since PLACEMENT will change in the calls below.  */
2273   placement_first = NULL_TREE;
2274   if (VEC_length (tree, *placement) == 1
2275       && (TREE_CODE (TREE_TYPE (VEC_index (tree, *placement, 0)))
2276           == POINTER_TYPE))
2277     placement_first = VEC_index (tree, *placement, 0);
2278
2279   /* Allocate the object.  */
2280   if (VEC_empty (tree, *placement) && TYPE_FOR_JAVA (elt_type))
2281     {
2282       tree class_addr;
2283       tree class_decl = build_java_class_ref (elt_type);
2284       static const char alloc_name[] = "_Jv_AllocObject";
2285
2286       if (class_decl == error_mark_node)
2287         return error_mark_node;
2288
2289       use_java_new = 1;
2290       if (!get_global_value_if_present (get_identifier (alloc_name),
2291                                         &alloc_fn))
2292         {
2293           if (complain & tf_error)
2294             error ("call to Java constructor with %qs undefined", alloc_name);
2295           return error_mark_node;
2296         }
2297       else if (really_overloaded_fn (alloc_fn))
2298         {
2299           if (complain & tf_error)
2300             error ("%qD should never be overloaded", alloc_fn);
2301           return error_mark_node;
2302         }
2303       alloc_fn = OVL_CURRENT (alloc_fn);
2304       class_addr = build1 (ADDR_EXPR, jclass_node, class_decl);
2305       alloc_call = cp_build_function_call_nary (alloc_fn, complain,
2306                                                 class_addr, NULL_TREE);
2307     }
2308   else if (TYPE_FOR_JAVA (elt_type) && MAYBE_CLASS_TYPE_P (elt_type))
2309     {
2310       error ("Java class %q#T object allocated using placement new", elt_type);
2311       return error_mark_node;
2312     }
2313   else
2314     {
2315       tree fnname;
2316       tree fns;
2317
2318       fnname = ansi_opname (array_p ? VEC_NEW_EXPR : NEW_EXPR);
2319
2320       if (!globally_qualified_p
2321           && CLASS_TYPE_P (elt_type)
2322           && (array_p
2323               ? TYPE_HAS_ARRAY_NEW_OPERATOR (elt_type)
2324               : TYPE_HAS_NEW_OPERATOR (elt_type)))
2325         {
2326           /* Use a class-specific operator new.  */
2327           /* If a cookie is required, add some extra space.  */
2328           if (array_p && TYPE_VEC_NEW_USES_COOKIE (elt_type))
2329             {
2330               cookie_size = targetm.cxx.get_cookie_size (elt_type);
2331               size = size_binop (PLUS_EXPR, size, cookie_size);
2332             }
2333           /* Create the argument list.  */
2334           VEC_safe_insert (tree, gc, *placement, 0, size);
2335           /* Do name-lookup to find the appropriate operator.  */
2336           fns = lookup_fnfields (elt_type, fnname, /*protect=*/2);
2337           if (fns == NULL_TREE)
2338             {
2339               if (complain & tf_error)
2340                 error ("no suitable %qD found in class %qT", fnname, elt_type);
2341               return error_mark_node;
2342             }
2343           if (TREE_CODE (fns) == TREE_LIST)
2344             {
2345               if (complain & tf_error)
2346                 {
2347                   error ("request for member %qD is ambiguous", fnname);
2348                   print_candidates (fns);
2349                 }
2350               return error_mark_node;
2351             }
2352           alloc_call = build_new_method_call (build_dummy_object (elt_type),
2353                                               fns, placement,
2354                                               /*conversion_path=*/NULL_TREE,
2355                                               LOOKUP_NORMAL,
2356                                               &alloc_fn,
2357                                               complain);
2358         }
2359       else
2360         {
2361           /* Use a global operator new.  */
2362           /* See if a cookie might be required.  */
2363           if (array_p && TYPE_VEC_NEW_USES_COOKIE (elt_type))
2364             cookie_size = targetm.cxx.get_cookie_size (elt_type);
2365           else
2366             cookie_size = NULL_TREE;
2367
2368           alloc_call = build_operator_new_call (fnname, placement,
2369                                                 &size, &cookie_size,
2370                                                 &alloc_fn);
2371         }
2372     }
2373
2374   if (alloc_call == error_mark_node)
2375     return error_mark_node;
2376
2377   gcc_assert (alloc_fn != NULL_TREE);
2378
2379   /* If we found a simple case of PLACEMENT_EXPR above, then copy it
2380      into a temporary variable.  */
2381   if (!processing_template_decl
2382       && placement_first != NULL_TREE
2383       && TREE_CODE (alloc_call) == CALL_EXPR
2384       && call_expr_nargs (alloc_call) == 2
2385       && TREE_CODE (TREE_TYPE (CALL_EXPR_ARG (alloc_call, 0))) == INTEGER_TYPE
2386       && TREE_CODE (TREE_TYPE (CALL_EXPR_ARG (alloc_call, 1))) == POINTER_TYPE)
2387     {
2388       tree placement_arg = CALL_EXPR_ARG (alloc_call, 1);
2389
2390       if (INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (TREE_TYPE (placement_arg)))
2391           || VOID_TYPE_P (TREE_TYPE (TREE_TYPE (placement_arg))))
2392         {
2393           placement_expr = get_target_expr (placement_first);
2394           CALL_EXPR_ARG (alloc_call, 1)
2395             = convert (TREE_TYPE (placement_arg), placement_expr);
2396         }
2397     }
2398
2399   /* In the simple case, we can stop now.  */
2400   pointer_type = build_pointer_type (type);
2401   if (!cookie_size && !is_initialized)
2402     return build_nop (pointer_type, alloc_call);
2403
2404   /* Store the result of the allocation call in a variable so that we can
2405      use it more than once.  */
2406   alloc_expr = get_target_expr (alloc_call);
2407   alloc_node = TARGET_EXPR_SLOT (alloc_expr);
2408
2409   /* Strip any COMPOUND_EXPRs from ALLOC_CALL.  */
2410   while (TREE_CODE (alloc_call) == COMPOUND_EXPR)
2411     alloc_call = TREE_OPERAND (alloc_call, 1);
2412
2413   /* Now, check to see if this function is actually a placement
2414      allocation function.  This can happen even when PLACEMENT is NULL
2415      because we might have something like:
2416
2417        struct S { void* operator new (size_t, int i = 0); };
2418
2419      A call to `new S' will get this allocation function, even though
2420      there is no explicit placement argument.  If there is more than
2421      one argument, or there are variable arguments, then this is a
2422      placement allocation function.  */
2423   placement_allocation_fn_p
2424     = (type_num_arguments (TREE_TYPE (alloc_fn)) > 1
2425        || varargs_function_p (alloc_fn));
2426
2427   /* Preevaluate the placement args so that we don't reevaluate them for a
2428      placement delete.  */
2429   if (placement_allocation_fn_p)
2430     {
2431       tree inits;
2432       stabilize_call (alloc_call, &inits);
2433       if (inits)
2434         alloc_expr = build2 (COMPOUND_EXPR, TREE_TYPE (alloc_expr), inits,
2435                              alloc_expr);
2436     }
2437
2438   /*        unless an allocation function is declared with an empty  excep-
2439      tion-specification  (_except.spec_),  throw(), it indicates failure to
2440      allocate storage by throwing a bad_alloc exception  (clause  _except_,
2441      _lib.bad.alloc_); it returns a non-null pointer otherwise If the allo-
2442      cation function is declared  with  an  empty  exception-specification,
2443      throw(), it returns null to indicate failure to allocate storage and a
2444      non-null pointer otherwise.
2445
2446      So check for a null exception spec on the op new we just called.  */
2447
2448   nothrow = TYPE_NOTHROW_P (TREE_TYPE (alloc_fn));
2449   check_new = (flag_check_new || nothrow) && ! use_java_new;
2450
2451   if (cookie_size)
2452     {
2453       tree cookie;
2454       tree cookie_ptr;
2455       tree size_ptr_type;
2456
2457       /* Adjust so we're pointing to the start of the object.  */
2458       data_addr = fold_build_pointer_plus (alloc_node, cookie_size);
2459
2460       /* Store the number of bytes allocated so that we can know how
2461          many elements to destroy later.  We use the last sizeof
2462          (size_t) bytes to store the number of elements.  */
2463       cookie_ptr = size_binop (MINUS_EXPR, cookie_size, size_in_bytes (sizetype));
2464       cookie_ptr = fold_build_pointer_plus_loc (input_location,
2465                                                 alloc_node, cookie_ptr);
2466       size_ptr_type = build_pointer_type (sizetype);
2467       cookie_ptr = fold_convert (size_ptr_type, cookie_ptr);
2468       cookie = cp_build_indirect_ref (cookie_ptr, RO_NULL, complain);
2469
2470       cookie_expr = build2 (MODIFY_EXPR, sizetype, cookie, nelts);
2471
2472       if (targetm.cxx.cookie_has_size ())
2473         {
2474           /* Also store the element size.  */
2475           cookie_ptr = fold_build_pointer_plus (cookie_ptr,
2476                                fold_build1_loc (input_location,
2477                                                 NEGATE_EXPR, sizetype,
2478                                                 size_in_bytes (sizetype)));
2479
2480           cookie = cp_build_indirect_ref (cookie_ptr, RO_NULL, complain);
2481           cookie = build2 (MODIFY_EXPR, sizetype, cookie,
2482                            size_in_bytes (elt_type));
2483           cookie_expr = build2 (COMPOUND_EXPR, TREE_TYPE (cookie_expr),
2484                                 cookie, cookie_expr);
2485         }
2486     }
2487   else
2488     {
2489       cookie_expr = NULL_TREE;
2490       data_addr = alloc_node;
2491     }
2492
2493   /* Now use a pointer to the type we've actually allocated.  */
2494
2495   /* But we want to operate on a non-const version to start with,
2496      since we'll be modifying the elements.  */
2497   non_const_pointer_type = build_pointer_type
2498     (cp_build_qualified_type (type, cp_type_quals (type) & ~TYPE_QUAL_CONST));
2499
2500   data_addr = fold_convert (non_const_pointer_type, data_addr);
2501   /* Any further uses of alloc_node will want this type, too.  */
2502   alloc_node = fold_convert (non_const_pointer_type, alloc_node);
2503
2504   /* Now initialize the allocated object.  Note that we preevaluate the
2505      initialization expression, apart from the actual constructor call or
2506      assignment--we do this because we want to delay the allocation as long
2507      as possible in order to minimize the size of the exception region for
2508      placement delete.  */
2509   if (is_initialized)
2510     {
2511       bool stable;
2512       bool explicit_value_init_p = false;
2513
2514       if (*init != NULL && VEC_empty (tree, *init))
2515         {
2516           *init = NULL;
2517           explicit_value_init_p = true;
2518         }
2519
2520       if (processing_template_decl && explicit_value_init_p)
2521         {
2522           /* build_value_init doesn't work in templates, and we don't need
2523              the initializer anyway since we're going to throw it away and
2524              rebuild it at instantiation time, so just build up a single
2525              constructor call to get any appropriate diagnostics.  */
2526           init_expr = cp_build_indirect_ref (data_addr, RO_NULL, complain);
2527           if (type_build_ctor_call (elt_type))
2528             init_expr = build_special_member_call (init_expr,
2529                                                    complete_ctor_identifier,
2530                                                    init, elt_type,
2531                                                    LOOKUP_NORMAL,
2532                                                    complain);
2533           stable = stabilize_init (init_expr, &init_preeval_expr);
2534         }
2535       else if (array_p)
2536         {
2537           tree vecinit = NULL_TREE;
2538           if (*init && VEC_length (tree, *init) == 1
2539               && BRACE_ENCLOSED_INITIALIZER_P (VEC_index (tree, *init, 0))
2540               && CONSTRUCTOR_IS_DIRECT_INIT (VEC_index (tree, *init, 0)))
2541             {
2542               vecinit = VEC_index (tree, *init, 0);
2543               if (CONSTRUCTOR_NELTS (vecinit) == 0)
2544                 /* List-value-initialization, leave it alone.  */;
2545               else
2546                 {
2547                   tree arraytype, domain;
2548                   if (TREE_CONSTANT (nelts))
2549                     domain = compute_array_index_type (NULL_TREE, nelts,
2550                                                        complain);
2551                   else
2552                     {
2553                       domain = NULL_TREE;
2554                       if (CONSTRUCTOR_NELTS (vecinit) > 0)
2555                         warning (0, "non-constant array size in new, unable "
2556                                  "to verify length of initializer-list");
2557                     }
2558                   arraytype = build_cplus_array_type (type, domain);
2559                   vecinit = digest_init (arraytype, vecinit, complain);
2560                 }
2561             }
2562           else if (*init)
2563             {
2564               if (complain & tf_error)
2565                 permerror (input_location,
2566                            "parenthesized initializer in array new");
2567               else
2568                 return error_mark_node;
2569               vecinit = build_tree_list_vec (*init);
2570             }
2571           init_expr
2572             = build_vec_init (data_addr,
2573                               cp_build_binary_op (input_location,
2574                                                   MINUS_EXPR, outer_nelts,
2575                                                   integer_one_node,
2576                                                   complain),
2577                               vecinit,
2578                               explicit_value_init_p,
2579                               /*from_array=*/0,
2580                               complain);
2581
2582           /* An array initialization is stable because the initialization
2583              of each element is a full-expression, so the temporaries don't
2584              leak out.  */
2585           stable = true;
2586         }
2587       else
2588         {
2589           init_expr = cp_build_indirect_ref (data_addr, RO_NULL, complain);
2590
2591           if (type_build_ctor_call (type) && !explicit_value_init_p)
2592             {
2593               init_expr = build_special_member_call (init_expr,
2594                                                      complete_ctor_identifier,
2595                                                      init, elt_type,
2596                                                      LOOKUP_NORMAL,
2597                                                      complain);
2598             }
2599           else if (explicit_value_init_p)
2600             {
2601               /* Something like `new int()'.  */
2602               tree val = build_value_init (type, complain);
2603               if (val == error_mark_node)
2604                 return error_mark_node;
2605               init_expr = build2 (INIT_EXPR, type, init_expr, val);
2606             }
2607           else
2608             {
2609               tree ie;
2610
2611               /* We are processing something like `new int (10)', which
2612                  means allocate an int, and initialize it with 10.  */
2613
2614               ie = build_x_compound_expr_from_vec (*init, "new initializer");
2615               init_expr = cp_build_modify_expr (init_expr, INIT_EXPR, ie,
2616                                                 complain);
2617             }
2618           stable = stabilize_init (init_expr, &init_preeval_expr);
2619         }
2620
2621       if (init_expr == error_mark_node)
2622         return error_mark_node;
2623
2624       /* If any part of the object initialization terminates by throwing an
2625          exception and a suitable deallocation function can be found, the
2626          deallocation function is called to free the memory in which the
2627          object was being constructed, after which the exception continues
2628          to propagate in the context of the new-expression. If no
2629          unambiguous matching deallocation function can be found,
2630          propagating the exception does not cause the object's memory to be
2631          freed.  */
2632       if (flag_exceptions && ! use_java_new)
2633         {
2634           enum tree_code dcode = array_p ? VEC_DELETE_EXPR : DELETE_EXPR;
2635           tree cleanup;
2636
2637           /* The Standard is unclear here, but the right thing to do
2638              is to use the same method for finding deallocation
2639              functions that we use for finding allocation functions.  */
2640           cleanup = (build_op_delete_call
2641                      (dcode,
2642                       alloc_node,
2643                       size,
2644                       globally_qualified_p,
2645                       placement_allocation_fn_p ? alloc_call : NULL_TREE,
2646                       alloc_fn));
2647
2648           if (!cleanup)
2649             /* We're done.  */;
2650           else if (stable)
2651             /* This is much simpler if we were able to preevaluate all of
2652                the arguments to the constructor call.  */
2653             {
2654               /* CLEANUP is compiler-generated, so no diagnostics.  */
2655               TREE_NO_WARNING (cleanup) = true;
2656               init_expr = build2 (TRY_CATCH_EXPR, void_type_node,
2657                                   init_expr, cleanup);
2658               /* Likewise, this try-catch is compiler-generated.  */
2659               TREE_NO_WARNING (init_expr) = true;
2660             }
2661           else
2662             /* Ack!  First we allocate the memory.  Then we set our sentry
2663                variable to true, and expand a cleanup that deletes the
2664                memory if sentry is true.  Then we run the constructor, and
2665                finally clear the sentry.
2666
2667                We need to do this because we allocate the space first, so
2668                if there are any temporaries with cleanups in the
2669                constructor args and we weren't able to preevaluate them, we
2670                need this EH region to extend until end of full-expression
2671                to preserve nesting.  */
2672             {
2673               tree end, sentry, begin;
2674
2675               begin = get_target_expr (boolean_true_node);
2676               CLEANUP_EH_ONLY (begin) = 1;
2677
2678               sentry = TARGET_EXPR_SLOT (begin);
2679
2680               /* CLEANUP is compiler-generated, so no diagnostics.  */
2681               TREE_NO_WARNING (cleanup) = true;
2682
2683               TARGET_EXPR_CLEANUP (begin)
2684                 = build3 (COND_EXPR, void_type_node, sentry,
2685                           cleanup, void_zero_node);
2686
2687               end = build2 (MODIFY_EXPR, TREE_TYPE (sentry),
2688                             sentry, boolean_false_node);
2689
2690               init_expr
2691                 = build2 (COMPOUND_EXPR, void_type_node, begin,
2692                           build2 (COMPOUND_EXPR, void_type_node, init_expr,
2693                                   end));
2694               /* Likewise, this is compiler-generated.  */
2695               TREE_NO_WARNING (init_expr) = true;
2696             }
2697         }
2698     }
2699   else
2700     init_expr = NULL_TREE;
2701
2702   /* Now build up the return value in reverse order.  */
2703
2704   rval = data_addr;
2705
2706   if (init_expr)
2707     rval = build2 (COMPOUND_EXPR, TREE_TYPE (rval), init_expr, rval);
2708   if (cookie_expr)
2709     rval = build2 (COMPOUND_EXPR, TREE_TYPE (rval), cookie_expr, rval);
2710
2711   if (rval == data_addr)
2712     /* If we don't have an initializer or a cookie, strip the TARGET_EXPR
2713        and return the call (which doesn't need to be adjusted).  */
2714     rval = TARGET_EXPR_INITIAL (alloc_expr);
2715   else
2716     {
2717       if (check_new)
2718         {
2719           tree ifexp = cp_build_binary_op (input_location,
2720                                            NE_EXPR, alloc_node,
2721                                            nullptr_node,
2722                                            complain);
2723           rval = build_conditional_expr (ifexp, rval, alloc_node, 
2724                                          complain);
2725         }
2726
2727       /* Perform the allocation before anything else, so that ALLOC_NODE
2728          has been initialized before we start using it.  */
2729       rval = build2 (COMPOUND_EXPR, TREE_TYPE (rval), alloc_expr, rval);
2730     }
2731
2732   if (init_preeval_expr)
2733     rval = build2 (COMPOUND_EXPR, TREE_TYPE (rval), init_preeval_expr, rval);
2734
2735   /* A new-expression is never an lvalue.  */
2736   gcc_assert (!lvalue_p (rval));
2737
2738   return convert (pointer_type, rval);
2739 }
2740
2741 /* Generate a representation for a C++ "new" expression.  *PLACEMENT
2742    is a vector of placement-new arguments (or NULL if none).  If NELTS
2743    is NULL, TYPE is the type of the storage to be allocated.  If NELTS
2744    is not NULL, then this is an array-new allocation; TYPE is the type
2745    of the elements in the array and NELTS is the number of elements in
2746    the array.  *INIT, if non-NULL, is the initializer for the new
2747    object, or an empty vector to indicate an initializer of "()".  If
2748    USE_GLOBAL_NEW is true, then the user explicitly wrote "::new"
2749    rather than just "new".  This may change PLACEMENT and INIT.  */
2750
2751 tree
2752 build_new (VEC(tree,gc) **placement, tree type, tree nelts,
2753            VEC(tree,gc) **init, int use_global_new, tsubst_flags_t complain)
2754 {
2755   tree rval;
2756   VEC(tree,gc) *orig_placement = NULL;
2757   tree orig_nelts = NULL_TREE;
2758   VEC(tree,gc) *orig_init = NULL;
2759
2760   if (type == error_mark_node)
2761     return error_mark_node;
2762
2763   if (nelts == NULL_TREE && VEC_length (tree, *init) == 1)
2764     {
2765       tree auto_node = type_uses_auto (type);
2766       if (auto_node)
2767         {
2768           tree d_init = VEC_index (tree, *init, 0);
2769           d_init = resolve_nondeduced_context (d_init);
2770           type = do_auto_deduction (type, d_init, auto_node);
2771         }
2772     }
2773
2774   if (processing_template_decl)
2775     {
2776       if (dependent_type_p (type)
2777           || any_type_dependent_arguments_p (*placement)
2778           || (nelts && type_dependent_expression_p (nelts))
2779           || any_type_dependent_arguments_p (*init))
2780         return build_raw_new_expr (*placement, type, nelts, *init,
2781                                    use_global_new);
2782
2783       orig_placement = make_tree_vector_copy (*placement);
2784       orig_nelts = nelts;
2785       orig_init = make_tree_vector_copy (*init);
2786
2787       make_args_non_dependent (*placement);
2788       if (nelts)
2789         nelts = build_non_dependent_expr (nelts);
2790       make_args_non_dependent (*init);
2791     }
2792
2793   if (nelts)
2794     {
2795       if (!build_expr_type_conversion (WANT_INT | WANT_ENUM, nelts, false))
2796         {
2797           if (complain & tf_error)
2798             permerror (input_location, "size in array new must have integral type");
2799           else
2800             return error_mark_node;
2801         }
2802       nelts = mark_rvalue_use (nelts);
2803       nelts = cp_save_expr (cp_convert (sizetype, nelts));
2804     }
2805
2806   /* ``A reference cannot be created by the new operator.  A reference
2807      is not an object (8.2.2, 8.4.3), so a pointer to it could not be
2808      returned by new.'' ARM 5.3.3 */
2809   if (TREE_CODE (type) == REFERENCE_TYPE)
2810     {
2811       if (complain & tf_error)
2812         error ("new cannot be applied to a reference type");
2813       else
2814         return error_mark_node;
2815       type = TREE_TYPE (type);
2816     }
2817
2818   if (TREE_CODE (type) == FUNCTION_TYPE)
2819     {
2820       if (complain & tf_error)
2821         error ("new cannot be applied to a function type");
2822       return error_mark_node;
2823     }
2824
2825   /* The type allocated must be complete.  If the new-type-id was
2826      "T[N]" then we are just checking that "T" is complete here, but
2827      that is equivalent, since the value of "N" doesn't matter.  */
2828   if (!complete_type_or_maybe_complain (type, NULL_TREE, complain))
2829     return error_mark_node;
2830
2831   rval = build_new_1 (placement, type, nelts, init, use_global_new, complain);
2832   if (rval == error_mark_node)
2833     return error_mark_node;
2834
2835   if (processing_template_decl)
2836     {
2837       tree ret = build_raw_new_expr (orig_placement, type, orig_nelts,
2838                                      orig_init, use_global_new);
2839       release_tree_vector (orig_placement);
2840       release_tree_vector (orig_init);
2841       return ret;
2842     }
2843
2844   /* Wrap it in a NOP_EXPR so warn_if_unused_value doesn't complain.  */
2845   rval = build1 (NOP_EXPR, TREE_TYPE (rval), rval);
2846   TREE_NO_WARNING (rval) = 1;
2847
2848   return rval;
2849 }
2850
2851 /* Given a Java class, return a decl for the corresponding java.lang.Class.  */
2852
2853 tree
2854 build_java_class_ref (tree type)
2855 {
2856   tree name = NULL_TREE, class_decl;
2857   static tree CL_suffix = NULL_TREE;
2858   if (CL_suffix == NULL_TREE)
2859     CL_suffix = get_identifier("class$");
2860   if (jclass_node == NULL_TREE)
2861     {
2862       jclass_node = IDENTIFIER_GLOBAL_VALUE (get_identifier ("jclass"));
2863       if (jclass_node == NULL_TREE)
2864         {
2865           error ("call to Java constructor, while %<jclass%> undefined");
2866           return error_mark_node;
2867         }
2868       jclass_node = TREE_TYPE (jclass_node);
2869     }
2870
2871   /* Mangle the class$ field.  */
2872   {
2873     tree field;
2874     for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
2875       if (DECL_NAME (field) == CL_suffix)
2876         {
2877           mangle_decl (field);
2878           name = DECL_ASSEMBLER_NAME (field);
2879           break;
2880         }
2881     if (!field)
2882       {
2883         error ("can%'t find %<class$%> in %qT", type);
2884         return error_mark_node;
2885       }
2886   }
2887
2888   class_decl = IDENTIFIER_GLOBAL_VALUE (name);
2889   if (class_decl == NULL_TREE)
2890     {
2891       class_decl = build_decl (input_location,
2892                                VAR_DECL, name, TREE_TYPE (jclass_node));
2893       TREE_STATIC (class_decl) = 1;
2894       DECL_EXTERNAL (class_decl) = 1;
2895       TREE_PUBLIC (class_decl) = 1;
2896       DECL_ARTIFICIAL (class_decl) = 1;
2897       DECL_IGNORED_P (class_decl) = 1;
2898       pushdecl_top_level (class_decl);
2899       make_decl_rtl (class_decl);
2900     }
2901   return class_decl;
2902 }
2903 \f
2904 static tree
2905 build_vec_delete_1 (tree base, tree maxindex, tree type,
2906                     special_function_kind auto_delete_vec,
2907                     int use_global_delete, tsubst_flags_t complain)
2908 {
2909   tree virtual_size;
2910   tree ptype = build_pointer_type (type = complete_type (type));
2911   tree size_exp = size_in_bytes (type);
2912
2913   /* Temporary variables used by the loop.  */
2914   tree tbase, tbase_init;
2915
2916   /* This is the body of the loop that implements the deletion of a
2917      single element, and moves temp variables to next elements.  */
2918   tree body;
2919
2920   /* This is the LOOP_EXPR that governs the deletion of the elements.  */
2921   tree loop = 0;
2922
2923   /* This is the thing that governs what to do after the loop has run.  */
2924   tree deallocate_expr = 0;
2925
2926   /* This is the BIND_EXPR which holds the outermost iterator of the
2927      loop.  It is convenient to set this variable up and test it before
2928      executing any other code in the loop.
2929      This is also the containing expression returned by this function.  */
2930   tree controller = NULL_TREE;
2931   tree tmp;
2932
2933   /* We should only have 1-D arrays here.  */
2934   gcc_assert (TREE_CODE (type) != ARRAY_TYPE);
2935
2936   if (base == error_mark_node || maxindex == error_mark_node)
2937     return error_mark_node;
2938
2939   if (! MAYBE_CLASS_TYPE_P (type) || TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
2940     goto no_destructor;
2941
2942   /* The below is short by the cookie size.  */
2943   virtual_size = size_binop (MULT_EXPR, size_exp,
2944                              convert (sizetype, maxindex));
2945
2946   tbase = create_temporary_var (ptype);
2947   tbase_init
2948     = cp_build_modify_expr (tbase, NOP_EXPR,
2949                             fold_build_pointer_plus_loc (input_location,
2950                                                          fold_convert (ptype,
2951                                                                        base),
2952                                                          virtual_size),
2953                             complain);
2954   if (tbase_init == error_mark_node)
2955     return error_mark_node;
2956   controller = build3 (BIND_EXPR, void_type_node, tbase,
2957                        NULL_TREE, NULL_TREE);
2958   TREE_SIDE_EFFECTS (controller) = 1;
2959
2960   body = build1 (EXIT_EXPR, void_type_node,
2961                  build2 (EQ_EXPR, boolean_type_node, tbase,
2962                          fold_convert (ptype, base)));
2963   tmp = fold_build1_loc (input_location, NEGATE_EXPR, sizetype, size_exp);
2964   tmp = fold_build_pointer_plus (tbase, tmp);
2965   tmp = cp_build_modify_expr (tbase, NOP_EXPR, tmp, complain);
2966   if (tmp == error_mark_node)
2967     return error_mark_node;
2968   body = build_compound_expr (input_location, body, tmp);
2969   tmp = build_delete (ptype, tbase, sfk_complete_destructor,
2970                       LOOKUP_NORMAL|LOOKUP_DESTRUCTOR, 1,
2971                       complain);
2972   if (tmp == error_mark_node)
2973     return error_mark_node;
2974   body = build_compound_expr (input_location, body, tmp);
2975
2976   loop = build1 (LOOP_EXPR, void_type_node, body);
2977   loop = build_compound_expr (input_location, tbase_init, loop);
2978
2979  no_destructor:
2980   /* Delete the storage if appropriate.  */
2981   if (auto_delete_vec == sfk_deleting_destructor)
2982     {
2983       tree base_tbd;
2984
2985       /* The below is short by the cookie size.  */
2986       virtual_size = size_binop (MULT_EXPR, size_exp,
2987                                  convert (sizetype, maxindex));
2988
2989       if (! TYPE_VEC_NEW_USES_COOKIE (type))
2990         /* no header */
2991         base_tbd = base;
2992       else
2993         {
2994           tree cookie_size;
2995
2996           cookie_size = targetm.cxx.get_cookie_size (type);
2997           base_tbd = cp_build_binary_op (input_location,
2998                                          MINUS_EXPR,
2999                                          cp_convert (string_type_node,
3000                                                      base),
3001                                          cookie_size,
3002                                          complain);
3003           if (base_tbd == error_mark_node)
3004             return error_mark_node;
3005           base_tbd = cp_convert (ptype, base_tbd);
3006           /* True size with header.  */
3007           virtual_size = size_binop (PLUS_EXPR, virtual_size, cookie_size);
3008         }
3009
3010       deallocate_expr = build_op_delete_call (VEC_DELETE_EXPR,
3011                                               base_tbd, virtual_size,
3012                                               use_global_delete & 1,
3013                                               /*placement=*/NULL_TREE,
3014                                               /*alloc_fn=*/NULL_TREE);
3015     }
3016
3017   body = loop;
3018   if (!deallocate_expr)
3019     ;
3020   else if (!body)
3021     body = deallocate_expr;
3022   else
3023     body = build_compound_expr (input_location, body, deallocate_expr);
3024
3025   if (!body)
3026     body = integer_zero_node;
3027
3028   /* Outermost wrapper: If pointer is null, punt.  */
3029   body = fold_build3_loc (input_location, COND_EXPR, void_type_node,
3030                       fold_build2_loc (input_location,
3031                                    NE_EXPR, boolean_type_node, base,
3032                                    convert (TREE_TYPE (base),
3033                                             nullptr_node)),
3034                       body, integer_zero_node);
3035   body = build1 (NOP_EXPR, void_type_node, body);
3036
3037   if (controller)
3038     {
3039       TREE_OPERAND (controller, 1) = body;
3040       body = controller;
3041     }
3042
3043   if (TREE_CODE (base) == SAVE_EXPR)
3044     /* Pre-evaluate the SAVE_EXPR outside of the BIND_EXPR.  */
3045     body = build2 (COMPOUND_EXPR, void_type_node, base, body);
3046
3047   return convert_to_void (body, ICV_CAST, complain);
3048 }
3049
3050 /* Create an unnamed variable of the indicated TYPE.  */
3051
3052 tree
3053 create_temporary_var (tree type)
3054 {
3055   tree decl;
3056
3057   decl = build_decl (input_location,
3058                      VAR_DECL, NULL_TREE, type);
3059   TREE_USED (decl) = 1;
3060   DECL_ARTIFICIAL (decl) = 1;
3061   DECL_IGNORED_P (decl) = 1;
3062   DECL_CONTEXT (decl) = current_function_decl;
3063
3064   return decl;
3065 }
3066
3067 /* Create a new temporary variable of the indicated TYPE, initialized
3068    to INIT.
3069
3070    It is not entered into current_binding_level, because that breaks
3071    things when it comes time to do final cleanups (which take place
3072    "outside" the binding contour of the function).  */
3073
3074 tree
3075 get_temp_regvar (tree type, tree init)
3076 {
3077   tree decl;
3078
3079   decl = create_temporary_var (type);
3080   add_decl_expr (decl);
3081
3082   finish_expr_stmt (cp_build_modify_expr (decl, INIT_EXPR, init, 
3083                                           tf_warning_or_error));
3084
3085   return decl;
3086 }
3087
3088 /* `build_vec_init' returns tree structure that performs
3089    initialization of a vector of aggregate types.
3090
3091    BASE is a reference to the vector, of ARRAY_TYPE, or a pointer
3092      to the first element, of POINTER_TYPE.
3093    MAXINDEX is the maximum index of the array (one less than the
3094      number of elements).  It is only used if BASE is a pointer or
3095      TYPE_DOMAIN (TREE_TYPE (BASE)) == NULL_TREE.
3096
3097    INIT is the (possibly NULL) initializer.
3098
3099    If EXPLICIT_VALUE_INIT_P is true, then INIT must be NULL.  All
3100    elements in the array are value-initialized.
3101
3102    FROM_ARRAY is 0 if we should init everything with INIT
3103    (i.e., every element initialized from INIT).
3104    FROM_ARRAY is 1 if we should index into INIT in parallel
3105    with initialization of DECL.
3106    FROM_ARRAY is 2 if we should index into INIT in parallel,
3107    but use assignment instead of initialization.  */
3108
3109 tree
3110 build_vec_init (tree base, tree maxindex, tree init,
3111                 bool explicit_value_init_p,
3112                 int from_array, tsubst_flags_t complain)
3113 {
3114   tree rval;
3115   tree base2 = NULL_TREE;
3116   tree itype = NULL_TREE;
3117   tree iterator;
3118   /* The type of BASE.  */
3119   tree atype = TREE_TYPE (base);
3120   /* The type of an element in the array.  */
3121   tree type = TREE_TYPE (atype);
3122   /* The element type reached after removing all outer array
3123      types.  */
3124   tree inner_elt_type;
3125   /* The type of a pointer to an element in the array.  */
3126   tree ptype;
3127   tree stmt_expr;
3128   tree compound_stmt;
3129   int destroy_temps;
3130   tree try_block = NULL_TREE;
3131   int num_initialized_elts = 0;
3132   bool is_global;
3133   tree const_init = NULL_TREE;
3134   tree obase = base;
3135   bool xvalue = false;
3136   bool errors = false;
3137
3138   if (TREE_CODE (atype) == ARRAY_TYPE && TYPE_DOMAIN (atype))
3139     maxindex = array_type_nelts (atype);
3140
3141   if (maxindex == NULL_TREE || maxindex == error_mark_node
3142       || integer_all_onesp (maxindex))
3143     return error_mark_node;
3144
3145   if (explicit_value_init_p)
3146     gcc_assert (!init);
3147
3148   inner_elt_type = strip_array_types (type);
3149
3150   /* Look through the TARGET_EXPR around a compound literal.  */
3151   if (init && TREE_CODE (init) == TARGET_EXPR
3152       && TREE_CODE (TARGET_EXPR_INITIAL (init)) == CONSTRUCTOR
3153       && from_array != 2)
3154     init = TARGET_EXPR_INITIAL (init);
3155
3156   if (init
3157       && TREE_CODE (atype) == ARRAY_TYPE
3158       && (from_array == 2
3159           ? (!CLASS_TYPE_P (inner_elt_type)
3160              || !TYPE_HAS_COMPLEX_COPY_ASSIGN (inner_elt_type))
3161           : !TYPE_NEEDS_CONSTRUCTING (type))
3162       && ((TREE_CODE (init) == CONSTRUCTOR
3163            /* Don't do this if the CONSTRUCTOR might contain something
3164               that might throw and require us to clean up.  */
3165            && (VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (init))
3166                || ! TYPE_HAS_NONTRIVIAL_DESTRUCTOR (inner_elt_type)))
3167           || from_array))
3168     {
3169       /* Do non-default initialization of trivial arrays resulting from
3170          brace-enclosed initializers.  In this case, digest_init and
3171          store_constructor will handle the semantics for us.  */
3172
3173       stmt_expr = build2 (INIT_EXPR, atype, base, init);
3174       return stmt_expr;
3175     }
3176
3177   maxindex = cp_convert (ptrdiff_type_node, maxindex);
3178   if (TREE_CODE (atype) == ARRAY_TYPE)
3179     {
3180       ptype = build_pointer_type (type);
3181       base = cp_convert (ptype, decay_conversion (base));
3182     }
3183   else
3184     ptype = atype;
3185
3186   /* The code we are generating looks like:
3187      ({
3188        T* t1 = (T*) base;
3189        T* rval = t1;
3190        ptrdiff_t iterator = maxindex;
3191        try {
3192          for (; iterator != -1; --iterator) {
3193            ... initialize *t1 ...
3194            ++t1;
3195          }
3196        } catch (...) {
3197          ... destroy elements that were constructed ...
3198        }
3199        rval;
3200      })
3201
3202      We can omit the try and catch blocks if we know that the
3203      initialization will never throw an exception, or if the array
3204      elements do not have destructors.  We can omit the loop completely if
3205      the elements of the array do not have constructors.
3206
3207      We actually wrap the entire body of the above in a STMT_EXPR, for
3208      tidiness.
3209
3210      When copying from array to another, when the array elements have
3211      only trivial copy constructors, we should use __builtin_memcpy
3212      rather than generating a loop.  That way, we could take advantage
3213      of whatever cleverness the back end has for dealing with copies
3214      of blocks of memory.  */
3215
3216   is_global = begin_init_stmts (&stmt_expr, &compound_stmt);
3217   destroy_temps = stmts_are_full_exprs_p ();
3218   current_stmt_tree ()->stmts_are_full_exprs_p = 0;
3219   rval = get_temp_regvar (ptype, base);
3220   base = get_temp_regvar (ptype, rval);
3221   iterator = get_temp_regvar (ptrdiff_type_node, maxindex);
3222
3223   /* If initializing one array from another, initialize element by
3224      element.  We rely upon the below calls to do the argument
3225      checking.  Evaluate the initializer before entering the try block.  */
3226   if (from_array && init && TREE_CODE (init) != CONSTRUCTOR)
3227     {
3228       if (lvalue_kind (init) & clk_rvalueref)
3229         xvalue = true;
3230       base2 = decay_conversion (init);
3231       itype = TREE_TYPE (base2);
3232       base2 = get_temp_regvar (itype, base2);
3233       itype = TREE_TYPE (itype);
3234     }
3235
3236   /* Protect the entire array initialization so that we can destroy
3237      the partially constructed array if an exception is thrown.
3238      But don't do this if we're assigning.  */
3239   if (flag_exceptions && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
3240       && from_array != 2)
3241     {
3242       try_block = begin_try_block ();
3243     }
3244
3245   /* If the initializer is {}, then all elements are initialized from {}.
3246      But for non-classes, that's the same as value-initialization.  */
3247   if (init && BRACE_ENCLOSED_INITIALIZER_P (init)
3248       && CONSTRUCTOR_NELTS (init) == 0)
3249     {
3250       if (CLASS_TYPE_P (type))
3251         /* Leave init alone.  */;
3252       else
3253         {
3254           init = NULL_TREE;
3255           explicit_value_init_p = true;
3256         }
3257     }
3258
3259   /* Maybe pull out constant value when from_array? */
3260
3261   else if (init != NULL_TREE && TREE_CODE (init) == CONSTRUCTOR)
3262     {
3263       /* Do non-default initialization of non-trivial arrays resulting from
3264          brace-enclosed initializers.  */
3265       unsigned HOST_WIDE_INT idx;
3266       tree field, elt;
3267       /* Should we try to create a constant initializer?  */
3268       bool try_const = (TREE_CODE (atype) == ARRAY_TYPE
3269                         && (literal_type_p (inner_elt_type)
3270                             || TYPE_HAS_CONSTEXPR_CTOR (inner_elt_type)));
3271       /* If the constructor already has the array type, it's been through
3272          digest_init, so we shouldn't try to do anything more.  */
3273       bool digested = same_type_p (atype, TREE_TYPE (init));
3274       bool saw_non_const = false;
3275       bool saw_const = false;
3276       /* If we're initializing a static array, we want to do static
3277          initialization of any elements with constant initializers even if
3278          some are non-constant.  */
3279       bool do_static_init = (DECL_P (obase) && TREE_STATIC (obase));
3280       VEC(constructor_elt,gc) *new_vec;
3281       from_array = 0;
3282
3283       if (try_const)
3284         new_vec = VEC_alloc (constructor_elt, gc, CONSTRUCTOR_NELTS (init));
3285       else
3286         new_vec = NULL;
3287
3288       FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (init), idx, field, elt)
3289         {
3290           tree baseref = build1 (INDIRECT_REF, type, base);
3291           tree one_init;
3292
3293           num_initialized_elts++;
3294
3295           current_stmt_tree ()->stmts_are_full_exprs_p = 1;
3296           if (digested)
3297             one_init = build2 (INIT_EXPR, type, baseref, elt);
3298           else if (MAYBE_CLASS_TYPE_P (type) || TREE_CODE (type) == ARRAY_TYPE)
3299             one_init = build_aggr_init (baseref, elt, 0, complain);
3300           else
3301             one_init = cp_build_modify_expr (baseref, NOP_EXPR,
3302                                              elt, complain);
3303           if (one_init == error_mark_node)
3304             errors = true;
3305           if (try_const)
3306             {
3307               tree e = one_init;
3308               if (TREE_CODE (e) == EXPR_STMT)
3309                 e = TREE_OPERAND (e, 0);
3310               if (TREE_CODE (e) == CONVERT_EXPR
3311                   && VOID_TYPE_P (TREE_TYPE (e)))
3312                 e = TREE_OPERAND (e, 0);
3313               e = maybe_constant_init (e);
3314               if (reduced_constant_expression_p (e))
3315                 {
3316                   CONSTRUCTOR_APPEND_ELT (new_vec, field, e);
3317                   if (do_static_init)
3318                     one_init = NULL_TREE;
3319                   else
3320                     one_init = build2 (INIT_EXPR, type, baseref, e);
3321                   saw_const = true;
3322                 }
3323               else
3324                 {
3325                   if (do_static_init)
3326                     CONSTRUCTOR_APPEND_ELT (new_vec, field,
3327                                             build_zero_init (TREE_TYPE (e),
3328                                                              NULL_TREE, true));
3329                   saw_non_const = true;
3330                 }
3331             }
3332
3333           if (one_init)
3334             finish_expr_stmt (one_init);
3335           current_stmt_tree ()->stmts_are_full_exprs_p = 0;
3336
3337           one_init = cp_build_unary_op (PREINCREMENT_EXPR, base, 0, complain);
3338           if (one_init == error_mark_node)
3339             errors = true;
3340           else
3341             finish_expr_stmt (one_init);
3342
3343           one_init = cp_build_unary_op (PREDECREMENT_EXPR, iterator, 0,
3344                                         complain);
3345           if (one_init == error_mark_node)
3346             errors = true;
3347           else
3348             finish_expr_stmt (one_init);
3349         }
3350
3351       if (try_const)
3352         {
3353           if (!saw_non_const)
3354             const_init = build_constructor (atype, new_vec);
3355           else if (do_static_init && saw_const)
3356             DECL_INITIAL (obase) = build_constructor (atype, new_vec);
3357           else
3358             VEC_free (constructor_elt, gc, new_vec);
3359         }
3360
3361       /* Clear out INIT so that we don't get confused below.  */
3362       init = NULL_TREE;
3363     }
3364   else if (from_array)
3365     {
3366       if (init)
3367         /* OK, we set base2 above.  */;
3368       else if (CLASS_TYPE_P (type)
3369                && ! TYPE_HAS_DEFAULT_CONSTRUCTOR (type))
3370         {
3371           if (complain & tf_error)
3372             error ("initializer ends prematurely");
3373           errors = true;
3374         }
3375     }
3376
3377   /* Now, default-initialize any remaining elements.  We don't need to
3378      do that if a) the type does not need constructing, or b) we've
3379      already initialized all the elements.
3380
3381      We do need to keep going if we're copying an array.  */
3382
3383   if (from_array
3384       || ((type_build_ctor_call (type) || init || explicit_value_init_p)
3385           && ! (host_integerp (maxindex, 0)
3386                 && (num_initialized_elts
3387                     == tree_low_cst (maxindex, 0) + 1))))
3388     {
3389       /* If the ITERATOR is equal to -1, then we don't have to loop;
3390          we've already initialized all the elements.  */
3391       tree for_stmt;
3392       tree elt_init;
3393       tree to;
3394
3395       for_stmt = begin_for_stmt (NULL_TREE, NULL_TREE);
3396       finish_for_init_stmt (for_stmt);
3397       finish_for_cond (build2 (NE_EXPR, boolean_type_node, iterator,
3398                                build_int_cst (TREE_TYPE (iterator), -1)),
3399                        for_stmt);
3400       elt_init = cp_build_unary_op (PREDECREMENT_EXPR, iterator, 0,
3401                                     complain);
3402       if (elt_init == error_mark_node)
3403         errors = true;
3404       finish_for_expr (elt_init, for_stmt);
3405
3406       to = build1 (INDIRECT_REF, type, base);
3407
3408       if (from_array)
3409         {
3410           tree from;
3411
3412           if (base2)
3413             {
3414               from = build1 (INDIRECT_REF, itype, base2);
3415               if (xvalue)
3416                 from = move (from);
3417             }
3418           else
3419             from = NULL_TREE;
3420
3421           if (from_array == 2)
3422             elt_init = cp_build_modify_expr (to, NOP_EXPR, from, 
3423                                              complain);
3424           else if (type_build_ctor_call (type))
3425             elt_init = build_aggr_init (to, from, 0, complain);
3426           else if (from)
3427             elt_init = cp_build_modify_expr (to, NOP_EXPR, from,
3428                                              complain);
3429           else
3430             gcc_unreachable ();
3431         }
3432       else if (TREE_CODE (type) == ARRAY_TYPE)
3433         {
3434           if (init != 0)
3435             sorry
3436               ("cannot initialize multi-dimensional array with initializer");
3437           elt_init = build_vec_init (build1 (INDIRECT_REF, type, base),
3438                                      0, 0,
3439                                      explicit_value_init_p,
3440                                      0, complain);
3441         }
3442       else if (explicit_value_init_p)
3443         {
3444           elt_init = build_value_init (type, complain);
3445           if (elt_init != error_mark_node)
3446             elt_init = build2 (INIT_EXPR, type, to, elt_init);
3447         }
3448       else
3449         {
3450           gcc_assert (type_build_ctor_call (type) || init);
3451           if (CLASS_TYPE_P (type))
3452             elt_init = build_aggr_init (to, init, 0, complain);
3453           else
3454             {
3455               if (TREE_CODE (init) == TREE_LIST)
3456                 init = build_x_compound_expr_from_list (init, ELK_INIT,
3457                                                         complain);
3458               elt_init = build2 (INIT_EXPR, type, to, init);
3459             }
3460         }
3461
3462       if (elt_init == error_mark_node)
3463         errors = true;
3464
3465       current_stmt_tree ()->stmts_are_full_exprs_p = 1;
3466       finish_expr_stmt (elt_init);
3467       current_stmt_tree ()->stmts_are_full_exprs_p = 0;
3468
3469       finish_expr_stmt (cp_build_unary_op (PREINCREMENT_EXPR, base, 0,
3470                                            complain));
3471       if (base2)
3472         finish_expr_stmt (cp_build_unary_op (PREINCREMENT_EXPR, base2, 0,
3473                                              complain));
3474
3475       finish_for_stmt (for_stmt);
3476     }
3477
3478   /* Make sure to cleanup any partially constructed elements.  */
3479   if (flag_exceptions && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type)
3480       && from_array != 2)
3481     {
3482       tree e;
3483       tree m = cp_build_binary_op (input_location,
3484                                    MINUS_EXPR, maxindex, iterator,
3485                                    complain);
3486
3487       /* Flatten multi-dimensional array since build_vec_delete only
3488          expects one-dimensional array.  */
3489       if (TREE_CODE (type) == ARRAY_TYPE)
3490         m = cp_build_binary_op (input_location,
3491                                 MULT_EXPR, m,
3492                                 array_type_nelts_total (type),
3493                                 complain);
3494
3495       finish_cleanup_try_block (try_block);
3496       e = build_vec_delete_1 (rval, m,
3497                               inner_elt_type, sfk_complete_destructor,
3498                               /*use_global_delete=*/0, complain);
3499       if (e == error_mark_node)
3500         errors = true;
3501       finish_cleanup (e, try_block);
3502     }
3503
3504   /* The value of the array initialization is the array itself, RVAL
3505      is a pointer to the first element.  */
3506   finish_stmt_expr_expr (rval, stmt_expr);
3507
3508   stmt_expr = finish_init_stmts (is_global, stmt_expr, compound_stmt);
3509
3510   /* Now make the result have the correct type.  */
3511   if (TREE_CODE (atype) == ARRAY_TYPE)
3512     {
3513       atype = build_pointer_type (atype);
3514       stmt_expr = build1 (NOP_EXPR, atype, stmt_expr);
3515       stmt_expr = cp_build_indirect_ref (stmt_expr, RO_NULL, complain);
3516       TREE_NO_WARNING (stmt_expr) = 1;
3517     }
3518
3519   current_stmt_tree ()->stmts_are_full_exprs_p = destroy_temps;
3520
3521   if (const_init)
3522     return build2 (INIT_EXPR, atype, obase, const_init);
3523   if (errors)
3524     return error_mark_node;
3525   return stmt_expr;
3526 }
3527
3528 /* Call the DTOR_KIND destructor for EXP.  FLAGS are as for
3529    build_delete.  */
3530
3531 static tree
3532 build_dtor_call (tree exp, special_function_kind dtor_kind, int flags,
3533                  tsubst_flags_t complain)
3534 {
3535   tree name;
3536   tree fn;
3537   switch (dtor_kind)
3538     {
3539     case sfk_complete_destructor:
3540       name = complete_dtor_identifier;
3541       break;
3542
3543     case sfk_base_destructor:
3544       name = base_dtor_identifier;
3545       break;
3546
3547     case sfk_deleting_destructor:
3548       name = deleting_dtor_identifier;
3549       break;
3550
3551     default:
3552       gcc_unreachable ();
3553     }
3554   fn = lookup_fnfields (TREE_TYPE (exp), name, /*protect=*/2);
3555   return build_new_method_call (exp, fn,
3556                                 /*args=*/NULL,
3557                                 /*conversion_path=*/NULL_TREE,
3558                                 flags,
3559                                 /*fn_p=*/NULL,
3560                                 complain);
3561 }
3562
3563 /* Generate a call to a destructor. TYPE is the type to cast ADDR to.
3564    ADDR is an expression which yields the store to be destroyed.
3565    AUTO_DELETE is the name of the destructor to call, i.e., either
3566    sfk_complete_destructor, sfk_base_destructor, or
3567    sfk_deleting_destructor.
3568
3569    FLAGS is the logical disjunction of zero or more LOOKUP_
3570    flags.  See cp-tree.h for more info.  */
3571
3572 tree
3573 build_delete (tree type, tree addr, special_function_kind auto_delete,
3574               int flags, int use_global_delete, tsubst_flags_t complain)
3575 {
3576   tree expr;
3577
3578   if (addr == error_mark_node)
3579     return error_mark_node;
3580
3581   /* Can happen when CURRENT_EXCEPTION_OBJECT gets its type
3582      set to `error_mark_node' before it gets properly cleaned up.  */
3583   if (type == error_mark_node)
3584     return error_mark_node;
3585
3586   type = TYPE_MAIN_VARIANT (type);
3587
3588   addr = mark_rvalue_use (addr);
3589
3590   if (TREE_CODE (type) == POINTER_TYPE)
3591     {
3592       bool complete_p = true;
3593
3594       type = TYPE_MAIN_VARIANT (TREE_TYPE (type));
3595       if (TREE_CODE (type) == ARRAY_TYPE)
3596         goto handle_array;
3597
3598       /* We don't want to warn about delete of void*, only other
3599           incomplete types.  Deleting other incomplete types
3600           invokes undefined behavior, but it is not ill-formed, so
3601           compile to something that would even do The Right Thing
3602           (TM) should the type have a trivial dtor and no delete
3603           operator.  */
3604       if (!VOID_TYPE_P (type))
3605         {
3606           complete_type (type);
3607           if (!COMPLETE_TYPE_P (type))
3608             {
3609               if ((complain & tf_warning)
3610                   && warning (0, "possible problem detected in invocation of "
3611                               "delete operator:"))
3612                 {
3613                   cxx_incomplete_type_diagnostic (addr, type, DK_WARNING);
3614                   inform (input_location, "neither the destructor nor the class-specific "
3615                           "operator delete will be called, even if they are "
3616                           "declared when the class is defined");
3617                 }
3618               complete_p = false;
3619             }
3620           else if (auto_delete == sfk_deleting_destructor && warn_delnonvdtor
3621                    && MAYBE_CLASS_TYPE_P (type) && !CLASSTYPE_FINAL (type)
3622                    && TYPE_POLYMORPHIC_P (type))
3623             {
3624               tree dtor;
3625               dtor = CLASSTYPE_DESTRUCTORS (type);
3626               if (!dtor || !DECL_VINDEX (dtor))
3627                 {
3628                   if (CLASSTYPE_PURE_VIRTUALS (type))
3629                     warning (OPT_Wdelete_non_virtual_dtor,
3630                              "deleting object of abstract class type %qT"
3631                              " which has non-virtual destructor"
3632                              " will cause undefined behaviour", type);
3633                   else
3634                     warning (OPT_Wdelete_non_virtual_dtor,
3635                              "deleting object of polymorphic class type %qT"
3636                              " which has non-virtual destructor"
3637                              " might cause undefined behaviour", type);
3638                 }
3639             }
3640         }
3641       if (VOID_TYPE_P (type) || !complete_p || !MAYBE_CLASS_TYPE_P (type))
3642         /* Call the builtin operator delete.  */
3643         return build_builtin_delete_call (addr);
3644       if (TREE_SIDE_EFFECTS (addr))
3645         addr = save_expr (addr);
3646
3647       /* Throw away const and volatile on target type of addr.  */
3648       addr = convert_force (build_pointer_type (type), addr, 0);
3649     }
3650   else if (TREE_CODE (type) == ARRAY_TYPE)
3651     {
3652     handle_array:
3653
3654       if (TYPE_DOMAIN (type) == NULL_TREE)
3655         {
3656           if (complain & tf_error)
3657             error ("unknown array size in delete");
3658           return error_mark_node;
3659         }
3660       return build_vec_delete (addr, array_type_nelts (type),
3661                                auto_delete, use_global_delete, complain);
3662     }
3663   else
3664     {
3665       /* Don't check PROTECT here; leave that decision to the
3666          destructor.  If the destructor is accessible, call it,
3667          else report error.  */
3668       addr = cp_build_addr_expr (addr, complain);
3669       if (addr == error_mark_node)
3670         return error_mark_node;
3671       if (TREE_SIDE_EFFECTS (addr))
3672         addr = save_expr (addr);
3673
3674       addr = convert_force (build_pointer_type (type), addr, 0);
3675     }
3676
3677   gcc_assert (MAYBE_CLASS_TYPE_P (type));
3678
3679   if (TYPE_HAS_TRIVIAL_DESTRUCTOR (type))
3680     {
3681       if (auto_delete != sfk_deleting_destructor)
3682         return void_zero_node;
3683
3684       return build_op_delete_call (DELETE_EXPR, addr,
3685                                    cxx_sizeof_nowarn (type),
3686                                    use_global_delete,
3687                                    /*placement=*/NULL_TREE,
3688                                    /*alloc_fn=*/NULL_TREE);
3689     }
3690   else
3691     {
3692       tree head = NULL_TREE;
3693       tree do_delete = NULL_TREE;
3694       tree ifexp;
3695
3696       if (CLASSTYPE_LAZY_DESTRUCTOR (type))
3697         lazily_declare_fn (sfk_destructor, type);
3698
3699       /* For `::delete x', we must not use the deleting destructor
3700          since then we would not be sure to get the global `operator
3701          delete'.  */
3702       if (use_global_delete && auto_delete == sfk_deleting_destructor)
3703         {
3704           /* We will use ADDR multiple times so we must save it.  */
3705           addr = save_expr (addr);
3706           head = get_target_expr (build_headof (addr));
3707           /* Delete the object.  */
3708           do_delete = build_builtin_delete_call (head);
3709           /* Otherwise, treat this like a complete object destructor
3710              call.  */
3711           auto_delete = sfk_complete_destructor;
3712         }
3713       /* If the destructor is non-virtual, there is no deleting
3714          variant.  Instead, we must explicitly call the appropriate
3715          `operator delete' here.  */
3716       else if (!DECL_VIRTUAL_P (CLASSTYPE_DESTRUCTORS (type))
3717                && auto_delete == sfk_deleting_destructor)
3718         {
3719           /* We will use ADDR multiple times so we must save it.  */
3720           addr = save_expr (addr);
3721           /* Build the call.  */
3722           do_delete = build_op_delete_call (DELETE_EXPR,
3723                                             addr,
3724                                             cxx_sizeof_nowarn (type),
3725                                             /*global_p=*/false,
3726                                             /*placement=*/NULL_TREE,
3727                                             /*alloc_fn=*/NULL_TREE);
3728           /* Call the complete object destructor.  */
3729           auto_delete = sfk_complete_destructor;
3730         }
3731       else if (auto_delete == sfk_deleting_destructor
3732                && TYPE_GETS_REG_DELETE (type))
3733         {
3734           /* Make sure we have access to the member op delete, even though
3735              we'll actually be calling it from the destructor.  */
3736           build_op_delete_call (DELETE_EXPR, addr, cxx_sizeof_nowarn (type),
3737                                 /*global_p=*/false,
3738                                 /*placement=*/NULL_TREE,
3739                                 /*alloc_fn=*/NULL_TREE);
3740         }
3741
3742       expr = build_dtor_call (cp_build_indirect_ref (addr, RO_NULL, complain),
3743                               auto_delete, flags, complain);
3744       if (expr == error_mark_node)
3745         return error_mark_node;
3746       if (do_delete)
3747         expr = build2 (COMPOUND_EXPR, void_type_node, expr, do_delete);
3748
3749       /* We need to calculate this before the dtor changes the vptr.  */
3750       if (head)
3751         expr = build2 (COMPOUND_EXPR, void_type_node, head, expr);
3752
3753       if (flags & LOOKUP_DESTRUCTOR)
3754         /* Explicit destructor call; don't check for null pointer.  */
3755         ifexp = integer_one_node;
3756       else
3757         {
3758           /* Handle deleting a null pointer.  */
3759           ifexp = fold (cp_build_binary_op (input_location,
3760                                             NE_EXPR, addr, nullptr_node,
3761                                             complain));
3762           if (ifexp == error_mark_node)
3763             return error_mark_node;
3764         }
3765
3766       if (ifexp != integer_one_node)
3767         expr = build3 (COND_EXPR, void_type_node,
3768                        ifexp, expr, void_zero_node);
3769
3770       return expr;
3771     }
3772 }
3773
3774 /* At the beginning of a destructor, push cleanups that will call the
3775    destructors for our base classes and members.
3776
3777    Called from begin_destructor_body.  */
3778
3779 void
3780 push_base_cleanups (void)
3781 {
3782   tree binfo, base_binfo;
3783   int i;
3784   tree member;
3785   tree expr;
3786   VEC(tree,gc) *vbases;
3787
3788   /* Run destructors for all virtual baseclasses.  */
3789   if (CLASSTYPE_VBASECLASSES (current_class_type))
3790     {
3791       tree cond = (condition_conversion
3792                    (build2 (BIT_AND_EXPR, integer_type_node,
3793                             current_in_charge_parm,
3794                             integer_two_node)));
3795
3796       /* The CLASSTYPE_VBASECLASSES vector is in initialization
3797          order, which is also the right order for pushing cleanups.  */
3798       for (vbases = CLASSTYPE_VBASECLASSES (current_class_type), i = 0;
3799            VEC_iterate (tree, vbases, i, base_binfo); i++)
3800         {
3801           if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (BINFO_TYPE (base_binfo)))
3802             {
3803               expr = build_special_member_call (current_class_ref,
3804                                                 base_dtor_identifier,
3805                                                 NULL,
3806                                                 base_binfo,
3807                                                 (LOOKUP_NORMAL
3808                                                  | LOOKUP_NONVIRTUAL),
3809                                                 tf_warning_or_error);
3810               expr = build3 (COND_EXPR, void_type_node, cond,
3811                              expr, void_zero_node);
3812               finish_decl_cleanup (NULL_TREE, expr);
3813             }
3814         }
3815     }
3816
3817   /* Take care of the remaining baseclasses.  */
3818   for (binfo = TYPE_BINFO (current_class_type), i = 0;
3819        BINFO_BASE_ITERATE (binfo, i, base_binfo); i++)
3820     {
3821       if (TYPE_HAS_TRIVIAL_DESTRUCTOR (BINFO_TYPE (base_binfo))
3822           || BINFO_VIRTUAL_P (base_binfo))
3823         continue;
3824
3825       expr = build_special_member_call (current_class_ref,
3826                                         base_dtor_identifier,
3827                                         NULL, base_binfo,
3828                                         LOOKUP_NORMAL | LOOKUP_NONVIRTUAL,
3829                                         tf_warning_or_error);
3830       finish_decl_cleanup (NULL_TREE, expr);
3831     }
3832
3833   /* Don't automatically destroy union members.  */
3834   if (TREE_CODE (current_class_type) == UNION_TYPE)
3835     return;
3836
3837   for (member = TYPE_FIELDS (current_class_type); member;
3838        member = DECL_CHAIN (member))
3839     {
3840       tree this_type = TREE_TYPE (member);
3841       if (this_type == error_mark_node
3842           || TREE_CODE (member) != FIELD_DECL
3843           || DECL_ARTIFICIAL (member))
3844         continue;
3845       if (ANON_UNION_TYPE_P (this_type))
3846         continue;
3847       if (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (this_type))
3848         {
3849           tree this_member = (build_class_member_access_expr
3850                               (current_class_ref, member,
3851                                /*access_path=*/NULL_TREE,
3852                                /*preserve_reference=*/false,
3853                                tf_warning_or_error));
3854           expr = build_delete (this_type, this_member,
3855                                sfk_complete_destructor,
3856                                LOOKUP_NONVIRTUAL|LOOKUP_DESTRUCTOR|LOOKUP_NORMAL,
3857                                0, tf_warning_or_error);
3858           finish_decl_cleanup (NULL_TREE, expr);
3859         }
3860     }
3861 }
3862
3863 /* Build a C++ vector delete expression.
3864    MAXINDEX is the number of elements to be deleted.
3865    ELT_SIZE is the nominal size of each element in the vector.
3866    BASE is the expression that should yield the store to be deleted.
3867    This function expands (or synthesizes) these calls itself.
3868    AUTO_DELETE_VEC says whether the container (vector) should be deallocated.
3869
3870    This also calls delete for virtual baseclasses of elements of the vector.
3871
3872    Update: MAXINDEX is no longer needed.  The size can be extracted from the
3873    start of the vector for pointers, and from the type for arrays.  We still
3874    use MAXINDEX for arrays because it happens to already have one of the
3875    values we'd have to extract.  (We could use MAXINDEX with pointers to
3876    confirm the size, and trap if the numbers differ; not clear that it'd
3877    be worth bothering.)  */
3878
3879 tree
3880 build_vec_delete (tree base, tree maxindex,
3881                   special_function_kind auto_delete_vec,
3882                   int use_global_delete, tsubst_flags_t complain)
3883 {
3884   tree type;
3885   tree rval;
3886   tree base_init = NULL_TREE;
3887
3888   type = TREE_TYPE (base);
3889
3890   if (TREE_CODE (type) == POINTER_TYPE)
3891     {
3892       /* Step back one from start of vector, and read dimension.  */
3893       tree cookie_addr;
3894       tree size_ptr_type = build_pointer_type (sizetype);
3895
3896       if (TREE_SIDE_EFFECTS (base))
3897         {
3898           base_init = get_target_expr (base);
3899           base = TARGET_EXPR_SLOT (base_init);
3900         }
3901       type = strip_array_types (TREE_TYPE (type));
3902       cookie_addr = fold_build1_loc (input_location, NEGATE_EXPR,
3903                                  sizetype, TYPE_SIZE_UNIT (sizetype));
3904       cookie_addr = fold_build_pointer_plus (fold_convert (size_ptr_type, base),
3905                                              cookie_addr);
3906       maxindex = cp_build_indirect_ref (cookie_addr, RO_NULL, complain);
3907     }
3908   else if (TREE_CODE (type) == ARRAY_TYPE)
3909     {
3910       /* Get the total number of things in the array, maxindex is a
3911          bad name.  */
3912       maxindex = array_type_nelts_total (type);
3913       type = strip_array_types (type);
3914       base = cp_build_addr_expr (base, complain);
3915       if (base == error_mark_node)
3916         return error_mark_node;
3917       if (TREE_SIDE_EFFECTS (base))
3918         {
3919           base_init = get_target_expr (base);
3920           base = TARGET_EXPR_SLOT (base_init);
3921         }
3922     }
3923   else
3924     {
3925       if (base != error_mark_node && !(complain & tf_error))
3926         error ("type to vector delete is neither pointer or array type");
3927       return error_mark_node;
3928     }
3929
3930   rval = build_vec_delete_1 (base, maxindex, type, auto_delete_vec,
3931                              use_global_delete, complain);
3932   if (base_init && rval != error_mark_node)
3933     rval = build2 (COMPOUND_EXPR, TREE_TYPE (rval), base_init, rval);
3934
3935   return rval;
3936 }