* MAINTAINERS: Add self as a profile feedback maintainer.
[official-gcc.git] / gcc / cp / typeck2.c
blob5ddfdd5bcee764c1b84d3f4f15f65b00df090189
1 /* Report error messages, build initializers, and perform
2 some front-end optimizations for C++ compiler.
3 Copyright (C) 1987, 1988, 1989, 1992, 1993, 1994, 1995, 1996, 1997, 1998,
4 1999, 2000, 2001, 2002, 2004
5 Free Software Foundation, Inc.
6 Hacked by Michael Tiemann (tiemann@cygnus.com)
8 This file is part of GCC.
10 GCC is free software; you can redistribute it and/or modify
11 it under the terms of the GNU General Public License as published by
12 the Free Software Foundation; either version 2, or (at your option)
13 any later version.
15 GCC is distributed in the hope that it will be useful,
16 but WITHOUT ANY WARRANTY; without even the implied warranty of
17 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 GNU General Public License for more details.
20 You should have received a copy of the GNU General Public License
21 along with GCC; see the file COPYING. If not, write to
22 the Free Software Foundation, 59 Temple Place - Suite 330,
23 Boston, MA 02111-1307, USA. */
26 /* This file is part of the C++ front end.
27 It contains routines to build C++ expressions given their operands,
28 including computing the types of the result, C and C++ specific error
29 checks, and some optimization. */
31 #include "config.h"
32 #include "system.h"
33 #include "coretypes.h"
34 #include "tm.h"
35 #include "tree.h"
36 #include "cp-tree.h"
37 #include "flags.h"
38 #include "toplev.h"
39 #include "output.h"
40 #include "diagnostic.h"
42 static tree process_init_constructor (tree, tree, tree *);
44 /* Print an error message stemming from an attempt to use
45 BASETYPE as a base class for TYPE. */
47 tree
48 error_not_base_type (tree basetype, tree type)
50 if (TREE_CODE (basetype) == FUNCTION_DECL)
51 basetype = DECL_CONTEXT (basetype);
52 error ("type `%T' is not a base type for type `%T'", basetype, type);
53 return error_mark_node;
56 tree
57 binfo_or_else (tree base, tree type)
59 tree binfo = lookup_base (type, base, ba_ignore, NULL);
61 if (binfo == error_mark_node)
62 return NULL_TREE;
63 else if (!binfo)
64 error_not_base_type (base, type);
65 return binfo;
68 /* According to ARM $7.1.6, "A `const' object may be initialized, but its
69 value may not be changed thereafter. Thus, we emit hard errors for these,
70 rather than just pedwarns. If `SOFT' is 1, then we just pedwarn. (For
71 example, conversions to references.) */
73 void
74 readonly_error (tree arg, const char* string, int soft)
76 const char *fmt;
77 void (*fn) (const char *, ...);
79 if (soft)
80 fn = pedwarn;
81 else
82 fn = error;
84 if (TREE_CODE (arg) == COMPONENT_REF)
86 if (TYPE_READONLY (TREE_TYPE (TREE_OPERAND (arg, 0))))
87 fmt = "%s of data-member `%D' in read-only structure";
88 else
89 fmt = "%s of read-only data-member `%D'";
90 (*fn) (fmt, string, TREE_OPERAND (arg, 1));
92 else if (TREE_CODE (arg) == VAR_DECL)
94 if (DECL_LANG_SPECIFIC (arg)
95 && DECL_IN_AGGR_P (arg)
96 && !TREE_STATIC (arg))
97 fmt = "%s of constant field `%D'";
98 else
99 fmt = "%s of read-only variable `%D'";
100 (*fn) (fmt, string, arg);
102 else if (TREE_CODE (arg) == PARM_DECL)
103 (*fn) ("%s of read-only parameter `%D'", string, arg);
104 else if (TREE_CODE (arg) == INDIRECT_REF
105 && TREE_CODE (TREE_TYPE (TREE_OPERAND (arg, 0))) == REFERENCE_TYPE
106 && (TREE_CODE (TREE_OPERAND (arg, 0)) == VAR_DECL
107 || TREE_CODE (TREE_OPERAND (arg, 0)) == PARM_DECL))
108 (*fn) ("%s of read-only reference `%D'", string, TREE_OPERAND (arg, 0));
109 else if (TREE_CODE (arg) == RESULT_DECL)
110 (*fn) ("%s of read-only named return value `%D'", string, arg);
111 else if (TREE_CODE (arg) == FUNCTION_DECL)
112 (*fn) ("%s of function `%D'", string, arg);
113 else
114 (*fn) ("%s of read-only location", string);
117 /* If TYPE has abstract virtual functions, issue an error about trying
118 to create an object of that type. DECL is the object declared, or
119 NULL_TREE if the declaration is unavailable. Returns 1 if an error
120 occurred; zero if all was well. */
123 abstract_virtuals_error (tree decl, tree type)
125 tree u;
126 tree tu;
128 if (!CLASS_TYPE_P (type) || !CLASSTYPE_PURE_VIRTUALS (type))
129 return 0;
131 if (!TYPE_SIZE (type))
132 /* TYPE is being defined, and during that time
133 CLASSTYPE_PURE_VIRTUALS holds the inline friends. */
134 return 0;
136 if (dependent_type_p (type))
137 /* For a dependent type, we do not yet know which functions are pure
138 virtuals. */
139 return 0;
141 u = CLASSTYPE_PURE_VIRTUALS (type);
142 if (decl)
144 if (TREE_CODE (decl) == RESULT_DECL)
145 return 0;
147 if (TREE_CODE (decl) == VAR_DECL)
148 cp_error_at ("cannot declare variable `%+D' to be of abstract "
149 "type `%T'", decl, type);
150 else if (TREE_CODE (decl) == PARM_DECL)
151 cp_error_at ("cannot declare parameter `%+D' to be of abstract "
152 "type `%T'", decl, type);
153 else if (TREE_CODE (decl) == FIELD_DECL)
154 cp_error_at ("cannot declare field `%+D' to be of abstract "
155 "type `%T'", decl, type);
156 else if (TREE_CODE (decl) == FUNCTION_DECL
157 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
158 cp_error_at ("invalid abstract return type for member function `%+#D'",
159 decl);
160 else if (TREE_CODE (decl) == FUNCTION_DECL)
161 cp_error_at ("invalid abstract return type for function `%+#D'",
162 decl);
163 else
164 cp_error_at ("invalid abstract type for `%+D'", decl);
166 else
167 error ("cannot allocate an object of abstract type `%T'", type);
169 /* Only go through this once. */
170 if (TREE_PURPOSE (u) == NULL_TREE)
172 TREE_PURPOSE (u) = error_mark_node;
174 inform ("%J because the following virtual functions are pure "
175 "within `%T':", TYPE_MAIN_DECL (type), type);
177 for (tu = u; tu; tu = TREE_CHAIN (tu))
178 inform ("%J\t%#D", TREE_VALUE (tu), TREE_VALUE (tu));
180 else
181 inform ("%J since type `%T' has pure virtual functions",
182 TYPE_MAIN_DECL (type), type);
184 return 1;
187 /* Print an error message for invalid use of an incomplete type.
188 VALUE is the expression that was used (or 0 if that isn't known)
189 and TYPE is the type that was invalid. DIAG_TYPE indicates the
190 type of diagnostic: 0 for an error, 1 for a warning, 2 for a
191 pedwarn. */
193 void
194 cxx_incomplete_type_diagnostic (tree value, tree type, int diag_type)
196 int decl = 0;
197 void (*p_msg) (const char *, ...);
198 void (*p_msg_at) (const char *, ...);
200 if (diag_type == 1)
202 p_msg = warning;
203 p_msg_at = cp_warning_at;
205 else if (diag_type == 2)
207 p_msg = pedwarn;
208 p_msg_at = cp_pedwarn_at;
210 else
212 p_msg = error;
213 p_msg_at = cp_error_at;
216 /* Avoid duplicate error message. */
217 if (TREE_CODE (type) == ERROR_MARK)
218 return;
220 if (value != 0 && (TREE_CODE (value) == VAR_DECL
221 || TREE_CODE (value) == PARM_DECL
222 || TREE_CODE (value) == FIELD_DECL))
224 (*p_msg_at) ("`%D' has incomplete type", value);
225 decl = 1;
227 retry:
228 /* We must print an error message. Be clever about what it says. */
230 switch (TREE_CODE (type))
232 case RECORD_TYPE:
233 case UNION_TYPE:
234 case ENUMERAL_TYPE:
235 if (!decl)
236 (*p_msg) ("invalid use of undefined type `%#T'", type);
237 if (!TYPE_TEMPLATE_INFO (type))
238 (*p_msg_at) ("forward declaration of `%#T'", type);
239 else
240 (*p_msg_at) ("declaration of `%#T'", type);
241 break;
243 case VOID_TYPE:
244 (*p_msg) ("invalid use of `%T'", type);
245 break;
247 case ARRAY_TYPE:
248 if (TYPE_DOMAIN (type))
250 type = TREE_TYPE (type);
251 goto retry;
253 (*p_msg) ("invalid use of array with unspecified bounds");
254 break;
256 case OFFSET_TYPE:
257 bad_member:
258 (*p_msg) ("invalid use of member (did you forget the `&' ?)");
259 break;
261 case TEMPLATE_TYPE_PARM:
262 (*p_msg) ("invalid use of template type parameter");
263 break;
265 case UNKNOWN_TYPE:
266 if (value && TREE_CODE (value) == COMPONENT_REF)
267 goto bad_member;
268 else if (value && TREE_CODE (value) == ADDR_EXPR)
269 (*p_msg) ("address of overloaded function with no contextual type information");
270 else if (value && TREE_CODE (value) == OVERLOAD)
271 (*p_msg) ("overloaded function with no contextual type information");
272 else
273 (*p_msg) ("insufficient contextual information to determine type");
274 break;
276 default:
277 abort ();
281 /* Backward-compatibility interface to incomplete_type_diagnostic;
282 required by ../tree.c. */
283 #undef cxx_incomplete_type_error
284 void
285 cxx_incomplete_type_error (tree value, tree type)
287 cxx_incomplete_type_diagnostic (value, type, 0);
291 /* The recursive part of split_nonconstant_init. DEST is an lvalue
292 expression to which INIT should be assigned. INIT is a CONSTRUCTOR. */
294 static void
295 split_nonconstant_init_1 (tree dest, tree init)
297 tree *pelt, elt, type = TREE_TYPE (dest);
298 tree sub, code, inner_type = NULL;
299 bool array_type_p = false;
301 pelt = &CONSTRUCTOR_ELTS (init);
302 switch (TREE_CODE (type))
304 case ARRAY_TYPE:
305 inner_type = TREE_TYPE (type);
306 array_type_p = true;
307 /* FALLTHRU */
309 case RECORD_TYPE:
310 case UNION_TYPE:
311 case QUAL_UNION_TYPE:
312 while ((elt = *pelt))
314 tree field_index = TREE_PURPOSE (elt);
315 tree value = TREE_VALUE (elt);
317 if (!array_type_p)
318 inner_type = TREE_TYPE (field_index);
320 if (TREE_CODE (value) == CONSTRUCTOR)
322 if (array_type_p)
323 sub = build (ARRAY_REF, inner_type, dest, field_index,
324 NULL_TREE, NULL_TREE);
325 else
326 sub = build (COMPONENT_REF, inner_type, dest, field_index,
327 NULL_TREE);
329 split_nonconstant_init_1 (sub, value);
331 else if (!initializer_constant_valid_p (value, inner_type))
333 *pelt = TREE_CHAIN (elt);
335 if (array_type_p)
336 sub = build (ARRAY_REF, inner_type, dest, field_index,
337 NULL_TREE, NULL_TREE);
338 else
339 sub = build (COMPONENT_REF, inner_type, dest, field_index,
340 NULL_TREE);
342 code = build (MODIFY_EXPR, inner_type, sub, value);
343 code = build_stmt (EXPR_STMT, code);
344 add_stmt (code);
345 continue;
348 pelt = &TREE_CHAIN (elt);
350 break;
352 case VECTOR_TYPE:
353 if (!initializer_constant_valid_p (init, type))
355 CONSTRUCTOR_ELTS (init) = NULL;
356 code = build (MODIFY_EXPR, type, dest, init);
357 code = build_stmt (EXPR_STMT, code);
358 add_stmt (code);
360 break;
362 default:
363 abort ();
367 /* A subroutine of store_init_value. Splits non-constant static
368 initializer INIT into a constant part and generates code to
369 perform the non-constant part of the initialization to DEST.
370 Returns the code for the runtime init. */
372 static tree
373 split_nonconstant_init (tree dest, tree init)
375 tree code;
377 if (TREE_CODE (init) == CONSTRUCTOR)
379 code = push_stmt_list ();
380 split_nonconstant_init_1 (dest, init);
381 code = pop_stmt_list (code);
382 DECL_INITIAL (dest) = init;
383 TREE_READONLY (dest) = 0;
385 else
386 code = build (INIT_EXPR, TREE_TYPE (dest), dest, init);
388 return code;
391 /* Perform appropriate conversions on the initial value of a variable,
392 store it in the declaration DECL,
393 and print any error messages that are appropriate.
394 If the init is invalid, store an ERROR_MARK.
396 C++: Note that INIT might be a TREE_LIST, which would mean that it is
397 a base class initializer for some aggregate type, hopefully compatible
398 with DECL. If INIT is a single element, and DECL is an aggregate
399 type, we silently convert INIT into a TREE_LIST, allowing a constructor
400 to be called.
402 If INIT is a TREE_LIST and there is no constructor, turn INIT
403 into a CONSTRUCTOR and use standard initialization techniques.
404 Perhaps a warning should be generated?
406 Returns code to be executed if initialization could not be performed
407 for static variable. In that case, caller must emit the code. */
409 tree
410 store_init_value (tree decl, tree init)
412 tree value, type;
414 /* If variable's type was invalidly declared, just ignore it. */
416 type = TREE_TYPE (decl);
417 if (TREE_CODE (type) == ERROR_MARK)
418 return NULL_TREE;
420 if (IS_AGGR_TYPE (type))
422 if (! TYPE_HAS_TRIVIAL_INIT_REF (type)
423 && TREE_CODE (init) != CONSTRUCTOR)
424 abort ();
426 if (TREE_CODE (init) == TREE_LIST)
428 error ("constructor syntax used, but no constructor declared for type `%T'", type);
429 init = build_constructor (NULL_TREE, nreverse (init));
432 else if (TREE_CODE (init) == TREE_LIST
433 && TREE_TYPE (init) != unknown_type_node)
435 if (TREE_CODE (decl) == RESULT_DECL)
436 init = build_x_compound_expr_from_list (init,
437 "return value initializer");
438 else if (TREE_CODE (init) == TREE_LIST
439 && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
441 error ("cannot initialize arrays using this syntax");
442 return NULL_TREE;
444 else
445 /* We get here with code like `int a (2);' */
446 init = build_x_compound_expr_from_list (init, "initializer");
449 /* End of special C++ code. */
451 /* Digest the specified initializer into an expression. */
452 value = digest_init (type, init, (tree *) 0);
454 /* Store the expression if valid; else report error. */
456 if (TREE_CODE (value) == ERROR_MARK)
458 /* Other code expects that initializers for objects of types that need
459 constructing never make it into DECL_INITIAL, and passes 'init' to
460 build_aggr_init without checking DECL_INITIAL. So just return. */
461 else if (TYPE_NEEDS_CONSTRUCTING (type))
462 return build (INIT_EXPR, type, decl, value);
463 else if (TREE_STATIC (decl)
464 && (! TREE_CONSTANT (value)
465 || ! initializer_constant_valid_p (value, TREE_TYPE (value))))
466 return split_nonconstant_init (decl, value);
468 /* Store the VALUE in DECL_INITIAL. If we're building a
469 statement-tree we will actually expand the initialization later
470 when we output this function. */
471 DECL_INITIAL (decl) = value;
472 return NULL_TREE;
476 /* Digest the parser output INIT as an initializer for type TYPE.
477 Return a C expression of type TYPE to represent the initial value.
479 If TAIL is nonzero, it points to a variable holding a list of elements
480 of which INIT is the first. We update the list stored there by
481 removing from the head all the elements that we use.
482 Normally this is only one; we use more than one element only if
483 TYPE is an aggregate and INIT is not a constructor. */
485 tree
486 digest_init (tree type, tree init, tree* tail)
488 enum tree_code code = TREE_CODE (type);
489 tree element = NULL_TREE;
490 tree old_tail_contents = NULL_TREE;
492 /* By default, assume we use one element from a list.
493 We correct this later in the sole case where it is not true. */
495 if (tail)
497 old_tail_contents = *tail;
498 *tail = TREE_CHAIN (*tail);
501 if (init == error_mark_node || (TREE_CODE (init) == TREE_LIST
502 && TREE_VALUE (init) == error_mark_node))
503 return error_mark_node;
505 if (TREE_CODE (init) == ERROR_MARK)
506 /* __PRETTY_FUNCTION__'s initializer is a bogus expression inside
507 a template function. This gets substituted during instantiation. */
508 return init;
510 /* We must strip the outermost array type when completing the type,
511 because the its bounds might be incomplete at the moment. */
512 if (!complete_type_or_else (TREE_CODE (type) == ARRAY_TYPE
513 ? TREE_TYPE (type) : type, NULL_TREE))
514 return error_mark_node;
516 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
517 if (TREE_CODE (init) == NON_LVALUE_EXPR)
518 init = TREE_OPERAND (init, 0);
520 if (BRACE_ENCLOSED_INITIALIZER_P (init)
521 && CONSTRUCTOR_ELTS (init) != 0
522 && TREE_CHAIN (CONSTRUCTOR_ELTS (init)) == 0)
524 element = TREE_VALUE (CONSTRUCTOR_ELTS (init));
525 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
526 if (element && TREE_CODE (element) == NON_LVALUE_EXPR)
527 element = TREE_OPERAND (element, 0);
528 if (element == error_mark_node)
529 return element;
532 /* Initialization of an array of chars from a string constant
533 optionally enclosed in braces. */
535 if (code == ARRAY_TYPE)
537 tree typ1;
539 if (TREE_CODE (init) == TREE_LIST)
541 error ("initializing array with parameter list");
542 return error_mark_node;
545 typ1 = TYPE_MAIN_VARIANT (TREE_TYPE (type));
546 if (char_type_p (typ1)
547 && ((init && TREE_CODE (init) == STRING_CST)
548 || (element && TREE_CODE (element) == STRING_CST)))
550 tree string = element ? element : init;
552 if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (string)))
553 != char_type_node)
554 && TYPE_PRECISION (typ1) == BITS_PER_UNIT)
556 error ("char-array initialized from wide string");
557 return error_mark_node;
559 if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (string)))
560 == char_type_node)
561 && TYPE_PRECISION (typ1) != BITS_PER_UNIT)
563 error ("int-array initialized from non-wide string");
564 return error_mark_node;
567 TREE_TYPE (string) = type;
568 if (TYPE_DOMAIN (type) != 0
569 && TREE_CONSTANT (TYPE_SIZE (type)))
571 int size = TREE_INT_CST_LOW (TYPE_SIZE (type));
572 size = (size + BITS_PER_UNIT - 1) / BITS_PER_UNIT;
573 /* In C it is ok to subtract 1 from the length of the string
574 because it's ok to ignore the terminating null char that is
575 counted in the length of the constant, but in C++ this would
576 be invalid. */
577 if (size < TREE_STRING_LENGTH (string))
578 pedwarn ("initializer-string for array of chars is too long");
580 return string;
584 /* Handle scalar types, including conversions,
585 and signature pointers and references. */
587 if (code == INTEGER_TYPE || code == REAL_TYPE || code == POINTER_TYPE
588 || code == ENUMERAL_TYPE || code == REFERENCE_TYPE
589 || code == BOOLEAN_TYPE || code == COMPLEX_TYPE
590 || TYPE_PTR_TO_MEMBER_P (type))
592 if (BRACE_ENCLOSED_INITIALIZER_P (init))
594 if (element == 0)
596 error ("initializer for scalar variable requires one element");
597 return error_mark_node;
599 init = element;
601 while (BRACE_ENCLOSED_INITIALIZER_P (init))
603 pedwarn ("braces around scalar initializer for `%T'", type);
604 init = CONSTRUCTOR_ELTS (init);
605 if (TREE_CHAIN (init))
606 pedwarn ("ignoring extra initializers for `%T'", type);
607 init = TREE_VALUE (init);
610 return convert_for_initialization (0, type, init, LOOKUP_NORMAL,
611 "initialization", NULL_TREE, 0);
614 /* Come here only for records and arrays (and unions with constructors). */
616 if (COMPLETE_TYPE_P (type) && ! TREE_CONSTANT (TYPE_SIZE (type)))
618 error ("variable-sized object of type `%T' may not be initialized",
619 type);
620 return error_mark_node;
623 if (code == ARRAY_TYPE || code == VECTOR_TYPE || IS_AGGR_TYPE_CODE (code))
625 if (BRACE_ENCLOSED_INITIALIZER_P (init))
627 if (TYPE_NON_AGGREGATE_CLASS (type))
629 error ("subobject of type `%T' must be initialized by constructor, not by `%E'",
630 type, init);
631 return error_mark_node;
633 return process_init_constructor (type, init, (tree *)0);
635 else if (can_convert_arg (type, TREE_TYPE (init), init)
636 || TYPE_NON_AGGREGATE_CLASS (type))
637 /* These are never initialized from multiple constructor elements. */;
638 else if (tail != 0)
640 *tail = old_tail_contents;
641 return process_init_constructor (type, 0, tail);
644 if (code != ARRAY_TYPE)
646 int flags = LOOKUP_NORMAL;
647 /* Initialization from { } is copy-initialization. */
648 if (tail)
649 flags |= LOOKUP_ONLYCONVERTING;
651 return convert_for_initialization (NULL_TREE, type, init, flags,
652 "initialization", NULL_TREE, 0);
656 error ("invalid initializer");
657 return error_mark_node;
660 /* Process a constructor for a variable of type TYPE.
661 The constructor elements may be specified either with INIT or with ELTS,
662 only one of which should be non-null.
664 If INIT is specified, it is a CONSTRUCTOR node which is specifically
665 and solely for initializing this datum.
667 If ELTS is specified, it is the address of a variable containing
668 a list of expressions. We take as many elements as we need
669 from the head of the list and update the list.
671 In the resulting constructor, TREE_CONSTANT is set if all elts are
672 constant, and TREE_STATIC is set if, in addition, all elts are simple enough
673 constants that the assembler and linker can compute them. */
675 static tree
676 process_init_constructor (tree type, tree init, tree* elts)
678 tree tail;
679 /* List of the elements of the result constructor,
680 in reverse order. */
681 tree members = NULL;
682 tree next1;
683 tree result;
684 int allconstant = 1;
685 int allsimple = 1;
686 int erroneous = 0;
688 /* Make TAIL be the list of elements to use for the initialization,
689 no matter how the data was given to us. */
691 if (elts)
693 if (warn_missing_braces)
694 warning ("aggregate has a partly bracketed initializer");
695 tail = *elts;
697 else
698 tail = CONSTRUCTOR_ELTS (init);
700 /* Gobble as many elements as needed, and make a constructor or initial value
701 for each element of this aggregate. Chain them together in result.
702 If there are too few, use 0 for each scalar ultimate component. */
704 if (TREE_CODE (type) == ARRAY_TYPE || TREE_CODE (type) == VECTOR_TYPE)
706 long len;
707 int i;
709 if (TREE_CODE (type) == ARRAY_TYPE)
711 tree domain = TYPE_DOMAIN (type);
712 if (domain)
713 len = (TREE_INT_CST_LOW (TYPE_MAX_VALUE (domain))
714 - TREE_INT_CST_LOW (TYPE_MIN_VALUE (domain))
715 + 1);
716 else
717 len = -1; /* Take as many as there are. */
719 else
721 /* Vectors are like simple fixed-size arrays. */
722 len = TYPE_VECTOR_SUBPARTS (type);
725 for (i = 0; len < 0 || i < len; i++)
727 if (tail)
729 if (TREE_PURPOSE (tail)
730 && (TREE_CODE (TREE_PURPOSE (tail)) != INTEGER_CST
731 || compare_tree_int (TREE_PURPOSE (tail), i) != 0))
732 sorry ("non-trivial labeled initializers");
734 if (TREE_VALUE (tail) != 0)
736 tree tail1 = tail;
737 next1 = digest_init (TREE_TYPE (type),
738 TREE_VALUE (tail), &tail1);
739 if (next1 == error_mark_node)
740 return next1;
741 my_friendly_assert
742 (same_type_ignoring_top_level_qualifiers_p
743 (TREE_TYPE (type), TREE_TYPE (next1)),
744 981123);
745 my_friendly_assert (tail1 == 0
746 || TREE_CODE (tail1) == TREE_LIST, 319);
747 if (tail == tail1 && len < 0)
749 error ("non-empty initializer for array of empty elements");
750 /* Just ignore what we were supposed to use. */
751 tail1 = NULL_TREE;
753 tail = tail1;
755 else
757 next1 = error_mark_node;
758 tail = TREE_CHAIN (tail);
761 else if (len < 0)
762 /* We're done. */
763 break;
764 else if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (type)))
766 /* If this type needs constructors run for
767 default-initialization, we can't rely on the backend to do it
768 for us, so build up TARGET_EXPRs. If the type in question is
769 a class, just build one up; if it's an array, recurse. */
771 if (IS_AGGR_TYPE (TREE_TYPE (type)))
772 next1 = build_functional_cast (TREE_TYPE (type), NULL_TREE);
773 else
774 next1 = build_constructor (NULL_TREE, NULL_TREE);
775 next1 = digest_init (TREE_TYPE (type), next1, 0);
777 else if (! zero_init_p (TREE_TYPE (type)))
778 next1 = build_zero_init (TREE_TYPE (type),
779 /*nelts=*/NULL_TREE,
780 /*static_storage_p=*/false);
781 else
782 /* The default zero-initialization is fine for us; don't
783 add anything to the CONSTRUCTOR. */
784 break;
786 if (next1 == error_mark_node)
787 erroneous = 1;
788 else if (!TREE_CONSTANT (next1))
789 allconstant = 0;
790 else if (! initializer_constant_valid_p (next1, TREE_TYPE (next1)))
791 allsimple = 0;
792 members = tree_cons (size_int (i), next1, members);
795 else if (TREE_CODE (type) == RECORD_TYPE)
797 tree field;
799 if (tail)
801 if (TYPE_USES_VIRTUAL_BASECLASSES (type))
803 sorry ("initializer list for object of class with virtual base classes");
804 return error_mark_node;
807 if (BINFO_BASE_BINFOS (TYPE_BINFO (type)))
809 sorry ("initializer list for object of class with base classes");
810 return error_mark_node;
813 if (TYPE_POLYMORPHIC_P (type))
815 sorry ("initializer list for object using virtual functions");
816 return error_mark_node;
820 for (field = TYPE_FIELDS (type); field;
821 field = TREE_CHAIN (field))
823 if (! DECL_NAME (field) && DECL_C_BIT_FIELD (field))
825 members = tree_cons (field, integer_zero_node, members);
826 continue;
829 if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field))
830 continue;
832 if (tail)
834 if (TREE_PURPOSE (tail)
835 && TREE_PURPOSE (tail) != field
836 && TREE_PURPOSE (tail) != DECL_NAME (field))
837 sorry ("non-trivial labeled initializers");
839 if (TREE_VALUE (tail) != 0)
841 tree tail1 = tail;
843 next1 = digest_init (TREE_TYPE (field),
844 TREE_VALUE (tail), &tail1);
845 my_friendly_assert (tail1 == 0
846 || TREE_CODE (tail1) == TREE_LIST, 320);
847 tail = tail1;
849 else
851 next1 = error_mark_node;
852 tail = TREE_CHAIN (tail);
855 else if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (field)))
857 /* If this type needs constructors run for
858 default-initialization, we can't rely on the backend to do it
859 for us, so build up TARGET_EXPRs. If the type in question is
860 a class, just build one up; if it's an array, recurse. */
862 if (IS_AGGR_TYPE (TREE_TYPE (field)))
863 next1 = build_functional_cast (TREE_TYPE (field),
864 NULL_TREE);
865 else
867 next1 = build_constructor (NULL_TREE, NULL_TREE);
868 if (init)
869 TREE_HAS_CONSTRUCTOR (next1)
870 = TREE_HAS_CONSTRUCTOR (init);
872 next1 = digest_init (TREE_TYPE (field), next1, 0);
874 /* Warn when some struct elements are implicitly initialized. */
875 if (extra_warnings
876 && (!init || BRACE_ENCLOSED_INITIALIZER_P (init)))
877 warning ("missing initializer for member `%D'", field);
879 else
881 if (TREE_READONLY (field))
882 error ("uninitialized const member `%D'", field);
883 else if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (TREE_TYPE (field)))
884 error ("member `%D' with uninitialized const fields",
885 field);
886 else if (TREE_CODE (TREE_TYPE (field)) == REFERENCE_TYPE)
887 error ("member `%D' is uninitialized reference", field);
889 /* Warn when some struct elements are implicitly initialized
890 to zero. */
891 if (extra_warnings
892 && (!init || BRACE_ENCLOSED_INITIALIZER_P (init)))
893 warning ("missing initializer for member `%D'", field);
895 if (! zero_init_p (TREE_TYPE (field)))
896 next1 = build_zero_init (TREE_TYPE (field),
897 /*nelts=*/NULL_TREE,
898 /*static_storage_p=*/false);
899 else
900 /* The default zero-initialization is fine for us; don't
901 add anything to the CONSTRUCTOR. */
902 continue;
905 if (next1 == error_mark_node)
906 erroneous = 1;
907 else if (!TREE_CONSTANT (next1))
908 allconstant = 0;
909 else if (! initializer_constant_valid_p (next1, TREE_TYPE (next1)))
910 allsimple = 0;
911 members = tree_cons (field, next1, members);
914 else if (TREE_CODE (type) == UNION_TYPE
915 /* If the initializer was empty, use default zero initialization. */
916 && tail)
918 tree field = TYPE_FIELDS (type);
920 /* Find the first named field. ANSI decided in September 1990
921 that only named fields count here. */
922 while (field && (!DECL_NAME (field) || TREE_CODE (field) != FIELD_DECL))
923 field = TREE_CHAIN (field);
925 /* If this element specifies a field, initialize via that field. */
926 if (TREE_PURPOSE (tail) != NULL_TREE)
928 int win = 0;
930 if (TREE_CODE (TREE_PURPOSE (tail)) == FIELD_DECL)
931 /* Handle the case of a call by build_c_cast. */
932 field = TREE_PURPOSE (tail), win = 1;
933 else if (TREE_CODE (TREE_PURPOSE (tail)) != IDENTIFIER_NODE)
934 error ("index value instead of field name in union initializer");
935 else
937 tree temp;
938 for (temp = TYPE_FIELDS (type);
939 temp;
940 temp = TREE_CHAIN (temp))
941 if (DECL_NAME (temp) == TREE_PURPOSE (tail))
942 break;
943 if (temp)
944 field = temp, win = 1;
945 else
946 error ("no field `%D' in union being initialized",
947 TREE_PURPOSE (tail));
949 if (!win)
950 TREE_VALUE (tail) = error_mark_node;
952 else if (field == 0)
954 error ("union `%T' with no named members cannot be initialized",
955 type);
956 TREE_VALUE (tail) = error_mark_node;
959 if (TREE_VALUE (tail) != 0)
961 tree tail1 = tail;
963 next1 = digest_init (TREE_TYPE (field),
964 TREE_VALUE (tail), &tail1);
965 if (tail1 != 0 && TREE_CODE (tail1) != TREE_LIST)
966 abort ();
967 tail = tail1;
969 else
971 next1 = error_mark_node;
972 tail = TREE_CHAIN (tail);
975 if (next1 == error_mark_node)
976 erroneous = 1;
977 else if (!TREE_CONSTANT (next1))
978 allconstant = 0;
979 else if (initializer_constant_valid_p (next1, TREE_TYPE (next1)) == 0)
980 allsimple = 0;
981 members = tree_cons (field, next1, members);
984 /* If arguments were specified as a list, just remove the ones we used. */
985 if (elts)
986 *elts = tail;
987 /* If arguments were specified as a constructor,
988 complain unless we used all the elements of the constructor. */
989 else if (tail)
990 pedwarn ("excess elements in aggregate initializer");
992 if (erroneous)
993 return error_mark_node;
995 result = build_constructor (type, nreverse (members));
996 if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type) == NULL_TREE)
997 complete_array_type (type, result, /*do_default=*/0);
998 if (init)
999 TREE_HAS_CONSTRUCTOR (result) = TREE_HAS_CONSTRUCTOR (init);
1000 if (allconstant)
1002 TREE_CONSTANT (result) = 1;
1003 TREE_INVARIANT (result) = 1;
1004 if (allsimple)
1005 TREE_STATIC (result) = 1;
1007 return result;
1010 /* Given a structure or union value DATUM, construct and return
1011 the structure or union component which results from narrowing
1012 that value to the base specified in BASETYPE. For example, given the
1013 hierarchy
1015 class L { int ii; };
1016 class A : L { ... };
1017 class B : L { ... };
1018 class C : A, B { ... };
1020 and the declaration
1022 C x;
1024 then the expression
1026 x.A::ii refers to the ii member of the L part of
1027 the A part of the C object named by X. In this case,
1028 DATUM would be x, and BASETYPE would be A.
1030 I used to think that this was nonconformant, that the standard specified
1031 that first we look up ii in A, then convert x to an L& and pull out the
1032 ii part. But in fact, it does say that we convert x to an A&; A here
1033 is known as the "naming class". (jason 2000-12-19)
1035 BINFO_P points to a variable initialized either to NULL_TREE or to the
1036 binfo for the specific base subobject we want to convert to. */
1038 tree
1039 build_scoped_ref (tree datum, tree basetype, tree* binfo_p)
1041 tree binfo;
1043 if (datum == error_mark_node)
1044 return error_mark_node;
1045 if (*binfo_p)
1046 binfo = *binfo_p;
1047 else
1048 binfo = lookup_base (TREE_TYPE (datum), basetype, ba_check, NULL);
1050 if (!binfo || binfo == error_mark_node)
1052 *binfo_p = NULL_TREE;
1053 if (!binfo)
1054 error_not_base_type (basetype, TREE_TYPE (datum));
1055 return error_mark_node;
1058 *binfo_p = binfo;
1059 return build_base_path (PLUS_EXPR, datum, binfo, 1);
1062 /* Build a reference to an object specified by the C++ `->' operator.
1063 Usually this just involves dereferencing the object, but if the
1064 `->' operator is overloaded, then such overloads must be
1065 performed until an object which does not have the `->' operator
1066 overloaded is found. An error is reported when circular pointer
1067 delegation is detected. */
1069 tree
1070 build_x_arrow (tree expr)
1072 tree orig_expr = expr;
1073 tree types_memoized = NULL_TREE;
1074 tree type = TREE_TYPE (expr);
1075 tree last_rval = NULL_TREE;
1077 if (type == error_mark_node)
1078 return error_mark_node;
1080 if (processing_template_decl)
1082 if (type_dependent_expression_p (expr))
1083 return build_min_nt (ARROW_EXPR, expr);
1084 expr = build_non_dependent_expr (expr);
1087 if (TREE_CODE (type) == REFERENCE_TYPE)
1089 expr = convert_from_reference (expr);
1090 type = TREE_TYPE (expr);
1093 if (IS_AGGR_TYPE (type))
1095 while ((expr = build_new_op (COMPONENT_REF, LOOKUP_NORMAL, expr,
1096 NULL_TREE, NULL_TREE,
1097 /*overloaded_p=*/NULL)))
1099 if (expr == error_mark_node)
1100 return error_mark_node;
1102 if (value_member (TREE_TYPE (expr), types_memoized))
1104 error ("circular pointer delegation detected");
1105 return error_mark_node;
1107 else
1109 types_memoized = tree_cons (NULL_TREE, TREE_TYPE (expr),
1110 types_memoized);
1112 last_rval = expr;
1115 if (last_rval == NULL_TREE)
1117 error ("base operand of `->' has non-pointer type `%T'", type);
1118 return error_mark_node;
1121 if (TREE_CODE (TREE_TYPE (last_rval)) == REFERENCE_TYPE)
1122 last_rval = convert_from_reference (last_rval);
1124 else
1125 last_rval = decay_conversion (expr);
1127 if (TREE_CODE (TREE_TYPE (last_rval)) == POINTER_TYPE)
1129 if (processing_template_decl)
1131 expr = build_min_non_dep (ARROW_EXPR, last_rval, orig_expr);
1132 /* It will be dereferenced. */
1133 TREE_TYPE (expr) = TREE_TYPE (TREE_TYPE (last_rval));
1134 return expr;
1137 return build_indirect_ref (last_rval, NULL);
1140 if (types_memoized)
1141 error ("result of `operator->()' yields non-pointer result");
1142 else
1143 error ("base operand of `->' is not a pointer");
1144 return error_mark_node;
1147 /* Return an expression for "DATUM .* COMPONENT". DATUM has not
1148 already been checked out to be of aggregate type. */
1150 tree
1151 build_m_component_ref (tree datum, tree component)
1153 tree ptrmem_type;
1154 tree objtype;
1155 tree type;
1156 tree binfo;
1158 datum = decay_conversion (datum);
1160 if (datum == error_mark_node || component == error_mark_node)
1161 return error_mark_node;
1163 ptrmem_type = TREE_TYPE (component);
1164 if (!TYPE_PTR_TO_MEMBER_P (ptrmem_type))
1166 error ("`%E' cannot be used as a member pointer, since it is of type `%T'",
1167 component, ptrmem_type);
1168 return error_mark_node;
1171 objtype = TYPE_MAIN_VARIANT (TREE_TYPE (datum));
1172 if (! IS_AGGR_TYPE (objtype))
1174 error ("cannot apply member pointer `%E' to `%E', which is of non-aggregate type `%T'",
1175 component, datum, objtype);
1176 return error_mark_node;
1179 type = TYPE_PTRMEM_POINTED_TO_TYPE (ptrmem_type);
1180 binfo = lookup_base (objtype, TYPE_PTRMEM_CLASS_TYPE (ptrmem_type),
1181 ba_check, NULL);
1182 if (!binfo)
1184 error ("member type `%T::' incompatible with object type `%T'",
1185 type, objtype);
1186 return error_mark_node;
1188 else if (binfo == error_mark_node)
1189 return error_mark_node;
1191 if (TYPE_PTRMEM_P (ptrmem_type))
1193 /* Compute the type of the field, as described in [expr.ref].
1194 There's no such thing as a mutable pointer-to-member, so
1195 things are not as complex as they are for references to
1196 non-static data members. */
1197 type = cp_build_qualified_type (type,
1198 (cp_type_quals (type)
1199 | cp_type_quals (TREE_TYPE (datum))));
1200 /* Build an expression for "object + offset" where offset is the
1201 value stored in the pointer-to-data-member. */
1202 datum = build (PLUS_EXPR, build_pointer_type (type),
1203 build_base_path (PLUS_EXPR, build_address (datum),
1204 binfo, 1),
1205 build_nop (ptrdiff_type_node, component));
1206 return build_indirect_ref (datum, 0);
1208 else
1209 return build (OFFSET_REF, type, datum, component);
1212 /* Return a tree node for the expression TYPENAME '(' PARMS ')'. */
1214 tree
1215 build_functional_cast (tree exp, tree parms)
1217 /* This is either a call to a constructor,
1218 or a C cast in C++'s `functional' notation. */
1219 tree type;
1221 if (exp == error_mark_node || parms == error_mark_node)
1222 return error_mark_node;
1224 if (TREE_CODE (exp) == TYPE_DECL)
1225 type = TREE_TYPE (exp);
1226 else
1227 type = exp;
1229 if (processing_template_decl)
1231 tree t = build_min (CAST_EXPR, type, parms);
1232 /* We don't know if it will or will not have side effects. */
1233 TREE_SIDE_EFFECTS (t) = 1;
1234 return t;
1237 if (! IS_AGGR_TYPE (type))
1239 /* This must build a C cast. */
1240 if (parms == NULL_TREE)
1241 parms = integer_zero_node;
1242 else
1243 parms = build_x_compound_expr_from_list (parms, "functional cast");
1245 return build_c_cast (type, parms);
1248 /* Prepare to evaluate as a call to a constructor. If this expression
1249 is actually used, for example,
1251 return X (arg1, arg2, ...);
1253 then the slot being initialized will be filled in. */
1255 if (!complete_type_or_else (type, NULL_TREE))
1256 return error_mark_node;
1257 if (abstract_virtuals_error (NULL_TREE, type))
1258 return error_mark_node;
1260 if (parms && TREE_CHAIN (parms) == NULL_TREE)
1261 return build_c_cast (type, TREE_VALUE (parms));
1263 /* We need to zero-initialize POD types. Let's do that for everything
1264 that doesn't need a constructor. */
1265 if (parms == NULL_TREE && !TYPE_NEEDS_CONSTRUCTING (type)
1266 && TYPE_HAS_DEFAULT_CONSTRUCTOR (type))
1268 exp = build_constructor (type, NULL_TREE);
1269 return get_target_expr (exp);
1272 exp = build_special_member_call (NULL_TREE, complete_ctor_identifier, parms,
1273 TYPE_BINFO (type), LOOKUP_NORMAL);
1275 if (exp == error_mark_node)
1276 return error_mark_node;
1278 return build_cplus_new (type, exp);
1282 /* Add new exception specifier SPEC, to the LIST we currently have.
1283 If it's already in LIST then do nothing.
1284 Moan if it's bad and we're allowed to. COMPLAIN < 0 means we
1285 know what we're doing. */
1287 tree
1288 add_exception_specifier (tree list, tree spec, int complain)
1290 bool ok;
1291 tree core = spec;
1292 bool is_ptr;
1293 int diag_type = -1; /* none */
1295 if (spec == error_mark_node)
1296 return list;
1298 my_friendly_assert (spec && (!list || TREE_VALUE (list)), 19990317);
1300 /* [except.spec] 1, type in an exception specifier shall not be
1301 incomplete, or pointer or ref to incomplete other than pointer
1302 to cv void. */
1303 is_ptr = TREE_CODE (core) == POINTER_TYPE;
1304 if (is_ptr || TREE_CODE (core) == REFERENCE_TYPE)
1305 core = TREE_TYPE (core);
1306 if (complain < 0)
1307 ok = true;
1308 else if (VOID_TYPE_P (core))
1309 ok = is_ptr;
1310 else if (TREE_CODE (core) == TEMPLATE_TYPE_PARM)
1311 ok = true;
1312 else if (processing_template_decl)
1313 ok = true;
1314 else
1316 ok = true;
1317 /* 15.4/1 says that types in an exception specifier must be complete,
1318 but it seems more reasonable to only require this on definitions
1319 and calls. So just give a pedwarn at this point; we will give an
1320 error later if we hit one of those two cases. */
1321 if (!COMPLETE_TYPE_P (complete_type (core)))
1322 diag_type = 2; /* pedwarn */
1325 if (ok)
1327 tree probe;
1329 for (probe = list; probe; probe = TREE_CHAIN (probe))
1330 if (same_type_p (TREE_VALUE (probe), spec))
1331 break;
1332 if (!probe)
1333 list = tree_cons (NULL_TREE, spec, list);
1335 else
1336 diag_type = 0; /* error */
1338 if (diag_type >= 0 && complain)
1339 cxx_incomplete_type_diagnostic (NULL_TREE, core, diag_type);
1341 return list;
1344 /* Combine the two exceptions specifier lists LIST and ADD, and return
1345 their union. */
1347 tree
1348 merge_exception_specifiers (tree list, tree add)
1350 if (!list || !add)
1351 return NULL_TREE;
1352 else if (!TREE_VALUE (list))
1353 return add;
1354 else if (!TREE_VALUE (add))
1355 return list;
1356 else
1358 tree orig_list = list;
1360 for (; add; add = TREE_CHAIN (add))
1362 tree spec = TREE_VALUE (add);
1363 tree probe;
1365 for (probe = orig_list; probe; probe = TREE_CHAIN (probe))
1366 if (same_type_p (TREE_VALUE (probe), spec))
1367 break;
1368 if (!probe)
1370 spec = build_tree_list (NULL_TREE, spec);
1371 TREE_CHAIN (spec) = list;
1372 list = spec;
1376 return list;
1379 /* Subroutine of build_call. Ensure that each of the types in the
1380 exception specification is complete. Technically, 15.4/1 says that
1381 they need to be complete when we see a declaration of the function,
1382 but we should be able to get away with only requiring this when the
1383 function is defined or called. See also add_exception_specifier. */
1385 void
1386 require_complete_eh_spec_types (tree fntype, tree decl)
1388 tree raises;
1389 /* Don't complain about calls to op new. */
1390 if (decl && DECL_ARTIFICIAL (decl))
1391 return;
1392 for (raises = TYPE_RAISES_EXCEPTIONS (fntype); raises;
1393 raises = TREE_CHAIN (raises))
1395 tree type = TREE_VALUE (raises);
1396 if (type && !COMPLETE_TYPE_P (type))
1398 if (decl)
1399 error
1400 ("call to function `%D' which throws incomplete type `%#T'",
1401 decl, type);
1402 else
1403 error ("call to function which throws incomplete type `%#T'",
1404 decl);