* config/i386/i386.c (ix86_expand_fp_absneg_operator): Use elt_mode
[official-gcc.git] / gcc / cp / typeck2.c
blob8d97e451c6deaf2742f6a8f8c505dd994d64cd11
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)
8 This file is part of GCC.
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.
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.
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. */
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. */
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"
42 static tree process_init_constructor (tree, tree, tree *);
44 /* Print an error message stemming from an attempt to use
45 BASETYPE as a base class for TYPE. */
47 tree
48 error_not_base_type (tree basetype, tree type)
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;
56 tree
57 binfo_or_else (tree base, tree type)
59 tree binfo = lookup_base (type, base, ba_unique, NULL);
61 if (binfo == error_mark_node)
62 return NULL_TREE;
63 else if (!binfo)
64 error_not_base_type (base, type);
65 return binfo;
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.) */
73 void
74 readonly_error (tree arg, const char* string, int soft)
76 const char *fmt;
77 void (*fn) (const char *, ...);
79 if (soft)
80 fn = pedwarn;
81 else
82 fn = error;
84 if (TREE_CODE (arg) == COMPONENT_REF)
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));
92 else if (TREE_CODE (arg) == VAR_DECL)
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);
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);
118 /* Structure that holds information about declarations whose type was
119 incomplete and we could not check whether it was abstract or not. */
121 struct pending_abstract_type GTY((chain_next ("%h.next")))
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;
128 /* Type which will be checked for abstractness. */
129 tree type;
131 /* Position of the declaration. This is only needed for IDENTIFIER_NODEs,
132 because DECLs already carry locus information. */
133 location_t locus;
135 /* Link to the next element in list. */
136 struct pending_abstract_type* next;
140 /* Compute the hash value of the node VAL. This function is used by the
141 hash table abstract_pending_vars. */
143 static hashval_t
144 pat_calc_hash (const void* val)
146 const struct pending_abstract_type* pat = val;
147 return (hashval_t) TYPE_UID (pat->type);
151 /* Compare node VAL1 with the type VAL2. This function is used by the
152 hash table abstract_pending_vars. */
154 static int
155 pat_compare (const void* val1, const void* val2)
157 const struct pending_abstract_type* pat1 = val1;
158 tree type2 = (tree)val2;
160 return (pat1->type == type2);
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;
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. */
175 void
176 complete_type_check_abstract (tree type)
178 void **slot;
179 struct pending_abstract_type *pat;
180 location_t cur_loc = input_location;
182 gcc_assert (COMPLETE_TYPE_P (type));
184 if (!abstract_pending_vars)
185 return;
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);
195 /* If the type is not abstract, do not do anything. */
196 if (CLASSTYPE_PURE_VIRTUALS (type))
198 struct pending_abstract_type *prev = 0, *next;
200 /* Reverse the list to emit the errors in top-down order. */
201 for (; pat; pat = next)
203 next = pat->next;
204 pat->next = prev;
205 prev = pat;
207 pat = prev;
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)
213 gcc_assert (type == pat->type);
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;
224 htab_clear_slot (abstract_pending_vars, slot);
226 input_location = cur_loc;
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. */
236 abstract_virtuals_error (tree decl, tree type)
238 VEC (tree) *pure;
240 /* This function applies only to classes. Any other entity can never
241 be abstract. */
242 if (!CLASS_TYPE_P (type))
243 return 0;
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))
251 void **slot;
252 struct pending_abstract_type *pat;
254 gcc_assert (!decl || DECL_P (decl)
255 || TREE_CODE (decl) == IDENTIFIER_NODE);
257 if (!abstract_pending_vars)
258 abstract_pending_vars = htab_create_ggc (31, &pat_calc_hash,
259 &pat_compare, NULL);
261 slot = htab_find_slot_with_hash (abstract_pending_vars, type,
262 (hashval_t)TYPE_UID (type), INSERT);
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);
271 pat->next = *slot;
272 *slot = pat;
274 return 0;
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;
282 pure = CLASSTYPE_PURE_VIRTUALS (type);
283 if (!pure)
284 return 0;
286 if (decl)
288 if (TREE_CODE (decl) == RESULT_DECL)
289 return 0;
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);
314 else
315 error ("cannot allocate an object of abstract type %qT", type);
317 /* Only go through this once. */
318 if (VEC_length (tree, pure))
320 unsigned ix;
321 tree fn;
323 inform ("%J because the following virtual functions are pure "
324 "within %qT:", TYPE_MAIN_DECL (type), type);
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);
333 else
334 inform ("%J since type %qT has pure virtual functions",
335 TYPE_MAIN_DECL (type), type);
337 return 1;
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. */
346 void
347 cxx_incomplete_type_diagnostic (tree value, tree type, int diag_type)
349 int decl = 0;
350 void (*p_msg) (const char *, ...);
351 void (*p_msg_at) (const char *, ...);
353 if (diag_type == 1)
355 p_msg = warning;
356 p_msg_at = cp_warning_at;
358 else if (diag_type == 2)
360 p_msg = pedwarn;
361 p_msg_at = cp_pedwarn_at;
363 else
365 p_msg = error;
366 p_msg_at = cp_error_at;
369 /* Avoid duplicate error message. */
370 if (TREE_CODE (type) == ERROR_MARK)
371 return;
373 if (value != 0 && (TREE_CODE (value) == VAR_DECL
374 || TREE_CODE (value) == PARM_DECL
375 || TREE_CODE (value) == FIELD_DECL))
377 (*p_msg_at) ("%qD has incomplete type", value);
378 decl = 1;
380 retry:
381 /* We must print an error message. Be clever about what it says. */
383 switch (TREE_CODE (type))
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;
396 case VOID_TYPE:
397 (*p_msg) ("invalid use of %qT", type);
398 break;
400 case ARRAY_TYPE:
401 if (TYPE_DOMAIN (type))
403 type = TREE_TYPE (type);
404 goto retry;
406 (*p_msg) ("invalid use of array with unspecified bounds");
407 break;
409 case OFFSET_TYPE:
410 bad_member:
411 (*p_msg) ("invalid use of member (did you forget the %<&%> ?)");
412 break;
414 case TEMPLATE_TYPE_PARM:
415 (*p_msg) ("invalid use of template type parameter");
416 break;
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;
430 default:
431 gcc_unreachable ();
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)
441 cxx_incomplete_type_diagnostic (value, type, 0);
445 /* The recursive part of split_nonconstant_init. DEST is an lvalue
446 expression to which INIT should be assigned. INIT is a CONSTRUCTOR. */
448 static void
449 split_nonconstant_init_1 (tree dest, tree init)
451 tree *pelt, elt, type = TREE_TYPE (dest);
452 tree sub, code, inner_type = NULL;
453 bool array_type_p = false;
455 pelt = &CONSTRUCTOR_ELTS (init);
456 switch (TREE_CODE (type))
458 case ARRAY_TYPE:
459 inner_type = TREE_TYPE (type);
460 array_type_p = true;
461 /* FALLTHRU */
463 case RECORD_TYPE:
464 case UNION_TYPE:
465 case QUAL_UNION_TYPE:
466 while ((elt = *pelt))
468 tree field_index = TREE_PURPOSE (elt);
469 tree value = TREE_VALUE (elt);
471 if (!array_type_p)
472 inner_type = TREE_TYPE (field_index);
474 if (TREE_CODE (value) == CONSTRUCTOR)
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);
483 split_nonconstant_init_1 (sub, value);
485 else if (!initializer_constant_valid_p (value, inner_type))
487 *pelt = TREE_CHAIN (elt);
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);
496 code = build2 (MODIFY_EXPR, inner_type, sub, value);
497 code = build_stmt (EXPR_STMT, code);
498 add_stmt (code);
499 continue;
502 pelt = &TREE_CHAIN (elt);
504 break;
506 case VECTOR_TYPE:
507 if (!initializer_constant_valid_p (init, type))
509 CONSTRUCTOR_ELTS (init) = NULL;
510 code = build2 (MODIFY_EXPR, type, dest, init);
511 code = build_stmt (EXPR_STMT, code);
512 add_stmt (code);
514 break;
516 default:
517 gcc_unreachable ();
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. */
526 static tree
527 split_nonconstant_init (tree dest, tree init)
529 tree code;
531 if (TREE_CODE (init) == CONSTRUCTOR)
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;
539 else
540 code = build2 (INIT_EXPR, TREE_TYPE (dest), dest, init);
542 return code;
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.
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.
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?
560 Returns code to be executed if initialization could not be performed
561 for static variable. In that case, caller must emit the code. */
563 tree
564 store_init_value (tree decl, tree init)
566 tree value, type;
568 /* If variable's type was invalidly declared, just ignore it. */
570 type = TREE_TYPE (decl);
571 if (TREE_CODE (type) == ERROR_MARK)
572 return NULL_TREE;
574 if (IS_AGGR_TYPE (type))
576 gcc_assert (TYPE_HAS_TRIVIAL_INIT_REF (type)
577 || TREE_CODE (init) == CONSTRUCTOR);
579 if (TREE_CODE (init) == TREE_LIST)
581 error ("constructor syntax used, but no constructor declared "
582 "for type %qT", type);
583 init = build_constructor (NULL_TREE, nreverse (init));
586 else if (TREE_CODE (init) == TREE_LIST
587 && TREE_TYPE (init) != unknown_type_node)
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)
595 error ("cannot initialize arrays using this syntax");
596 return NULL_TREE;
598 else
599 /* We get here with code like `int a (2);' */
600 init = build_x_compound_expr_from_list (init, "initializer");
603 /* End of special C++ code. */
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;
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.
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. */
631 tree
632 digest_init (tree type, tree init, tree* tail)
634 enum tree_code code = TREE_CODE (type);
635 tree element = NULL_TREE;
636 tree old_tail_contents = NULL_TREE;
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. */
641 if (tail)
643 old_tail_contents = *tail;
644 *tail = TREE_CHAIN (*tail);
647 if (init == error_mark_node || (TREE_CODE (init) == TREE_LIST
648 && TREE_VALUE (init) == error_mark_node))
649 return error_mark_node;
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;
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;
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);
666 if (BRACE_ENCLOSED_INITIALIZER_P (init)
667 && CONSTRUCTOR_ELTS (init) != 0
668 && TREE_CHAIN (CONSTRUCTOR_ELTS (init)) == 0)
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;
678 /* Initialization of an array of chars from a string constant
679 optionally enclosed in braces. */
681 if (code == ARRAY_TYPE)
683 tree typ1;
685 if (TREE_CODE (init) == TREE_LIST)
687 error ("initializing array with parameter list");
688 return error_mark_node;
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)))
696 tree string = element ? element : init;
698 if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (string)))
699 != char_type_node)
700 && TYPE_PRECISION (typ1) == BITS_PER_UNIT)
702 error ("char-array initialized from wide string");
703 return error_mark_node;
705 if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (string)))
706 == char_type_node)
707 && TYPE_PRECISION (typ1) != BITS_PER_UNIT)
709 error ("int-array initialized from non-wide string");
710 return error_mark_node;
713 TREE_TYPE (string) = type;
714 if (TYPE_DOMAIN (type) != 0
715 && TREE_CONSTANT (TYPE_SIZE (type)))
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");
726 return string;
730 /* Handle scalar types, including conversions,
731 and signature pointers and references. */
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))
738 if (BRACE_ENCLOSED_INITIALIZER_P (init))
740 if (element == 0)
742 error ("initializer for scalar variable requires one element");
743 return error_mark_node;
745 init = element;
747 while (BRACE_ENCLOSED_INITIALIZER_P (init))
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);
756 return convert_for_initialization (0, type, init, LOOKUP_NORMAL,
757 "initialization", NULL_TREE, 0);
760 /* Come here only for records and arrays (and unions with constructors). */
762 if (COMPLETE_TYPE_P (type) && ! TREE_CONSTANT (TYPE_SIZE (type)))
764 error ("variable-sized object of type %qT may not be initialized",
765 type);
766 return error_mark_node;
769 if (code == ARRAY_TYPE || code == VECTOR_TYPE || IS_AGGR_TYPE_CODE (code))
771 if (BRACE_ENCLOSED_INITIALIZER_P (init))
773 if (TYPE_NON_AGGREGATE_CLASS (type))
775 error ("subobject of type %qT must be initialized by "
776 "constructor, not by %qE",
777 type, init);
778 return error_mark_node;
780 return process_init_constructor (type, init, (tree *)0);
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)
787 *tail = old_tail_contents;
788 return process_init_constructor (type, 0, tail);
791 if (code != ARRAY_TYPE)
793 int flags = LOOKUP_NORMAL;
794 /* Initialization from { } is copy-initialization. */
795 if (tail)
796 flags |= LOOKUP_ONLYCONVERTING;
798 return convert_for_initialization (NULL_TREE, type, init, flags,
799 "initialization", NULL_TREE, 0);
803 error ("invalid initializer");
804 return error_mark_node;
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.
811 If INIT is specified, it is a CONSTRUCTOR node which is specifically
812 and solely for initializing this datum.
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.
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. */
822 static tree
823 process_init_constructor (tree type, tree init, tree* elts)
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;
835 /* Make TAIL be the list of elements to use for the initialization,
836 no matter how the data was given to us. */
838 if (elts)
840 if (warn_missing_braces)
841 warning ("aggregate has a partly bracketed initializer");
842 tail = *elts;
844 else
845 tail = CONSTRUCTOR_ELTS (init);
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. */
851 if (TREE_CODE (type) == ARRAY_TYPE || TREE_CODE (type) == VECTOR_TYPE)
853 long len;
854 int i;
856 if (TREE_CODE (type) == ARRAY_TYPE)
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. */
866 else
868 /* Vectors are like simple fixed-size arrays. */
869 len = TYPE_VECTOR_SUBPARTS (type);
872 for (i = 0; len < 0 || i < len; i++)
874 if (tail)
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");
881 if (TREE_VALUE (tail) != 0)
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)
893 error ("non-empty initializer for array of empty elements");
894 /* Just ignore what we were supposed to use. */
895 tail1 = NULL_TREE;
897 tail = tail1;
899 else
901 next1 = error_mark_node;
902 tail = TREE_CHAIN (tail);
905 else if (len < 0)
906 /* We're done. */
907 break;
908 else if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (type)))
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. */
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);
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;
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);
939 else if (TREE_CODE (type) == RECORD_TYPE)
941 tree field;
943 if (tail)
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));
951 for (field = TYPE_FIELDS (type); field;
952 field = TREE_CHAIN (field))
954 if (! DECL_NAME (field) && DECL_C_BIT_FIELD (field))
956 members = tree_cons (field, integer_zero_node, members);
957 continue;
960 if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field))
961 continue;
963 if (tail)
965 if (TREE_PURPOSE (tail)
966 && TREE_PURPOSE (tail) != field
967 && TREE_PURPOSE (tail) != DECL_NAME (field))
968 sorry ("non-trivial labeled initializers");
970 if (TREE_VALUE (tail) != 0)
972 tree tail1 = tail;
974 next1 = digest_init (TREE_TYPE (field),
975 TREE_VALUE (tail), &tail1);
976 gcc_assert (!tail1 || TREE_CODE (tail1) == TREE_LIST);
977 tail = tail1;
979 else
981 next1 = error_mark_node;
982 tail = TREE_CHAIN (tail);
985 else if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (field)))
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. */
992 if (IS_AGGR_TYPE (TREE_TYPE (field)))
993 next1 = build_functional_cast (TREE_TYPE (field),
994 NULL_TREE);
995 else
997 next1 = build_constructor (NULL_TREE, NULL_TREE);
998 if (init)
999 TREE_HAS_CONSTRUCTOR (next1)
1000 = TREE_HAS_CONSTRUCTOR (init);
1002 next1 = digest_init (TREE_TYPE (field), next1, 0);
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);
1009 else
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);
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);
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;
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);
1043 else if (TREE_CODE (type) == UNION_TYPE
1044 /* If the initializer was empty, use default zero initialization. */
1045 && tail)
1047 tree field = TYPE_FIELDS (type);
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);
1054 /* If this element specifies a field, initialize via that field. */
1055 if (TREE_PURPOSE (tail) != NULL_TREE)
1057 int win = 0;
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
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));
1078 if (!win)
1079 TREE_VALUE (tail) = error_mark_node;
1081 else if (field == 0)
1083 error ("union %qT with no named members cannot be initialized",
1084 type);
1085 TREE_VALUE (tail) = error_mark_node;
1088 if (TREE_VALUE (tail) != 0)
1090 tree tail1 = tail;
1092 next1 = digest_init (TREE_TYPE (field),
1093 TREE_VALUE (tail), &tail1);
1094 gcc_assert (!tail1 || TREE_CODE (tail1) == TREE_LIST);
1095 tail = tail1;
1097 else
1099 next1 = error_mark_node;
1100 tail = TREE_CHAIN (tail);
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);
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");
1120 if (erroneous)
1121 return error_mark_node;
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)
1130 TREE_CONSTANT (result) = 1;
1131 TREE_INVARIANT (result) = 1;
1132 if (allsimple)
1133 TREE_STATIC (result) = 1;
1135 return result;
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
1143 class L { int ii; };
1144 class A : L { ... };
1145 class B : L { ... };
1146 class C : A, B { ... };
1148 and the declaration
1150 C x;
1152 then the expression
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.
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)
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. */
1166 tree
1167 build_scoped_ref (tree datum, tree basetype, tree* binfo_p)
1169 tree binfo;
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);
1178 if (!binfo || binfo == error_mark_node)
1180 *binfo_p = NULL_TREE;
1181 if (!binfo)
1182 error_not_base_type (basetype, TREE_TYPE (datum));
1183 return error_mark_node;
1186 *binfo_p = binfo;
1187 return build_base_path (PLUS_EXPR, datum, binfo, 1);
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. */
1197 tree
1198 build_x_arrow (tree expr)
1200 tree orig_expr = expr;
1201 tree types_memoized = NULL_TREE;
1202 tree type = TREE_TYPE (expr);
1203 tree last_rval = NULL_TREE;
1205 if (type == error_mark_node)
1206 return error_mark_node;
1208 if (processing_template_decl)
1210 if (type_dependent_expression_p (expr))
1211 return build_min_nt (ARROW_EXPR, expr);
1212 expr = build_non_dependent_expr (expr);
1215 if (IS_AGGR_TYPE (type))
1217 while ((expr = build_new_op (COMPONENT_REF, LOOKUP_NORMAL, expr,
1218 NULL_TREE, NULL_TREE,
1219 /*overloaded_p=*/NULL)))
1221 if (expr == error_mark_node)
1222 return error_mark_node;
1224 if (value_member (TREE_TYPE (expr), types_memoized))
1226 error ("circular pointer delegation detected");
1227 return error_mark_node;
1229 else
1231 types_memoized = tree_cons (NULL_TREE, TREE_TYPE (expr),
1232 types_memoized);
1234 last_rval = expr;
1237 if (last_rval == NULL_TREE)
1239 error ("base operand of %<->%> has non-pointer type %qT", type);
1240 return error_mark_node;
1243 if (TREE_CODE (TREE_TYPE (last_rval)) == REFERENCE_TYPE)
1244 last_rval = convert_from_reference (last_rval);
1246 else
1247 last_rval = decay_conversion (expr);
1249 if (TREE_CODE (TREE_TYPE (last_rval)) == POINTER_TYPE)
1251 if (processing_template_decl)
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;
1259 return build_indirect_ref (last_rval, NULL);
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;
1269 /* Return an expression for "DATUM .* COMPONENT". DATUM has not
1270 already been checked out to be of aggregate type. */
1272 tree
1273 build_m_component_ref (tree datum, tree component)
1275 tree ptrmem_type;
1276 tree objtype;
1277 tree type;
1278 tree binfo;
1279 tree ctype;
1281 datum = decay_conversion (datum);
1283 if (datum == error_mark_node || component == error_mark_node)
1284 return error_mark_node;
1286 ptrmem_type = TREE_TYPE (component);
1287 if (!TYPE_PTR_TO_MEMBER_P (ptrmem_type))
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;
1295 objtype = TYPE_MAIN_VARIANT (TREE_TYPE (datum));
1296 if (! IS_AGGR_TYPE (objtype))
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;
1304 type = TYPE_PTRMEM_POINTED_TO_TYPE (ptrmem_type);
1305 ctype = complete_type (TYPE_PTRMEM_CLASS_TYPE (ptrmem_type));
1307 if (!COMPLETE_TYPE_P (ctype))
1309 if (!same_type_p (ctype, objtype))
1310 goto mismatch;
1311 binfo = NULL;
1313 else
1315 binfo = lookup_base (objtype, ctype, ba_check, NULL);
1317 if (!binfo)
1319 mismatch:
1320 error ("pointer to member type %qT incompatible with object "
1321 "type %qT",
1322 type, objtype);
1323 return error_mark_node;
1325 else if (binfo == error_mark_node)
1326 return error_mark_node;
1329 if (TYPE_PTRMEM_P (ptrmem_type))
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))));
1339 datum = build_address (datum);
1341 /* Convert object to the correct base. */
1342 if (binfo)
1343 datum = build_base_path (PLUS_EXPR, datum, binfo, 1);
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);
1351 else
1352 return build2 (OFFSET_REF, type, datum, component);
1355 /* Return a tree node for the expression TYPENAME '(' PARMS ')'. */
1357 tree
1358 build_functional_cast (tree exp, tree parms)
1360 /* This is either a call to a constructor,
1361 or a C cast in C++'s `functional' notation. */
1362 tree type;
1364 if (exp == error_mark_node || parms == error_mark_node)
1365 return error_mark_node;
1367 if (TREE_CODE (exp) == TYPE_DECL)
1368 type = TREE_TYPE (exp);
1369 else
1370 type = exp;
1372 if (processing_template_decl)
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;
1380 if (! IS_AGGR_TYPE (type))
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");
1388 return build_c_cast (type, parms);
1391 /* Prepare to evaluate as a call to a constructor. If this expression
1392 is actually used, for example,
1394 return X (arg1, arg2, ...);
1396 then the slot being initialized will be filled in. */
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;
1403 if (parms && TREE_CHAIN (parms) == NULL_TREE)
1404 return build_c_cast (type, TREE_VALUE (parms));
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))
1411 exp = build_constructor (type, NULL_TREE);
1412 return get_target_expr (exp);
1415 exp = build_special_member_call (NULL_TREE, complete_ctor_identifier, parms,
1416 type, LOOKUP_NORMAL);
1418 if (exp == error_mark_node)
1419 return error_mark_node;
1421 return build_cplus_new (type, exp);
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. */
1430 tree
1431 add_exception_specifier (tree list, tree spec, int complain)
1433 bool ok;
1434 tree core = spec;
1435 bool is_ptr;
1436 int diag_type = -1; /* none */
1438 if (spec == error_mark_node)
1439 return list;
1441 gcc_assert (spec && (!list || TREE_VALUE (list)));
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
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 */
1468 if (ok)
1470 tree probe;
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);
1478 else
1479 diag_type = 0; /* error */
1481 if (diag_type >= 0 && complain)
1482 cxx_incomplete_type_diagnostic (NULL_TREE, core, diag_type);
1484 return list;
1487 /* Combine the two exceptions specifier lists LIST and ADD, and return
1488 their union. */
1490 tree
1491 merge_exception_specifiers (tree list, tree add)
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
1501 tree orig_list = list;
1503 for (; add; add = TREE_CHAIN (add))
1505 tree spec = TREE_VALUE (add);
1506 tree probe;
1508 for (probe = orig_list; probe; probe = TREE_CHAIN (probe))
1509 if (same_type_p (TREE_VALUE (probe), spec))
1510 break;
1511 if (!probe)
1513 spec = build_tree_list (NULL_TREE, spec);
1514 TREE_CHAIN (spec) = list;
1515 list = spec;
1519 return list;
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. */
1528 void
1529 require_complete_eh_spec_types (tree fntype, tree decl)
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))
1538 tree type = TREE_VALUE (raises);
1539 if (type && !COMPLETE_TYPE_P (type))
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);
1553 #include "gt-cp-typeck2.h"