Create startup files from the GCC sources and drop our versions.
[dragonfly.git] / contrib / gcc-4.0 / gcc / cp / typeck2.c
1 /* Report error messages, build initializers, and perform
2    some front-end optimizations for C++ compiler.
3    Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
4    1999, 2000, 2001, 2002, 2004, 2005
5    Free Software Foundation, Inc.
6    Hacked by Michael Tiemann (tiemann@cygnus.com)
7
8 This file is part of GCC.
9
10 GCC is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 2, or (at your option)
13 any later version.
14
15 GCC is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
18 GNU General Public License for more details.
19
20 You should have received a copy of the GNU General Public License
21 along with GCC; see the file COPYING.  If not, write to
22 the Free Software Foundation, 59 Temple Place - Suite 330,
23 Boston, MA 02111-1307, USA.  */
24
25
26 /* This file is part of the C++ front end.
27    It contains routines to build C++ expressions given their operands,
28    including computing the types of the result, C and C++ specific error
29    checks, and some optimization.  */
30
31 #include "config.h"
32 #include "system.h"
33 #include "coretypes.h"
34 #include "tm.h"
35 #include "tree.h"
36 #include "cp-tree.h"
37 #include "flags.h"
38 #include "toplev.h"
39 #include "output.h"
40 #include "diagnostic.h"
41
42 static tree process_init_constructor (tree, tree, tree *);
43
44 /* Print an error message stemming from an attempt to use
45    BASETYPE as a base class for TYPE.  */
46
47 tree
48 error_not_base_type (tree basetype, tree type)
49 {
50   if (TREE_CODE (basetype) == FUNCTION_DECL)
51     basetype = DECL_CONTEXT (basetype);
52   error ("type %qT is not a base type for type %qT", basetype, type);
53   return error_mark_node;
54 }
55
56 tree
57 binfo_or_else (tree base, tree type)
58 {
59   tree binfo = lookup_base (type, base, ba_unique, NULL);
60
61   if (binfo == error_mark_node)
62     return NULL_TREE;
63   else if (!binfo)
64     error_not_base_type (base, type);
65   return binfo;
66 }
67
68 /* According to ARM $7.1.6, "A `const' object may be initialized, but its
69    value may not be changed thereafter.  Thus, we emit hard errors for these,
70    rather than just pedwarns.  If `SOFT' is 1, then we just pedwarn.  (For
71    example, conversions to references.)  */
72
73 void
74 readonly_error (tree arg, const char* string, int soft)
75 {
76   const char *fmt;
77   void (*fn) (const char *, ...);
78
79   if (soft)
80     fn = pedwarn;
81   else
82     fn = error;
83
84   if (TREE_CODE (arg) == COMPONENT_REF)
85     {
86       if (TYPE_READONLY (TREE_TYPE (TREE_OPERAND (arg, 0))))
87         fmt = "%s of data-member %qD in read-only structure";
88       else
89         fmt = "%s of read-only data-member %qD";
90       (*fn) (fmt, string, TREE_OPERAND (arg, 1));
91     }
92   else if (TREE_CODE (arg) == VAR_DECL)
93     {
94       if (DECL_LANG_SPECIFIC (arg)
95           && DECL_IN_AGGR_P (arg)
96           && !TREE_STATIC (arg))
97         fmt = "%s of constant field %qD";
98       else
99         fmt = "%s of read-only variable %qD";
100       (*fn) (fmt, string, arg);
101     }
102   else if (TREE_CODE (arg) == PARM_DECL)
103     (*fn) ("%s of read-only parameter %qD", string, arg);
104   else if (TREE_CODE (arg) == INDIRECT_REF
105            && TREE_CODE (TREE_TYPE (TREE_OPERAND (arg, 0))) == REFERENCE_TYPE
106            && (TREE_CODE (TREE_OPERAND (arg, 0)) == VAR_DECL
107                || TREE_CODE (TREE_OPERAND (arg, 0)) == PARM_DECL))
108     (*fn) ("%s of read-only reference %qD", string, TREE_OPERAND (arg, 0));
109   else if (TREE_CODE (arg) == RESULT_DECL)
110     (*fn) ("%s of read-only named return value %qD", string, arg);
111   else if (TREE_CODE (arg) == FUNCTION_DECL)
112     (*fn) ("%s of function %qD", string, arg);
113   else
114     (*fn) ("%s of read-only location", string);
115 }
116
117 \f
118 /* Structure that holds information about declarations whose type was
119    incomplete and we could not check whether it was abstract or not.  */
120
121 struct pending_abstract_type GTY((chain_next ("%h.next")))
122 {
123   /* Declaration which we are checking for abstractness. It is either
124      a DECL node, or an IDENTIFIER_NODE if we do not have a full
125      declaration available.  */
126   tree decl;
127
128   /* Type which will be checked for abstractness.  */
129   tree type;
130
131   /* Position of the declaration. This is only needed for IDENTIFIER_NODEs,
132      because DECLs already carry locus information.  */
133   location_t locus;
134
135   /* Link to the next element in list.  */
136   struct pending_abstract_type* next;
137 };
138
139
140 /* Compute the hash value of the node VAL. This function is used by the
141    hash table abstract_pending_vars.  */
142
143 static hashval_t
144 pat_calc_hash (const void* val)
145 {
146   const struct pending_abstract_type* pat = val;
147   return (hashval_t) TYPE_UID (pat->type);
148 }
149
150
151 /* Compare node VAL1 with the type VAL2. This function is used by the
152    hash table abstract_pending_vars.  */
153
154 static int
155 pat_compare (const void* val1, const void* val2)
156 {
157   const struct pending_abstract_type* pat1 = val1;
158   tree type2 = (tree)val2;
159
160   return (pat1->type == type2);
161 }
162
163 /* Hash table that maintains pending_abstract_type nodes, for which we still
164    need to check for type abstractness.  The key of the table is the type
165    of the declaration.  */
166 static GTY ((param_is (struct pending_abstract_type)))
167 htab_t abstract_pending_vars = NULL;
168
169
170 /* This function is called after TYPE is completed, and will check if there
171    are pending declarations for which we still need to verify the abstractness
172    of TYPE, and emit a diagnostic (through abstract_virtuals_error) if TYPE
173    turned out to be incomplete.  */
174
175 void
176 complete_type_check_abstract (tree type)
177 {
178   void **slot;
179   struct pending_abstract_type *pat;
180   location_t cur_loc = input_location;
181
182   gcc_assert (COMPLETE_TYPE_P (type));
183
184   if (!abstract_pending_vars)
185     return;
186
187   /* Retrieve the list of pending declarations for this type.  */
188   slot = htab_find_slot_with_hash (abstract_pending_vars, type,
189                                    (hashval_t)TYPE_UID (type), NO_INSERT);
190   if (!slot)
191     return;
192   pat = (struct pending_abstract_type*)*slot;
193   gcc_assert (pat);
194
195   /* If the type is not abstract, do not do anything.  */
196   if (CLASSTYPE_PURE_VIRTUALS (type))
197     {
198       struct pending_abstract_type *prev = 0, *next;
199
200       /* Reverse the list to emit the errors in top-down order.  */
201       for (; pat; pat = next)
202         {
203           next = pat->next;
204           pat->next = prev;
205           prev = pat;
206         }
207       pat = prev;
208
209       /* Go through the list, and call abstract_virtuals_error for each
210         element: it will issue a diagnostic if the type is abstract.  */
211       while (pat)
212         {
213           gcc_assert (type == pat->type);
214
215           /* Tweak input_location so that the diagnostic appears at the correct
216             location. Notice that this is only needed if the decl is an
217             IDENTIFIER_NODE, otherwise cp_error_at.  */
218           input_location = pat->locus;
219           abstract_virtuals_error (pat->decl, pat->type);
220           pat = pat->next;
221         }
222     }
223
224   htab_clear_slot (abstract_pending_vars, slot);
225
226   input_location = cur_loc;
227 }
228
229
230 /* If TYPE has abstract virtual functions, issue an error about trying
231    to create an object of that type.  DECL is the object declared, or
232    NULL_TREE if the declaration is unavailable.  Returns 1 if an error
233    occurred; zero if all was well.  */
234
235 int
236 abstract_virtuals_error (tree decl, tree type)
237 {
238   VEC (tree) *pure;
239   
240   /* This function applies only to classes. Any other entity can never
241      be abstract.  */
242   if (!CLASS_TYPE_P (type))
243     return 0;
244
245   /* If the type is incomplete, we register it within a hash table,
246      so that we can check again once it is completed. This makes sense
247      only for objects for which we have a declaration or at least a
248      name.  */
249   if (!COMPLETE_TYPE_P (type))
250     {
251       void **slot;
252       struct pending_abstract_type *pat;
253
254       gcc_assert (!decl || DECL_P (decl) 
255                   || TREE_CODE (decl) == IDENTIFIER_NODE);
256
257       if (!abstract_pending_vars)
258         abstract_pending_vars = htab_create_ggc (31, &pat_calc_hash, 
259                                                 &pat_compare, NULL);
260
261       slot = htab_find_slot_with_hash (abstract_pending_vars, type,
262                                       (hashval_t)TYPE_UID (type), INSERT);
263
264       pat = GGC_NEW (struct pending_abstract_type);
265       pat->type = type;
266       pat->decl = decl;
267       pat->locus = ((decl && DECL_P (decl))
268                     ? DECL_SOURCE_LOCATION (decl)
269                     : input_location);
270
271       pat->next = *slot;
272       *slot = pat;
273
274       return 0;
275     }
276
277   if (!TYPE_SIZE (type))
278     /* TYPE is being defined, and during that time
279        CLASSTYPE_PURE_VIRTUALS holds the inline friends.  */
280     return 0;
281
282   pure = CLASSTYPE_PURE_VIRTUALS (type);
283   if (!pure)
284     return 0;
285
286   if (decl)
287     {
288       if (TREE_CODE (decl) == RESULT_DECL)
289         return 0;
290
291       if (TREE_CODE (decl) == VAR_DECL)
292         cp_error_at ("cannot declare variable %q+D to be of abstract "
293                      "type %qT", decl, type);
294       else if (TREE_CODE (decl) == PARM_DECL)
295         cp_error_at ("cannot declare parameter %q+D to be of abstract "
296                      "type %qT", decl, type);
297       else if (TREE_CODE (decl) == FIELD_DECL)
298         cp_error_at ("cannot declare field %q+D to be of abstract "
299                      "type %qT", decl, type);
300       else if (TREE_CODE (decl) == FUNCTION_DECL
301                && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
302         cp_error_at ("invalid abstract return type for member function %q+#D",
303                      decl);
304       else if (TREE_CODE (decl) == FUNCTION_DECL)
305         cp_error_at ("invalid abstract return type for function %q+#D", 
306                      decl);
307       else if (TREE_CODE (decl) == IDENTIFIER_NODE)
308         /* Here we do not have location information, so use error instead
309            of cp_error_at.  */
310         error ("invalid abstract type %qT for %qE", type, decl);
311       else
312         cp_error_at ("invalid abstract type for %q+D", decl);
313     }
314   else
315     error ("cannot allocate an object of abstract type %qT", type);
316
317   /* Only go through this once.  */
318   if (VEC_length (tree, pure))
319     {
320       unsigned ix;
321       tree fn;
322       
323       inform ("%J  because the following virtual functions are pure "
324               "within %qT:", TYPE_MAIN_DECL (type), type);
325
326       for (ix = 0; VEC_iterate (tree, pure, ix, fn); ix++)
327         inform ("%J\t%#D", fn, fn);
328       /* Now truncate the vector.  This leaves it non-null, so we know
329          there are pure virtuals, but empty so we don't list them out
330          again.  */
331       VEC_truncate (tree, pure, 0);
332     }
333   else
334     inform ("%J  since type %qT has pure virtual functions", 
335             TYPE_MAIN_DECL (type), type);
336
337   return 1;
338 }
339
340 /* Print an error message for invalid use of an incomplete type.
341    VALUE is the expression that was used (or 0 if that isn't known)
342    and TYPE is the type that was invalid.  DIAG_TYPE indicates the
343    type of diagnostic:  0 for an error, 1 for a warning, 2 for a
344    pedwarn.  */
345
346 void
347 cxx_incomplete_type_diagnostic (tree value, tree type, int diag_type)
348 {
349   int decl = 0;
350   void (*p_msg) (const char *, ...);
351   void (*p_msg_at) (const char *, ...);
352
353   if (diag_type == 1)
354     {
355       p_msg = warning;
356       p_msg_at = cp_warning_at;
357     }
358   else if (diag_type == 2)
359     {
360       p_msg = pedwarn;
361       p_msg_at = cp_pedwarn_at;
362     }
363   else
364     {
365       p_msg = error;
366       p_msg_at = cp_error_at;
367     }
368   
369   /* Avoid duplicate error message.  */
370   if (TREE_CODE (type) == ERROR_MARK)
371     return;
372
373   if (value != 0 && (TREE_CODE (value) == VAR_DECL
374                      || TREE_CODE (value) == PARM_DECL
375                      || TREE_CODE (value) == FIELD_DECL))
376     {
377       (*p_msg_at) ("%qD has incomplete type", value);
378       decl = 1;
379     }
380  retry:
381   /* We must print an error message.  Be clever about what it says.  */
382
383   switch (TREE_CODE (type))
384     {
385     case RECORD_TYPE:
386     case UNION_TYPE:
387     case ENUMERAL_TYPE:
388       if (!decl)
389         (*p_msg) ("invalid use of undefined type %q#T", type);
390       if (!TYPE_TEMPLATE_INFO (type))
391         (*p_msg_at) ("forward declaration of %q#T", type);
392       else
393         (*p_msg_at) ("declaration of %q#T", type);
394       break;
395
396     case VOID_TYPE:
397       (*p_msg) ("invalid use of %qT", type);
398       break;
399
400     case ARRAY_TYPE:
401       if (TYPE_DOMAIN (type))
402         {
403           type = TREE_TYPE (type);
404           goto retry;
405         }
406       (*p_msg) ("invalid use of array with unspecified bounds");
407       break;
408
409     case OFFSET_TYPE:
410     bad_member:
411       (*p_msg) ("invalid use of member (did you forget the %<&%> ?)");
412       break;
413
414     case TEMPLATE_TYPE_PARM:
415       (*p_msg) ("invalid use of template type parameter");
416       break;
417
418     case UNKNOWN_TYPE:
419       if (value && TREE_CODE (value) == COMPONENT_REF)
420         goto bad_member;
421       else if (value && TREE_CODE (value) == ADDR_EXPR)
422         (*p_msg) ("address of overloaded function with no contextual "
423                   "type information");
424       else if (value && TREE_CODE (value) == OVERLOAD)
425         (*p_msg) ("overloaded function with no contextual type information");
426       else
427         (*p_msg) ("insufficient contextual information to determine type");
428       break;
429     
430     default:
431       gcc_unreachable ();
432     }
433 }
434
435 /* Backward-compatibility interface to incomplete_type_diagnostic;
436    required by ../tree.c.  */
437 #undef cxx_incomplete_type_error
438 void
439 cxx_incomplete_type_error (tree value, tree type)
440 {
441   cxx_incomplete_type_diagnostic (value, type, 0);
442 }
443
444 \f
445 /* The recursive part of split_nonconstant_init.  DEST is an lvalue
446    expression to which INIT should be assigned.  INIT is a CONSTRUCTOR.  */
447
448 static void
449 split_nonconstant_init_1 (tree dest, tree init)
450 {
451   tree *pelt, elt, type = TREE_TYPE (dest);
452   tree sub, code, inner_type = NULL;
453   bool array_type_p = false;
454
455   pelt = &CONSTRUCTOR_ELTS (init);
456   switch (TREE_CODE (type))
457     {
458     case ARRAY_TYPE:
459       inner_type = TREE_TYPE (type);
460       array_type_p = true;
461       /* FALLTHRU */
462
463     case RECORD_TYPE:
464     case UNION_TYPE:
465     case QUAL_UNION_TYPE:
466       while ((elt = *pelt))
467         {
468           tree field_index = TREE_PURPOSE (elt);
469           tree value = TREE_VALUE (elt);
470
471           if (!array_type_p)
472             inner_type = TREE_TYPE (field_index);
473
474           if (TREE_CODE (value) == CONSTRUCTOR)
475             {
476               if (array_type_p)
477                 sub = build4 (ARRAY_REF, inner_type, dest, field_index,
478                               NULL_TREE, NULL_TREE);
479               else
480                 sub = build3 (COMPONENT_REF, inner_type, dest, field_index,
481                               NULL_TREE);
482
483               split_nonconstant_init_1 (sub, value);
484             }
485           else if (!initializer_constant_valid_p (value, inner_type))
486             {
487               *pelt = TREE_CHAIN (elt);
488
489               if (array_type_p)
490                 sub = build4 (ARRAY_REF, inner_type, dest, field_index,
491                               NULL_TREE, NULL_TREE);
492               else
493                 sub = build3 (COMPONENT_REF, inner_type, dest, field_index,
494                               NULL_TREE);
495
496               code = build2 (MODIFY_EXPR, inner_type, sub, value);
497               code = build_stmt (EXPR_STMT, code);
498               add_stmt (code);
499               continue;
500             }
501
502           pelt = &TREE_CHAIN (elt);
503         }
504       break;
505
506     case VECTOR_TYPE:
507       if (!initializer_constant_valid_p (init, type))
508         {
509           tree cons = copy_node (init);
510           CONSTRUCTOR_ELTS (init) = NULL;
511           code = build2 (MODIFY_EXPR, type, dest, cons);
512           code = build_stmt (EXPR_STMT, code);
513           add_stmt (code);
514         }
515       break;
516
517     default:
518       gcc_unreachable ();
519     }
520 }
521
522 /* A subroutine of store_init_value.  Splits non-constant static 
523    initializer INIT into a constant part and generates code to
524    perform the non-constant part of the initialization to DEST.
525    Returns the code for the runtime init.  */
526
527 static tree
528 split_nonconstant_init (tree dest, tree init)
529 {
530   tree code;
531
532   if (TREE_CODE (init) == CONSTRUCTOR)
533     {
534       code = push_stmt_list ();
535       split_nonconstant_init_1 (dest, init);
536       code = pop_stmt_list (code);
537       DECL_INITIAL (dest) = init;
538       TREE_READONLY (dest) = 0;
539     }
540   else
541     code = build2 (INIT_EXPR, TREE_TYPE (dest), dest, init);
542
543   return code;
544 }
545
546 /* Perform appropriate conversions on the initial value of a variable,
547    store it in the declaration DECL,
548    and print any error messages that are appropriate.
549    If the init is invalid, store an ERROR_MARK.
550
551    C++: Note that INIT might be a TREE_LIST, which would mean that it is
552    a base class initializer for some aggregate type, hopefully compatible
553    with DECL.  If INIT is a single element, and DECL is an aggregate
554    type, we silently convert INIT into a TREE_LIST, allowing a constructor
555    to be called.
556
557    If INIT is a TREE_LIST and there is no constructor, turn INIT
558    into a CONSTRUCTOR and use standard initialization techniques.
559    Perhaps a warning should be generated?
560
561    Returns code to be executed if initialization could not be performed
562    for static variable.  In that case, caller must emit the code.  */
563
564 tree
565 store_init_value (tree decl, tree init)
566 {
567   tree value, type;
568
569   /* If variable's type was invalidly declared, just ignore it.  */
570
571   type = TREE_TYPE (decl);
572   if (TREE_CODE (type) == ERROR_MARK)
573     return NULL_TREE;
574
575   if (IS_AGGR_TYPE (type))
576     {
577       gcc_assert (TYPE_HAS_TRIVIAL_INIT_REF (type)
578                   || TREE_CODE (init) == CONSTRUCTOR);
579
580       if (TREE_CODE (init) == TREE_LIST)
581         {
582           error ("constructor syntax used, but no constructor declared "
583                  "for type %qT", type);
584           init = build_constructor (NULL_TREE, nreverse (init));
585         }
586     }
587   else if (TREE_CODE (init) == TREE_LIST
588            && TREE_TYPE (init) != unknown_type_node)
589     {
590       if (TREE_CODE (decl) == RESULT_DECL)
591         init = build_x_compound_expr_from_list (init,
592                                                 "return value initializer");
593       else if (TREE_CODE (init) == TREE_LIST
594                && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
595         {
596           error ("cannot initialize arrays using this syntax");
597           return NULL_TREE;
598         }
599       else
600         /* We get here with code like `int a (2);' */
601         init = build_x_compound_expr_from_list (init, "initializer");
602     }
603
604   /* End of special C++ code.  */
605
606   /* Digest the specified initializer into an expression.  */
607   value = digest_init (type, init, (tree *) 0);
608   /* If the initializer is not a constant, fill in DECL_INITIAL with
609      the bits that are constant, and then return an expression that
610      will perform the dynamic initialization.  */
611   if (value != error_mark_node
612       && (TREE_SIDE_EFFECTS (value)
613            || ! initializer_constant_valid_p (value, TREE_TYPE (value))))
614     return split_nonconstant_init (decl, value);
615   /* If the value is a constant, just put it in DECL_INITIAL.  If DECL
616      is an automatic variable, the middle end will turn this into a
617      dynamic initialization later.  */
618   DECL_INITIAL (decl) = value;
619   return NULL_TREE;
620 }
621
622 \f
623 /* Digest the parser output INIT as an initializer for type TYPE.
624    Return a C expression of type TYPE to represent the initial value.
625
626    If TAIL is nonzero, it points to a variable holding a list of elements
627    of which INIT is the first.  We update the list stored there by
628    removing from the head all the elements that we use.
629    Normally this is only one; we use more than one element only if
630    TYPE is an aggregate and INIT is not a constructor.  */
631
632 tree
633 digest_init (tree type, tree init, tree* tail)
634 {
635   enum tree_code code = TREE_CODE (type);
636   tree element = NULL_TREE;
637   tree old_tail_contents = NULL_TREE;
638
639   /* By default, assume we use one element from a list.
640      We correct this later in the sole case where it is not true.  */
641
642   if (tail)
643     {
644       old_tail_contents = *tail;
645       *tail = TREE_CHAIN (*tail);
646     }
647
648   if (init == error_mark_node || (TREE_CODE (init) == TREE_LIST
649                                   && TREE_VALUE (init) == error_mark_node))
650     return error_mark_node;
651
652   if (TREE_CODE (init) == ERROR_MARK)
653     /* __PRETTY_FUNCTION__'s initializer is a bogus expression inside
654        a template function. This gets substituted during instantiation.  */
655     return init;
656
657   /* We must strip the outermost array type when completing the type,
658      because the its bounds might be incomplete at the moment.  */
659   if (!complete_type_or_else (TREE_CODE (type) == ARRAY_TYPE
660                               ? TREE_TYPE (type) : type, NULL_TREE))
661     return error_mark_node;
662   
663   /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue.  */
664   if (TREE_CODE (init) == NON_LVALUE_EXPR)
665     init = TREE_OPERAND (init, 0);
666
667   if (BRACE_ENCLOSED_INITIALIZER_P (init)
668       && CONSTRUCTOR_ELTS (init) != 0
669       && TREE_CHAIN (CONSTRUCTOR_ELTS (init)) == 0)
670     {
671       element = TREE_VALUE (CONSTRUCTOR_ELTS (init));
672       /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue.  */
673       if (element && TREE_CODE (element) == NON_LVALUE_EXPR)
674         element = TREE_OPERAND (element, 0);
675       if (element == error_mark_node)
676         return element;
677     }
678
679   /* Initialization of an array of chars from a string constant
680      optionally enclosed in braces.  */
681
682   if (code == ARRAY_TYPE)
683     {
684       tree typ1;
685
686       if (TREE_CODE (init) == TREE_LIST)
687         {
688           error ("initializing array with parameter list");
689           return error_mark_node;
690         }
691
692       typ1 = TYPE_MAIN_VARIANT (TREE_TYPE (type));
693       if (char_type_p (typ1)
694           && ((init && TREE_CODE (init) == STRING_CST)
695               || (element && TREE_CODE (element) == STRING_CST)))
696         {
697           tree string = element ? element : init;
698
699           if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (string)))
700                != char_type_node)
701               && TYPE_PRECISION (typ1) == BITS_PER_UNIT)
702             {
703               error ("char-array initialized from wide string");
704               return error_mark_node;
705             }
706           if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (string)))
707                == char_type_node)
708               && TYPE_PRECISION (typ1) != BITS_PER_UNIT)
709             {
710               error ("int-array initialized from non-wide string");
711               return error_mark_node;
712             }
713
714           TREE_TYPE (string) = type;
715           if (TYPE_DOMAIN (type) != 0
716               && TREE_CONSTANT (TYPE_SIZE (type)))
717             {
718               int size = TREE_INT_CST_LOW (TYPE_SIZE (type));
719               size = (size + BITS_PER_UNIT - 1) / BITS_PER_UNIT;
720               /* In C it is ok to subtract 1 from the length of the string
721                  because it's ok to ignore the terminating null char that is
722                  counted in the length of the constant, but in C++ this would
723                  be invalid.  */
724               if (size < TREE_STRING_LENGTH (string))
725                 pedwarn ("initializer-string for array of chars is too long");
726             }
727           return string;
728         }
729     }
730
731   /* Handle scalar types, including conversions,
732      and signature pointers and references.  */
733
734   if (code == INTEGER_TYPE || code == REAL_TYPE || code == POINTER_TYPE
735       || code == ENUMERAL_TYPE || code == REFERENCE_TYPE
736       || code == BOOLEAN_TYPE || code == COMPLEX_TYPE
737       || TYPE_PTR_TO_MEMBER_P (type))
738     {
739       if (BRACE_ENCLOSED_INITIALIZER_P (init))
740         {
741           if (element == 0)
742             {
743               error ("initializer for scalar variable requires one element");
744               return error_mark_node;
745             }
746           init = element;
747         }
748       while (BRACE_ENCLOSED_INITIALIZER_P (init))
749         {
750           pedwarn ("braces around scalar initializer for %qT", type);
751           init = CONSTRUCTOR_ELTS (init);
752           if (TREE_CHAIN (init))
753             pedwarn ("ignoring extra initializers for %qT", type);
754           init = TREE_VALUE (init);
755         }
756
757       return convert_for_initialization (0, type, init, LOOKUP_NORMAL,
758                                          "initialization", NULL_TREE, 0);
759     }
760
761   /* Come here only for records and arrays (and unions with constructors).  */
762
763   if (COMPLETE_TYPE_P (type) && ! TREE_CONSTANT (TYPE_SIZE (type)))
764     {
765       error ("variable-sized object of type %qT may not be initialized",
766                 type);
767       return error_mark_node;
768     }
769
770   if (code == ARRAY_TYPE || code == VECTOR_TYPE || IS_AGGR_TYPE_CODE (code))
771     {
772       if (BRACE_ENCLOSED_INITIALIZER_P (init))
773         {
774           if (TYPE_NON_AGGREGATE_CLASS (type))
775             {
776               error ("subobject of type %qT must be initialized by "
777                      "constructor, not by %qE",
778                      type, init);
779               return error_mark_node;
780             }
781           return process_init_constructor (type, init, (tree *)0);
782         }
783       else if (can_convert_arg (type, TREE_TYPE (init), init)
784                || TYPE_NON_AGGREGATE_CLASS (type))
785         /* These are never initialized from multiple constructor elements.  */;
786       else if (tail != 0)
787         {
788           *tail = old_tail_contents;
789           return process_init_constructor (type, 0, tail);
790         }
791
792       if (code != ARRAY_TYPE)
793         {
794           int flags = LOOKUP_NORMAL;
795           /* Initialization from { } is copy-initialization.  */
796           if (tail)
797             flags |= LOOKUP_ONLYCONVERTING;
798
799           return convert_for_initialization (NULL_TREE, type, init, flags,
800                                              "initialization", NULL_TREE, 0);
801         }
802     }
803
804   error ("invalid initializer");
805   return error_mark_node;
806 }
807 \f
808 /* Process a constructor for a variable of type TYPE.
809    The constructor elements may be specified either with INIT or with ELTS,
810    only one of which should be non-null.
811
812    If INIT is specified, it is a CONSTRUCTOR node which is specifically
813    and solely for initializing this datum.
814
815    If ELTS is specified, it is the address of a variable containing
816    a list of expressions.  We take as many elements as we need
817    from the head of the list and update the list.
818
819    In the resulting constructor, TREE_CONSTANT is set if all elts are
820    constant, and TREE_STATIC is set if, in addition, all elts are simple enough
821    constants that the assembler and linker can compute them.  */
822
823 static tree
824 process_init_constructor (tree type, tree init, tree* elts)
825 {
826   tree tail;
827   /* List of the elements of the result constructor,
828      in reverse order.  */
829   tree members = NULL;
830   tree next1;
831   tree result;
832   int allconstant = 1;
833   int allsimple = 1;
834   int erroneous = 0;
835
836   /* Make TAIL be the list of elements to use for the initialization,
837      no matter how the data was given to us.  */
838
839   if (elts)
840     {
841       if (warn_missing_braces)
842         warning ("aggregate has a partly bracketed initializer");
843       tail = *elts;
844     }
845   else
846     tail = CONSTRUCTOR_ELTS (init);
847
848   /* Gobble as many elements as needed, and make a constructor or initial value
849      for each element of this aggregate.  Chain them together in result.
850      If there are too few, use 0 for each scalar ultimate component.  */
851
852   if (TREE_CODE (type) == ARRAY_TYPE || TREE_CODE (type) == VECTOR_TYPE)
853     {
854       long len;
855       int i;
856
857       if (TREE_CODE (type) == ARRAY_TYPE)
858         {
859           tree domain = TYPE_DOMAIN (type);
860           if (domain)
861             len = (TREE_INT_CST_LOW (TYPE_MAX_VALUE (domain))
862                    - TREE_INT_CST_LOW (TYPE_MIN_VALUE (domain))
863                    + 1);
864           else
865             len = -1;  /* Take as many as there are.  */
866         }
867       else
868         {
869           /* Vectors are like simple fixed-size arrays.  */
870           len = TYPE_VECTOR_SUBPARTS (type);
871         }
872
873       for (i = 0; len < 0 || i < len; i++)
874         {
875           if (tail)
876             {
877               if (TREE_PURPOSE (tail)
878                   && (TREE_CODE (TREE_PURPOSE (tail)) != INTEGER_CST
879                       || compare_tree_int (TREE_PURPOSE (tail), i) != 0))
880                 sorry ("non-trivial labeled initializers");
881
882               if (TREE_VALUE (tail) != 0)
883                 {
884                   tree tail1 = tail;
885                   next1 = digest_init (TREE_TYPE (type),
886                                        TREE_VALUE (tail), &tail1);
887                   if (next1 == error_mark_node)
888                     return next1;
889                   gcc_assert (same_type_ignoring_top_level_qualifiers_p
890                               (TREE_TYPE (type), TREE_TYPE (next1)));
891                   gcc_assert (!tail1 || TREE_CODE (tail1) == TREE_LIST);
892                   if (tail == tail1 && len < 0)
893                     {
894                       error ("non-empty initializer for array of empty elements");
895                       /* Just ignore what we were supposed to use.  */
896                       tail1 = NULL_TREE;
897                     }
898                   tail = tail1;
899                 }
900               else
901                 {
902                   next1 = error_mark_node;
903                   tail = TREE_CHAIN (tail);
904                 }
905             }
906           else if (len < 0)
907             /* We're done.  */
908             break;
909           else if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (type)))
910             {
911               /* If this type needs constructors run for
912                  default-initialization, we can't rely on the backend to do it
913                  for us, so build up TARGET_EXPRs.  If the type in question is
914                  a class, just build one up; if it's an array, recurse.  */
915
916               if (IS_AGGR_TYPE (TREE_TYPE (type)))
917                 next1 = build_functional_cast (TREE_TYPE (type), NULL_TREE);
918               else
919                 next1 = build_constructor (NULL_TREE, NULL_TREE);
920               next1 = digest_init (TREE_TYPE (type), next1, 0);
921             }
922           else if (! zero_init_p (TREE_TYPE (type)))
923             next1 = build_zero_init (TREE_TYPE (type),
924                                      /*nelts=*/NULL_TREE,
925                                      /*static_storage_p=*/false);
926           else
927             /* The default zero-initialization is fine for us; don't
928                add anything to the CONSTRUCTOR.  */
929             break;
930
931           if (next1 == error_mark_node)
932             erroneous = 1;
933           else if (!TREE_CONSTANT (next1))
934             allconstant = 0;
935           else if (! initializer_constant_valid_p (next1, TREE_TYPE (next1)))
936             allsimple = 0;
937           members = tree_cons (size_int (i), next1, members);
938         }
939     }
940   else if (TREE_CODE (type) == RECORD_TYPE)
941     {
942       tree field;
943
944       if (tail)
945         {
946           gcc_assert (!CLASSTYPE_VBASECLASSES (type));
947           gcc_assert (!TYPE_BINFO (type)
948                       || !BINFO_N_BASE_BINFOS (TYPE_BINFO (type)));
949           gcc_assert (!TYPE_POLYMORPHIC_P (type));
950         }
951
952       for (field = TYPE_FIELDS (type); field;
953            field = TREE_CHAIN (field))
954         {
955           if (! DECL_NAME (field) && DECL_C_BIT_FIELD (field))
956             {
957               members = tree_cons (field, integer_zero_node, members);
958               continue;
959             }
960
961           if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field))
962             continue;
963
964           if (tail)
965             {
966               if (TREE_PURPOSE (tail)
967                   && TREE_PURPOSE (tail) != field
968                   && TREE_PURPOSE (tail) != DECL_NAME (field))
969                 sorry ("non-trivial labeled initializers");
970
971               if (TREE_VALUE (tail) != 0)
972                 {
973                   tree tail1 = tail;
974
975                   next1 = digest_init (TREE_TYPE (field),
976                                        TREE_VALUE (tail), &tail1);
977                   gcc_assert (!tail1 || TREE_CODE (tail1) == TREE_LIST);
978                   tail = tail1;
979                 }
980               else
981                 {
982                   next1 = error_mark_node;
983                   tail = TREE_CHAIN (tail);
984                 }
985             }
986           else if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (field)))
987             {
988               /* If this type needs constructors run for
989                  default-initialization, we can't rely on the backend to do it
990                  for us, so build up TARGET_EXPRs.  If the type in question is
991                  a class, just build one up; if it's an array, recurse.  */
992
993               if (IS_AGGR_TYPE (TREE_TYPE (field)))
994                 next1 = build_functional_cast (TREE_TYPE (field),
995                                                NULL_TREE);
996               else
997                 {
998                   next1 = build_constructor (NULL_TREE, NULL_TREE);
999                   if (init)
1000                     TREE_HAS_CONSTRUCTOR (next1)
1001                        = TREE_HAS_CONSTRUCTOR (init);
1002                 }
1003               next1 = digest_init (TREE_TYPE (field), next1, 0);
1004
1005               /* Warn when some struct elements are implicitly initialized.  */
1006               if (warn_missing_field_initializers
1007                   && (!init || BRACE_ENCLOSED_INITIALIZER_P (init)))
1008                 warning ("missing initializer for member %qD", field);
1009             }
1010           else
1011             {
1012               if (TREE_READONLY (field))
1013                 error ("uninitialized const member %qD", field);
1014               else if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (TREE_TYPE (field)))
1015                 error ("member %qD with uninitialized const fields", field);
1016               else if (TREE_CODE (TREE_TYPE (field)) == REFERENCE_TYPE)
1017                 error ("member %qD is uninitialized reference", field);
1018
1019               /* Warn when some struct elements are implicitly initialized
1020                  to zero.  */
1021               if (warn_missing_field_initializers
1022                   && (!init || BRACE_ENCLOSED_INITIALIZER_P (init)))
1023                 warning ("missing initializer for member %qD", field);
1024
1025               if (! zero_init_p (TREE_TYPE (field)))
1026                 next1 = build_zero_init (TREE_TYPE (field),
1027                                          /*nelts=*/NULL_TREE,
1028                                          /*static_storage_p=*/false);
1029               else
1030                 /* The default zero-initialization is fine for us; don't
1031                    add anything to the CONSTRUCTOR.  */
1032                 continue;
1033             }
1034
1035           if (next1 == error_mark_node)
1036             erroneous = 1;
1037           else if (!TREE_CONSTANT (next1))
1038             allconstant = 0;
1039           else if (! initializer_constant_valid_p (next1, TREE_TYPE (next1)))
1040             allsimple = 0;
1041           members = tree_cons (field, next1, members);
1042         }
1043     }
1044   else if (TREE_CODE (type) == UNION_TYPE
1045            /* If the initializer was empty, use default zero initialization.  */
1046            && tail)
1047     {
1048       tree field = TYPE_FIELDS (type);
1049
1050       /* Find the first named field.  ANSI decided in September 1990
1051          that only named fields count here.  */
1052       while (field && (!DECL_NAME (field) || TREE_CODE (field) != FIELD_DECL))
1053         field = TREE_CHAIN (field);
1054
1055       /* If this element specifies a field, initialize via that field.  */
1056       if (TREE_PURPOSE (tail) != NULL_TREE)
1057         {
1058           int win = 0;
1059
1060           if (TREE_CODE (TREE_PURPOSE (tail)) == FIELD_DECL)
1061             /* Handle the case of a call by build_c_cast.  */
1062             field = TREE_PURPOSE (tail), win = 1;
1063           else if (TREE_CODE (TREE_PURPOSE (tail)) != IDENTIFIER_NODE)
1064             error ("index value instead of field name in union initializer");
1065           else
1066             {
1067               tree temp;
1068               for (temp = TYPE_FIELDS (type);
1069                    temp;
1070                    temp = TREE_CHAIN (temp))
1071                 if (DECL_NAME (temp) == TREE_PURPOSE (tail))
1072                   break;
1073               if (temp)
1074                 field = temp, win = 1;
1075               else
1076                 error ("no field %qD in union being initialized",
1077                        TREE_PURPOSE (tail));
1078             }
1079           if (!win)
1080             TREE_VALUE (tail) = error_mark_node;
1081         }
1082       else if (field == 0)
1083         {
1084           error ("union %qT with no named members cannot be initialized",
1085                  type);
1086           TREE_VALUE (tail) = error_mark_node;
1087         }
1088
1089       if (TREE_VALUE (tail) != 0)
1090         {
1091           tree tail1 = tail;
1092
1093           next1 = digest_init (TREE_TYPE (field),
1094                                TREE_VALUE (tail), &tail1);
1095           gcc_assert (!tail1 || TREE_CODE (tail1) == TREE_LIST);
1096           tail = tail1;
1097         }
1098       else
1099         {
1100           next1 = error_mark_node;
1101           tail = TREE_CHAIN (tail);
1102         }
1103
1104       if (next1 == error_mark_node)
1105         erroneous = 1;
1106       else if (!TREE_CONSTANT (next1))
1107         allconstant = 0;
1108       else if (initializer_constant_valid_p (next1, TREE_TYPE (next1)) == 0)
1109         allsimple = 0;
1110       members = tree_cons (field, next1, members);
1111     }
1112
1113   /* If arguments were specified as a list, just remove the ones we used.  */
1114   if (elts)
1115     *elts = tail;
1116   /* If arguments were specified as a constructor,
1117      complain unless we used all the elements of the constructor.  */
1118   else if (tail)
1119     pedwarn ("excess elements in aggregate initializer");
1120
1121   if (erroneous)
1122     return error_mark_node;
1123
1124   result = build_constructor (type, nreverse (members));
1125   if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type) == NULL_TREE)
1126     cp_complete_array_type (&TREE_TYPE (result), result, /*do_default=*/0);
1127   if (init)
1128     TREE_HAS_CONSTRUCTOR (result) = TREE_HAS_CONSTRUCTOR (init);
1129   if (allconstant)
1130     {
1131       TREE_CONSTANT (result) = 1;
1132       TREE_INVARIANT (result) = 1;
1133       if (allsimple)
1134         TREE_STATIC (result) = 1;
1135     }
1136   return result;
1137 }
1138 \f
1139 /* Given a structure or union value DATUM, construct and return
1140    the structure or union component which results from narrowing
1141    that value to the base specified in BASETYPE.  For example, given the
1142    hierarchy
1143
1144    class L { int ii; };
1145    class A : L { ... };
1146    class B : L { ... };
1147    class C : A, B { ... };
1148
1149    and the declaration
1150
1151    C x;
1152
1153    then the expression
1154
1155    x.A::ii refers to the ii member of the L part of
1156    the A part of the C object named by X.  In this case,
1157    DATUM would be x, and BASETYPE would be A.
1158
1159    I used to think that this was nonconformant, that the standard specified
1160    that first we look up ii in A, then convert x to an L& and pull out the
1161    ii part.  But in fact, it does say that we convert x to an A&; A here
1162    is known as the "naming class".  (jason 2000-12-19)
1163
1164    BINFO_P points to a variable initialized either to NULL_TREE or to the
1165    binfo for the specific base subobject we want to convert to.  */
1166
1167 tree
1168 build_scoped_ref (tree datum, tree basetype, tree* binfo_p)
1169 {
1170   tree binfo;
1171
1172   if (datum == error_mark_node)
1173     return error_mark_node;
1174   if (*binfo_p)
1175     binfo = *binfo_p;
1176   else
1177     binfo = lookup_base (TREE_TYPE (datum), basetype, ba_check, NULL);
1178
1179   if (!binfo || binfo == error_mark_node)
1180     {
1181       *binfo_p = NULL_TREE;
1182       if (!binfo)
1183         error_not_base_type (basetype, TREE_TYPE (datum));
1184       return error_mark_node;
1185     }
1186
1187   *binfo_p = binfo;
1188   return build_base_path (PLUS_EXPR, datum, binfo, 1);
1189 }
1190
1191 /* Build a reference to an object specified by the C++ `->' operator.
1192    Usually this just involves dereferencing the object, but if the
1193    `->' operator is overloaded, then such overloads must be
1194    performed until an object which does not have the `->' operator
1195    overloaded is found.  An error is reported when circular pointer
1196    delegation is detected.  */
1197
1198 tree
1199 build_x_arrow (tree expr)
1200 {
1201   tree orig_expr = expr;
1202   tree types_memoized = NULL_TREE;
1203   tree type = TREE_TYPE (expr);
1204   tree last_rval = NULL_TREE;
1205
1206   if (type == error_mark_node)
1207     return error_mark_node;
1208
1209   if (processing_template_decl)
1210     {
1211       if (type_dependent_expression_p (expr))
1212         return build_min_nt (ARROW_EXPR, expr);
1213       expr = build_non_dependent_expr (expr);
1214     }
1215
1216   if (IS_AGGR_TYPE (type))
1217     {
1218       while ((expr = build_new_op (COMPONENT_REF, LOOKUP_NORMAL, expr,
1219                                    NULL_TREE, NULL_TREE,
1220                                    /*overloaded_p=*/NULL)))
1221         {
1222           if (expr == error_mark_node)
1223             return error_mark_node;
1224
1225           if (value_member (TREE_TYPE (expr), types_memoized))
1226             {
1227               error ("circular pointer delegation detected");
1228               return error_mark_node;
1229             }
1230           else
1231             {
1232               types_memoized = tree_cons (NULL_TREE, TREE_TYPE (expr),
1233                                           types_memoized);
1234             }
1235           last_rval = expr;
1236         }     
1237
1238       if (last_rval == NULL_TREE)
1239         {
1240           error ("base operand of %<->%> has non-pointer type %qT", type);
1241           return error_mark_node;
1242         }
1243
1244       if (TREE_CODE (TREE_TYPE (last_rval)) == REFERENCE_TYPE)
1245         last_rval = convert_from_reference (last_rval);
1246     }
1247   else
1248     last_rval = decay_conversion (expr);
1249
1250   if (TREE_CODE (TREE_TYPE (last_rval)) == POINTER_TYPE)
1251     {
1252       if (processing_template_decl)
1253         {
1254           expr = build_min_non_dep (ARROW_EXPR, last_rval, orig_expr);
1255           /* It will be dereferenced.  */
1256           TREE_TYPE (expr) = TREE_TYPE (TREE_TYPE (last_rval));
1257           return expr;
1258         }
1259
1260       return build_indirect_ref (last_rval, NULL);
1261     }
1262
1263   if (types_memoized)
1264     error ("result of %<operator->()%> yields non-pointer result");
1265   else
1266     error ("base operand of %<->%> is not a pointer");
1267   return error_mark_node;
1268 }
1269
1270 /* Return an expression for "DATUM .* COMPONENT".  DATUM has not
1271    already been checked out to be of aggregate type.  */
1272
1273 tree
1274 build_m_component_ref (tree datum, tree component)
1275 {
1276   tree ptrmem_type;
1277   tree objtype;
1278   tree type;
1279   tree binfo;
1280   tree ctype;
1281
1282   datum = decay_conversion (datum);
1283
1284   if (datum == error_mark_node || component == error_mark_node)
1285     return error_mark_node;
1286
1287   ptrmem_type = TREE_TYPE (component);
1288   if (!TYPE_PTR_TO_MEMBER_P (ptrmem_type))
1289     {
1290       error ("%qE cannot be used as a member pointer, since it is of "
1291              "type %qT", 
1292              component, ptrmem_type);
1293       return error_mark_node;
1294     }
1295     
1296   objtype = TYPE_MAIN_VARIANT (TREE_TYPE (datum));  
1297   if (! IS_AGGR_TYPE (objtype))
1298     {
1299       error ("cannot apply member pointer %qE to %qE, which is of "
1300              "non-aggregate type %qT",
1301              component, datum, objtype);
1302       return error_mark_node;
1303     }
1304
1305   type = TYPE_PTRMEM_POINTED_TO_TYPE (ptrmem_type);
1306   ctype = complete_type (TYPE_PTRMEM_CLASS_TYPE (ptrmem_type));
1307
1308   if (!COMPLETE_TYPE_P (ctype))
1309     {
1310       if (!same_type_p (ctype, objtype))
1311         goto mismatch;
1312       binfo = NULL;
1313     }
1314   else
1315     {
1316       binfo = lookup_base (objtype, ctype, ba_check, NULL);
1317       
1318       if (!binfo)
1319         {
1320         mismatch:
1321           error ("pointer to member type %qT incompatible with object "
1322                  "type %qT",
1323                  type, objtype);
1324           return error_mark_node;
1325         }
1326       else if (binfo == error_mark_node)
1327         return error_mark_node;
1328     }
1329
1330   if (TYPE_PTRMEM_P (ptrmem_type))
1331     {
1332       /* Compute the type of the field, as described in [expr.ref].
1333          There's no such thing as a mutable pointer-to-member, so
1334          things are not as complex as they are for references to
1335          non-static data members.  */
1336       type = cp_build_qualified_type (type,
1337                                       (cp_type_quals (type)  
1338                                        | cp_type_quals (TREE_TYPE (datum))));
1339
1340       datum = build_address (datum);
1341       
1342       /* Convert object to the correct base.  */
1343       if (binfo)
1344         datum = build_base_path (PLUS_EXPR, datum, binfo, 1);
1345       
1346       /* Build an expression for "object + offset" where offset is the
1347          value stored in the pointer-to-data-member.  */
1348       datum = build2 (PLUS_EXPR, build_pointer_type (type),
1349                       datum, build_nop (ptrdiff_type_node, component));
1350       return build_indirect_ref (datum, 0);
1351     }
1352   else
1353     return build2 (OFFSET_REF, type, datum, component);
1354 }
1355
1356 /* Return a tree node for the expression TYPENAME '(' PARMS ')'.  */
1357
1358 tree
1359 build_functional_cast (tree exp, tree parms)
1360 {
1361   /* This is either a call to a constructor,
1362      or a C cast in C++'s `functional' notation.  */
1363   tree type;
1364
1365   if (exp == error_mark_node || parms == error_mark_node)
1366     return error_mark_node;
1367
1368   if (TREE_CODE (exp) == TYPE_DECL)
1369     type = TREE_TYPE (exp);
1370   else
1371     type = exp;
1372
1373   if (processing_template_decl)
1374     {
1375       tree t = build_min (CAST_EXPR, type, parms);
1376       /* We don't know if it will or will not have side effects.  */
1377       TREE_SIDE_EFFECTS (t) = 1;
1378       return t;
1379     }
1380
1381   if (! IS_AGGR_TYPE (type))
1382     {
1383       /* This must build a C cast.  */
1384       if (parms == NULL_TREE)
1385         parms = integer_zero_node;
1386       else
1387         parms = build_x_compound_expr_from_list (parms, "functional cast");
1388
1389       return build_c_cast (type, parms);
1390     }
1391
1392   /* Prepare to evaluate as a call to a constructor.  If this expression
1393      is actually used, for example,
1394          
1395      return X (arg1, arg2, ...);
1396          
1397      then the slot being initialized will be filled in.  */
1398
1399   if (!complete_type_or_else (type, NULL_TREE))
1400     return error_mark_node;
1401   if (abstract_virtuals_error (NULL_TREE, type))
1402     return error_mark_node;
1403
1404   if (parms && TREE_CHAIN (parms) == NULL_TREE)
1405     return build_c_cast (type, TREE_VALUE (parms));
1406
1407   /* We need to zero-initialize POD types.  Let's do that for everything
1408      that doesn't need a constructor.  */
1409   if (parms == NULL_TREE && !TYPE_NEEDS_CONSTRUCTING (type)
1410       && TYPE_HAS_DEFAULT_CONSTRUCTOR (type))
1411     {
1412       exp = build_constructor (type, NULL_TREE);
1413       return get_target_expr (exp);
1414     }
1415
1416   exp = build_special_member_call (NULL_TREE, complete_ctor_identifier, parms,
1417                                    type, LOOKUP_NORMAL);
1418
1419   if (exp == error_mark_node)
1420     return error_mark_node;
1421
1422   return build_cplus_new (type, exp);
1423 }
1424 \f
1425
1426 /* Add new exception specifier SPEC, to the LIST we currently have.
1427    If it's already in LIST then do nothing.
1428    Moan if it's bad and we're allowed to. COMPLAIN < 0 means we
1429    know what we're doing.  */
1430
1431 tree
1432 add_exception_specifier (tree list, tree spec, int complain)
1433 {
1434   bool ok;
1435   tree core = spec;
1436   bool is_ptr;
1437   int diag_type = -1; /* none */
1438   
1439   if (spec == error_mark_node)
1440     return list;
1441   
1442   gcc_assert (spec && (!list || TREE_VALUE (list)));
1443   
1444   /* [except.spec] 1, type in an exception specifier shall not be
1445      incomplete, or pointer or ref to incomplete other than pointer
1446      to cv void.  */
1447   is_ptr = TREE_CODE (core) == POINTER_TYPE;
1448   if (is_ptr || TREE_CODE (core) == REFERENCE_TYPE)
1449     core = TREE_TYPE (core);
1450   if (complain < 0)
1451     ok = true;
1452   else if (VOID_TYPE_P (core))
1453     ok = is_ptr;
1454   else if (TREE_CODE (core) == TEMPLATE_TYPE_PARM)
1455     ok = true;
1456   else if (processing_template_decl)
1457     ok = true;
1458   else
1459     {
1460       ok = true;
1461       /* 15.4/1 says that types in an exception specifier must be complete,
1462          but it seems more reasonable to only require this on definitions
1463          and calls.  So just give a pedwarn at this point; we will give an
1464          error later if we hit one of those two cases.  */
1465       if (!COMPLETE_TYPE_P (complete_type (core)))
1466         diag_type = 2; /* pedwarn */
1467     }
1468
1469   if (ok)
1470     {
1471       tree probe;
1472       
1473       for (probe = list; probe; probe = TREE_CHAIN (probe))
1474         if (same_type_p (TREE_VALUE (probe), spec))
1475           break;
1476       if (!probe)
1477         list = tree_cons (NULL_TREE, spec, list);
1478     }
1479   else
1480     diag_type = 0; /* error */
1481     
1482   if (diag_type >= 0 && complain)
1483     cxx_incomplete_type_diagnostic (NULL_TREE, core, diag_type);
1484
1485   return list;
1486 }
1487
1488 /* Combine the two exceptions specifier lists LIST and ADD, and return
1489    their union.  */
1490
1491 tree
1492 merge_exception_specifiers (tree list, tree add)
1493 {
1494   if (!list || !add)
1495     return NULL_TREE;
1496   else if (!TREE_VALUE (list))
1497     return add;
1498   else if (!TREE_VALUE (add))
1499     return list;
1500   else
1501     {
1502       tree orig_list = list;
1503       
1504       for (; add; add = TREE_CHAIN (add))
1505         {
1506           tree spec = TREE_VALUE (add);
1507           tree probe;
1508           
1509           for (probe = orig_list; probe; probe = TREE_CHAIN (probe))
1510             if (same_type_p (TREE_VALUE (probe), spec))
1511               break;
1512           if (!probe)
1513             {
1514               spec = build_tree_list (NULL_TREE, spec);
1515               TREE_CHAIN (spec) = list;
1516               list = spec;
1517             }
1518         }
1519     }
1520   return list;
1521 }
1522
1523 /* Subroutine of build_call.  Ensure that each of the types in the
1524    exception specification is complete.  Technically, 15.4/1 says that
1525    they need to be complete when we see a declaration of the function,
1526    but we should be able to get away with only requiring this when the
1527    function is defined or called.  See also add_exception_specifier.  */
1528
1529 void
1530 require_complete_eh_spec_types (tree fntype, tree decl)
1531 {
1532   tree raises;
1533   /* Don't complain about calls to op new.  */
1534   if (decl && DECL_ARTIFICIAL (decl))
1535     return;
1536   for (raises = TYPE_RAISES_EXCEPTIONS (fntype); raises;
1537        raises = TREE_CHAIN (raises))
1538     {
1539       tree type = TREE_VALUE (raises);
1540       if (type && !COMPLETE_TYPE_P (type))
1541         {
1542           if (decl)
1543             error
1544               ("call to function %qD which throws incomplete type %q#T",
1545                decl, type);
1546           else
1547             error ("call to function which throws incomplete type %q#T",
1548                    decl);
1549         }
1550     }
1551 }
1552
1553 \f
1554 #include "gt-cp-typeck2.h"