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)
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 There are also routines to build RETURN_STMT nodes and CASE_STMT nodes,
32 and to process initializations in declarations (since they work
33 like a strange sort of assignment). */
37 #include "coretypes.h"
44 #include "diagnostic.h"
46 static tree process_init_constructor (tree, tree, tree *);
48 /* Print an error message stemming from an attempt to use
49 BASETYPE as a base class for TYPE. */
52 error_not_base_type (tree basetype, tree type)
54 if (TREE_CODE (basetype) == FUNCTION_DECL)
55 basetype = DECL_CONTEXT (basetype);
56 error ("type `%T' is not a base type for type `%T'", basetype, type);
57 return error_mark_node;
61 binfo_or_else (tree base, tree type)
63 tree binfo = lookup_base (type, base, ba_ignore, NULL);
65 if (binfo == error_mark_node)
68 error_not_base_type (base, type);
72 /* According to ARM $7.1.6, "A `const' object may be initialized, but its
73 value may not be changed thereafter. Thus, we emit hard errors for these,
74 rather than just pedwarns. If `SOFT' is 1, then we just pedwarn. (For
75 example, conversions to references.) */
78 readonly_error (tree arg, const char* string, int soft)
81 void (*fn) (const char *, ...);
88 if (TREE_CODE (arg) == COMPONENT_REF)
90 if (TYPE_READONLY (TREE_TYPE (TREE_OPERAND (arg, 0))))
91 fmt = "%s of data-member `%D' in read-only structure";
93 fmt = "%s of read-only data-member `%D'";
94 (*fn) (fmt, string, TREE_OPERAND (arg, 1));
96 else if (TREE_CODE (arg) == VAR_DECL)
98 if (DECL_LANG_SPECIFIC (arg)
99 && DECL_IN_AGGR_P (arg)
100 && !TREE_STATIC (arg))
101 fmt = "%s of constant field `%D'";
103 fmt = "%s of read-only variable `%D'";
104 (*fn) (fmt, string, arg);
106 else if (TREE_CODE (arg) == PARM_DECL)
107 (*fn) ("%s of read-only parameter `%D'", string, arg);
108 else if (TREE_CODE (arg) == INDIRECT_REF
109 && TREE_CODE (TREE_TYPE (TREE_OPERAND (arg, 0))) == REFERENCE_TYPE
110 && (TREE_CODE (TREE_OPERAND (arg, 0)) == VAR_DECL
111 || TREE_CODE (TREE_OPERAND (arg, 0)) == PARM_DECL))
112 (*fn) ("%s of read-only reference `%D'", string, TREE_OPERAND (arg, 0));
113 else if (TREE_CODE (arg) == RESULT_DECL)
114 (*fn) ("%s of read-only named return value `%D'", string, arg);
115 else if (TREE_CODE (arg) == FUNCTION_DECL)
116 (*fn) ("%s of function `%D'", string, arg);
118 (*fn) ("%s of read-only location", string);
121 /* If TYPE has abstract virtual functions, issue an error about trying
122 to create an object of that type. DECL is the object declared, or
123 NULL_TREE if the declaration is unavailable. Returns 1 if an error
124 occurred; zero if all was well. */
127 abstract_virtuals_error (tree decl, tree type)
132 if (!CLASS_TYPE_P (type) || !CLASSTYPE_PURE_VIRTUALS (type))
135 if (!TYPE_SIZE (type))
136 /* TYPE is being defined, and during that time
137 CLASSTYPE_PURE_VIRTUALS holds the inline friends. */
140 if (dependent_type_p (type))
141 /* For a dependent type, we do not yet know which functions are pure
145 u = CLASSTYPE_PURE_VIRTUALS (type);
148 if (TREE_CODE (decl) == RESULT_DECL)
151 if (TREE_CODE (decl) == VAR_DECL)
152 error ("cannot declare variable `%D' to be of type `%T'",
154 else if (TREE_CODE (decl) == PARM_DECL)
155 error ("cannot declare parameter `%D' to be of type `%T'",
157 else if (TREE_CODE (decl) == FIELD_DECL)
158 error ("cannot declare field `%D' to be of type `%T'",
160 else if (TREE_CODE (decl) == FUNCTION_DECL
161 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
162 error ("invalid return type for member function `%#D'", decl);
163 else if (TREE_CODE (decl) == FUNCTION_DECL)
164 error ("invalid return type for function `%#D'", decl);
167 error ("cannot allocate an object of type `%T'", type);
169 /* Only go through this once. */
170 if (TREE_PURPOSE (u) == NULL_TREE)
172 TREE_PURPOSE (u) = error_mark_node;
174 error (" because the following virtual functions are abstract:");
175 for (tu = u; tu; tu = TREE_CHAIN (tu))
176 cp_error_at ("\t%#D", TREE_VALUE (tu));
179 error (" since type `%T' has abstract virtual functions", type);
184 /* Print an error message for invalid use of an incomplete type.
185 VALUE is the expression that was used (or 0 if that isn't known)
186 and TYPE is the type that was invalid. DIAG_TYPE indicates the
187 type of diagnostic: 0 for an error, 1 for a warning, 2 for a
191 cxx_incomplete_type_diagnostic (tree value, tree type, int diag_type)
194 void (*p_msg) (const char *, ...);
195 void (*p_msg_at) (const char *, ...);
200 p_msg_at = cp_warning_at;
202 else if (diag_type == 2)
205 p_msg_at = cp_pedwarn_at;
210 p_msg_at = cp_error_at;
213 /* Avoid duplicate error message. */
214 if (TREE_CODE (type) == ERROR_MARK)
217 if (value != 0 && (TREE_CODE (value) == VAR_DECL
218 || TREE_CODE (value) == PARM_DECL
219 || TREE_CODE (value) == FIELD_DECL))
221 (*p_msg_at) ("`%D' has incomplete type", value);
225 /* We must print an error message. Be clever about what it says. */
227 switch (TREE_CODE (type))
233 (*p_msg) ("invalid use of undefined type `%#T'", type);
234 if (!TYPE_TEMPLATE_INFO (type))
235 (*p_msg_at) ("forward declaration of `%#T'", type);
237 (*p_msg_at) ("declaration of `%#T'", type);
241 (*p_msg) ("invalid use of `%T'", type);
245 if (TYPE_DOMAIN (type))
247 type = TREE_TYPE (type);
250 (*p_msg) ("invalid use of array with unspecified bounds");
255 (*p_msg) ("invalid use of member (did you forget the `&' ?)");
258 case TEMPLATE_TYPE_PARM:
259 (*p_msg) ("invalid use of template type parameter");
263 if (value && TREE_CODE (value) == COMPONENT_REF)
265 else if (value && TREE_CODE (value) == ADDR_EXPR)
266 (*p_msg) ("address of overloaded function with no contextual type information");
267 else if (value && TREE_CODE (value) == OVERLOAD)
268 (*p_msg) ("overloaded function with no contextual type information");
270 (*p_msg) ("insufficient contextual information to determine type");
278 /* Backward-compatibility interface to incomplete_type_diagnostic;
279 required by ../tree.c. */
280 #undef cxx_incomplete_type_error
282 cxx_incomplete_type_error (tree value, tree type)
284 cxx_incomplete_type_diagnostic (value, type, 0);
288 /* The recursive part of split_nonconstant_init. DEST is an lvalue
289 expression to which INIT should be assigned. INIT is a CONSTRUCTOR.
290 PCODE is a pointer to the tail of a chain of statements being emitted.
291 The return value is the new tail of that chain after new statements
295 split_nonconstant_init_1 (tree dest, tree init, tree *pcode)
297 tree *pelt, elt, type = TREE_TYPE (dest);
298 tree sub, code, inner_type = NULL;
299 bool array_type_p = false;
301 pelt = &CONSTRUCTOR_ELTS (init);
302 switch (TREE_CODE (type))
305 inner_type = TREE_TYPE (type);
311 case QUAL_UNION_TYPE:
312 while ((elt = *pelt))
314 tree field_index = TREE_PURPOSE (elt);
315 tree value = TREE_VALUE (elt);
318 inner_type = TREE_TYPE (field_index);
320 if (TREE_CODE (value) == CONSTRUCTOR)
323 sub = build (ARRAY_REF, inner_type, dest, field_index);
325 sub = build (COMPONENT_REF, inner_type, dest, field_index);
327 pcode = split_nonconstant_init_1 (sub, value, pcode);
329 else if (!initializer_constant_valid_p (value, inner_type))
331 *pelt = TREE_CHAIN (elt);
334 sub = build (ARRAY_REF, inner_type, dest, field_index);
336 sub = build (COMPONENT_REF, inner_type, dest, field_index);
338 code = build (MODIFY_EXPR, inner_type, sub, value);
339 code = build_stmt (EXPR_STMT, code);
342 pcode = &TREE_CHAIN (code);
345 pelt = &TREE_CHAIN (elt);
350 if (!initializer_constant_valid_p (init, type))
352 CONSTRUCTOR_ELTS (init) = NULL;
353 code = build (MODIFY_EXPR, type, dest, init);
354 code = build_stmt (EXPR_STMT, code);
355 pcode = &TREE_CHAIN (code);
366 /* A subroutine of store_init_value. Splits non-constant static
367 initializer INIT into a constant part and generates code to
368 perform the non-constant part of the initialization to DEST.
369 Returns the code for the runtime init. */
372 split_nonconstant_init (tree dest, tree init)
376 if (TREE_CODE (init) == CONSTRUCTOR)
378 code = build_stmt (COMPOUND_STMT, NULL_TREE);
379 split_nonconstant_init_1 (dest, init, &COMPOUND_BODY (code));
380 code = build1 (STMT_EXPR, void_type_node, code);
381 TREE_SIDE_EFFECTS (code) = 1;
382 DECL_INITIAL (dest) = init;
385 code = build (INIT_EXPR, TREE_TYPE (dest), dest, init);
390 /* Perform appropriate conversions on the initial value of a variable,
391 store it in the declaration DECL,
392 and print any error messages that are appropriate.
393 If the init is invalid, store an ERROR_MARK.
395 C++: Note that INIT might be a TREE_LIST, which would mean that it is
396 a base class initializer for some aggregate type, hopefully compatible
397 with DECL. If INIT is a single element, and DECL is an aggregate
398 type, we silently convert INIT into a TREE_LIST, allowing a constructor
401 If INIT is a TREE_LIST and there is no constructor, turn INIT
402 into a CONSTRUCTOR and use standard initialization techniques.
403 Perhaps a warning should be generated?
405 Returns code to be executed if initialization could not be performed
406 for static variable. In that case, caller must emit the code. */
409 store_init_value (tree decl, tree init)
413 /* If variable's type was invalidly declared, just ignore it. */
415 type = TREE_TYPE (decl);
416 if (TREE_CODE (type) == ERROR_MARK)
419 if (IS_AGGR_TYPE (type))
421 if (! TYPE_HAS_TRIVIAL_INIT_REF (type)
422 && TREE_CODE (init) != CONSTRUCTOR)
425 if (TREE_CODE (init) == TREE_LIST)
427 error ("constructor syntax used, but no constructor declared for type `%T'", type);
428 init = build_constructor (NULL_TREE, nreverse (init));
431 else if (TREE_CODE (init) == TREE_LIST
432 && TREE_TYPE (init) != unknown_type_node)
434 if (TREE_CODE (decl) == RESULT_DECL)
435 init = build_x_compound_expr_from_list (init,
436 "return value initializer");
437 else if (TREE_CODE (init) == TREE_LIST
438 && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
440 error ("cannot initialize arrays using this syntax");
444 /* We get here with code like `int a (2);' */
445 init = build_x_compound_expr_from_list (init, "initializer");
448 /* End of special C++ code. */
450 /* Digest the specified initializer into an expression. */
451 value = digest_init (type, init, (tree *) 0);
453 /* Store the expression if valid; else report error. */
455 if (TREE_CODE (value) == ERROR_MARK)
457 /* Other code expects that initializers for objects of types that need
458 constructing never make it into DECL_INITIAL, and passes 'init' to
459 build_aggr_init without checking DECL_INITIAL. So just return. */
460 else if (TYPE_NEEDS_CONSTRUCTING (type))
461 return build (INIT_EXPR, type, decl, value);
462 else if (TREE_STATIC (decl)
463 && (! TREE_CONSTANT (value)
464 || ! initializer_constant_valid_p (value, TREE_TYPE (value))))
465 return split_nonconstant_init (decl, value);
467 /* Store the VALUE in DECL_INITIAL. If we're building a
468 statement-tree we will actually expand the initialization later
469 when we output this function. */
470 DECL_INITIAL (decl) = value;
475 /* Digest the parser output INIT as an initializer for type TYPE.
476 Return a C expression of type TYPE to represent the initial value.
478 If TAIL is nonzero, it points to a variable holding a list of elements
479 of which INIT is the first. We update the list stored there by
480 removing from the head all the elements that we use.
481 Normally this is only one; we use more than one element only if
482 TYPE is an aggregate and INIT is not a constructor. */
485 digest_init (tree type, tree init, tree* tail)
487 enum tree_code code = TREE_CODE (type);
488 tree element = NULL_TREE;
489 tree old_tail_contents = NULL_TREE;
490 /* Nonzero if INIT is a braced grouping. */
493 /* By default, assume we use one element from a list.
494 We correct this later in the sole case where it is not true. */
498 old_tail_contents = *tail;
499 *tail = TREE_CHAIN (*tail);
502 if (init == error_mark_node || (TREE_CODE (init) == TREE_LIST
503 && TREE_VALUE (init) == error_mark_node))
504 return error_mark_node;
506 if (TREE_CODE (init) == ERROR_MARK)
507 /* __PRETTY_FUNCTION__'s initializer is a bogus expression inside
508 a template function. This gets substituted during instantiation. */
511 /* We must strip the outermost array type when completing the type,
512 because the its bounds might be incomplete at the moment. */
513 if (!complete_type_or_else (TREE_CODE (type) == ARRAY_TYPE
514 ? TREE_TYPE (type) : type, NULL_TREE))
515 return error_mark_node;
517 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
518 if (TREE_CODE (init) == NON_LVALUE_EXPR)
519 init = TREE_OPERAND (init, 0);
521 raw_constructor = (TREE_CODE (init) == CONSTRUCTOR
522 && TREE_HAS_CONSTRUCTOR (init));
525 && CONSTRUCTOR_ELTS (init) != 0
526 && TREE_CHAIN (CONSTRUCTOR_ELTS (init)) == 0)
528 element = TREE_VALUE (CONSTRUCTOR_ELTS (init));
529 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
530 if (element && TREE_CODE (element) == NON_LVALUE_EXPR)
531 element = TREE_OPERAND (element, 0);
532 if (element == error_mark_node)
536 /* Initialization of an array of chars from a string constant
537 optionally enclosed in braces. */
539 if (code == ARRAY_TYPE)
543 if (TREE_CODE (init) == TREE_LIST)
545 error ("initializing array with parameter list");
546 return error_mark_node;
549 typ1 = TYPE_MAIN_VARIANT (TREE_TYPE (type));
550 if (char_type_p (typ1)
551 && ((init && TREE_CODE (init) == STRING_CST)
552 || (element && TREE_CODE (element) == STRING_CST)))
554 tree string = element ? element : init;
556 if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (string)))
558 && TYPE_PRECISION (typ1) == BITS_PER_UNIT)
560 error ("char-array initialized from wide string");
561 return error_mark_node;
563 if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (string)))
565 && TYPE_PRECISION (typ1) != BITS_PER_UNIT)
567 error ("int-array initialized from non-wide string");
568 return error_mark_node;
571 TREE_TYPE (string) = type;
572 if (TYPE_DOMAIN (type) != 0
573 && TREE_CONSTANT (TYPE_SIZE (type)))
575 int size = TREE_INT_CST_LOW (TYPE_SIZE (type));
576 size = (size + BITS_PER_UNIT - 1) / BITS_PER_UNIT;
577 /* In C it is ok to subtract 1 from the length of the string
578 because it's ok to ignore the terminating null char that is
579 counted in the length of the constant, but in C++ this would
581 if (size < TREE_STRING_LENGTH (string))
582 pedwarn ("initializer-string for array of chars is too long");
588 /* Handle scalar types, including conversions,
589 and signature pointers and references. */
591 if (code == INTEGER_TYPE || code == REAL_TYPE || code == POINTER_TYPE
592 || code == ENUMERAL_TYPE || code == REFERENCE_TYPE
593 || code == BOOLEAN_TYPE || code == COMPLEX_TYPE
594 || TYPE_PTR_TO_MEMBER_P (type))
600 error ("initializer for scalar variable requires one element");
601 return error_mark_node;
605 while (TREE_CODE (init) == CONSTRUCTOR && TREE_HAS_CONSTRUCTOR (init))
607 pedwarn ("braces around scalar initializer for `%T'", type);
608 init = CONSTRUCTOR_ELTS (init);
609 if (TREE_CHAIN (init))
610 pedwarn ("ignoring extra initializers for `%T'", type);
611 init = TREE_VALUE (init);
614 return convert_for_initialization (0, type, init, LOOKUP_NORMAL,
615 "initialization", NULL_TREE, 0);
618 /* Come here only for records and arrays (and unions with constructors). */
620 if (COMPLETE_TYPE_P (type) && ! TREE_CONSTANT (TYPE_SIZE (type)))
622 error ("variable-sized object of type `%T' may not be initialized",
624 return error_mark_node;
627 if (code == ARRAY_TYPE || code == VECTOR_TYPE || IS_AGGR_TYPE_CODE (code))
629 if (raw_constructor && TYPE_NON_AGGREGATE_CLASS (type)
630 && TREE_HAS_CONSTRUCTOR (init))
632 error ("subobject of type `%T' must be initialized by constructor, not by `%E'",
634 return error_mark_node;
636 else if (raw_constructor)
637 return process_init_constructor (type, init, (tree *)0);
638 else if (can_convert_arg (type, TREE_TYPE (init), init)
639 || TYPE_NON_AGGREGATE_CLASS (type))
640 /* These are never initialized from multiple constructor elements. */;
643 *tail = old_tail_contents;
644 return process_init_constructor (type, 0, tail);
647 if (code != ARRAY_TYPE)
649 int flags = LOOKUP_NORMAL;
650 /* Initialization from { } is copy-initialization. */
652 flags |= LOOKUP_ONLYCONVERTING;
654 return convert_for_initialization (NULL_TREE, type, init, flags,
655 "initialization", NULL_TREE, 0);
659 error ("invalid initializer");
660 return error_mark_node;
663 /* Process a constructor for a variable of type TYPE.
664 The constructor elements may be specified either with INIT or with ELTS,
665 only one of which should be non-null.
667 If INIT is specified, it is a CONSTRUCTOR node which is specifically
668 and solely for initializing this datum.
670 If ELTS is specified, it is the address of a variable containing
671 a list of expressions. We take as many elements as we need
672 from the head of the list and update the list.
674 In the resulting constructor, TREE_CONSTANT is set if all elts are
675 constant, and TREE_STATIC is set if, in addition, all elts are simple enough
676 constants that the assembler and linker can compute them. */
679 process_init_constructor (tree type, tree init, tree* elts)
682 /* List of the elements of the result constructor,
691 /* Make TAIL be the list of elements to use for the initialization,
692 no matter how the data was given to us. */
696 if (warn_missing_braces)
697 warning ("aggregate has a partly bracketed initializer");
701 tail = CONSTRUCTOR_ELTS (init);
703 /* Gobble as many elements as needed, and make a constructor or initial value
704 for each element of this aggregate. Chain them together in result.
705 If there are too few, use 0 for each scalar ultimate component. */
707 if (TREE_CODE (type) == ARRAY_TYPE || TREE_CODE (type) == VECTOR_TYPE)
712 if (TREE_CODE (type) == ARRAY_TYPE)
714 tree domain = TYPE_DOMAIN (type);
716 len = (TREE_INT_CST_LOW (TYPE_MAX_VALUE (domain))
717 - TREE_INT_CST_LOW (TYPE_MIN_VALUE (domain))
720 len = -1; /* Take as many as there are. */
724 /* Vectors are like simple fixed-size arrays. */
725 len = TYPE_VECTOR_SUBPARTS (type);
728 for (i = 0; len < 0 || i < len; i++)
732 if (TREE_PURPOSE (tail)
733 && (TREE_CODE (TREE_PURPOSE (tail)) != INTEGER_CST
734 || compare_tree_int (TREE_PURPOSE (tail), i) != 0))
735 sorry ("non-trivial labeled initializers");
737 if (TREE_VALUE (tail) != 0)
740 next1 = digest_init (TREE_TYPE (type),
741 TREE_VALUE (tail), &tail1);
742 if (next1 == error_mark_node)
745 (same_type_ignoring_top_level_qualifiers_p
746 (TREE_TYPE (type), TREE_TYPE (next1)),
748 my_friendly_assert (tail1 == 0
749 || TREE_CODE (tail1) == TREE_LIST, 319);
750 if (tail == tail1 && len < 0)
752 error ("non-empty initializer for array of empty elements");
753 /* Just ignore what we were supposed to use. */
760 next1 = error_mark_node;
761 tail = TREE_CHAIN (tail);
767 else if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (type)))
769 /* If this type needs constructors run for
770 default-initialization, we can't rely on the backend to do it
771 for us, so build up TARGET_EXPRs. If the type in question is
772 a class, just build one up; if it's an array, recurse. */
774 if (IS_AGGR_TYPE (TREE_TYPE (type)))
775 next1 = build_functional_cast (TREE_TYPE (type), NULL_TREE);
777 next1 = build_constructor (NULL_TREE, NULL_TREE);
778 next1 = digest_init (TREE_TYPE (type), next1, 0);
780 else if (! zero_init_p (TREE_TYPE (type)))
781 next1 = build_zero_init (TREE_TYPE (type),
783 /*static_storage_p=*/false);
785 /* The default zero-initialization is fine for us; don't
786 add anything to the CONSTRUCTOR. */
789 if (next1 == error_mark_node)
791 else if (!TREE_CONSTANT (next1))
793 else if (! initializer_constant_valid_p (next1, TREE_TYPE (next1)))
795 members = tree_cons (size_int (i), next1, members);
798 else if (TREE_CODE (type) == RECORD_TYPE)
804 if (TYPE_USES_VIRTUAL_BASECLASSES (type))
806 sorry ("initializer list for object of class with virtual base classes");
807 return error_mark_node;
810 if (TYPE_BINFO_BASETYPES (type))
812 sorry ("initializer list for object of class with base classes");
813 return error_mark_node;
816 if (TYPE_POLYMORPHIC_P (type))
818 sorry ("initializer list for object using virtual functions");
819 return error_mark_node;
823 for (field = TYPE_FIELDS (type); field;
824 field = TREE_CHAIN (field))
826 if (! DECL_NAME (field) && DECL_C_BIT_FIELD (field))
828 members = tree_cons (field, integer_zero_node, members);
832 if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field))
837 if (TREE_PURPOSE (tail)
838 && TREE_PURPOSE (tail) != field
839 && TREE_PURPOSE (tail) != DECL_NAME (field))
840 sorry ("non-trivial labeled initializers");
842 if (TREE_VALUE (tail) != 0)
846 next1 = digest_init (TREE_TYPE (field),
847 TREE_VALUE (tail), &tail1);
848 my_friendly_assert (tail1 == 0
849 || TREE_CODE (tail1) == TREE_LIST, 320);
854 next1 = error_mark_node;
855 tail = TREE_CHAIN (tail);
858 else if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (field)))
860 /* If this type needs constructors run for
861 default-initialization, we can't rely on the backend to do it
862 for us, so build up TARGET_EXPRs. If the type in question is
863 a class, just build one up; if it's an array, recurse. */
865 if (IS_AGGR_TYPE (TREE_TYPE (field)))
866 next1 = build_functional_cast (TREE_TYPE (field),
870 next1 = build_constructor (NULL_TREE, NULL_TREE);
872 TREE_HAS_CONSTRUCTOR (next1)
873 = TREE_HAS_CONSTRUCTOR (init);
875 next1 = digest_init (TREE_TYPE (field), next1, 0);
877 /* Warn when some struct elements are implicitly initialized. */
879 && (!init || TREE_HAS_CONSTRUCTOR (init)))
880 warning ("missing initializer for member `%D'", field);
884 if (TREE_READONLY (field))
885 error ("uninitialized const member `%D'", field);
886 else if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (TREE_TYPE (field)))
887 error ("member `%D' with uninitialized const fields",
889 else if (TREE_CODE (TREE_TYPE (field)) == REFERENCE_TYPE)
890 error ("member `%D' is uninitialized reference", field);
892 /* Warn when some struct elements are implicitly initialized
895 && (!init || TREE_HAS_CONSTRUCTOR (init)))
896 warning ("missing initializer for member `%D'", field);
898 if (! zero_init_p (TREE_TYPE (field)))
899 next1 = build_zero_init (TREE_TYPE (field),
901 /*static_storage_p=*/false);
903 /* The default zero-initialization is fine for us; don't
904 add anything to the CONSTRUCTOR. */
908 if (next1 == error_mark_node)
910 else if (!TREE_CONSTANT (next1))
912 else if (! initializer_constant_valid_p (next1, TREE_TYPE (next1)))
914 members = tree_cons (field, next1, members);
917 else if (TREE_CODE (type) == UNION_TYPE
918 /* If the initializer was empty, use default zero initialization. */
921 tree field = TYPE_FIELDS (type);
923 /* Find the first named field. ANSI decided in September 1990
924 that only named fields count here. */
925 while (field && (!DECL_NAME (field) || TREE_CODE (field) != FIELD_DECL))
926 field = TREE_CHAIN (field);
928 /* If this element specifies a field, initialize via that field. */
929 if (TREE_PURPOSE (tail) != NULL_TREE)
933 if (TREE_CODE (TREE_PURPOSE (tail)) == FIELD_DECL)
934 /* Handle the case of a call by build_c_cast. */
935 field = TREE_PURPOSE (tail), win = 1;
936 else if (TREE_CODE (TREE_PURPOSE (tail)) != IDENTIFIER_NODE)
937 error ("index value instead of field name in union initializer");
941 for (temp = TYPE_FIELDS (type);
943 temp = TREE_CHAIN (temp))
944 if (DECL_NAME (temp) == TREE_PURPOSE (tail))
947 field = temp, win = 1;
949 error ("no field `%D' in union being initialized",
950 TREE_PURPOSE (tail));
953 TREE_VALUE (tail) = error_mark_node;
957 error ("union `%T' with no named members cannot be initialized",
959 TREE_VALUE (tail) = error_mark_node;
962 if (TREE_VALUE (tail) != 0)
966 next1 = digest_init (TREE_TYPE (field),
967 TREE_VALUE (tail), &tail1);
968 if (tail1 != 0 && TREE_CODE (tail1) != TREE_LIST)
974 next1 = error_mark_node;
975 tail = TREE_CHAIN (tail);
978 if (next1 == error_mark_node)
980 else if (!TREE_CONSTANT (next1))
982 else if (initializer_constant_valid_p (next1, TREE_TYPE (next1)) == 0)
984 members = tree_cons (field, next1, members);
987 /* If arguments were specified as a list, just remove the ones we used. */
990 /* If arguments were specified as a constructor,
991 complain unless we used all the elements of the constructor. */
993 pedwarn ("excess elements in aggregate initializer");
996 return error_mark_node;
998 result = build_constructor (type, nreverse (members));
999 if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type) == NULL_TREE)
1000 complete_array_type (type, result, /*do_default=*/0);
1002 TREE_HAS_CONSTRUCTOR (result) = TREE_HAS_CONSTRUCTOR (init);
1003 if (allconstant) TREE_CONSTANT (result) = 1;
1004 if (allconstant && allsimple) TREE_STATIC (result) = 1;
1008 /* Given a structure or union value DATUM, construct and return
1009 the structure or union component which results from narrowing
1010 that value to the base specified in BASETYPE. For example, given the
1013 class L { int ii; };
1014 class A : L { ... };
1015 class B : L { ... };
1016 class C : A, B { ... };
1024 x.A::ii refers to the ii member of the L part of
1025 the A part of the C object named by X. In this case,
1026 DATUM would be x, and BASETYPE would be A.
1028 I used to think that this was nonconformant, that the standard specified
1029 that first we look up ii in A, then convert x to an L& and pull out the
1030 ii part. But in fact, it does say that we convert x to an A&; A here
1031 is known as the "naming class". (jason 2000-12-19)
1033 BINFO_P points to a variable initialized either to NULL_TREE or to the
1034 binfo for the specific base subobject we want to convert to. */
1037 build_scoped_ref (tree datum, tree basetype, tree* binfo_p)
1041 if (datum == error_mark_node)
1042 return error_mark_node;
1046 binfo = lookup_base (TREE_TYPE (datum), basetype, ba_check, NULL);
1048 if (!binfo || binfo == error_mark_node)
1050 *binfo_p = NULL_TREE;
1052 error_not_base_type (basetype, TREE_TYPE (datum));
1053 return error_mark_node;
1057 return build_base_path (PLUS_EXPR, datum, binfo, 1);
1060 /* Build a reference to an object specified by the C++ `->' operator.
1061 Usually this just involves dereferencing the object, but if the
1062 `->' operator is overloaded, then such overloads must be
1063 performed until an object which does not have the `->' operator
1064 overloaded is found. An error is reported when circular pointer
1065 delegation is detected. */
1068 build_x_arrow (tree expr)
1070 tree orig_expr = expr;
1071 tree types_memoized = NULL_TREE;
1072 tree type = TREE_TYPE (expr);
1073 tree last_rval = NULL_TREE;
1075 if (type == error_mark_node)
1076 return error_mark_node;
1078 if (processing_template_decl)
1080 if (type_dependent_expression_p (expr))
1081 return build_min_nt (ARROW_EXPR, expr);
1082 expr = build_non_dependent_expr (expr);
1085 if (TREE_CODE (type) == REFERENCE_TYPE)
1087 expr = convert_from_reference (expr);
1088 type = TREE_TYPE (expr);
1091 if (IS_AGGR_TYPE (type))
1093 while ((expr = build_new_op (COMPONENT_REF, LOOKUP_NORMAL, expr,
1094 NULL_TREE, NULL_TREE)))
1096 if (expr == error_mark_node)
1097 return error_mark_node;
1099 if (value_member (TREE_TYPE (expr), types_memoized))
1101 error ("circular pointer delegation detected");
1102 return error_mark_node;
1106 types_memoized = tree_cons (NULL_TREE, TREE_TYPE (expr),
1112 if (last_rval == NULL_TREE)
1114 error ("base operand of `->' has non-pointer type `%T'", type);
1115 return error_mark_node;
1118 if (TREE_CODE (TREE_TYPE (last_rval)) == REFERENCE_TYPE)
1119 last_rval = convert_from_reference (last_rval);
1122 last_rval = decay_conversion (expr);
1124 if (TREE_CODE (TREE_TYPE (last_rval)) == POINTER_TYPE)
1126 if (processing_template_decl)
1128 expr = build_min_non_dep (ARROW_EXPR, last_rval, orig_expr);
1129 /* It will be dereferenced. */
1130 TREE_TYPE (expr) = TREE_TYPE (TREE_TYPE (last_rval));
1134 return build_indirect_ref (last_rval, NULL);
1138 error ("result of `operator->()' yields non-pointer result");
1140 error ("base operand of `->' is not a pointer");
1141 return error_mark_node;
1144 /* Return an expression for "DATUM .* COMPONENT". DATUM has not
1145 already been checked out to be of aggregate type. */
1148 build_m_component_ref (tree datum, tree component)
1155 datum = decay_conversion (datum);
1157 if (datum == error_mark_node || component == error_mark_node)
1158 return error_mark_node;
1160 ptrmem_type = TREE_TYPE (component);
1161 if (!TYPE_PTR_TO_MEMBER_P (ptrmem_type))
1163 error ("`%E' cannot be used as a member pointer, since it is of type `%T'",
1164 component, ptrmem_type);
1165 return error_mark_node;
1168 objtype = TYPE_MAIN_VARIANT (TREE_TYPE (datum));
1169 if (! IS_AGGR_TYPE (objtype))
1171 error ("cannot apply member pointer `%E' to `%E', which is of non-aggregate type `%T'",
1172 component, datum, objtype);
1173 return error_mark_node;
1176 type = TYPE_PTRMEM_POINTED_TO_TYPE (ptrmem_type);
1177 binfo = lookup_base (objtype, TYPE_PTRMEM_CLASS_TYPE (ptrmem_type),
1181 error ("member type `%T::' incompatible with object type `%T'",
1183 return error_mark_node;
1185 else if (binfo == error_mark_node)
1186 return error_mark_node;
1188 if (TYPE_PTRMEM_P (ptrmem_type))
1190 /* Compute the type of the field, as described in [expr.ref].
1191 There's no such thing as a mutable pointer-to-member, so
1192 things are not as complex as they are for references to
1193 non-static data members. */
1194 type = cp_build_qualified_type (type,
1195 (cp_type_quals (type)
1196 | cp_type_quals (TREE_TYPE (datum))));
1197 /* Build an expression for "object + offset" where offset is the
1198 value stored in the pointer-to-data-member. */
1199 datum = build (PLUS_EXPR, build_pointer_type (type),
1200 build_base_path (PLUS_EXPR, build_address (datum),
1202 build_nop (ptrdiff_type_node, component));
1203 return build_indirect_ref (datum, 0);
1206 return build (OFFSET_REF, type, datum, component);
1209 /* Return a tree node for the expression TYPENAME '(' PARMS ')'. */
1212 build_functional_cast (tree exp, tree parms)
1214 /* This is either a call to a constructor,
1215 or a C cast in C++'s `functional' notation. */
1218 if (exp == error_mark_node || parms == error_mark_node)
1219 return error_mark_node;
1221 if (TREE_CODE (exp) == TYPE_DECL)
1222 type = TREE_TYPE (exp);
1226 if (processing_template_decl)
1228 tree t = build_min (CAST_EXPR, type, parms);
1229 /* We don't know if it will or will not have side effects. */
1230 TREE_SIDE_EFFECTS (t) = 1;
1234 if (! IS_AGGR_TYPE (type))
1236 /* This must build a C cast. */
1237 if (parms == NULL_TREE)
1238 parms = integer_zero_node;
1240 parms = build_x_compound_expr_from_list (parms, "functional cast");
1242 return build_c_cast (type, parms);
1245 /* Prepare to evaluate as a call to a constructor. If this expression
1246 is actually used, for example,
1248 return X (arg1, arg2, ...);
1250 then the slot being initialized will be filled in. */
1252 if (!complete_type_or_else (type, NULL_TREE))
1253 return error_mark_node;
1254 if (abstract_virtuals_error (NULL_TREE, type))
1255 return error_mark_node;
1257 if (parms && TREE_CHAIN (parms) == NULL_TREE)
1258 return build_c_cast (type, TREE_VALUE (parms));
1260 /* We need to zero-initialize POD types. Let's do that for everything
1261 that doesn't need a constructor. */
1262 if (parms == NULL_TREE && !TYPE_NEEDS_CONSTRUCTING (type)
1263 && TYPE_HAS_DEFAULT_CONSTRUCTOR (type))
1265 exp = build_constructor (type, NULL_TREE);
1266 return get_target_expr (exp);
1269 exp = build_special_member_call (NULL_TREE, complete_ctor_identifier, parms,
1270 TYPE_BINFO (type), LOOKUP_NORMAL);
1272 if (exp == error_mark_node)
1273 return error_mark_node;
1275 return build_cplus_new (type, exp);
1279 /* Add new exception specifier SPEC, to the LIST we currently have.
1280 If it's already in LIST then do nothing.
1281 Moan if it's bad and we're allowed to. COMPLAIN < 0 means we
1282 know what we're doing. */
1285 add_exception_specifier (tree list, tree spec, int complain)
1290 int diag_type = -1; /* none */
1292 if (spec == error_mark_node)
1295 my_friendly_assert (spec && (!list || TREE_VALUE (list)), 19990317);
1297 /* [except.spec] 1, type in an exception specifier shall not be
1298 incomplete, or pointer or ref to incomplete other than pointer
1300 is_ptr = TREE_CODE (core) == POINTER_TYPE;
1301 if (is_ptr || TREE_CODE (core) == REFERENCE_TYPE)
1302 core = TREE_TYPE (core);
1305 else if (VOID_TYPE_P (core))
1307 else if (TREE_CODE (core) == TEMPLATE_TYPE_PARM)
1309 else if (processing_template_decl)
1314 /* 15.4/1 says that types in an exception specifier must be complete,
1315 but it seems more reasonable to only require this on definitions
1316 and calls. So just give a pedwarn at this point; we will give an
1317 error later if we hit one of those two cases. */
1318 if (!COMPLETE_TYPE_P (complete_type (core)))
1319 diag_type = 2; /* pedwarn */
1326 for (probe = list; probe; probe = TREE_CHAIN (probe))
1327 if (same_type_p (TREE_VALUE (probe), spec))
1330 list = tree_cons (NULL_TREE, spec, list);
1333 diag_type = 0; /* error */
1335 if (diag_type >= 0 && complain)
1336 cxx_incomplete_type_diagnostic (NULL_TREE, core, diag_type);
1341 /* Combine the two exceptions specifier lists LIST and ADD, and return
1345 merge_exception_specifiers (tree list, tree add)
1349 else if (!TREE_VALUE (list))
1351 else if (!TREE_VALUE (add))
1355 tree orig_list = list;
1357 for (; add; add = TREE_CHAIN (add))
1359 tree spec = TREE_VALUE (add);
1362 for (probe = orig_list; probe; probe = TREE_CHAIN (probe))
1363 if (same_type_p (TREE_VALUE (probe), spec))
1367 spec = build_tree_list (NULL_TREE, spec);
1368 TREE_CHAIN (spec) = list;
1376 /* Subroutine of build_call. Ensure that each of the types in the
1377 exception specification is complete. Technically, 15.4/1 says that
1378 they need to be complete when we see a declaration of the function,
1379 but we should be able to get away with only requiring this when the
1380 function is defined or called. See also add_exception_specifier. */
1383 require_complete_eh_spec_types (tree fntype, tree decl)
1386 /* Don't complain about calls to op new. */
1387 if (decl && DECL_ARTIFICIAL (decl))
1389 for (raises = TYPE_RAISES_EXCEPTIONS (fntype); raises;
1390 raises = TREE_CHAIN (raises))
1392 tree type = TREE_VALUE (raises);
1393 if (type && !COMPLETE_TYPE_P (type))
1397 ("call to function `%D' which throws incomplete type `%#T'",
1400 error ("call to function which throws incomplete type `%#T'",