OSDN Git Service

PR c++/15172
[pf3gnuchains/gcc-fork.git] / 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
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           CONSTRUCTOR_ELTS (init) = NULL;
510           code = build2 (MODIFY_EXPR, type, dest, init);
511           code = build_stmt (EXPR_STMT, code);
512           add_stmt (code);
513         }
514       break;
515
516     default:
517       gcc_unreachable ();
518     }
519 }
520
521 /* A subroutine of store_init_value.  Splits non-constant static 
522    initializer INIT into a constant part and generates code to
523    perform the non-constant part of the initialization to DEST.
524    Returns the code for the runtime init.  */
525
526 static tree
527 split_nonconstant_init (tree dest, tree init)
528 {
529   tree code;
530
531   if (TREE_CODE (init) == CONSTRUCTOR)
532     {
533       code = push_stmt_list ();
534       split_nonconstant_init_1 (dest, init);
535       code = pop_stmt_list (code);
536       DECL_INITIAL (dest) = init;
537       TREE_READONLY (dest) = 0;
538     }
539   else
540     code = build2 (INIT_EXPR, TREE_TYPE (dest), dest, init);
541
542   return code;
543 }
544
545 /* Perform appropriate conversions on the initial value of a variable,
546    store it in the declaration DECL,
547    and print any error messages that are appropriate.
548    If the init is invalid, store an ERROR_MARK.
549
550    C++: Note that INIT might be a TREE_LIST, which would mean that it is
551    a base class initializer for some aggregate type, hopefully compatible
552    with DECL.  If INIT is a single element, and DECL is an aggregate
553    type, we silently convert INIT into a TREE_LIST, allowing a constructor
554    to be called.
555
556    If INIT is a TREE_LIST and there is no constructor, turn INIT
557    into a CONSTRUCTOR and use standard initialization techniques.
558    Perhaps a warning should be generated?
559
560    Returns code to be executed if initialization could not be performed
561    for static variable.  In that case, caller must emit the code.  */
562
563 tree
564 store_init_value (tree decl, tree init)
565 {
566   tree value, type;
567
568   /* If variable's type was invalidly declared, just ignore it.  */
569
570   type = TREE_TYPE (decl);
571   if (TREE_CODE (type) == ERROR_MARK)
572     return NULL_TREE;
573
574   if (IS_AGGR_TYPE (type))
575     {
576       gcc_assert (TYPE_HAS_TRIVIAL_INIT_REF (type)
577                   || TREE_CODE (init) == CONSTRUCTOR);
578
579       if (TREE_CODE (init) == TREE_LIST)
580         {
581           error ("constructor syntax used, but no constructor declared "
582                  "for type %qT", type);
583           init = build_constructor (NULL_TREE, nreverse (init));
584         }
585     }
586   else if (TREE_CODE (init) == TREE_LIST
587            && TREE_TYPE (init) != unknown_type_node)
588     {
589       if (TREE_CODE (decl) == RESULT_DECL)
590         init = build_x_compound_expr_from_list (init,
591                                                 "return value initializer");
592       else if (TREE_CODE (init) == TREE_LIST
593                && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
594         {
595           error ("cannot initialize arrays using this syntax");
596           return NULL_TREE;
597         }
598       else
599         /* We get here with code like `int a (2);' */
600         init = build_x_compound_expr_from_list (init, "initializer");
601     }
602
603   /* End of special C++ code.  */
604
605   /* Digest the specified initializer into an expression.  */
606   value = digest_init (type, init, (tree *) 0);
607   /* If the initializer is not a constant, fill in DECL_INITIAL with
608      the bits that are constant, and then return an expression that
609      will perform the dynamic initialization.  */
610   if (value != error_mark_node
611       && (TREE_SIDE_EFFECTS (value)
612            || ! initializer_constant_valid_p (value, TREE_TYPE (value))))
613     return split_nonconstant_init (decl, value);
614   /* If the value is a constant, just put it in DECL_INITIAL.  If DECL
615      is an automatic variable, the middle end will turn this into a
616      dynamic initialization later.  */
617   DECL_INITIAL (decl) = value;
618   return NULL_TREE;
619 }
620
621 \f
622 /* Digest the parser output INIT as an initializer for type TYPE.
623    Return a C expression of type TYPE to represent the initial value.
624
625    If TAIL is nonzero, it points to a variable holding a list of elements
626    of which INIT is the first.  We update the list stored there by
627    removing from the head all the elements that we use.
628    Normally this is only one; we use more than one element only if
629    TYPE is an aggregate and INIT is not a constructor.  */
630
631 tree
632 digest_init (tree type, tree init, tree* tail)
633 {
634   enum tree_code code = TREE_CODE (type);
635   tree element = NULL_TREE;
636   tree old_tail_contents = NULL_TREE;
637
638   /* By default, assume we use one element from a list.
639      We correct this later in the sole case where it is not true.  */
640
641   if (tail)
642     {
643       old_tail_contents = *tail;
644       *tail = TREE_CHAIN (*tail);
645     }
646
647   if (init == error_mark_node || (TREE_CODE (init) == TREE_LIST
648                                   && TREE_VALUE (init) == error_mark_node))
649     return error_mark_node;
650
651   if (TREE_CODE (init) == ERROR_MARK)
652     /* __PRETTY_FUNCTION__'s initializer is a bogus expression inside
653        a template function. This gets substituted during instantiation.  */
654     return init;
655
656   /* We must strip the outermost array type when completing the type,
657      because the its bounds might be incomplete at the moment.  */
658   if (!complete_type_or_else (TREE_CODE (type) == ARRAY_TYPE
659                               ? TREE_TYPE (type) : type, NULL_TREE))
660     return error_mark_node;
661   
662   /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue.  */
663   if (TREE_CODE (init) == NON_LVALUE_EXPR)
664     init = TREE_OPERAND (init, 0);
665
666   if (BRACE_ENCLOSED_INITIALIZER_P (init)
667       && CONSTRUCTOR_ELTS (init) != 0
668       && TREE_CHAIN (CONSTRUCTOR_ELTS (init)) == 0)
669     {
670       element = TREE_VALUE (CONSTRUCTOR_ELTS (init));
671       /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue.  */
672       if (element && TREE_CODE (element) == NON_LVALUE_EXPR)
673         element = TREE_OPERAND (element, 0);
674       if (element == error_mark_node)
675         return element;
676     }
677
678   /* Initialization of an array of chars from a string constant
679      optionally enclosed in braces.  */
680
681   if (code == ARRAY_TYPE)
682     {
683       tree typ1;
684
685       if (TREE_CODE (init) == TREE_LIST)
686         {
687           error ("initializing array with parameter list");
688           return error_mark_node;
689         }
690
691       typ1 = TYPE_MAIN_VARIANT (TREE_TYPE (type));
692       if (char_type_p (typ1)
693           && ((init && TREE_CODE (init) == STRING_CST)
694               || (element && TREE_CODE (element) == STRING_CST)))
695         {
696           tree string = element ? element : init;
697
698           if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (string)))
699                != char_type_node)
700               && TYPE_PRECISION (typ1) == BITS_PER_UNIT)
701             {
702               error ("char-array initialized from wide string");
703               return error_mark_node;
704             }
705           if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (string)))
706                == char_type_node)
707               && TYPE_PRECISION (typ1) != BITS_PER_UNIT)
708             {
709               error ("int-array initialized from non-wide string");
710               return error_mark_node;
711             }
712
713           TREE_TYPE (string) = type;
714           if (TYPE_DOMAIN (type) != 0
715               && TREE_CONSTANT (TYPE_SIZE (type)))
716             {
717               int size = TREE_INT_CST_LOW (TYPE_SIZE (type));
718               size = (size + BITS_PER_UNIT - 1) / BITS_PER_UNIT;
719               /* In C it is ok to subtract 1 from the length of the string
720                  because it's ok to ignore the terminating null char that is
721                  counted in the length of the constant, but in C++ this would
722                  be invalid.  */
723               if (size < TREE_STRING_LENGTH (string))
724                 pedwarn ("initializer-string for array of chars is too long");
725             }
726           return string;
727         }
728     }
729
730   /* Handle scalar types, including conversions,
731      and signature pointers and references.  */
732
733   if (code == INTEGER_TYPE || code == REAL_TYPE || code == POINTER_TYPE
734       || code == ENUMERAL_TYPE || code == REFERENCE_TYPE
735       || code == BOOLEAN_TYPE || code == COMPLEX_TYPE
736       || TYPE_PTR_TO_MEMBER_P (type))
737     {
738       if (BRACE_ENCLOSED_INITIALIZER_P (init))
739         {
740           if (element == 0)
741             {
742               error ("initializer for scalar variable requires one element");
743               return error_mark_node;
744             }
745           init = element;
746         }
747       while (BRACE_ENCLOSED_INITIALIZER_P (init))
748         {
749           pedwarn ("braces around scalar initializer for %qT", type);
750           init = CONSTRUCTOR_ELTS (init);
751           if (TREE_CHAIN (init))
752             pedwarn ("ignoring extra initializers for %qT", type);
753           init = TREE_VALUE (init);
754         }
755
756       return convert_for_initialization (0, type, init, LOOKUP_NORMAL,
757                                          "initialization", NULL_TREE, 0);
758     }
759
760   /* Come here only for records and arrays (and unions with constructors).  */
761
762   if (COMPLETE_TYPE_P (type) && ! TREE_CONSTANT (TYPE_SIZE (type)))
763     {
764       error ("variable-sized object of type %qT may not be initialized",
765                 type);
766       return error_mark_node;
767     }
768
769   if (code == ARRAY_TYPE || code == VECTOR_TYPE || IS_AGGR_TYPE_CODE (code))
770     {
771       if (BRACE_ENCLOSED_INITIALIZER_P (init))
772         {
773           if (TYPE_NON_AGGREGATE_CLASS (type))
774             {
775               error ("subobject of type %qT must be initialized by "
776                      "constructor, not by %qE",
777                      type, init);
778               return error_mark_node;
779             }
780           return process_init_constructor (type, init, (tree *)0);
781         }
782       else if (can_convert_arg (type, TREE_TYPE (init), init)
783                || TYPE_NON_AGGREGATE_CLASS (type))
784         /* These are never initialized from multiple constructor elements.  */;
785       else if (tail != 0)
786         {
787           *tail = old_tail_contents;
788           return process_init_constructor (type, 0, tail);
789         }
790
791       if (code != ARRAY_TYPE)
792         {
793           int flags = LOOKUP_NORMAL;
794           /* Initialization from { } is copy-initialization.  */
795           if (tail)
796             flags |= LOOKUP_ONLYCONVERTING;
797
798           return convert_for_initialization (NULL_TREE, type, init, flags,
799                                              "initialization", NULL_TREE, 0);
800         }
801     }
802
803   error ("invalid initializer");
804   return error_mark_node;
805 }
806 \f
807 /* Process a constructor for a variable of type TYPE.
808    The constructor elements may be specified either with INIT or with ELTS,
809    only one of which should be non-null.
810
811    If INIT is specified, it is a CONSTRUCTOR node which is specifically
812    and solely for initializing this datum.
813
814    If ELTS is specified, it is the address of a variable containing
815    a list of expressions.  We take as many elements as we need
816    from the head of the list and update the list.
817
818    In the resulting constructor, TREE_CONSTANT is set if all elts are
819    constant, and TREE_STATIC is set if, in addition, all elts are simple enough
820    constants that the assembler and linker can compute them.  */
821
822 static tree
823 process_init_constructor (tree type, tree init, tree* elts)
824 {
825   tree tail;
826   /* List of the elements of the result constructor,
827      in reverse order.  */
828   tree members = NULL;
829   tree next1;
830   tree result;
831   int allconstant = 1;
832   int allsimple = 1;
833   int erroneous = 0;
834
835   /* Make TAIL be the list of elements to use for the initialization,
836      no matter how the data was given to us.  */
837
838   if (elts)
839     {
840       if (warn_missing_braces)
841         warning ("aggregate has a partly bracketed initializer");
842       tail = *elts;
843     }
844   else
845     tail = CONSTRUCTOR_ELTS (init);
846
847   /* Gobble as many elements as needed, and make a constructor or initial value
848      for each element of this aggregate.  Chain them together in result.
849      If there are too few, use 0 for each scalar ultimate component.  */
850
851   if (TREE_CODE (type) == ARRAY_TYPE || TREE_CODE (type) == VECTOR_TYPE)
852     {
853       long len;
854       int i;
855
856       if (TREE_CODE (type) == ARRAY_TYPE)
857         {
858           tree domain = TYPE_DOMAIN (type);
859           if (domain)
860             len = (TREE_INT_CST_LOW (TYPE_MAX_VALUE (domain))
861                    - TREE_INT_CST_LOW (TYPE_MIN_VALUE (domain))
862                    + 1);
863           else
864             len = -1;  /* Take as many as there are.  */
865         }
866       else
867         {
868           /* Vectors are like simple fixed-size arrays.  */
869           len = TYPE_VECTOR_SUBPARTS (type);
870         }
871
872       for (i = 0; len < 0 || i < len; i++)
873         {
874           if (tail)
875             {
876               if (TREE_PURPOSE (tail)
877                   && (TREE_CODE (TREE_PURPOSE (tail)) != INTEGER_CST
878                       || compare_tree_int (TREE_PURPOSE (tail), i) != 0))
879                 sorry ("non-trivial labeled initializers");
880
881               if (TREE_VALUE (tail) != 0)
882                 {
883                   tree tail1 = tail;
884                   next1 = digest_init (TREE_TYPE (type),
885                                        TREE_VALUE (tail), &tail1);
886                   if (next1 == error_mark_node)
887                     return next1;
888                   gcc_assert (same_type_ignoring_top_level_qualifiers_p
889                               (TREE_TYPE (type), TREE_TYPE (next1)));
890                   gcc_assert (!tail1 || TREE_CODE (tail1) == TREE_LIST);
891                   if (tail == tail1 && len < 0)
892                     {
893                       error ("non-empty initializer for array of empty elements");
894                       /* Just ignore what we were supposed to use.  */
895                       tail1 = NULL_TREE;
896                     }
897                   tail = tail1;
898                 }
899               else
900                 {
901                   next1 = error_mark_node;
902                   tail = TREE_CHAIN (tail);
903                 }
904             }
905           else if (len < 0)
906             /* We're done.  */
907             break;
908           else if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (type)))
909             {
910               /* If this type needs constructors run for
911                  default-initialization, we can't rely on the backend to do it
912                  for us, so build up TARGET_EXPRs.  If the type in question is
913                  a class, just build one up; if it's an array, recurse.  */
914
915               if (IS_AGGR_TYPE (TREE_TYPE (type)))
916                 next1 = build_functional_cast (TREE_TYPE (type), NULL_TREE);
917               else
918                 next1 = build_constructor (NULL_TREE, NULL_TREE);
919               next1 = digest_init (TREE_TYPE (type), next1, 0);
920             }
921           else if (! zero_init_p (TREE_TYPE (type)))
922             next1 = build_zero_init (TREE_TYPE (type),
923                                      /*nelts=*/NULL_TREE,
924                                      /*static_storage_p=*/false);
925           else
926             /* The default zero-initialization is fine for us; don't
927                add anything to the CONSTRUCTOR.  */
928             break;
929
930           if (next1 == error_mark_node)
931             erroneous = 1;
932           else if (!TREE_CONSTANT (next1))
933             allconstant = 0;
934           else if (! initializer_constant_valid_p (next1, TREE_TYPE (next1)))
935             allsimple = 0;
936           members = tree_cons (size_int (i), next1, members);
937         }
938     }
939   else if (TREE_CODE (type) == RECORD_TYPE)
940     {
941       tree field;
942
943       if (tail)
944         {
945           gcc_assert (!CLASSTYPE_VBASECLASSES (type));
946           gcc_assert (!TYPE_BINFO (type)
947                       || !BINFO_N_BASE_BINFOS (TYPE_BINFO (type)));
948           gcc_assert (!TYPE_POLYMORPHIC_P (type));
949         }
950
951       for (field = TYPE_FIELDS (type); field;
952            field = TREE_CHAIN (field))
953         {
954           if (! DECL_NAME (field) && DECL_C_BIT_FIELD (field))
955             {
956               members = tree_cons (field, integer_zero_node, members);
957               continue;
958             }
959
960           if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field))
961             continue;
962
963           if (tail)
964             {
965               if (TREE_PURPOSE (tail)
966                   && TREE_PURPOSE (tail) != field
967                   && TREE_PURPOSE (tail) != DECL_NAME (field))
968                 sorry ("non-trivial labeled initializers");
969
970               if (TREE_VALUE (tail) != 0)
971                 {
972                   tree tail1 = tail;
973
974                   next1 = digest_init (TREE_TYPE (field),
975                                        TREE_VALUE (tail), &tail1);
976                   gcc_assert (!tail1 || TREE_CODE (tail1) == TREE_LIST);
977                   tail = tail1;
978                 }
979               else
980                 {
981                   next1 = error_mark_node;
982                   tail = TREE_CHAIN (tail);
983                 }
984             }
985           else if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (field)))
986             {
987               /* If this type needs constructors run for
988                  default-initialization, we can't rely on the backend to do it
989                  for us, so build up TARGET_EXPRs.  If the type in question is
990                  a class, just build one up; if it's an array, recurse.  */
991
992               if (IS_AGGR_TYPE (TREE_TYPE (field)))
993                 next1 = build_functional_cast (TREE_TYPE (field),
994                                                NULL_TREE);
995               else
996                 {
997                   next1 = build_constructor (NULL_TREE, NULL_TREE);
998                   if (init)
999                     TREE_HAS_CONSTRUCTOR (next1)
1000                        = TREE_HAS_CONSTRUCTOR (init);
1001                 }
1002               next1 = digest_init (TREE_TYPE (field), next1, 0);
1003
1004               /* Warn when some struct elements are implicitly initialized.  */
1005               if (warn_missing_field_initializers
1006                   && (!init || BRACE_ENCLOSED_INITIALIZER_P (init)))
1007                 warning ("missing initializer for member %qD", field);
1008             }
1009           else
1010             {
1011               if (TREE_READONLY (field))
1012                 error ("uninitialized const member %qD", field);
1013               else if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (TREE_TYPE (field)))
1014                 error ("member %qD with uninitialized const fields", field);
1015               else if (TREE_CODE (TREE_TYPE (field)) == REFERENCE_TYPE)
1016                 error ("member %qD is uninitialized reference", field);
1017
1018               /* Warn when some struct elements are implicitly initialized
1019                  to zero.  */
1020               if (warn_missing_field_initializers
1021                   && (!init || BRACE_ENCLOSED_INITIALIZER_P (init)))
1022                 warning ("missing initializer for member %qD", field);
1023
1024               if (! zero_init_p (TREE_TYPE (field)))
1025                 next1 = build_zero_init (TREE_TYPE (field),
1026                                          /*nelts=*/NULL_TREE,
1027                                          /*static_storage_p=*/false);
1028               else
1029                 /* The default zero-initialization is fine for us; don't
1030                    add anything to the CONSTRUCTOR.  */
1031                 continue;
1032             }
1033
1034           if (next1 == error_mark_node)
1035             erroneous = 1;
1036           else if (!TREE_CONSTANT (next1))
1037             allconstant = 0;
1038           else if (! initializer_constant_valid_p (next1, TREE_TYPE (next1)))
1039             allsimple = 0;
1040           members = tree_cons (field, next1, members);
1041         }
1042     }
1043   else if (TREE_CODE (type) == UNION_TYPE
1044            /* If the initializer was empty, use default zero initialization.  */
1045            && tail)
1046     {
1047       tree field = TYPE_FIELDS (type);
1048
1049       /* Find the first named field.  ANSI decided in September 1990
1050          that only named fields count here.  */
1051       while (field && (!DECL_NAME (field) || TREE_CODE (field) != FIELD_DECL))
1052         field = TREE_CHAIN (field);
1053
1054       /* If this element specifies a field, initialize via that field.  */
1055       if (TREE_PURPOSE (tail) != NULL_TREE)
1056         {
1057           int win = 0;
1058
1059           if (TREE_CODE (TREE_PURPOSE (tail)) == FIELD_DECL)
1060             /* Handle the case of a call by build_c_cast.  */
1061             field = TREE_PURPOSE (tail), win = 1;
1062           else if (TREE_CODE (TREE_PURPOSE (tail)) != IDENTIFIER_NODE)
1063             error ("index value instead of field name in union initializer");
1064           else
1065             {
1066               tree temp;
1067               for (temp = TYPE_FIELDS (type);
1068                    temp;
1069                    temp = TREE_CHAIN (temp))
1070                 if (DECL_NAME (temp) == TREE_PURPOSE (tail))
1071                   break;
1072               if (temp)
1073                 field = temp, win = 1;
1074               else
1075                 error ("no field %qD in union being initialized",
1076                        TREE_PURPOSE (tail));
1077             }
1078           if (!win)
1079             TREE_VALUE (tail) = error_mark_node;
1080         }
1081       else if (field == 0)
1082         {
1083           error ("union %qT with no named members cannot be initialized",
1084                  type);
1085           TREE_VALUE (tail) = error_mark_node;
1086         }
1087
1088       if (TREE_VALUE (tail) != 0)
1089         {
1090           tree tail1 = tail;
1091
1092           next1 = digest_init (TREE_TYPE (field),
1093                                TREE_VALUE (tail), &tail1);
1094           gcc_assert (!tail1 || TREE_CODE (tail1) == TREE_LIST);
1095           tail = tail1;
1096         }
1097       else
1098         {
1099           next1 = error_mark_node;
1100           tail = TREE_CHAIN (tail);
1101         }
1102
1103       if (next1 == error_mark_node)
1104         erroneous = 1;
1105       else if (!TREE_CONSTANT (next1))
1106         allconstant = 0;
1107       else if (initializer_constant_valid_p (next1, TREE_TYPE (next1)) == 0)
1108         allsimple = 0;
1109       members = tree_cons (field, next1, members);
1110     }
1111
1112   /* If arguments were specified as a list, just remove the ones we used.  */
1113   if (elts)
1114     *elts = tail;
1115   /* If arguments were specified as a constructor,
1116      complain unless we used all the elements of the constructor.  */
1117   else if (tail)
1118     pedwarn ("excess elements in aggregate initializer");
1119
1120   if (erroneous)
1121     return error_mark_node;
1122
1123   result = build_constructor (type, nreverse (members));
1124   if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type) == NULL_TREE)
1125     complete_array_type (type, result, /*do_default=*/0);
1126   if (init)
1127     TREE_HAS_CONSTRUCTOR (result) = TREE_HAS_CONSTRUCTOR (init);
1128   if (allconstant)
1129     {
1130       TREE_CONSTANT (result) = 1;
1131       TREE_INVARIANT (result) = 1;
1132       if (allsimple)
1133         TREE_STATIC (result) = 1;
1134     }
1135   return result;
1136 }
1137 \f
1138 /* Given a structure or union value DATUM, construct and return
1139    the structure or union component which results from narrowing
1140    that value to the base specified in BASETYPE.  For example, given the
1141    hierarchy
1142
1143    class L { int ii; };
1144    class A : L { ... };
1145    class B : L { ... };
1146    class C : A, B { ... };
1147
1148    and the declaration
1149
1150    C x;
1151
1152    then the expression
1153
1154    x.A::ii refers to the ii member of the L part of
1155    the A part of the C object named by X.  In this case,
1156    DATUM would be x, and BASETYPE would be A.
1157
1158    I used to think that this was nonconformant, that the standard specified
1159    that first we look up ii in A, then convert x to an L& and pull out the
1160    ii part.  But in fact, it does say that we convert x to an A&; A here
1161    is known as the "naming class".  (jason 2000-12-19)
1162
1163    BINFO_P points to a variable initialized either to NULL_TREE or to the
1164    binfo for the specific base subobject we want to convert to.  */
1165
1166 tree
1167 build_scoped_ref (tree datum, tree basetype, tree* binfo_p)
1168 {
1169   tree binfo;
1170
1171   if (datum == error_mark_node)
1172     return error_mark_node;
1173   if (*binfo_p)
1174     binfo = *binfo_p;
1175   else
1176     binfo = lookup_base (TREE_TYPE (datum), basetype, ba_check, NULL);
1177
1178   if (!binfo || binfo == error_mark_node)
1179     {
1180       *binfo_p = NULL_TREE;
1181       if (!binfo)
1182         error_not_base_type (basetype, TREE_TYPE (datum));
1183       return error_mark_node;
1184     }
1185
1186   *binfo_p = binfo;
1187   return build_base_path (PLUS_EXPR, datum, binfo, 1);
1188 }
1189
1190 /* Build a reference to an object specified by the C++ `->' operator.
1191    Usually this just involves dereferencing the object, but if the
1192    `->' operator is overloaded, then such overloads must be
1193    performed until an object which does not have the `->' operator
1194    overloaded is found.  An error is reported when circular pointer
1195    delegation is detected.  */
1196
1197 tree
1198 build_x_arrow (tree expr)
1199 {
1200   tree orig_expr = expr;
1201   tree types_memoized = NULL_TREE;
1202   tree type = TREE_TYPE (expr);
1203   tree last_rval = NULL_TREE;
1204
1205   if (type == error_mark_node)
1206     return error_mark_node;
1207
1208   if (processing_template_decl)
1209     {
1210       if (type_dependent_expression_p (expr))
1211         return build_min_nt (ARROW_EXPR, expr);
1212       expr = build_non_dependent_expr (expr);
1213     }
1214
1215   if (TREE_CODE (type) == REFERENCE_TYPE)
1216     {
1217       expr = convert_from_reference (expr);
1218       type = TREE_TYPE (expr);
1219     }
1220
1221   if (IS_AGGR_TYPE (type))
1222     {
1223       while ((expr = build_new_op (COMPONENT_REF, LOOKUP_NORMAL, expr,
1224                                    NULL_TREE, NULL_TREE,
1225                                    /*overloaded_p=*/NULL)))
1226         {
1227           if (expr == error_mark_node)
1228             return error_mark_node;
1229
1230           if (value_member (TREE_TYPE (expr), types_memoized))
1231             {
1232               error ("circular pointer delegation detected");
1233               return error_mark_node;
1234             }
1235           else
1236             {
1237               types_memoized = tree_cons (NULL_TREE, TREE_TYPE (expr),
1238                                           types_memoized);
1239             }
1240           last_rval = expr;
1241         }     
1242
1243       if (last_rval == NULL_TREE)
1244         {
1245           error ("base operand of %<->%> has non-pointer type %qT", type);
1246           return error_mark_node;
1247         }
1248
1249       if (TREE_CODE (TREE_TYPE (last_rval)) == REFERENCE_TYPE)
1250         last_rval = convert_from_reference (last_rval);
1251     }
1252   else
1253     last_rval = decay_conversion (expr);
1254
1255   if (TREE_CODE (TREE_TYPE (last_rval)) == POINTER_TYPE)
1256     {
1257       if (processing_template_decl)
1258         {
1259           expr = build_min_non_dep (ARROW_EXPR, last_rval, orig_expr);
1260           /* It will be dereferenced.  */
1261           TREE_TYPE (expr) = TREE_TYPE (TREE_TYPE (last_rval));
1262           return expr;
1263         }
1264
1265       return build_indirect_ref (last_rval, NULL);
1266     }
1267
1268   if (types_memoized)
1269     error ("result of %<operator->()%> yields non-pointer result");
1270   else
1271     error ("base operand of %<->%> is not a pointer");
1272   return error_mark_node;
1273 }
1274
1275 /* Return an expression for "DATUM .* COMPONENT".  DATUM has not
1276    already been checked out to be of aggregate type.  */
1277
1278 tree
1279 build_m_component_ref (tree datum, tree component)
1280 {
1281   tree ptrmem_type;
1282   tree objtype;
1283   tree type;
1284   tree binfo;
1285   tree ctype;
1286
1287   datum = decay_conversion (datum);
1288
1289   if (datum == error_mark_node || component == error_mark_node)
1290     return error_mark_node;
1291
1292   ptrmem_type = TREE_TYPE (component);
1293   if (!TYPE_PTR_TO_MEMBER_P (ptrmem_type))
1294     {
1295       error ("%qE cannot be used as a member pointer, since it is of "
1296              "type %qT", 
1297              component, ptrmem_type);
1298       return error_mark_node;
1299     }
1300     
1301   objtype = TYPE_MAIN_VARIANT (TREE_TYPE (datum));  
1302   if (! IS_AGGR_TYPE (objtype))
1303     {
1304       error ("cannot apply member pointer %qE to %qE, which is of "
1305              "non-aggregate type %qT",
1306              component, datum, objtype);
1307       return error_mark_node;
1308     }
1309
1310   type = TYPE_PTRMEM_POINTED_TO_TYPE (ptrmem_type);
1311   ctype = complete_type (TYPE_PTRMEM_CLASS_TYPE (ptrmem_type));
1312
1313   if (!COMPLETE_TYPE_P (ctype))
1314     {
1315       if (!same_type_p (ctype, objtype))
1316         goto mismatch;
1317       binfo = NULL;
1318     }
1319   else
1320     {
1321       binfo = lookup_base (objtype, ctype, ba_check, NULL);
1322       
1323       if (!binfo)
1324         {
1325         mismatch:
1326           error ("pointer to member type %qT incompatible with object "
1327                  "type %qT",
1328                  type, objtype);
1329           return error_mark_node;
1330         }
1331       else if (binfo == error_mark_node)
1332         return error_mark_node;
1333     }
1334
1335   if (TYPE_PTRMEM_P (ptrmem_type))
1336     {
1337       /* Compute the type of the field, as described in [expr.ref].
1338          There's no such thing as a mutable pointer-to-member, so
1339          things are not as complex as they are for references to
1340          non-static data members.  */
1341       type = cp_build_qualified_type (type,
1342                                       (cp_type_quals (type)  
1343                                        | cp_type_quals (TREE_TYPE (datum))));
1344
1345       datum = build_address (datum);
1346       
1347       /* Convert object to the correct base.  */
1348       if (binfo)
1349         datum = build_base_path (PLUS_EXPR, datum, binfo, 1);
1350       
1351       /* Build an expression for "object + offset" where offset is the
1352          value stored in the pointer-to-data-member.  */
1353       datum = build2 (PLUS_EXPR, build_pointer_type (type),
1354                       datum, build_nop (ptrdiff_type_node, component));
1355       return build_indirect_ref (datum, 0);
1356     }
1357   else
1358     return build2 (OFFSET_REF, type, datum, component);
1359 }
1360
1361 /* Return a tree node for the expression TYPENAME '(' PARMS ')'.  */
1362
1363 tree
1364 build_functional_cast (tree exp, tree parms)
1365 {
1366   /* This is either a call to a constructor,
1367      or a C cast in C++'s `functional' notation.  */
1368   tree type;
1369
1370   if (exp == error_mark_node || parms == error_mark_node)
1371     return error_mark_node;
1372
1373   if (TREE_CODE (exp) == TYPE_DECL)
1374     type = TREE_TYPE (exp);
1375   else
1376     type = exp;
1377
1378   if (processing_template_decl)
1379     {
1380       tree t = build_min (CAST_EXPR, type, parms);
1381       /* We don't know if it will or will not have side effects.  */
1382       TREE_SIDE_EFFECTS (t) = 1;
1383       return t;
1384     }
1385
1386   if (! IS_AGGR_TYPE (type))
1387     {
1388       /* This must build a C cast.  */
1389       if (parms == NULL_TREE)
1390         parms = integer_zero_node;
1391       else
1392         parms = build_x_compound_expr_from_list (parms, "functional cast");
1393
1394       return build_c_cast (type, parms);
1395     }
1396
1397   /* Prepare to evaluate as a call to a constructor.  If this expression
1398      is actually used, for example,
1399          
1400      return X (arg1, arg2, ...);
1401          
1402      then the slot being initialized will be filled in.  */
1403
1404   if (!complete_type_or_else (type, NULL_TREE))
1405     return error_mark_node;
1406   if (abstract_virtuals_error (NULL_TREE, type))
1407     return error_mark_node;
1408
1409   if (parms && TREE_CHAIN (parms) == NULL_TREE)
1410     return build_c_cast (type, TREE_VALUE (parms));
1411
1412   /* We need to zero-initialize POD types.  Let's do that for everything
1413      that doesn't need a constructor.  */
1414   if (parms == NULL_TREE && !TYPE_NEEDS_CONSTRUCTING (type)
1415       && TYPE_HAS_DEFAULT_CONSTRUCTOR (type))
1416     {
1417       exp = build_constructor (type, NULL_TREE);
1418       return get_target_expr (exp);
1419     }
1420
1421   exp = build_special_member_call (NULL_TREE, complete_ctor_identifier, parms,
1422                                    type, LOOKUP_NORMAL);
1423
1424   if (exp == error_mark_node)
1425     return error_mark_node;
1426
1427   return build_cplus_new (type, exp);
1428 }
1429 \f
1430
1431 /* Add new exception specifier SPEC, to the LIST we currently have.
1432    If it's already in LIST then do nothing.
1433    Moan if it's bad and we're allowed to. COMPLAIN < 0 means we
1434    know what we're doing.  */
1435
1436 tree
1437 add_exception_specifier (tree list, tree spec, int complain)
1438 {
1439   bool ok;
1440   tree core = spec;
1441   bool is_ptr;
1442   int diag_type = -1; /* none */
1443   
1444   if (spec == error_mark_node)
1445     return list;
1446   
1447   gcc_assert (spec && (!list || TREE_VALUE (list)));
1448   
1449   /* [except.spec] 1, type in an exception specifier shall not be
1450      incomplete, or pointer or ref to incomplete other than pointer
1451      to cv void.  */
1452   is_ptr = TREE_CODE (core) == POINTER_TYPE;
1453   if (is_ptr || TREE_CODE (core) == REFERENCE_TYPE)
1454     core = TREE_TYPE (core);
1455   if (complain < 0)
1456     ok = true;
1457   else if (VOID_TYPE_P (core))
1458     ok = is_ptr;
1459   else if (TREE_CODE (core) == TEMPLATE_TYPE_PARM)
1460     ok = true;
1461   else if (processing_template_decl)
1462     ok = true;
1463   else
1464     {
1465       ok = true;
1466       /* 15.4/1 says that types in an exception specifier must be complete,
1467          but it seems more reasonable to only require this on definitions
1468          and calls.  So just give a pedwarn at this point; we will give an
1469          error later if we hit one of those two cases.  */
1470       if (!COMPLETE_TYPE_P (complete_type (core)))
1471         diag_type = 2; /* pedwarn */
1472     }
1473
1474   if (ok)
1475     {
1476       tree probe;
1477       
1478       for (probe = list; probe; probe = TREE_CHAIN (probe))
1479         if (same_type_p (TREE_VALUE (probe), spec))
1480           break;
1481       if (!probe)
1482         list = tree_cons (NULL_TREE, spec, list);
1483     }
1484   else
1485     diag_type = 0; /* error */
1486     
1487   if (diag_type >= 0 && complain)
1488     cxx_incomplete_type_diagnostic (NULL_TREE, core, diag_type);
1489
1490   return list;
1491 }
1492
1493 /* Combine the two exceptions specifier lists LIST and ADD, and return
1494    their union.  */
1495
1496 tree
1497 merge_exception_specifiers (tree list, tree add)
1498 {
1499   if (!list || !add)
1500     return NULL_TREE;
1501   else if (!TREE_VALUE (list))
1502     return add;
1503   else if (!TREE_VALUE (add))
1504     return list;
1505   else
1506     {
1507       tree orig_list = list;
1508       
1509       for (; add; add = TREE_CHAIN (add))
1510         {
1511           tree spec = TREE_VALUE (add);
1512           tree probe;
1513           
1514           for (probe = orig_list; probe; probe = TREE_CHAIN (probe))
1515             if (same_type_p (TREE_VALUE (probe), spec))
1516               break;
1517           if (!probe)
1518             {
1519               spec = build_tree_list (NULL_TREE, spec);
1520               TREE_CHAIN (spec) = list;
1521               list = spec;
1522             }
1523         }
1524     }
1525   return list;
1526 }
1527
1528 /* Subroutine of build_call.  Ensure that each of the types in the
1529    exception specification is complete.  Technically, 15.4/1 says that
1530    they need to be complete when we see a declaration of the function,
1531    but we should be able to get away with only requiring this when the
1532    function is defined or called.  See also add_exception_specifier.  */
1533
1534 void
1535 require_complete_eh_spec_types (tree fntype, tree decl)
1536 {
1537   tree raises;
1538   /* Don't complain about calls to op new.  */
1539   if (decl && DECL_ARTIFICIAL (decl))
1540     return;
1541   for (raises = TYPE_RAISES_EXCEPTIONS (fntype); raises;
1542        raises = TREE_CHAIN (raises))
1543     {
1544       tree type = TREE_VALUE (raises);
1545       if (type && !COMPLETE_TYPE_P (type))
1546         {
1547           if (decl)
1548             error
1549               ("call to function %qD which throws incomplete type %q#T",
1550                decl, type);
1551           else
1552             error ("call to function which throws incomplete type %q#T",
1553                    decl);
1554         }
1555     }
1556 }
1557
1558 \f
1559 #include "gt-cp-typeck2.h"