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). */
42 static tree process_init_constructor PARAMS ((tree, tree, tree *));
44 /* Print an error message stemming from an attempt to use
45 BASETYPE as a base class for TYPE. */
48 error_not_base_type (basetype, type)
51 if (TREE_CODE (basetype) == FUNCTION_DECL)
52 basetype = DECL_CONTEXT (basetype);
53 cp_error ("type `%T' is not a base type for type `%T'", basetype, type);
54 return error_mark_node;
58 binfo_or_else (parent_or_type, type)
59 tree parent_or_type, type;
62 if (TYPE_MAIN_VARIANT (parent_or_type) == TYPE_MAIN_VARIANT (type))
63 return TYPE_BINFO (parent_or_type);
64 if ((binfo = get_binfo (parent_or_type, TYPE_MAIN_VARIANT (type), 0)))
66 if (binfo == error_mark_node)
70 error_not_base_type (parent_or_type, type);
74 /* According to ARM $7.1.6, "A `const' object may be initialized, but its
75 value may not be changed thereafter. Thus, we emit hard errors for these,
76 rather than just pedwarns. If `SOFT' is 1, then we just pedwarn. (For
77 example, conversions to references.) */
80 readonly_error (arg, string, soft)
86 void (*fn) PARAMS ((const char *, ...));
93 if (TREE_CODE (arg) == COMPONENT_REF)
95 if (TYPE_READONLY (TREE_TYPE (TREE_OPERAND (arg, 0))))
96 fmt = "%s of data-member `%D' in read-only structure";
98 fmt = "%s of read-only data-member `%D'";
99 (*fn) (fmt, string, TREE_OPERAND (arg, 1));
101 else if (TREE_CODE (arg) == VAR_DECL)
103 if (DECL_LANG_SPECIFIC (arg)
104 && DECL_IN_AGGR_P (arg)
105 && !TREE_STATIC (arg))
106 fmt = "%s of constant field `%D'";
108 fmt = "%s of read-only variable `%D'";
109 (*fn) (fmt, string, arg);
111 else if (TREE_CODE (arg) == PARM_DECL)
112 (*fn) ("%s of read-only parameter `%D'", string, arg);
113 else if (TREE_CODE (arg) == INDIRECT_REF
114 && TREE_CODE (TREE_TYPE (TREE_OPERAND (arg, 0))) == REFERENCE_TYPE
115 && (TREE_CODE (TREE_OPERAND (arg, 0)) == VAR_DECL
116 || TREE_CODE (TREE_OPERAND (arg, 0)) == PARM_DECL))
117 (*fn) ("%s of read-only reference `%D'", string, TREE_OPERAND (arg, 0));
118 else if (TREE_CODE (arg) == RESULT_DECL)
119 (*fn) ("%s of read-only named return value `%D'", string, arg);
120 else if (TREE_CODE (arg) == FUNCTION_DECL)
121 (*fn) ("%s of function `%D'", string, arg);
123 (*fn) ("%s of read-only location", string);
126 /* If TYPE has abstract virtual functions, issue an error about trying
127 to create an object of that type. DECL is the object declared, or
128 NULL_TREE if the declaration is unavailable. Returns 1 if an error
129 occurred; zero if all was well. */
132 abstract_virtuals_error (decl, type)
139 if (!CLASS_TYPE_P (type) || !CLASSTYPE_PURE_VIRTUALS (type))
142 u = CLASSTYPE_PURE_VIRTUALS (type);
145 if (TREE_CODE (decl) == RESULT_DECL)
148 if (TREE_CODE (decl) == VAR_DECL)
149 cp_error ("cannot declare variable `%D' to be of type `%T'",
151 else if (TREE_CODE (decl) == PARM_DECL)
152 cp_error ("cannot declare parameter `%D' to be of type `%T'",
154 else if (TREE_CODE (decl) == FIELD_DECL)
155 cp_error ("cannot declare field `%D' to be of type `%T'",
157 else if (TREE_CODE (decl) == FUNCTION_DECL
158 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
159 cp_error ("invalid return type for member function `%#D'", decl);
160 else if (TREE_CODE (decl) == FUNCTION_DECL)
161 cp_error ("invalid return type for function `%#D'", decl);
164 cp_error ("cannot allocate an object of type `%T'", type);
166 /* Only go through this once. */
167 if (TREE_PURPOSE (u) == NULL_TREE)
169 TREE_PURPOSE (u) = error_mark_node;
171 error (" because the following virtual functions are abstract:");
172 for (tu = u; tu; tu = TREE_CHAIN (tu))
173 cp_error_at ("\t%#D", TREE_VALUE (tu));
176 cp_error (" since type `%T' has abstract virtual functions", type);
181 /* Print an error message for invalid use of an incomplete type.
182 VALUE is the expression that was used (or 0 if that isn't known)
183 and TYPE is the type that was invalid. */
186 incomplete_type_error (value, type)
192 /* Avoid duplicate error message. */
193 if (TREE_CODE (type) == ERROR_MARK)
196 if (value != 0 && (TREE_CODE (value) == VAR_DECL
197 || TREE_CODE (value) == PARM_DECL))
199 cp_error_at ("`%D' has incomplete type", value);
203 /* We must print an error message. Be clever about what it says. */
205 switch (TREE_CODE (type))
211 cp_error ("invalid use of undefined type `%#T'", type);
212 cp_error_at ("forward declaration of `%#T'", type);
216 cp_error ("invalid use of `%T'", type);
220 if (TYPE_DOMAIN (type))
222 type = TREE_TYPE (type);
225 cp_error ("invalid use of array with unspecified bounds");
230 cp_error ("invalid use of member (did you forget the `&' ?)");
233 case TEMPLATE_TYPE_PARM:
234 cp_error ("invalid use of template type parameter");
238 if (value && TREE_CODE (value) == COMPONENT_REF)
240 else if (value && TREE_CODE (value) == ADDR_EXPR)
241 cp_error ("address of overloaded function with no contextual type information");
242 else if (value && TREE_CODE (value) == OVERLOAD)
243 cp_error ("overloaded function with no contextual type information");
245 cp_error ("insufficient contextual information to determine type");
249 my_friendly_abort (108);
253 /* This is a wrapper around fancy_abort, as used in the back end and
254 other front ends. It will also report the magic number assigned to
255 this particular abort. That is for backward compatibility with the
256 old C++ abort handler, which would just report the magic number. */
258 friendly_abort (where, file, line, func)
265 error ("Internal error #%d.", where);
267 /* Uncount this error, so finish_abort will do the right thing. */
270 fancy_abort (file, line, func);
274 /* Perform appropriate conversions on the initial value of a variable,
275 store it in the declaration DECL,
276 and print any error messages that are appropriate.
277 If the init is invalid, store an ERROR_MARK.
279 C++: Note that INIT might be a TREE_LIST, which would mean that it is
280 a base class initializer for some aggregate type, hopefully compatible
281 with DECL. If INIT is a single element, and DECL is an aggregate
282 type, we silently convert INIT into a TREE_LIST, allowing a constructor
285 If INIT is a TREE_LIST and there is no constructor, turn INIT
286 into a CONSTRUCTOR and use standard initialization techniques.
287 Perhaps a warning should be generated?
289 Returns value of initializer if initialization could not be
290 performed for static variable. In that case, caller must do
294 store_init_value (decl, init)
297 register tree value, type;
299 /* If variable's type was invalidly declared, just ignore it. */
301 type = TREE_TYPE (decl);
302 if (TREE_CODE (type) == ERROR_MARK)
306 /* This breaks arrays, and should not have any effect for other decls. */
307 /* Take care of C++ business up here. */
308 type = TYPE_MAIN_VARIANT (type);
311 if (IS_AGGR_TYPE (type))
313 if (! TYPE_HAS_TRIVIAL_INIT_REF (type)
314 && TREE_CODE (init) != CONSTRUCTOR)
315 my_friendly_abort (109);
317 if (TREE_CODE (init) == TREE_LIST)
319 cp_error ("constructor syntax used, but no constructor declared for type `%T'", type);
320 init = build_nt (CONSTRUCTOR, NULL_TREE, nreverse (init));
323 if (TREE_CODE (init) == CONSTRUCTOR)
327 /* Check that we're really an aggregate as ARM 8.4.1 defines it. */
328 if (CLASSTYPE_N_BASECLASSES (type))
329 cp_error_at ("initializer list construction invalid for derived class object `%D'", decl);
330 if (CLASSTYPE_VTBL_PTR (type))
331 cp_error_at ("initializer list construction invalid for polymorphic class object `%D'", decl);
332 if (TYPE_NEEDS_CONSTRUCTING (type))
334 cp_error_at ("initializer list construction invalid for `%D'", decl);
335 error ("due to the presence of a constructor");
337 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
338 if (TREE_PRIVATE (field) || TREE_PROTECTED (field))
340 cp_error_at ("initializer list construction invalid for `%D'", decl);
341 cp_error_at ("due to non-public access of member `%D'", field);
343 for (field = TYPE_METHODS (type); field; field = TREE_CHAIN (field))
344 if (TREE_PRIVATE (field) || TREE_PROTECTED (field))
346 cp_error_at ("initializer list construction invalid for `%D'", decl);
347 cp_error_at ("due to non-public access of member `%D'", field);
352 else if (TREE_CODE (init) == TREE_LIST
353 && TREE_TYPE (init) != unknown_type_node)
355 if (TREE_CODE (decl) == RESULT_DECL)
357 if (TREE_CHAIN (init))
359 warning ("comma expression used to initialize return value");
360 init = build_compound_expr (init);
363 init = TREE_VALUE (init);
365 else if (TREE_CODE (init) == TREE_LIST
366 && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
368 error ("cannot initialize arrays using this syntax");
373 /* We get here with code like `int a (2);' */
375 if (TREE_CHAIN (init) != NULL_TREE)
377 pedwarn ("initializer list being treated as compound expression");
378 init = build_compound_expr (init);
381 init = TREE_VALUE (init);
385 /* End of special C++ code. */
387 /* Digest the specified initializer into an expression. */
389 value = digest_init (type, init, (tree *) 0);
391 /* Store the expression if valid; else report error. */
393 if (TREE_CODE (value) == ERROR_MARK)
395 /* Other code expects that initializers for objects of types that need
396 constructing never make it into DECL_INITIAL, and passes 'init' to
397 build_aggr_init without checking DECL_INITIAL. So just return. */
398 else if (TYPE_NEEDS_CONSTRUCTING (type))
400 else if (TREE_STATIC (decl)
401 && (! TREE_CONSTANT (value)
402 || ! initializer_constant_valid_p (value, TREE_TYPE (value))
404 /* A STATIC PUBLIC int variable doesn't have to be
405 run time inited when doing pic. (mrs) */
406 /* Since ctors and dtors are the only things that can
407 reference vtables, and they are always written down
408 the vtable definition, we can leave the
409 vtables in initialized data space.
410 However, other initialized data cannot be initialized
411 this way. Instead a global file-level initializer
413 || (flag_pic && !DECL_VIRTUAL_P (decl) && TREE_PUBLIC (decl))
418 #if 0 /* No, that's C. jason 9/19/94 */
421 if (pedantic && TREE_CODE (value) == CONSTRUCTOR)
423 if (! TREE_CONSTANT (value) || ! TREE_STATIC (value))
424 pedwarn ("ANSI C++ forbids non-constant aggregate initializer expressions");
429 /* Store the VALUE in DECL_INITIAL. If we're building a
430 statement-tree we will actually expand the initialization later
431 when we output this function. */
432 DECL_INITIAL (decl) = value;
436 /* Digest the parser output INIT as an initializer for type TYPE.
437 Return a C expression of type TYPE to represent the initial value.
439 If TAIL is nonzero, it points to a variable holding a list of elements
440 of which INIT is the first. We update the list stored there by
441 removing from the head all the elements that we use.
442 Normally this is only one; we use more than one element only if
443 TYPE is an aggregate and INIT is not a constructor. */
446 digest_init (type, init, tail)
447 tree type, init, *tail;
449 enum tree_code code = TREE_CODE (type);
450 tree element = NULL_TREE;
451 tree old_tail_contents = NULL_TREE;
452 /* Nonzero if INIT is a braced grouping, which comes in as a CONSTRUCTOR
453 tree node which has no TREE_TYPE. */
456 /* By default, assume we use one element from a list.
457 We correct this later in the sole case where it is not true. */
461 old_tail_contents = *tail;
462 *tail = TREE_CHAIN (*tail);
465 if (init == error_mark_node || (TREE_CODE (init) == TREE_LIST
466 && TREE_VALUE (init) == error_mark_node))
467 return error_mark_node;
469 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
470 if (TREE_CODE (init) == NON_LVALUE_EXPR)
471 init = TREE_OPERAND (init, 0);
473 if (TREE_CODE (init) == CONSTRUCTOR && TREE_TYPE (init) == type)
476 raw_constructor = TREE_CODE (init) == CONSTRUCTOR && TREE_TYPE (init) == 0;
479 && CONSTRUCTOR_ELTS (init) != 0
480 && TREE_CHAIN (CONSTRUCTOR_ELTS (init)) == 0)
482 element = TREE_VALUE (CONSTRUCTOR_ELTS (init));
483 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
484 if (element && TREE_CODE (element) == NON_LVALUE_EXPR)
485 element = TREE_OPERAND (element, 0);
486 if (element == error_mark_node)
490 /* Initialization of an array of chars from a string constant
491 optionally enclosed in braces. */
493 if (code == ARRAY_TYPE)
497 if (TREE_CODE (init) == TREE_LIST)
499 error ("initializing array with parameter list");
500 return error_mark_node;
503 typ1 = TYPE_MAIN_VARIANT (TREE_TYPE (type));
504 if (char_type_p (typ1)
505 && ((init && TREE_CODE (init) == STRING_CST)
506 || (element && TREE_CODE (element) == STRING_CST)))
508 tree string = element ? element : init;
510 if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (string)))
512 && TYPE_PRECISION (typ1) == BITS_PER_UNIT)
514 error ("char-array initialized from wide string");
515 return error_mark_node;
517 if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (string)))
519 && TYPE_PRECISION (typ1) != BITS_PER_UNIT)
521 error ("int-array initialized from non-wide string");
522 return error_mark_node;
525 TREE_TYPE (string) = type;
526 if (TYPE_DOMAIN (type) != 0
527 && TREE_CONSTANT (TYPE_SIZE (type)))
530 = TREE_INT_CST_LOW (TYPE_SIZE (type));
531 size = (size + BITS_PER_UNIT - 1) / BITS_PER_UNIT;
532 /* In C it is ok to subtract 1 from the length of the string
533 because it's ok to ignore the terminating null char that is
534 counted in the length of the constant, but in C++ this would
536 if (size < TREE_STRING_LENGTH (string))
537 pedwarn ("initializer-string for array of chars is too long");
543 /* Handle scalar types, including conversions,
544 and signature pointers and references. */
546 if (code == INTEGER_TYPE || code == REAL_TYPE || code == POINTER_TYPE
547 || code == ENUMERAL_TYPE || code == REFERENCE_TYPE
548 || code == BOOLEAN_TYPE || code == COMPLEX_TYPE
549 || TYPE_PTRMEMFUNC_P (type))
555 error ("initializer for scalar variable requires one element");
556 return error_mark_node;
560 while (TREE_CODE (init) == CONSTRUCTOR && TREE_HAS_CONSTRUCTOR (init))
562 cp_pedwarn ("braces around scalar initializer for `%T'", type);
563 init = CONSTRUCTOR_ELTS (init);
564 if (TREE_CHAIN (init))
565 cp_pedwarn ("ignoring extra initializers for `%T'", type);
566 init = TREE_VALUE (init);
569 return convert_for_initialization (0, type, init, LOOKUP_NORMAL,
570 "initialization", NULL_TREE, 0);
573 /* Come here only for records and arrays (and unions with constructors). */
575 if (COMPLETE_TYPE_P (type) && ! TREE_CONSTANT (TYPE_SIZE (type)))
577 cp_error ("variable-sized object of type `%T' may not be initialized",
579 return error_mark_node;
582 if (code == ARRAY_TYPE || IS_AGGR_TYPE_CODE (code))
584 if (raw_constructor && TYPE_NON_AGGREGATE_CLASS (type))
586 cp_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),
812 next1 = build (CONSTRUCTOR, NULL_TREE, NULL_TREE,
814 next1 = digest_init (TREE_TYPE (field), next1, 0);
816 /* Warn when some struct elements are implicitly initialized. */
818 cp_warning ("missing initializer for member `%D'", field);
822 if (TREE_READONLY (field))
823 cp_error ("uninitialized const member `%D'", field);
824 else if (TYPE_LANG_SPECIFIC (TREE_TYPE (field))
825 && CLASSTYPE_READONLY_FIELDS_NEED_INIT (TREE_TYPE (field)))
826 cp_error ("member `%D' with uninitialized const fields",
828 else if (TREE_CODE (TREE_TYPE (field)) == REFERENCE_TYPE)
829 cp_error ("member `%D' is uninitialized reference", field);
831 /* Warn when some struct elements are implicitly initialized
834 cp_warning ("missing initializer for member `%D'", field);
836 /* The default zero-initialization is fine for us; don't
837 add anything to the CONSTRUCTOR. */
841 if (next1 == error_mark_node)
843 else if (!TREE_CONSTANT (next1))
845 else if (! initializer_constant_valid_p (next1, TREE_TYPE (next1)))
847 members = tree_cons (field, next1, members);
850 else if (TREE_CODE (type) == UNION_TYPE
851 /* If the initializer was empty, use default zero initialization. */
854 register tree field = TYPE_FIELDS (type);
856 /* Find the first named field. ANSI decided in September 1990
857 that only named fields count here. */
858 while (field && (DECL_NAME (field) == 0
859 || TREE_CODE (field) != FIELD_DECL))
860 field = TREE_CHAIN (field);
862 /* If this element specifies a field, initialize via that field. */
863 if (TREE_PURPOSE (tail) != NULL_TREE)
867 if (TREE_CODE (TREE_PURPOSE (tail)) == FIELD_DECL)
868 /* Handle the case of a call by build_c_cast. */
869 field = TREE_PURPOSE (tail), win = 1;
870 else if (TREE_CODE (TREE_PURPOSE (tail)) != IDENTIFIER_NODE)
871 error ("index value instead of field name in union initializer");
875 for (temp = TYPE_FIELDS (type);
877 temp = TREE_CHAIN (temp))
878 if (DECL_NAME (temp) == TREE_PURPOSE (tail))
881 field = temp, win = 1;
883 cp_error ("no field `%D' in union being initialized",
884 TREE_PURPOSE (tail));
887 TREE_VALUE (tail) = error_mark_node;
891 cp_error ("union `%T' with no named members cannot be initialized",
893 TREE_VALUE (tail) = error_mark_node;
896 if (TREE_VALUE (tail) != 0)
900 next1 = digest_init (TREE_TYPE (field),
901 TREE_VALUE (tail), &tail1);
902 if (tail1 != 0 && TREE_CODE (tail1) != TREE_LIST)
903 my_friendly_abort (357);
908 next1 = error_mark_node;
909 tail = TREE_CHAIN (tail);
912 if (next1 == error_mark_node)
914 else if (!TREE_CONSTANT (next1))
916 else if (initializer_constant_valid_p (next1, TREE_TYPE (next1)) == 0)
918 members = tree_cons (field, next1, members);
921 /* If arguments were specified as a list, just remove the ones we used. */
924 /* If arguments were specified as a constructor,
925 complain unless we used all the elements of the constructor. */
927 pedwarn ("excess elements in aggregate initializer");
930 return error_mark_node;
932 result = build (CONSTRUCTOR, type, NULL_TREE, nreverse (members));
934 TREE_HAS_CONSTRUCTOR (result) = TREE_HAS_CONSTRUCTOR (init);
935 if (allconstant) TREE_CONSTANT (result) = 1;
936 if (allconstant && allsimple) TREE_STATIC (result) = 1;
940 /* Given a structure or union value DATUM, construct and return
941 the structure or union component which results from narrowing
942 that value by the type specified in BASETYPE. For example, given the
948 class C : A, B { ... };
956 x.A::ii refers to the ii member of the L part of
957 the A part of the C object named by X. In this case,
958 DATUM would be x, and BASETYPE would be A.
960 Note that this is nonconformant; the standard specifies that first
961 we look up ii in A, then convert x to an L& and pull out the ii part.
962 But narrowing seems to be standard practice, so let's do it anyway. */
965 build_scoped_ref (datum, basetype)
970 tree type = TREE_TYPE (datum);
972 if (datum == error_mark_node)
973 return error_mark_node;
975 /* Don't do this if it would cause an error or if we're being pedantic. */
976 if (! ACCESSIBLY_UNIQUELY_DERIVED_P (basetype, type)
980 ref = build_unary_op (ADDR_EXPR, datum, 0);
981 ref = convert_pointer_to (basetype, ref);
983 return build_indirect_ref (ref, "(compiler error in build_scoped_ref)");
986 /* Build a reference to an object specified by the C++ `->' operator.
987 Usually this just involves dereferencing the object, but if the
988 `->' operator is overloaded, then such overloads must be
989 performed until an object which does not have the `->' operator
990 overloaded is found. An error is reported when circular pointer
991 delegation is detected. */
994 build_x_arrow (datum)
997 tree types_memoized = NULL_TREE;
998 register tree rval = datum;
999 tree type = TREE_TYPE (rval);
1000 tree last_rval = NULL_TREE;
1002 if (type == error_mark_node)
1003 return error_mark_node;
1005 if (processing_template_decl)
1006 return build_min_nt (ARROW_EXPR, rval);
1008 if (TREE_CODE (rval) == OFFSET_REF)
1010 rval = resolve_offset_ref (datum);
1011 type = TREE_TYPE (rval);
1014 if (TREE_CODE (type) == REFERENCE_TYPE)
1016 rval = convert_from_reference (rval);
1017 type = TREE_TYPE (rval);
1020 if (IS_AGGR_TYPE (type))
1022 while ((rval = build_opfncall (COMPONENT_REF, LOOKUP_NORMAL, rval,
1023 NULL_TREE, NULL_TREE)))
1025 if (rval == error_mark_node)
1026 return error_mark_node;
1028 if (value_member (TREE_TYPE (rval), types_memoized))
1030 error ("circular pointer delegation detected");
1031 return error_mark_node;
1035 types_memoized = tree_cons (NULL_TREE, TREE_TYPE (rval),
1041 if (last_rval == NULL_TREE)
1043 cp_error ("base operand of `->' has non-pointer type `%T'", type);
1044 return error_mark_node;
1047 if (TREE_CODE (TREE_TYPE (last_rval)) == REFERENCE_TYPE)
1048 last_rval = convert_from_reference (last_rval);
1051 last_rval = default_conversion (rval);
1053 if (TREE_CODE (TREE_TYPE (last_rval)) == POINTER_TYPE)
1054 return build_indirect_ref (last_rval, NULL_PTR);
1057 error ("result of `operator->()' yields non-pointer result");
1059 error ("base operand of `->' is not a pointer");
1060 return error_mark_node;
1063 /* Make an expression to refer to the COMPONENT field of
1064 structure or union value DATUM. COMPONENT is an arbitrary
1065 expression. DATUM has not already been checked out to be of
1068 For C++, COMPONENT may be a TREE_LIST. This happens when we must
1069 return an object of member type to a method of the current class,
1070 but there is not yet enough typing information to know which one.
1071 As a special case, if there is only one method by that name,
1072 it is returned. Otherwise we return an expression which other
1073 routines will have to know how to deal with later. */
1076 build_m_component_ref (datum, component)
1077 tree datum, component;
1085 if (processing_template_decl)
1086 return build_min_nt (DOTSTAR_EXPR, datum, component);
1088 datum = decay_conversion (datum);
1089 objtype = TYPE_MAIN_VARIANT (TREE_TYPE (datum));
1091 if (TYPE_PTRMEMFUNC_P (TREE_TYPE (component)))
1093 type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (TREE_TYPE (component)));
1098 type = TREE_TYPE (TREE_TYPE (component));
1099 field_type = TREE_TYPE (type);
1102 if (datum == error_mark_node || component == error_mark_node)
1103 return error_mark_node;
1105 if (TREE_CODE (type) != OFFSET_TYPE && TREE_CODE (type) != METHOD_TYPE)
1107 cp_error ("`%E' cannot be used as a member pointer, since it is of type `%T'", component, type);
1108 return error_mark_node;
1111 if (! IS_AGGR_TYPE (objtype))
1113 cp_error ("cannot apply member pointer `%E' to `%E'", component, datum);
1114 cp_error ("which is of non-aggregate type `%T'", objtype);
1115 return error_mark_node;
1118 binfo = get_binfo (TYPE_METHOD_BASETYPE (type), objtype, 1);
1119 if (binfo == NULL_TREE)
1121 cp_error ("member type `%T::' incompatible with object type `%T'",
1122 TYPE_METHOD_BASETYPE (type), objtype);
1123 return error_mark_node;
1125 else if (binfo == error_mark_node)
1126 return error_mark_node;
1128 /* Compute the type of the field, as described in [expr.ref]. */
1129 type_quals = TYPE_UNQUALIFIED;
1130 if (TREE_CODE (field_type) == REFERENCE_TYPE)
1131 /* The standard says that the type of the result should be the
1132 type referred to by the reference. But for now, at least, we
1133 do the conversion from reference type later. */
1137 type_quals = (CP_TYPE_QUALS (field_type)
1138 | CP_TYPE_QUALS (TREE_TYPE (datum)));
1140 /* There's no such thing as a mutable pointer-to-member, so we don't
1141 need to deal with that here like we do in build_component_ref. */
1142 field_type = cp_build_qualified_type (field_type, type_quals);
1145 component = build (OFFSET_REF, field_type, datum, component);
1146 if (TREE_CODE (type) == OFFSET_TYPE)
1147 component = resolve_offset_ref (component);
1151 /* Return a tree node for the expression TYPENAME '(' PARMS ')'. */
1154 build_functional_cast (exp, parms)
1158 /* This is either a call to a constructor,
1159 or a C cast in C++'s `functional' notation. */
1162 if (exp == error_mark_node || parms == error_mark_node)
1163 return error_mark_node;
1165 if (TREE_CODE (exp) == IDENTIFIER_NODE)
1167 if (IDENTIFIER_HAS_TYPE_VALUE (exp))
1168 /* Either an enum or an aggregate type. */
1169 type = IDENTIFIER_TYPE_VALUE (exp);
1172 type = lookup_name (exp, 1);
1173 if (!type || TREE_CODE (type) != TYPE_DECL)
1175 cp_error ("`%T' fails to be a typedef or built-in type", exp);
1176 return error_mark_node;
1178 type = TREE_TYPE (type);
1181 else if (TREE_CODE (exp) == TYPE_DECL)
1182 type = TREE_TYPE (exp);
1186 if (processing_template_decl)
1187 return build_min (CAST_EXPR, type, parms);
1189 if (! IS_AGGR_TYPE (type))
1191 /* this must build a C cast */
1192 if (parms == NULL_TREE)
1193 parms = integer_zero_node;
1196 if (TREE_CHAIN (parms) != NULL_TREE)
1197 pedwarn ("initializer list being treated as compound expression");
1198 parms = build_compound_expr (parms);
1201 return build_c_cast (type, parms);
1204 /* Prepare to evaluate as a call to a constructor. If this expression
1205 is actually used, for example,
1207 return X (arg1, arg2, ...);
1209 then the slot being initialized will be filled in. */
1211 if (!complete_type_or_else (type, NULL_TREE))
1212 return error_mark_node;
1213 if (abstract_virtuals_error (NULL_TREE, type))
1214 return error_mark_node;
1216 if (parms && TREE_CHAIN (parms) == NULL_TREE)
1217 return build_c_cast (type, TREE_VALUE (parms));
1219 /* We need to zero-initialize POD types. Let's do that for everything
1220 that doesn't need a constructor. */
1221 if (parms == NULL_TREE && !TYPE_NEEDS_CONSTRUCTING (type)
1222 && TYPE_HAS_DEFAULT_CONSTRUCTOR (type))
1224 exp = build (CONSTRUCTOR, type, NULL_TREE, NULL_TREE);
1225 return get_target_expr (exp);
1228 exp = build_method_call (NULL_TREE, complete_ctor_identifier, parms,
1229 TYPE_BINFO (type), LOOKUP_NORMAL);
1231 if (exp == error_mark_node)
1232 return error_mark_node;
1234 return build_cplus_new (type, exp);
1238 /* Complain about defining new types in inappropriate places. We give an
1239 exception for C-style casts, to accommodate GNU C stylings. */
1242 check_for_new_type (string, inptree)
1244 flagged_type_tree inptree;
1246 if (inptree.new_type_flag
1247 && (pedantic || strcmp (string, "cast") != 0))
1248 pedwarn ("ISO C++ forbids defining types within %s", string);
1251 /* Add new exception specifier SPEC, to the LIST we currently have.
1252 If it's already in LIST then do nothing.
1253 Moan if it's bad and we're allowed to. COMPLAIN < 0 means we
1254 know what we're doing. */
1257 add_exception_specifier (list, spec, complain)
1265 if (spec == error_mark_node)
1268 my_friendly_assert (spec && (!list || TREE_VALUE (list)), 19990317);
1270 /* [except.spec] 1, type in an exception specifier shall not be
1271 incomplete, or pointer or ref to incomplete other than pointer
1273 is_ptr = TREE_CODE (core) == POINTER_TYPE;
1274 if (is_ptr || TREE_CODE (core) == REFERENCE_TYPE)
1275 core = TREE_TYPE (core);
1278 else if (VOID_TYPE_P (core))
1280 else if (TREE_CODE (core) == TEMPLATE_TYPE_PARM)
1283 ok = COMPLETE_TYPE_P (complete_type (core));
1289 for (probe = list; probe; probe = TREE_CHAIN (probe))
1290 if (same_type_p (TREE_VALUE (probe), spec))
1294 spec = build_tree_list (NULL_TREE, spec);
1295 TREE_CHAIN (spec) = list;
1300 incomplete_type_error (NULL_TREE, core);