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