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 GCC.
9 GCC 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 GCC 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 GCC; 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). */
36 #include "coretypes.h"
43 #include "diagnostic.h"
45 static tree process_init_constructor PARAMS ((tree, tree, tree *));
47 /* Print an error message stemming from an attempt to use
48 BASETYPE as a base class for TYPE. */
51 error_not_base_type (basetype, 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 (base, type)
64 tree binfo = lookup_base (type, base, ba_ignore, NULL);
66 if (binfo == error_mark_node)
69 error_not_base_type (base, type);
73 /* According to ARM $7.1.6, "A `const' object may be initialized, but its
74 value may not be changed thereafter. Thus, we emit hard errors for these,
75 rather than just pedwarns. If `SOFT' is 1, then we just pedwarn. (For
76 example, conversions to references.) */
79 readonly_error (arg, string, soft)
85 void (*fn) PARAMS ((const char *, ...));
92 if (TREE_CODE (arg) == COMPONENT_REF)
94 if (TYPE_READONLY (TREE_TYPE (TREE_OPERAND (arg, 0))))
95 fmt = "%s of data-member `%D' in read-only structure";
97 fmt = "%s of read-only data-member `%D'";
98 (*fn) (fmt, string, TREE_OPERAND (arg, 1));
100 else if (TREE_CODE (arg) == VAR_DECL)
102 if (DECL_LANG_SPECIFIC (arg)
103 && DECL_IN_AGGR_P (arg)
104 && !TREE_STATIC (arg))
105 fmt = "%s of constant field `%D'";
107 fmt = "%s of read-only variable `%D'";
108 (*fn) (fmt, string, arg);
110 else if (TREE_CODE (arg) == PARM_DECL)
111 (*fn) ("%s of read-only parameter `%D'", string, arg);
112 else if (TREE_CODE (arg) == INDIRECT_REF
113 && TREE_CODE (TREE_TYPE (TREE_OPERAND (arg, 0))) == REFERENCE_TYPE
114 && (TREE_CODE (TREE_OPERAND (arg, 0)) == VAR_DECL
115 || TREE_CODE (TREE_OPERAND (arg, 0)) == PARM_DECL))
116 (*fn) ("%s of read-only reference `%D'", string, TREE_OPERAND (arg, 0));
117 else if (TREE_CODE (arg) == RESULT_DECL)
118 (*fn) ("%s of read-only named return value `%D'", string, arg);
119 else if (TREE_CODE (arg) == FUNCTION_DECL)
120 (*fn) ("%s of function `%D'", string, arg);
122 (*fn) ("%s of read-only location", string);
125 /* If TYPE has abstract virtual functions, issue an error about trying
126 to create an object of that type. DECL is the object declared, or
127 NULL_TREE if the declaration is unavailable. Returns 1 if an error
128 occurred; zero if all was well. */
131 abstract_virtuals_error (decl, type)
138 if (!CLASS_TYPE_P (type) || !CLASSTYPE_PURE_VIRTUALS (type))
141 if (!TYPE_SIZE (type))
142 /* TYPE is being defined, and during that time
143 CLASSTYPE_PURE_VIRTUALS holds the inline friends. */
146 if (dependent_type_p (type))
147 /* For a dependent type, we do not yet know which functions are pure
151 u = CLASSTYPE_PURE_VIRTUALS (type);
154 if (TREE_CODE (decl) == RESULT_DECL)
157 if (TREE_CODE (decl) == VAR_DECL)
158 error ("cannot declare variable `%D' to be of type `%T'",
160 else if (TREE_CODE (decl) == PARM_DECL)
161 error ("cannot declare parameter `%D' to be of type `%T'",
163 else if (TREE_CODE (decl) == FIELD_DECL)
164 error ("cannot declare field `%D' to be of type `%T'",
166 else if (TREE_CODE (decl) == FUNCTION_DECL
167 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
168 error ("invalid return type for member function `%#D'", decl);
169 else if (TREE_CODE (decl) == FUNCTION_DECL)
170 error ("invalid return type for function `%#D'", decl);
173 error ("cannot allocate an object of type `%T'", type);
175 /* Only go through this once. */
176 if (TREE_PURPOSE (u) == NULL_TREE)
178 TREE_PURPOSE (u) = error_mark_node;
180 error (" because the following virtual functions are abstract:");
181 for (tu = u; tu; tu = TREE_CHAIN (tu))
182 cp_error_at ("\t%#D", TREE_VALUE (tu));
185 error (" since type `%T' has abstract virtual functions", type);
190 /* Print an error message for invalid use of an incomplete type.
191 VALUE is the expression that was used (or 0 if that isn't known)
192 and TYPE is the type that was invalid. DIAG_TYPE indicates the
193 type of diagnostic: 0 for an error, 1 for a warning, 2 for a
197 cxx_incomplete_type_diagnostic (value, type, diag_type)
203 void (*p_msg) PARAMS ((const char *, ...));
204 void (*p_msg_at) PARAMS ((const char *, ...));
209 p_msg_at = cp_warning_at;
211 else if (diag_type == 2)
214 p_msg_at = cp_pedwarn_at;
219 p_msg_at = cp_error_at;
222 /* Avoid duplicate error message. */
223 if (TREE_CODE (type) == ERROR_MARK)
226 if (value != 0 && (TREE_CODE (value) == VAR_DECL
227 || TREE_CODE (value) == PARM_DECL
228 || TREE_CODE (value) == FIELD_DECL))
230 (*p_msg_at) ("`%D' has incomplete type", value);
234 /* We must print an error message. Be clever about what it says. */
236 switch (TREE_CODE (type))
242 (*p_msg) ("invalid use of undefined type `%#T'", type);
243 if (!TYPE_TEMPLATE_INFO (type))
244 (*p_msg_at) ("forward declaration of `%#T'", type);
246 (*p_msg_at) ("declaration of `%#T'", type);
250 (*p_msg) ("invalid use of `%T'", type);
254 if (TYPE_DOMAIN (type))
256 type = TREE_TYPE (type);
259 (*p_msg) ("invalid use of array with unspecified bounds");
264 (*p_msg) ("invalid use of member (did you forget the `&' ?)");
267 case TEMPLATE_TYPE_PARM:
268 (*p_msg) ("invalid use of template type parameter");
272 if (value && TREE_CODE (value) == COMPONENT_REF)
274 else if (value && TREE_CODE (value) == ADDR_EXPR)
275 (*p_msg) ("address of overloaded function with no contextual type information");
276 else if (value && TREE_CODE (value) == OVERLOAD)
277 (*p_msg) ("overloaded function with no contextual type information");
279 (*p_msg) ("insufficient contextual information to determine type");
287 /* Backward-compatibility interface to incomplete_type_diagnostic;
288 required by ../tree.c. */
289 #undef cxx_incomplete_type_error
291 cxx_incomplete_type_error (value, type)
295 cxx_incomplete_type_diagnostic (value, type, 0);
299 /* Perform appropriate conversions on the initial value of a variable,
300 store it in the declaration DECL,
301 and print any error messages that are appropriate.
302 If the init is invalid, store an ERROR_MARK.
304 C++: Note that INIT might be a TREE_LIST, which would mean that it is
305 a base class initializer for some aggregate type, hopefully compatible
306 with DECL. If INIT is a single element, and DECL is an aggregate
307 type, we silently convert INIT into a TREE_LIST, allowing a constructor
310 If INIT is a TREE_LIST and there is no constructor, turn INIT
311 into a CONSTRUCTOR and use standard initialization techniques.
312 Perhaps a warning should be generated?
314 Returns value of initializer if initialization could not be
315 performed for static variable. In that case, caller must do
319 store_init_value (decl, init)
322 register tree value, type;
324 /* If variable's type was invalidly declared, just ignore it. */
326 type = TREE_TYPE (decl);
327 if (TREE_CODE (type) == ERROR_MARK)
330 if (IS_AGGR_TYPE (type))
332 if (! TYPE_HAS_TRIVIAL_INIT_REF (type)
333 && TREE_CODE (init) != CONSTRUCTOR)
336 if (TREE_CODE (init) == TREE_LIST)
338 error ("constructor syntax used, but no constructor declared for type `%T'", type);
339 init = build_nt (CONSTRUCTOR, NULL_TREE, nreverse (init));
342 else if (TREE_CODE (init) == TREE_LIST
343 && TREE_TYPE (init) != unknown_type_node)
345 if (TREE_CODE (decl) == RESULT_DECL)
347 if (TREE_CHAIN (init))
349 warning ("comma expression used to initialize return value");
350 init = build_compound_expr (init);
353 init = TREE_VALUE (init);
355 else if (TREE_CODE (init) == TREE_LIST
356 && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
358 error ("cannot initialize arrays using this syntax");
363 /* We get here with code like `int a (2);' */
365 if (TREE_CHAIN (init) != NULL_TREE)
367 pedwarn ("initializer list being treated as compound expression");
368 init = build_compound_expr (init);
371 init = TREE_VALUE (init);
375 /* End of special C++ code. */
377 /* Digest the specified initializer into an expression. */
378 value = digest_init (type, init, (tree *) 0);
380 /* Store the expression if valid; else report error. */
382 if (TREE_CODE (value) == ERROR_MARK)
384 /* Other code expects that initializers for objects of types that need
385 constructing never make it into DECL_INITIAL, and passes 'init' to
386 build_aggr_init without checking DECL_INITIAL. So just return. */
387 else if (TYPE_NEEDS_CONSTRUCTING (type))
389 else if (TREE_STATIC (decl)
390 && (! TREE_CONSTANT (value)
391 || ! initializer_constant_valid_p (value, TREE_TYPE (value))))
394 /* Store the VALUE in DECL_INITIAL. If we're building a
395 statement-tree we will actually expand the initialization later
396 when we output this function. */
397 DECL_INITIAL (decl) = value;
402 /* Digest the parser output INIT as an initializer for type TYPE.
403 Return a C expression of type TYPE to represent the initial value.
405 If TAIL is nonzero, it points to a variable holding a list of elements
406 of which INIT is the first. We update the list stored there by
407 removing from the head all the elements that we use.
408 Normally this is only one; we use more than one element only if
409 TYPE is an aggregate and INIT is not a constructor. */
412 digest_init (type, init, tail)
413 tree type, init, *tail;
415 enum tree_code code = TREE_CODE (type);
416 tree element = NULL_TREE;
417 tree old_tail_contents = NULL_TREE;
418 /* Nonzero if INIT is a braced grouping. */
421 /* By default, assume we use one element from a list.
422 We correct this later in the sole case where it is not true. */
426 old_tail_contents = *tail;
427 *tail = TREE_CHAIN (*tail);
430 if (init == error_mark_node || (TREE_CODE (init) == TREE_LIST
431 && TREE_VALUE (init) == error_mark_node))
432 return error_mark_node;
434 if (TREE_CODE (init) == ERROR_MARK)
435 /* __PRETTY_FUNCTION__'s initializer is a bogus expression inside
436 a template function. This gets substituted during instantiation. */
439 /* We must strip the outermost array type when completing the type,
440 because the its bounds might be incomplete at the moment. */
441 if (!complete_type_or_else (TREE_CODE (type) == ARRAY_TYPE
442 ? TREE_TYPE (type) : type, NULL_TREE))
443 return error_mark_node;
445 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
446 if (TREE_CODE (init) == NON_LVALUE_EXPR)
447 init = TREE_OPERAND (init, 0);
449 raw_constructor = (TREE_CODE (init) == CONSTRUCTOR
450 && TREE_HAS_CONSTRUCTOR (init));
453 && CONSTRUCTOR_ELTS (init) != 0
454 && TREE_CHAIN (CONSTRUCTOR_ELTS (init)) == 0)
456 element = TREE_VALUE (CONSTRUCTOR_ELTS (init));
457 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
458 if (element && TREE_CODE (element) == NON_LVALUE_EXPR)
459 element = TREE_OPERAND (element, 0);
460 if (element == error_mark_node)
464 /* Initialization of an array of chars from a string constant
465 optionally enclosed in braces. */
467 if (code == ARRAY_TYPE)
471 if (TREE_CODE (init) == TREE_LIST)
473 error ("initializing array with parameter list");
474 return error_mark_node;
477 typ1 = TYPE_MAIN_VARIANT (TREE_TYPE (type));
478 if (char_type_p (typ1)
479 && ((init && TREE_CODE (init) == STRING_CST)
480 || (element && TREE_CODE (element) == STRING_CST)))
482 tree string = element ? element : init;
484 if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (string)))
486 && TYPE_PRECISION (typ1) == BITS_PER_UNIT)
488 error ("char-array initialized from wide string");
489 return error_mark_node;
491 if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (string)))
493 && TYPE_PRECISION (typ1) != BITS_PER_UNIT)
495 error ("int-array initialized from non-wide string");
496 return error_mark_node;
499 TREE_TYPE (string) = type;
500 if (TYPE_DOMAIN (type) != 0
501 && TREE_CONSTANT (TYPE_SIZE (type)))
504 = TREE_INT_CST_LOW (TYPE_SIZE (type));
505 size = (size + BITS_PER_UNIT - 1) / BITS_PER_UNIT;
506 /* In C it is ok to subtract 1 from the length of the string
507 because it's ok to ignore the terminating null char that is
508 counted in the length of the constant, but in C++ this would
510 if (size < TREE_STRING_LENGTH (string))
511 pedwarn ("initializer-string for array of chars is too long");
517 /* Handle scalar types, including conversions,
518 and signature pointers and references. */
520 if (code == INTEGER_TYPE || code == REAL_TYPE || code == POINTER_TYPE
521 || code == ENUMERAL_TYPE || code == REFERENCE_TYPE
522 || code == BOOLEAN_TYPE || code == COMPLEX_TYPE
523 || TYPE_PTRMEMFUNC_P (type))
529 error ("initializer for scalar variable requires one element");
530 return error_mark_node;
534 while (TREE_CODE (init) == CONSTRUCTOR && TREE_HAS_CONSTRUCTOR (init))
536 pedwarn ("braces around scalar initializer for `%T'", type);
537 init = CONSTRUCTOR_ELTS (init);
538 if (TREE_CHAIN (init))
539 pedwarn ("ignoring extra initializers for `%T'", type);
540 init = TREE_VALUE (init);
543 return convert_for_initialization (0, type, init, LOOKUP_NORMAL,
544 "initialization", NULL_TREE, 0);
547 /* Come here only for records and arrays (and unions with constructors). */
549 if (COMPLETE_TYPE_P (type) && ! TREE_CONSTANT (TYPE_SIZE (type)))
551 error ("variable-sized object of type `%T' may not be initialized",
553 return error_mark_node;
556 if (code == ARRAY_TYPE || code == VECTOR_TYPE || IS_AGGR_TYPE_CODE (code))
558 if (raw_constructor && TYPE_NON_AGGREGATE_CLASS (type)
559 && TREE_HAS_CONSTRUCTOR (init))
561 error ("subobject of type `%T' must be initialized by constructor, not by `%E'",
563 return error_mark_node;
565 else if (raw_constructor)
566 return process_init_constructor (type, init, (tree *)0);
567 else if (can_convert_arg (type, TREE_TYPE (init), init)
568 || TYPE_NON_AGGREGATE_CLASS (type))
569 /* These are never initialized from multiple constructor elements. */;
572 *tail = old_tail_contents;
573 return process_init_constructor (type, 0, tail);
576 if (code != ARRAY_TYPE)
578 int flags = LOOKUP_NORMAL;
579 /* Initialization from { } is copy-initialization. */
581 flags |= LOOKUP_ONLYCONVERTING;
583 return convert_for_initialization (NULL_TREE, type, init, flags,
584 "initialization", NULL_TREE, 0);
588 error ("invalid initializer");
589 return error_mark_node;
592 /* Process a constructor for a variable of type TYPE.
593 The constructor elements may be specified either with INIT or with ELTS,
594 only one of which should be non-null.
596 If INIT is specified, it is a CONSTRUCTOR node which is specifically
597 and solely for initializing this datum.
599 If ELTS is specified, it is the address of a variable containing
600 a list of expressions. We take as many elements as we need
601 from the head of the list and update the list.
603 In the resulting constructor, TREE_CONSTANT is set if all elts are
604 constant, and TREE_STATIC is set if, in addition, all elts are simple enough
605 constants that the assembler and linker can compute them. */
608 process_init_constructor (type, init, elts)
609 tree type, init, *elts;
612 /* List of the elements of the result constructor,
614 register tree members = NULL;
621 /* Make TAIL be the list of elements to use for the initialization,
622 no matter how the data was given to us. */
626 if (warn_missing_braces)
627 warning ("aggregate has a partly bracketed initializer");
631 tail = CONSTRUCTOR_ELTS (init);
633 /* Gobble as many elements as needed, and make a constructor or initial value
634 for each element of this aggregate. Chain them together in result.
635 If there are too few, use 0 for each scalar ultimate component. */
637 if (TREE_CODE (type) == ARRAY_TYPE || TREE_CODE (type) == VECTOR_TYPE)
642 if (TREE_CODE (type) == ARRAY_TYPE)
644 tree domain = TYPE_DOMAIN (type);
646 len = (TREE_INT_CST_LOW (TYPE_MAX_VALUE (domain))
647 - TREE_INT_CST_LOW (TYPE_MIN_VALUE (domain))
650 len = -1; /* Take as many as there are */
654 /* Vectors are like simple fixed-size arrays. */
655 len = TYPE_VECTOR_SUBPARTS (type);
658 for (i = 0; len < 0 || i < len; i++)
662 if (TREE_PURPOSE (tail)
663 && (TREE_CODE (TREE_PURPOSE (tail)) != INTEGER_CST
664 || compare_tree_int (TREE_PURPOSE (tail), i) != 0))
665 sorry ("non-trivial labeled initializers");
667 if (TREE_VALUE (tail) != 0)
670 next1 = digest_init (TREE_TYPE (type),
671 TREE_VALUE (tail), &tail1);
672 if (next1 == error_mark_node)
675 (same_type_ignoring_top_level_qualifiers_p
676 (TREE_TYPE (type), TREE_TYPE (next1)),
678 my_friendly_assert (tail1 == 0
679 || TREE_CODE (tail1) == TREE_LIST, 319);
680 if (tail == tail1 && len < 0)
682 error ("non-empty initializer for array of empty elements");
683 /* Just ignore what we were supposed to use. */
690 next1 = error_mark_node;
691 tail = TREE_CHAIN (tail);
697 else if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (type)))
699 /* If this type needs constructors run for
700 default-initialization, we can't rely on the backend to do it
701 for us, so build up TARGET_EXPRs. If the type in question is
702 a class, just build one up; if it's an array, recurse. */
704 if (IS_AGGR_TYPE (TREE_TYPE (type)))
705 next1 = build_functional_cast (TREE_TYPE (type), NULL_TREE);
707 next1 = build (CONSTRUCTOR, NULL_TREE, NULL_TREE, NULL_TREE);
708 next1 = digest_init (TREE_TYPE (type), next1, 0);
710 else if (! zero_init_p (TREE_TYPE (type)))
711 next1 = build_zero_init (TREE_TYPE (type),
713 /*static_storage_p=*/false);
715 /* The default zero-initialization is fine for us; don't
716 add anything to the CONSTRUCTOR. */
719 if (next1 == error_mark_node)
721 else if (!TREE_CONSTANT (next1))
723 else if (! initializer_constant_valid_p (next1, TREE_TYPE (next1)))
725 members = tree_cons (size_int (i), next1, members);
728 else if (TREE_CODE (type) == RECORD_TYPE)
734 if (TYPE_USES_VIRTUAL_BASECLASSES (type))
736 sorry ("initializer list for object of class with virtual base classes");
737 return error_mark_node;
740 if (TYPE_BINFO_BASETYPES (type))
742 sorry ("initializer list for object of class with base classes");
743 return error_mark_node;
746 if (TYPE_POLYMORPHIC_P (type))
748 sorry ("initializer list for object using virtual functions");
749 return error_mark_node;
753 for (field = TYPE_FIELDS (type); field;
754 field = TREE_CHAIN (field))
756 if (! DECL_NAME (field) && DECL_C_BIT_FIELD (field))
758 members = tree_cons (field, integer_zero_node, members);
762 if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field))
767 if (TREE_PURPOSE (tail)
768 && TREE_PURPOSE (tail) != field
769 && TREE_PURPOSE (tail) != DECL_NAME (field))
770 sorry ("non-trivial labeled initializers");
772 if (TREE_VALUE (tail) != 0)
776 next1 = digest_init (TREE_TYPE (field),
777 TREE_VALUE (tail), &tail1);
778 my_friendly_assert (tail1 == 0
779 || TREE_CODE (tail1) == TREE_LIST, 320);
784 next1 = error_mark_node;
785 tail = TREE_CHAIN (tail);
788 else if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (field)))
790 /* If this type needs constructors run for
791 default-initialization, we can't rely on the backend to do it
792 for us, so build up TARGET_EXPRs. If the type in question is
793 a class, just build one up; if it's an array, recurse. */
795 if (IS_AGGR_TYPE (TREE_TYPE (field)))
796 next1 = build_functional_cast (TREE_TYPE (field),
800 next1 = build (CONSTRUCTOR, NULL_TREE, NULL_TREE,
803 TREE_HAS_CONSTRUCTOR (next1)
804 = TREE_HAS_CONSTRUCTOR (init);
806 next1 = digest_init (TREE_TYPE (field), next1, 0);
808 /* Warn when some struct elements are implicitly initialized. */
810 && (!init || TREE_HAS_CONSTRUCTOR (init)))
811 warning ("missing initializer for member `%D'", field);
815 if (TREE_READONLY (field))
816 error ("uninitialized const member `%D'", field);
817 else if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (TREE_TYPE (field)))
818 error ("member `%D' with uninitialized const fields",
820 else if (TREE_CODE (TREE_TYPE (field)) == REFERENCE_TYPE)
821 error ("member `%D' is uninitialized reference", field);
823 /* Warn when some struct elements are implicitly initialized
826 && (!init || TREE_HAS_CONSTRUCTOR (init)))
827 warning ("missing initializer for member `%D'", field);
829 if (! zero_init_p (TREE_TYPE (field)))
830 next1 = build_zero_init (TREE_TYPE (field),
832 /*static_storage_p=*/false);
834 /* The default zero-initialization is fine for us; don't
835 add anything to the CONSTRUCTOR. */
839 if (next1 == error_mark_node)
841 else if (!TREE_CONSTANT (next1))
843 else if (! initializer_constant_valid_p (next1, TREE_TYPE (next1)))
845 members = tree_cons (field, next1, members);
848 else if (TREE_CODE (type) == UNION_TYPE
849 /* If the initializer was empty, use default zero initialization. */
852 register tree field = TYPE_FIELDS (type);
854 /* Find the first named field. ANSI decided in September 1990
855 that only named fields count here. */
856 while (field && (!DECL_NAME (field) || TREE_CODE (field) != FIELD_DECL))
857 field = TREE_CHAIN (field);
859 /* If this element specifies a field, initialize via that field. */
860 if (TREE_PURPOSE (tail) != NULL_TREE)
864 if (TREE_CODE (TREE_PURPOSE (tail)) == FIELD_DECL)
865 /* Handle the case of a call by build_c_cast. */
866 field = TREE_PURPOSE (tail), win = 1;
867 else if (TREE_CODE (TREE_PURPOSE (tail)) != IDENTIFIER_NODE)
868 error ("index value instead of field name in union initializer");
872 for (temp = TYPE_FIELDS (type);
874 temp = TREE_CHAIN (temp))
875 if (DECL_NAME (temp) == TREE_PURPOSE (tail))
878 field = temp, win = 1;
880 error ("no field `%D' in union being initialized",
881 TREE_PURPOSE (tail));
884 TREE_VALUE (tail) = error_mark_node;
888 error ("union `%T' with no named members cannot be initialized",
890 TREE_VALUE (tail) = error_mark_node;
893 if (TREE_VALUE (tail) != 0)
897 next1 = digest_init (TREE_TYPE (field),
898 TREE_VALUE (tail), &tail1);
899 if (tail1 != 0 && TREE_CODE (tail1) != TREE_LIST)
905 next1 = error_mark_node;
906 tail = TREE_CHAIN (tail);
909 if (next1 == error_mark_node)
911 else if (!TREE_CONSTANT (next1))
913 else if (initializer_constant_valid_p (next1, TREE_TYPE (next1)) == 0)
915 members = tree_cons (field, next1, members);
918 /* If arguments were specified as a list, just remove the ones we used. */
921 /* If arguments were specified as a constructor,
922 complain unless we used all the elements of the constructor. */
924 pedwarn ("excess elements in aggregate initializer");
927 return error_mark_node;
929 result = build (CONSTRUCTOR, type, NULL_TREE, nreverse (members));
930 if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type) == NULL_TREE)
931 complete_array_type (type, result, /*do_default=*/0);
933 TREE_HAS_CONSTRUCTOR (result) = TREE_HAS_CONSTRUCTOR (init);
934 if (allconstant) TREE_CONSTANT (result) = 1;
935 if (allconstant && allsimple) TREE_STATIC (result) = 1;
939 /* Given a structure or union value DATUM, construct and return
940 the structure or union component which results from narrowing
941 that value to the base specified in BASETYPE. For example, given the
947 class C : A, B { ... };
955 x.A::ii refers to the ii member of the L part of
956 the A part of the C object named by X. In this case,
957 DATUM would be x, and BASETYPE would be A.
959 I used to think that this was nonconformant, that the standard specified
960 that first we look up ii in A, then convert x to an L& and pull out the
961 ii part. But in fact, it does say that we convert x to an A&; A here
962 is known as the "naming class". (jason 2000-12-19)
964 BINFO_P points to a variable initialized either to NULL_TREE or to the
965 binfo for the specific base subobject we want to convert to. */
968 build_scoped_ref (datum, basetype, binfo_p)
975 if (datum == error_mark_node)
976 return error_mark_node;
980 binfo = lookup_base (TREE_TYPE (datum), basetype, ba_check, NULL);
982 if (!binfo || binfo == error_mark_node)
984 *binfo_p = NULL_TREE;
986 error_not_base_type (basetype, TREE_TYPE (datum));
987 return error_mark_node;
991 return build_base_path (PLUS_EXPR, datum, binfo, 1);
994 /* Build a reference to an object specified by the C++ `->' operator.
995 Usually this just involves dereferencing the object, but if the
996 `->' operator is overloaded, then such overloads must be
997 performed until an object which does not have the `->' operator
998 overloaded is found. An error is reported when circular pointer
999 delegation is detected. */
1002 build_x_arrow (datum)
1005 tree types_memoized = NULL_TREE;
1006 register tree rval = datum;
1007 tree type = TREE_TYPE (rval);
1008 tree last_rval = NULL_TREE;
1010 if (type == error_mark_node)
1011 return error_mark_node;
1013 if (processing_template_decl)
1014 return build_min_nt (ARROW_EXPR, rval);
1016 if (TREE_CODE (rval) == OFFSET_REF)
1018 rval = resolve_offset_ref (datum);
1019 type = TREE_TYPE (rval);
1022 if (TREE_CODE (type) == REFERENCE_TYPE)
1024 rval = convert_from_reference (rval);
1025 type = TREE_TYPE (rval);
1028 if (IS_AGGR_TYPE (type))
1030 while ((rval = build_new_op (COMPONENT_REF, LOOKUP_NORMAL, rval,
1031 NULL_TREE, NULL_TREE)))
1033 if (rval == error_mark_node)
1034 return error_mark_node;
1036 if (value_member (TREE_TYPE (rval), types_memoized))
1038 error ("circular pointer delegation detected");
1039 return error_mark_node;
1043 types_memoized = tree_cons (NULL_TREE, TREE_TYPE (rval),
1049 if (last_rval == NULL_TREE)
1051 error ("base operand of `->' has non-pointer type `%T'", type);
1052 return error_mark_node;
1055 if (TREE_CODE (TREE_TYPE (last_rval)) == REFERENCE_TYPE)
1056 last_rval = convert_from_reference (last_rval);
1059 last_rval = default_conversion (rval);
1061 if (TREE_CODE (TREE_TYPE (last_rval)) == POINTER_TYPE)
1062 return build_indirect_ref (last_rval, NULL);
1065 error ("result of `operator->()' yields non-pointer result");
1067 error ("base operand of `->' is not a pointer");
1068 return error_mark_node;
1071 /* Make an expression to refer to the COMPONENT field of
1072 structure or union value DATUM. COMPONENT is an arbitrary
1073 expression. DATUM has not already been checked out to be of
1076 For C++, COMPONENT may be a TREE_LIST. This happens when we must
1077 return an object of member type to a method of the current class,
1078 but there is not yet enough typing information to know which one.
1079 As a special case, if there is only one method by that name,
1080 it is returned. Otherwise we return an expression which other
1081 routines will have to know how to deal with later. */
1084 build_m_component_ref (datum, component)
1085 tree datum, component;
1093 if (processing_template_decl)
1094 return build_min_nt (DOTSTAR_EXPR, datum, component);
1096 datum = decay_conversion (datum);
1098 if (datum == error_mark_node || component == error_mark_node)
1099 return error_mark_node;
1101 objtype = TYPE_MAIN_VARIANT (TREE_TYPE (datum));
1103 if (TYPE_PTRMEMFUNC_P (TREE_TYPE (component)))
1105 type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (TREE_TYPE (component)));
1108 else if (TYPE_PTRMEM_P (TREE_TYPE (component)))
1110 type = TREE_TYPE (TREE_TYPE (component));
1111 field_type = TREE_TYPE (type);
1113 /* Compute the type of the field, as described in [expr.ref]. */
1114 type_quals = TYPE_UNQUALIFIED;
1115 if (TREE_CODE (field_type) == REFERENCE_TYPE)
1116 /* The standard says that the type of the result should be the
1117 type referred to by the reference. But for now, at least,
1118 we do the conversion from reference type later. */
1122 type_quals = (cp_type_quals (field_type)
1123 | cp_type_quals (TREE_TYPE (datum)));
1125 /* There's no such thing as a mutable pointer-to-member, so
1126 things are not as complex as they are for references to
1127 non-static data members. */
1128 field_type = cp_build_qualified_type (field_type, type_quals);
1133 error ("`%E' cannot be used as a member pointer, since it is of type `%T'",
1134 component, TREE_TYPE (component));
1135 return error_mark_node;
1138 if (! IS_AGGR_TYPE (objtype))
1140 error ("cannot apply member pointer `%E' to `%E', which is of non-aggregate type `%T'",
1141 component, datum, objtype);
1142 return error_mark_node;
1145 binfo = lookup_base (objtype, TYPE_METHOD_BASETYPE (type),
1149 error ("member type `%T::' incompatible with object type `%T'",
1150 TYPE_METHOD_BASETYPE (type), objtype);
1151 return error_mark_node;
1153 else if (binfo == error_mark_node)
1154 return error_mark_node;
1156 component = build (OFFSET_REF, field_type, datum, component);
1157 if (TREE_CODE (type) == OFFSET_TYPE)
1158 component = resolve_offset_ref (component);
1162 /* Return a tree node for the expression TYPENAME '(' PARMS ')'. */
1165 build_functional_cast (exp, parms)
1169 /* This is either a call to a constructor,
1170 or a C cast in C++'s `functional' notation. */
1173 if (exp == error_mark_node || parms == error_mark_node)
1174 return error_mark_node;
1176 if (TREE_CODE (exp) == IDENTIFIER_NODE)
1178 if (IDENTIFIER_HAS_TYPE_VALUE (exp))
1179 /* Either an enum or an aggregate type. */
1180 type = IDENTIFIER_TYPE_VALUE (exp);
1183 type = lookup_name (exp, 1);
1184 if (!type || TREE_CODE (type) != TYPE_DECL)
1186 error ("`%T' fails to be a typedef or built-in type", exp);
1187 return error_mark_node;
1189 type = TREE_TYPE (type);
1192 else if (TREE_CODE (exp) == TYPE_DECL)
1193 type = TREE_TYPE (exp);
1197 if (processing_template_decl)
1198 return build_min (CAST_EXPR, type, parms);
1200 if (! IS_AGGR_TYPE (type))
1202 /* this must build a C cast */
1203 if (parms == NULL_TREE)
1204 parms = integer_zero_node;
1207 if (TREE_CHAIN (parms) != NULL_TREE)
1208 pedwarn ("initializer list being treated as compound expression");
1209 parms = build_compound_expr (parms);
1212 return build_c_cast (type, parms);
1215 /* Prepare to evaluate as a call to a constructor. If this expression
1216 is actually used, for example,
1218 return X (arg1, arg2, ...);
1220 then the slot being initialized will be filled in. */
1222 if (!complete_type_or_else (type, NULL_TREE))
1223 return error_mark_node;
1224 if (abstract_virtuals_error (NULL_TREE, type))
1225 return error_mark_node;
1227 if (parms && TREE_CHAIN (parms) == NULL_TREE)
1228 return build_c_cast (type, TREE_VALUE (parms));
1230 /* We need to zero-initialize POD types. Let's do that for everything
1231 that doesn't need a constructor. */
1232 if (parms == NULL_TREE && !TYPE_NEEDS_CONSTRUCTING (type)
1233 && TYPE_HAS_DEFAULT_CONSTRUCTOR (type))
1235 exp = build (CONSTRUCTOR, type, NULL_TREE, NULL_TREE);
1236 return get_target_expr (exp);
1239 exp = build_special_member_call (NULL_TREE, complete_ctor_identifier, parms,
1240 TYPE_BINFO (type), LOOKUP_NORMAL);
1242 if (exp == error_mark_node)
1243 return error_mark_node;
1245 return build_cplus_new (type, exp);
1249 /* Add new exception specifier SPEC, to the LIST we currently have.
1250 If it's already in LIST then do nothing.
1251 Moan if it's bad and we're allowed to. COMPLAIN < 0 means we
1252 know what we're doing. */
1255 add_exception_specifier (list, spec, complain)
1262 int diag_type = -1; /* none */
1264 if (spec == error_mark_node)
1267 my_friendly_assert (spec && (!list || TREE_VALUE (list)), 19990317);
1269 /* [except.spec] 1, type in an exception specifier shall not be
1270 incomplete, or pointer or ref to incomplete other than pointer
1272 is_ptr = TREE_CODE (core) == POINTER_TYPE;
1273 if (is_ptr || TREE_CODE (core) == REFERENCE_TYPE)
1274 core = TREE_TYPE (core);
1277 else if (VOID_TYPE_P (core))
1279 else if (TREE_CODE (core) == TEMPLATE_TYPE_PARM)
1281 else if (processing_template_decl)
1286 /* 15.4/1 says that types in an exception specifier must be complete,
1287 but it seems more reasonable to only require this on definitions
1288 and calls. So just give a pedwarn at this point; we will give an
1289 error later if we hit one of those two cases. */
1290 if (!COMPLETE_TYPE_P (complete_type (core)))
1291 diag_type = 2; /* pedwarn */
1298 for (probe = list; probe; probe = TREE_CHAIN (probe))
1299 if (same_type_p (TREE_VALUE (probe), spec))
1302 list = tree_cons (NULL_TREE, spec, list);
1305 diag_type = 0; /* error */
1307 if (diag_type >= 0 && complain)
1308 cxx_incomplete_type_diagnostic (NULL_TREE, core, diag_type);
1313 /* Combine the two exceptions specifier lists LIST and ADD, and return
1317 merge_exception_specifiers (list, add)
1322 else if (!TREE_VALUE (list))
1324 else if (!TREE_VALUE (add))
1328 tree orig_list = list;
1330 for (; add; add = TREE_CHAIN (add))
1332 tree spec = TREE_VALUE (add);
1335 for (probe = orig_list; probe; probe = TREE_CHAIN (probe))
1336 if (same_type_p (TREE_VALUE (probe), spec))
1340 spec = build_tree_list (NULL_TREE, spec);
1341 TREE_CHAIN (spec) = list;
1349 /* Subroutine of build_call. Ensure that each of the types in the
1350 exception specification is complete. Technically, 15.4/1 says that
1351 they need to be complete when we see a declaration of the function,
1352 but we should be able to get away with only requiring this when the
1353 function is defined or called. See also add_exception_specifier. */
1356 require_complete_eh_spec_types (fntype, decl)
1360 /* Don't complain about calls to op new. */
1361 if (decl && DECL_ARTIFICIAL (decl))
1363 for (raises = TYPE_RAISES_EXCEPTIONS (fntype); raises;
1364 raises = TREE_CHAIN (raises))
1366 tree type = TREE_VALUE (raises);
1367 if (type && !COMPLETE_TYPE_P (type))
1371 ("call to function `%D' which throws incomplete type `%#T'",
1374 error ("call to function which throws incomplete type `%#T'",