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