1 /* Report error messages, build initializers, and perform
2 some front-end optimizations for C++ compiler.
3 Copyright (C) 1987-2014 Free Software Foundation, Inc.
4 Hacked by Michael Tiemann (tiemann@cygnus.com)
6 This file is part of GCC.
8 GCC is free software; you can redistribute it and/or modify
9 it under the terms of the GNU General Public License as published by
10 the Free Software Foundation; either version 3, or (at your option)
13 GCC is distributed in the hope that it will be useful,
14 but WITHOUT ANY WARRANTY; without even the implied warranty of
15 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
16 GNU General Public License for more details.
18 You should have received a copy of the GNU General Public License
19 along with GCC; see the file COPYING3. If not see
20 <http://www.gnu.org/licenses/>. */
23 /* This file is part of the C++ front end.
24 It contains routines to build C++ expressions given their operands,
25 including computing the types of the result, C and C++ specific error
26 checks, and some optimization. */
30 #include "coretypes.h"
33 #include "stor-layout.h"
38 #include "diagnostic-core.h"
41 process_init_constructor (tree type
, tree init
, tsubst_flags_t complain
);
44 /* Print an error message stemming from an attempt to use
45 BASETYPE as a base class for TYPE. */
48 error_not_base_type (tree basetype
, tree type
)
50 if (TREE_CODE (basetype
) == FUNCTION_DECL
)
51 basetype
= DECL_CONTEXT (basetype
);
52 error ("type %qT is not a base type for type %qT", basetype
, type
);
53 return error_mark_node
;
57 binfo_or_else (tree base
, tree type
)
59 tree binfo
= lookup_base (type
, base
, ba_unique
,
60 NULL
, tf_warning_or_error
);
62 if (binfo
== error_mark_node
)
65 error_not_base_type (base
, type
);
69 /* According to ARM $7.1.6, "A `const' object may be initialized, but its
70 value may not be changed thereafter. */
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
80 #define ERROR_FOR_ASSIGNMENT(AS, ASM, IN, DE, ARG) \
101 /* Handle C++-specific things first. */
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"),
112 "constant field %qD"),
114 "constant field %qD"),
116 else if (INDIRECT_REF_P (arg
)
117 && TREE_CODE (TREE_TYPE (TREE_OPERAND (arg
, 0))) == REFERENCE_TYPE
118 && (VAR_P (TREE_OPERAND (arg
, 0))
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"),
125 "read-only reference %qD"),
127 "read-only reference %qD"),
128 TREE_OPERAND (arg
, 0));
130 readonly_error (input_location
, 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. */
143 /* Type which will be checked for abstractness. */
146 /* Kind of use in an unnamed declarator. */
147 abstract_class_use use
;
149 /* Position of the declaration. This is only needed for IDENTIFIER_NODEs,
150 because DECLs already carry locus information. */
153 /* Link to the next element in list. */
154 struct pending_abstract_type
* next
;
158 /* Compute the hash value of the node VAL. This function is used by the
159 hash table abstract_pending_vars. */
162 pat_calc_hash (const void* val
)
164 const struct pending_abstract_type
*pat
=
165 (const struct pending_abstract_type
*) val
;
166 return (hashval_t
) TYPE_UID (pat
->type
);
170 /* Compare node VAL1 with the type VAL2. This function is used by the
171 hash table abstract_pending_vars. */
174 pat_compare (const void* val1
, const void* val2
)
176 const struct pending_abstract_type
*const pat1
=
177 (const struct pending_abstract_type
*) val1
;
178 const_tree
const type2
= (const_tree
)val2
;
180 return (pat1
->type
== type2
);
183 /* Hash table that maintains pending_abstract_type nodes, for which we still
184 need to check for type abstractness. The key of the table is the type
185 of the declaration. */
186 static GTY ((param_is (struct pending_abstract_type
)))
187 htab_t abstract_pending_vars
= NULL
;
189 static int abstract_virtuals_error_sfinae (tree
, tree
, abstract_class_use
, tsubst_flags_t
);
191 /* This function is called after TYPE is completed, and will check if there
192 are pending declarations for which we still need to verify the abstractness
193 of TYPE, and emit a diagnostic (through abstract_virtuals_error) if TYPE
194 turned out to be incomplete. */
197 complete_type_check_abstract (tree type
)
200 struct pending_abstract_type
*pat
;
201 location_t cur_loc
= input_location
;
203 gcc_assert (COMPLETE_TYPE_P (type
));
205 if (!abstract_pending_vars
)
208 /* Retrieve the list of pending declarations for this type. */
209 slot
= htab_find_slot_with_hash (abstract_pending_vars
, type
,
210 (hashval_t
)TYPE_UID (type
), NO_INSERT
);
213 pat
= (struct pending_abstract_type
*)*slot
;
216 /* If the type is not abstract, do not do anything. */
217 if (CLASSTYPE_PURE_VIRTUALS (type
))
219 struct pending_abstract_type
*prev
= 0, *next
;
221 /* Reverse the list to emit the errors in top-down order. */
222 for (; pat
; pat
= next
)
230 /* Go through the list, and call abstract_virtuals_error for each
231 element: it will issue a diagnostic if the type is abstract. */
234 gcc_assert (type
== pat
->type
);
236 /* Tweak input_location so that the diagnostic appears at the correct
237 location. Notice that this is only needed if the decl is an
239 input_location
= pat
->locus
;
240 abstract_virtuals_error_sfinae (pat
->decl
, pat
->type
, pat
->use
,
241 tf_warning_or_error
);
246 htab_clear_slot (abstract_pending_vars
, slot
);
248 input_location
= cur_loc
;
252 /* If TYPE has abstract virtual functions, issue an error about trying
253 to create an object of that type. DECL is the object declared, or
254 NULL_TREE if the declaration is unavailable, in which case USE specifies
255 the kind of invalid use. Returns 1 if an error occurred; zero if
259 abstract_virtuals_error_sfinae (tree decl
, tree type
, abstract_class_use use
,
260 tsubst_flags_t complain
)
262 vec
<tree
, va_gc
> *pure
;
264 /* This function applies only to classes. Any other entity can never
266 if (!CLASS_TYPE_P (type
))
268 type
= TYPE_MAIN_VARIANT (type
);
271 /* Instantiation here seems to be required by the standard,
272 but breaks e.g. boost::bind. FIXME! */
273 /* In SFINAE, non-N3276 context, force instantiation. */
274 if (!(complain
& (tf_error
|tf_decltype
)))
275 complete_type (type
);
278 /* If the type is incomplete, we register it within a hash table,
279 so that we can check again once it is completed. This makes sense
280 only for objects for which we have a declaration or at least a
282 if (!COMPLETE_TYPE_P (type
) && (complain
& tf_error
))
285 struct pending_abstract_type
*pat
;
287 gcc_assert (!decl
|| DECL_P (decl
) || identifier_p (decl
));
289 if (!abstract_pending_vars
)
290 abstract_pending_vars
= htab_create_ggc (31, &pat_calc_hash
,
293 slot
= htab_find_slot_with_hash (abstract_pending_vars
, type
,
294 (hashval_t
)TYPE_UID (type
), INSERT
);
296 pat
= ggc_alloc_pending_abstract_type ();
300 pat
->locus
= ((decl
&& DECL_P (decl
))
301 ? DECL_SOURCE_LOCATION (decl
)
304 pat
->next
= (struct pending_abstract_type
*) *slot
;
310 if (!TYPE_SIZE (type
))
311 /* TYPE is being defined, and during that time
312 CLASSTYPE_PURE_VIRTUALS holds the inline friends. */
315 pure
= CLASSTYPE_PURE_VIRTUALS (type
);
319 if (!(complain
& tf_error
))
325 error ("cannot declare variable %q+D to be of abstract "
326 "type %qT", decl
, type
);
327 else if (TREE_CODE (decl
) == PARM_DECL
)
329 if (DECL_NAME (decl
))
330 error ("cannot declare parameter %q+D to be of abstract type %qT",
333 error ("cannot declare parameter to be of abstract type %qT",
336 else if (TREE_CODE (decl
) == FIELD_DECL
)
337 error ("cannot declare field %q+D to be of abstract type %qT",
339 else if (TREE_CODE (decl
) == FUNCTION_DECL
340 && TREE_CODE (TREE_TYPE (decl
)) == METHOD_TYPE
)
341 error ("invalid abstract return type for member function %q+#D", decl
);
342 else if (TREE_CODE (decl
) == FUNCTION_DECL
)
343 error ("invalid abstract return type for function %q+#D", decl
);
344 else if (identifier_p (decl
))
345 /* Here we do not have location information. */
346 error ("invalid abstract type %qT for %qE", type
, decl
);
348 error ("invalid abstract type for %q+D", decl
);
353 error ("creating array of %qT, which is an abstract class type", type
);
356 error ("invalid cast to abstract class type %qT", type
);
359 error ("invalid new-expression of abstract class type %qT", type
);
362 error ("invalid abstract return type %qT", type
);
365 error ("invalid abstract parameter type %qT", type
);
368 error ("expression of abstract class type %qT cannot "
369 "be used in throw-expression", type
);
372 error ("cannot declare catch parameter to be of abstract "
373 "class type %qT", type
);
376 error ("cannot allocate an object of abstract type %qT", type
);
379 /* Only go through this once. */
385 inform (DECL_SOURCE_LOCATION (TYPE_MAIN_DECL (type
)),
386 " because the following virtual functions are pure within %qT:",
389 FOR_EACH_VEC_ELT (*pure
, ix
, fn
)
390 if (! DECL_CLONED_FUNCTION_P (fn
)
391 || DECL_COMPLETE_DESTRUCTOR_P (fn
))
392 inform (input_location
, "\t%+#D", fn
);
394 /* Now truncate the vector. This leaves it non-null, so we know
395 there are pure virtuals, but empty so we don't list them out
404 abstract_virtuals_error_sfinae (tree decl
, tree type
, tsubst_flags_t complain
)
406 return abstract_virtuals_error_sfinae (decl
, type
, ACU_UNKNOWN
, complain
);
410 abstract_virtuals_error_sfinae (abstract_class_use use
, tree type
,
411 tsubst_flags_t complain
)
413 return abstract_virtuals_error_sfinae (NULL_TREE
, type
, use
, complain
);
417 /* Wrapper for the above function in the common case of wanting errors. */
420 abstract_virtuals_error (tree decl
, tree type
)
422 return abstract_virtuals_error_sfinae (decl
, type
, tf_warning_or_error
);
426 abstract_virtuals_error (abstract_class_use use
, tree type
)
428 return abstract_virtuals_error_sfinae (use
, type
, tf_warning_or_error
);
431 /* Print an error message for invalid use of an incomplete type.
432 VALUE is the expression that was used (or 0 if that isn't known)
433 and TYPE is the type that was invalid. DIAG_KIND indicates the
434 type of diagnostic (see diagnostic.def). */
437 cxx_incomplete_type_diagnostic (const_tree value
, const_tree type
,
438 diagnostic_t diag_kind
)
442 gcc_assert (diag_kind
== DK_WARNING
443 || diag_kind
== DK_PEDWARN
444 || diag_kind
== DK_ERROR
);
446 /* Avoid duplicate error message. */
447 if (TREE_CODE (type
) == ERROR_MARK
)
450 if (value
!= 0 && (VAR_P (value
)
451 || TREE_CODE (value
) == PARM_DECL
452 || TREE_CODE (value
) == FIELD_DECL
))
454 emit_diagnostic (diag_kind
, input_location
, 0,
455 "%q+D has incomplete type", value
);
459 /* We must print an error message. Be clever about what it says. */
461 switch (TREE_CODE (type
))
467 emit_diagnostic (diag_kind
, input_location
, 0,
468 "invalid use of incomplete type %q#T", type
);
469 if (!TYPE_TEMPLATE_INFO (type
))
470 emit_diagnostic (diag_kind
, input_location
, 0,
471 "forward declaration of %q+#T", type
);
473 emit_diagnostic (diag_kind
, input_location
, 0,
474 "declaration of %q+#T", type
);
478 emit_diagnostic (diag_kind
, input_location
, 0,
479 "invalid use of %qT", type
);
483 if (TYPE_DOMAIN (type
))
485 type
= TREE_TYPE (type
);
488 emit_diagnostic (diag_kind
, input_location
, 0,
489 "invalid use of array with unspecified bounds");
495 tree member
= TREE_OPERAND (value
, 1);
496 if (is_overloaded_fn (member
))
497 member
= get_first_fn (member
);
498 if (DECL_FUNCTION_MEMBER_P (member
)
499 && ! flag_ms_extensions
)
500 emit_diagnostic (diag_kind
, input_location
, 0,
501 "invalid use of member function "
502 "(did you forget the %<()%> ?)");
504 emit_diagnostic (diag_kind
, input_location
, 0,
505 "invalid use of member "
506 "(did you forget the %<&%> ?)");
510 case TEMPLATE_TYPE_PARM
:
512 emit_diagnostic (diag_kind
, input_location
, 0,
513 "invalid use of %<auto%>");
515 emit_diagnostic (diag_kind
, input_location
, 0,
516 "invalid use of template type parameter %qT", type
);
519 case BOUND_TEMPLATE_TEMPLATE_PARM
:
520 emit_diagnostic (diag_kind
, input_location
, 0,
521 "invalid use of template template parameter %qT",
526 emit_diagnostic (diag_kind
, input_location
, 0,
527 "invalid use of dependent type %qT", type
);
531 if (type
== init_list_type_node
)
533 emit_diagnostic (diag_kind
, input_location
, 0,
534 "invalid use of brace-enclosed initializer list");
537 gcc_assert (type
== unknown_type_node
);
538 if (value
&& TREE_CODE (value
) == COMPONENT_REF
)
540 else if (value
&& TREE_CODE (value
) == ADDR_EXPR
)
541 emit_diagnostic (diag_kind
, input_location
, 0,
542 "address of overloaded function with no contextual "
544 else if (value
&& TREE_CODE (value
) == OVERLOAD
)
545 emit_diagnostic (diag_kind
, input_location
, 0,
546 "overloaded function with no contextual type information");
548 emit_diagnostic (diag_kind
, input_location
, 0,
549 "insufficient contextual information to determine type");
557 /* Backward-compatibility interface to incomplete_type_diagnostic;
558 required by ../tree.c. */
559 #undef cxx_incomplete_type_error
561 cxx_incomplete_type_error (const_tree value
, const_tree type
)
563 cxx_incomplete_type_diagnostic (value
, type
, DK_ERROR
);
567 /* The recursive part of split_nonconstant_init. DEST is an lvalue
568 expression to which INIT should be assigned. INIT is a CONSTRUCTOR.
569 Return true if the whole of the value was initialized by the
570 generated statements. */
573 split_nonconstant_init_1 (tree dest
, tree init
)
575 unsigned HOST_WIDE_INT idx
;
576 tree field_index
, value
;
577 tree type
= TREE_TYPE (dest
);
578 tree inner_type
= NULL
;
579 bool array_type_p
= false;
580 bool complete_p
= true;
581 HOST_WIDE_INT num_split_elts
= 0;
583 switch (TREE_CODE (type
))
586 inner_type
= TREE_TYPE (type
);
592 case QUAL_UNION_TYPE
:
593 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (init
), idx
,
596 /* The current implementation of this algorithm assumes that
597 the field was set for all the elements. This is usually done
598 by process_init_constructor. */
599 gcc_assert (field_index
);
602 inner_type
= TREE_TYPE (field_index
);
604 if (TREE_CODE (value
) == CONSTRUCTOR
)
609 sub
= build4 (ARRAY_REF
, inner_type
, dest
, field_index
,
610 NULL_TREE
, NULL_TREE
);
612 sub
= build3 (COMPONENT_REF
, inner_type
, dest
, field_index
,
615 if (!split_nonconstant_init_1 (sub
, value
))
619 else if (!initializer_constant_valid_p (value
, inner_type
))
624 /* FIXME: Ordered removal is O(1) so the whole function is
625 worst-case quadratic. This could be fixed using an aside
626 bitmap to record which elements must be removed and remove
627 them all at the same time. Or by merging
628 split_non_constant_init into process_init_constructor_array,
629 that is separating constants from non-constants while building
631 CONSTRUCTOR_ELTS (init
)->ordered_remove (idx
);
634 if (TREE_CODE (field_index
) == RANGE_EXPR
)
636 /* Use build_vec_init to initialize a range. */
637 tree low
= TREE_OPERAND (field_index
, 0);
638 tree hi
= TREE_OPERAND (field_index
, 1);
639 sub
= build4 (ARRAY_REF
, inner_type
, dest
, low
,
640 NULL_TREE
, NULL_TREE
);
641 sub
= cp_build_addr_expr (sub
, tf_warning_or_error
);
642 tree max
= size_binop (MINUS_EXPR
, hi
, low
);
643 code
= build_vec_init (sub
, max
, value
, false, 0,
644 tf_warning_or_error
);
646 if (tree_fits_shwi_p (max
))
647 num_split_elts
+= tree_to_shwi (max
);
652 sub
= build4 (ARRAY_REF
, inner_type
, dest
, field_index
,
653 NULL_TREE
, NULL_TREE
);
655 sub
= build3 (COMPONENT_REF
, inner_type
, dest
, field_index
,
658 code
= build2 (INIT_EXPR
, inner_type
, sub
, value
);
659 code
= build_stmt (input_location
, EXPR_STMT
, code
);
660 code
= maybe_cleanup_point_expr_void (code
);
662 if (type_build_dtor_call (inner_type
))
664 code
= (build_special_member_call
665 (sub
, complete_dtor_identifier
, NULL
, inner_type
,
666 LOOKUP_NORMAL
, tf_warning_or_error
));
667 if (!TYPE_HAS_TRIVIAL_DESTRUCTOR (inner_type
))
668 finish_eh_cleanup (code
);
678 if (!initializer_constant_valid_p (init
, type
))
681 tree cons
= copy_node (init
);
682 CONSTRUCTOR_ELTS (init
) = NULL
;
683 code
= build2 (MODIFY_EXPR
, type
, dest
, cons
);
684 code
= build_stmt (input_location
, EXPR_STMT
, code
);
686 num_split_elts
+= CONSTRUCTOR_NELTS (init
);
694 /* The rest of the initializer is now a constant. */
695 TREE_CONSTANT (init
) = 1;
696 return complete_p
&& complete_ctor_at_level_p (TREE_TYPE (init
),
697 num_split_elts
, inner_type
);
700 /* A subroutine of store_init_value. Splits non-constant static
701 initializer INIT into a constant part and generates code to
702 perform the non-constant part of the initialization to DEST.
703 Returns the code for the runtime init. */
706 split_nonconstant_init (tree dest
, tree init
)
710 if (TREE_CODE (init
) == CONSTRUCTOR
)
712 code
= push_stmt_list ();
713 if (split_nonconstant_init_1 (dest
, init
))
715 code
= pop_stmt_list (code
);
716 DECL_INITIAL (dest
) = init
;
717 TREE_READONLY (dest
) = 0;
720 code
= build2 (INIT_EXPR
, TREE_TYPE (dest
), dest
, init
);
725 /* Perform appropriate conversions on the initial value of a variable,
726 store it in the declaration DECL,
727 and print any error messages that are appropriate.
728 If the init is invalid, store an ERROR_MARK.
730 C++: Note that INIT might be a TREE_LIST, which would mean that it is
731 a base class initializer for some aggregate type, hopefully compatible
732 with DECL. If INIT is a single element, and DECL is an aggregate
733 type, we silently convert INIT into a TREE_LIST, allowing a constructor
736 If INIT is a TREE_LIST and there is no constructor, turn INIT
737 into a CONSTRUCTOR and use standard initialization techniques.
738 Perhaps a warning should be generated?
740 Returns code to be executed if initialization could not be performed
741 for static variable. In that case, caller must emit the code. */
744 store_init_value (tree decl
, tree init
, vec
<tree
, va_gc
>** cleanups
, int flags
)
748 /* If variable's type was invalidly declared, just ignore it. */
750 type
= TREE_TYPE (decl
);
751 if (TREE_CODE (type
) == ERROR_MARK
)
754 if (MAYBE_CLASS_TYPE_P (type
))
756 if (TREE_CODE (init
) == TREE_LIST
)
758 error ("constructor syntax used, but no constructor declared "
759 "for type %qT", type
);
760 init
= build_constructor_from_list (init_list_type_node
, nreverse (init
));
763 else if (TREE_CODE (init
) == TREE_LIST
764 && TREE_TYPE (init
) != unknown_type_node
)
766 gcc_assert (TREE_CODE (decl
) != RESULT_DECL
);
768 if (TREE_CODE (init
) == TREE_LIST
769 && TREE_CODE (TREE_TYPE (decl
)) == ARRAY_TYPE
)
771 error ("cannot initialize arrays using this syntax");
775 /* We get here with code like `int a (2);' */
776 init
= build_x_compound_expr_from_list (init
, ELK_INIT
,
777 tf_warning_or_error
);
780 /* End of special C++ code. */
782 if (flags
& LOOKUP_ALREADY_DIGESTED
)
785 /* Digest the specified initializer into an expression. */
786 value
= digest_init_flags (type
, init
, flags
);
788 value
= extend_ref_init_temps (decl
, value
, cleanups
);
790 /* In C++0x constant expression is a semantic, not syntactic, property.
791 In C++98, make sure that what we thought was a constant expression at
792 template definition time is still constant and otherwise perform this
793 as optimization, e.g. to fold SIZEOF_EXPRs in the initializer. */
794 if (decl_maybe_constant_var_p (decl
) || TREE_STATIC (decl
))
797 value
= fold_non_dependent_expr (value
);
798 if (DECL_DECLARED_CONSTEXPR_P (decl
)
799 || DECL_IN_AGGR_P (decl
))
801 /* Diagnose a non-constant initializer for constexpr. */
802 if (processing_template_decl
803 && !require_potential_constant_expression (value
))
804 value
= error_mark_node
;
806 value
= cxx_constant_value (value
);
808 value
= maybe_constant_init (value
);
809 const_init
= (reduced_constant_expression_p (value
)
810 || error_operand_p (value
));
811 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl
) = const_init
;
812 TREE_CONSTANT (decl
) = const_init
&& decl_maybe_constant_var_p (decl
);
815 /* If the initializer is not a constant, fill in DECL_INITIAL with
816 the bits that are constant, and then return an expression that
817 will perform the dynamic initialization. */
818 if (value
!= error_mark_node
819 && (TREE_SIDE_EFFECTS (value
)
820 || array_of_runtime_bound_p (type
)
821 || ! reduced_constant_expression_p (value
)))
823 if (TREE_CODE (type
) == ARRAY_TYPE
824 && (TYPE_HAS_NONTRIVIAL_DESTRUCTOR (TREE_TYPE (type
))
825 || array_of_runtime_bound_p (type
)))
826 /* For an array, we only need/want a single cleanup region rather
827 than one per element. */
828 return build_vec_init (decl
, NULL_TREE
, value
, false, 1,
829 tf_warning_or_error
);
831 return split_nonconstant_init (decl
, value
);
833 /* If the value is a constant, just put it in DECL_INITIAL. If DECL
834 is an automatic variable, the middle end will turn this into a
835 dynamic initialization later. */
836 DECL_INITIAL (decl
) = value
;
841 /* Give errors about narrowing conversions within { }. */
844 check_narrowing (tree type
, tree init
)
846 tree ftype
= unlowered_expr_type (init
);
850 if (!warn_narrowing
|| !ARITHMETIC_TYPE_P (type
))
853 if (BRACE_ENCLOSED_INITIALIZER_P (init
)
854 && TREE_CODE (type
) == COMPLEX_TYPE
)
856 tree elttype
= TREE_TYPE (type
);
857 if (CONSTRUCTOR_NELTS (init
) > 0)
858 check_narrowing (elttype
, CONSTRUCTOR_ELT (init
, 0)->value
);
859 if (CONSTRUCTOR_NELTS (init
) > 1)
860 check_narrowing (elttype
, CONSTRUCTOR_ELT (init
, 1)->value
);
864 init
= maybe_constant_value (fold_non_dependent_expr_sfinae (init
, tf_none
));
866 if (TREE_CODE (type
) == INTEGER_TYPE
867 && TREE_CODE (ftype
) == REAL_TYPE
)
869 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (ftype
)
870 && CP_INTEGRAL_TYPE_P (type
))
872 if (TREE_CODE (ftype
) == ENUMERAL_TYPE
)
873 /* Check for narrowing based on the values of the enumeration. */
874 ftype
= ENUM_UNDERLYING_TYPE (ftype
);
875 if ((tree_int_cst_lt (TYPE_MAX_VALUE (type
),
876 TYPE_MAX_VALUE (ftype
))
877 || tree_int_cst_lt (TYPE_MIN_VALUE (ftype
),
878 TYPE_MIN_VALUE (type
)))
879 && (TREE_CODE (init
) != INTEGER_CST
880 || !int_fits_type_p (init
, type
)))
883 else if (TREE_CODE (ftype
) == REAL_TYPE
884 && TREE_CODE (type
) == REAL_TYPE
)
886 if (TYPE_PRECISION (type
) < TYPE_PRECISION (ftype
))
888 if (TREE_CODE (init
) == REAL_CST
)
890 /* Issue 703: Loss of precision is OK as long as the value is
891 within the representable range of the new type. */
893 d
= TREE_REAL_CST (init
);
894 real_convert (&r
, TYPE_MODE (type
), &d
);
902 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (ftype
)
903 && TREE_CODE (type
) == REAL_TYPE
)
906 if (TREE_CODE (init
) == INTEGER_CST
)
908 d
= real_value_from_int_cst (0, init
);
909 if (exact_real_truncate (TYPE_MODE (type
), &d
))
916 if (cxx_dialect
>= cxx11
)
917 pedwarn (EXPR_LOC_OR_LOC (init
, input_location
), OPT_Wnarrowing
,
918 "narrowing conversion of %qE from %qT to %qT inside { }",
921 warning_at (EXPR_LOC_OR_LOC (init
, input_location
), OPT_Wnarrowing
,
922 "narrowing conversion of %qE from %qT to %qT inside { } "
923 "is ill-formed in C++11", init
, ftype
, type
);
927 /* Process the initializer INIT for a variable of type TYPE, emitting
928 diagnostics for invalid initializers and converting the initializer as
931 For aggregate types, it assumes that reshape_init has already run, thus the
932 initializer will have the right shape (brace elision has been undone).
934 NESTED is true iff we are being called for an element of a CONSTRUCTOR. */
937 digest_init_r (tree type
, tree init
, bool nested
, int flags
,
938 tsubst_flags_t complain
)
940 enum tree_code code
= TREE_CODE (type
);
942 if (error_operand_p (init
))
943 return error_mark_node
;
947 /* We must strip the outermost array type when completing the type,
948 because the its bounds might be incomplete at the moment. */
949 if (!complete_type_or_maybe_complain (TREE_CODE (type
) == ARRAY_TYPE
950 ? TREE_TYPE (type
) : type
, NULL_TREE
,
952 return error_mark_node
;
954 /* Strip NON_LVALUE_EXPRs since we aren't using as an lvalue
955 (g++.old-deja/g++.law/casts2.C). */
956 if (TREE_CODE (init
) == NON_LVALUE_EXPR
)
957 init
= TREE_OPERAND (init
, 0);
959 /* Initialization of an array of chars from a string constant. The initializer
960 can be optionally enclosed in braces, but reshape_init has already removed
961 them if they were present. */
962 if (code
== ARRAY_TYPE
)
964 tree typ1
= TYPE_MAIN_VARIANT (TREE_TYPE (type
));
965 if (char_type_p (typ1
)
967 && TREE_CODE (init
) == STRING_CST
)
969 tree char_type
= TYPE_MAIN_VARIANT (TREE_TYPE (TREE_TYPE (init
)));
971 if (TYPE_PRECISION (typ1
) == BITS_PER_UNIT
)
973 if (char_type
!= char_type_node
)
975 if (complain
& tf_error
)
976 error ("char-array initialized from wide string");
977 return error_mark_node
;
982 if (char_type
== char_type_node
)
984 if (complain
& tf_error
)
985 error ("int-array initialized from non-wide string");
986 return error_mark_node
;
988 else if (char_type
!= typ1
)
990 if (complain
& tf_error
)
991 error ("int-array initialized from incompatible "
993 return error_mark_node
;
997 if (type
!= TREE_TYPE (init
))
999 init
= copy_node (init
);
1000 TREE_TYPE (init
) = type
;
1002 if (TYPE_DOMAIN (type
) != 0 && TREE_CONSTANT (TYPE_SIZE (type
)))
1004 int size
= TREE_INT_CST_LOW (TYPE_SIZE (type
));
1005 size
= (size
+ BITS_PER_UNIT
- 1) / BITS_PER_UNIT
;
1006 /* In C it is ok to subtract 1 from the length of the string
1007 because it's ok to ignore the terminating null char that is
1008 counted in the length of the constant, but in C++ this would
1010 if (size
< TREE_STRING_LENGTH (init
))
1011 permerror (input_location
, "initializer-string for array "
1012 "of chars is too long");
1018 /* Handle scalar types (including conversions) and references. */
1019 if ((TREE_CODE (type
) != COMPLEX_TYPE
1020 || BRACE_ENCLOSED_INITIALIZER_P (init
))
1021 && (SCALAR_TYPE_P (type
) || code
== REFERENCE_TYPE
))
1026 check_narrowing (type
, init
);
1027 init
= convert_for_initialization (0, type
, init
, flags
,
1028 ICR_INIT
, NULL_TREE
, 0,
1032 /* Skip any conversions since we'll be outputting the underlying
1034 while (CONVERT_EXPR_P (*exp
)
1035 || TREE_CODE (*exp
) == NON_LVALUE_EXPR
)
1036 exp
= &TREE_OPERAND (*exp
, 0);
1038 *exp
= cplus_expand_constant (*exp
);
1043 /* Come here only for aggregates: records, arrays, unions, complex numbers
1045 gcc_assert (TREE_CODE (type
) == ARRAY_TYPE
1046 || TREE_CODE (type
) == VECTOR_TYPE
1047 || TREE_CODE (type
) == RECORD_TYPE
1048 || TREE_CODE (type
) == UNION_TYPE
1049 || TREE_CODE (type
) == COMPLEX_TYPE
);
1051 if (BRACE_ENCLOSED_INITIALIZER_P (init
)
1052 && !TYPE_NON_AGGREGATE_CLASS (type
))
1053 return process_init_constructor (type
, init
, complain
);
1056 if (COMPOUND_LITERAL_P (init
) && TREE_CODE (type
) == ARRAY_TYPE
)
1058 if (complain
& tf_error
)
1059 error ("cannot initialize aggregate of type %qT with "
1060 "a compound literal", type
);
1062 return error_mark_node
;
1065 if (TREE_CODE (type
) == ARRAY_TYPE
1066 && !BRACE_ENCLOSED_INITIALIZER_P (init
))
1068 /* Allow the result of build_array_copy and of
1069 build_value_init_noctor. */
1070 if ((TREE_CODE (init
) == VEC_INIT_EXPR
1071 || TREE_CODE (init
) == CONSTRUCTOR
)
1072 && (same_type_ignoring_top_level_qualifiers_p
1073 (type
, TREE_TYPE (init
))))
1076 if (complain
& tf_error
)
1077 error ("array must be initialized with a brace-enclosed"
1079 return error_mark_node
;
1082 return convert_for_initialization (NULL_TREE
, type
, init
,
1084 ICR_INIT
, NULL_TREE
, 0,
1090 digest_init (tree type
, tree init
, tsubst_flags_t complain
)
1092 return digest_init_r (type
, init
, false, LOOKUP_IMPLICIT
, complain
);
1096 digest_init_flags (tree type
, tree init
, int flags
)
1098 return digest_init_r (type
, init
, false, flags
, tf_warning_or_error
);
1101 /* Set of flags used within process_init_constructor to describe the
1103 #define PICFLAG_ERRONEOUS 1
1104 #define PICFLAG_NOT_ALL_CONSTANT 2
1105 #define PICFLAG_NOT_ALL_SIMPLE 4
1107 /* Given an initializer INIT, return the flag (PICFLAG_*) which better
1111 picflag_from_initializer (tree init
)
1113 if (init
== error_mark_node
)
1114 return PICFLAG_ERRONEOUS
;
1115 else if (!TREE_CONSTANT (init
))
1116 return PICFLAG_NOT_ALL_CONSTANT
;
1117 else if (!initializer_constant_valid_p (init
, TREE_TYPE (init
)))
1118 return PICFLAG_NOT_ALL_SIMPLE
;
1122 /* Adjust INIT for going into a CONSTRUCTOR. */
1125 massage_init_elt (tree type
, tree init
, tsubst_flags_t complain
)
1127 init
= digest_init_r (type
, init
, true, LOOKUP_IMPLICIT
, complain
);
1128 /* Strip a simple TARGET_EXPR when we know this is an initializer. */
1129 if (TREE_CODE (init
) == TARGET_EXPR
1130 && !VOID_TYPE_P (TREE_TYPE (TARGET_EXPR_INITIAL (init
))))
1131 init
= TARGET_EXPR_INITIAL (init
);
1132 /* When we defer constant folding within a statement, we may want to
1133 defer this folding as well. */
1134 tree t
= fold_non_dependent_expr_sfinae (init
, complain
);
1135 t
= maybe_constant_value (t
);
1136 if (TREE_CONSTANT (t
))
1141 /* Subroutine of process_init_constructor, which will process an initializer
1142 INIT for an array or vector of type TYPE. Returns the flags (PICFLAG_*)
1143 which describe the initializers. */
1146 process_init_constructor_array (tree type
, tree init
,
1147 tsubst_flags_t complain
)
1149 unsigned HOST_WIDE_INT i
, len
= 0;
1151 bool unbounded
= false;
1152 constructor_elt
*ce
;
1153 vec
<constructor_elt
, va_gc
> *v
= CONSTRUCTOR_ELTS (init
);
1155 gcc_assert (TREE_CODE (type
) == ARRAY_TYPE
1156 || TREE_CODE (type
) == VECTOR_TYPE
);
1158 if (TREE_CODE (type
) == ARRAY_TYPE
)
1160 tree domain
= TYPE_DOMAIN (type
);
1161 if (domain
&& TREE_CONSTANT (TYPE_MAX_VALUE (domain
)))
1162 len
= (tree_to_double_int (TYPE_MAX_VALUE (domain
))
1163 - tree_to_double_int (TYPE_MIN_VALUE (domain
))
1165 .ext (TYPE_PRECISION (TREE_TYPE (domain
)),
1166 TYPE_UNSIGNED (TREE_TYPE (domain
)))
1169 unbounded
= true; /* Take as many as there are. */
1172 /* Vectors are like simple fixed-size arrays. */
1173 len
= TYPE_VECTOR_SUBPARTS (type
);
1175 /* There must not be more initializers than needed. */
1176 if (!unbounded
&& vec_safe_length (v
) > len
)
1178 if (complain
& tf_error
)
1179 error ("too many initializers for %qT", type
);
1181 return PICFLAG_ERRONEOUS
;
1184 FOR_EACH_VEC_SAFE_ELT (v
, i
, ce
)
1188 gcc_assert (TREE_CODE (ce
->index
) == INTEGER_CST
);
1189 if (compare_tree_int (ce
->index
, i
) != 0)
1191 ce
->value
= error_mark_node
;
1192 sorry ("non-trivial designated initializers not supported");
1196 ce
->index
= size_int (i
);
1197 gcc_assert (ce
->value
);
1198 ce
->value
= massage_init_elt (TREE_TYPE (type
), ce
->value
, complain
);
1200 if (ce
->value
!= error_mark_node
)
1201 gcc_assert (same_type_ignoring_top_level_qualifiers_p
1202 (TREE_TYPE (type
), TREE_TYPE (ce
->value
)));
1204 flags
|= picflag_from_initializer (ce
->value
);
1207 /* No more initializers. If the array is unbounded, we are done. Otherwise,
1208 we must add initializers ourselves. */
1210 for (; i
< len
; ++i
)
1214 if (type_build_ctor_call (TREE_TYPE (type
)))
1216 /* If this type needs constructors run for default-initialization,
1217 we can't rely on the back end to do it for us, so make the
1218 initialization explicit by list-initializing from {}. */
1219 next
= build_constructor (init_list_type_node
, NULL
);
1220 next
= massage_init_elt (TREE_TYPE (type
), next
, complain
);
1221 if (initializer_zerop (next
))
1222 /* The default zero-initialization is fine for us; don't
1223 add anything to the CONSTRUCTOR. */
1226 else if (!zero_init_p (TREE_TYPE (type
)))
1227 next
= build_zero_init (TREE_TYPE (type
),
1228 /*nelts=*/NULL_TREE
,
1229 /*static_storage_p=*/false);
1231 /* The default zero-initialization is fine for us; don't
1232 add anything to the CONSTRUCTOR. */
1237 flags
|= picflag_from_initializer (next
);
1238 CONSTRUCTOR_APPEND_ELT (v
, size_int (i
), next
);
1242 CONSTRUCTOR_ELTS (init
) = v
;
1246 /* Subroutine of process_init_constructor, which will process an initializer
1247 INIT for a class of type TYPE. Returns the flags (PICFLAG_*) which describe
1248 the initializers. */
1251 process_init_constructor_record (tree type
, tree init
,
1252 tsubst_flags_t complain
)
1254 vec
<constructor_elt
, va_gc
> *v
= NULL
;
1257 unsigned HOST_WIDE_INT idx
= 0;
1259 gcc_assert (TREE_CODE (type
) == RECORD_TYPE
);
1260 gcc_assert (!CLASSTYPE_VBASECLASSES (type
));
1261 gcc_assert (!TYPE_BINFO (type
)
1262 || !BINFO_N_BASE_BINFOS (TYPE_BINFO (type
)));
1263 gcc_assert (!TYPE_POLYMORPHIC_P (type
));
1265 /* Generally, we will always have an index for each initializer (which is
1266 a FIELD_DECL, put by reshape_init), but compound literals don't go trough
1267 reshape_init. So we need to handle both cases. */
1268 for (field
= TYPE_FIELDS (type
); field
; field
= DECL_CHAIN (field
))
1273 if (!DECL_NAME (field
) && DECL_C_BIT_FIELD (field
))
1276 if (TREE_CODE (field
) != FIELD_DECL
|| DECL_ARTIFICIAL (field
))
1279 /* If this is a bitfield, first convert to the declared type. */
1280 type
= TREE_TYPE (field
);
1281 if (DECL_BIT_FIELD_TYPE (field
))
1282 type
= DECL_BIT_FIELD_TYPE (field
);
1283 if (type
== error_mark_node
)
1284 return PICFLAG_ERRONEOUS
;
1286 if (idx
< vec_safe_length (CONSTRUCTOR_ELTS (init
)))
1288 constructor_elt
*ce
= &(*CONSTRUCTOR_ELTS (init
))[idx
];
1291 /* We can have either a FIELD_DECL or an IDENTIFIER_NODE. The
1292 latter case can happen in templates where lookup has to be
1294 gcc_assert (TREE_CODE (ce
->index
) == FIELD_DECL
1295 || identifier_p (ce
->index
));
1296 if (ce
->index
!= field
1297 && ce
->index
!= DECL_NAME (field
))
1299 ce
->value
= error_mark_node
;
1300 sorry ("non-trivial designated initializers not supported");
1304 gcc_assert (ce
->value
);
1305 next
= massage_init_elt (type
, ce
->value
, complain
);
1308 else if (type_build_ctor_call (TREE_TYPE (field
)))
1310 /* If this type needs constructors run for
1311 default-initialization, we can't rely on the back end to do it
1312 for us, so build up TARGET_EXPRs. If the type in question is
1313 a class, just build one up; if it's an array, recurse. */
1314 next
= build_constructor (init_list_type_node
, NULL
);
1315 /* Call this direct-initialization pending DR 1518 resolution so
1316 that explicit default ctors don't break valid C++03 code. */
1317 CONSTRUCTOR_IS_DIRECT_INIT (next
) = true;
1318 next
= massage_init_elt (TREE_TYPE (field
), next
, complain
);
1320 /* Warn when some struct elements are implicitly initialized. */
1321 warning (OPT_Wmissing_field_initializers
,
1322 "missing initializer for member %qD", field
);
1326 if (TREE_READONLY (field
))
1328 if (complain
& tf_error
)
1329 error ("uninitialized const member %qD", field
);
1331 return PICFLAG_ERRONEOUS
;
1333 else if (CLASSTYPE_READONLY_FIELDS_NEED_INIT (TREE_TYPE (field
)))
1335 if (complain
& tf_error
)
1336 error ("member %qD with uninitialized const fields", field
);
1338 return PICFLAG_ERRONEOUS
;
1340 else if (TREE_CODE (TREE_TYPE (field
)) == REFERENCE_TYPE
)
1342 if (complain
& tf_error
)
1343 error ("member %qD is uninitialized reference", field
);
1345 return PICFLAG_ERRONEOUS
;
1348 /* Warn when some struct elements are implicitly initialized
1350 warning (OPT_Wmissing_field_initializers
,
1351 "missing initializer for member %qD", field
);
1353 if (!zero_init_p (TREE_TYPE (field
)))
1354 next
= build_zero_init (TREE_TYPE (field
), /*nelts=*/NULL_TREE
,
1355 /*static_storage_p=*/false);
1357 /* The default zero-initialization is fine for us; don't
1358 add anything to the CONSTRUCTOR. */
1362 /* If this is a bitfield, now convert to the lowered type. */
1363 if (type
!= TREE_TYPE (field
))
1364 next
= cp_convert_and_check (TREE_TYPE (field
), next
, complain
);
1365 flags
|= picflag_from_initializer (next
);
1366 CONSTRUCTOR_APPEND_ELT (v
, field
, next
);
1369 if (idx
< vec_safe_length (CONSTRUCTOR_ELTS (init
)))
1371 if (complain
& tf_error
)
1372 error ("too many initializers for %qT", type
);
1374 return PICFLAG_ERRONEOUS
;
1377 CONSTRUCTOR_ELTS (init
) = v
;
1381 /* Subroutine of process_init_constructor, which will process a single
1382 initializer INIT for a union of type TYPE. Returns the flags (PICFLAG_*)
1383 which describe the initializer. */
1386 process_init_constructor_union (tree type
, tree init
,
1387 tsubst_flags_t complain
)
1389 constructor_elt
*ce
;
1392 /* If the initializer was empty, use default zero initialization. */
1393 if (vec_safe_is_empty (CONSTRUCTOR_ELTS (init
)))
1396 len
= CONSTRUCTOR_ELTS (init
)->length ();
1399 if (!(complain
& tf_error
))
1400 return PICFLAG_ERRONEOUS
;
1401 error ("too many initializers for %qT", type
);
1402 CONSTRUCTOR_ELTS (init
)->block_remove (1, len
-1);
1405 ce
= &(*CONSTRUCTOR_ELTS (init
))[0];
1407 /* If this element specifies a field, initialize via that field. */
1410 if (TREE_CODE (ce
->index
) == FIELD_DECL
)
1412 else if (identifier_p (ce
->index
))
1414 /* This can happen within a cast, see g++.dg/opt/cse2.C. */
1415 tree name
= ce
->index
;
1417 for (field
= TYPE_FIELDS (type
); field
; field
= TREE_CHAIN (field
))
1418 if (DECL_NAME (field
) == name
)
1422 if (complain
& tf_error
)
1423 error ("no field %qD found in union being initialized",
1425 ce
->value
= error_mark_node
;
1431 gcc_assert (TREE_CODE (ce
->index
) == INTEGER_CST
1432 || TREE_CODE (ce
->index
) == RANGE_EXPR
);
1433 if (complain
& tf_error
)
1434 error ("index value instead of field name in union initializer");
1435 ce
->value
= error_mark_node
;
1440 /* Find the first named field. ANSI decided in September 1990
1441 that only named fields count here. */
1442 tree field
= TYPE_FIELDS (type
);
1443 while (field
&& (!DECL_NAME (field
) || TREE_CODE (field
) != FIELD_DECL
))
1444 field
= TREE_CHAIN (field
);
1445 if (field
== NULL_TREE
)
1447 if (complain
& tf_error
)
1448 error ("too many initializers for %qT", type
);
1449 ce
->value
= error_mark_node
;
1454 if (ce
->value
&& ce
->value
!= error_mark_node
)
1455 ce
->value
= massage_init_elt (TREE_TYPE (ce
->index
), ce
->value
, complain
);
1457 return picflag_from_initializer (ce
->value
);
1460 /* Process INIT, a constructor for a variable of aggregate type TYPE. The
1461 constructor is a brace-enclosed initializer, and will be modified in-place.
1463 Each element is converted to the right type through digest_init, and
1464 missing initializers are added following the language rules (zero-padding,
1467 After the execution, the initializer will have TREE_CONSTANT if all elts are
1468 constant, and TREE_STATIC set if, in addition, all elts are simple enough
1469 constants that the assembler and linker can compute them.
1471 The function returns the initializer itself, or error_mark_node in case
1475 process_init_constructor (tree type
, tree init
, tsubst_flags_t complain
)
1479 gcc_assert (BRACE_ENCLOSED_INITIALIZER_P (init
));
1481 if (TREE_CODE (type
) == ARRAY_TYPE
|| TREE_CODE (type
) == VECTOR_TYPE
)
1482 flags
= process_init_constructor_array (type
, init
, complain
);
1483 else if (TREE_CODE (type
) == RECORD_TYPE
)
1484 flags
= process_init_constructor_record (type
, init
, complain
);
1485 else if (TREE_CODE (type
) == UNION_TYPE
)
1486 flags
= process_init_constructor_union (type
, init
, complain
);
1490 if (flags
& PICFLAG_ERRONEOUS
)
1491 return error_mark_node
;
1493 TREE_TYPE (init
) = type
;
1494 if (TREE_CODE (type
) == ARRAY_TYPE
&& TYPE_DOMAIN (type
) == NULL_TREE
)
1495 cp_complete_array_type (&TREE_TYPE (init
), init
, /*do_default=*/0);
1496 if (flags
& PICFLAG_NOT_ALL_CONSTANT
)
1497 /* Make sure TREE_CONSTANT isn't set from build_constructor. */
1498 TREE_CONSTANT (init
) = false;
1501 TREE_CONSTANT (init
) = 1;
1502 if (!(flags
& PICFLAG_NOT_ALL_SIMPLE
))
1503 TREE_STATIC (init
) = 1;
1508 /* Given a structure or union value DATUM, construct and return
1509 the structure or union component which results from narrowing
1510 that value to the base specified in BASETYPE. For example, given the
1513 class L { int ii; };
1514 class A : L { ... };
1515 class B : L { ... };
1516 class C : A, B { ... };
1524 x.A::ii refers to the ii member of the L part of
1525 the A part of the C object named by X. In this case,
1526 DATUM would be x, and BASETYPE would be A.
1528 I used to think that this was nonconformant, that the standard specified
1529 that first we look up ii in A, then convert x to an L& and pull out the
1530 ii part. But in fact, it does say that we convert x to an A&; A here
1531 is known as the "naming class". (jason 2000-12-19)
1533 BINFO_P points to a variable initialized either to NULL_TREE or to the
1534 binfo for the specific base subobject we want to convert to. */
1537 build_scoped_ref (tree datum
, tree basetype
, tree
* binfo_p
)
1541 if (datum
== error_mark_node
)
1542 return error_mark_node
;
1546 binfo
= lookup_base (TREE_TYPE (datum
), basetype
, ba_check
,
1547 NULL
, tf_warning_or_error
);
1549 if (!binfo
|| binfo
== error_mark_node
)
1551 *binfo_p
= NULL_TREE
;
1553 error_not_base_type (basetype
, TREE_TYPE (datum
));
1554 return error_mark_node
;
1558 return build_base_path (PLUS_EXPR
, datum
, binfo
, 1,
1559 tf_warning_or_error
);
1562 /* Build a reference to an object specified by the C++ `->' operator.
1563 Usually this just involves dereferencing the object, but if the
1564 `->' operator is overloaded, then such overloads must be
1565 performed until an object which does not have the `->' operator
1566 overloaded is found. An error is reported when circular pointer
1567 delegation is detected. */
1570 build_x_arrow (location_t loc
, tree expr
, tsubst_flags_t complain
)
1572 tree orig_expr
= expr
;
1573 tree type
= TREE_TYPE (expr
);
1574 tree last_rval
= NULL_TREE
;
1575 vec
<tree
, va_gc
> *types_memoized
= NULL
;
1577 if (type
== error_mark_node
)
1578 return error_mark_node
;
1580 if (processing_template_decl
)
1582 if (type_dependent_expression_p (expr
))
1583 return build_min_nt_loc (loc
, ARROW_EXPR
, expr
);
1584 expr
= build_non_dependent_expr (expr
);
1587 if (MAYBE_CLASS_TYPE_P (type
))
1589 struct tinst_level
*actual_inst
= current_instantiation ();
1592 while ((expr
= build_new_op (loc
, COMPONENT_REF
,
1593 LOOKUP_NORMAL
, expr
, NULL_TREE
, NULL_TREE
,
1596 if (expr
== error_mark_node
)
1597 return error_mark_node
;
1599 if (fn
&& DECL_USE_TEMPLATE (fn
))
1600 push_tinst_level (fn
);
1603 if (vec_member (TREE_TYPE (expr
), types_memoized
))
1605 if (complain
& tf_error
)
1606 error ("circular pointer delegation detected");
1607 return error_mark_node
;
1610 vec_safe_push (types_memoized
, TREE_TYPE (expr
));
1614 while (current_instantiation () != actual_inst
)
1617 if (last_rval
== NULL_TREE
)
1619 if (complain
& tf_error
)
1620 error ("base operand of %<->%> has non-pointer type %qT", type
);
1621 return error_mark_node
;
1624 if (TREE_CODE (TREE_TYPE (last_rval
)) == REFERENCE_TYPE
)
1625 last_rval
= convert_from_reference (last_rval
);
1628 last_rval
= decay_conversion (expr
, complain
);
1630 if (TYPE_PTR_P (TREE_TYPE (last_rval
)))
1632 if (processing_template_decl
)
1634 expr
= build_min (ARROW_EXPR
, TREE_TYPE (TREE_TYPE (last_rval
)),
1636 TREE_SIDE_EFFECTS (expr
) = TREE_SIDE_EFFECTS (last_rval
);
1640 return cp_build_indirect_ref (last_rval
, RO_NULL
, complain
);
1643 if (complain
& tf_error
)
1646 error ("result of %<operator->()%> yields non-pointer result");
1648 error ("base operand of %<->%> is not a pointer");
1650 return error_mark_node
;
1653 /* Return an expression for "DATUM .* COMPONENT". DATUM has not
1654 already been checked out to be of aggregate type. */
1657 build_m_component_ref (tree datum
, tree component
, tsubst_flags_t complain
)
1665 if (error_operand_p (datum
) || error_operand_p (component
))
1666 return error_mark_node
;
1668 datum
= mark_lvalue_use (datum
);
1669 component
= mark_rvalue_use (component
);
1671 ptrmem_type
= TREE_TYPE (component
);
1672 if (!TYPE_PTRMEM_P (ptrmem_type
))
1674 if (complain
& tf_error
)
1675 error ("%qE cannot be used as a member pointer, since it is of "
1676 "type %qT", component
, ptrmem_type
);
1677 return error_mark_node
;
1680 objtype
= TYPE_MAIN_VARIANT (TREE_TYPE (datum
));
1681 if (! MAYBE_CLASS_TYPE_P (objtype
))
1683 if (complain
& tf_error
)
1684 error ("cannot apply member pointer %qE to %qE, which is of "
1685 "non-class type %qT", component
, datum
, objtype
);
1686 return error_mark_node
;
1689 type
= TYPE_PTRMEM_POINTED_TO_TYPE (ptrmem_type
);
1690 ctype
= complete_type (TYPE_PTRMEM_CLASS_TYPE (ptrmem_type
));
1692 if (!COMPLETE_TYPE_P (ctype
))
1694 if (!same_type_p (ctype
, objtype
))
1700 binfo
= lookup_base (objtype
, ctype
, ba_check
, NULL
, complain
);
1705 if (complain
& tf_error
)
1706 error ("pointer to member type %qT incompatible with object "
1707 "type %qT", type
, objtype
);
1708 return error_mark_node
;
1710 else if (binfo
== error_mark_node
)
1711 return error_mark_node
;
1714 if (TYPE_PTRDATAMEM_P (ptrmem_type
))
1716 cp_lvalue_kind kind
= lvalue_kind (datum
);
1719 /* Compute the type of the field, as described in [expr.ref].
1720 There's no such thing as a mutable pointer-to-member, so
1721 things are not as complex as they are for references to
1722 non-static data members. */
1723 type
= cp_build_qualified_type (type
,
1724 (cp_type_quals (type
)
1725 | cp_type_quals (TREE_TYPE (datum
))));
1727 datum
= build_address (datum
);
1729 /* Convert object to the correct base. */
1732 datum
= build_base_path (PLUS_EXPR
, datum
, binfo
, 1, complain
);
1733 if (datum
== error_mark_node
)
1734 return error_mark_node
;
1737 /* Build an expression for "object + offset" where offset is the
1738 value stored in the pointer-to-data-member. */
1739 ptype
= build_pointer_type (type
);
1740 datum
= fold_build_pointer_plus (fold_convert (ptype
, datum
), component
);
1741 datum
= cp_build_indirect_ref (datum
, RO_NULL
, complain
);
1742 if (datum
== error_mark_node
)
1743 return error_mark_node
;
1745 /* If the object expression was an rvalue, return an rvalue. */
1746 if (kind
& clk_class
)
1747 datum
= rvalue (datum
);
1748 else if (kind
& clk_rvalueref
)
1749 datum
= move (datum
);
1754 /* 5.5/6: In a .* expression whose object expression is an rvalue, the
1755 program is ill-formed if the second operand is a pointer to member
1756 function with ref-qualifier &. In a .* expression whose object
1757 expression is an lvalue, the program is ill-formed if the second
1758 operand is a pointer to member function with ref-qualifier &&. */
1759 if (FUNCTION_REF_QUALIFIED (type
))
1761 bool lval
= real_lvalue_p (datum
);
1762 if (lval
&& FUNCTION_RVALUE_QUALIFIED (type
))
1764 if (complain
& tf_error
)
1765 error ("pointer-to-member-function type %qT requires an rvalue",
1767 return error_mark_node
;
1769 else if (!lval
&& !FUNCTION_RVALUE_QUALIFIED (type
))
1771 if (complain
& tf_error
)
1772 error ("pointer-to-member-function type %qT requires an lvalue",
1774 return error_mark_node
;
1777 return build2 (OFFSET_REF
, type
, datum
, component
);
1781 /* Return a tree node for the expression TYPENAME '(' PARMS ')'. */
1784 build_functional_cast (tree exp
, tree parms
, tsubst_flags_t complain
)
1786 /* This is either a call to a constructor,
1787 or a C cast in C++'s `functional' notation. */
1789 /* The type to which we are casting. */
1791 vec
<tree
, va_gc
> *parmvec
;
1793 if (error_operand_p (exp
) || parms
== error_mark_node
)
1794 return error_mark_node
;
1796 if (TREE_CODE (exp
) == TYPE_DECL
)
1798 type
= TREE_TYPE (exp
);
1800 if (complain
& tf_warning
1801 && TREE_DEPRECATED (type
)
1802 && DECL_ARTIFICIAL (exp
))
1803 warn_deprecated_use (type
, NULL_TREE
);
1808 /* We need to check this explicitly, since value-initialization of
1809 arrays is allowed in other situations. */
1810 if (TREE_CODE (type
) == ARRAY_TYPE
)
1812 if (complain
& tf_error
)
1813 error ("functional cast to array type %qT", type
);
1814 return error_mark_node
;
1817 if (type_uses_auto (type
))
1819 if (complain
& tf_error
)
1820 error ("invalid use of %<auto%>");
1821 return error_mark_node
;
1824 if (processing_template_decl
)
1828 /* Diagnose this even in a template. We could also try harder
1829 to give all the usual errors when the type and args are
1831 if (TREE_CODE (type
) == REFERENCE_TYPE
&& !parms
)
1833 if (complain
& tf_error
)
1834 error ("invalid value-initialization of reference type");
1835 return error_mark_node
;
1838 t
= build_min (CAST_EXPR
, type
, parms
);
1839 /* We don't know if it will or will not have side effects. */
1840 TREE_SIDE_EFFECTS (t
) = 1;
1844 if (! MAYBE_CLASS_TYPE_P (type
))
1846 if (parms
== NULL_TREE
)
1848 if (VOID_TYPE_P (type
))
1849 return void_zero_node
;
1850 return build_value_init (cv_unqualified (type
), complain
);
1853 /* This must build a C cast. */
1854 parms
= build_x_compound_expr_from_list (parms
, ELK_FUNC_CAST
, complain
);
1855 return cp_build_c_cast (type
, parms
, complain
);
1858 /* Prepare to evaluate as a call to a constructor. If this expression
1859 is actually used, for example,
1861 return X (arg1, arg2, ...);
1863 then the slot being initialized will be filled in. */
1865 if (!complete_type_or_maybe_complain (type
, NULL_TREE
, complain
))
1866 return error_mark_node
;
1867 if (abstract_virtuals_error_sfinae (ACU_CAST
, type
, complain
))
1868 return error_mark_node
;
1872 If the expression list is a single-expression, the type
1873 conversion is equivalent (in definedness, and if defined in
1874 meaning) to the corresponding cast expression. */
1875 if (parms
&& TREE_CHAIN (parms
) == NULL_TREE
)
1876 return cp_build_c_cast (type
, TREE_VALUE (parms
), complain
);
1880 The expression T(), where T is a simple-type-specifier for a
1881 non-array complete object type or the (possibly cv-qualified)
1882 void type, creates an rvalue of the specified type, which is
1883 value-initialized. */
1885 if (parms
== NULL_TREE
)
1887 exp
= build_value_init (type
, complain
);
1888 exp
= get_target_expr_sfinae (exp
, complain
);
1892 /* Call the constructor. */
1893 parmvec
= make_tree_vector ();
1894 for (; parms
!= NULL_TREE
; parms
= TREE_CHAIN (parms
))
1895 vec_safe_push (parmvec
, TREE_VALUE (parms
));
1896 exp
= build_special_member_call (NULL_TREE
, complete_ctor_identifier
,
1897 &parmvec
, type
, LOOKUP_NORMAL
, complain
);
1898 release_tree_vector (parmvec
);
1900 if (exp
== error_mark_node
)
1901 return error_mark_node
;
1903 return build_cplus_new (type
, exp
, complain
);
1907 /* Add new exception specifier SPEC, to the LIST we currently have.
1908 If it's already in LIST then do nothing.
1909 Moan if it's bad and we're allowed to. COMPLAIN < 0 means we
1910 know what we're doing. */
1913 add_exception_specifier (tree list
, tree spec
, int complain
)
1918 diagnostic_t diag_type
= DK_UNSPECIFIED
; /* none */
1920 if (spec
== error_mark_node
)
1923 gcc_assert (spec
&& (!list
|| TREE_VALUE (list
)));
1925 /* [except.spec] 1, type in an exception specifier shall not be
1926 incomplete, or pointer or ref to incomplete other than pointer
1928 is_ptr
= TYPE_PTR_P (core
);
1929 if (is_ptr
|| TREE_CODE (core
) == REFERENCE_TYPE
)
1930 core
= TREE_TYPE (core
);
1933 else if (VOID_TYPE_P (core
))
1935 else if (TREE_CODE (core
) == TEMPLATE_TYPE_PARM
)
1937 else if (processing_template_decl
)
1942 /* 15.4/1 says that types in an exception specifier must be complete,
1943 but it seems more reasonable to only require this on definitions
1944 and calls. So just give a pedwarn at this point; we will give an
1945 error later if we hit one of those two cases. */
1946 if (!COMPLETE_TYPE_P (complete_type (core
)))
1947 diag_type
= DK_PEDWARN
; /* pedwarn */
1954 for (probe
= list
; probe
; probe
= TREE_CHAIN (probe
))
1955 if (same_type_p (TREE_VALUE (probe
), spec
))
1958 list
= tree_cons (NULL_TREE
, spec
, list
);
1961 diag_type
= DK_ERROR
; /* error */
1963 if (diag_type
!= DK_UNSPECIFIED
1964 && (complain
& tf_warning_or_error
))
1965 cxx_incomplete_type_diagnostic (NULL_TREE
, core
, diag_type
);
1970 /* Like nothrow_spec_p, but don't abort on deferred noexcept. */
1973 nothrow_spec_p_uninst (const_tree spec
)
1975 if (DEFERRED_NOEXCEPT_SPEC_P (spec
))
1977 return nothrow_spec_p (spec
);
1980 /* Combine the two exceptions specifier lists LIST and ADD, and return
1981 their union. If FN is non-null, it's the source of ADD. */
1984 merge_exception_specifiers (tree list
, tree add
, tree fn
)
1986 tree noex
, orig_list
;
1988 /* No exception-specifier or noexcept(false) are less strict than
1989 anything else. Prefer the newer variant (LIST). */
1990 if (!list
|| list
== noexcept_false_spec
)
1992 else if (!add
|| add
== noexcept_false_spec
)
1995 /* noexcept(true) and throw() are stricter than anything else.
1996 As above, prefer the more recent one (LIST). */
1997 if (nothrow_spec_p_uninst (add
))
2000 noex
= TREE_PURPOSE (list
);
2001 if (DEFERRED_NOEXCEPT_SPEC_P (add
))
2003 /* If ADD is a deferred noexcept, we must have been called from
2004 process_subob_fn. For implicitly declared functions, we build up
2005 a list of functions to consider at instantiation time. */
2006 if (noex
&& operand_equal_p (noex
, boolean_true_node
, 0))
2008 gcc_assert (fn
&& (!noex
|| is_overloaded_fn (noex
)));
2009 noex
= build_overload (fn
, noex
);
2011 else if (nothrow_spec_p_uninst (list
))
2014 gcc_checking_assert (!TREE_PURPOSE (add
)
2015 || cp_tree_equal (noex
, TREE_PURPOSE (add
)));
2017 /* Combine the dynamic-exception-specifiers, if any. */
2019 for (; add
&& TREE_VALUE (add
); add
= TREE_CHAIN (add
))
2021 tree spec
= TREE_VALUE (add
);
2024 for (probe
= orig_list
; probe
&& TREE_VALUE (probe
);
2025 probe
= TREE_CHAIN (probe
))
2026 if (same_type_p (TREE_VALUE (probe
), spec
))
2030 spec
= build_tree_list (NULL_TREE
, spec
);
2031 TREE_CHAIN (spec
) = list
;
2036 /* Keep the noexcept-specifier at the beginning of the list. */
2037 if (noex
!= TREE_PURPOSE (list
))
2038 list
= tree_cons (noex
, TREE_VALUE (list
), TREE_CHAIN (list
));
2043 /* Subroutine of build_call. Ensure that each of the types in the
2044 exception specification is complete. Technically, 15.4/1 says that
2045 they need to be complete when we see a declaration of the function,
2046 but we should be able to get away with only requiring this when the
2047 function is defined or called. See also add_exception_specifier. */
2050 require_complete_eh_spec_types (tree fntype
, tree decl
)
2053 /* Don't complain about calls to op new. */
2054 if (decl
&& DECL_ARTIFICIAL (decl
))
2056 for (raises
= TYPE_RAISES_EXCEPTIONS (fntype
); raises
;
2057 raises
= TREE_CHAIN (raises
))
2059 tree type
= TREE_VALUE (raises
);
2060 if (type
&& !COMPLETE_TYPE_P (type
))
2064 ("call to function %qD which throws incomplete type %q#T",
2067 error ("call to function which throws incomplete type %q#T",
2074 #include "gt-cp-typeck2.h"