Cleanup leftover libs.
[dragonfly.git] / contrib / gcc-4.7 / gcc / cp / typeck2.c
blobce6de1678a0265963c0129d3ee7648a06fc3aa2e
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, 2005, 2006, 2007, 2008, 2009, 2010, 2011
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 3, 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 COPYING3. If not see
22 <http://www.gnu.org/licenses/>. */
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 #include "config.h"
31 #include "system.h"
32 #include "coretypes.h"
33 #include "tm.h"
34 #include "tree.h"
35 #include "intl.h"
36 #include "cp-tree.h"
37 #include "flags.h"
38 #include "output.h"
39 #include "diagnostic-core.h"
41 static tree
42 process_init_constructor (tree type, tree init, tsubst_flags_t complain);
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 (tree basetype, tree type)
51 if (TREE_CODE (basetype) == FUNCTION_DECL)
52 basetype = DECL_CONTEXT (basetype);
53 error ("type %qT is not a base type for type %qT", basetype, type);
54 return error_mark_node;
57 tree
58 binfo_or_else (tree base, tree type)
60 tree binfo = lookup_base (type, base, ba_unique, NULL);
62 if (binfo == error_mark_node)
63 return NULL_TREE;
64 else if (!binfo)
65 error_not_base_type (base, type);
66 return binfo;
69 /* According to ARM $7.1.6, "A `const' object may be initialized, but its
70 value may not be changed thereafter. */
72 void
73 cxx_readonly_error (tree arg, enum lvalue_use errstring)
76 /* This macro is used to emit diagnostics to ensure that all format
77 strings are complete sentences, visible to gettext and checked at
78 compile time. */
80 #define ERROR_FOR_ASSIGNMENT(AS, ASM, IN, DE, ARG) \
81 do { \
82 switch (errstring) \
83 { \
84 case lv_assign: \
85 error(AS, ARG); \
86 break; \
87 case lv_asm: \
88 error(ASM, ARG); \
89 break; \
90 case lv_increment: \
91 error (IN, ARG); \
92 break; \
93 case lv_decrement: \
94 error (DE, ARG); \
95 break; \
96 default: \
97 gcc_unreachable (); \
98 } \
99 } while (0)
101 /* Handle C++-specific things first. */
103 if (TREE_CODE (arg) == VAR_DECL
104 && DECL_LANG_SPECIFIC (arg)
105 && DECL_IN_AGGR_P (arg)
106 && !TREE_STATIC (arg))
107 ERROR_FOR_ASSIGNMENT (G_("assignment of "
108 "constant field %qD"),
109 G_("constant field %qD "
110 "used as %<asm%> output"),
111 G_("increment of "
112 "constant field %qD"),
113 G_("decrement of "
114 "constant field %qD"),
115 arg);
116 else if (TREE_CODE (arg) == INDIRECT_REF
117 && TREE_CODE (TREE_TYPE (TREE_OPERAND (arg, 0))) == REFERENCE_TYPE
118 && (TREE_CODE (TREE_OPERAND (arg, 0)) == VAR_DECL
119 || TREE_CODE (TREE_OPERAND (arg, 0)) == PARM_DECL))
120 ERROR_FOR_ASSIGNMENT (G_("assignment of "
121 "read-only reference %qD"),
122 G_("read-only reference %qD "
123 "used as %<asm%> output"),
124 G_("increment of "
125 "read-only reference %qD"),
126 G_("decrement of "
127 "read-only reference %qD"),
128 TREE_OPERAND (arg, 0));
129 else
130 readonly_error (arg, errstring);
134 /* Structure that holds information about declarations whose type was
135 incomplete and we could not check whether it was abstract or not. */
137 struct GTY((chain_next ("%h.next"))) pending_abstract_type {
138 /* Declaration which we are checking for abstractness. It is either
139 a DECL node, or an IDENTIFIER_NODE if we do not have a full
140 declaration available. */
141 tree decl;
143 /* Type which will be checked for abstractness. */
144 tree type;
146 /* Position of the declaration. This is only needed for IDENTIFIER_NODEs,
147 because DECLs already carry locus information. */
148 location_t locus;
150 /* Link to the next element in list. */
151 struct pending_abstract_type* next;
155 /* Compute the hash value of the node VAL. This function is used by the
156 hash table abstract_pending_vars. */
158 static hashval_t
159 pat_calc_hash (const void* val)
161 const struct pending_abstract_type *pat =
162 (const struct pending_abstract_type *) val;
163 return (hashval_t) TYPE_UID (pat->type);
167 /* Compare node VAL1 with the type VAL2. This function is used by the
168 hash table abstract_pending_vars. */
170 static int
171 pat_compare (const void* val1, const void* val2)
173 const struct pending_abstract_type *const pat1 =
174 (const struct pending_abstract_type *) val1;
175 const_tree const type2 = (const_tree)val2;
177 return (pat1->type == type2);
180 /* Hash table that maintains pending_abstract_type nodes, for which we still
181 need to check for type abstractness. The key of the table is the type
182 of the declaration. */
183 static GTY ((param_is (struct pending_abstract_type)))
184 htab_t abstract_pending_vars = NULL;
187 /* This function is called after TYPE is completed, and will check if there
188 are pending declarations for which we still need to verify the abstractness
189 of TYPE, and emit a diagnostic (through abstract_virtuals_error) if TYPE
190 turned out to be incomplete. */
192 void
193 complete_type_check_abstract (tree type)
195 void **slot;
196 struct pending_abstract_type *pat;
197 location_t cur_loc = input_location;
199 gcc_assert (COMPLETE_TYPE_P (type));
201 if (!abstract_pending_vars)
202 return;
204 /* Retrieve the list of pending declarations for this type. */
205 slot = htab_find_slot_with_hash (abstract_pending_vars, type,
206 (hashval_t)TYPE_UID (type), NO_INSERT);
207 if (!slot)
208 return;
209 pat = (struct pending_abstract_type*)*slot;
210 gcc_assert (pat);
212 /* If the type is not abstract, do not do anything. */
213 if (CLASSTYPE_PURE_VIRTUALS (type))
215 struct pending_abstract_type *prev = 0, *next;
217 /* Reverse the list to emit the errors in top-down order. */
218 for (; pat; pat = next)
220 next = pat->next;
221 pat->next = prev;
222 prev = pat;
224 pat = prev;
226 /* Go through the list, and call abstract_virtuals_error for each
227 element: it will issue a diagnostic if the type is abstract. */
228 while (pat)
230 gcc_assert (type == pat->type);
232 /* Tweak input_location so that the diagnostic appears at the correct
233 location. Notice that this is only needed if the decl is an
234 IDENTIFIER_NODE. */
235 input_location = pat->locus;
236 abstract_virtuals_error (pat->decl, pat->type);
237 pat = pat->next;
241 htab_clear_slot (abstract_pending_vars, slot);
243 input_location = cur_loc;
247 /* If TYPE has abstract virtual functions, issue an error about trying
248 to create an object of that type. DECL is the object declared, or
249 NULL_TREE if the declaration is unavailable. Returns 1 if an error
250 occurred; zero if all was well. */
253 abstract_virtuals_error_sfinae (tree decl, tree type, tsubst_flags_t complain)
255 VEC(tree,gc) *pure;
257 /* This function applies only to classes. Any other entity can never
258 be abstract. */
259 if (!CLASS_TYPE_P (type))
260 return 0;
261 type = TYPE_MAIN_VARIANT (type);
263 /* If the type is incomplete, we register it within a hash table,
264 so that we can check again once it is completed. This makes sense
265 only for objects for which we have a declaration or at least a
266 name. */
267 if (!COMPLETE_TYPE_P (type))
269 void **slot;
270 struct pending_abstract_type *pat;
272 gcc_assert (!decl || DECL_P (decl)
273 || TREE_CODE (decl) == IDENTIFIER_NODE);
275 if (!abstract_pending_vars)
276 abstract_pending_vars = htab_create_ggc (31, &pat_calc_hash,
277 &pat_compare, NULL);
279 slot = htab_find_slot_with_hash (abstract_pending_vars, type,
280 (hashval_t)TYPE_UID (type), INSERT);
282 pat = ggc_alloc_pending_abstract_type ();
283 pat->type = type;
284 pat->decl = decl;
285 pat->locus = ((decl && DECL_P (decl))
286 ? DECL_SOURCE_LOCATION (decl)
287 : input_location);
289 pat->next = (struct pending_abstract_type *) *slot;
290 *slot = pat;
292 return 0;
295 if (!TYPE_SIZE (type))
296 /* TYPE is being defined, and during that time
297 CLASSTYPE_PURE_VIRTUALS holds the inline friends. */
298 return 0;
300 pure = CLASSTYPE_PURE_VIRTUALS (type);
301 if (!pure)
302 return 0;
304 if (!(complain & tf_error))
305 return 1;
307 if (decl)
309 if (TREE_CODE (decl) == VAR_DECL)
310 error ("cannot declare variable %q+D to be of abstract "
311 "type %qT", decl, type);
312 else if (TREE_CODE (decl) == PARM_DECL)
313 error ("cannot declare parameter %q+D to be of abstract type %qT",
314 decl, type);
315 else if (TREE_CODE (decl) == FIELD_DECL)
316 error ("cannot declare field %q+D to be of abstract type %qT",
317 decl, type);
318 else if (TREE_CODE (decl) == FUNCTION_DECL
319 && TREE_CODE (TREE_TYPE (decl)) == METHOD_TYPE)
320 error ("invalid abstract return type for member function %q+#D", decl);
321 else if (TREE_CODE (decl) == FUNCTION_DECL)
322 error ("invalid abstract return type for function %q+#D", decl);
323 else if (TREE_CODE (decl) == IDENTIFIER_NODE)
324 /* Here we do not have location information. */
325 error ("invalid abstract type %qT for %qE", type, decl);
326 else
327 error ("invalid abstract type for %q+D", decl);
329 else
330 error ("cannot allocate an object of abstract type %qT", type);
332 /* Only go through this once. */
333 if (VEC_length (tree, pure))
335 unsigned ix;
336 tree fn;
338 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
339 " because the following virtual functions are pure within %qT:",
340 type);
342 FOR_EACH_VEC_ELT (tree, pure, ix, fn)
343 if (! DECL_CLONED_FUNCTION_P (fn)
344 || DECL_COMPLETE_DESTRUCTOR_P (fn))
345 inform (input_location, "\t%+#D", fn);
347 /* Now truncate the vector. This leaves it non-null, so we know
348 there are pure virtuals, but empty so we don't list them out
349 again. */
350 VEC_truncate (tree, pure, 0);
352 else
353 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type)),
354 " since type %qT has pure virtual functions",
355 type);
357 return 1;
360 /* Wrapper for the above function in the common case of wanting errors. */
363 abstract_virtuals_error (tree decl, tree type)
365 return abstract_virtuals_error_sfinae (decl, type, tf_warning_or_error);
368 /* Print an error message for invalid use of an incomplete type.
369 VALUE is the expression that was used (or 0 if that isn't known)
370 and TYPE is the type that was invalid. DIAG_KIND indicates the
371 type of diagnostic (see diagnostic.def). */
373 void
374 cxx_incomplete_type_diagnostic (const_tree value, const_tree type,
375 diagnostic_t diag_kind)
377 int decl = 0;
379 gcc_assert (diag_kind == DK_WARNING
380 || diag_kind == DK_PEDWARN
381 || diag_kind == DK_ERROR);
383 /* Avoid duplicate error message. */
384 if (TREE_CODE (type) == ERROR_MARK)
385 return;
387 if (value != 0 && (TREE_CODE (value) == VAR_DECL
388 || TREE_CODE (value) == PARM_DECL
389 || TREE_CODE (value) == FIELD_DECL))
391 emit_diagnostic (diag_kind, input_location, 0,
392 "%q+D has incomplete type", value);
393 decl = 1;
395 retry:
396 /* We must print an error message. Be clever about what it says. */
398 switch (TREE_CODE (type))
400 case RECORD_TYPE:
401 case UNION_TYPE:
402 case ENUMERAL_TYPE:
403 if (!decl)
404 emit_diagnostic (diag_kind, input_location, 0,
405 "invalid use of incomplete type %q#T", type);
406 if (!TYPE_TEMPLATE_INFO (type))
407 emit_diagnostic (diag_kind, input_location, 0,
408 "forward declaration of %q+#T", type);
409 else
410 emit_diagnostic (diag_kind, input_location, 0,
411 "declaration of %q+#T", type);
412 break;
414 case VOID_TYPE:
415 emit_diagnostic (diag_kind, input_location, 0,
416 "invalid use of %qT", type);
417 break;
419 case ARRAY_TYPE:
420 if (TYPE_DOMAIN (type))
422 type = TREE_TYPE (type);
423 goto retry;
425 emit_diagnostic (diag_kind, input_location, 0,
426 "invalid use of array with unspecified bounds");
427 break;
429 case OFFSET_TYPE:
430 bad_member:
432 tree member = TREE_OPERAND (value, 1);
433 if (is_overloaded_fn (member))
434 member = get_first_fn (member);
435 if (DECL_FUNCTION_MEMBER_P (member)
436 && ! flag_ms_extensions)
437 emit_diagnostic (diag_kind, input_location, 0,
438 "invalid use of member function "
439 "(did you forget the %<()%> ?)");
440 else
441 emit_diagnostic (diag_kind, input_location, 0,
442 "invalid use of member "
443 "(did you forget the %<&%> ?)");
445 break;
447 case TEMPLATE_TYPE_PARM:
448 if (is_auto (type))
449 emit_diagnostic (diag_kind, input_location, 0,
450 "invalid use of %<auto%>");
451 else
452 emit_diagnostic (diag_kind, input_location, 0,
453 "invalid use of template type parameter %qT", type);
454 break;
456 case BOUND_TEMPLATE_TEMPLATE_PARM:
457 emit_diagnostic (diag_kind, input_location, 0,
458 "invalid use of template template parameter %qT",
459 TYPE_NAME (type));
460 break;
462 case TYPENAME_TYPE:
463 emit_diagnostic (diag_kind, input_location, 0,
464 "invalid use of dependent type %qT", type);
465 break;
467 case LANG_TYPE:
468 if (type == init_list_type_node)
470 emit_diagnostic (diag_kind, input_location, 0,
471 "invalid use of brace-enclosed initializer list");
472 break;
474 gcc_assert (type == unknown_type_node);
475 if (value && TREE_CODE (value) == COMPONENT_REF)
476 goto bad_member;
477 else if (value && TREE_CODE (value) == ADDR_EXPR)
478 emit_diagnostic (diag_kind, input_location, 0,
479 "address of overloaded function with no contextual "
480 "type information");
481 else if (value && TREE_CODE (value) == OVERLOAD)
482 emit_diagnostic (diag_kind, input_location, 0,
483 "overloaded function with no contextual type information");
484 else
485 emit_diagnostic (diag_kind, input_location, 0,
486 "insufficient contextual information to determine type");
487 break;
489 default:
490 gcc_unreachable ();
494 /* Backward-compatibility interface to incomplete_type_diagnostic;
495 required by ../tree.c. */
496 #undef cxx_incomplete_type_error
497 void
498 cxx_incomplete_type_error (const_tree value, const_tree type)
500 cxx_incomplete_type_diagnostic (value, type, DK_ERROR);
504 /* The recursive part of split_nonconstant_init. DEST is an lvalue
505 expression to which INIT should be assigned. INIT is a CONSTRUCTOR.
506 Return true if the whole of the value was initialized by the
507 generated statements. */
509 static bool
510 split_nonconstant_init_1 (tree dest, tree init)
512 unsigned HOST_WIDE_INT idx;
513 tree field_index, value;
514 tree type = TREE_TYPE (dest);
515 tree inner_type = NULL;
516 bool array_type_p = false;
517 bool complete_p = true;
518 HOST_WIDE_INT num_split_elts = 0;
520 switch (TREE_CODE (type))
522 case ARRAY_TYPE:
523 inner_type = TREE_TYPE (type);
524 array_type_p = true;
525 /* FALLTHRU */
527 case RECORD_TYPE:
528 case UNION_TYPE:
529 case QUAL_UNION_TYPE:
530 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (init), idx,
531 field_index, value)
533 /* The current implementation of this algorithm assumes that
534 the field was set for all the elements. This is usually done
535 by process_init_constructor. */
536 gcc_assert (field_index);
538 if (!array_type_p)
539 inner_type = TREE_TYPE (field_index);
541 if (TREE_CODE (value) == CONSTRUCTOR)
543 tree sub;
545 if (array_type_p)
546 sub = build4 (ARRAY_REF, inner_type, dest, field_index,
547 NULL_TREE, NULL_TREE);
548 else
549 sub = build3 (COMPONENT_REF, inner_type, dest, field_index,
550 NULL_TREE);
552 if (!split_nonconstant_init_1 (sub, value))
553 complete_p = false;
554 num_split_elts++;
556 else if (!initializer_constant_valid_p (value, inner_type))
558 tree code;
559 tree sub;
561 /* FIXME: Ordered removal is O(1) so the whole function is
562 worst-case quadratic. This could be fixed using an aside
563 bitmap to record which elements must be removed and remove
564 them all at the same time. Or by merging
565 split_non_constant_init into process_init_constructor_array,
566 that is separating constants from non-constants while building
567 the vector. */
568 VEC_ordered_remove (constructor_elt, CONSTRUCTOR_ELTS (init),
569 idx);
570 --idx;
572 if (array_type_p)
573 sub = build4 (ARRAY_REF, inner_type, dest, field_index,
574 NULL_TREE, NULL_TREE);
575 else
576 sub = build3 (COMPONENT_REF, inner_type, dest, field_index,
577 NULL_TREE);
579 code = build2 (INIT_EXPR, inner_type, sub, value);
580 code = build_stmt (input_location, EXPR_STMT, code);
581 code = maybe_cleanup_point_expr_void (code);
582 add_stmt (code);
583 if (!TYPE_HAS_TRIVIAL_DESTRUCTOR (inner_type))
585 code = (build_special_member_call
586 (sub, complete_dtor_identifier, NULL, inner_type,
587 LOOKUP_NORMAL, tf_warning_or_error));
588 finish_eh_cleanup (code);
591 num_split_elts++;
594 break;
596 case VECTOR_TYPE:
597 if (!initializer_constant_valid_p (init, type))
599 tree code;
600 tree cons = copy_node (init);
601 CONSTRUCTOR_ELTS (init) = NULL;
602 code = build2 (MODIFY_EXPR, type, dest, cons);
603 code = build_stmt (input_location, EXPR_STMT, code);
604 add_stmt (code);
605 num_split_elts += CONSTRUCTOR_NELTS (init);
607 break;
609 default:
610 gcc_unreachable ();
613 /* The rest of the initializer is now a constant. */
614 TREE_CONSTANT (init) = 1;
615 return complete_p && complete_ctor_at_level_p (TREE_TYPE (init),
616 num_split_elts, inner_type);
619 /* A subroutine of store_init_value. Splits non-constant static
620 initializer INIT into a constant part and generates code to
621 perform the non-constant part of the initialization to DEST.
622 Returns the code for the runtime init. */
624 static tree
625 split_nonconstant_init (tree dest, tree init)
627 tree code;
629 if (TREE_CODE (init) == CONSTRUCTOR)
631 code = push_stmt_list ();
632 if (split_nonconstant_init_1 (dest, init))
633 init = NULL_TREE;
634 code = pop_stmt_list (code);
635 DECL_INITIAL (dest) = init;
636 TREE_READONLY (dest) = 0;
638 else
639 code = build2 (INIT_EXPR, TREE_TYPE (dest), dest, init);
641 return code;
644 /* Perform appropriate conversions on the initial value of a variable,
645 store it in the declaration DECL,
646 and print any error messages that are appropriate.
647 If the init is invalid, store an ERROR_MARK.
649 C++: Note that INIT might be a TREE_LIST, which would mean that it is
650 a base class initializer for some aggregate type, hopefully compatible
651 with DECL. If INIT is a single element, and DECL is an aggregate
652 type, we silently convert INIT into a TREE_LIST, allowing a constructor
653 to be called.
655 If INIT is a TREE_LIST and there is no constructor, turn INIT
656 into a CONSTRUCTOR and use standard initialization techniques.
657 Perhaps a warning should be generated?
659 Returns code to be executed if initialization could not be performed
660 for static variable. In that case, caller must emit the code. */
662 tree
663 store_init_value (tree decl, tree init, VEC(tree,gc)** cleanups, int flags)
665 tree value, type;
667 /* If variable's type was invalidly declared, just ignore it. */
669 type = TREE_TYPE (decl);
670 if (TREE_CODE (type) == ERROR_MARK)
671 return NULL_TREE;
673 if (MAYBE_CLASS_TYPE_P (type))
675 if (TREE_CODE (init) == TREE_LIST)
677 error ("constructor syntax used, but no constructor declared "
678 "for type %qT", type);
679 init = build_constructor_from_list (init_list_type_node, nreverse (init));
682 else if (TREE_CODE (init) == TREE_LIST
683 && TREE_TYPE (init) != unknown_type_node)
685 gcc_assert (TREE_CODE (decl) != RESULT_DECL);
687 if (TREE_CODE (init) == TREE_LIST
688 && TREE_CODE (TREE_TYPE (decl)) == ARRAY_TYPE)
690 error ("cannot initialize arrays using this syntax");
691 return NULL_TREE;
693 else
694 /* We get here with code like `int a (2);' */
695 init = build_x_compound_expr_from_list (init, ELK_INIT,
696 tf_warning_or_error);
699 /* End of special C++ code. */
701 if (flags & LOOKUP_ALREADY_DIGESTED)
702 value = init;
703 else
704 /* Digest the specified initializer into an expression. */
705 value = digest_init_flags (type, init, flags);
707 value = extend_ref_init_temps (decl, value, cleanups);
709 /* In C++0x constant expression is a semantic, not syntactic, property.
710 In C++98, make sure that what we thought was a constant expression at
711 template definition time is still constant. */
712 if ((cxx_dialect >= cxx0x
713 || DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl))
714 && (decl_maybe_constant_var_p (decl)
715 || TREE_STATIC (decl)))
717 bool const_init;
718 value = fold_non_dependent_expr (value);
719 value = maybe_constant_init (value);
720 if (DECL_DECLARED_CONSTEXPR_P (decl))
722 /* Diagnose a non-constant initializer for constexpr. */
723 if (processing_template_decl
724 && !require_potential_constant_expression (value))
725 value = error_mark_node;
726 else
727 value = cxx_constant_value (value);
729 const_init = (reduced_constant_expression_p (value)
730 || error_operand_p (value));
731 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl) = const_init;
732 TREE_CONSTANT (decl) = const_init && decl_maybe_constant_var_p (decl);
735 /* If the initializer is not a constant, fill in DECL_INITIAL with
736 the bits that are constant, and then return an expression that
737 will perform the dynamic initialization. */
738 if (value != error_mark_node
739 && (TREE_SIDE_EFFECTS (value)
740 || ! initializer_constant_valid_p (value, TREE_TYPE (value))))
742 if (TREE_CODE (type) == ARRAY_TYPE
743 && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (type)))
744 /* For an array, we only need/want a single cleanup region rather
745 than one per element. */
746 return build_vec_init (decl, NULL_TREE, value, false, 1,
747 tf_warning_or_error);
748 else
749 return split_nonconstant_init (decl, value);
751 /* If the value is a constant, just put it in DECL_INITIAL. If DECL
752 is an automatic variable, the middle end will turn this into a
753 dynamic initialization later. */
754 DECL_INITIAL (decl) = value;
755 return NULL_TREE;
759 /* Give errors about narrowing conversions within { }. */
761 void
762 check_narrowing (tree type, tree init)
764 tree ftype = unlowered_expr_type (init);
765 bool ok = true;
766 REAL_VALUE_TYPE d;
768 if (!warn_narrowing || !ARITHMETIC_TYPE_P (type))
769 return;
771 if (BRACE_ENCLOSED_INITIALIZER_P (init)
772 && TREE_CODE (type) == COMPLEX_TYPE)
774 tree elttype = TREE_TYPE (type);
775 check_narrowing (elttype, CONSTRUCTOR_ELT (init, 0)->value);
776 if (CONSTRUCTOR_NELTS (init) > 1)
777 check_narrowing (elttype, CONSTRUCTOR_ELT (init, 1)->value);
778 return;
781 init = maybe_constant_value (init);
783 if (TREE_CODE (type) == INTEGER_TYPE
784 && TREE_CODE (ftype) == REAL_TYPE)
785 ok = false;
786 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (ftype)
787 && CP_INTEGRAL_TYPE_P (type))
789 if (TREE_CODE (ftype) == ENUMERAL_TYPE)
790 /* Check for narrowing based on the values of the enumeration. */
791 ftype = ENUM_UNDERLYING_TYPE (ftype);
792 if ((tree_int_cst_lt (TYPE_MAX_VALUE (type),
793 TYPE_MAX_VALUE (ftype))
794 || tree_int_cst_lt (TYPE_MIN_VALUE (ftype),
795 TYPE_MIN_VALUE (type)))
796 && (TREE_CODE (init) != INTEGER_CST
797 || !int_fits_type_p (init, type)))
798 ok = false;
800 else if (TREE_CODE (ftype) == REAL_TYPE
801 && TREE_CODE (type) == REAL_TYPE)
803 if (TYPE_PRECISION (type) < TYPE_PRECISION (ftype))
805 if (TREE_CODE (init) == REAL_CST)
807 /* Issue 703: Loss of precision is OK as long as the value is
808 within the representable range of the new type. */
809 REAL_VALUE_TYPE r;
810 d = TREE_REAL_CST (init);
811 real_convert (&r, TYPE_MODE (type), &d);
812 if (real_isinf (&r))
813 ok = false;
815 else
816 ok = false;
819 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (ftype)
820 && TREE_CODE (type) == REAL_TYPE)
822 ok = false;
823 if (TREE_CODE (init) == INTEGER_CST)
825 d = real_value_from_int_cst (0, init);
826 if (exact_real_truncate (TYPE_MODE (type), &d))
827 ok = true;
831 if (!ok)
833 if (cxx_dialect >= cxx0x)
834 pedwarn (EXPR_LOC_OR_HERE (init), OPT_Wnarrowing,
835 "narrowing conversion of %qE from %qT to %qT inside { }",
836 init, ftype, type);
837 else
838 warning_at (EXPR_LOC_OR_HERE (init), OPT_Wnarrowing,
839 "narrowing conversion of %qE from %qT to %qT inside { } "
840 "is ill-formed in C++11", init, ftype, type);
844 /* Process the initializer INIT for a variable of type TYPE, emitting
845 diagnostics for invalid initializers and converting the initializer as
846 appropriate.
848 For aggregate types, it assumes that reshape_init has already run, thus the
849 initializer will have the right shape (brace elision has been undone).
851 NESTED is true iff we are being called for an element of a CONSTRUCTOR. */
853 static tree
854 digest_init_r (tree type, tree init, bool nested, int flags,
855 tsubst_flags_t complain)
857 enum tree_code code = TREE_CODE (type);
859 if (error_operand_p (init))
860 return error_mark_node;
862 gcc_assert (init);
864 /* We must strip the outermost array type when completing the type,
865 because the its bounds might be incomplete at the moment. */
866 if (!complete_type_or_maybe_complain (TREE_CODE (type) == ARRAY_TYPE
867 ? TREE_TYPE (type) : type, NULL_TREE,
868 complain))
869 return error_mark_node;
871 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue
872 (g++.old-deja/g++.law/casts2.C). */
873 if (TREE_CODE (init) == NON_LVALUE_EXPR)
874 init = TREE_OPERAND (init, 0);
876 /* Initialization of an array of chars from a string constant. The initializer
877 can be optionally enclosed in braces, but reshape_init has already removed
878 them if they were present. */
879 if (code == ARRAY_TYPE)
881 tree typ1 = TYPE_MAIN_VARIANT (TREE_TYPE (type));
882 if (char_type_p (typ1)
883 /*&& init */
884 && TREE_CODE (init) == STRING_CST)
886 tree char_type = TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (init)));
888 if (TYPE_PRECISION (typ1) == BITS_PER_UNIT)
890 if (char_type != char_type_node)
892 if (complain & tf_error)
893 error ("char-array initialized from wide string");
894 return error_mark_node;
897 else
899 if (char_type == char_type_node)
901 if (complain & tf_error)
902 error ("int-array initialized from non-wide string");
903 return error_mark_node;
905 else if (char_type != typ1)
907 if (complain & tf_error)
908 error ("int-array initialized from incompatible "
909 "wide string");
910 return error_mark_node;
914 if (type != TREE_TYPE (init))
916 init = copy_node (init);
917 TREE_TYPE (init) = type;
919 if (TYPE_DOMAIN (type) != 0 && TREE_CONSTANT (TYPE_SIZE (type)))
921 int size = TREE_INT_CST_LOW (TYPE_SIZE (type));
922 size = (size + BITS_PER_UNIT - 1) / BITS_PER_UNIT;
923 /* In C it is ok to subtract 1 from the length of the string
924 because it's ok to ignore the terminating null char that is
925 counted in the length of the constant, but in C++ this would
926 be invalid. */
927 if (size < TREE_STRING_LENGTH (init))
928 permerror (input_location, "initializer-string for array "
929 "of chars is too long");
931 return init;
935 /* Handle scalar types (including conversions) and references. */
936 if ((TREE_CODE (type) != COMPLEX_TYPE
937 || BRACE_ENCLOSED_INITIALIZER_P (init))
938 && (SCALAR_TYPE_P (type) || code == REFERENCE_TYPE))
940 tree *exp;
942 if (nested)
943 check_narrowing (type, init);
944 init = convert_for_initialization (0, type, init, flags,
945 ICR_INIT, NULL_TREE, 0,
946 complain);
947 exp = &init;
949 /* Skip any conversions since we'll be outputting the underlying
950 constant. */
951 while (CONVERT_EXPR_P (*exp)
952 || TREE_CODE (*exp) == NON_LVALUE_EXPR)
953 exp = &TREE_OPERAND (*exp, 0);
955 *exp = cplus_expand_constant (*exp);
957 return init;
960 /* Come here only for aggregates: records, arrays, unions, complex numbers
961 and vectors. */
962 gcc_assert (TREE_CODE (type) == ARRAY_TYPE
963 || TREE_CODE (type) == VECTOR_TYPE
964 || TREE_CODE (type) == RECORD_TYPE
965 || TREE_CODE (type) == UNION_TYPE
966 || TREE_CODE (type) == COMPLEX_TYPE);
968 if (BRACE_ENCLOSED_INITIALIZER_P (init)
969 && !TYPE_NON_AGGREGATE_CLASS (type))
970 return process_init_constructor (type, init, complain);
971 else
973 if (COMPOUND_LITERAL_P (init) && TREE_CODE (type) == ARRAY_TYPE)
975 if (complain & tf_error)
976 error ("cannot initialize aggregate of type %qT with "
977 "a compound literal", type);
979 return error_mark_node;
982 if (TREE_CODE (type) == ARRAY_TYPE
983 && !BRACE_ENCLOSED_INITIALIZER_P (init))
985 /* Allow the result of build_array_copy and of
986 build_value_init_noctor. */
987 if ((TREE_CODE (init) == VEC_INIT_EXPR
988 || TREE_CODE (init) == CONSTRUCTOR)
989 && (same_type_ignoring_top_level_qualifiers_p
990 (type, TREE_TYPE (init))))
991 return init;
993 if (complain & tf_error)
994 error ("array must be initialized with a brace-enclosed"
995 " initializer");
996 return error_mark_node;
999 return convert_for_initialization (NULL_TREE, type, init,
1000 flags,
1001 ICR_INIT, NULL_TREE, 0,
1002 complain);
1006 tree
1007 digest_init (tree type, tree init, tsubst_flags_t complain)
1009 return digest_init_r (type, init, false, LOOKUP_IMPLICIT, complain);
1012 tree
1013 digest_init_flags (tree type, tree init, int flags)
1015 return digest_init_r (type, init, false, flags, tf_warning_or_error);
1018 /* Set of flags used within process_init_constructor to describe the
1019 initializers. */
1020 #define PICFLAG_ERRONEOUS 1
1021 #define PICFLAG_NOT_ALL_CONSTANT 2
1022 #define PICFLAG_NOT_ALL_SIMPLE 4
1024 /* Given an initializer INIT, return the flag (PICFLAG_*) which better
1025 describe it. */
1027 static int
1028 picflag_from_initializer (tree init)
1030 if (init == error_mark_node)
1031 return PICFLAG_ERRONEOUS;
1032 else if (!TREE_CONSTANT (init))
1033 return PICFLAG_NOT_ALL_CONSTANT;
1034 else if (!initializer_constant_valid_p (init, TREE_TYPE (init)))
1035 return PICFLAG_NOT_ALL_SIMPLE;
1036 return 0;
1039 /* Subroutine of process_init_constructor, which will process an initializer
1040 INIT for an array or vector of type TYPE. Returns the flags (PICFLAG_*)
1041 which describe the initializers. */
1043 static int
1044 process_init_constructor_array (tree type, tree init,
1045 tsubst_flags_t complain)
1047 unsigned HOST_WIDE_INT i, len = 0;
1048 int flags = 0;
1049 bool unbounded = false;
1050 constructor_elt *ce;
1051 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (init);
1053 gcc_assert (TREE_CODE (type) == ARRAY_TYPE
1054 || TREE_CODE (type) == VECTOR_TYPE);
1056 if (TREE_CODE (type) == ARRAY_TYPE)
1058 tree domain = TYPE_DOMAIN (type);
1059 if (domain)
1060 len = (TREE_INT_CST_LOW (TYPE_MAX_VALUE (domain))
1061 - TREE_INT_CST_LOW (TYPE_MIN_VALUE (domain))
1062 + 1);
1063 else
1064 unbounded = true; /* Take as many as there are. */
1066 else
1067 /* Vectors are like simple fixed-size arrays. */
1068 len = TYPE_VECTOR_SUBPARTS (type);
1070 /* There must not be more initializers than needed. */
1071 if (!unbounded && VEC_length (constructor_elt, v) > len)
1073 if (complain & tf_error)
1074 error ("too many initializers for %qT", type);
1075 else
1076 return PICFLAG_ERRONEOUS;
1079 FOR_EACH_VEC_ELT (constructor_elt, v, i, ce)
1081 if (ce->index)
1083 gcc_assert (TREE_CODE (ce->index) == INTEGER_CST);
1084 if (compare_tree_int (ce->index, i) != 0)
1086 ce->value = error_mark_node;
1087 sorry ("non-trivial designated initializers not supported");
1090 else
1091 ce->index = size_int (i);
1092 gcc_assert (ce->value);
1093 ce->value = digest_init_r (TREE_TYPE (type), ce->value, true,
1094 LOOKUP_IMPLICIT, complain);
1096 if (ce->value != error_mark_node)
1097 gcc_assert (same_type_ignoring_top_level_qualifiers_p
1098 (TREE_TYPE (type), TREE_TYPE (ce->value)));
1100 flags |= picflag_from_initializer (ce->value);
1103 /* No more initializers. If the array is unbounded, we are done. Otherwise,
1104 we must add initializers ourselves. */
1105 if (!unbounded)
1106 for (; i < len; ++i)
1108 tree next;
1110 if (type_build_ctor_call (TREE_TYPE (type)))
1112 /* If this type needs constructors run for default-initialization,
1113 we can't rely on the back end to do it for us, so make the
1114 initialization explicit by list-initializing from {}. */
1115 next = build_constructor (init_list_type_node, NULL);
1116 next = digest_init (TREE_TYPE (type), next, complain);
1118 else if (!zero_init_p (TREE_TYPE (type)))
1119 next = build_zero_init (TREE_TYPE (type),
1120 /*nelts=*/NULL_TREE,
1121 /*static_storage_p=*/false);
1122 else
1123 /* The default zero-initialization is fine for us; don't
1124 add anything to the CONSTRUCTOR. */
1125 break;
1127 flags |= picflag_from_initializer (next);
1128 CONSTRUCTOR_APPEND_ELT (v, size_int (i), next);
1131 CONSTRUCTOR_ELTS (init) = v;
1132 return flags;
1135 /* Subroutine of process_init_constructor, which will process an initializer
1136 INIT for a class of type TYPE. Returns the flags (PICFLAG_*) which describe
1137 the initializers. */
1139 static int
1140 process_init_constructor_record (tree type, tree init,
1141 tsubst_flags_t complain)
1143 VEC(constructor_elt,gc) *v = NULL;
1144 int flags = 0;
1145 tree field;
1146 unsigned HOST_WIDE_INT idx = 0;
1148 gcc_assert (TREE_CODE (type) == RECORD_TYPE);
1149 gcc_assert (!CLASSTYPE_VBASECLASSES (type));
1150 gcc_assert (!TYPE_BINFO (type)
1151 || !BINFO_N_BASE_BINFOS (TYPE_BINFO (type)));
1152 gcc_assert (!TYPE_POLYMORPHIC_P (type));
1154 /* Generally, we will always have an index for each initializer (which is
1155 a FIELD_DECL, put by reshape_init), but compound literals don't go trough
1156 reshape_init. So we need to handle both cases. */
1157 for (field = TYPE_FIELDS (type); field; field = DECL_CHAIN (field))
1159 tree next;
1160 tree type;
1162 if (!DECL_NAME (field) && DECL_C_BIT_FIELD (field))
1164 flags |= picflag_from_initializer (integer_zero_node);
1165 CONSTRUCTOR_APPEND_ELT (v, field, integer_zero_node);
1166 continue;
1169 if (TREE_CODE (field) != FIELD_DECL || DECL_ARTIFICIAL (field))
1170 continue;
1172 /* If this is a bitfield, first convert to the declared type. */
1173 type = TREE_TYPE (field);
1174 if (DECL_BIT_FIELD_TYPE (field))
1175 type = DECL_BIT_FIELD_TYPE (field);
1177 if (idx < VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init)))
1179 constructor_elt *ce = VEC_index (constructor_elt,
1180 CONSTRUCTOR_ELTS (init), idx);
1181 if (ce->index)
1183 /* We can have either a FIELD_DECL or an IDENTIFIER_NODE. The
1184 latter case can happen in templates where lookup has to be
1185 deferred. */
1186 gcc_assert (TREE_CODE (ce->index) == FIELD_DECL
1187 || TREE_CODE (ce->index) == IDENTIFIER_NODE);
1188 if (ce->index != field
1189 && ce->index != DECL_NAME (field))
1191 ce->value = error_mark_node;
1192 sorry ("non-trivial designated initializers not supported");
1196 gcc_assert (ce->value);
1197 next = digest_init_r (type, ce->value, true,
1198 LOOKUP_IMPLICIT, complain);
1199 ++idx;
1201 else if (type_build_ctor_call (TREE_TYPE (field)))
1203 /* If this type needs constructors run for
1204 default-initialization, we can't rely on the back end to do it
1205 for us, so build up TARGET_EXPRs. If the type in question is
1206 a class, just build one up; if it's an array, recurse. */
1207 next = build_constructor (init_list_type_node, NULL);
1208 if (MAYBE_CLASS_TYPE_P (TREE_TYPE (field)))
1210 next = finish_compound_literal (TREE_TYPE (field), next,
1211 complain);
1212 /* direct-initialize the target. No temporary is going
1213 to be involved. */
1214 if (TREE_CODE (next) == TARGET_EXPR)
1215 TARGET_EXPR_DIRECT_INIT_P (next) = true;
1218 next = digest_init_r (TREE_TYPE (field), next, true,
1219 LOOKUP_IMPLICIT, complain);
1221 /* Warn when some struct elements are implicitly initialized. */
1222 warning (OPT_Wmissing_field_initializers,
1223 "missing initializer for member %qD", field);
1225 else
1227 if (TREE_READONLY (field))
1229 if (complain & tf_error)
1230 error ("uninitialized const member %qD", field);
1231 else
1232 return PICFLAG_ERRONEOUS;
1234 else if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (TREE_TYPE (field)))
1236 if (complain & tf_error)
1237 error ("member %qD with uninitialized const fields", field);
1238 else
1239 return PICFLAG_ERRONEOUS;
1241 else if (TREE_CODE (TREE_TYPE (field)) == REFERENCE_TYPE)
1243 if (complain & tf_error)
1244 error ("member %qD is uninitialized reference", field);
1245 else
1246 return PICFLAG_ERRONEOUS;
1249 /* Warn when some struct elements are implicitly initialized
1250 to zero. */
1251 warning (OPT_Wmissing_field_initializers,
1252 "missing initializer for member %qD", field);
1254 if (!zero_init_p (TREE_TYPE (field)))
1255 next = build_zero_init (TREE_TYPE (field), /*nelts=*/NULL_TREE,
1256 /*static_storage_p=*/false);
1257 else
1258 /* The default zero-initialization is fine for us; don't
1259 add anything to the CONSTRUCTOR. */
1260 continue;
1263 /* If this is a bitfield, now convert to the lowered type. */
1264 if (type != TREE_TYPE (field))
1265 next = cp_convert_and_check (TREE_TYPE (field), next);
1266 flags |= picflag_from_initializer (next);
1267 CONSTRUCTOR_APPEND_ELT (v, field, next);
1270 if (idx < VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init)))
1272 if (complain & tf_error)
1273 error ("too many initializers for %qT", type);
1274 else
1275 return PICFLAG_ERRONEOUS;
1278 CONSTRUCTOR_ELTS (init) = v;
1279 return flags;
1282 /* Subroutine of process_init_constructor, which will process a single
1283 initializer INIT for a union of type TYPE. Returns the flags (PICFLAG_*)
1284 which describe the initializer. */
1286 static int
1287 process_init_constructor_union (tree type, tree init,
1288 tsubst_flags_t complain)
1290 constructor_elt *ce;
1291 int len;
1293 /* If the initializer was empty, use default zero initialization. */
1294 if (VEC_empty (constructor_elt, CONSTRUCTOR_ELTS (init)))
1295 return 0;
1297 len = VEC_length (constructor_elt, CONSTRUCTOR_ELTS (init));
1298 if (len > 1)
1300 if (!(complain & tf_error))
1301 return PICFLAG_ERRONEOUS;
1302 error ("too many initializers for %qT", type);
1303 VEC_block_remove (constructor_elt, CONSTRUCTOR_ELTS (init), 1, len-1);
1306 ce = VEC_index (constructor_elt, CONSTRUCTOR_ELTS (init), 0);
1308 /* If this element specifies a field, initialize via that field. */
1309 if (ce->index)
1311 if (TREE_CODE (ce->index) == FIELD_DECL)
1313 else if (TREE_CODE (ce->index) == IDENTIFIER_NODE)
1315 /* This can happen within a cast, see g++.dg/opt/cse2.C. */
1316 tree name = ce->index;
1317 tree field;
1318 for (field = TYPE_FIELDS (type); field; field = TREE_CHAIN (field))
1319 if (DECL_NAME (field) == name)
1320 break;
1321 if (!field)
1323 if (complain & tf_error)
1324 error ("no field %qD found in union being initialized",
1325 field);
1326 ce->value = error_mark_node;
1328 ce->index = field;
1330 else
1332 gcc_assert (TREE_CODE (ce->index) == INTEGER_CST
1333 || TREE_CODE (ce->index) == RANGE_EXPR);
1334 if (complain & tf_error)
1335 error ("index value instead of field name in union initializer");
1336 ce->value = error_mark_node;
1339 else
1341 /* Find the first named field. ANSI decided in September 1990
1342 that only named fields count here. */
1343 tree field = TYPE_FIELDS (type);
1344 while (field && (!DECL_NAME (field) || TREE_CODE (field) != FIELD_DECL))
1345 field = TREE_CHAIN (field);
1346 if (field == NULL_TREE)
1348 if (complain & tf_error)
1349 error ("too many initializers for %qT", type);
1350 ce->value = error_mark_node;
1352 ce->index = field;
1355 if (ce->value && ce->value != error_mark_node)
1356 ce->value = digest_init_r (TREE_TYPE (ce->index), ce->value,
1357 true, LOOKUP_IMPLICIT, complain);
1359 return picflag_from_initializer (ce->value);
1362 /* Process INIT, a constructor for a variable of aggregate type TYPE. The
1363 constructor is a brace-enclosed initializer, and will be modified in-place.
1365 Each element is converted to the right type through digest_init, and
1366 missing initializers are added following the language rules (zero-padding,
1367 etc.).
1369 After the execution, the initializer will have TREE_CONSTANT if all elts are
1370 constant, and TREE_STATIC set if, in addition, all elts are simple enough
1371 constants that the assembler and linker can compute them.
1373 The function returns the initializer itself, or error_mark_node in case
1374 of error. */
1376 static tree
1377 process_init_constructor (tree type, tree init, tsubst_flags_t complain)
1379 int flags;
1381 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init));
1383 if (TREE_CODE (type) == ARRAY_TYPE || TREE_CODE (type) == VECTOR_TYPE)
1384 flags = process_init_constructor_array (type, init, complain);
1385 else if (TREE_CODE (type) == RECORD_TYPE)
1386 flags = process_init_constructor_record (type, init, complain);
1387 else if (TREE_CODE (type) == UNION_TYPE)
1388 flags = process_init_constructor_union (type, init, complain);
1389 else
1390 gcc_unreachable ();
1392 if (flags & PICFLAG_ERRONEOUS)
1393 return error_mark_node;
1395 TREE_TYPE (init) = type;
1396 if (TREE_CODE (type) == ARRAY_TYPE && TYPE_DOMAIN (type) == NULL_TREE)
1397 cp_complete_array_type (&TREE_TYPE (init), init, /*do_default=*/0);
1398 if (!(flags & PICFLAG_NOT_ALL_CONSTANT))
1400 TREE_CONSTANT (init) = 1;
1401 if (!(flags & PICFLAG_NOT_ALL_SIMPLE))
1402 TREE_STATIC (init) = 1;
1404 return init;
1407 /* Given a structure or union value DATUM, construct and return
1408 the structure or union component which results from narrowing
1409 that value to the base specified in BASETYPE. For example, given the
1410 hierarchy
1412 class L { int ii; };
1413 class A : L { ... };
1414 class B : L { ... };
1415 class C : A, B { ... };
1417 and the declaration
1419 C x;
1421 then the expression
1423 x.A::ii refers to the ii member of the L part of
1424 the A part of the C object named by X. In this case,
1425 DATUM would be x, and BASETYPE would be A.
1427 I used to think that this was nonconformant, that the standard specified
1428 that first we look up ii in A, then convert x to an L& and pull out the
1429 ii part. But in fact, it does say that we convert x to an A&; A here
1430 is known as the "naming class". (jason 2000-12-19)
1432 BINFO_P points to a variable initialized either to NULL_TREE or to the
1433 binfo for the specific base subobject we want to convert to. */
1435 tree
1436 build_scoped_ref (tree datum, tree basetype, tree* binfo_p)
1438 tree binfo;
1440 if (datum == error_mark_node)
1441 return error_mark_node;
1442 if (*binfo_p)
1443 binfo = *binfo_p;
1444 else
1445 binfo = lookup_base (TREE_TYPE (datum), basetype, ba_check, NULL);
1447 if (!binfo || binfo == error_mark_node)
1449 *binfo_p = NULL_TREE;
1450 if (!binfo)
1451 error_not_base_type (basetype, TREE_TYPE (datum));
1452 return error_mark_node;
1455 *binfo_p = binfo;
1456 return build_base_path (PLUS_EXPR, datum, binfo, 1,
1457 tf_warning_or_error);
1460 /* Build a reference to an object specified by the C++ `->' operator.
1461 Usually this just involves dereferencing the object, but if the
1462 `->' operator is overloaded, then such overloads must be
1463 performed until an object which does not have the `->' operator
1464 overloaded is found. An error is reported when circular pointer
1465 delegation is detected. */
1467 tree
1468 build_x_arrow (tree expr)
1470 tree orig_expr = expr;
1471 tree type = TREE_TYPE (expr);
1472 tree last_rval = NULL_TREE;
1473 VEC(tree,gc) *types_memoized = NULL;
1475 if (type == error_mark_node)
1476 return error_mark_node;
1478 if (processing_template_decl)
1480 if (type_dependent_expression_p (expr))
1481 return build_min_nt (ARROW_EXPR, expr);
1482 expr = build_non_dependent_expr (expr);
1485 if (MAYBE_CLASS_TYPE_P (type))
1487 struct tinst_level *actual_inst = current_instantiation ();
1488 tree fn = NULL;
1490 while ((expr = build_new_op (COMPONENT_REF, LOOKUP_NORMAL, expr,
1491 NULL_TREE, NULL_TREE,
1492 &fn, tf_warning_or_error)))
1494 if (expr == error_mark_node)
1495 return error_mark_node;
1497 if (fn && DECL_USE_TEMPLATE (fn))
1498 push_tinst_level (fn);
1499 fn = NULL;
1501 if (vec_member (TREE_TYPE (expr), types_memoized))
1503 error ("circular pointer delegation detected");
1504 return error_mark_node;
1507 VEC_safe_push (tree, gc, types_memoized, TREE_TYPE (expr));
1508 last_rval = expr;
1511 while (current_instantiation () != actual_inst)
1512 pop_tinst_level ();
1514 if (last_rval == NULL_TREE)
1516 error ("base operand of %<->%> has non-pointer type %qT", type);
1517 return error_mark_node;
1520 if (TREE_CODE (TREE_TYPE (last_rval)) == REFERENCE_TYPE)
1521 last_rval = convert_from_reference (last_rval);
1523 else
1524 last_rval = decay_conversion (expr);
1526 if (TREE_CODE (TREE_TYPE (last_rval)) == POINTER_TYPE)
1528 if (processing_template_decl)
1530 expr = build_min (ARROW_EXPR, TREE_TYPE (TREE_TYPE (last_rval)),
1531 orig_expr);
1532 TREE_SIDE_EFFECTS (expr) = TREE_SIDE_EFFECTS (last_rval);
1533 return expr;
1536 return cp_build_indirect_ref (last_rval, RO_NULL, tf_warning_or_error);
1539 if (types_memoized)
1540 error ("result of %<operator->()%> yields non-pointer result");
1541 else
1542 error ("base operand of %<->%> is not a pointer");
1543 return error_mark_node;
1546 /* Return an expression for "DATUM .* COMPONENT". DATUM has not
1547 already been checked out to be of aggregate type. */
1549 tree
1550 build_m_component_ref (tree datum, tree component)
1552 tree ptrmem_type;
1553 tree objtype;
1554 tree type;
1555 tree binfo;
1556 tree ctype;
1558 if (error_operand_p (datum) || error_operand_p (component))
1559 return error_mark_node;
1561 datum = mark_lvalue_use (datum);
1562 component = mark_rvalue_use (component);
1564 ptrmem_type = TREE_TYPE (component);
1565 if (!TYPE_PTR_TO_MEMBER_P (ptrmem_type))
1567 error ("%qE cannot be used as a member pointer, since it is of "
1568 "type %qT",
1569 component, ptrmem_type);
1570 return error_mark_node;
1573 objtype = TYPE_MAIN_VARIANT (TREE_TYPE (datum));
1574 if (! MAYBE_CLASS_TYPE_P (objtype))
1576 error ("cannot apply member pointer %qE to %qE, which is of "
1577 "non-class type %qT",
1578 component, datum, objtype);
1579 return error_mark_node;
1582 type = TYPE_PTRMEM_POINTED_TO_TYPE (ptrmem_type);
1583 ctype = complete_type (TYPE_PTRMEM_CLASS_TYPE (ptrmem_type));
1585 if (!COMPLETE_TYPE_P (ctype))
1587 if (!same_type_p (ctype, objtype))
1588 goto mismatch;
1589 binfo = NULL;
1591 else
1593 binfo = lookup_base (objtype, ctype, ba_check, NULL);
1595 if (!binfo)
1597 mismatch:
1598 error ("pointer to member type %qT incompatible with object "
1599 "type %qT",
1600 type, objtype);
1601 return error_mark_node;
1603 else if (binfo == error_mark_node)
1604 return error_mark_node;
1607 if (TYPE_PTRMEM_P (ptrmem_type))
1609 bool is_lval = real_lvalue_p (datum);
1610 tree ptype;
1612 /* Compute the type of the field, as described in [expr.ref].
1613 There's no such thing as a mutable pointer-to-member, so
1614 things are not as complex as they are for references to
1615 non-static data members. */
1616 type = cp_build_qualified_type (type,
1617 (cp_type_quals (type)
1618 | cp_type_quals (TREE_TYPE (datum))));
1620 datum = build_address (datum);
1622 /* Convert object to the correct base. */
1623 if (binfo)
1624 datum = build_base_path (PLUS_EXPR, datum, binfo, 1,
1625 tf_warning_or_error);
1627 /* Build an expression for "object + offset" where offset is the
1628 value stored in the pointer-to-data-member. */
1629 ptype = build_pointer_type (type);
1630 datum = fold_build_pointer_plus (fold_convert (ptype, datum), component);
1631 datum = cp_build_indirect_ref (datum, RO_NULL, tf_warning_or_error);
1632 /* If the object expression was an rvalue, return an rvalue. */
1633 if (!is_lval)
1634 datum = move (datum);
1635 return datum;
1637 else
1638 return build2 (OFFSET_REF, type, datum, component);
1641 /* Return a tree node for the expression TYPENAME '(' PARMS ')'. */
1643 tree
1644 build_functional_cast (tree exp, tree parms, tsubst_flags_t complain)
1646 /* This is either a call to a constructor,
1647 or a C cast in C++'s `functional' notation. */
1649 /* The type to which we are casting. */
1650 tree type;
1651 VEC(tree,gc) *parmvec;
1653 if (exp == error_mark_node || parms == error_mark_node)
1654 return error_mark_node;
1656 if (TREE_CODE (exp) == TYPE_DECL)
1657 type = TREE_TYPE (exp);
1658 else
1659 type = exp;
1661 /* We need to check this explicitly, since value-initialization of
1662 arrays is allowed in other situations. */
1663 if (TREE_CODE (type) == ARRAY_TYPE)
1665 if (complain & tf_error)
1666 error ("functional cast to array type %qT", type);
1667 return error_mark_node;
1670 if (type_uses_auto (type))
1672 if (complain & tf_error)
1673 error ("invalid use of %<auto%>");
1674 return error_mark_node;
1677 if (processing_template_decl)
1679 tree t;
1681 /* Diagnose this even in a template. We could also try harder
1682 to give all the usual errors when the type and args are
1683 non-dependent... */
1684 if (TREE_CODE (type) == REFERENCE_TYPE && !parms)
1686 if (complain & tf_error)
1687 error ("invalid value-initialization of reference type");
1688 return error_mark_node;
1691 t = build_min (CAST_EXPR, type, parms);
1692 /* We don't know if it will or will not have side effects. */
1693 TREE_SIDE_EFFECTS (t) = 1;
1694 return t;
1697 if (! MAYBE_CLASS_TYPE_P (type))
1699 if (parms == NULL_TREE)
1701 if (VOID_TYPE_P (type))
1702 return void_zero_node;
1703 return build_value_init (cv_unqualified (type), complain);
1706 /* This must build a C cast. */
1707 parms = build_x_compound_expr_from_list (parms, ELK_FUNC_CAST, complain);
1708 return cp_build_c_cast (type, parms, complain);
1711 /* Prepare to evaluate as a call to a constructor. If this expression
1712 is actually used, for example,
1714 return X (arg1, arg2, ...);
1716 then the slot being initialized will be filled in. */
1718 if (!complete_type_or_maybe_complain (type, NULL_TREE, complain))
1719 return error_mark_node;
1720 if (abstract_virtuals_error_sfinae (NULL_TREE, type, complain))
1721 return error_mark_node;
1723 /* [expr.type.conv]
1725 If the expression list is a single-expression, the type
1726 conversion is equivalent (in definedness, and if defined in
1727 meaning) to the corresponding cast expression. */
1728 if (parms && TREE_CHAIN (parms) == NULL_TREE)
1729 return cp_build_c_cast (type, TREE_VALUE (parms), complain);
1731 /* [expr.type.conv]
1733 The expression T(), where T is a simple-type-specifier for a
1734 non-array complete object type or the (possibly cv-qualified)
1735 void type, creates an rvalue of the specified type, which is
1736 value-initialized. */
1738 if (parms == NULL_TREE)
1740 exp = build_value_init (type, complain);
1741 exp = get_target_expr_sfinae (exp, complain);
1742 return exp;
1745 /* Call the constructor. */
1746 parmvec = make_tree_vector ();
1747 for (; parms != NULL_TREE; parms = TREE_CHAIN (parms))
1748 VEC_safe_push (tree, gc, parmvec, TREE_VALUE (parms));
1749 exp = build_special_member_call (NULL_TREE, complete_ctor_identifier,
1750 &parmvec, type, LOOKUP_NORMAL, complain);
1751 release_tree_vector (parmvec);
1753 if (exp == error_mark_node)
1754 return error_mark_node;
1756 return build_cplus_new (type, exp, complain);
1760 /* Add new exception specifier SPEC, to the LIST we currently have.
1761 If it's already in LIST then do nothing.
1762 Moan if it's bad and we're allowed to. COMPLAIN < 0 means we
1763 know what we're doing. */
1765 tree
1766 add_exception_specifier (tree list, tree spec, int complain)
1768 bool ok;
1769 tree core = spec;
1770 bool is_ptr;
1771 diagnostic_t diag_type = DK_UNSPECIFIED; /* none */
1773 if (spec == error_mark_node)
1774 return list;
1776 gcc_assert (spec && (!list || TREE_VALUE (list)));
1778 /* [except.spec] 1, type in an exception specifier shall not be
1779 incomplete, or pointer or ref to incomplete other than pointer
1780 to cv void. */
1781 is_ptr = TREE_CODE (core) == POINTER_TYPE;
1782 if (is_ptr || TREE_CODE (core) == REFERENCE_TYPE)
1783 core = TREE_TYPE (core);
1784 if (complain < 0)
1785 ok = true;
1786 else if (VOID_TYPE_P (core))
1787 ok = is_ptr;
1788 else if (TREE_CODE (core) == TEMPLATE_TYPE_PARM)
1789 ok = true;
1790 else if (processing_template_decl)
1791 ok = true;
1792 else
1794 ok = true;
1795 /* 15.4/1 says that types in an exception specifier must be complete,
1796 but it seems more reasonable to only require this on definitions
1797 and calls. So just give a pedwarn at this point; we will give an
1798 error later if we hit one of those two cases. */
1799 if (!COMPLETE_TYPE_P (complete_type (core)))
1800 diag_type = DK_PEDWARN; /* pedwarn */
1803 if (ok)
1805 tree probe;
1807 for (probe = list; probe; probe = TREE_CHAIN (probe))
1808 if (same_type_p (TREE_VALUE (probe), spec))
1809 break;
1810 if (!probe)
1811 list = tree_cons (NULL_TREE, spec, list);
1813 else
1814 diag_type = DK_ERROR; /* error */
1816 if (diag_type != DK_UNSPECIFIED && complain)
1817 cxx_incomplete_type_diagnostic (NULL_TREE, core, diag_type);
1819 return list;
1822 /* Like nothrow_spec_p, but don't abort on deferred noexcept. */
1824 static bool
1825 nothrow_spec_p_uninst (const_tree spec)
1827 if (DEFERRED_NOEXCEPT_SPEC_P (spec))
1828 return false;
1829 return nothrow_spec_p (spec);
1832 /* Combine the two exceptions specifier lists LIST and ADD, and return
1833 their union. If FN is non-null, it's the source of ADD. */
1835 tree
1836 merge_exception_specifiers (tree list, tree add, tree fn)
1838 tree noex, orig_list;
1840 /* No exception-specifier or noexcept(false) are less strict than
1841 anything else. Prefer the newer variant (LIST). */
1842 if (!list || list == noexcept_false_spec)
1843 return list;
1844 else if (!add || add == noexcept_false_spec)
1845 return add;
1847 /* noexcept(true) and throw() are stricter than anything else.
1848 As above, prefer the more recent one (LIST). */
1849 if (nothrow_spec_p_uninst (add))
1850 return list;
1852 noex = TREE_PURPOSE (list);
1853 if (DEFERRED_NOEXCEPT_SPEC_P (add))
1855 /* If ADD is a deferred noexcept, we must have been called from
1856 process_subob_fn. For implicitly declared functions, we build up
1857 a list of functions to consider at instantiation time. */
1858 if (noex && operand_equal_p (noex, boolean_true_node, 0))
1859 noex = NULL_TREE;
1860 gcc_assert (fn && (!noex || is_overloaded_fn (noex)));
1861 noex = build_overload (fn, noex);
1863 else if (nothrow_spec_p_uninst (list))
1864 return add;
1865 else
1866 gcc_checking_assert (!TREE_PURPOSE (add)
1867 || cp_tree_equal (noex, TREE_PURPOSE (add)));
1869 /* Combine the dynamic-exception-specifiers, if any. */
1870 orig_list = list;
1871 for (; add && TREE_VALUE (add); add = TREE_CHAIN (add))
1873 tree spec = TREE_VALUE (add);
1874 tree probe;
1876 for (probe = orig_list; probe && TREE_VALUE (probe);
1877 probe = TREE_CHAIN (probe))
1878 if (same_type_p (TREE_VALUE (probe), spec))
1879 break;
1880 if (!probe)
1882 spec = build_tree_list (NULL_TREE, spec);
1883 TREE_CHAIN (spec) = list;
1884 list = spec;
1888 /* Keep the noexcept-specifier at the beginning of the list. */
1889 if (noex != TREE_PURPOSE (list))
1890 list = tree_cons (noex, TREE_VALUE (list), TREE_CHAIN (list));
1892 return list;
1895 /* Subroutine of build_call. Ensure that each of the types in the
1896 exception specification is complete. Technically, 15.4/1 says that
1897 they need to be complete when we see a declaration of the function,
1898 but we should be able to get away with only requiring this when the
1899 function is defined or called. See also add_exception_specifier. */
1901 void
1902 require_complete_eh_spec_types (tree fntype, tree decl)
1904 tree raises;
1905 /* Don't complain about calls to op new. */
1906 if (decl && DECL_ARTIFICIAL (decl))
1907 return;
1908 for (raises = TYPE_RAISES_EXCEPTIONS (fntype); raises;
1909 raises = TREE_CHAIN (raises))
1911 tree type = TREE_VALUE (raises);
1912 if (type && !COMPLETE_TYPE_P (type))
1914 if (decl)
1915 error
1916 ("call to function %qD which throws incomplete type %q#T",
1917 decl, type);
1918 else
1919 error ("call to function which throws incomplete type %q#T",
1920 decl);
1926 #include "gt-cp-typeck2.h"