OSDN Git Service

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