OSDN Git Service

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