OSDN Git Service

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