]> git.ipfire.org Git - thirdparty/gcc.git/blob - gcc/cp/typeck2.c
* c-lang.c (LANG_HOOKS_INCOMPLETE_TYPE_ERROR): Redefine.
[thirdparty/gcc.git] / gcc / cp / typeck2.c
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)
6
7 This file is part of GNU CC.
8
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.
13
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.
18
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. */
23
24
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.
29
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). */
33
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"
42
43 static tree process_init_constructor PARAMS ((tree, tree, tree *));
44
45 /* Print an error message stemming from an attempt to use
46 BASETYPE as a base class for TYPE. */
47
48 tree
49 error_not_base_type (basetype, type)
50 tree basetype, type;
51 {
52 if (TREE_CODE (basetype) == FUNCTION_DECL)
53 basetype = DECL_CONTEXT (basetype);
54 error ("type `%T' is not a base type for type `%T'", basetype, type);
55 return error_mark_node;
56 }
57
58 tree
59 binfo_or_else (base, type)
60 tree base, type;
61 {
62 tree binfo = lookup_base (type, base, ba_ignore, NULL);
63
64 if (binfo == error_mark_node)
65 return NULL_TREE;
66 else if (!binfo)
67 error_not_base_type (base, type);
68 return binfo;
69 }
70
71 /* According to ARM $7.1.6, "A `const' object may be initialized, but its
72 value may not be changed thereafter. Thus, we emit hard errors for these,
73 rather than just pedwarns. If `SOFT' is 1, then we just pedwarn. (For
74 example, conversions to references.) */
75
76 void
77 readonly_error (arg, string, soft)
78 tree arg;
79 const char *string;
80 int soft;
81 {
82 const char *fmt;
83 void (*fn) PARAMS ((const char *, ...));
84
85 if (soft)
86 fn = pedwarn;
87 else
88 fn = error;
89
90 if (TREE_CODE (arg) == COMPONENT_REF)
91 {
92 if (TYPE_READONLY (TREE_TYPE (TREE_OPERAND (arg, 0))))
93 fmt = "%s of data-member `%D' in read-only structure";
94 else
95 fmt = "%s of read-only data-member `%D'";
96 (*fn) (fmt, string, TREE_OPERAND (arg, 1));
97 }
98 else if (TREE_CODE (arg) == VAR_DECL)
99 {
100 if (DECL_LANG_SPECIFIC (arg)
101 && DECL_IN_AGGR_P (arg)
102 && !TREE_STATIC (arg))
103 fmt = "%s of constant field `%D'";
104 else
105 fmt = "%s of read-only variable `%D'";
106 (*fn) (fmt, string, arg);
107 }
108 else if (TREE_CODE (arg) == PARM_DECL)
109 (*fn) ("%s of read-only parameter `%D'", string, arg);
110 else if (TREE_CODE (arg) == INDIRECT_REF
111 && TREE_CODE (TREE_TYPE (TREE_OPERAND (arg, 0))) == REFERENCE_TYPE
112 && (TREE_CODE (TREE_OPERAND (arg, 0)) == VAR_DECL
113 || TREE_CODE (TREE_OPERAND (arg, 0)) == PARM_DECL))
114 (*fn) ("%s of read-only reference `%D'", string, TREE_OPERAND (arg, 0));
115 else if (TREE_CODE (arg) == RESULT_DECL)
116 (*fn) ("%s of read-only named return value `%D'", string, arg);
117 else if (TREE_CODE (arg) == FUNCTION_DECL)
118 (*fn) ("%s of function `%D'", string, arg);
119 else
120 (*fn) ("%s of read-only location", string);
121 }
122
123 /* If TYPE has abstract virtual functions, issue an error about trying
124 to create an object of that type. DECL is the object declared, or
125 NULL_TREE if the declaration is unavailable. Returns 1 if an error
126 occurred; zero if all was well. */
127
128 int
129 abstract_virtuals_error (decl, type)
130 tree decl;
131 tree type;
132 {
133 tree u;
134 tree tu;
135
136 if (!CLASS_TYPE_P (type) || !CLASSTYPE_PURE_VIRTUALS (type))
137 return 0;
138
139 if (!TYPE_SIZE (type))
140 /* TYPE is being defined, and during that time
141 CLASSTYPE_PURE_VIRTUALS holds the inline friends. */
142 return 0;
143
144 u = CLASSTYPE_PURE_VIRTUALS (type);
145 if (decl)
146 {
147 if (TREE_CODE (decl) == RESULT_DECL)
148 return 0;
149
150 if (TREE_CODE (decl) == VAR_DECL)
151 error ("cannot declare variable `%D' to be of type `%T'",
152 decl, type);
153 else if (TREE_CODE (decl) == PARM_DECL)
154 error ("cannot declare parameter `%D' to be of type `%T'",
155 decl, type);
156 else if (TREE_CODE (decl) == FIELD_DECL)
157 error ("cannot declare field `%D' to be of type `%T'",
158 decl, type);
159 else if (TREE_CODE (decl) == FUNCTION_DECL
160 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
161 error ("invalid return type for member function `%#D'", decl);
162 else if (TREE_CODE (decl) == FUNCTION_DECL)
163 error ("invalid return type for function `%#D'", decl);
164 }
165 else
166 error ("cannot allocate an object of type `%T'", type);
167
168 /* Only go through this once. */
169 if (TREE_PURPOSE (u) == NULL_TREE)
170 {
171 TREE_PURPOSE (u) = error_mark_node;
172
173 error (" because the following virtual functions are abstract:");
174 for (tu = u; tu; tu = TREE_CHAIN (tu))
175 cp_error_at ("\t%#D", TREE_VALUE (tu));
176 }
177 else
178 error (" since type `%T' has abstract virtual functions", type);
179
180 return 1;
181 }
182
183 /* Print an error message for invalid use of an incomplete type.
184 VALUE is the expression that was used (or 0 if that isn't known)
185 and TYPE is the type that was invalid. */
186
187 void
188 cxx_incomplete_type_error (value, type)
189 tree value;
190 tree type;
191 {
192 int decl = 0;
193
194 /* Avoid duplicate error message. */
195 if (TREE_CODE (type) == ERROR_MARK)
196 return;
197
198 if (value != 0 && (TREE_CODE (value) == VAR_DECL
199 || TREE_CODE (value) == PARM_DECL))
200 {
201 cp_error_at ("`%D' has incomplete type", value);
202 decl = 1;
203 }
204 retry:
205 /* We must print an error message. Be clever about what it says. */
206
207 switch (TREE_CODE (type))
208 {
209 case RECORD_TYPE:
210 case UNION_TYPE:
211 case ENUMERAL_TYPE:
212 if (!decl)
213 error ("invalid use of undefined type `%#T'", type);
214 cp_error_at ("forward declaration of `%#T'", type);
215 break;
216
217 case VOID_TYPE:
218 error ("invalid use of `%T'", type);
219 break;
220
221 case ARRAY_TYPE:
222 if (TYPE_DOMAIN (type))
223 {
224 type = TREE_TYPE (type);
225 goto retry;
226 }
227 error ("invalid use of array with unspecified bounds");
228 break;
229
230 case OFFSET_TYPE:
231 bad_member:
232 error ("invalid use of member (did you forget the `&' ?)");
233 break;
234
235 case TEMPLATE_TYPE_PARM:
236 error ("invalid use of template type parameter");
237 break;
238
239 case UNKNOWN_TYPE:
240 if (value && TREE_CODE (value) == COMPONENT_REF)
241 goto bad_member;
242 else if (value && TREE_CODE (value) == ADDR_EXPR)
243 error ("address of overloaded function with no contextual type information");
244 else if (value && TREE_CODE (value) == OVERLOAD)
245 error ("overloaded function with no contextual type information");
246 else
247 error ("insufficient contextual information to determine type");
248 break;
249
250 default:
251 abort ();
252 }
253 }
254
255 \f
256 /* Perform appropriate conversions on the initial value of a variable,
257 store it in the declaration DECL,
258 and print any error messages that are appropriate.
259 If the init is invalid, store an ERROR_MARK.
260
261 C++: Note that INIT might be a TREE_LIST, which would mean that it is
262 a base class initializer for some aggregate type, hopefully compatible
263 with DECL. If INIT is a single element, and DECL is an aggregate
264 type, we silently convert INIT into a TREE_LIST, allowing a constructor
265 to be called.
266
267 If INIT is a TREE_LIST and there is no constructor, turn INIT
268 into a CONSTRUCTOR and use standard initialization techniques.
269 Perhaps a warning should be generated?
270
271 Returns value of initializer if initialization could not be
272 performed for static variable. In that case, caller must do
273 the storing. */
274
275 tree
276 store_init_value (decl, init)
277 tree decl, init;
278 {
279 register tree value, type;
280
281 /* If variable's type was invalidly declared, just ignore it. */
282
283 type = TREE_TYPE (decl);
284 if (TREE_CODE (type) == ERROR_MARK)
285 return NULL_TREE;
286
287 #if 0
288 /* This breaks arrays, and should not have any effect for other decls. */
289 /* Take care of C++ business up here. */
290 type = TYPE_MAIN_VARIANT (type);
291 #endif
292
293 if (IS_AGGR_TYPE (type))
294 {
295 if (! TYPE_HAS_TRIVIAL_INIT_REF (type)
296 && TREE_CODE (init) != CONSTRUCTOR)
297 abort ();
298
299 if (TREE_CODE (init) == TREE_LIST)
300 {
301 error ("constructor syntax used, but no constructor declared for type `%T'", type);
302 init = build_nt (CONSTRUCTOR, NULL_TREE, nreverse (init));
303 }
304 #if 0
305 if (TREE_CODE (init) == CONSTRUCTOR)
306 {
307 tree field;
308
309 /* Check that we're really an aggregate as ARM 8.4.1 defines it. */
310 if (CLASSTYPE_N_BASECLASSES (type))
311 cp_error_at ("initializer list construction invalid for derived class object `%D'", decl);
312 if (CLASSTYPE_VTBL_PTR (type))
313 cp_error_at ("initializer list construction invalid for polymorphic class object `%D'", decl);
314 if (TYPE_NEEDS_CONSTRUCTING (type))
315 {
316 cp_error_at ("initializer list construction invalid for `%D'", decl);
317 error ("due to the presence of a constructor");
318 }
319 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
320 if (TREE_PRIVATE (field) || TREE_PROTECTED (field))
321 {
322 cp_error_at ("initializer list construction invalid for `%D'", decl);
323 cp_error_at ("due to non-public access of member `%D'", field);
324 }
325 for (field = TYPE_METHODS (type); field; field = TREE_CHAIN (field))
326 if (TREE_PRIVATE (field) || TREE_PROTECTED (field))
327 {
328 cp_error_at ("initializer list construction invalid for `%D'", decl);
329 cp_error_at ("due to non-public access of member `%D'", field);
330 }
331 }
332 #endif
333 }
334 else if (TREE_CODE (init) == TREE_LIST
335 && TREE_TYPE (init) != unknown_type_node)
336 {
337 if (TREE_CODE (decl) == RESULT_DECL)
338 {
339 if (TREE_CHAIN (init))
340 {
341 warning ("comma expression used to initialize return value");
342 init = build_compound_expr (init);
343 }
344 else
345 init = TREE_VALUE (init);
346 }
347 else if (TREE_CODE (init) == TREE_LIST
348 && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
349 {
350 error ("cannot initialize arrays using this syntax");
351 return NULL_TREE;
352 }
353 else
354 {
355 /* We get here with code like `int a (2);' */
356
357 if (TREE_CHAIN (init) != NULL_TREE)
358 {
359 pedwarn ("initializer list being treated as compound expression");
360 init = build_compound_expr (init);
361 }
362 else
363 init = TREE_VALUE (init);
364 }
365 }
366
367 /* End of special C++ code. */
368
369 /* We might have already run this bracketed initializer through
370 digest_init. Don't do so again. */
371 if (TREE_CODE (init) == CONSTRUCTOR && TREE_HAS_CONSTRUCTOR (init)
372 && TREE_TYPE (init)
373 && TYPE_MAIN_VARIANT (TREE_TYPE (init)) == TYPE_MAIN_VARIANT (type))
374 value = init;
375 else
376 /* Digest the specified initializer into an expression. */
377 value = digest_init (type, init, (tree *) 0);
378
379 /* Store the expression if valid; else report error. */
380
381 if (TREE_CODE (value) == ERROR_MARK)
382 ;
383 /* Other code expects that initializers for objects of types that need
384 constructing never make it into DECL_INITIAL, and passes 'init' to
385 build_aggr_init without checking DECL_INITIAL. So just return. */
386 else if (TYPE_NEEDS_CONSTRUCTING (type))
387 return value;
388 else if (TREE_STATIC (decl)
389 && (! TREE_CONSTANT (value)
390 || ! initializer_constant_valid_p (value, TREE_TYPE (value))
391 #if 0
392 /* A STATIC PUBLIC int variable doesn't have to be
393 run time inited when doing pic. (mrs) */
394 /* Since ctors and dtors are the only things that can
395 reference vtables, and they are always written down
396 the vtable definition, we can leave the
397 vtables in initialized data space.
398 However, other initialized data cannot be initialized
399 this way. Instead a global file-level initializer
400 must do the job. */
401 || (flag_pic && !DECL_VIRTUAL_P (decl) && TREE_PUBLIC (decl))
402 #endif
403 ))
404
405 return value;
406 #if 0 /* No, that's C. jason 9/19/94 */
407 else
408 {
409 if (pedantic && TREE_CODE (value) == CONSTRUCTOR)
410 {
411 if (! TREE_CONSTANT (value) || ! TREE_STATIC (value))
412 pedwarn ("ISO C++ forbids non-constant aggregate initializer expressions");
413 }
414 }
415 #endif
416
417 /* Store the VALUE in DECL_INITIAL. If we're building a
418 statement-tree we will actually expand the initialization later
419 when we output this function. */
420 DECL_INITIAL (decl) = value;
421 return NULL_TREE;
422 }
423 \f
424 /* Digest the parser output INIT as an initializer for type TYPE.
425 Return a C expression of type TYPE to represent the initial value.
426
427 If TAIL is nonzero, it points to a variable holding a list of elements
428 of which INIT is the first. We update the list stored there by
429 removing from the head all the elements that we use.
430 Normally this is only one; we use more than one element only if
431 TYPE is an aggregate and INIT is not a constructor. */
432
433 tree
434 digest_init (type, init, tail)
435 tree type, init, *tail;
436 {
437 enum tree_code code = TREE_CODE (type);
438 tree element = NULL_TREE;
439 tree old_tail_contents = NULL_TREE;
440 /* Nonzero if INIT is a braced grouping, which comes in as a CONSTRUCTOR
441 tree node which has no TREE_TYPE. */
442 int raw_constructor;
443
444 /* By default, assume we use one element from a list.
445 We correct this later in the sole case where it is not true. */
446
447 if (tail)
448 {
449 old_tail_contents = *tail;
450 *tail = TREE_CHAIN (*tail);
451 }
452
453 if (init == error_mark_node || (TREE_CODE (init) == TREE_LIST
454 && TREE_VALUE (init) == error_mark_node))
455 return error_mark_node;
456
457 if (TREE_CODE (init) == ERROR_MARK)
458 /* __PRETTY_FUNCTION__'s initializer is a bogus expression inside
459 a template function. This gets substituted during instantiation. */
460 return init;
461
462 /* We must strip the outermost array type when completing the type,
463 because the its bounds might be incomplete at the moment. */
464 if (!complete_type_or_else (TREE_CODE (type) == ARRAY_TYPE
465 ? TREE_TYPE (type) : type, NULL_TREE))
466 return error_mark_node;
467
468 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
469 if (TREE_CODE (init) == NON_LVALUE_EXPR)
470 init = TREE_OPERAND (init, 0);
471
472 if (TREE_CODE (init) == CONSTRUCTOR && TREE_TYPE (init) == type)
473 return init;
474
475 raw_constructor = TREE_CODE (init) == CONSTRUCTOR && TREE_TYPE (init) == 0;
476
477 if (raw_constructor
478 && CONSTRUCTOR_ELTS (init) != 0
479 && TREE_CHAIN (CONSTRUCTOR_ELTS (init)) == 0)
480 {
481 element = TREE_VALUE (CONSTRUCTOR_ELTS (init));
482 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue. */
483 if (element && TREE_CODE (element) == NON_LVALUE_EXPR)
484 element = TREE_OPERAND (element, 0);
485 if (element == error_mark_node)
486 return element;
487 }
488
489 /* Initialization of an array of chars from a string constant
490 optionally enclosed in braces. */
491
492 if (code == ARRAY_TYPE)
493 {
494 tree typ1;
495
496 if (TREE_CODE (init) == TREE_LIST)
497 {
498 error ("initializing array with parameter list");
499 return error_mark_node;
500 }
501
502 typ1 = TYPE_MAIN_VARIANT (TREE_TYPE (type));
503 if (char_type_p (typ1)
504 && ((init && TREE_CODE (init) == STRING_CST)
505 || (element && TREE_CODE (element) == STRING_CST)))
506 {
507 tree string = element ? element : init;
508
509 if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (string)))
510 != char_type_node)
511 && TYPE_PRECISION (typ1) == BITS_PER_UNIT)
512 {
513 error ("char-array initialized from wide string");
514 return error_mark_node;
515 }
516 if ((TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (string)))
517 == char_type_node)
518 && TYPE_PRECISION (typ1) != BITS_PER_UNIT)
519 {
520 error ("int-array initialized from non-wide string");
521 return error_mark_node;
522 }
523
524 TREE_TYPE (string) = type;
525 if (TYPE_DOMAIN (type) != 0
526 && TREE_CONSTANT (TYPE_SIZE (type)))
527 {
528 register int size
529 = TREE_INT_CST_LOW (TYPE_SIZE (type));
530 size = (size + BITS_PER_UNIT - 1) / BITS_PER_UNIT;
531 /* In C it is ok to subtract 1 from the length of the string
532 because it's ok to ignore the terminating null char that is
533 counted in the length of the constant, but in C++ this would
534 be invalid. */
535 if (size < TREE_STRING_LENGTH (string))
536 pedwarn ("initializer-string for array of chars is too long");
537 }
538 return string;
539 }
540 }
541
542 /* Handle scalar types, including conversions,
543 and signature pointers and references. */
544
545 if (code == INTEGER_TYPE || code == REAL_TYPE || code == POINTER_TYPE
546 || code == ENUMERAL_TYPE || code == REFERENCE_TYPE
547 || code == BOOLEAN_TYPE || code == COMPLEX_TYPE
548 || TYPE_PTRMEMFUNC_P (type))
549 {
550 if (raw_constructor)
551 {
552 if (element == 0)
553 {
554 error ("initializer for scalar variable requires one element");
555 return error_mark_node;
556 }
557 init = element;
558 }
559 while (TREE_CODE (init) == CONSTRUCTOR && TREE_HAS_CONSTRUCTOR (init))
560 {
561 pedwarn ("braces around scalar initializer for `%T'", type);
562 init = CONSTRUCTOR_ELTS (init);
563 if (TREE_CHAIN (init))
564 pedwarn ("ignoring extra initializers for `%T'", type);
565 init = TREE_VALUE (init);
566 }
567
568 return convert_for_initialization (0, type, init, LOOKUP_NORMAL,
569 "initialization", NULL_TREE, 0);
570 }
571
572 /* Come here only for records and arrays (and unions with constructors). */
573
574 if (COMPLETE_TYPE_P (type) && ! TREE_CONSTANT (TYPE_SIZE (type)))
575 {
576 error ("variable-sized object of type `%T' may not be initialized",
577 type);
578 return error_mark_node;
579 }
580
581 if (code == ARRAY_TYPE || code == VECTOR_TYPE || IS_AGGR_TYPE_CODE (code))
582 {
583 if (raw_constructor && TYPE_NON_AGGREGATE_CLASS (type)
584 && TREE_HAS_CONSTRUCTOR (init))
585 {
586 error ("subobject of type `%T' must be initialized by constructor, not by `%E'",
587 type, init);
588 return error_mark_node;
589 }
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. */;
595 else if (tail != 0)
596 {
597 *tail = old_tail_contents;
598 return process_init_constructor (type, 0, tail);
599 }
600
601 if (code != ARRAY_TYPE)
602 {
603 int flags = LOOKUP_NORMAL;
604 /* Initialization from { } is copy-initialization. */
605 if (tail)
606 flags |= LOOKUP_ONLYCONVERTING;
607
608 return convert_for_initialization (NULL_TREE, type, init, flags,
609 "initialization", NULL_TREE, 0);
610 }
611 }
612
613 error ("invalid initializer");
614 return error_mark_node;
615 }
616 \f
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.
620
621 If INIT is specified, it is a CONSTRUCTOR node which is specifically
622 and solely for initializing this datum.
623
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.
627
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. */
631
632 static tree
633 process_init_constructor (type, init, elts)
634 tree type, init, *elts;
635 {
636 register tree tail;
637 /* List of the elements of the result constructor,
638 in reverse order. */
639 register tree members = NULL;
640 register tree next1;
641 tree result;
642 int allconstant = 1;
643 int allsimple = 1;
644 int erroneous = 0;
645
646 /* Make TAIL be the list of elements to use for the initialization,
647 no matter how the data was given to us. */
648
649 if (elts)
650 {
651 if (warn_missing_braces)
652 warning ("aggregate has a partly bracketed initializer");
653 tail = *elts;
654 }
655 else
656 tail = CONSTRUCTOR_ELTS (init);
657
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. */
661
662 if (TREE_CODE (type) == ARRAY_TYPE || TREE_CODE (type) == VECTOR_TYPE)
663 {
664 register long len;
665 register int i;
666
667 if (TREE_CODE (type) == ARRAY_TYPE)
668 {
669 tree domain = TYPE_DOMAIN (type);
670 if (domain)
671 len = (TREE_INT_CST_LOW (TYPE_MAX_VALUE (domain))
672 - TREE_INT_CST_LOW (TYPE_MIN_VALUE (domain))
673 + 1);
674 else
675 len = -1; /* Take as many as there are */
676 }
677 else
678 {
679 /* Vectors are like simple fixed-size arrays. */
680 len = TYPE_VECTOR_SUBPARTS (type);
681 }
682
683 for (i = 0; len < 0 || i < len; i++)
684 {
685 if (tail)
686 {
687 if (TREE_PURPOSE (tail)
688 && (TREE_CODE (TREE_PURPOSE (tail)) != INTEGER_CST
689 || compare_tree_int (TREE_PURPOSE (tail), i) != 0))
690 sorry ("non-trivial labeled initializers");
691
692 if (TREE_VALUE (tail) != 0)
693 {
694 tree tail1 = tail;
695 next1 = digest_init (TREE_TYPE (type),
696 TREE_VALUE (tail), &tail1);
697 if (next1 == error_mark_node)
698 return next1;
699 my_friendly_assert
700 (same_type_ignoring_top_level_qualifiers_p
701 (TREE_TYPE (type), TREE_TYPE (next1)),
702 981123);
703 my_friendly_assert (tail1 == 0
704 || TREE_CODE (tail1) == TREE_LIST, 319);
705 if (tail == tail1 && len < 0)
706 {
707 error ("non-empty initializer for array of empty elements");
708 /* Just ignore what we were supposed to use. */
709 tail1 = NULL_TREE;
710 }
711 tail = tail1;
712 }
713 else
714 {
715 next1 = error_mark_node;
716 tail = TREE_CHAIN (tail);
717 }
718 }
719 else if (len < 0)
720 /* We're done. */
721 break;
722 else if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (type)))
723 {
724 /* If this type needs constructors run for
725 default-initialization, we can't rely on the backend to do it
726 for us, so build up TARGET_EXPRs. If the type in question is
727 a class, just build one up; if it's an array, recurse. */
728
729 if (IS_AGGR_TYPE (TREE_TYPE (type)))
730 next1 = build_functional_cast (TREE_TYPE (type), NULL_TREE);
731 else
732 next1 = build (CONSTRUCTOR, NULL_TREE, NULL_TREE, NULL_TREE);
733 next1 = digest_init (TREE_TYPE (type), next1, 0);
734 }
735 else
736 /* The default zero-initialization is fine for us; don't
737 add anything to the CONSTRUCTOR. */
738 break;
739
740 if (next1 == error_mark_node)
741 erroneous = 1;
742 else if (!TREE_CONSTANT (next1))
743 allconstant = 0;
744 else if (! initializer_constant_valid_p (next1, TREE_TYPE (next1)))
745 allsimple = 0;
746 members = tree_cons (size_int (i), next1, members);
747 }
748 }
749 else if (TREE_CODE (type) == RECORD_TYPE)
750 {
751 register tree field;
752
753 if (tail)
754 {
755 if (TYPE_USES_VIRTUAL_BASECLASSES (type))
756 {
757 sorry ("initializer list for object of class with virtual base classes");
758 return error_mark_node;
759 }
760
761 if (TYPE_BINFO_BASETYPES (type))
762 {
763 sorry ("initializer list for object of class with base classes");
764 return error_mark_node;
765 }
766
767 if (TYPE_POLYMORPHIC_P (type))
768 {
769 sorry ("initializer list for object using virtual functions");
770 return error_mark_node;
771 }
772 }
773
774 for (field = TYPE_FIELDS (type); field;
775 field = TREE_CHAIN (field))
776 {
777 if (! DECL_NAME (field) && DECL_C_BIT_FIELD (field))
778 {
779 members = tree_cons (field, integer_zero_node, members);
780 continue;
781 }
782
783 if (TREE_CODE (field) != FIELD_DECL)
784 continue;
785
786 if (tail)
787 {
788 if (TREE_PURPOSE (tail)
789 && TREE_PURPOSE (tail) != field
790 && TREE_PURPOSE (tail) != DECL_NAME (field))
791 sorry ("non-trivial labeled initializers");
792
793 if (TREE_VALUE (tail) != 0)
794 {
795 tree tail1 = tail;
796
797 next1 = digest_init (TREE_TYPE (field),
798 TREE_VALUE (tail), &tail1);
799 my_friendly_assert (tail1 == 0
800 || TREE_CODE (tail1) == TREE_LIST, 320);
801 tail = tail1;
802 }
803 else
804 {
805 next1 = error_mark_node;
806 tail = TREE_CHAIN (tail);
807 }
808 }
809 else if (TYPE_NEEDS_CONSTRUCTING (TREE_TYPE (field)))
810 {
811 /* If this type needs constructors run for
812 default-initialization, we can't rely on the backend to do it
813 for us, so build up TARGET_EXPRs. If the type in question is
814 a class, just build one up; if it's an array, recurse. */
815
816 if (IS_AGGR_TYPE (TREE_TYPE (field)))
817 next1 = build_functional_cast (TREE_TYPE (field),
818 NULL_TREE);
819 else
820 {
821 next1 = build (CONSTRUCTOR, NULL_TREE, NULL_TREE,
822 NULL_TREE);
823 if (init)
824 TREE_HAS_CONSTRUCTOR (next1)
825 = TREE_HAS_CONSTRUCTOR (init);
826 }
827 next1 = digest_init (TREE_TYPE (field), next1, 0);
828
829 /* Warn when some struct elements are implicitly initialized. */
830 if (extra_warnings
831 && (!init || TREE_HAS_CONSTRUCTOR (init)))
832 warning ("missing initializer for member `%D'", field);
833 }
834 else
835 {
836 if (TREE_READONLY (field))
837 error ("uninitialized const member `%D'", field);
838 else if (TYPE_LANG_SPECIFIC (TREE_TYPE (field))
839 && CLASSTYPE_READONLY_FIELDS_NEED_INIT (TREE_TYPE (field)))
840 error ("member `%D' with uninitialized const fields",
841 field);
842 else if (TREE_CODE (TREE_TYPE (field)) == REFERENCE_TYPE)
843 error ("member `%D' is uninitialized reference", field);
844
845 /* Warn when some struct elements are implicitly initialized
846 to zero. */
847 if (extra_warnings
848 && (!init || TREE_HAS_CONSTRUCTOR (init)))
849 warning ("missing initializer for member `%D'", field);
850
851 /* The default zero-initialization is fine for us; don't
852 add anything to the CONSTRUCTOR. */
853 continue;
854 }
855
856 if (next1 == error_mark_node)
857 erroneous = 1;
858 else if (!TREE_CONSTANT (next1))
859 allconstant = 0;
860 else if (! initializer_constant_valid_p (next1, TREE_TYPE (next1)))
861 allsimple = 0;
862 members = tree_cons (field, next1, members);
863 }
864 }
865 else if (TREE_CODE (type) == UNION_TYPE
866 /* If the initializer was empty, use default zero initialization. */
867 && tail)
868 {
869 register tree field = TYPE_FIELDS (type);
870
871 /* Find the first named field. ANSI decided in September 1990
872 that only named fields count here. */
873 while (field && (DECL_NAME (field) == 0
874 || TREE_CODE (field) != FIELD_DECL))
875 field = TREE_CHAIN (field);
876
877 /* If this element specifies a field, initialize via that field. */
878 if (TREE_PURPOSE (tail) != NULL_TREE)
879 {
880 int win = 0;
881
882 if (TREE_CODE (TREE_PURPOSE (tail)) == FIELD_DECL)
883 /* Handle the case of a call by build_c_cast. */
884 field = TREE_PURPOSE (tail), win = 1;
885 else if (TREE_CODE (TREE_PURPOSE (tail)) != IDENTIFIER_NODE)
886 error ("index value instead of field name in union initializer");
887 else
888 {
889 tree temp;
890 for (temp = TYPE_FIELDS (type);
891 temp;
892 temp = TREE_CHAIN (temp))
893 if (DECL_NAME (temp) == TREE_PURPOSE (tail))
894 break;
895 if (temp)
896 field = temp, win = 1;
897 else
898 error ("no field `%D' in union being initialized",
899 TREE_PURPOSE (tail));
900 }
901 if (!win)
902 TREE_VALUE (tail) = error_mark_node;
903 }
904 else if (field == 0)
905 {
906 error ("union `%T' with no named members cannot be initialized",
907 type);
908 TREE_VALUE (tail) = error_mark_node;
909 }
910
911 if (TREE_VALUE (tail) != 0)
912 {
913 tree tail1 = tail;
914
915 next1 = digest_init (TREE_TYPE (field),
916 TREE_VALUE (tail), &tail1);
917 if (tail1 != 0 && TREE_CODE (tail1) != TREE_LIST)
918 abort ();
919 tail = tail1;
920 }
921 else
922 {
923 next1 = error_mark_node;
924 tail = TREE_CHAIN (tail);
925 }
926
927 if (next1 == error_mark_node)
928 erroneous = 1;
929 else if (!TREE_CONSTANT (next1))
930 allconstant = 0;
931 else if (initializer_constant_valid_p (next1, TREE_TYPE (next1)) == 0)
932 allsimple = 0;
933 members = tree_cons (field, next1, members);
934 }
935
936 /* If arguments were specified as a list, just remove the ones we used. */
937 if (elts)
938 *elts = tail;
939 /* If arguments were specified as a constructor,
940 complain unless we used all the elements of the constructor. */
941 else if (tail)
942 pedwarn ("excess elements in aggregate initializer");
943
944 if (erroneous)
945 return error_mark_node;
946
947 result = build (CONSTRUCTOR, type, NULL_TREE, nreverse (members));
948 if (init)
949 TREE_HAS_CONSTRUCTOR (result) = TREE_HAS_CONSTRUCTOR (init);
950 if (allconstant) TREE_CONSTANT (result) = 1;
951 if (allconstant && allsimple) TREE_STATIC (result) = 1;
952 return result;
953 }
954 \f
955 /* Given a structure or union value DATUM, construct and return
956 the structure or union component which results from narrowing
957 that value to the base specified in BASETYPE. For example, given the
958 hierarchy
959
960 class L { int ii; };
961 class A : L { ... };
962 class B : L { ... };
963 class C : A, B { ... };
964
965 and the declaration
966
967 C x;
968
969 then the expression
970
971 x.A::ii refers to the ii member of the L part of
972 the A part of the C object named by X. In this case,
973 DATUM would be x, and BASETYPE would be A.
974
975 I used to think that this was nonconformant, that the standard specified
976 that first we look up ii in A, then convert x to an L& and pull out the
977 ii part. But in fact, it does say that we convert x to an A&; A here
978 is known as the "naming class". (jason 2000-12-19)
979
980 BINFO_P points to a variable initialized either to NULL_TREE or to the
981 binfo for the specific base subobject we want to convert to. */
982
983 tree
984 build_scoped_ref (datum, basetype, binfo_p)
985 tree datum;
986 tree basetype;
987 tree *binfo_p;
988 {
989 tree binfo;
990
991 if (datum == error_mark_node)
992 return error_mark_node;
993 if (*binfo_p)
994 binfo = *binfo_p;
995 else
996 binfo = lookup_base (TREE_TYPE (datum), basetype, ba_check, NULL);
997
998 if (!binfo || binfo == error_mark_node)
999 {
1000 *binfo_p = NULL_TREE;
1001 if (!binfo)
1002 error_not_base_type (basetype, TREE_TYPE (datum));
1003 return error_mark_node;
1004 }
1005
1006 *binfo_p = binfo;
1007 return build_base_path (PLUS_EXPR, datum, binfo, 1);
1008 }
1009
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. */
1016
1017 tree
1018 build_x_arrow (datum)
1019 tree datum;
1020 {
1021 tree types_memoized = NULL_TREE;
1022 register tree rval = datum;
1023 tree type = TREE_TYPE (rval);
1024 tree last_rval = NULL_TREE;
1025
1026 if (type == error_mark_node)
1027 return error_mark_node;
1028
1029 if (processing_template_decl)
1030 return build_min_nt (ARROW_EXPR, rval);
1031
1032 if (TREE_CODE (rval) == OFFSET_REF)
1033 {
1034 rval = resolve_offset_ref (datum);
1035 type = TREE_TYPE (rval);
1036 }
1037
1038 if (TREE_CODE (type) == REFERENCE_TYPE)
1039 {
1040 rval = convert_from_reference (rval);
1041 type = TREE_TYPE (rval);
1042 }
1043
1044 if (IS_AGGR_TYPE (type))
1045 {
1046 while ((rval = build_opfncall (COMPONENT_REF, LOOKUP_NORMAL, rval,
1047 NULL_TREE, NULL_TREE)))
1048 {
1049 if (rval == error_mark_node)
1050 return error_mark_node;
1051
1052 if (value_member (TREE_TYPE (rval), types_memoized))
1053 {
1054 error ("circular pointer delegation detected");
1055 return error_mark_node;
1056 }
1057 else
1058 {
1059 types_memoized = tree_cons (NULL_TREE, TREE_TYPE (rval),
1060 types_memoized);
1061 }
1062 last_rval = rval;
1063 }
1064
1065 if (last_rval == NULL_TREE)
1066 {
1067 error ("base operand of `->' has non-pointer type `%T'", type);
1068 return error_mark_node;
1069 }
1070
1071 if (TREE_CODE (TREE_TYPE (last_rval)) == REFERENCE_TYPE)
1072 last_rval = convert_from_reference (last_rval);
1073 }
1074 else
1075 last_rval = default_conversion (rval);
1076
1077 if (TREE_CODE (TREE_TYPE (last_rval)) == POINTER_TYPE)
1078 return build_indirect_ref (last_rval, NULL);
1079
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;
1085 }
1086
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.
1091
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. */
1098
1099 tree
1100 build_m_component_ref (datum, component)
1101 tree datum, component;
1102 {
1103 tree type;
1104 tree objtype;
1105 tree field_type;
1106 int type_quals;
1107 tree binfo;
1108
1109 if (processing_template_decl)
1110 return build_min_nt (DOTSTAR_EXPR, datum, component);
1111
1112 datum = decay_conversion (datum);
1113
1114 if (datum == error_mark_node || component == error_mark_node)
1115 return error_mark_node;
1116
1117 objtype = TYPE_MAIN_VARIANT (TREE_TYPE (datum));
1118
1119 if (TYPE_PTRMEMFUNC_P (TREE_TYPE (component)))
1120 {
1121 type = TREE_TYPE (TYPE_PTRMEMFUNC_FN_TYPE (TREE_TYPE (component)));
1122 field_type = type;
1123 }
1124 else if (TYPE_PTRMEM_P (TREE_TYPE (component)))
1125 {
1126 type = TREE_TYPE (TREE_TYPE (component));
1127 field_type = TREE_TYPE (type);
1128
1129 /* Compute the type of the field, as described in [expr.ref]. */
1130 type_quals = TYPE_UNQUALIFIED;
1131 if (TREE_CODE (field_type) == REFERENCE_TYPE)
1132 /* The standard says that the type of the result should be the
1133 type referred to by the reference. But for now, at least,
1134 we do the conversion from reference type later. */
1135 ;
1136 else
1137 {
1138 type_quals = (cp_type_quals (field_type)
1139 | cp_type_quals (TREE_TYPE (datum)));
1140
1141 /* There's no such thing as a mutable pointer-to-member, so
1142 we don't need to deal with that here like we do in
1143 build_component_ref. */
1144 field_type = cp_build_qualified_type (field_type, type_quals);
1145 }
1146 }
1147 else
1148 {
1149 error ("`%E' cannot be used as a member pointer, since it is of type `%T'",
1150 component, TREE_TYPE (component));
1151 return error_mark_node;
1152 }
1153
1154 if (! IS_AGGR_TYPE (objtype))
1155 {
1156 error ("cannot apply member pointer `%E' to `%E', which is of non-aggregate type `%T'",
1157 component, datum, objtype);
1158 return error_mark_node;
1159 }
1160
1161 binfo = lookup_base (objtype, TYPE_METHOD_BASETYPE (type),
1162 ba_check, NULL);
1163 if (!binfo)
1164 {
1165 error ("member type `%T::' incompatible with object type `%T'",
1166 TYPE_METHOD_BASETYPE (type), objtype);
1167 return error_mark_node;
1168 }
1169 else if (binfo == error_mark_node)
1170 return error_mark_node;
1171
1172 component = build (OFFSET_REF, field_type, datum, component);
1173 if (TREE_CODE (type) == OFFSET_TYPE)
1174 component = resolve_offset_ref (component);
1175 return component;
1176 }
1177
1178 /* Return a tree node for the expression TYPENAME '(' PARMS ')'. */
1179
1180 tree
1181 build_functional_cast (exp, parms)
1182 tree exp;
1183 tree parms;
1184 {
1185 /* This is either a call to a constructor,
1186 or a C cast in C++'s `functional' notation. */
1187 tree type;
1188
1189 if (exp == error_mark_node || parms == error_mark_node)
1190 return error_mark_node;
1191
1192 if (TREE_CODE (exp) == IDENTIFIER_NODE)
1193 {
1194 if (IDENTIFIER_HAS_TYPE_VALUE (exp))
1195 /* Either an enum or an aggregate type. */
1196 type = IDENTIFIER_TYPE_VALUE (exp);
1197 else
1198 {
1199 type = lookup_name (exp, 1);
1200 if (!type || TREE_CODE (type) != TYPE_DECL)
1201 {
1202 error ("`%T' fails to be a typedef or built-in type", exp);
1203 return error_mark_node;
1204 }
1205 type = TREE_TYPE (type);
1206 }
1207 }
1208 else if (TREE_CODE (exp) == TYPE_DECL)
1209 type = TREE_TYPE (exp);
1210 else
1211 type = exp;
1212
1213 if (processing_template_decl)
1214 return build_min (CAST_EXPR, type, parms);
1215
1216 if (! IS_AGGR_TYPE (type))
1217 {
1218 /* this must build a C cast */
1219 if (parms == NULL_TREE)
1220 parms = integer_zero_node;
1221 else
1222 {
1223 if (TREE_CHAIN (parms) != NULL_TREE)
1224 pedwarn ("initializer list being treated as compound expression");
1225 parms = build_compound_expr (parms);
1226 }
1227
1228 return build_c_cast (type, parms);
1229 }
1230
1231 /* Prepare to evaluate as a call to a constructor. If this expression
1232 is actually used, for example,
1233
1234 return X (arg1, arg2, ...);
1235
1236 then the slot being initialized will be filled in. */
1237
1238 if (!complete_type_or_else (type, NULL_TREE))
1239 return error_mark_node;
1240 if (abstract_virtuals_error (NULL_TREE, type))
1241 return error_mark_node;
1242
1243 if (parms && TREE_CHAIN (parms) == NULL_TREE)
1244 return build_c_cast (type, TREE_VALUE (parms));
1245
1246 /* We need to zero-initialize POD types. Let's do that for everything
1247 that doesn't need a constructor. */
1248 if (parms == NULL_TREE && !TYPE_NEEDS_CONSTRUCTING (type)
1249 && TYPE_HAS_DEFAULT_CONSTRUCTOR (type))
1250 {
1251 exp = build (CONSTRUCTOR, type, NULL_TREE, NULL_TREE);
1252 return get_target_expr (exp);
1253 }
1254
1255 exp = build_method_call (NULL_TREE, complete_ctor_identifier, parms,
1256 TYPE_BINFO (type), LOOKUP_NORMAL);
1257
1258 if (exp == error_mark_node)
1259 return error_mark_node;
1260
1261 return build_cplus_new (type, exp);
1262 }
1263 \f
1264
1265 /* Complain about defining new types in inappropriate places. We give an
1266 exception for C-style casts, to accommodate GNU C stylings. */
1267
1268 void
1269 check_for_new_type (string, inptree)
1270 const char *string;
1271 flagged_type_tree inptree;
1272 {
1273 if (inptree.new_type_flag
1274 && (pedantic || strcmp (string, "cast") != 0))
1275 pedwarn ("ISO C++ forbids defining types within %s", string);
1276 }
1277
1278 /* Add new exception specifier SPEC, to the LIST we currently have.
1279 If it's already in LIST then do nothing.
1280 Moan if it's bad and we're allowed to. COMPLAIN < 0 means we
1281 know what we're doing. */
1282
1283 tree
1284 add_exception_specifier (list, spec, complain)
1285 tree list, spec;
1286 int complain;
1287 {
1288 int ok;
1289 tree core = spec;
1290 int is_ptr;
1291
1292 if (spec == error_mark_node)
1293 return list;
1294
1295 my_friendly_assert (spec && (!list || TREE_VALUE (list)), 19990317);
1296
1297 /* [except.spec] 1, type in an exception specifier shall not be
1298 incomplete, or pointer or ref to incomplete other than pointer
1299 to cv void. */
1300 is_ptr = TREE_CODE (core) == POINTER_TYPE;
1301 if (is_ptr || TREE_CODE (core) == REFERENCE_TYPE)
1302 core = TREE_TYPE (core);
1303 if (complain < 0)
1304 ok = 1;
1305 else if (VOID_TYPE_P (core))
1306 ok = is_ptr;
1307 else if (TREE_CODE (core) == TEMPLATE_TYPE_PARM)
1308 ok = 1;
1309 else if (processing_template_decl)
1310 ok = 1;
1311 else
1312 ok = COMPLETE_TYPE_P (complete_type (core));
1313
1314 if (ok)
1315 {
1316 tree probe;
1317
1318 for (probe = list; probe; probe = TREE_CHAIN (probe))
1319 if (same_type_p (TREE_VALUE (probe), spec))
1320 break;
1321 if (!probe)
1322 {
1323 spec = build_tree_list (NULL_TREE, spec);
1324 TREE_CHAIN (spec) = list;
1325 list = spec;
1326 }
1327 }
1328 else if (complain)
1329 cxx_incomplete_type_error (NULL_TREE, core);
1330 return list;
1331 }
1332
1333 /* Combine the two exceptions specifier lists LIST and ADD, and return
1334 their union. */
1335
1336 tree
1337 merge_exception_specifiers (list, add)
1338 tree list, add;
1339 {
1340 if (!list || !add)
1341 return NULL_TREE;
1342 else if (!TREE_VALUE (list))
1343 return add;
1344 else if (!TREE_VALUE (add))
1345 return list;
1346 else
1347 {
1348 tree orig_list = list;
1349
1350 for (; add; add = TREE_CHAIN (add))
1351 {
1352 tree spec = TREE_VALUE (add);
1353 tree probe;
1354
1355 for (probe = orig_list; probe; probe = TREE_CHAIN (probe))
1356 if (same_type_p (TREE_VALUE (probe), spec))
1357 break;
1358 if (!probe)
1359 {
1360 spec = build_tree_list (NULL_TREE, spec);
1361 TREE_CHAIN (spec) = list;
1362 list = spec;
1363 }
1364 }
1365 }
1366 return list;
1367 }