OSDN Git Service

cp:
[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 (IS_AGGR_TYPE (type))
1216     {
1217       while ((expr = build_new_op (COMPONENT_REF, LOOKUP_NORMAL, expr,
1218                                    NULL_TREE, NULL_TREE,
1219                                    /*overloaded_p=*/NULL)))
1220         {
1221           if (expr == error_mark_node)
1222             return error_mark_node;
1223
1224           if (value_member (TREE_TYPE (expr), types_memoized))
1225             {
1226               error ("circular pointer delegation detected");
1227               return error_mark_node;
1228             }
1229           else
1230             {
1231               types_memoized = tree_cons (NULL_TREE, TREE_TYPE (expr),
1232                                           types_memoized);
1233             }
1234           last_rval = expr;
1235         }     
1236
1237       if (last_rval == NULL_TREE)
1238         {
1239           error ("base operand of %<->%> has non-pointer type %qT", type);
1240           return error_mark_node;
1241         }
1242
1243       if (TREE_CODE (TREE_TYPE (last_rval)) == REFERENCE_TYPE)
1244         last_rval = convert_from_reference (last_rval);
1245     }
1246   else
1247     last_rval = decay_conversion (expr);
1248
1249   if (TREE_CODE (TREE_TYPE (last_rval)) == POINTER_TYPE)
1250     {
1251       if (processing_template_decl)
1252         {
1253           expr = build_min_non_dep (ARROW_EXPR, last_rval, orig_expr);
1254           /* It will be dereferenced.  */
1255           TREE_TYPE (expr) = TREE_TYPE (TREE_TYPE (last_rval));
1256           return expr;
1257         }
1258
1259       return build_indirect_ref (last_rval, NULL);
1260     }
1261
1262   if (types_memoized)
1263     error ("result of %<operator->()%> yields non-pointer result");
1264   else
1265     error ("base operand of %<->%> is not a pointer");
1266   return error_mark_node;
1267 }
1268
1269 /* Return an expression for "DATUM .* COMPONENT".  DATUM has not
1270    already been checked out to be of aggregate type.  */
1271
1272 tree
1273 build_m_component_ref (tree datum, tree component)
1274 {
1275   tree ptrmem_type;
1276   tree objtype;
1277   tree type;
1278   tree binfo;
1279   tree ctype;
1280
1281   datum = decay_conversion (datum);
1282
1283   if (datum == error_mark_node || component == error_mark_node)
1284     return error_mark_node;
1285
1286   ptrmem_type = TREE_TYPE (component);
1287   if (!TYPE_PTR_TO_MEMBER_P (ptrmem_type))
1288     {
1289       error ("%qE cannot be used as a member pointer, since it is of "
1290              "type %qT", 
1291              component, ptrmem_type);
1292       return error_mark_node;
1293     }
1294     
1295   objtype = TYPE_MAIN_VARIANT (TREE_TYPE (datum));  
1296   if (! IS_AGGR_TYPE (objtype))
1297     {
1298       error ("cannot apply member pointer %qE to %qE, which is of "
1299              "non-aggregate type %qT",
1300              component, datum, objtype);
1301       return error_mark_node;
1302     }
1303
1304   type = TYPE_PTRMEM_POINTED_TO_TYPE (ptrmem_type);
1305   ctype = complete_type (TYPE_PTRMEM_CLASS_TYPE (ptrmem_type));
1306
1307   if (!COMPLETE_TYPE_P (ctype))
1308     {
1309       if (!same_type_p (ctype, objtype))
1310         goto mismatch;
1311       binfo = NULL;
1312     }
1313   else
1314     {
1315       binfo = lookup_base (objtype, ctype, ba_check, NULL);
1316       
1317       if (!binfo)
1318         {
1319         mismatch:
1320           error ("pointer to member type %qT incompatible with object "
1321                  "type %qT",
1322                  type, objtype);
1323           return error_mark_node;
1324         }
1325       else if (binfo == error_mark_node)
1326         return error_mark_node;
1327     }
1328
1329   if (TYPE_PTRMEM_P (ptrmem_type))
1330     {
1331       /* Compute the type of the field, as described in [expr.ref].
1332          There's no such thing as a mutable pointer-to-member, so
1333          things are not as complex as they are for references to
1334          non-static data members.  */
1335       type = cp_build_qualified_type (type,
1336                                       (cp_type_quals (type)  
1337                                        | cp_type_quals (TREE_TYPE (datum))));
1338
1339       datum = build_address (datum);
1340       
1341       /* Convert object to the correct base.  */
1342       if (binfo)
1343         datum = build_base_path (PLUS_EXPR, datum, binfo, 1);
1344       
1345       /* Build an expression for "object + offset" where offset is the
1346          value stored in the pointer-to-data-member.  */
1347       datum = build2 (PLUS_EXPR, build_pointer_type (type),
1348                       datum, build_nop (ptrdiff_type_node, component));
1349       return build_indirect_ref (datum, 0);
1350     }
1351   else
1352     return build2 (OFFSET_REF, type, datum, component);
1353 }
1354
1355 /* Return a tree node for the expression TYPENAME '(' PARMS ')'.  */
1356
1357 tree
1358 build_functional_cast (tree exp, tree parms)
1359 {
1360   /* This is either a call to a constructor,
1361      or a C cast in C++'s `functional' notation.  */
1362   tree type;
1363
1364   if (exp == error_mark_node || parms == error_mark_node)
1365     return error_mark_node;
1366
1367   if (TREE_CODE (exp) == TYPE_DECL)
1368     type = TREE_TYPE (exp);
1369   else
1370     type = exp;
1371
1372   if (processing_template_decl)
1373     {
1374       tree t = build_min (CAST_EXPR, type, parms);
1375       /* We don't know if it will or will not have side effects.  */
1376       TREE_SIDE_EFFECTS (t) = 1;
1377       return t;
1378     }
1379
1380   if (! IS_AGGR_TYPE (type))
1381     {
1382       /* This must build a C cast.  */
1383       if (parms == NULL_TREE)
1384         parms = integer_zero_node;
1385       else
1386         parms = build_x_compound_expr_from_list (parms, "functional cast");
1387
1388       return build_c_cast (type, parms);
1389     }
1390
1391   /* Prepare to evaluate as a call to a constructor.  If this expression
1392      is actually used, for example,
1393          
1394      return X (arg1, arg2, ...);
1395          
1396      then the slot being initialized will be filled in.  */
1397
1398   if (!complete_type_or_else (type, NULL_TREE))
1399     return error_mark_node;
1400   if (abstract_virtuals_error (NULL_TREE, type))
1401     return error_mark_node;
1402
1403   if (parms && TREE_CHAIN (parms) == NULL_TREE)
1404     return build_c_cast (type, TREE_VALUE (parms));
1405
1406   /* We need to zero-initialize POD types.  Let's do that for everything
1407      that doesn't need a constructor.  */
1408   if (parms == NULL_TREE && !TYPE_NEEDS_CONSTRUCTING (type)
1409       && TYPE_HAS_DEFAULT_CONSTRUCTOR (type))
1410     {
1411       exp = build_constructor (type, NULL_TREE);
1412       return get_target_expr (exp);
1413     }
1414
1415   exp = build_special_member_call (NULL_TREE, complete_ctor_identifier, parms,
1416                                    type, LOOKUP_NORMAL);
1417
1418   if (exp == error_mark_node)
1419     return error_mark_node;
1420
1421   return build_cplus_new (type, exp);
1422 }
1423 \f
1424
1425 /* Add new exception specifier SPEC, to the LIST we currently have.
1426    If it's already in LIST then do nothing.
1427    Moan if it's bad and we're allowed to. COMPLAIN < 0 means we
1428    know what we're doing.  */
1429
1430 tree
1431 add_exception_specifier (tree list, tree spec, int complain)
1432 {
1433   bool ok;
1434   tree core = spec;
1435   bool is_ptr;
1436   int diag_type = -1; /* none */
1437   
1438   if (spec == error_mark_node)
1439     return list;
1440   
1441   gcc_assert (spec && (!list || TREE_VALUE (list)));
1442   
1443   /* [except.spec] 1, type in an exception specifier shall not be
1444      incomplete, or pointer or ref to incomplete other than pointer
1445      to cv void.  */
1446   is_ptr = TREE_CODE (core) == POINTER_TYPE;
1447   if (is_ptr || TREE_CODE (core) == REFERENCE_TYPE)
1448     core = TREE_TYPE (core);
1449   if (complain < 0)
1450     ok = true;
1451   else if (VOID_TYPE_P (core))
1452     ok = is_ptr;
1453   else if (TREE_CODE (core) == TEMPLATE_TYPE_PARM)
1454     ok = true;
1455   else if (processing_template_decl)
1456     ok = true;
1457   else
1458     {
1459       ok = true;
1460       /* 15.4/1 says that types in an exception specifier must be complete,
1461          but it seems more reasonable to only require this on definitions
1462          and calls.  So just give a pedwarn at this point; we will give an
1463          error later if we hit one of those two cases.  */
1464       if (!COMPLETE_TYPE_P (complete_type (core)))
1465         diag_type = 2; /* pedwarn */
1466     }
1467
1468   if (ok)
1469     {
1470       tree probe;
1471       
1472       for (probe = list; probe; probe = TREE_CHAIN (probe))
1473         if (same_type_p (TREE_VALUE (probe), spec))
1474           break;
1475       if (!probe)
1476         list = tree_cons (NULL_TREE, spec, list);
1477     }
1478   else
1479     diag_type = 0; /* error */
1480     
1481   if (diag_type >= 0 && complain)
1482     cxx_incomplete_type_diagnostic (NULL_TREE, core, diag_type);
1483
1484   return list;
1485 }
1486
1487 /* Combine the two exceptions specifier lists LIST and ADD, and return
1488    their union.  */
1489
1490 tree
1491 merge_exception_specifiers (tree list, tree add)
1492 {
1493   if (!list || !add)
1494     return NULL_TREE;
1495   else if (!TREE_VALUE (list))
1496     return add;
1497   else if (!TREE_VALUE (add))
1498     return list;
1499   else
1500     {
1501       tree orig_list = list;
1502       
1503       for (; add; add = TREE_CHAIN (add))
1504         {
1505           tree spec = TREE_VALUE (add);
1506           tree probe;
1507           
1508           for (probe = orig_list; probe; probe = TREE_CHAIN (probe))
1509             if (same_type_p (TREE_VALUE (probe), spec))
1510               break;
1511           if (!probe)
1512             {
1513               spec = build_tree_list (NULL_TREE, spec);
1514               TREE_CHAIN (spec) = list;
1515               list = spec;
1516             }
1517         }
1518     }
1519   return list;
1520 }
1521
1522 /* Subroutine of build_call.  Ensure that each of the types in the
1523    exception specification is complete.  Technically, 15.4/1 says that
1524    they need to be complete when we see a declaration of the function,
1525    but we should be able to get away with only requiring this when the
1526    function is defined or called.  See also add_exception_specifier.  */
1527
1528 void
1529 require_complete_eh_spec_types (tree fntype, tree decl)
1530 {
1531   tree raises;
1532   /* Don't complain about calls to op new.  */
1533   if (decl && DECL_ARTIFICIAL (decl))
1534     return;
1535   for (raises = TYPE_RAISES_EXCEPTIONS (fntype); raises;
1536        raises = TREE_CHAIN (raises))
1537     {
1538       tree type = TREE_VALUE (raises);
1539       if (type && !COMPLETE_TYPE_P (type))
1540         {
1541           if (decl)
1542             error
1543               ("call to function %qD which throws incomplete type %q#T",
1544                decl, type);
1545           else
1546             error ("call to function which throws incomplete type %q#T",
1547                    decl);
1548         }
1549     }
1550 }
1551
1552 \f
1553 #include "gt-cp-typeck2.h"