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 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. */
188 incomplete_type_error (value, type)
194 /* Avoid duplicate error message. */
195 if (TREE_CODE (type) == ERROR_MARK)
198 if (value != 0 && (TREE_CODE (value) == VAR_DECL
199 || TREE_CODE (value) == PARM_DECL))
201 cp_error_at ("`%D' has incomplete type", value);
205 /* We must print an error message. Be clever about what it says. */
207 switch (TREE_CODE (type))
213 error ("invalid use of undefined type `%#T'", type);
214 cp_error_at ("forward declaration of `%#T'", type);
218 error ("invalid use of `%T'", type);
222 if (TYPE_DOMAIN (type))
224 type = TREE_TYPE (type);
227 error ("invalid use of array with unspecified bounds");
232 error ("invalid use of member (did you forget the `&' ?)");
235 case TEMPLATE_TYPE_PARM:
236 error ("invalid use of template type parameter");
240 if (value && TREE_CODE (value) == COMPONENT_REF)
242 else if (value && TREE_CODE (value) == ADDR_EXPR)
243 error ("address of overloaded function with no contextual type information");
244 else if (value && TREE_CODE (value) == OVERLOAD)
245 error ("overloaded function with no contextual type information");
247 error ("insufficient contextual information to determine type");
256 /* Perform appropriate conversions on the initial value of a variable,
257 store it in the declaration DECL,
258 and print any error messages that are appropriate.
259 If the init is invalid, store an ERROR_MARK.
261 C++: Note that INIT might be a TREE_LIST, which would mean that it is
262 a base class initializer for some aggregate type, hopefully compatible
263 with DECL. If INIT is a single element, and DECL is an aggregate
264 type, we silently convert INIT into a TREE_LIST, allowing a constructor
267 If INIT is a TREE_LIST and there is no constructor, turn INIT
268 into a CONSTRUCTOR and use standard initialization techniques.
269 Perhaps a warning should be generated?
271 Returns value of initializer if initialization could not be
272 performed for static variable. In that case, caller must do
276 store_init_value (decl, init)
279 register tree value, type;
281 /* If variable's type was invalidly declared, just ignore it. */
283 type = TREE_TYPE (decl);
284 if (TREE_CODE (type) == ERROR_MARK)
288 /* This breaks arrays, and should not have any effect for other decls. */
289 /* Take care of C++ business up here. */
290 type = TYPE_MAIN_VARIANT (type);
293 if (IS_AGGR_TYPE (type))
295 if (! TYPE_HAS_TRIVIAL_INIT_REF (type)
296 && TREE_CODE (init) != CONSTRUCTOR)
299 if (TREE_CODE (init) == TREE_LIST)
301 error ("constructor syntax used, but no constructor declared for type `%T'", type);
302 init = build_nt (CONSTRUCTOR, NULL_TREE, nreverse (init));
305 if (TREE_CODE (init) == CONSTRUCTOR)
309 /* Check that we're really an aggregate as ARM 8.4.1 defines it. */
310 if (CLASSTYPE_N_BASECLASSES (type))
311 cp_error_at ("initializer list construction invalid for derived class object `%D'", decl);
312 if (CLASSTYPE_VTBL_PTR (type))
313 cp_error_at ("initializer list construction invalid for polymorphic class object `%D'", decl);
314 if (TYPE_NEEDS_CONSTRUCTING (type))
316 cp_error_at ("initializer list construction invalid for `%D'", decl);
317 error ("due to the presence of a constructor");
319 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
320 if (TREE_PRIVATE (field) || TREE_PROTECTED (field))
322 cp_error_at ("initializer list construction invalid for `%D'", decl);
323 cp_error_at ("due to non-public access of member `%D'", field);
325 for (field = TYPE_METHODS (type); field; field = TREE_CHAIN (field))
326 if (TREE_PRIVATE (field) || TREE_PROTECTED (field))
328 cp_error_at ("initializer list construction invalid for `%D'", decl);
329 cp_error_at ("due to non-public access of member `%D'", field);
334 else if (TREE_CODE (init) == TREE_LIST
335 && TREE_TYPE (init) != unknown_type_node)
337 if (TREE_CODE (decl) == RESULT_DECL)
339 if (TREE_CHAIN (init))
341 warning ("comma expression used to initialize return value");
342 init = build_compound_expr (init);
345 init = TREE_VALUE (init);
347 else if (TREE_CODE (init) == TREE_LIST
348 && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
350 error ("cannot initialize arrays using this syntax");
355 /* We get here with code like `int a (2);' */
357 if (TREE_CHAIN (init) != NULL_TREE)
359 pedwarn ("initializer list being treated as compound expression");
360 init = build_compound_expr (init);
363 init = TREE_VALUE (init);
367 /* End of special C++ code. */
369 /* We might have already run this bracketed initializer through
370 digest_init. Don't do so again. */
371 if (TREE_CODE (init) == CONSTRUCTOR && TREE_HAS_CONSTRUCTOR (init)
373 && TYPE_MAIN_VARIANT (TREE_TYPE (init)) == TYPE_MAIN_VARIANT (type))
376 /* Digest the specified initializer into an expression. */
377 value = digest_init (type, init, (tree *) 0);
379 /* Store the expression if valid; else report error. */
381 if (TREE_CODE (value) == ERROR_MARK)
383 /* Other code expects that initializers for objects of types that need
384 constructing never make it into DECL_INITIAL, and passes 'init' to
385 build_aggr_init without checking DECL_INITIAL. So just return. */
386 else if (TYPE_NEEDS_CONSTRUCTING (type))
388 else if (TREE_STATIC (decl)
389 && (! TREE_CONSTANT (value)
390 || ! initializer_constant_valid_p (value, TREE_TYPE (value))
392 /* A STATIC PUBLIC int variable doesn't have to be
393 run time inited when doing pic. (mrs) */
394 /* Since ctors and dtors are the only things that can
395 reference vtables, and they are always written down
396 the vtable definition, we can leave the
397 vtables in initialized data space.
398 However, other initialized data cannot be initialized
399 this way. Instead a global file-level initializer
401 || (flag_pic && !DECL_VIRTUAL_P (decl) && TREE_PUBLIC (decl))
406 #if 0 /* No, that's C. jason 9/19/94 */
409 if (pedantic && TREE_CODE (value) == CONSTRUCTOR)
411 if (! TREE_CONSTANT (value) || ! TREE_STATIC (value))
412 pedwarn ("ISO C++ forbids non-constant aggregate initializer expressions");
417 /* Store the VALUE in DECL_INITIAL. If we're building a
418 statement-tree we will actually expand the initialization later
419 when we output this function. */
420 DECL_INITIAL (decl) = value;
424 /* Digest the parser output INIT as an initializer for type TYPE.
425 Return a C expression of type TYPE to represent the initial value.
427 If TAIL is nonzero, it points to a variable holding a list of elements
428 of which INIT is the first. We update the list stored there by
429 removing from the head all the elements that we use.
430 Normally this is only one; we use more than one element only if
431 TYPE is an aggregate and INIT is not a constructor. */
434 digest_init (type, init, tail)
435 tree type, init, *tail;
437 enum tree_code code = TREE_CODE (type);
438 tree element = NULL_TREE;
439 tree old_tail_contents = NULL_TREE;
440 /* Nonzero if INIT is a braced grouping, which comes in as a CONSTRUCTOR
441 tree node which has no TREE_TYPE. */
444 /* By default, assume we use one element from a list.
445 We correct this later in the sole case where it is not true. */
449 old_tail_contents = *tail;
450 *tail = TREE_CHAIN (*tail);
453 if (init == error_mark_node || (TREE_CODE (init) == TREE_LIST
454 && TREE_VALUE (init) == error_mark_node))
455 return error_mark_node;
457 if (TREE_CODE (init) == ERROR_MARK)
458 /* __PRETTY_FUNCTION__'s initializer is a bogus expression inside
459 a template function. This gets substituted during instantiation. */
462 /* We must strip the outermost array type when completing the type,
463 because the its bounds might be incomplete at the moment. */
464 if (!complete_type_or_else (TREE_CODE (type) == ARRAY_TYPE
465 ? TREE_TYPE (type) : type, NULL_TREE))
466 return error_mark_node;
468 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
469 if (TREE_CODE (init) == NON_LVALUE_EXPR)
470 init = TREE_OPERAND (init, 0);
472 if (TREE_CODE (init) == CONSTRUCTOR && TREE_TYPE (init) == type)
475 raw_constructor = TREE_CODE (init) == CONSTRUCTOR && TREE_TYPE (init) == 0;
478 && CONSTRUCTOR_ELTS (init) != 0
479 && TREE_CHAIN (CONSTRUCTOR_ELTS (init)) == 0)
481 element = TREE_VALUE (CONSTRUCTOR_ELTS (init));
482 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
483 if (element && TREE_CODE (element) == NON_LVALUE_EXPR)
484 element = TREE_OPERAND (element, 0);
485 if (element == error_mark_node)
489 /* Initialization of an array of chars from a string constant
490 optionally enclosed in braces. */
492 if (code == ARRAY_TYPE)
496 if (TREE_CODE (init) == TREE_LIST)
498 error ("initializing array with parameter list");
499 return error_mark_node;
502 typ1 = TYPE_MAIN_VARIANT (TREE_TYPE (type));
503 if (char_type_p (typ1)
504 && ((init && TREE_CODE (init) == STRING_CST)
505 || (element && TREE_CODE (element) == STRING_CST)))
507 tree string = element ? element : init;
509 if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (string)))
511 && TYPE_PRECISION (typ1) == BITS_PER_UNIT)
513 error ("char-array initialized from wide string");
514 return error_mark_node;
516 if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (string)))
518 && TYPE_PRECISION (typ1) != BITS_PER_UNIT)
520 error ("int-array initialized from non-wide string");
521 return error_mark_node;
524 TREE_TYPE (string) = type;
525 if (TYPE_DOMAIN (type) != 0
526 && TREE_CONSTANT (TYPE_SIZE (type)))
529 = TREE_INT_CST_LOW (TYPE_SIZE (type));
530 size = (size + BITS_PER_UNIT - 1) / BITS_PER_UNIT;
531 /* In C it is ok to subtract 1 from the length of the string
532 because it's ok to ignore the terminating null char that is
533 counted in the length of the constant, but in C++ this would
535 if (size < TREE_STRING_LENGTH (string))
536 pedwarn ("initializer-string for array of chars is too long");
542 /* Handle scalar types, including conversions,
543 and signature pointers and references. */
545 if (code == INTEGER_TYPE || code == REAL_TYPE || code == POINTER_TYPE
546 || code == ENUMERAL_TYPE || code == REFERENCE_TYPE
547 || code == BOOLEAN_TYPE || code == COMPLEX_TYPE || code == VECTOR_TYPE
548 || TYPE_PTRMEMFUNC_P (type))
554 error ("initializer for scalar variable requires one element");
555 return error_mark_node;
559 while (TREE_CODE (init) == CONSTRUCTOR && TREE_HAS_CONSTRUCTOR (init))
561 pedwarn ("braces around scalar initializer for `%T'", type);
562 init = CONSTRUCTOR_ELTS (init);
563 if (TREE_CHAIN (init))
564 pedwarn ("ignoring extra initializers for `%T'", type);
565 init = TREE_VALUE (init);
568 return convert_for_initialization (0, type, init, LOOKUP_NORMAL,
569 "initialization", NULL_TREE, 0);
572 /* Come here only for records and arrays (and unions with constructors). */
574 if (COMPLETE_TYPE_P (type) && ! TREE_CONSTANT (TYPE_SIZE (type)))
576 error ("variable-sized object of type `%T' may not be initialized",
578 return error_mark_node;
581 if (code == ARRAY_TYPE || IS_AGGR_TYPE_CODE (code))
583 if (raw_constructor && TYPE_NON_AGGREGATE_CLASS (type)
584 && TREE_HAS_CONSTRUCTOR (init))
586 error ("subobject of type `%T' must be initialized by constructor, not by `%E'",
588 return error_mark_node;
590 else if (raw_constructor)
591 return process_init_constructor (type, init, (tree *)0);
592 else if (can_convert_arg (type, TREE_TYPE (init), init)
593 || TYPE_NON_AGGREGATE_CLASS (type))
594 /* These are never initialized from multiple constructor elements. */;
597 *tail = old_tail_contents;
598 return process_init_constructor (type, 0, tail);
601 if (code != ARRAY_TYPE)
603 int flags = LOOKUP_NORMAL;
604 /* Initialization from { } is copy-initialization. */
606 flags |= LOOKUP_ONLYCONVERTING;
608 return convert_for_initialization (NULL_TREE, type, init, flags,
609 "initialization", NULL_TREE, 0);
613 error ("invalid initializer");
614 return error_mark_node;
617 /* Process a constructor for a variable of type TYPE.
618 The constructor elements may be specified either with INIT or with ELTS,
619 only one of which should be non-null.
621 If INIT is specified, it is a CONSTRUCTOR node which is specifically
622 and solely for initializing this datum.
624 If ELTS is specified, it is the address of a variable containing
625 a list of expressions. We take as many elements as we need
626 from the head of the list and update the list.
628 In the resulting constructor, TREE_CONSTANT is set if all elts are
629 constant, and TREE_STATIC is set if, in addition, all elts are simple enough
630 constants that the assembler and linker can compute them. */
633 process_init_constructor (type, init, elts)
634 tree type, init, *elts;
637 /* List of the elements of the result constructor,
639 register tree members = NULL;
646 /* Make TAIL be the list of elements to use for the initialization,
647 no matter how the data was given to us. */
651 if (warn_missing_braces)
652 warning ("aggregate has a partly bracketed initializer");
656 tail = CONSTRUCTOR_ELTS (init);
658 /* Gobble as many elements as needed, and make a constructor or initial value
659 for each element of this aggregate. Chain them together in result.
660 If there are too few, use 0 for each scalar ultimate component. */
662 if (TREE_CODE (type) == ARRAY_TYPE)
664 tree domain = TYPE_DOMAIN (type);
669 len = (TREE_INT_CST_LOW (TYPE_MAX_VALUE (domain))
670 - TREE_INT_CST_LOW (TYPE_MIN_VALUE (domain))
673 len = -1; /* Take as many as there are */
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);
728 /* The default zero-initialization is fine for us; don't
729 add anything to the CONSTRUCTOR. */
732 if (next1 == error_mark_node)
734 else if (!TREE_CONSTANT (next1))
736 else if (! initializer_constant_valid_p (next1, TREE_TYPE (next1)))
738 members = tree_cons (size_int (i), next1, members);
741 else if (TREE_CODE (type) == RECORD_TYPE)
747 if (TYPE_USES_VIRTUAL_BASECLASSES (type))
749 sorry ("initializer list for object of class with virtual base classes");
750 return error_mark_node;
753 if (TYPE_BINFO_BASETYPES (type))
755 sorry ("initializer list for object of class with base classes");
756 return error_mark_node;
759 if (TYPE_POLYMORPHIC_P (type))
761 sorry ("initializer list for object using virtual functions");
762 return error_mark_node;
766 for (field = TYPE_FIELDS (type); field;
767 field = TREE_CHAIN (field))
769 if (! DECL_NAME (field) && DECL_C_BIT_FIELD (field))
771 members = tree_cons (field, integer_zero_node, members);
775 if (TREE_CODE (field) != FIELD_DECL)
780 if (TREE_PURPOSE (tail)
781 && TREE_PURPOSE (tail) != field
782 && TREE_PURPOSE (tail) != DECL_NAME (field))
783 sorry ("non-trivial labeled initializers");
785 if (TREE_VALUE (tail) != 0)
789 next1 = digest_init (TREE_TYPE (field),
790 TREE_VALUE (tail), &tail1);
791 my_friendly_assert (tail1 == 0
792 || TREE_CODE (tail1) == TREE_LIST, 320);
797 next1 = error_mark_node;
798 tail = TREE_CHAIN (tail);
801 else if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (field)))
803 /* If this type needs constructors run for
804 default-initialization, we can't rely on the backend to do it
805 for us, so build up TARGET_EXPRs. If the type in question is
806 a class, just build one up; if it's an array, recurse. */
808 if (IS_AGGR_TYPE (TREE_TYPE (field)))
809 next1 = build_functional_cast (TREE_TYPE (field),
813 next1 = build (CONSTRUCTOR, NULL_TREE, NULL_TREE,
816 TREE_HAS_CONSTRUCTOR (next1)
817 = TREE_HAS_CONSTRUCTOR (init);
819 next1 = digest_init (TREE_TYPE (field), next1, 0);
821 /* Warn when some struct elements are implicitly initialized. */
823 && (!init || TREE_HAS_CONSTRUCTOR (init)))
824 warning ("missing initializer for member `%D'", field);
828 if (TREE_READONLY (field))
829 error ("uninitialized const member `%D'", field);
830 else if (TYPE_LANG_SPECIFIC (TREE_TYPE (field))
831 && CLASSTYPE_READONLY_FIELDS_NEED_INIT (TREE_TYPE (field)))
832 error ("member `%D' with uninitialized const fields",
834 else if (TREE_CODE (TREE_TYPE (field)) == REFERENCE_TYPE)
835 error ("member `%D' is uninitialized reference", field);
837 /* Warn when some struct elements are implicitly initialized
840 && (!init || TREE_HAS_CONSTRUCTOR (init)))
841 warning ("missing initializer for member `%D'", field);
843 /* The default zero-initialization is fine for us; don't
844 add anything to the CONSTRUCTOR. */
848 if (next1 == error_mark_node)
850 else if (!TREE_CONSTANT (next1))
852 else if (! initializer_constant_valid_p (next1, TREE_TYPE (next1)))
854 members = tree_cons (field, next1, members);
857 else if (TREE_CODE (type) == UNION_TYPE
858 /* If the initializer was empty, use default zero initialization. */
861 register tree field = TYPE_FIELDS (type);
863 /* Find the first named field. ANSI decided in September 1990
864 that only named fields count here. */
865 while (field && (DECL_NAME (field) == 0
866 || TREE_CODE (field) != FIELD_DECL))
867 field = TREE_CHAIN (field);
869 /* If this element specifies a field, initialize via that field. */
870 if (TREE_PURPOSE (tail) != NULL_TREE)
874 if (TREE_CODE (TREE_PURPOSE (tail)) == FIELD_DECL)
875 /* Handle the case of a call by build_c_cast. */
876 field = TREE_PURPOSE (tail), win = 1;
877 else if (TREE_CODE (TREE_PURPOSE (tail)) != IDENTIFIER_NODE)
878 error ("index value instead of field name in union initializer");
882 for (temp = TYPE_FIELDS (type);
884 temp = TREE_CHAIN (temp))
885 if (DECL_NAME (temp) == TREE_PURPOSE (tail))
888 field = temp, win = 1;
890 error ("no field `%D' in union being initialized",
891 TREE_PURPOSE (tail));
894 TREE_VALUE (tail) = error_mark_node;
898 error ("union `%T' with no named members cannot be initialized",
900 TREE_VALUE (tail) = error_mark_node;
903 if (TREE_VALUE (tail) != 0)
907 next1 = digest_init (TREE_TYPE (field),
908 TREE_VALUE (tail), &tail1);
909 if (tail1 != 0 && TREE_CODE (tail1) != TREE_LIST)
915 next1 = error_mark_node;
916 tail = TREE_CHAIN (tail);
919 if (next1 == error_mark_node)
921 else if (!TREE_CONSTANT (next1))
923 else if (initializer_constant_valid_p (next1, TREE_TYPE (next1)) == 0)
925 members = tree_cons (field, next1, members);
928 /* If arguments were specified as a list, just remove the ones we used. */
931 /* If arguments were specified as a constructor,
932 complain unless we used all the elements of the constructor. */
934 pedwarn ("excess elements in aggregate initializer");
937 return error_mark_node;
939 result = build (CONSTRUCTOR, type, NULL_TREE, nreverse (members));
941 TREE_HAS_CONSTRUCTOR (result) = TREE_HAS_CONSTRUCTOR (init);
942 if (allconstant) TREE_CONSTANT (result) = 1;
943 if (allconstant && allsimple) TREE_STATIC (result) = 1;
947 /* Given a structure or union value DATUM, construct and return
948 the structure or union component which results from narrowing
949 that value by the type specified in BASETYPE. For example, given the
955 class C : A, B { ... };
963 x.A::ii refers to the ii member of the L part of
964 the A part of the C object named by X. In this case,
965 DATUM would be x, and BASETYPE would be A.
967 I used to think that this was nonconformant, that the standard specified
968 that first we look up ii in A, then convert x to an L& and pull out the
969 ii part. But in fact, it does say that we convert x to an A&; A here
970 is known as the "naming class". (jason 2000-12-19) */
973 build_scoped_ref (datum, basetype)
980 if (datum == error_mark_node)
981 return error_mark_node;
982 binfo = lookup_base (TREE_TYPE (datum), basetype, ba_check, NULL);
984 if (binfo == error_mark_node)
985 return error_mark_node;
987 return error_not_base_type (TREE_TYPE (datum), basetype);
989 ref = build_unary_op (ADDR_EXPR, datum, 0);
990 ref = build_base_path (PLUS_EXPR, ref, binfo, 1);
992 return build_indirect_ref (ref, "(compiler error in build_scoped_ref)");
995 /* Build a reference to an object specified by the C++ `->' operator.
996 Usually this just involves dereferencing the object, but if the
997 `->' operator is overloaded, then such overloads must be
998 performed until an object which does not have the `->' operator
999 overloaded is found. An error is reported when circular pointer
1000 delegation is detected. */
1003 build_x_arrow (datum)
1006 tree types_memoized = NULL_TREE;
1007 register tree rval = datum;
1008 tree type = TREE_TYPE (rval);
1009 tree last_rval = NULL_TREE;
1011 if (type == error_mark_node)
1012 return error_mark_node;
1014 if (processing_template_decl)
1015 return build_min_nt (ARROW_EXPR, rval);
1017 if (TREE_CODE (rval) == OFFSET_REF)
1019 rval = resolve_offset_ref (datum);
1020 type = TREE_TYPE (rval);
1023 if (TREE_CODE (type) == REFERENCE_TYPE)
1025 rval = convert_from_reference (rval);
1026 type = TREE_TYPE (rval);
1029 if (IS_AGGR_TYPE (type))
1031 while ((rval = build_opfncall (COMPONENT_REF, LOOKUP_NORMAL, rval,
1032 NULL_TREE, NULL_TREE)))
1034 if (rval == error_mark_node)
1035 return error_mark_node;
1037 if (value_member (TREE_TYPE (rval), types_memoized))
1039 error ("circular pointer delegation detected");
1040 return error_mark_node;
1044 types_memoized = tree_cons (NULL_TREE, TREE_TYPE (rval),
1050 if (last_rval == NULL_TREE)
1052 error ("base operand of `->' has non-pointer type `%T'", type);
1053 return error_mark_node;
1056 if (TREE_CODE (TREE_TYPE (last_rval)) == REFERENCE_TYPE)
1057 last_rval = convert_from_reference (last_rval);
1060 last_rval = default_conversion (rval);
1062 if (TREE_CODE (TREE_TYPE (last_rval)) == POINTER_TYPE)
1063 return build_indirect_ref (last_rval, NULL);
1066 error ("result of `operator->()' yields non-pointer result");
1068 error ("base operand of `->' is not a pointer");
1069 return error_mark_node;
1072 /* Make an expression to refer to the COMPONENT field of
1073 structure or union value DATUM. COMPONENT is an arbitrary
1074 expression. DATUM has not already been checked out to be of
1077 For C++, COMPONENT may be a TREE_LIST. This happens when we must
1078 return an object of member type to a method of the current class,
1079 but there is not yet enough typing information to know which one.
1080 As a special case, if there is only one method by that name,
1081 it is returned. Otherwise we return an expression which other
1082 routines will have to know how to deal with later. */
1085 build_m_component_ref (datum, component)
1086 tree datum, component;
1094 if (processing_template_decl)
1095 return build_min_nt (DOTSTAR_EXPR, datum, component);
1097 datum = decay_conversion (datum);
1099 if (datum == error_mark_node || component == error_mark_node)
1100 return error_mark_node;
1102 objtype = TYPE_MAIN_VARIANT (TREE_TYPE (datum));
1104 if (TYPE_PTRMEMFUNC_P (TREE_TYPE (component)))
1106 type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (TREE_TYPE (component)));
1109 else if (TYPE_PTRMEM_P (TREE_TYPE (component)))
1111 type = TREE_TYPE (TREE_TYPE (component));
1112 field_type = TREE_TYPE (type);
1114 /* Compute the type of the field, as described in [expr.ref]. */
1115 type_quals = TYPE_UNQUALIFIED;
1116 if (TREE_CODE (field_type) == REFERENCE_TYPE)
1117 /* The standard says that the type of the result should be the
1118 type referred to by the reference. But for now, at least,
1119 we do the conversion from reference type later. */
1123 type_quals = (cp_type_quals (field_type)
1124 | cp_type_quals (TREE_TYPE (datum)));
1126 /* There's no such thing as a mutable pointer-to-member, so
1127 we don't need to deal with that here like we do in
1128 build_component_ref. */
1129 field_type = cp_build_qualified_type (field_type, type_quals);
1134 error ("`%E' cannot be used as a member pointer, since it is of type `%T'",
1135 component, TREE_TYPE (component));
1136 return error_mark_node;
1139 if (! IS_AGGR_TYPE (objtype))
1141 error ("cannot apply member pointer `%E' to `%E', which is of non-aggregate type `%T'",
1142 component, datum, objtype);
1143 return error_mark_node;
1146 binfo = lookup_base (objtype, TYPE_METHOD_BASETYPE (type),
1150 error ("member type `%T::' incompatible with object type `%T'",
1151 TYPE_METHOD_BASETYPE (type), objtype);
1152 return error_mark_node;
1154 else if (binfo == error_mark_node)
1155 return error_mark_node;
1157 component = build (OFFSET_REF, field_type, datum, component);
1158 if (TREE_CODE (type) == OFFSET_TYPE)
1159 component = resolve_offset_ref (component);
1163 /* Return a tree node for the expression TYPENAME '(' PARMS ')'. */
1166 build_functional_cast (exp, parms)
1170 /* This is either a call to a constructor,
1171 or a C cast in C++'s `functional' notation. */
1174 if (exp == error_mark_node || parms == error_mark_node)
1175 return error_mark_node;
1177 if (TREE_CODE (exp) == IDENTIFIER_NODE)
1179 if (IDENTIFIER_HAS_TYPE_VALUE (exp))
1180 /* Either an enum or an aggregate type. */
1181 type = IDENTIFIER_TYPE_VALUE (exp);
1184 type = lookup_name (exp, 1);
1185 if (!type || TREE_CODE (type) != TYPE_DECL)
1187 error ("`%T' fails to be a typedef or built-in type", exp);
1188 return error_mark_node;
1190 type = TREE_TYPE (type);
1193 else if (TREE_CODE (exp) == TYPE_DECL)
1194 type = TREE_TYPE (exp);
1198 if (processing_template_decl)
1199 return build_min (CAST_EXPR, type, parms);
1201 if (! IS_AGGR_TYPE (type))
1203 /* this must build a C cast */
1204 if (parms == NULL_TREE)
1205 parms = integer_zero_node;
1208 if (TREE_CHAIN (parms) != NULL_TREE)
1209 pedwarn ("initializer list being treated as compound expression");
1210 parms = build_compound_expr (parms);
1213 return build_c_cast (type, parms);
1216 /* Prepare to evaluate as a call to a constructor. If this expression
1217 is actually used, for example,
1219 return X (arg1, arg2, ...);
1221 then the slot being initialized will be filled in. */
1223 if (!complete_type_or_else (type, NULL_TREE))
1224 return error_mark_node;
1225 if (abstract_virtuals_error (NULL_TREE, type))
1226 return error_mark_node;
1228 if (parms && TREE_CHAIN (parms) == NULL_TREE)
1229 return build_c_cast (type, TREE_VALUE (parms));
1231 /* We need to zero-initialize POD types. Let's do that for everything
1232 that doesn't need a constructor. */
1233 if (parms == NULL_TREE && !TYPE_NEEDS_CONSTRUCTING (type)
1234 && TYPE_HAS_DEFAULT_CONSTRUCTOR (type))
1236 exp = build (CONSTRUCTOR, type, NULL_TREE, NULL_TREE);
1237 return get_target_expr (exp);
1240 exp = build_method_call (NULL_TREE, complete_ctor_identifier, parms,
1241 TYPE_BINFO (type), LOOKUP_NORMAL);
1243 if (exp == error_mark_node)
1244 return error_mark_node;
1246 return build_cplus_new (type, exp);
1250 /* Complain about defining new types in inappropriate places. We give an
1251 exception for C-style casts, to accommodate GNU C stylings. */
1254 check_for_new_type (string, inptree)
1256 flagged_type_tree inptree;
1258 if (inptree.new_type_flag
1259 && (pedantic || strcmp (string, "cast") != 0))
1260 pedwarn ("ISO C++ forbids defining types within %s", string);
1263 /* Add new exception specifier SPEC, to the LIST we currently have.
1264 If it's already in LIST then do nothing.
1265 Moan if it's bad and we're allowed to. COMPLAIN < 0 means we
1266 know what we're doing. */
1269 add_exception_specifier (list, spec, complain)
1277 if (spec == error_mark_node)
1280 my_friendly_assert (spec && (!list || TREE_VALUE (list)), 19990317);
1282 /* [except.spec] 1, type in an exception specifier shall not be
1283 incomplete, or pointer or ref to incomplete other than pointer
1285 is_ptr = TREE_CODE (core) == POINTER_TYPE;
1286 if (is_ptr || TREE_CODE (core) == REFERENCE_TYPE)
1287 core = TREE_TYPE (core);
1290 else if (VOID_TYPE_P (core))
1292 else if (TREE_CODE (core) == TEMPLATE_TYPE_PARM)
1294 else if (processing_template_decl)
1297 ok = COMPLETE_TYPE_P (complete_type (core));
1303 for (probe = list; probe; probe = TREE_CHAIN (probe))
1304 if (same_type_p (TREE_VALUE (probe), spec))
1308 spec = build_tree_list (NULL_TREE, spec);
1309 TREE_CHAIN (spec) = list;
1314 incomplete_type_error (NULL_TREE, core);
1318 /* Combine the two exceptions specifier lists LIST and ADD, and return
1322 merge_exception_specifiers (list, add)
1327 else if (!TREE_VALUE (list))
1329 else if (!TREE_VALUE (add))
1333 tree orig_list = list;
1335 for (; add; add = TREE_CHAIN (add))
1337 tree spec = TREE_VALUE (add);
1340 for (probe = orig_list; probe; probe = TREE_CHAIN (probe))
1341 if (same_type_p (TREE_VALUE (probe), spec))
1345 spec = build_tree_list (NULL_TREE, spec);
1346 TREE_CHAIN (spec) = list;