OSDN Git Service

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