OSDN Git Service

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