Remove some compile time warnings about duplicate definitions.
[official-gcc.git] / gcc / cp / typeck2.c
blob8281b34de4991a35abffda8aba728fbacc7f364e
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)
12 any later version.
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). */
34 #include "config.h"
35 #include "system.h"
36 #include "tree.h"
37 #include "cp-tree.h"
38 #include "flags.h"
39 #include "toplev.h"
40 #include "output.h"
41 #include "diagnostic.h"
43 static tree process_init_constructor PARAMS ((tree, tree, tree *));
45 /* Print an error message stemming from an attempt to use
46 BASETYPE as a base class for TYPE. */
48 tree
49 error_not_base_type (basetype, type)
50 tree basetype, type;
52 if (TREE_CODE (basetype) == FUNCTION_DECL)
53 basetype = DECL_CONTEXT (basetype);
54 cp_error ("type `%T' is not a base type for type `%T'", basetype, type);
55 return error_mark_node;
58 tree
59 binfo_or_else (parent_or_type, type)
60 tree parent_or_type, type;
62 tree binfo;
63 if (TYPE_MAIN_VARIANT (parent_or_type) == TYPE_MAIN_VARIANT (type))
64 return TYPE_BINFO (parent_or_type);
65 if ((binfo = get_binfo (parent_or_type, TYPE_MAIN_VARIANT (type), 0)))
67 if (binfo == error_mark_node)
68 return NULL_TREE;
69 return binfo;
71 error_not_base_type (parent_or_type, type);
72 return NULL_TREE;
75 /* According to ARM $7.1.6, "A `const' object may be initialized, but its
76 value may not be changed thereafter. Thus, we emit hard errors for these,
77 rather than just pedwarns. If `SOFT' is 1, then we just pedwarn. (For
78 example, conversions to references.) */
80 void
81 readonly_error (arg, string, soft)
82 tree arg;
83 const char *string;
84 int soft;
86 const char *fmt;
87 void (*fn) PARAMS ((const char *, ...));
89 if (soft)
90 fn = cp_pedwarn;
91 else
92 fn = cp_error;
94 if (TREE_CODE (arg) == COMPONENT_REF)
96 if (TYPE_READONLY (TREE_TYPE (TREE_OPERAND (arg, 0))))
97 fmt = "%s of data-member `%D' in read-only structure";
98 else
99 fmt = "%s of read-only data-member `%D'";
100 (*fn) (fmt, string, TREE_OPERAND (arg, 1));
102 else if (TREE_CODE (arg) == VAR_DECL)
104 if (DECL_LANG_SPECIFIC (arg)
105 && DECL_IN_AGGR_P (arg)
106 && !TREE_STATIC (arg))
107 fmt = "%s of constant field `%D'";
108 else
109 fmt = "%s of read-only variable `%D'";
110 (*fn) (fmt, string, arg);
112 else if (TREE_CODE (arg) == PARM_DECL)
113 (*fn) ("%s of read-only parameter `%D'", string, arg);
114 else if (TREE_CODE (arg) == INDIRECT_REF
115 && TREE_CODE (TREE_TYPE (TREE_OPERAND (arg, 0))) == REFERENCE_TYPE
116 && (TREE_CODE (TREE_OPERAND (arg, 0)) == VAR_DECL
117 || TREE_CODE (TREE_OPERAND (arg, 0)) == PARM_DECL))
118 (*fn) ("%s of read-only reference `%D'", string, TREE_OPERAND (arg, 0));
119 else if (TREE_CODE (arg) == RESULT_DECL)
120 (*fn) ("%s of read-only named return value `%D'", string, arg);
121 else if (TREE_CODE (arg) == FUNCTION_DECL)
122 (*fn) ("%s of function `%D'", string, arg);
123 else
124 (*fn) ("%s of read-only location", string);
127 /* If TYPE has abstract virtual functions, issue an error about trying
128 to create an object of that type. DECL is the object declared, or
129 NULL_TREE if the declaration is unavailable. Returns 1 if an error
130 occurred; zero if all was well. */
133 abstract_virtuals_error (decl, type)
134 tree decl;
135 tree type;
137 tree u;
138 tree tu;
140 if (!CLASS_TYPE_P (type) || !CLASSTYPE_PURE_VIRTUALS (type))
141 return 0;
143 if (!TYPE_SIZE (type))
144 /* TYPE is being defined, and during that time
145 CLASSTYPE_PURE_VIRTUALS holds the inline friends. */
146 return 0;
148 u = CLASSTYPE_PURE_VIRTUALS (type);
149 if (decl)
151 if (TREE_CODE (decl) == RESULT_DECL)
152 return 0;
154 if (TREE_CODE (decl) == VAR_DECL)
155 cp_error ("cannot declare variable `%D' to be of type `%T'",
156 decl, type);
157 else if (TREE_CODE (decl) == PARM_DECL)
158 cp_error ("cannot declare parameter `%D' to be of type `%T'",
159 decl, type);
160 else if (TREE_CODE (decl) == FIELD_DECL)
161 cp_error ("cannot declare field `%D' to be of type `%T'",
162 decl, type);
163 else if (TREE_CODE (decl) == FUNCTION_DECL
164 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
165 cp_error ("invalid return type for member function `%#D'", decl);
166 else if (TREE_CODE (decl) == FUNCTION_DECL)
167 cp_error ("invalid return type for function `%#D'", decl);
169 else
170 cp_error ("cannot allocate an object of type `%T'", type);
172 /* Only go through this once. */
173 if (TREE_PURPOSE (u) == NULL_TREE)
175 TREE_PURPOSE (u) = error_mark_node;
177 error (" because the following virtual functions are abstract:");
178 for (tu = u; tu; tu = TREE_CHAIN (tu))
179 cp_error_at ("\t%#D", TREE_VALUE (tu));
181 else
182 cp_error (" since type `%T' has abstract virtual functions", 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. */
191 void
192 incomplete_type_error (value, type)
193 tree value;
194 tree type;
196 int decl = 0;
198 /* Avoid duplicate error message. */
199 if (TREE_CODE (type) == ERROR_MARK)
200 return;
202 if (value != 0 && (TREE_CODE (value) == VAR_DECL
203 || TREE_CODE (value) == PARM_DECL))
205 cp_error_at ("`%D' has incomplete type", value);
206 decl = 1;
208 retry:
209 /* We must print an error message. Be clever about what it says. */
211 switch (TREE_CODE (type))
213 case RECORD_TYPE:
214 case UNION_TYPE:
215 case ENUMERAL_TYPE:
216 if (!decl)
217 cp_error ("invalid use of undefined type `%#T'", type);
218 cp_error_at ("forward declaration of `%#T'", type);
219 break;
221 case VOID_TYPE:
222 cp_error ("invalid use of `%T'", type);
223 break;
225 case ARRAY_TYPE:
226 if (TYPE_DOMAIN (type))
228 type = TREE_TYPE (type);
229 goto retry;
231 cp_error ("invalid use of array with unspecified bounds");
232 break;
234 case OFFSET_TYPE:
235 bad_member:
236 cp_error ("invalid use of member (did you forget the `&' ?)");
237 break;
239 case TEMPLATE_TYPE_PARM:
240 cp_error ("invalid use of template type parameter");
241 break;
243 case UNKNOWN_TYPE:
244 if (value && TREE_CODE (value) == COMPONENT_REF)
245 goto bad_member;
246 else if (value && TREE_CODE (value) == ADDR_EXPR)
247 cp_error ("address of overloaded function with no contextual type information");
248 else if (value && TREE_CODE (value) == OVERLOAD)
249 cp_error ("overloaded function with no contextual type information");
250 else
251 cp_error ("insufficient contextual information to determine type");
252 break;
254 default:
255 my_friendly_abort (108);
259 /* This is a wrapper around fancy_abort, as used in the back end and
260 other front ends. It will also report the magic number assigned to
261 this particular abort. That is for backward compatibility with the
262 old C++ abort handler, which would just report the magic number. */
263 void
264 friendly_abort (where, file, line, func)
265 int where;
266 const char *file;
267 int line;
268 const char *func;
270 if (errorcount > 0 || sorrycount > 0)
271 /* Say nothing. */;
272 else if (where > 0)
274 error ("Internal error #%d.", where);
276 /* Uncount this error, so internal_error will do the right thing. */
277 --errorcount;
280 fancy_abort (file, line, func);
284 /* Perform appropriate conversions on the initial value of a variable,
285 store it in the declaration DECL,
286 and print any error messages that are appropriate.
287 If the init is invalid, store an ERROR_MARK.
289 C++: Note that INIT might be a TREE_LIST, which would mean that it is
290 a base class initializer for some aggregate type, hopefully compatible
291 with DECL. If INIT is a single element, and DECL is an aggregate
292 type, we silently convert INIT into a TREE_LIST, allowing a constructor
293 to be called.
295 If INIT is a TREE_LIST and there is no constructor, turn INIT
296 into a CONSTRUCTOR and use standard initialization techniques.
297 Perhaps a warning should be generated?
299 Returns value of initializer if initialization could not be
300 performed for static variable. In that case, caller must do
301 the storing. */
303 tree
304 store_init_value (decl, init)
305 tree decl, init;
307 register tree value, type;
309 /* If variable's type was invalidly declared, just ignore it. */
311 type = TREE_TYPE (decl);
312 if (TREE_CODE (type) == ERROR_MARK)
313 return NULL_TREE;
315 #if 0
316 /* This breaks arrays, and should not have any effect for other decls. */
317 /* Take care of C++ business up here. */
318 type = TYPE_MAIN_VARIANT (type);
319 #endif
321 if (IS_AGGR_TYPE (type))
323 if (! TYPE_HAS_TRIVIAL_INIT_REF (type)
324 && TREE_CODE (init) != CONSTRUCTOR)
325 my_friendly_abort (109);
327 if (TREE_CODE (init) == TREE_LIST)
329 cp_error ("constructor syntax used, but no constructor declared for type `%T'", type);
330 init = build_nt (CONSTRUCTOR, NULL_TREE, nreverse (init));
332 #if 0
333 if (TREE_CODE (init) == CONSTRUCTOR)
335 tree field;
337 /* Check that we're really an aggregate as ARM 8.4.1 defines it. */
338 if (CLASSTYPE_N_BASECLASSES (type))
339 cp_error_at ("initializer list construction invalid for derived class object `%D'", decl);
340 if (CLASSTYPE_VTBL_PTR (type))
341 cp_error_at ("initializer list construction invalid for polymorphic class object `%D'", decl);
342 if (TYPE_NEEDS_CONSTRUCTING (type))
344 cp_error_at ("initializer list construction invalid for `%D'", decl);
345 error ("due to the presence of a constructor");
347 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
348 if (TREE_PRIVATE (field) || TREE_PROTECTED (field))
350 cp_error_at ("initializer list construction invalid for `%D'", decl);
351 cp_error_at ("due to non-public access of member `%D'", field);
353 for (field = TYPE_METHODS (type); field; field = TREE_CHAIN (field))
354 if (TREE_PRIVATE (field) || TREE_PROTECTED (field))
356 cp_error_at ("initializer list construction invalid for `%D'", decl);
357 cp_error_at ("due to non-public access of member `%D'", field);
360 #endif
362 else if (TREE_CODE (init) == TREE_LIST
363 && TREE_TYPE (init) != unknown_type_node)
365 if (TREE_CODE (decl) == RESULT_DECL)
367 if (TREE_CHAIN (init))
369 warning ("comma expression used to initialize return value");
370 init = build_compound_expr (init);
372 else
373 init = TREE_VALUE (init);
375 else if (TREE_CODE (init) == TREE_LIST
376 && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
378 error ("cannot initialize arrays using this syntax");
379 return NULL_TREE;
381 else
383 /* We get here with code like `int a (2);' */
385 if (TREE_CHAIN (init) != NULL_TREE)
387 pedwarn ("initializer list being treated as compound expression");
388 init = build_compound_expr (init);
390 else
391 init = TREE_VALUE (init);
395 /* End of special C++ code. */
397 /* We might have already run this bracketed initializer through
398 digest_init. Don't do so again. */
399 if (TREE_CODE (init) == CONSTRUCTOR && TREE_HAS_CONSTRUCTOR (init)
400 && TREE_TYPE (init)
401 && TYPE_MAIN_VARIANT (TREE_TYPE (init)) == TYPE_MAIN_VARIANT (type))
402 value = init;
403 else
404 /* Digest the specified initializer into an expression. */
405 value = digest_init (type, init, (tree *) 0);
407 /* Store the expression if valid; else report error. */
409 if (TREE_CODE (value) == ERROR_MARK)
411 /* Other code expects that initializers for objects of types that need
412 constructing never make it into DECL_INITIAL, and passes 'init' to
413 build_aggr_init without checking DECL_INITIAL. So just return. */
414 else if (TYPE_NEEDS_CONSTRUCTING (type))
415 return value;
416 else if (TREE_STATIC (decl)
417 && (! TREE_CONSTANT (value)
418 || ! initializer_constant_valid_p (value, TREE_TYPE (value))
419 #if 0
420 /* A STATIC PUBLIC int variable doesn't have to be
421 run time inited when doing pic. (mrs) */
422 /* Since ctors and dtors are the only things that can
423 reference vtables, and they are always written down
424 the vtable definition, we can leave the
425 vtables in initialized data space.
426 However, other initialized data cannot be initialized
427 this way. Instead a global file-level initializer
428 must do the job. */
429 || (flag_pic && !DECL_VIRTUAL_P (decl) && TREE_PUBLIC (decl))
430 #endif
433 return value;
434 #if 0 /* No, that's C. jason 9/19/94 */
435 else
437 if (pedantic && TREE_CODE (value) == CONSTRUCTOR)
439 if (! TREE_CONSTANT (value) || ! TREE_STATIC (value))
440 pedwarn ("ANSI C++ forbids non-constant aggregate initializer expressions");
443 #endif
445 /* Store the VALUE in DECL_INITIAL. If we're building a
446 statement-tree we will actually expand the initialization later
447 when we output this function. */
448 DECL_INITIAL (decl) = value;
449 return NULL_TREE;
452 /* Digest the parser output INIT as an initializer for type TYPE.
453 Return a C expression of type TYPE to represent the initial value.
455 If TAIL is nonzero, it points to a variable holding a list of elements
456 of which INIT is the first. We update the list stored there by
457 removing from the head all the elements that we use.
458 Normally this is only one; we use more than one element only if
459 TYPE is an aggregate and INIT is not a constructor. */
461 tree
462 digest_init (type, init, tail)
463 tree type, init, *tail;
465 enum tree_code code = TREE_CODE (type);
466 tree element = NULL_TREE;
467 tree old_tail_contents = NULL_TREE;
468 /* Nonzero if INIT is a braced grouping, which comes in as a CONSTRUCTOR
469 tree node which has no TREE_TYPE. */
470 int raw_constructor;
472 /* By default, assume we use one element from a list.
473 We correct this later in the sole case where it is not true. */
475 if (tail)
477 old_tail_contents = *tail;
478 *tail = TREE_CHAIN (*tail);
481 if (init == error_mark_node || (TREE_CODE (init) == TREE_LIST
482 && TREE_VALUE (init) == error_mark_node))
483 return error_mark_node;
485 if (TREE_CODE (init) == ERROR_MARK)
486 /* __PRETTY_FUNCTION__'s initializer is a bogus expression inside
487 a template function. This gets substituted during instantiation. */
488 return init;
490 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
491 if (TREE_CODE (init) == NON_LVALUE_EXPR)
492 init = TREE_OPERAND (init, 0);
494 if (TREE_CODE (init) == CONSTRUCTOR && TREE_TYPE (init) == type)
495 return init;
497 raw_constructor = TREE_CODE (init) == CONSTRUCTOR && TREE_TYPE (init) == 0;
499 if (raw_constructor
500 && CONSTRUCTOR_ELTS (init) != 0
501 && TREE_CHAIN (CONSTRUCTOR_ELTS (init)) == 0)
503 element = TREE_VALUE (CONSTRUCTOR_ELTS (init));
504 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
505 if (element && TREE_CODE (element) == NON_LVALUE_EXPR)
506 element = TREE_OPERAND (element, 0);
507 if (element == error_mark_node)
508 return element;
511 /* Initialization of an array of chars from a string constant
512 optionally enclosed in braces. */
514 if (code == ARRAY_TYPE)
516 tree typ1;
518 if (TREE_CODE (init) == TREE_LIST)
520 error ("initializing array with parameter list");
521 return error_mark_node;
524 typ1 = TYPE_MAIN_VARIANT (TREE_TYPE (type));
525 if (char_type_p (typ1)
526 && ((init && TREE_CODE (init) == STRING_CST)
527 || (element && TREE_CODE (element) == STRING_CST)))
529 tree string = element ? element : init;
531 if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (string)))
532 != char_type_node)
533 && TYPE_PRECISION (typ1) == BITS_PER_UNIT)
535 error ("char-array initialized from wide string");
536 return error_mark_node;
538 if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (string)))
539 == char_type_node)
540 && TYPE_PRECISION (typ1) != BITS_PER_UNIT)
542 error ("int-array initialized from non-wide string");
543 return error_mark_node;
546 TREE_TYPE (string) = type;
547 if (TYPE_DOMAIN (type) != 0
548 && TREE_CONSTANT (TYPE_SIZE (type)))
550 register int size
551 = TREE_INT_CST_LOW (TYPE_SIZE (type));
552 size = (size + BITS_PER_UNIT - 1) / BITS_PER_UNIT;
553 /* In C it is ok to subtract 1 from the length of the string
554 because it's ok to ignore the terminating null char that is
555 counted in the length of the constant, but in C++ this would
556 be invalid. */
557 if (size < TREE_STRING_LENGTH (string))
558 pedwarn ("initializer-string for array of chars is too long");
560 return string;
564 /* Handle scalar types, including conversions,
565 and signature pointers and references. */
567 if (code == INTEGER_TYPE || code == REAL_TYPE || code == POINTER_TYPE
568 || code == ENUMERAL_TYPE || code == REFERENCE_TYPE
569 || code == BOOLEAN_TYPE || code == COMPLEX_TYPE || code == VECTOR_TYPE
570 || TYPE_PTRMEMFUNC_P (type))
572 if (raw_constructor)
574 if (element == 0)
576 error ("initializer for scalar variable requires one element");
577 return error_mark_node;
579 init = element;
581 while (TREE_CODE (init) == CONSTRUCTOR && TREE_HAS_CONSTRUCTOR (init))
583 cp_pedwarn ("braces around scalar initializer for `%T'", type);
584 init = CONSTRUCTOR_ELTS (init);
585 if (TREE_CHAIN (init))
586 cp_pedwarn ("ignoring extra initializers for `%T'", type);
587 init = TREE_VALUE (init);
590 return convert_for_initialization (0, type, init, LOOKUP_NORMAL,
591 "initialization", NULL_TREE, 0);
594 /* Come here only for records and arrays (and unions with constructors). */
596 if (COMPLETE_TYPE_P (type) && ! TREE_CONSTANT (TYPE_SIZE (type)))
598 cp_error ("variable-sized object of type `%T' may not be initialized",
599 type);
600 return error_mark_node;
603 if (code == ARRAY_TYPE || IS_AGGR_TYPE_CODE (code))
605 if (raw_constructor && TYPE_NON_AGGREGATE_CLASS (type)
606 && TREE_HAS_CONSTRUCTOR (init))
608 cp_error ("subobject of type `%T' must be initialized by constructor, not by `%E'",
609 type, init);
610 return error_mark_node;
612 else if (raw_constructor)
613 return process_init_constructor (type, init, (tree *)0);
614 else if (can_convert_arg (type, TREE_TYPE (init), init)
615 || TYPE_NON_AGGREGATE_CLASS (type))
616 /* These are never initialized from multiple constructor elements. */;
617 else if (tail != 0)
619 *tail = old_tail_contents;
620 return process_init_constructor (type, 0, tail);
623 if (code != ARRAY_TYPE)
625 int flags = LOOKUP_NORMAL;
626 /* Initialization from { } is copy-initialization. */
627 if (tail)
628 flags |= LOOKUP_ONLYCONVERTING;
630 return convert_for_initialization (NULL_TREE, type, init, flags,
631 "initialization", NULL_TREE, 0);
635 error ("invalid initializer");
636 return error_mark_node;
639 /* Process a constructor for a variable of type TYPE.
640 The constructor elements may be specified either with INIT or with ELTS,
641 only one of which should be non-null.
643 If INIT is specified, it is a CONSTRUCTOR node which is specifically
644 and solely for initializing this datum.
646 If ELTS is specified, it is the address of a variable containing
647 a list of expressions. We take as many elements as we need
648 from the head of the list and update the list.
650 In the resulting constructor, TREE_CONSTANT is set if all elts are
651 constant, and TREE_STATIC is set if, in addition, all elts are simple enough
652 constants that the assembler and linker can compute them. */
654 static tree
655 process_init_constructor (type, init, elts)
656 tree type, init, *elts;
658 register tree tail;
659 /* List of the elements of the result constructor,
660 in reverse order. */
661 register tree members = NULL;
662 register tree next1;
663 tree result;
664 int allconstant = 1;
665 int allsimple = 1;
666 int erroneous = 0;
668 /* Make TAIL be the list of elements to use for the initialization,
669 no matter how the data was given to us. */
671 if (elts)
673 if (warn_missing_braces)
674 warning ("aggregate has a partly bracketed initializer");
675 tail = *elts;
677 else
678 tail = CONSTRUCTOR_ELTS (init);
680 /* Gobble as many elements as needed, and make a constructor or initial value
681 for each element of this aggregate. Chain them together in result.
682 If there are too few, use 0 for each scalar ultimate component. */
684 if (TREE_CODE (type) == ARRAY_TYPE)
686 tree domain = TYPE_DOMAIN (type);
687 register long len;
688 register int i;
690 if (domain)
691 len = (TREE_INT_CST_LOW (TYPE_MAX_VALUE (domain))
692 - TREE_INT_CST_LOW (TYPE_MIN_VALUE (domain))
693 + 1);
694 else
695 len = -1; /* Take as many as there are */
697 for (i = 0; len < 0 || i < len; i++)
699 if (tail)
701 if (TREE_PURPOSE (tail)
702 && (TREE_CODE (TREE_PURPOSE (tail)) != INTEGER_CST
703 || compare_tree_int (TREE_PURPOSE (tail), i) != 0))
704 sorry ("non-trivial labeled initializers");
706 if (TREE_VALUE (tail) != 0)
708 tree tail1 = tail;
709 next1 = digest_init (TREE_TYPE (type),
710 TREE_VALUE (tail), &tail1);
711 if (next1 == error_mark_node)
712 return next1;
713 my_friendly_assert
714 (same_type_ignoring_top_level_qualifiers_p
715 (TREE_TYPE (type), TREE_TYPE (next1)),
716 981123);
717 my_friendly_assert (tail1 == 0
718 || TREE_CODE (tail1) == TREE_LIST, 319);
719 if (tail == tail1 && len < 0)
721 error ("non-empty initializer for array of empty elements");
722 /* Just ignore what we were supposed to use. */
723 tail1 = NULL_TREE;
725 tail = tail1;
727 else
729 next1 = error_mark_node;
730 tail = TREE_CHAIN (tail);
733 else if (len < 0)
734 /* We're done. */
735 break;
736 else if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (type)))
738 /* If this type needs constructors run for
739 default-initialization, we can't rely on the backend to do it
740 for us, so build up TARGET_EXPRs. If the type in question is
741 a class, just build one up; if it's an array, recurse. */
743 if (IS_AGGR_TYPE (TREE_TYPE (type)))
744 next1 = build_functional_cast (TREE_TYPE (type), NULL_TREE);
745 else
746 next1 = build (CONSTRUCTOR, NULL_TREE, NULL_TREE, NULL_TREE);
747 next1 = digest_init (TREE_TYPE (type), next1, 0);
749 else
750 /* The default zero-initialization is fine for us; don't
751 add anything to the CONSTRUCTOR. */
752 break;
754 if (next1 == error_mark_node)
755 erroneous = 1;
756 else if (!TREE_CONSTANT (next1))
757 allconstant = 0;
758 else if (! initializer_constant_valid_p (next1, TREE_TYPE (next1)))
759 allsimple = 0;
760 members = tree_cons (size_int (i), next1, members);
763 else if (TREE_CODE (type) == RECORD_TYPE)
765 register tree field;
767 if (tail)
769 if (TYPE_USES_VIRTUAL_BASECLASSES (type))
771 sorry ("initializer list for object of class with virtual base classes");
772 return error_mark_node;
775 if (TYPE_BINFO_BASETYPES (type))
777 sorry ("initializer list for object of class with base classes");
778 return error_mark_node;
781 if (TYPE_POLYMORPHIC_P (type))
783 sorry ("initializer list for object using virtual functions");
784 return error_mark_node;
788 for (field = TYPE_FIELDS (type); field;
789 field = TREE_CHAIN (field))
791 if (! DECL_NAME (field) && DECL_C_BIT_FIELD (field))
793 members = tree_cons (field, integer_zero_node, members);
794 continue;
797 if (TREE_CODE (field) != FIELD_DECL)
798 continue;
800 if (tail)
802 if (TREE_PURPOSE (tail)
803 && TREE_PURPOSE (tail) != field
804 && TREE_PURPOSE (tail) != DECL_NAME (field))
805 sorry ("non-trivial labeled initializers");
807 if (TREE_VALUE (tail) != 0)
809 tree tail1 = tail;
811 next1 = digest_init (TREE_TYPE (field),
812 TREE_VALUE (tail), &tail1);
813 my_friendly_assert (tail1 == 0
814 || TREE_CODE (tail1) == TREE_LIST, 320);
815 tail = tail1;
817 else
819 next1 = error_mark_node;
820 tail = TREE_CHAIN (tail);
823 else if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (field)))
825 /* If this type needs constructors run for
826 default-initialization, we can't rely on the backend to do it
827 for us, so build up TARGET_EXPRs. If the type in question is
828 a class, just build one up; if it's an array, recurse. */
830 if (IS_AGGR_TYPE (TREE_TYPE (field)))
831 next1 = build_functional_cast (TREE_TYPE (field),
832 NULL_TREE);
833 else
835 next1 = build (CONSTRUCTOR, NULL_TREE, NULL_TREE,
836 NULL_TREE);
837 if (init)
838 TREE_HAS_CONSTRUCTOR (next1)
839 = TREE_HAS_CONSTRUCTOR (init);
841 next1 = digest_init (TREE_TYPE (field), next1, 0);
843 /* Warn when some struct elements are implicitly initialized. */
844 if (extra_warnings
845 && (!init || TREE_HAS_CONSTRUCTOR (init)))
846 cp_warning ("missing initializer for member `%D'", field);
848 else
850 if (TREE_READONLY (field))
851 cp_error ("uninitialized const member `%D'", field);
852 else if (TYPE_LANG_SPECIFIC (TREE_TYPE (field))
853 && CLASSTYPE_READONLY_FIELDS_NEED_INIT (TREE_TYPE (field)))
854 cp_error ("member `%D' with uninitialized const fields",
855 field);
856 else if (TREE_CODE (TREE_TYPE (field)) == REFERENCE_TYPE)
857 cp_error ("member `%D' is uninitialized reference", field);
859 /* Warn when some struct elements are implicitly initialized
860 to zero. */
861 if (extra_warnings
862 && (!init || TREE_HAS_CONSTRUCTOR (init)))
863 cp_warning ("missing initializer for member `%D'", field);
865 /* The default zero-initialization is fine for us; don't
866 add anything to the CONSTRUCTOR. */
867 continue;
870 if (next1 == error_mark_node)
871 erroneous = 1;
872 else if (!TREE_CONSTANT (next1))
873 allconstant = 0;
874 else if (! initializer_constant_valid_p (next1, TREE_TYPE (next1)))
875 allsimple = 0;
876 members = tree_cons (field, next1, members);
879 else if (TREE_CODE (type) == UNION_TYPE
880 /* If the initializer was empty, use default zero initialization. */
881 && tail)
883 register tree field = TYPE_FIELDS (type);
885 /* Find the first named field. ANSI decided in September 1990
886 that only named fields count here. */
887 while (field && (DECL_NAME (field) == 0
888 || TREE_CODE (field) != FIELD_DECL))
889 field = TREE_CHAIN (field);
891 /* If this element specifies a field, initialize via that field. */
892 if (TREE_PURPOSE (tail) != NULL_TREE)
894 int win = 0;
896 if (TREE_CODE (TREE_PURPOSE (tail)) == FIELD_DECL)
897 /* Handle the case of a call by build_c_cast. */
898 field = TREE_PURPOSE (tail), win = 1;
899 else if (TREE_CODE (TREE_PURPOSE (tail)) != IDENTIFIER_NODE)
900 error ("index value instead of field name in union initializer");
901 else
903 tree temp;
904 for (temp = TYPE_FIELDS (type);
905 temp;
906 temp = TREE_CHAIN (temp))
907 if (DECL_NAME (temp) == TREE_PURPOSE (tail))
908 break;
909 if (temp)
910 field = temp, win = 1;
911 else
912 cp_error ("no field `%D' in union being initialized",
913 TREE_PURPOSE (tail));
915 if (!win)
916 TREE_VALUE (tail) = error_mark_node;
918 else if (field == 0)
920 cp_error ("union `%T' with no named members cannot be initialized",
921 type);
922 TREE_VALUE (tail) = error_mark_node;
925 if (TREE_VALUE (tail) != 0)
927 tree tail1 = tail;
929 next1 = digest_init (TREE_TYPE (field),
930 TREE_VALUE (tail), &tail1);
931 if (tail1 != 0 && TREE_CODE (tail1) != TREE_LIST)
932 my_friendly_abort (357);
933 tail = tail1;
935 else
937 next1 = error_mark_node;
938 tail = TREE_CHAIN (tail);
941 if (next1 == error_mark_node)
942 erroneous = 1;
943 else if (!TREE_CONSTANT (next1))
944 allconstant = 0;
945 else if (initializer_constant_valid_p (next1, TREE_TYPE (next1)) == 0)
946 allsimple = 0;
947 members = tree_cons (field, next1, members);
950 /* If arguments were specified as a list, just remove the ones we used. */
951 if (elts)
952 *elts = tail;
953 /* If arguments were specified as a constructor,
954 complain unless we used all the elements of the constructor. */
955 else if (tail)
956 pedwarn ("excess elements in aggregate initializer");
958 if (erroneous)
959 return error_mark_node;
961 result = build (CONSTRUCTOR, type, NULL_TREE, nreverse (members));
962 if (init)
963 TREE_HAS_CONSTRUCTOR (result) = TREE_HAS_CONSTRUCTOR (init);
964 if (allconstant) TREE_CONSTANT (result) = 1;
965 if (allconstant && allsimple) TREE_STATIC (result) = 1;
966 return result;
969 /* Given a structure or union value DATUM, construct and return
970 the structure or union component which results from narrowing
971 that value by the type specified in BASETYPE. For example, given the
972 hierarchy
974 class L { int ii; };
975 class A : L { ... };
976 class B : L { ... };
977 class C : A, B { ... };
979 and the declaration
981 C x;
983 then the expression
985 x.A::ii refers to the ii member of the L part of
986 the A part of the C object named by X. In this case,
987 DATUM would be x, and BASETYPE would be A.
989 I used to think that this was nonconformant, that the standard specified
990 that first we look up ii in A, then convert x to an L& and pull out the
991 ii part. But in fact, it does say that we convert x to an A&; A here
992 is known as the "naming class". (jason 2000-12-19) */
994 tree
995 build_scoped_ref (datum, basetype)
996 tree datum;
997 tree basetype;
999 tree ref;
1001 if (datum == error_mark_node)
1002 return error_mark_node;
1004 ref = build_unary_op (ADDR_EXPR, datum, 0);
1005 ref = convert_pointer_to (basetype, ref);
1007 return build_indirect_ref (ref, "(compiler error in build_scoped_ref)");
1010 /* Build a reference to an object specified by the C++ `->' operator.
1011 Usually this just involves dereferencing the object, but if the
1012 `->' operator is overloaded, then such overloads must be
1013 performed until an object which does not have the `->' operator
1014 overloaded is found. An error is reported when circular pointer
1015 delegation is detected. */
1017 tree
1018 build_x_arrow (datum)
1019 tree datum;
1021 tree types_memoized = NULL_TREE;
1022 register tree rval = datum;
1023 tree type = TREE_TYPE (rval);
1024 tree last_rval = NULL_TREE;
1026 if (type == error_mark_node)
1027 return error_mark_node;
1029 if (processing_template_decl)
1030 return build_min_nt (ARROW_EXPR, rval);
1032 if (TREE_CODE (rval) == OFFSET_REF)
1034 rval = resolve_offset_ref (datum);
1035 type = TREE_TYPE (rval);
1038 if (TREE_CODE (type) == REFERENCE_TYPE)
1040 rval = convert_from_reference (rval);
1041 type = TREE_TYPE (rval);
1044 if (IS_AGGR_TYPE (type))
1046 while ((rval = build_opfncall (COMPONENT_REF, LOOKUP_NORMAL, rval,
1047 NULL_TREE, NULL_TREE)))
1049 if (rval == error_mark_node)
1050 return error_mark_node;
1052 if (value_member (TREE_TYPE (rval), types_memoized))
1054 error ("circular pointer delegation detected");
1055 return error_mark_node;
1057 else
1059 types_memoized = tree_cons (NULL_TREE, TREE_TYPE (rval),
1060 types_memoized);
1062 last_rval = rval;
1065 if (last_rval == NULL_TREE)
1067 cp_error ("base operand of `->' has non-pointer type `%T'", type);
1068 return error_mark_node;
1071 if (TREE_CODE (TREE_TYPE (last_rval)) == REFERENCE_TYPE)
1072 last_rval = convert_from_reference (last_rval);
1074 else
1075 last_rval = default_conversion (rval);
1077 if (TREE_CODE (TREE_TYPE (last_rval)) == POINTER_TYPE)
1078 return build_indirect_ref (last_rval, NULL);
1080 if (types_memoized)
1081 error ("result of `operator->()' yields non-pointer result");
1082 else
1083 error ("base operand of `->' is not a pointer");
1084 return error_mark_node;
1087 /* Make an expression to refer to the COMPONENT field of
1088 structure or union value DATUM. COMPONENT is an arbitrary
1089 expression. DATUM has not already been checked out to be of
1090 aggregate type.
1092 For C++, COMPONENT may be a TREE_LIST. This happens when we must
1093 return an object of member type to a method of the current class,
1094 but there is not yet enough typing information to know which one.
1095 As a special case, if there is only one method by that name,
1096 it is returned. Otherwise we return an expression which other
1097 routines will have to know how to deal with later. */
1099 tree
1100 build_m_component_ref (datum, component)
1101 tree datum, component;
1103 tree type;
1104 tree objtype;
1105 tree field_type;
1106 int type_quals;
1107 tree binfo;
1109 if (processing_template_decl)
1110 return build_min_nt (DOTSTAR_EXPR, datum, component);
1112 datum = decay_conversion (datum);
1114 if (datum == error_mark_node || component == error_mark_node)
1115 return error_mark_node;
1117 objtype = TYPE_MAIN_VARIANT (TREE_TYPE (datum));
1119 if (TYPE_PTRMEMFUNC_P (TREE_TYPE (component)))
1121 type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (TREE_TYPE (component)));
1122 field_type = type;
1124 else if (TYPE_PTRMEM_P (TREE_TYPE (component)))
1126 type = TREE_TYPE (TREE_TYPE (component));
1127 field_type = TREE_TYPE (type);
1129 else
1131 cp_error ("`%E' cannot be used as a member pointer, since it is of type `%T'",
1132 component, TREE_TYPE (component));
1133 return error_mark_node;
1136 if (! IS_AGGR_TYPE (objtype))
1138 cp_error ("cannot apply member pointer `%E' to `%E'", component, datum);
1139 cp_error ("which is of non-aggregate type `%T'", objtype);
1140 return error_mark_node;
1143 binfo = get_binfo (TYPE_METHOD_BASETYPE (type), objtype, 1);
1144 if (binfo == NULL_TREE)
1146 cp_error ("member type `%T::' incompatible with object type `%T'",
1147 TYPE_METHOD_BASETYPE (type), objtype);
1148 return error_mark_node;
1150 else if (binfo == error_mark_node)
1151 return error_mark_node;
1153 /* Compute the type of the field, as described in [expr.ref]. */
1154 type_quals = TYPE_UNQUALIFIED;
1155 if (TREE_CODE (field_type) == REFERENCE_TYPE)
1156 /* The standard says that the type of the result should be the
1157 type referred to by the reference. But for now, at least, we
1158 do the conversion from reference type later. */
1160 else
1162 type_quals = (cp_type_quals (field_type)
1163 | cp_type_quals (TREE_TYPE (datum)));
1165 /* There's no such thing as a mutable pointer-to-member, so we don't
1166 need to deal with that here like we do in build_component_ref. */
1167 field_type = cp_build_qualified_type (field_type, type_quals);
1170 component = build (OFFSET_REF, field_type, datum, component);
1171 if (TREE_CODE (type) == OFFSET_TYPE)
1172 component = resolve_offset_ref (component);
1173 return component;
1176 /* Return a tree node for the expression TYPENAME '(' PARMS ')'. */
1178 tree
1179 build_functional_cast (exp, parms)
1180 tree exp;
1181 tree parms;
1183 /* This is either a call to a constructor,
1184 or a C cast in C++'s `functional' notation. */
1185 tree type;
1187 if (exp == error_mark_node || parms == error_mark_node)
1188 return error_mark_node;
1190 if (TREE_CODE (exp) == IDENTIFIER_NODE)
1192 if (IDENTIFIER_HAS_TYPE_VALUE (exp))
1193 /* Either an enum or an aggregate type. */
1194 type = IDENTIFIER_TYPE_VALUE (exp);
1195 else
1197 type = lookup_name (exp, 1);
1198 if (!type || TREE_CODE (type) != TYPE_DECL)
1200 cp_error ("`%T' fails to be a typedef or built-in type", exp);
1201 return error_mark_node;
1203 type = TREE_TYPE (type);
1206 else if (TREE_CODE (exp) == TYPE_DECL)
1207 type = TREE_TYPE (exp);
1208 else
1209 type = exp;
1211 if (processing_template_decl)
1212 return build_min (CAST_EXPR, type, parms);
1214 if (! IS_AGGR_TYPE (type))
1216 /* this must build a C cast */
1217 if (parms == NULL_TREE)
1218 parms = integer_zero_node;
1219 else
1221 if (TREE_CHAIN (parms) != NULL_TREE)
1222 pedwarn ("initializer list being treated as compound expression");
1223 parms = build_compound_expr (parms);
1226 return build_c_cast (type, parms);
1229 /* Prepare to evaluate as a call to a constructor. If this expression
1230 is actually used, for example,
1232 return X (arg1, arg2, ...);
1234 then the slot being initialized will be filled in. */
1236 if (!complete_type_or_else (type, NULL_TREE))
1237 return error_mark_node;
1238 if (abstract_virtuals_error (NULL_TREE, type))
1239 return error_mark_node;
1241 if (parms && TREE_CHAIN (parms) == NULL_TREE)
1242 return build_c_cast (type, TREE_VALUE (parms));
1244 /* We need to zero-initialize POD types. Let's do that for everything
1245 that doesn't need a constructor. */
1246 if (parms == NULL_TREE && !TYPE_NEEDS_CONSTRUCTING (type)
1247 && TYPE_HAS_DEFAULT_CONSTRUCTOR (type))
1249 exp = build (CONSTRUCTOR, type, NULL_TREE, NULL_TREE);
1250 return get_target_expr (exp);
1253 exp = build_method_call (NULL_TREE, complete_ctor_identifier, parms,
1254 TYPE_BINFO (type), LOOKUP_NORMAL);
1256 if (exp == error_mark_node)
1257 return error_mark_node;
1259 return build_cplus_new (type, exp);
1263 /* Complain about defining new types in inappropriate places. We give an
1264 exception for C-style casts, to accommodate GNU C stylings. */
1266 void
1267 check_for_new_type (string, inptree)
1268 const char *string;
1269 flagged_type_tree inptree;
1271 if (inptree.new_type_flag
1272 && (pedantic || strcmp (string, "cast") != 0))
1273 pedwarn ("ISO C++ forbids defining types within %s", string);
1276 /* Add new exception specifier SPEC, to the LIST we currently have.
1277 If it's already in LIST then do nothing.
1278 Moan if it's bad and we're allowed to. COMPLAIN < 0 means we
1279 know what we're doing. */
1281 tree
1282 add_exception_specifier (list, spec, complain)
1283 tree list, spec;
1284 int complain;
1286 int ok;
1287 tree core = spec;
1288 int is_ptr;
1290 if (spec == error_mark_node)
1291 return list;
1293 my_friendly_assert (spec && (!list || TREE_VALUE (list)), 19990317);
1295 /* [except.spec] 1, type in an exception specifier shall not be
1296 incomplete, or pointer or ref to incomplete other than pointer
1297 to cv void. */
1298 is_ptr = TREE_CODE (core) == POINTER_TYPE;
1299 if (is_ptr || TREE_CODE (core) == REFERENCE_TYPE)
1300 core = TREE_TYPE (core);
1301 if (complain < 0)
1302 ok = 1;
1303 else if (VOID_TYPE_P (core))
1304 ok = is_ptr;
1305 else if (TREE_CODE (core) == TEMPLATE_TYPE_PARM)
1306 ok = 1;
1307 else if (processing_template_decl)
1308 ok = 1;
1309 else
1310 ok = COMPLETE_TYPE_P (complete_type (core));
1312 if (ok)
1314 tree probe;
1316 for (probe = list; probe; probe = TREE_CHAIN (probe))
1317 if (same_type_p (TREE_VALUE (probe), spec))
1318 break;
1319 if (!probe)
1321 spec = build_tree_list (NULL_TREE, spec);
1322 TREE_CHAIN (spec) = list;
1323 list = spec;
1326 else if (complain)
1327 incomplete_type_error (NULL_TREE, core);
1328 return list;
1331 /* Combine the two exceptions specifier lists LIST and ADD, and return
1332 their union. */
1334 tree
1335 merge_exception_specifiers (list, add)
1336 tree list, add;
1338 if (!list || !add)
1339 return NULL_TREE;
1340 else if (!TREE_VALUE (list))
1341 return add;
1342 else if (!TREE_VALUE (add))
1343 return list;
1344 else
1346 tree orig_list = list;
1348 for (; add; add = TREE_CHAIN (add))
1350 tree spec = TREE_VALUE (add);
1351 tree probe;
1353 for (probe = orig_list; probe; probe = TREE_CHAIN (probe))
1354 if (same_type_p (TREE_VALUE (probe), spec))
1355 break;
1356 if (!probe)
1358 spec = build_tree_list (NULL_TREE, spec);
1359 TREE_CHAIN (spec) = list;
1360 list = spec;
1364 return list;