OSDN Git Service

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