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 Free Software Foundation, Inc.
5 Hacked by Michael Tiemann (tiemann@cygnus.com)
7 This file is part of GNU CC.
9 GNU CC is free software; you can redistribute it and/or modify
10 it under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 2, or (at your option)
14 GNU CC is distributed in the hope that it will be useful,
15 but WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
17 GNU General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with GNU CC; see the file COPYING. If not, write to
21 the Free Software Foundation, 59 Temple Place - Suite 330,
22 Boston, MA 02111-1307, USA. */
25 /* This file is part of the C++ front end.
26 It contains routines to build C++ expressions given their operands,
27 including computing the types of the result, C and C++ specific error
28 checks, and some optimization.
30 There are also routines to build RETURN_STMT nodes and CASE_STMT nodes,
31 and to process initializations in declarations (since they work
32 like a strange sort of assignment). */
41 #include "diagnostic.h"
43 static tree process_init_constructor PARAMS ((tree, tree, tree *));
45 /* Print an error message stemming from an attempt to use
46 BASETYPE as a base class for TYPE. */
49 error_not_base_type (basetype, type)
52 if (TREE_CODE (basetype) == FUNCTION_DECL)
53 basetype = DECL_CONTEXT (basetype);
54 error ("type `%T' is not a base type for type `%T'", basetype, type);
55 return error_mark_node;
59 binfo_or_else (base, type)
62 tree binfo = lookup_base (type, base, ba_ignore, NULL);
64 if (binfo == error_mark_node)
67 error_not_base_type (base, type);
71 /* According to ARM $7.1.6, "A `const' object may be initialized, but its
72 value may not be changed thereafter. Thus, we emit hard errors for these,
73 rather than just pedwarns. If `SOFT' is 1, then we just pedwarn. (For
74 example, conversions to references.) */
77 readonly_error (arg, string, soft)
83 void (*fn) PARAMS ((const char *, ...));
90 if (TREE_CODE (arg) == COMPONENT_REF)
92 if (TYPE_READONLY (TREE_TYPE (TREE_OPERAND (arg, 0))))
93 fmt = "%s of data-member `%D' in read-only structure";
95 fmt = "%s of read-only data-member `%D'";
96 (*fn) (fmt, string, TREE_OPERAND (arg, 1));
98 else if (TREE_CODE (arg) == VAR_DECL)
100 if (DECL_LANG_SPECIFIC (arg)
101 && DECL_IN_AGGR_P (arg)
102 && !TREE_STATIC (arg))
103 fmt = "%s of constant field `%D'";
105 fmt = "%s of read-only variable `%D'";
106 (*fn) (fmt, string, arg);
108 else if (TREE_CODE (arg) == PARM_DECL)
109 (*fn) ("%s of read-only parameter `%D'", string, arg);
110 else if (TREE_CODE (arg) == INDIRECT_REF
111 && TREE_CODE (TREE_TYPE (TREE_OPERAND (arg, 0))) == REFERENCE_TYPE
112 && (TREE_CODE (TREE_OPERAND (arg, 0)) == VAR_DECL
113 || TREE_CODE (TREE_OPERAND (arg, 0)) == PARM_DECL))
114 (*fn) ("%s of read-only reference `%D'", string, TREE_OPERAND (arg, 0));
115 else if (TREE_CODE (arg) == RESULT_DECL)
116 (*fn) ("%s of read-only named return value `%D'", string, arg);
117 else if (TREE_CODE (arg) == FUNCTION_DECL)
118 (*fn) ("%s of function `%D'", string, arg);
120 (*fn) ("%s of read-only location", string);
123 /* If TYPE has abstract virtual functions, issue an error about trying
124 to create an object of that type. DECL is the object declared, or
125 NULL_TREE if the declaration is unavailable. Returns 1 if an error
126 occurred; zero if all was well. */
129 abstract_virtuals_error (decl, type)
136 if (!CLASS_TYPE_P (type) || !CLASSTYPE_PURE_VIRTUALS (type))
139 if (!TYPE_SIZE (type))
140 /* TYPE is being defined, and during that time
141 CLASSTYPE_PURE_VIRTUALS holds the inline friends. */
144 u = CLASSTYPE_PURE_VIRTUALS (type);
147 if (TREE_CODE (decl) == RESULT_DECL)
150 if (TREE_CODE (decl) == VAR_DECL)
151 error ("cannot declare variable `%D' to be of type `%T'",
153 else if (TREE_CODE (decl) == PARM_DECL)
154 error ("cannot declare parameter `%D' to be of type `%T'",
156 else if (TREE_CODE (decl) == FIELD_DECL)
157 error ("cannot declare field `%D' to be of type `%T'",
159 else if (TREE_CODE (decl) == FUNCTION_DECL
160 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
161 error ("invalid return type for member function `%#D'", decl);
162 else if (TREE_CODE (decl) == FUNCTION_DECL)
163 error ("invalid return type for function `%#D'", decl);
166 error ("cannot allocate an object of type `%T'", type);
168 /* Only go through this once. */
169 if (TREE_PURPOSE (u) == NULL_TREE)
171 TREE_PURPOSE (u) = error_mark_node;
173 error (" because the following virtual functions are abstract:");
174 for (tu = u; tu; tu = TREE_CHAIN (tu))
175 cp_error_at ("\t%#D", TREE_VALUE (tu));
178 error (" since type `%T' has abstract virtual functions", type);
183 /* Print an error message for invalid use of an incomplete type.
184 VALUE is the expression that was used (or 0 if that isn't known)
185 and TYPE is the type that was invalid. DIAG_TYPE indicates the
186 type of diagnostic: 0 for an error, 1 for a warning, 2 for a
190 cxx_incomplete_type_diagnostic (value, type, diag_type)
196 void (*p_msg) PARAMS ((const char *, ...));
197 void (*p_msg_at) PARAMS ((const char *, ...));
202 p_msg_at = cp_warning_at;
204 else if (diag_type == 2)
207 p_msg_at = cp_pedwarn_at;
212 p_msg_at = cp_error_at;
215 /* Avoid duplicate error message. */
216 if (TREE_CODE (type) == ERROR_MARK)
219 if (value != 0 && (TREE_CODE (value) == VAR_DECL
220 || TREE_CODE (value) == PARM_DECL
221 || TREE_CODE (value) == FIELD_DECL))
223 (*p_msg_at) ("`%D' has incomplete type", value);
227 /* We must print an error message. Be clever about what it says. */
229 switch (TREE_CODE (type))
235 (*p_msg) ("invalid use of undefined type `%#T'", type);
236 if (!TYPE_TEMPLATE_INFO (type))
237 (*p_msg_at) ("forward declaration of `%#T'", type);
239 (*p_msg_at) ("declaration of `%#T'", type);
243 (*p_msg) ("invalid use of `%T'", type);
247 if (TYPE_DOMAIN (type))
249 type = TREE_TYPE (type);
252 (*p_msg) ("invalid use of array with unspecified bounds");
257 (*p_msg) ("invalid use of member (did you forget the `&' ?)");
260 case TEMPLATE_TYPE_PARM:
261 (*p_msg) ("invalid use of template type parameter");
265 if (value && TREE_CODE (value) == COMPONENT_REF)
267 else if (value && TREE_CODE (value) == ADDR_EXPR)
268 (*p_msg) ("address of overloaded function with no contextual type information");
269 else if (value && TREE_CODE (value) == OVERLOAD)
270 (*p_msg) ("overloaded function with no contextual type information");
272 (*p_msg) ("insufficient contextual information to determine type");
280 /* Backward-compatibility interface to incomplete_type_diagnostic;
281 required by ../tree.c. */
282 #undef cxx_incomplete_type_error
284 cxx_incomplete_type_error (value, type)
288 cxx_incomplete_type_diagnostic (value, type, 0);
292 /* Perform appropriate conversions on the initial value of a variable,
293 store it in the declaration DECL,
294 and print any error messages that are appropriate.
295 If the init is invalid, store an ERROR_MARK.
297 C++: Note that INIT might be a TREE_LIST, which would mean that it is
298 a base class initializer for some aggregate type, hopefully compatible
299 with DECL. If INIT is a single element, and DECL is an aggregate
300 type, we silently convert INIT into a TREE_LIST, allowing a constructor
303 If INIT is a TREE_LIST and there is no constructor, turn INIT
304 into a CONSTRUCTOR and use standard initialization techniques.
305 Perhaps a warning should be generated?
307 Returns value of initializer if initialization could not be
308 performed for static variable. In that case, caller must do
312 store_init_value (decl, init)
315 register tree value, type;
317 /* If variable's type was invalidly declared, just ignore it. */
319 type = TREE_TYPE (decl);
320 if (TREE_CODE (type) == ERROR_MARK)
323 if (IS_AGGR_TYPE (type))
325 if (! TYPE_HAS_TRIVIAL_INIT_REF (type)
326 && TREE_CODE (init) != CONSTRUCTOR)
329 if (TREE_CODE (init) == TREE_LIST)
331 error ("constructor syntax used, but no constructor declared for type `%T'", type);
332 init = build_nt (CONSTRUCTOR, NULL_TREE, nreverse (init));
335 else if (TREE_CODE (init) == TREE_LIST
336 && TREE_TYPE (init) != unknown_type_node)
338 if (TREE_CODE (decl) == RESULT_DECL)
340 if (TREE_CHAIN (init))
342 warning ("comma expression used to initialize return value");
343 init = build_compound_expr (init);
346 init = TREE_VALUE (init);
348 else if (TREE_CODE (init) == TREE_LIST
349 && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
351 error ("cannot initialize arrays using this syntax");
356 /* We get here with code like `int a (2);' */
358 if (TREE_CHAIN (init) != NULL_TREE)
360 pedwarn ("initializer list being treated as compound expression");
361 init = build_compound_expr (init);
364 init = TREE_VALUE (init);
368 /* End of special C++ code. */
370 /* Digest the specified initializer into an expression. */
371 value = digest_init (type, init, (tree *) 0);
373 /* Store the expression if valid; else report error. */
375 if (TREE_CODE (value) == ERROR_MARK)
377 /* Other code expects that initializers for objects of types that need
378 constructing never make it into DECL_INITIAL, and passes 'init' to
379 build_aggr_init without checking DECL_INITIAL. So just return. */
380 else if (TYPE_NEEDS_CONSTRUCTING (type))
382 else if (TREE_STATIC (decl)
383 && (! TREE_CONSTANT (value)
384 || ! initializer_constant_valid_p (value, TREE_TYPE (value))
386 /* A STATIC PUBLIC int variable doesn't have to be
387 run time inited when doing pic. (mrs) */
388 /* Since ctors and dtors are the only things that can
389 reference vtables, and they are always written down
390 the vtable definition, we can leave the
391 vtables in initialized data space.
392 However, other initialized data cannot be initialized
393 this way. Instead a global file-level initializer
395 || (flag_pic && !DECL_VIRTUAL_P (decl) && TREE_PUBLIC (decl))
400 #if 0 /* No, that's C. jason 9/19/94 */
403 if (pedantic && TREE_CODE (value) == CONSTRUCTOR)
405 if (! TREE_CONSTANT (value) || ! TREE_STATIC (value))
406 pedwarn ("ISO C++ forbids non-constant aggregate initializer expressions");
411 /* Store the VALUE in DECL_INITIAL. If we're building a
412 statement-tree we will actually expand the initialization later
413 when we output this function. */
414 DECL_INITIAL (decl) = value;
419 /* Digest the parser output INIT as an initializer for type TYPE.
420 Return a C expression of type TYPE to represent the initial value.
422 If TAIL is nonzero, it points to a variable holding a list of elements
423 of which INIT is the first. We update the list stored there by
424 removing from the head all the elements that we use.
425 Normally this is only one; we use more than one element only if
426 TYPE is an aggregate and INIT is not a constructor. */
429 digest_init (type, init, tail)
430 tree type, init, *tail;
432 enum tree_code code = TREE_CODE (type);
433 tree element = NULL_TREE;
434 tree old_tail_contents = NULL_TREE;
435 /* Nonzero if INIT is a braced grouping. */
438 /* By default, assume we use one element from a list.
439 We correct this later in the sole case where it is not true. */
443 old_tail_contents = *tail;
444 *tail = TREE_CHAIN (*tail);
447 if (init == error_mark_node || (TREE_CODE (init) == TREE_LIST
448 && TREE_VALUE (init) == error_mark_node))
449 return error_mark_node;
451 if (TREE_CODE (init) == ERROR_MARK)
452 /* __PRETTY_FUNCTION__'s initializer is a bogus expression inside
453 a template function. This gets substituted during instantiation. */
456 /* We must strip the outermost array type when completing the type,
457 because the its bounds might be incomplete at the moment. */
458 if (!complete_type_or_else (TREE_CODE (type) == ARRAY_TYPE
459 ? TREE_TYPE (type) : type, NULL_TREE))
460 return error_mark_node;
462 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
463 if (TREE_CODE (init) == NON_LVALUE_EXPR)
464 init = TREE_OPERAND (init, 0);
466 raw_constructor = (TREE_CODE (init) == CONSTRUCTOR
467 && TREE_HAS_CONSTRUCTOR (init));
470 && CONSTRUCTOR_ELTS (init) != 0
471 && TREE_CHAIN (CONSTRUCTOR_ELTS (init)) == 0)
473 element = TREE_VALUE (CONSTRUCTOR_ELTS (init));
474 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
475 if (element && TREE_CODE (element) == NON_LVALUE_EXPR)
476 element = TREE_OPERAND (element, 0);
477 if (element == error_mark_node)
481 /* Initialization of an array of chars from a string constant
482 optionally enclosed in braces. */
484 if (code == ARRAY_TYPE)
488 if (TREE_CODE (init) == TREE_LIST)
490 error ("initializing array with parameter list");
491 return error_mark_node;
494 typ1 = TYPE_MAIN_VARIANT (TREE_TYPE (type));
495 if (char_type_p (typ1)
496 && ((init && TREE_CODE (init) == STRING_CST)
497 || (element && TREE_CODE (element) == STRING_CST)))
499 tree string = element ? element : init;
501 if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (string)))
503 && TYPE_PRECISION (typ1) == BITS_PER_UNIT)
505 error ("char-array initialized from wide string");
506 return error_mark_node;
508 if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (string)))
510 && TYPE_PRECISION (typ1) != BITS_PER_UNIT)
512 error ("int-array initialized from non-wide string");
513 return error_mark_node;
516 TREE_TYPE (string) = type;
517 if (TYPE_DOMAIN (type) != 0
518 && TREE_CONSTANT (TYPE_SIZE (type)))
521 = TREE_INT_CST_LOW (TYPE_SIZE (type));
522 size = (size + BITS_PER_UNIT - 1) / BITS_PER_UNIT;
523 /* In C it is ok to subtract 1 from the length of the string
524 because it's ok to ignore the terminating null char that is
525 counted in the length of the constant, but in C++ this would
527 if (size < TREE_STRING_LENGTH (string))
528 pedwarn ("initializer-string for array of chars is too long");
534 /* Handle scalar types, including conversions,
535 and signature pointers and references. */
537 if (code == INTEGER_TYPE || code == REAL_TYPE || code == POINTER_TYPE
538 || code == ENUMERAL_TYPE || code == REFERENCE_TYPE
539 || code == BOOLEAN_TYPE || code == COMPLEX_TYPE
540 || TYPE_PTRMEMFUNC_P (type))
546 error ("initializer for scalar variable requires one element");
547 return error_mark_node;
551 while (TREE_CODE (init) == CONSTRUCTOR && TREE_HAS_CONSTRUCTOR (init))
553 pedwarn ("braces around scalar initializer for `%T'", type);
554 init = CONSTRUCTOR_ELTS (init);
555 if (TREE_CHAIN (init))
556 pedwarn ("ignoring extra initializers for `%T'", type);
557 init = TREE_VALUE (init);
560 return convert_for_initialization (0, type, init, LOOKUP_NORMAL,
561 "initialization", NULL_TREE, 0);
564 /* Come here only for records and arrays (and unions with constructors). */
566 if (COMPLETE_TYPE_P (type) && ! TREE_CONSTANT (TYPE_SIZE (type)))
568 error ("variable-sized object of type `%T' may not be initialized",
570 return error_mark_node;
573 if (code == ARRAY_TYPE || code == VECTOR_TYPE || IS_AGGR_TYPE_CODE (code))
575 if (raw_constructor && TYPE_NON_AGGREGATE_CLASS (type)
576 && TREE_HAS_CONSTRUCTOR (init))
578 error ("subobject of type `%T' must be initialized by constructor, not by `%E'",
580 return error_mark_node;
582 else if (raw_constructor)
583 return process_init_constructor (type, init, (tree *)0);
584 else if (can_convert_arg (type, TREE_TYPE (init), init)
585 || TYPE_NON_AGGREGATE_CLASS (type))
586 /* These are never initialized from multiple constructor elements. */;
589 *tail = old_tail_contents;
590 return process_init_constructor (type, 0, tail);
593 if (code != ARRAY_TYPE)
595 int flags = LOOKUP_NORMAL;
596 /* Initialization from { } is copy-initialization. */
598 flags |= LOOKUP_ONLYCONVERTING;
600 return convert_for_initialization (NULL_TREE, type, init, flags,
601 "initialization", NULL_TREE, 0);
605 error ("invalid initializer");
606 return error_mark_node;
609 /* Process a constructor for a variable of type TYPE.
610 The constructor elements may be specified either with INIT or with ELTS,
611 only one of which should be non-null.
613 If INIT is specified, it is a CONSTRUCTOR node which is specifically
614 and solely for initializing this datum.
616 If ELTS is specified, it is the address of a variable containing
617 a list of expressions. We take as many elements as we need
618 from the head of the list and update the list.
620 In the resulting constructor, TREE_CONSTANT is set if all elts are
621 constant, and TREE_STATIC is set if, in addition, all elts are simple enough
622 constants that the assembler and linker can compute them. */
625 process_init_constructor (type, init, elts)
626 tree type, init, *elts;
629 /* List of the elements of the result constructor,
631 register tree members = NULL;
638 /* Make TAIL be the list of elements to use for the initialization,
639 no matter how the data was given to us. */
643 if (warn_missing_braces)
644 warning ("aggregate has a partly bracketed initializer");
648 tail = CONSTRUCTOR_ELTS (init);
650 /* Gobble as many elements as needed, and make a constructor or initial value
651 for each element of this aggregate. Chain them together in result.
652 If there are too few, use 0 for each scalar ultimate component. */
654 if (TREE_CODE (type) == ARRAY_TYPE || TREE_CODE (type) == VECTOR_TYPE)
659 if (TREE_CODE (type) == ARRAY_TYPE)
661 tree domain = TYPE_DOMAIN (type);
663 len = (TREE_INT_CST_LOW (TYPE_MAX_VALUE (domain))
664 - TREE_INT_CST_LOW (TYPE_MIN_VALUE (domain))
667 len = -1; /* Take as many as there are */
671 /* Vectors are like simple fixed-size arrays. */
672 len = TYPE_VECTOR_SUBPARTS (type);
675 for (i = 0; len < 0 || i < len; i++)
679 if (TREE_PURPOSE (tail)
680 && (TREE_CODE (TREE_PURPOSE (tail)) != INTEGER_CST
681 || compare_tree_int (TREE_PURPOSE (tail), i) != 0))
682 sorry ("non-trivial labeled initializers");
684 if (TREE_VALUE (tail) != 0)
687 next1 = digest_init (TREE_TYPE (type),
688 TREE_VALUE (tail), &tail1);
689 if (next1 == error_mark_node)
692 (same_type_ignoring_top_level_qualifiers_p
693 (TREE_TYPE (type), TREE_TYPE (next1)),
695 my_friendly_assert (tail1 == 0
696 || TREE_CODE (tail1) == TREE_LIST, 319);
697 if (tail == tail1 && len < 0)
699 error ("non-empty initializer for array of empty elements");
700 /* Just ignore what we were supposed to use. */
707 next1 = error_mark_node;
708 tail = TREE_CHAIN (tail);
714 else if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (type)))
716 /* If this type needs constructors run for
717 default-initialization, we can't rely on the backend to do it
718 for us, so build up TARGET_EXPRs. If the type in question is
719 a class, just build one up; if it's an array, recurse. */
721 if (IS_AGGR_TYPE (TREE_TYPE (type)))
722 next1 = build_functional_cast (TREE_TYPE (type), NULL_TREE);
724 next1 = build (CONSTRUCTOR, NULL_TREE, NULL_TREE, NULL_TREE);
725 next1 = digest_init (TREE_TYPE (type), next1, 0);
727 else if (! zero_init_p (TREE_TYPE (type)))
728 next1 = build_zero_init (TREE_TYPE (type),
729 /*static_storage_p=*/false);
731 /* The default zero-initialization is fine for us; don't
732 add anything to the CONSTRUCTOR. */
735 if (next1 == error_mark_node)
737 else if (!TREE_CONSTANT (next1))
739 else if (! initializer_constant_valid_p (next1, TREE_TYPE (next1)))
741 members = tree_cons (size_int (i), next1, members);
744 else if (TREE_CODE (type) == RECORD_TYPE)
750 if (TYPE_USES_VIRTUAL_BASECLASSES (type))
752 sorry ("initializer list for object of class with virtual base classes");
753 return error_mark_node;
756 if (TYPE_BINFO_BASETYPES (type))
758 sorry ("initializer list for object of class with base classes");
759 return error_mark_node;
762 if (TYPE_POLYMORPHIC_P (type))
764 sorry ("initializer list for object using virtual functions");
765 return error_mark_node;
769 for (field = TYPE_FIELDS (type); field;
770 field = TREE_CHAIN (field))
772 if (! DECL_NAME (field) && DECL_C_BIT_FIELD (field))
774 members = tree_cons (field, integer_zero_node, members);
778 if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field))
783 if (TREE_PURPOSE (tail)
784 && TREE_PURPOSE (tail) != field
785 && TREE_PURPOSE (tail) != DECL_NAME (field))
786 sorry ("non-trivial labeled initializers");
788 if (TREE_VALUE (tail) != 0)
792 next1 = digest_init (TREE_TYPE (field),
793 TREE_VALUE (tail), &tail1);
794 my_friendly_assert (tail1 == 0
795 || TREE_CODE (tail1) == TREE_LIST, 320);
800 next1 = error_mark_node;
801 tail = TREE_CHAIN (tail);
804 else if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (field)))
806 /* If this type needs constructors run for
807 default-initialization, we can't rely on the backend to do it
808 for us, so build up TARGET_EXPRs. If the type in question is
809 a class, just build one up; if it's an array, recurse. */
811 if (IS_AGGR_TYPE (TREE_TYPE (field)))
812 next1 = build_functional_cast (TREE_TYPE (field),
816 next1 = build (CONSTRUCTOR, NULL_TREE, NULL_TREE,
819 TREE_HAS_CONSTRUCTOR (next1)
820 = TREE_HAS_CONSTRUCTOR (init);
822 next1 = digest_init (TREE_TYPE (field), next1, 0);
824 /* Warn when some struct elements are implicitly initialized. */
826 && (!init || TREE_HAS_CONSTRUCTOR (init)))
827 warning ("missing initializer for member `%D'", field);
831 if (TREE_READONLY (field))
832 error ("uninitialized const member `%D'", field);
833 else if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (TREE_TYPE (field)))
834 error ("member `%D' with uninitialized const fields",
836 else if (TREE_CODE (TREE_TYPE (field)) == REFERENCE_TYPE)
837 error ("member `%D' is uninitialized reference", field);
839 /* Warn when some struct elements are implicitly initialized
842 && (!init || TREE_HAS_CONSTRUCTOR (init)))
843 warning ("missing initializer for member `%D'", field);
845 if (! zero_init_p (TREE_TYPE (field)))
846 next1 = build_zero_init (TREE_TYPE (field),
847 /*static_storage_p=*/false);
849 /* The default zero-initialization is fine for us; don't
850 add anything to the CONSTRUCTOR. */
854 if (next1 == error_mark_node)
856 else if (!TREE_CONSTANT (next1))
858 else if (! initializer_constant_valid_p (next1, TREE_TYPE (next1)))
860 members = tree_cons (field, next1, members);
863 else if (TREE_CODE (type) == UNION_TYPE
864 /* If the initializer was empty, use default zero initialization. */
867 register tree field = TYPE_FIELDS (type);
869 /* Find the first named field. ANSI decided in September 1990
870 that only named fields count here. */
871 while (field && (!DECL_NAME (field) || TREE_CODE (field) != FIELD_DECL))
872 field = TREE_CHAIN (field);
874 /* If this element specifies a field, initialize via that field. */
875 if (TREE_PURPOSE (tail) != NULL_TREE)
879 if (TREE_CODE (TREE_PURPOSE (tail)) == FIELD_DECL)
880 /* Handle the case of a call by build_c_cast. */
881 field = TREE_PURPOSE (tail), win = 1;
882 else if (TREE_CODE (TREE_PURPOSE (tail)) != IDENTIFIER_NODE)
883 error ("index value instead of field name in union initializer");
887 for (temp = TYPE_FIELDS (type);
889 temp = TREE_CHAIN (temp))
890 if (DECL_NAME (temp) == TREE_PURPOSE (tail))
893 field = temp, win = 1;
895 error ("no field `%D' in union being initialized",
896 TREE_PURPOSE (tail));
899 TREE_VALUE (tail) = error_mark_node;
903 error ("union `%T' with no named members cannot be initialized",
905 TREE_VALUE (tail) = error_mark_node;
908 if (TREE_VALUE (tail) != 0)
912 next1 = digest_init (TREE_TYPE (field),
913 TREE_VALUE (tail), &tail1);
914 if (tail1 != 0 && TREE_CODE (tail1) != TREE_LIST)
920 next1 = error_mark_node;
921 tail = TREE_CHAIN (tail);
924 if (next1 == error_mark_node)
926 else if (!TREE_CONSTANT (next1))
928 else if (initializer_constant_valid_p (next1, TREE_TYPE (next1)) == 0)
930 members = tree_cons (field, next1, members);
933 /* If arguments were specified as a list, just remove the ones we used. */
936 /* If arguments were specified as a constructor,
937 complain unless we used all the elements of the constructor. */
939 pedwarn ("excess elements in aggregate initializer");
942 return error_mark_node;
944 result = build (CONSTRUCTOR, type, NULL_TREE, nreverse (members));
946 TREE_HAS_CONSTRUCTOR (result) = TREE_HAS_CONSTRUCTOR (init);
947 if (allconstant) TREE_CONSTANT (result) = 1;
948 if (allconstant && allsimple) TREE_STATIC (result) = 1;
952 /* Given a structure or union value DATUM, construct and return
953 the structure or union component which results from narrowing
954 that value to the base specified in BASETYPE. For example, given the
960 class C : A, B { ... };
968 x.A::ii refers to the ii member of the L part of
969 the A part of the C object named by X. In this case,
970 DATUM would be x, and BASETYPE would be A.
972 I used to think that this was nonconformant, that the standard specified
973 that first we look up ii in A, then convert x to an L& and pull out the
974 ii part. But in fact, it does say that we convert x to an A&; A here
975 is known as the "naming class". (jason 2000-12-19)
977 BINFO_P points to a variable initialized either to NULL_TREE or to the
978 binfo for the specific base subobject we want to convert to. */
981 build_scoped_ref (datum, basetype, binfo_p)
988 if (datum == error_mark_node)
989 return error_mark_node;
993 binfo = lookup_base (TREE_TYPE (datum), basetype, ba_check, NULL);
995 if (!binfo || binfo == error_mark_node)
997 *binfo_p = NULL_TREE;
999 error_not_base_type (basetype, TREE_TYPE (datum));
1000 return error_mark_node;
1004 return build_base_path (PLUS_EXPR, datum, binfo, 1);
1007 /* Build a reference to an object specified by the C++ `->' operator.
1008 Usually this just involves dereferencing the object, but if the
1009 `->' operator is overloaded, then such overloads must be
1010 performed until an object which does not have the `->' operator
1011 overloaded is found. An error is reported when circular pointer
1012 delegation is detected. */
1015 build_x_arrow (datum)
1018 tree types_memoized = NULL_TREE;
1019 register tree rval = datum;
1020 tree type = TREE_TYPE (rval);
1021 tree last_rval = NULL_TREE;
1023 if (type == error_mark_node)
1024 return error_mark_node;
1026 if (processing_template_decl)
1027 return build_min_nt (ARROW_EXPR, rval);
1029 if (TREE_CODE (rval) == OFFSET_REF)
1031 rval = resolve_offset_ref (datum);
1032 type = TREE_TYPE (rval);
1035 if (TREE_CODE (type) == REFERENCE_TYPE)
1037 rval = convert_from_reference (rval);
1038 type = TREE_TYPE (rval);
1041 if (IS_AGGR_TYPE (type))
1043 while ((rval = build_opfncall (COMPONENT_REF, LOOKUP_NORMAL, rval,
1044 NULL_TREE, NULL_TREE)))
1046 if (rval == error_mark_node)
1047 return error_mark_node;
1049 if (value_member (TREE_TYPE (rval), types_memoized))
1051 error ("circular pointer delegation detected");
1052 return error_mark_node;
1056 types_memoized = tree_cons (NULL_TREE, TREE_TYPE (rval),
1062 if (last_rval == NULL_TREE)
1064 error ("base operand of `->' has non-pointer type `%T'", type);
1065 return error_mark_node;
1068 if (TREE_CODE (TREE_TYPE (last_rval)) == REFERENCE_TYPE)
1069 last_rval = convert_from_reference (last_rval);
1072 last_rval = default_conversion (rval);
1074 if (TREE_CODE (TREE_TYPE (last_rval)) == POINTER_TYPE)
1075 return build_indirect_ref (last_rval, NULL);
1078 error ("result of `operator->()' yields non-pointer result");
1080 error ("base operand of `->' is not a pointer");
1081 return error_mark_node;
1084 /* Make an expression to refer to the COMPONENT field of
1085 structure or union value DATUM. COMPONENT is an arbitrary
1086 expression. DATUM has not already been checked out to be of
1089 For C++, COMPONENT may be a TREE_LIST. This happens when we must
1090 return an object of member type to a method of the current class,
1091 but there is not yet enough typing information to know which one.
1092 As a special case, if there is only one method by that name,
1093 it is returned. Otherwise we return an expression which other
1094 routines will have to know how to deal with later. */
1097 build_m_component_ref (datum, component)
1098 tree datum, component;
1106 if (processing_template_decl)
1107 return build_min_nt (DOTSTAR_EXPR, datum, component);
1109 datum = decay_conversion (datum);
1111 if (datum == error_mark_node || component == error_mark_node)
1112 return error_mark_node;
1114 objtype = TYPE_MAIN_VARIANT (TREE_TYPE (datum));
1116 if (TYPE_PTRMEMFUNC_P (TREE_TYPE (component)))
1118 type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (TREE_TYPE (component)));
1121 else if (TYPE_PTRMEM_P (TREE_TYPE (component)))
1123 type = TREE_TYPE (TREE_TYPE (component));
1124 field_type = TREE_TYPE (type);
1126 /* Compute the type of the field, as described in [expr.ref]. */
1127 type_quals = TYPE_UNQUALIFIED;
1128 if (TREE_CODE (field_type) == REFERENCE_TYPE)
1129 /* The standard says that the type of the result should be the
1130 type referred to by the reference. But for now, at least,
1131 we do the conversion from reference type later. */
1135 type_quals = (cp_type_quals (field_type)
1136 | cp_type_quals (TREE_TYPE (datum)));
1138 /* There's no such thing as a mutable pointer-to-member, so
1139 things are not as complex as they are for references to
1140 non-static data members. */
1141 field_type = cp_build_qualified_type (field_type, type_quals);
1146 error ("`%E' cannot be used as a member pointer, since it is of type `%T'",
1147 component, TREE_TYPE (component));
1148 return error_mark_node;
1151 if (! IS_AGGR_TYPE (objtype))
1153 error ("cannot apply member pointer `%E' to `%E', which is of non-aggregate type `%T'",
1154 component, datum, objtype);
1155 return error_mark_node;
1158 binfo = lookup_base (objtype, TYPE_METHOD_BASETYPE (type),
1162 error ("member type `%T::' incompatible with object type `%T'",
1163 TYPE_METHOD_BASETYPE (type), objtype);
1164 return error_mark_node;
1166 else if (binfo == error_mark_node)
1167 return error_mark_node;
1169 component = build (OFFSET_REF, field_type, datum, component);
1170 if (TREE_CODE (type) == OFFSET_TYPE)
1171 component = resolve_offset_ref (component);
1175 /* Return a tree node for the expression TYPENAME '(' PARMS ')'. */
1178 build_functional_cast (exp, parms)
1182 /* This is either a call to a constructor,
1183 or a C cast in C++'s `functional' notation. */
1186 if (exp == error_mark_node || parms == error_mark_node)
1187 return error_mark_node;
1189 if (TREE_CODE (exp) == IDENTIFIER_NODE)
1191 if (IDENTIFIER_HAS_TYPE_VALUE (exp))
1192 /* Either an enum or an aggregate type. */
1193 type = IDENTIFIER_TYPE_VALUE (exp);
1196 type = lookup_name (exp, 1);
1197 if (!type || TREE_CODE (type) != TYPE_DECL)
1199 error ("`%T' fails to be a typedef or built-in type", exp);
1200 return error_mark_node;
1202 type = TREE_TYPE (type);
1205 else if (TREE_CODE (exp) == TYPE_DECL)
1206 type = TREE_TYPE (exp);
1210 if (processing_template_decl)
1211 return build_min (CAST_EXPR, type, parms);
1213 if (! IS_AGGR_TYPE (type))
1215 /* this must build a C cast */
1216 if (parms == NULL_TREE)
1217 parms = integer_zero_node;
1220 if (TREE_CHAIN (parms) != NULL_TREE)
1221 pedwarn ("initializer list being treated as compound expression");
1222 parms = build_compound_expr (parms);
1225 return build_c_cast (type, parms);
1228 /* Prepare to evaluate as a call to a constructor. If this expression
1229 is actually used, for example,
1231 return X (arg1, arg2, ...);
1233 then the slot being initialized will be filled in. */
1235 if (!complete_type_or_else (type, NULL_TREE))
1236 return error_mark_node;
1237 if (abstract_virtuals_error (NULL_TREE, type))
1238 return error_mark_node;
1240 if (parms && TREE_CHAIN (parms) == NULL_TREE)
1241 return build_c_cast (type, TREE_VALUE (parms));
1243 /* We need to zero-initialize POD types. Let's do that for everything
1244 that doesn't need a constructor. */
1245 if (parms == NULL_TREE && !TYPE_NEEDS_CONSTRUCTING (type)
1246 && TYPE_HAS_DEFAULT_CONSTRUCTOR (type))
1248 exp = build (CONSTRUCTOR, type, NULL_TREE, NULL_TREE);
1249 return get_target_expr (exp);
1252 exp = build_special_member_call (NULL_TREE, complete_ctor_identifier, parms,
1253 TYPE_BINFO (type), LOOKUP_NORMAL);
1255 if (exp == error_mark_node)
1256 return error_mark_node;
1258 return build_cplus_new (type, exp);
1262 /* Complain about defining new types in inappropriate places. We give an
1263 exception for C-style casts, to accommodate GNU C stylings. */
1266 check_for_new_type (string, inptree)
1268 flagged_type_tree inptree;
1270 if (inptree.new_type_flag
1271 && (pedantic || strcmp (string, "cast") != 0))
1272 pedwarn ("ISO C++ forbids defining types within %s", string);
1275 /* Add new exception specifier SPEC, to the LIST we currently have.
1276 If it's already in LIST then do nothing.
1277 Moan if it's bad and we're allowed to. COMPLAIN < 0 means we
1278 know what we're doing. */
1281 add_exception_specifier (list, spec, complain)
1288 int diag_type = -1; /* none */
1290 if (spec == error_mark_node)
1293 my_friendly_assert (spec && (!list || TREE_VALUE (list)), 19990317);
1295 /* [except.spec] 1, type in an exception specifier shall not be
1296 incomplete, or pointer or ref to incomplete other than pointer
1298 is_ptr = TREE_CODE (core) == POINTER_TYPE;
1299 if (is_ptr || TREE_CODE (core) == REFERENCE_TYPE)
1300 core = TREE_TYPE (core);
1303 else if (VOID_TYPE_P (core))
1305 else if (TREE_CODE (core) == TEMPLATE_TYPE_PARM)
1307 else if (processing_template_decl)
1312 /* 15.4/1 says that types in an exception specifier must be complete,
1313 but it seems more reasonable to only require this on definitions
1314 and calls. So just give a pedwarn at this point; we will give an
1315 error later if we hit one of those two cases. */
1316 if (!COMPLETE_TYPE_P (complete_type (core)))
1317 diag_type = 2; /* pedwarn */
1324 for (probe = list; probe; probe = TREE_CHAIN (probe))
1325 if (same_type_p (TREE_VALUE (probe), spec))
1328 list = tree_cons (NULL_TREE, spec, list);
1331 diag_type = 0; /* error */
1333 if (diag_type >= 0 && complain)
1334 cxx_incomplete_type_diagnostic (NULL_TREE, core, diag_type);
1339 /* Combine the two exceptions specifier lists LIST and ADD, and return
1343 merge_exception_specifiers (list, add)
1348 else if (!TREE_VALUE (list))
1350 else if (!TREE_VALUE (add))
1354 tree orig_list = list;
1356 for (; add; add = TREE_CHAIN (add))
1358 tree spec = TREE_VALUE (add);
1361 for (probe = orig_list; probe; probe = TREE_CHAIN (probe))
1362 if (same_type_p (TREE_VALUE (probe), spec))
1366 spec = build_tree_list (NULL_TREE, spec);
1367 TREE_CHAIN (spec) = list;
1375 /* Subroutine of build_call. Ensure that each of the types in the
1376 exception specification is complete. Technically, 15.4/1 says that
1377 they need to be complete when we see a declaration of the function,
1378 but we should be able to get away with only requiring this when the
1379 function is defined or called. See also add_exception_specifier. */
1382 require_complete_eh_spec_types (fntype, 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'",