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