OSDN Git Service

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