OSDN Git Service

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