1 /* Perform -*- C++ -*- constant expression evaluation, including calls to
2 constexpr functions. These routines are used both during actual parsing
3 and during the instantiation of template functions.
5 Copyright (C) 1998-2017 Free Software Foundation, Inc.
7 This file is part of GCC.
9 GCC is free software; you can redistribute it and/or modify it
10 under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3, or (at your option)
14 GCC is distributed in the hope that it will be useful, but
15 WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING3. If not see
21 <http://www.gnu.org/licenses/>. */
25 #include "coretypes.h"
28 #include "c-family/c-objc.h"
29 #include "tree-iterator.h"
32 #include "tree-inline.h"
34 #include "gimple-fold.h"
37 static bool verify_constant (tree
, bool, bool *, bool *);
38 #define VERIFY_CONSTANT(X) \
40 if (verify_constant ((X), ctx->quiet, non_constant_p, overflow_p)) \
44 /* Returns true iff FUN is an instantiation of a constexpr function
45 template or a defaulted constexpr function. */
48 is_instantiation_of_constexpr (tree fun
)
50 return ((DECL_TEMPLOID_INSTANTIATION (fun
)
51 && DECL_DECLARED_CONSTEXPR_P (DECL_TI_TEMPLATE (fun
)))
52 || (DECL_DEFAULTED_FN (fun
)
53 && DECL_DECLARED_CONSTEXPR_P (fun
)));
56 /* Return true if T is a literal type. */
59 literal_type_p (tree t
)
63 || TREE_CODE (t
) == REFERENCE_TYPE
64 || (VOID_TYPE_P (t
) && cxx_dialect
>= cxx14
))
68 t
= complete_type (t
);
69 gcc_assert (COMPLETE_TYPE_P (t
) || errorcount
);
70 return CLASSTYPE_LITERAL_P (t
);
72 if (TREE_CODE (t
) == ARRAY_TYPE
)
73 return literal_type_p (strip_array_types (t
));
77 /* If DECL is a variable declared `constexpr', require its type
78 be literal. Return the DECL if OK, otherwise NULL. */
81 ensure_literal_type_for_constexpr_object (tree decl
)
83 tree type
= TREE_TYPE (decl
);
85 && (DECL_DECLARED_CONSTEXPR_P (decl
)
86 || var_in_constexpr_fn (decl
))
87 && !processing_template_decl
)
89 tree stype
= strip_array_types (type
);
90 if (CLASS_TYPE_P (stype
) && !COMPLETE_TYPE_P (complete_type (stype
)))
91 /* Don't complain here, we'll complain about incompleteness
92 when we try to initialize the variable. */;
93 else if (!literal_type_p (type
))
95 if (DECL_DECLARED_CONSTEXPR_P (decl
))
97 error ("the type %qT of constexpr variable %qD is not literal",
99 explain_non_literal_class (type
);
103 if (!DECL_TEMPLATE_INSTANTIATION (current_function_decl
))
105 error ("variable %qD of non-literal type %qT in %<constexpr%> "
106 "function", decl
, type
);
107 explain_non_literal_class (type
);
109 cp_function_chain
->invalid_constexpr
= true;
117 /* Representation of entries in the constexpr function definition table. */
119 struct GTY((for_user
)) constexpr_fundef
{
124 struct constexpr_fundef_hasher
: ggc_ptr_hash
<constexpr_fundef
>
126 static hashval_t
hash (constexpr_fundef
*);
127 static bool equal (constexpr_fundef
*, constexpr_fundef
*);
130 /* This table holds all constexpr function definitions seen in
131 the current translation unit. */
133 static GTY (()) hash_table
<constexpr_fundef_hasher
> *constexpr_fundef_table
;
135 /* Utility function used for managing the constexpr function table.
136 Return true if the entries pointed to by P and Q are for the
137 same constexpr function. */
140 constexpr_fundef_hasher::equal (constexpr_fundef
*lhs
, constexpr_fundef
*rhs
)
142 return lhs
->decl
== rhs
->decl
;
145 /* Utility function used for managing the constexpr function table.
146 Return a hash value for the entry pointed to by Q. */
149 constexpr_fundef_hasher::hash (constexpr_fundef
*fundef
)
151 return DECL_UID (fundef
->decl
);
154 /* Return a previously saved definition of function FUN. */
156 static constexpr_fundef
*
157 retrieve_constexpr_fundef (tree fun
)
159 constexpr_fundef fundef
= { NULL
, NULL
};
160 if (constexpr_fundef_table
== NULL
)
164 return constexpr_fundef_table
->find (&fundef
);
167 /* Check whether the parameter and return types of FUN are valid for a
168 constexpr function, and complain if COMPLAIN. */
171 is_valid_constexpr_fn (tree fun
, bool complain
)
175 if (DECL_INHERITED_CTOR (fun
)
176 && TREE_CODE (fun
) == TEMPLATE_DECL
)
180 error ("inherited constructor %qD is not constexpr",
181 DECL_INHERITED_CTOR (fun
));
185 for (tree parm
= FUNCTION_FIRST_USER_PARM (fun
);
186 parm
!= NULL_TREE
; parm
= TREE_CHAIN (parm
))
187 if (!literal_type_p (TREE_TYPE (parm
)))
192 error ("invalid type for parameter %d of constexpr "
193 "function %q+#D", DECL_PARM_INDEX (parm
), fun
);
194 explain_non_literal_class (TREE_TYPE (parm
));
199 if (!DECL_CONSTRUCTOR_P (fun
))
201 tree rettype
= TREE_TYPE (TREE_TYPE (fun
));
202 if (!literal_type_p (rettype
))
207 error ("invalid return type %qT of constexpr function %q+D",
209 explain_non_literal_class (rettype
);
213 /* C++14 DR 1684 removed this restriction. */
214 if (cxx_dialect
< cxx14
215 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fun
)
216 && !CLASSTYPE_LITERAL_P (DECL_CONTEXT (fun
)))
220 && pedwarn (DECL_SOURCE_LOCATION (fun
), OPT_Wpedantic
,
221 "enclosing class of constexpr non-static member "
222 "function %q+#D is not a literal type", fun
))
223 explain_non_literal_class (DECL_CONTEXT (fun
));
226 else if (CLASSTYPE_VBASECLASSES (DECL_CONTEXT (fun
)))
230 error ("%q#T has virtual base classes", DECL_CONTEXT (fun
));
236 /* Subroutine of build_data_member_initialization. MEMBER is a COMPONENT_REF
237 for a member of an anonymous aggregate, INIT is the initializer for that
238 member, and VEC_OUTER is the vector of constructor elements for the class
239 whose constructor we are processing. Add the initializer to the vector
240 and return true to indicate success. */
243 build_anon_member_initialization (tree member
, tree init
,
244 vec
<constructor_elt
, va_gc
> **vec_outer
)
246 /* MEMBER presents the relevant fields from the inside out, but we need
247 to build up the initializer from the outside in so that we can reuse
248 previously built CONSTRUCTORs if this is, say, the second field in an
249 anonymous struct. So we use a vec as a stack. */
250 auto_vec
<tree
, 2> fields
;
253 fields
.safe_push (TREE_OPERAND (member
, 1));
254 member
= TREE_OPERAND (member
, 0);
256 while (ANON_AGGR_TYPE_P (TREE_TYPE (member
))
257 && TREE_CODE (member
) == COMPONENT_REF
);
259 /* VEC has the constructor elements vector for the context of FIELD.
260 If FIELD is an anonymous aggregate, we will push inside it. */
261 vec
<constructor_elt
, va_gc
> **vec
= vec_outer
;
263 while (field
= fields
.pop(),
264 ANON_AGGR_TYPE_P (TREE_TYPE (field
)))
267 /* If there is already an outer constructor entry for the anonymous
268 aggregate FIELD, use it; otherwise, insert one. */
269 if (vec_safe_is_empty (*vec
)
270 || (*vec
)->last().index
!= field
)
272 ctor
= build_constructor (TREE_TYPE (field
), NULL
);
273 CONSTRUCTOR_APPEND_ELT (*vec
, field
, ctor
);
276 ctor
= (*vec
)->last().value
;
277 vec
= &CONSTRUCTOR_ELTS (ctor
);
280 /* Now we're at the innermost field, the one that isn't an anonymous
281 aggregate. Add its initializer to the CONSTRUCTOR and we're done. */
282 gcc_assert (fields
.is_empty());
283 CONSTRUCTOR_APPEND_ELT (*vec
, field
, init
);
288 /* Subroutine of build_constexpr_constructor_member_initializers.
289 The expression tree T represents a data member initialization
290 in a (constexpr) constructor definition. Build a pairing of
291 the data member with its initializer, and prepend that pair
292 to the existing initialization pair INITS. */
295 build_data_member_initialization (tree t
, vec
<constructor_elt
, va_gc
> **vec
)
298 if (TREE_CODE (t
) == CLEANUP_POINT_EXPR
)
299 t
= TREE_OPERAND (t
, 0);
300 if (TREE_CODE (t
) == EXPR_STMT
)
301 t
= TREE_OPERAND (t
, 0);
302 if (t
== error_mark_node
)
304 if (TREE_CODE (t
) == STATEMENT_LIST
)
306 tree_stmt_iterator i
;
307 for (i
= tsi_start (t
); !tsi_end_p (i
); tsi_next (&i
))
309 if (! build_data_member_initialization (tsi_stmt (i
), vec
))
314 if (TREE_CODE (t
) == CLEANUP_STMT
)
316 /* We can't see a CLEANUP_STMT in a constructor for a literal class,
317 but we can in a constexpr constructor for a non-literal class. Just
318 ignore it; either all the initialization will be constant, in which
319 case the cleanup can't run, or it can't be constexpr.
320 Still recurse into CLEANUP_BODY. */
321 return build_data_member_initialization (CLEANUP_BODY (t
), vec
);
323 if (TREE_CODE (t
) == CONVERT_EXPR
)
324 t
= TREE_OPERAND (t
, 0);
325 if (TREE_CODE (t
) == INIT_EXPR
326 /* vptr initialization shows up as a MODIFY_EXPR. In C++14 we only
327 use what this function builds for cx_check_missing_mem_inits, and
328 assignment in the ctor body doesn't count. */
329 || (cxx_dialect
< cxx14
&& TREE_CODE (t
) == MODIFY_EXPR
))
331 member
= TREE_OPERAND (t
, 0);
332 init
= break_out_target_exprs (TREE_OPERAND (t
, 1));
334 else if (TREE_CODE (t
) == CALL_EXPR
)
336 tree fn
= get_callee_fndecl (t
);
337 if (!fn
|| !DECL_CONSTRUCTOR_P (fn
))
338 /* We're only interested in calls to subobject constructors. */
340 member
= CALL_EXPR_ARG (t
, 0);
341 /* We don't use build_cplus_new here because it complains about
342 abstract bases. Leaving the call unwrapped means that it has the
343 wrong type, but cxx_eval_constant_expression doesn't care. */
344 init
= break_out_target_exprs (t
);
346 else if (TREE_CODE (t
) == BIND_EXPR
)
347 return build_data_member_initialization (BIND_EXPR_BODY (t
), vec
);
349 /* Don't add anything else to the CONSTRUCTOR. */
351 if (INDIRECT_REF_P (member
))
352 member
= TREE_OPERAND (member
, 0);
353 if (TREE_CODE (member
) == NOP_EXPR
)
357 if (TREE_CODE (op
) == ADDR_EXPR
)
359 gcc_assert (same_type_ignoring_top_level_qualifiers_p
360 (TREE_TYPE (TREE_TYPE (op
)),
361 TREE_TYPE (TREE_TYPE (member
))));
362 /* Initializing a cv-qualified member; we need to look through
366 else if (op
== current_class_ptr
367 && (same_type_ignoring_top_level_qualifiers_p
368 (TREE_TYPE (TREE_TYPE (member
)),
369 current_class_type
)))
370 /* Delegating constructor. */
374 /* This is an initializer for an empty base; keep it for now so
375 we can check it in cxx_eval_bare_aggregate. */
376 gcc_assert (is_empty_class (TREE_TYPE (TREE_TYPE (member
))));
379 if (TREE_CODE (member
) == ADDR_EXPR
)
380 member
= TREE_OPERAND (member
, 0);
381 if (TREE_CODE (member
) == COMPONENT_REF
)
383 tree aggr
= TREE_OPERAND (member
, 0);
384 if (TREE_CODE (aggr
) == VAR_DECL
)
385 /* Initializing a local variable, don't add anything. */
387 if (TREE_CODE (aggr
) != COMPONENT_REF
)
388 /* Normal member initialization. */
389 member
= TREE_OPERAND (member
, 1);
390 else if (ANON_AGGR_TYPE_P (TREE_TYPE (aggr
)))
391 /* Initializing a member of an anonymous union. */
392 return build_anon_member_initialization (member
, init
, vec
);
394 /* We're initializing a vtable pointer in a base. Leave it as
395 COMPONENT_REF so we remember the path to get to the vfield. */
396 gcc_assert (TREE_TYPE (member
) == vtbl_ptr_type_node
);
399 /* Value-initialization can produce multiple initializers for the
400 same field; use the last one. */
401 if (!vec_safe_is_empty (*vec
) && (*vec
)->last().index
== member
)
402 (*vec
)->last().value
= init
;
404 CONSTRUCTOR_APPEND_ELT (*vec
, member
, init
);
408 /* Subroutine of check_constexpr_ctor_body_1 and constexpr_fn_retval.
409 In C++11 mode checks that the TYPE_DECLs in the BIND_EXPR_VARS of a
410 BIND_EXPR conform to 7.1.5/3/4 on typedef and alias declarations. */
413 check_constexpr_bind_expr_vars (tree t
)
415 gcc_assert (TREE_CODE (t
) == BIND_EXPR
);
417 for (tree var
= BIND_EXPR_VARS (t
); var
; var
= DECL_CHAIN (var
))
418 if (TREE_CODE (var
) == TYPE_DECL
419 && DECL_IMPLICIT_TYPEDEF_P (var
)
420 && !LAMBDA_TYPE_P (TREE_TYPE (var
)))
425 /* Subroutine of check_constexpr_ctor_body. */
428 check_constexpr_ctor_body_1 (tree last
, tree list
)
430 switch (TREE_CODE (list
))
433 if (TREE_CODE (DECL_EXPR_DECL (list
)) == USING_DECL
434 || TREE_CODE (DECL_EXPR_DECL (list
)) == TYPE_DECL
)
438 case CLEANUP_POINT_EXPR
:
439 return check_constexpr_ctor_body (last
, TREE_OPERAND (list
, 0),
443 if (!check_constexpr_bind_expr_vars (list
)
444 || !check_constexpr_ctor_body (last
, BIND_EXPR_BODY (list
),
458 /* Make sure that there are no statements after LAST in the constructor
459 body represented by LIST. */
462 check_constexpr_ctor_body (tree last
, tree list
, bool complain
)
464 /* C++14 doesn't require a constexpr ctor to have an empty body. */
465 if (cxx_dialect
>= cxx14
)
469 if (TREE_CODE (list
) == STATEMENT_LIST
)
471 tree_stmt_iterator i
= tsi_last (list
);
472 for (; !tsi_end_p (i
); tsi_prev (&i
))
474 tree t
= tsi_stmt (i
);
477 if (!check_constexpr_ctor_body_1 (last
, t
))
484 else if (list
!= last
485 && !check_constexpr_ctor_body_1 (last
, list
))
490 error ("constexpr constructor does not have empty body");
491 DECL_DECLARED_CONSTEXPR_P (current_function_decl
) = false;
496 /* V is a vector of constructor elements built up for the base and member
497 initializers of a constructor for TYPE. They need to be in increasing
498 offset order, which they might not be yet if TYPE has a primary base
499 which is not first in the base-clause or a vptr and at least one base
500 all of which are non-primary. */
502 static vec
<constructor_elt
, va_gc
> *
503 sort_constexpr_mem_initializers (tree type
, vec
<constructor_elt
, va_gc
> *v
)
505 tree pri
= CLASSTYPE_PRIMARY_BINFO (type
);
511 field_type
= BINFO_TYPE (pri
);
512 else if (TYPE_CONTAINS_VPTR_P (type
))
513 field_type
= vtbl_ptr_type_node
;
517 /* Find the element for the primary base or vptr and move it to the
518 beginning of the vec. */
519 for (i
= 0; vec_safe_iterate (v
, i
, &ce
); ++i
)
520 if (TREE_TYPE (ce
->index
) == field_type
)
523 if (i
> 0 && i
< vec_safe_length (v
))
525 vec
<constructor_elt
, va_gc
> &vref
= *v
;
526 constructor_elt elt
= vref
[i
];
535 /* Build compile-time evalable representations of member-initializer list
536 for a constexpr constructor. */
539 build_constexpr_constructor_member_initializers (tree type
, tree body
)
541 vec
<constructor_elt
, va_gc
> *vec
= NULL
;
544 switch (TREE_CODE (body
))
546 case MUST_NOT_THROW_EXPR
:
548 body
= TREE_OPERAND (body
, 0);
552 for (tree_stmt_iterator i
= tsi_start (body
);
553 !tsi_end_p (i
); tsi_next (&i
))
556 if (TREE_CODE (body
) == BIND_EXPR
)
562 body
= BIND_EXPR_BODY (body
);
569 if (TREE_CODE (body
) == CLEANUP_POINT_EXPR
)
571 body
= TREE_OPERAND (body
, 0);
572 if (TREE_CODE (body
) == EXPR_STMT
)
573 body
= TREE_OPERAND (body
, 0);
574 if (TREE_CODE (body
) == INIT_EXPR
575 && (same_type_ignoring_top_level_qualifiers_p
576 (TREE_TYPE (TREE_OPERAND (body
, 0)),
577 current_class_type
)))
580 return TREE_OPERAND (body
, 1);
582 ok
= build_data_member_initialization (body
, &vec
);
584 else if (TREE_CODE (body
) == STATEMENT_LIST
)
586 tree_stmt_iterator i
;
587 for (i
= tsi_start (body
); !tsi_end_p (i
); tsi_next (&i
))
589 ok
= build_data_member_initialization (tsi_stmt (i
), &vec
);
594 else if (TREE_CODE (body
) == TRY_BLOCK
)
596 error ("body of %<constexpr%> constructor cannot be "
597 "a function-try-block");
598 return error_mark_node
;
600 else if (EXPR_P (body
))
601 ok
= build_data_member_initialization (body
, &vec
);
603 gcc_assert (errorcount
> 0);
606 if (vec_safe_length (vec
) > 0)
608 /* In a delegating constructor, return the target. */
609 constructor_elt
*ce
= &(*vec
)[0];
610 if (ce
->index
== current_class_ptr
)
617 vec
= sort_constexpr_mem_initializers (type
, vec
);
618 return build_constructor (type
, vec
);
621 return error_mark_node
;
624 /* Subroutine of register_constexpr_fundef. BODY is the body of a function
625 declared to be constexpr, or a sub-statement thereof. Returns the
626 return value if suitable, error_mark_node for a statement not allowed in
627 a constexpr function, or NULL_TREE if no return value was found. */
630 constexpr_fn_retval (tree body
)
632 switch (TREE_CODE (body
))
636 tree_stmt_iterator i
;
637 tree expr
= NULL_TREE
;
638 for (i
= tsi_start (body
); !tsi_end_p (i
); tsi_next (&i
))
640 tree s
= constexpr_fn_retval (tsi_stmt (i
));
641 if (s
== error_mark_node
)
642 return error_mark_node
;
643 else if (s
== NULL_TREE
)
644 /* Keep iterating. */;
646 /* Multiple return statements. */
647 return error_mark_node
;
655 return break_out_target_exprs (TREE_OPERAND (body
, 0));
659 tree decl
= DECL_EXPR_DECL (body
);
660 if (TREE_CODE (decl
) == USING_DECL
661 /* Accept __func__, __FUNCTION__, and __PRETTY_FUNCTION__. */
662 || DECL_ARTIFICIAL (decl
))
664 return error_mark_node
;
667 case CLEANUP_POINT_EXPR
:
668 return constexpr_fn_retval (TREE_OPERAND (body
, 0));
671 if (!check_constexpr_bind_expr_vars (body
))
672 return error_mark_node
;
673 return constexpr_fn_retval (BIND_EXPR_BODY (body
));
679 return error_mark_node
;
683 /* Subroutine of register_constexpr_fundef. BODY is the DECL_SAVED_TREE of
684 FUN; do the necessary transformations to turn it into a single expression
685 that we can store in the hash table. */
688 massage_constexpr_body (tree fun
, tree body
)
690 if (DECL_CONSTRUCTOR_P (fun
))
691 body
= build_constexpr_constructor_member_initializers
692 (DECL_CONTEXT (fun
), body
);
693 else if (cxx_dialect
< cxx14
)
695 if (TREE_CODE (body
) == EH_SPEC_BLOCK
)
696 body
= EH_SPEC_STMTS (body
);
697 if (TREE_CODE (body
) == MUST_NOT_THROW_EXPR
)
698 body
= TREE_OPERAND (body
, 0);
699 body
= constexpr_fn_retval (body
);
704 /* CTYPE is a type constructed from BODY. Return true if some
705 bases/fields are uninitialized, and complain if COMPLAIN. */
708 cx_check_missing_mem_inits (tree ctype
, tree body
, bool complain
)
714 if (TREE_CODE (body
) != CONSTRUCTOR
)
716 nelts
= CONSTRUCTOR_NELTS (body
);
718 tree field
= TYPE_FIELDS (ctype
);
720 if (TREE_CODE (ctype
) == UNION_TYPE
)
722 if (nelts
== 0 && next_initializable_field (field
))
725 error ("%<constexpr%> constructor for union %qT must "
726 "initialize exactly one non-static data member", ctype
);
732 /* Iterate over the CONSTRUCTOR, checking any missing fields don't
733 need an explicit initialization. */
735 for (unsigned i
= 0; i
<= nelts
; ++i
)
737 tree index
= NULL_TREE
;
740 index
= CONSTRUCTOR_ELT (body
, i
)->index
;
741 /* Skip base and vtable inits. */
742 if (TREE_CODE (index
) != FIELD_DECL
743 || DECL_ARTIFICIAL (index
))
747 for (; field
!= index
; field
= DECL_CHAIN (field
))
750 if (TREE_CODE (field
) != FIELD_DECL
)
752 if (DECL_C_BIT_FIELD (field
) && !DECL_NAME (field
))
754 if (DECL_ARTIFICIAL (field
))
756 if (ANON_AGGR_TYPE_P (TREE_TYPE (field
)))
758 /* Recurse to check the anonummous aggregate member. */
759 bad
|= cx_check_missing_mem_inits
760 (TREE_TYPE (field
), NULL_TREE
, complain
);
761 if (bad
&& !complain
)
765 ftype
= strip_array_types (TREE_TYPE (field
));
766 if (type_has_constexpr_default_constructor (ftype
))
768 /* It's OK to skip a member with a trivial constexpr ctor.
769 A constexpr ctor that isn't trivial should have been
771 gcc_checking_assert (!TYPE_HAS_COMPLEX_DFLT (ftype
)
777 error ("member %qD must be initialized by mem-initializer "
778 "in %<constexpr%> constructor", field
);
779 inform (DECL_SOURCE_LOCATION (field
), "declared here");
782 if (field
== NULL_TREE
)
785 if (ANON_AGGR_TYPE_P (TREE_TYPE (index
)))
787 /* Check the anonymous aggregate initializer is valid. */
788 bad
|= cx_check_missing_mem_inits
789 (TREE_TYPE (index
), CONSTRUCTOR_ELT (body
, i
)->value
, complain
);
790 if (bad
&& !complain
)
793 field
= DECL_CHAIN (field
);
799 /* We are processing the definition of the constexpr function FUN.
800 Check that its BODY fulfills the propriate requirements and
801 enter it in the constexpr function definition table.
802 For constructor BODY is actually the TREE_LIST of the
803 member-initializer list. */
806 register_constexpr_fundef (tree fun
, tree body
)
808 constexpr_fundef entry
;
809 constexpr_fundef
**slot
;
811 if (!is_valid_constexpr_fn (fun
, !DECL_GENERATED_P (fun
)))
814 tree massaged
= massage_constexpr_body (fun
, body
);
815 if (massaged
== NULL_TREE
|| massaged
== error_mark_node
)
817 if (!DECL_CONSTRUCTOR_P (fun
))
818 error ("body of constexpr function %qD not a return-statement", fun
);
822 if (!potential_rvalue_constant_expression (massaged
))
824 if (!DECL_GENERATED_P (fun
))
825 require_potential_rvalue_constant_expression (massaged
);
829 if (DECL_CONSTRUCTOR_P (fun
)
830 && cx_check_missing_mem_inits (DECL_CONTEXT (fun
),
831 massaged
, !DECL_GENERATED_P (fun
)))
834 /* Create the constexpr function table if necessary. */
835 if (constexpr_fundef_table
== NULL
)
836 constexpr_fundef_table
837 = hash_table
<constexpr_fundef_hasher
>::create_ggc (101);
841 slot
= constexpr_fundef_table
->find_slot (&entry
, INSERT
);
843 gcc_assert (*slot
== NULL
);
844 *slot
= ggc_alloc
<constexpr_fundef
> ();
850 /* FUN is a non-constexpr function called in a context that requires a
851 constant expression. If it comes from a constexpr template, explain why
852 the instantiation isn't constexpr. */
855 explain_invalid_constexpr_fn (tree fun
)
857 static hash_set
<tree
> *diagnosed
;
860 /* Only diagnose defaulted functions, lambdas, or instantiations. */
861 if (!DECL_DEFAULTED_FN (fun
)
862 && !LAMBDA_TYPE_P (CP_DECL_CONTEXT (fun
))
863 && !is_instantiation_of_constexpr (fun
))
865 if (diagnosed
== NULL
)
866 diagnosed
= new hash_set
<tree
>;
867 if (diagnosed
->add (fun
))
868 /* Already explained. */
871 save_loc
= input_location
;
872 if (!lambda_static_thunk_p (fun
))
874 /* Diagnostics should completely ignore the static thunk, so leave
875 input_location set to our caller's location. */
876 input_location
= DECL_SOURCE_LOCATION (fun
);
877 inform (input_location
,
878 "%qD is not usable as a constexpr function because:", fun
);
880 /* First check the declaration. */
881 if (is_valid_constexpr_fn (fun
, true))
883 /* Then if it's OK, the body. */
884 if (!DECL_DECLARED_CONSTEXPR_P (fun
)
885 && !LAMBDA_TYPE_P (CP_DECL_CONTEXT (fun
)))
886 explain_implicit_non_constexpr (fun
);
889 body
= massage_constexpr_body (fun
, DECL_SAVED_TREE (fun
));
890 require_potential_rvalue_constant_expression (body
);
891 if (DECL_CONSTRUCTOR_P (fun
))
892 cx_check_missing_mem_inits (DECL_CONTEXT (fun
), body
, true);
895 input_location
= save_loc
;
898 /* Objects of this type represent calls to constexpr functions
899 along with the bindings of parameters to their arguments, for
900 the purpose of compile time evaluation. */
902 struct GTY((for_user
)) constexpr_call
{
903 /* Description of the constexpr function definition. */
904 constexpr_fundef
*fundef
;
905 /* Parameter bindings environment. A TREE_LIST where each TREE_PURPOSE
906 is a parameter _DECL and the TREE_VALUE is the value of the parameter.
907 Note: This arrangement is made to accommodate the use of
908 iterative_hash_template_arg (see pt.c). If you change this
909 representation, also change the hash calculation in
910 cxx_eval_call_expression. */
912 /* Result of the call.
913 NULL means the call is being evaluated.
914 error_mark_node means that the evaluation was erroneous;
915 otherwise, the actuall value of the call. */
917 /* The hash of this call; we remember it here to avoid having to
918 recalculate it when expanding the hash table. */
922 struct constexpr_call_hasher
: ggc_ptr_hash
<constexpr_call
>
924 static hashval_t
hash (constexpr_call
*);
925 static bool equal (constexpr_call
*, constexpr_call
*);
928 enum constexpr_switch_state
{
929 /* Used when processing a switch for the first time by cxx_eval_switch_expr
930 and default: label for that switch has not been seen yet. */
931 css_default_not_seen
,
932 /* Used when processing a switch for the first time by cxx_eval_switch_expr
933 and default: label for that switch has been seen already. */
935 /* Used when processing a switch for the second time by
936 cxx_eval_switch_expr, where default: label should match. */
937 css_default_processing
940 /* The constexpr expansion context. CALL is the current function
941 expansion, CTOR is the current aggregate initializer, OBJECT is the
942 object being initialized by CTOR, either a VAR_DECL or a _REF. VALUES
943 is a map of values of variables initialized within the expression. */
945 struct constexpr_ctx
{
946 /* The innermost call we're evaluating. */
947 constexpr_call
*call
;
948 /* Values for any temporaries or local variables within the
949 constant-expression. */
950 hash_map
<tree
,tree
> *values
;
951 /* SAVE_EXPRs that we've seen within the current LOOP_EXPR. NULL if we
952 aren't inside a loop. */
953 hash_set
<tree
> *save_exprs
;
954 /* The CONSTRUCTOR we're currently building up for an aggregate
957 /* The object we're building the CONSTRUCTOR for. */
959 /* If inside SWITCH_EXPR. */
960 constexpr_switch_state
*css_state
;
961 /* Whether we should error on a non-constant expression or fail quietly. */
963 /* Whether we are strictly conforming to constant expression rules or
964 trying harder to get a constant value. */
968 /* A table of all constexpr calls that have been evaluated by the
969 compiler in this translation unit. */
971 static GTY (()) hash_table
<constexpr_call_hasher
> *constexpr_call_table
;
973 static tree
cxx_eval_constant_expression (const constexpr_ctx
*, tree
,
974 bool, bool *, bool *, tree
* = NULL
);
976 /* Compute a hash value for a constexpr call representation. */
979 constexpr_call_hasher::hash (constexpr_call
*info
)
984 /* Return true if the objects pointed to by P and Q represent calls
985 to the same constexpr function with the same arguments.
986 Otherwise, return false. */
989 constexpr_call_hasher::equal (constexpr_call
*lhs
, constexpr_call
*rhs
)
995 if (!constexpr_fundef_hasher::equal (lhs
->fundef
, rhs
->fundef
))
997 lhs_bindings
= lhs
->bindings
;
998 rhs_bindings
= rhs
->bindings
;
999 while (lhs_bindings
!= NULL
&& rhs_bindings
!= NULL
)
1001 tree lhs_arg
= TREE_VALUE (lhs_bindings
);
1002 tree rhs_arg
= TREE_VALUE (rhs_bindings
);
1003 gcc_assert (TREE_TYPE (lhs_arg
) == TREE_TYPE (rhs_arg
));
1004 if (!cp_tree_equal (lhs_arg
, rhs_arg
))
1006 lhs_bindings
= TREE_CHAIN (lhs_bindings
);
1007 rhs_bindings
= TREE_CHAIN (rhs_bindings
);
1009 return lhs_bindings
== rhs_bindings
;
1012 /* Initialize the constexpr call table, if needed. */
1015 maybe_initialize_constexpr_call_table (void)
1017 if (constexpr_call_table
== NULL
)
1018 constexpr_call_table
= hash_table
<constexpr_call_hasher
>::create_ggc (101);
1021 /* During constexpr CALL_EXPR evaluation, to avoid issues with sharing when
1022 a function happens to get called recursively, we unshare the callee
1023 function's body and evaluate this unshared copy instead of evaluating the
1026 FUNDEF_COPIES_TABLE is a per-function freelist of these unshared function
1027 copies. The underlying data structure of FUNDEF_COPIES_TABLE is a hash_map
1028 that's keyed off of the original FUNCTION_DECL and whose value is a
1029 TREE_LIST of this function's unused copies awaiting reuse.
1031 This is not GC-deletable to avoid GC affecting UID generation. */
1033 static GTY(()) hash_map
<tree
, tree
> *fundef_copies_table
;
1035 /* Initialize FUNDEF_COPIES_TABLE if it's not initialized. */
1038 maybe_initialize_fundef_copies_table ()
1040 if (fundef_copies_table
== NULL
)
1041 fundef_copies_table
= hash_map
<tree
,tree
>::create_ggc (101);
1044 /* Reuse a copy or create a new unshared copy of the function FUN.
1045 Return this copy. We use a TREE_LIST whose PURPOSE is body, VALUE
1046 is parms, TYPE is result. */
1049 get_fundef_copy (tree fun
)
1051 maybe_initialize_fundef_copies_table ();
1055 tree
*slot
= &fundef_copies_table
->get_or_insert (fun
, &existed
);
1059 /* There is no cached function available, or in use. We can use
1060 the function directly. That the slot is now created records
1061 that this function is now in use. */
1062 copy
= build_tree_list (DECL_SAVED_TREE (fun
), DECL_ARGUMENTS (fun
));
1063 TREE_TYPE (copy
) = DECL_RESULT (fun
);
1065 else if (*slot
== NULL_TREE
)
1067 /* We've already used the function itself, so make a copy. */
1068 copy
= build_tree_list (NULL
, NULL
);
1069 TREE_PURPOSE (copy
) = copy_fn (fun
, TREE_VALUE (copy
), TREE_TYPE (copy
));
1073 /* We have a cached function available. */
1075 *slot
= TREE_CHAIN (copy
);
1081 /* Save the copy COPY of function FUN for later reuse by
1082 get_fundef_copy(). By construction, there will always be an entry
1086 save_fundef_copy (tree fun
, tree copy
)
1088 tree
*slot
= fundef_copies_table
->get (fun
);
1089 TREE_CHAIN (copy
) = *slot
;
1093 /* We have an expression tree T that represents a call, either CALL_EXPR
1094 or AGGR_INIT_EXPR. If the call is lexically to a named function,
1095 retrun the _DECL for that function. */
1098 get_function_named_in_call (tree t
)
1100 tree fun
= cp_get_callee (t
);
1101 if (fun
&& TREE_CODE (fun
) == ADDR_EXPR
1102 && TREE_CODE (TREE_OPERAND (fun
, 0)) == FUNCTION_DECL
)
1103 fun
= TREE_OPERAND (fun
, 0);
1107 /* We have an expression tree T that represents a call, either CALL_EXPR
1108 or AGGR_INIT_EXPR. Return the Nth argument. */
1111 get_nth_callarg (tree t
, int n
)
1113 switch (TREE_CODE (t
))
1116 return CALL_EXPR_ARG (t
, n
);
1118 case AGGR_INIT_EXPR
:
1119 return AGGR_INIT_EXPR_ARG (t
, n
);
1127 /* Attempt to evaluate T which represents a call to a builtin function.
1128 We assume here that all builtin functions evaluate to scalar types
1129 represented by _CST nodes. */
1132 cxx_eval_builtin_function_call (const constexpr_ctx
*ctx
, tree t
, tree fun
,
1134 bool *non_constant_p
, bool *overflow_p
)
1136 const int nargs
= call_expr_nargs (t
);
1137 tree
*args
= (tree
*) alloca (nargs
* sizeof (tree
));
1141 /* Don't fold __builtin_constant_p within a constexpr function. */
1142 bool bi_const_p
= (DECL_FUNCTION_CODE (fun
) == BUILT_IN_CONSTANT_P
);
1145 && current_function_decl
1146 && DECL_DECLARED_CONSTEXPR_P (current_function_decl
))
1148 *non_constant_p
= true;
1152 /* Be permissive for arguments to built-ins; __builtin_constant_p should
1153 return constant false for a non-constant argument. */
1154 constexpr_ctx new_ctx
= *ctx
;
1155 new_ctx
.quiet
= true;
1156 bool dummy1
= false, dummy2
= false;
1157 for (i
= 0; i
< nargs
; ++i
)
1159 args
[i
] = cxx_eval_constant_expression (&new_ctx
, CALL_EXPR_ARG (t
, i
),
1160 false, &dummy1
, &dummy2
);
1162 /* For __built_in_constant_p, fold all expressions with constant values
1163 even if they aren't C++ constant-expressions. */
1164 args
[i
] = cp_fully_fold (args
[i
]);
1167 bool save_ffbcp
= force_folding_builtin_constant_p
;
1168 force_folding_builtin_constant_p
= true;
1169 new_call
= fold_builtin_call_array (EXPR_LOCATION (t
), TREE_TYPE (t
),
1170 CALL_EXPR_FN (t
), nargs
, args
);
1171 force_folding_builtin_constant_p
= save_ffbcp
;
1172 if (new_call
== NULL
)
1174 if (!*non_constant_p
&& !ctx
->quiet
)
1176 new_call
= build_call_array_loc (EXPR_LOCATION (t
), TREE_TYPE (t
),
1177 CALL_EXPR_FN (t
), nargs
, args
);
1178 error ("%q+E is not a constant expression", new_call
);
1180 *non_constant_p
= true;
1184 if (!potential_constant_expression (new_call
))
1186 if (!*non_constant_p
&& !ctx
->quiet
)
1187 error ("%q+E is not a constant expression", new_call
);
1188 *non_constant_p
= true;
1192 return cxx_eval_constant_expression (&new_ctx
, new_call
, lval
,
1193 non_constant_p
, overflow_p
);
1196 /* TEMP is the constant value of a temporary object of type TYPE. Adjust
1197 the type of the value to match. */
1200 adjust_temp_type (tree type
, tree temp
)
1202 if (TREE_TYPE (temp
) == type
)
1204 /* Avoid wrapping an aggregate value in a NOP_EXPR. */
1205 if (TREE_CODE (temp
) == CONSTRUCTOR
)
1206 return build_constructor (type
, CONSTRUCTOR_ELTS (temp
));
1207 gcc_assert (scalarish_type_p (type
));
1208 return cp_fold_convert (type
, temp
);
1211 /* Callback for walk_tree used by unshare_constructor. */
1214 find_constructor (tree
*tp
, int *walk_subtrees
, void *)
1218 if (TREE_CODE (*tp
) == CONSTRUCTOR
)
1223 /* If T is a CONSTRUCTOR or an expression that has a CONSTRUCTOR node as a
1224 subexpression, return an unshared copy of T. Otherwise return T. */
1227 unshare_constructor (tree t
)
1229 tree ctor
= walk_tree (&t
, find_constructor
, NULL
, NULL
);
1230 if (ctor
!= NULL_TREE
)
1231 return unshare_expr (t
);
1235 /* Subroutine of cxx_eval_call_expression.
1236 We are processing a call expression (either CALL_EXPR or
1237 AGGR_INIT_EXPR) in the context of CTX. Evaluate
1238 all arguments and bind their values to correspondings
1239 parameters, making up the NEW_CALL context. */
1242 cxx_bind_parameters_in_call (const constexpr_ctx
*ctx
, tree t
,
1243 constexpr_call
*new_call
,
1244 bool *non_constant_p
, bool *overflow_p
,
1245 bool *non_constant_args
)
1247 const int nargs
= call_expr_nargs (t
);
1248 tree fun
= new_call
->fundef
->decl
;
1249 tree parms
= DECL_ARGUMENTS (fun
);
1251 tree
*p
= &new_call
->bindings
;
1252 for (i
= 0; i
< nargs
; ++i
)
1255 tree type
= parms
? TREE_TYPE (parms
) : void_type_node
;
1256 x
= get_nth_callarg (t
, i
);
1257 /* For member function, the first argument is a pointer to the implied
1258 object. For a constructor, it might still be a dummy object, in
1259 which case we get the real argument from ctx. */
1260 if (i
== 0 && DECL_CONSTRUCTOR_P (fun
)
1261 && is_dummy_object (x
))
1264 x
= cp_build_addr_expr (x
, tf_warning_or_error
);
1267 arg
= cxx_eval_constant_expression (ctx
, x
, lval
,
1268 non_constant_p
, overflow_p
);
1269 /* Don't VERIFY_CONSTANT here. */
1270 if (*non_constant_p
&& ctx
->quiet
)
1272 /* Just discard ellipsis args after checking their constantitude. */
1276 if (!*non_constant_p
)
1278 /* Make sure the binding has the same type as the parm. But
1279 only for constant args. */
1280 if (TREE_CODE (type
) != REFERENCE_TYPE
)
1281 arg
= adjust_temp_type (type
, arg
);
1282 if (!TREE_CONSTANT (arg
))
1283 *non_constant_args
= true;
1284 *p
= build_tree_list (parms
, arg
);
1285 p
= &TREE_CHAIN (*p
);
1287 parms
= TREE_CHAIN (parms
);
1291 /* Variables and functions to manage constexpr call expansion context.
1292 These do not need to be marked for PCH or GC. */
1294 /* FIXME remember and print actual constant arguments. */
1295 static vec
<tree
> call_stack
;
1296 static int call_stack_tick
;
1297 static int last_cx_error_tick
;
1300 push_cx_call_context (tree call
)
1303 if (!EXPR_HAS_LOCATION (call
))
1304 SET_EXPR_LOCATION (call
, input_location
);
1305 call_stack
.safe_push (call
);
1306 if (call_stack
.length () > (unsigned) max_constexpr_depth
)
1312 pop_cx_call_context (void)
1319 cx_error_context (void)
1321 vec
<tree
> r
= vNULL
;
1322 if (call_stack_tick
!= last_cx_error_tick
1323 && !call_stack
.is_empty ())
1325 last_cx_error_tick
= call_stack_tick
;
1329 /* Evaluate a call T to a GCC internal function when possible and return
1330 the evaluated result or, under the control of CTX, give an error, set
1331 NON_CONSTANT_P, and return the unevaluated call T otherwise. */
1334 cxx_eval_internal_function (const constexpr_ctx
*ctx
, tree t
,
1336 bool *non_constant_p
, bool *overflow_p
)
1338 enum tree_code opcode
= ERROR_MARK
;
1340 switch (CALL_EXPR_IFN (t
))
1342 case IFN_UBSAN_NULL
:
1343 case IFN_UBSAN_BOUNDS
:
1344 case IFN_UBSAN_VPTR
:
1345 case IFN_FALLTHROUGH
:
1348 case IFN_ADD_OVERFLOW
:
1351 case IFN_SUB_OVERFLOW
:
1352 opcode
= MINUS_EXPR
;
1354 case IFN_MUL_OVERFLOW
:
1359 return cxx_eval_constant_expression (ctx
, CALL_EXPR_ARG (t
, 0),
1360 false, non_constant_p
, overflow_p
);
1364 error_at (EXPR_LOC_OR_LOC (t
, input_location
),
1365 "call to internal function %qE", t
);
1366 *non_constant_p
= true;
1370 /* Evaluate constant arguments using OPCODE and return a complex
1371 number containing the result and the overflow bit. */
1372 tree arg0
= cxx_eval_constant_expression (ctx
, CALL_EXPR_ARG (t
, 0), lval
,
1373 non_constant_p
, overflow_p
);
1374 tree arg1
= cxx_eval_constant_expression (ctx
, CALL_EXPR_ARG (t
, 1), lval
,
1375 non_constant_p
, overflow_p
);
1377 if (TREE_CODE (arg0
) == INTEGER_CST
&& TREE_CODE (arg1
) == INTEGER_CST
)
1379 location_t loc
= EXPR_LOC_OR_LOC (t
, input_location
);
1380 tree type
= TREE_TYPE (TREE_TYPE (t
));
1381 tree result
= fold_binary_loc (loc
, opcode
, type
,
1382 fold_convert_loc (loc
, type
, arg0
),
1383 fold_convert_loc (loc
, type
, arg1
));
1385 = build_int_cst (type
, arith_overflowed_p (opcode
, type
, arg0
, arg1
));
1386 /* Reset TREE_OVERFLOW to avoid warnings for the overflow. */
1387 if (TREE_OVERFLOW (result
))
1388 TREE_OVERFLOW (result
) = 0;
1390 return build_complex (TREE_TYPE (t
), result
, ovf
);
1393 *non_constant_p
= true;
1397 /* Clean CONSTRUCTOR_NO_IMPLICIT_ZERO from CTOR and its sub-aggregates. */
1400 clear_no_implicit_zero (tree ctor
)
1402 if (CONSTRUCTOR_NO_IMPLICIT_ZERO (ctor
))
1404 CONSTRUCTOR_NO_IMPLICIT_ZERO (ctor
) = false;
1405 tree elt
; unsigned HOST_WIDE_INT idx
;
1406 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor
), idx
, elt
)
1407 if (TREE_CODE (elt
) == CONSTRUCTOR
)
1408 clear_no_implicit_zero (elt
);
1412 /* Subroutine of cxx_eval_constant_expression.
1413 Evaluate the call expression tree T in the context of OLD_CALL expression
1417 cxx_eval_call_expression (const constexpr_ctx
*ctx
, tree t
,
1419 bool *non_constant_p
, bool *overflow_p
)
1421 location_t loc
= EXPR_LOC_OR_LOC (t
, input_location
);
1422 tree fun
= get_function_named_in_call (t
);
1423 constexpr_call new_call
= { NULL
, NULL
, NULL
, 0 };
1426 if (fun
== NULL_TREE
)
1427 return cxx_eval_internal_function (ctx
, t
, lval
,
1428 non_constant_p
, overflow_p
);
1430 if (TREE_CODE (fun
) != FUNCTION_DECL
)
1432 /* Might be a constexpr function pointer. */
1433 fun
= cxx_eval_constant_expression (ctx
, fun
,
1434 /*lval*/false, non_constant_p
,
1437 if (TREE_CODE (fun
) == ADDR_EXPR
)
1438 fun
= TREE_OPERAND (fun
, 0);
1440 if (TREE_CODE (fun
) != FUNCTION_DECL
)
1442 if (!ctx
->quiet
&& !*non_constant_p
)
1443 error_at (loc
, "expression %qE does not designate a constexpr "
1445 *non_constant_p
= true;
1448 if (DECL_CLONED_FUNCTION_P (fun
))
1449 fun
= DECL_CLONED_FUNCTION (fun
);
1451 if (is_ubsan_builtin_p (fun
))
1454 if (is_builtin_fn (fun
))
1455 return cxx_eval_builtin_function_call (ctx
, t
, fun
,
1456 lval
, non_constant_p
, overflow_p
);
1457 if (!DECL_DECLARED_CONSTEXPR_P (fun
))
1461 error_at (loc
, "call to non-constexpr function %qD", fun
);
1462 explain_invalid_constexpr_fn (fun
);
1464 *non_constant_p
= true;
1468 constexpr_ctx new_ctx
= *ctx
;
1469 if (DECL_CONSTRUCTOR_P (fun
) && !ctx
->object
1470 && TREE_CODE (t
) == AGGR_INIT_EXPR
)
1472 /* We want to have an initialization target for an AGGR_INIT_EXPR.
1473 If we don't already have one in CTX, use the AGGR_INIT_EXPR_SLOT. */
1474 new_ctx
.object
= AGGR_INIT_EXPR_SLOT (t
);
1475 tree ctor
= new_ctx
.ctor
= build_constructor (DECL_CONTEXT (fun
), NULL
);
1476 CONSTRUCTOR_NO_IMPLICIT_ZERO (ctor
) = true;
1477 ctx
->values
->put (new_ctx
.object
, ctor
);
1481 /* Shortcut trivial constructor/op=. */
1482 if (trivial_fn_p (fun
))
1484 tree init
= NULL_TREE
;
1485 if (call_expr_nargs (t
) == 2)
1486 init
= convert_from_reference (get_nth_callarg (t
, 1));
1487 else if (TREE_CODE (t
) == AGGR_INIT_EXPR
1488 && AGGR_INIT_ZERO_FIRST (t
))
1489 init
= build_zero_init (DECL_CONTEXT (fun
), NULL_TREE
, false);
1492 tree op
= get_nth_callarg (t
, 0);
1493 if (is_dummy_object (op
))
1496 op
= build1 (INDIRECT_REF
, TREE_TYPE (TREE_TYPE (op
)), op
);
1497 tree set
= build2 (MODIFY_EXPR
, TREE_TYPE (op
), op
, init
);
1498 new_ctx
.call
= &new_call
;
1499 return cxx_eval_constant_expression (&new_ctx
, set
, lval
,
1500 non_constant_p
, overflow_p
);
1504 /* We can't defer instantiating the function any longer. */
1505 if (!DECL_INITIAL (fun
)
1506 && DECL_TEMPLOID_INSTANTIATION (fun
))
1508 location_t save_loc
= input_location
;
1509 input_location
= loc
;
1511 instantiate_decl (fun
, /*defer_ok*/false, /*expl_inst*/false);
1513 input_location
= save_loc
;
1516 /* If in direct recursive call, optimize definition search. */
1517 if (ctx
&& ctx
->call
&& ctx
->call
->fundef
&& ctx
->call
->fundef
->decl
== fun
)
1518 new_call
.fundef
= ctx
->call
->fundef
;
1521 new_call
.fundef
= retrieve_constexpr_fundef (fun
);
1522 if (new_call
.fundef
== NULL
|| new_call
.fundef
->body
== NULL
1523 || fun
== current_function_decl
)
1527 /* We need to check for current_function_decl here in case we're
1528 being called during cp_fold_function, because at that point
1529 DECL_INITIAL is set properly and we have a fundef but we
1530 haven't lowered invisirefs yet (c++/70344). */
1531 if (DECL_INITIAL (fun
) == error_mark_node
1532 || fun
== current_function_decl
)
1533 error_at (loc
, "%qD called in a constant expression before its "
1534 "definition is complete", fun
);
1535 else if (DECL_INITIAL (fun
))
1537 /* The definition of fun was somehow unsuitable. But pretend
1538 that lambda static thunks don't exist. */
1539 if (!lambda_static_thunk_p (fun
))
1540 error_at (loc
, "%qD called in a constant expression", fun
);
1541 explain_invalid_constexpr_fn (fun
);
1544 error_at (loc
, "%qD used before its definition", fun
);
1546 *non_constant_p
= true;
1551 bool non_constant_args
= false;
1552 cxx_bind_parameters_in_call (ctx
, t
, &new_call
,
1553 non_constant_p
, overflow_p
, &non_constant_args
);
1554 if (*non_constant_p
)
1557 depth_ok
= push_cx_call_context (t
);
1559 tree result
= NULL_TREE
;
1561 constexpr_call
*entry
= NULL
;
1562 if (depth_ok
&& !non_constant_args
)
1564 new_call
.hash
= iterative_hash_template_arg
1565 (new_call
.bindings
, constexpr_fundef_hasher::hash (new_call
.fundef
));
1567 /* If we have seen this call before, we are done. */
1568 maybe_initialize_constexpr_call_table ();
1569 constexpr_call
**slot
1570 = constexpr_call_table
->find_slot (&new_call
, INSERT
);
1574 /* We need to keep a pointer to the entry, not just the slot, as the
1575 slot can move in the call to cxx_eval_builtin_function_call. */
1576 *slot
= entry
= ggc_alloc
<constexpr_call
> ();
1579 /* Calls that are in progress have their result set to NULL,
1580 so that we can detect circular dependencies. */
1581 else if (entry
->result
== NULL
)
1584 error ("call has circular dependency");
1585 *non_constant_p
= true;
1586 entry
->result
= result
= error_mark_node
;
1589 result
= entry
->result
;
1595 error ("constexpr evaluation depth exceeds maximum of %d (use "
1596 "-fconstexpr-depth= to increase the maximum)",
1597 max_constexpr_depth
);
1598 *non_constant_p
= true;
1599 result
= error_mark_node
;
1603 if (result
&& result
!= error_mark_node
)
1605 else if (!DECL_SAVED_TREE (fun
))
1607 /* When at_eof >= 2, cgraph has started throwing away
1608 DECL_SAVED_TREE, so fail quietly. FIXME we get here because of
1609 late code generation for VEC_INIT_EXPR, which needs to be
1610 completely reconsidered. */
1611 gcc_assert (at_eof
>= 2 && ctx
->quiet
);
1612 *non_constant_p
= true;
1616 tree body
, parms
, res
;
1618 /* Reuse or create a new unshared copy of this function's body. */
1619 tree copy
= get_fundef_copy (fun
);
1620 body
= TREE_PURPOSE (copy
);
1621 parms
= TREE_VALUE (copy
);
1622 res
= TREE_TYPE (copy
);
1624 /* Associate the bindings with the remapped parms. */
1625 tree bound
= new_call
.bindings
;
1626 tree remapped
= parms
;
1629 tree oparm
= TREE_PURPOSE (bound
);
1630 tree arg
= TREE_VALUE (bound
);
1631 gcc_assert (DECL_NAME (remapped
) == DECL_NAME (oparm
));
1632 /* Don't share a CONSTRUCTOR that might be changed. */
1633 arg
= unshare_constructor (arg
);
1634 ctx
->values
->put (remapped
, arg
);
1635 bound
= TREE_CHAIN (bound
);
1636 remapped
= DECL_CHAIN (remapped
);
1638 /* Add the RESULT_DECL to the values map, too. */
1639 tree slot
= NULL_TREE
;
1640 if (DECL_BY_REFERENCE (res
))
1642 slot
= AGGR_INIT_EXPR_SLOT (t
);
1643 tree addr
= build_address (slot
);
1644 addr
= build_nop (TREE_TYPE (res
), addr
);
1645 ctx
->values
->put (res
, addr
);
1646 ctx
->values
->put (slot
, NULL_TREE
);
1649 ctx
->values
->put (res
, NULL_TREE
);
1651 /* Track the callee's evaluated SAVE_EXPRs so that we can forget
1652 their values after the call. */
1653 constexpr_ctx ctx_with_save_exprs
= *ctx
;
1654 hash_set
<tree
> save_exprs
;
1655 ctx_with_save_exprs
.save_exprs
= &save_exprs
;
1656 ctx_with_save_exprs
.call
= &new_call
;
1658 tree jump_target
= NULL_TREE
;
1659 cxx_eval_constant_expression (&ctx_with_save_exprs
, body
,
1660 lval
, non_constant_p
, overflow_p
,
1663 if (DECL_CONSTRUCTOR_P (fun
))
1664 /* This can be null for a subobject constructor call, in
1665 which case what we care about is the initialization
1666 side-effects rather than the value. We could get at the
1667 value by evaluating *this, but we don't bother; there's
1668 no need to put such a call in the hash table. */
1669 result
= lval
? ctx
->object
: ctx
->ctor
;
1670 else if (VOID_TYPE_P (TREE_TYPE (res
)))
1674 result
= *ctx
->values
->get (slot
? slot
: res
);
1675 if (result
== NULL_TREE
&& !*non_constant_p
)
1678 error ("constexpr call flows off the end "
1680 *non_constant_p
= true;
1684 /* Forget the saved values of the callee's SAVE_EXPRs. */
1685 for (hash_set
<tree
>::iterator iter
= save_exprs
.begin();
1686 iter
!= save_exprs
.end(); ++iter
)
1687 ctx_with_save_exprs
.values
->remove (*iter
);
1689 /* Remove the parms/result from the values map. Is it worth
1690 bothering to do this when the map itself is only live for
1691 one constexpr evaluation? If so, maybe also clear out
1692 other vars from call, maybe in BIND_EXPR handling? */
1693 ctx
->values
->remove (res
);
1695 ctx
->values
->remove (slot
);
1696 for (tree parm
= parms
; parm
; parm
= TREE_CHAIN (parm
))
1697 ctx
->values
->remove (parm
);
1699 /* Make the unshared function copy we used available for re-use. */
1700 save_fundef_copy (fun
, copy
);
1703 if (result
== error_mark_node
)
1704 *non_constant_p
= true;
1705 if (*non_constant_p
|| *overflow_p
)
1706 result
= error_mark_node
;
1710 entry
->result
= result
;
1713 /* The result of a constexpr function must be completely initialized. */
1714 if (TREE_CODE (result
) == CONSTRUCTOR
)
1715 clear_no_implicit_zero (result
);
1717 pop_cx_call_context ();
1718 return unshare_constructor (result
);
1721 /* FIXME speed this up, it's taking 16% of compile time on sieve testcase. */
1724 reduced_constant_expression_p (tree t
)
1726 switch (TREE_CODE (t
))
1729 /* Even if we can't lower this yet, it's constant. */
1733 /* And we need to handle PTRMEM_CST wrapped in a CONSTRUCTOR. */
1734 tree elt
; unsigned HOST_WIDE_INT idx
;
1735 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (t
), idx
, elt
)
1738 /* We're in the middle of initializing this element. */
1740 if (!reduced_constant_expression_p (elt
))
1746 /* FIXME are we calling this too much? */
1747 return initializer_constant_valid_p (t
, TREE_TYPE (t
)) != NULL_TREE
;
1751 /* Some expressions may have constant operands but are not constant
1752 themselves, such as 1/0. Call this function (or rather, the macro
1753 following it) to check for that condition.
1755 We only call this in places that require an arithmetic constant, not in
1756 places where we might have a non-constant expression that can be a
1757 component of a constant expression, such as the address of a constexpr
1758 variable that might be dereferenced later. */
1761 verify_constant (tree t
, bool allow_non_constant
, bool *non_constant_p
,
1764 if (!*non_constant_p
&& !reduced_constant_expression_p (t
))
1766 if (!allow_non_constant
)
1767 error ("%q+E is not a constant expression", t
);
1768 *non_constant_p
= true;
1770 if (TREE_OVERFLOW_P (t
))
1772 if (!allow_non_constant
)
1774 permerror (input_location
, "overflow in constant expression");
1775 /* If we're being permissive (and are in an enforcing
1776 context), ignore the overflow. */
1777 if (flag_permissive
)
1778 return *non_constant_p
;
1782 return *non_constant_p
;
1785 /* Check whether the shift operation with code CODE and type TYPE on LHS
1786 and RHS is undefined. If it is, give an error with an explanation,
1787 and return true; return false otherwise. */
1790 cxx_eval_check_shift_p (location_t loc
, const constexpr_ctx
*ctx
,
1791 enum tree_code code
, tree type
, tree lhs
, tree rhs
)
1793 if ((code
!= LSHIFT_EXPR
&& code
!= RSHIFT_EXPR
)
1794 || TREE_CODE (lhs
) != INTEGER_CST
1795 || TREE_CODE (rhs
) != INTEGER_CST
)
1798 tree lhstype
= TREE_TYPE (lhs
);
1799 unsigned HOST_WIDE_INT uprec
= TYPE_PRECISION (TREE_TYPE (lhs
));
1801 /* [expr.shift] The behavior is undefined if the right operand
1802 is negative, or greater than or equal to the length in bits
1803 of the promoted left operand. */
1804 if (tree_int_cst_sgn (rhs
) == -1)
1807 permerror (loc
, "right operand of shift expression %q+E is negative",
1808 build2_loc (loc
, code
, type
, lhs
, rhs
));
1809 return (!flag_permissive
|| ctx
->quiet
);
1811 if (compare_tree_int (rhs
, uprec
) >= 0)
1814 permerror (loc
, "right operand of shift expression %q+E is >= than "
1815 "the precision of the left operand",
1816 build2_loc (loc
, code
, type
, lhs
, rhs
));
1817 return (!flag_permissive
|| ctx
->quiet
);
1820 /* The value of E1 << E2 is E1 left-shifted E2 bit positions; [...]
1821 if E1 has a signed type and non-negative value, and E1x2^E2 is
1822 representable in the corresponding unsigned type of the result type,
1823 then that value, converted to the result type, is the resulting value;
1824 otherwise, the behavior is undefined. */
1825 if (code
== LSHIFT_EXPR
&& !TYPE_UNSIGNED (lhstype
)
1826 && (cxx_dialect
>= cxx11
))
1828 if (tree_int_cst_sgn (lhs
) == -1)
1832 "left operand of shift expression %q+E is negative",
1833 build2_loc (loc
, code
, type
, lhs
, rhs
));
1834 return (!flag_permissive
|| ctx
->quiet
);
1836 /* For signed x << y the following:
1837 (unsigned) x >> ((prec (lhs) - 1) - y)
1838 if > 1, is undefined. The right-hand side of this formula
1839 is the highest bit of the LHS that can be set (starting from 0),
1840 so that the shift doesn't overflow. We then right-shift the LHS
1841 to see whether any other bit is set making the original shift
1842 undefined -- the result is not representable in the corresponding
1844 tree t
= build_int_cst (unsigned_type_node
, uprec
- 1);
1845 t
= fold_build2 (MINUS_EXPR
, unsigned_type_node
, t
, rhs
);
1846 tree ulhs
= fold_convert (unsigned_type_for (lhstype
), lhs
);
1847 t
= fold_build2 (RSHIFT_EXPR
, TREE_TYPE (ulhs
), ulhs
, t
);
1848 if (tree_int_cst_lt (integer_one_node
, t
))
1851 permerror (loc
, "shift expression %q+E overflows",
1852 build2_loc (loc
, code
, type
, lhs
, rhs
));
1853 return (!flag_permissive
|| ctx
->quiet
);
1859 /* Subroutine of cxx_eval_constant_expression.
1860 Attempt to reduce the unary expression tree T to a compile time value.
1861 If successful, return the value. Otherwise issue a diagnostic
1862 and return error_mark_node. */
1865 cxx_eval_unary_expression (const constexpr_ctx
*ctx
, tree t
,
1867 bool *non_constant_p
, bool *overflow_p
)
1870 tree orig_arg
= TREE_OPERAND (t
, 0);
1871 tree arg
= cxx_eval_constant_expression (ctx
, orig_arg
, /*lval*/false,
1872 non_constant_p
, overflow_p
);
1873 VERIFY_CONSTANT (arg
);
1874 location_t loc
= EXPR_LOCATION (t
);
1875 enum tree_code code
= TREE_CODE (t
);
1876 tree type
= TREE_TYPE (t
);
1877 r
= fold_unary_loc (loc
, code
, type
, arg
);
1880 if (arg
== orig_arg
)
1883 r
= build1_loc (loc
, code
, type
, arg
);
1885 VERIFY_CONSTANT (r
);
1889 /* Helper function for cxx_eval_binary_expression. Try to optimize
1890 original POINTER_PLUS_EXPR T, LHS p+ RHS, return NULL_TREE if the
1891 generic folding should be used. */
1894 cxx_fold_pointer_plus_expression (const constexpr_ctx
*ctx
, tree t
,
1895 tree lhs
, tree rhs
, bool *non_constant_p
,
1899 if (TREE_CODE (lhs
) != ADDR_EXPR
)
1902 lhs
= TREE_OPERAND (lhs
, 0);
1904 /* &A[i] p+ j => &A[i + j] */
1905 if (TREE_CODE (lhs
) == ARRAY_REF
1906 && TREE_CODE (TREE_OPERAND (lhs
, 1)) == INTEGER_CST
1907 && TREE_CODE (rhs
) == INTEGER_CST
1908 && TYPE_SIZE_UNIT (TREE_TYPE (lhs
))
1909 && TREE_CODE (TYPE_SIZE_UNIT (TREE_TYPE (lhs
))) == INTEGER_CST
)
1911 tree orig_type
= TREE_TYPE (t
);
1912 location_t loc
= EXPR_LOCATION (t
);
1913 tree type
= TREE_TYPE (lhs
);
1915 t
= fold_convert_loc (loc
, ssizetype
, TREE_OPERAND (lhs
, 1));
1916 tree nelts
= array_type_nelts_top (TREE_TYPE (TREE_OPERAND (lhs
, 0)));
1917 nelts
= cxx_eval_constant_expression (ctx
, nelts
, false, non_constant_p
,
1919 if (*non_constant_p
)
1921 /* Don't fold an out-of-bound access. */
1922 if (!tree_int_cst_le (t
, nelts
))
1924 rhs
= cp_fold_convert (ssizetype
, rhs
);
1925 /* Don't fold if rhs can't be divided exactly by TYPE_SIZE_UNIT.
1926 constexpr int A[1]; ... (char *)&A[0] + 1 */
1927 if (!integer_zerop (fold_build2_loc (loc
, TRUNC_MOD_EXPR
, sizetype
,
1928 rhs
, TYPE_SIZE_UNIT (type
))))
1930 /* Make sure to treat the second operand of POINTER_PLUS_EXPR
1932 rhs
= fold_build2_loc (loc
, EXACT_DIV_EXPR
, ssizetype
, rhs
,
1933 TYPE_SIZE_UNIT (type
));
1934 t
= size_binop_loc (loc
, PLUS_EXPR
, rhs
, t
);
1935 t
= build4_loc (loc
, ARRAY_REF
, type
, TREE_OPERAND (lhs
, 0),
1936 t
, NULL_TREE
, NULL_TREE
);
1937 t
= cp_build_addr_expr (t
, tf_warning_or_error
);
1938 t
= cp_fold_convert (orig_type
, t
);
1939 return cxx_eval_constant_expression (ctx
, t
, /*lval*/false,
1940 non_constant_p
, overflow_p
);
1946 /* Subroutine of cxx_eval_constant_expression.
1947 Like cxx_eval_unary_expression, except for binary expressions. */
1950 cxx_eval_binary_expression (const constexpr_ctx
*ctx
, tree t
,
1952 bool *non_constant_p
, bool *overflow_p
)
1955 tree orig_lhs
= TREE_OPERAND (t
, 0);
1956 tree orig_rhs
= TREE_OPERAND (t
, 1);
1958 lhs
= cxx_eval_constant_expression (ctx
, orig_lhs
, /*lval*/false,
1959 non_constant_p
, overflow_p
);
1960 /* Don't VERIFY_CONSTANT here, it's unnecessary and will break pointer
1962 if (*non_constant_p
)
1964 rhs
= cxx_eval_constant_expression (ctx
, orig_rhs
, /*lval*/false,
1965 non_constant_p
, overflow_p
);
1966 if (*non_constant_p
)
1969 location_t loc
= EXPR_LOCATION (t
);
1970 enum tree_code code
= TREE_CODE (t
);
1971 tree type
= TREE_TYPE (t
);
1973 if (code
== EQ_EXPR
|| code
== NE_EXPR
)
1975 bool is_code_eq
= (code
== EQ_EXPR
);
1977 if (TREE_CODE (lhs
) == PTRMEM_CST
1978 && TREE_CODE (rhs
) == PTRMEM_CST
)
1979 r
= constant_boolean_node (cp_tree_equal (lhs
, rhs
) == is_code_eq
,
1981 else if ((TREE_CODE (lhs
) == PTRMEM_CST
1982 || TREE_CODE (rhs
) == PTRMEM_CST
)
1983 && (null_member_pointer_value_p (lhs
)
1984 || null_member_pointer_value_p (rhs
)))
1985 r
= constant_boolean_node (!is_code_eq
, type
);
1986 else if (TREE_CODE (lhs
) == PTRMEM_CST
)
1987 lhs
= cplus_expand_constant (lhs
);
1988 else if (TREE_CODE (rhs
) == PTRMEM_CST
)
1989 rhs
= cplus_expand_constant (rhs
);
1991 if (code
== POINTER_PLUS_EXPR
&& !*non_constant_p
1992 && integer_zerop (lhs
) && !integer_zerop (rhs
))
1995 error ("arithmetic involving a null pointer in %qE", lhs
);
1998 else if (code
== POINTER_PLUS_EXPR
)
1999 r
= cxx_fold_pointer_plus_expression (ctx
, t
, lhs
, rhs
, non_constant_p
,
2003 r
= fold_binary_loc (loc
, code
, type
, lhs
, rhs
);
2007 if (lhs
== orig_lhs
&& rhs
== orig_rhs
)
2010 r
= build2_loc (loc
, code
, type
, lhs
, rhs
);
2012 else if (cxx_eval_check_shift_p (loc
, ctx
, code
, type
, lhs
, rhs
))
2013 *non_constant_p
= true;
2014 /* Don't VERIFY_CONSTANT if this might be dealing with a pointer to
2015 a local array in a constexpr function. */
2016 bool ptr
= POINTER_TYPE_P (TREE_TYPE (lhs
));
2018 VERIFY_CONSTANT (r
);
2022 /* Subroutine of cxx_eval_constant_expression.
2023 Attempt to evaluate condition expressions. Dead branches are not
2027 cxx_eval_conditional_expression (const constexpr_ctx
*ctx
, tree t
,
2029 bool *non_constant_p
, bool *overflow_p
,
2032 tree val
= cxx_eval_constant_expression (ctx
, TREE_OPERAND (t
, 0),
2034 non_constant_p
, overflow_p
);
2035 VERIFY_CONSTANT (val
);
2036 /* Don't VERIFY_CONSTANT the other operands. */
2037 if (integer_zerop (val
))
2038 return cxx_eval_constant_expression (ctx
, TREE_OPERAND (t
, 2),
2040 non_constant_p
, overflow_p
,
2042 return cxx_eval_constant_expression (ctx
, TREE_OPERAND (t
, 1),
2044 non_constant_p
, overflow_p
,
2048 /* Returns less than, equal to, or greater than zero if KEY is found to be
2049 less than, to match, or to be greater than the constructor_elt's INDEX. */
2052 array_index_cmp (tree key
, tree index
)
2054 gcc_assert (TREE_CODE (key
) == INTEGER_CST
);
2056 switch (TREE_CODE (index
))
2059 return tree_int_cst_compare (key
, index
);
2062 tree lo
= TREE_OPERAND (index
, 0);
2063 tree hi
= TREE_OPERAND (index
, 1);
2064 if (tree_int_cst_lt (key
, lo
))
2066 else if (tree_int_cst_lt (hi
, key
))
2076 /* Returns the index of the constructor_elt of ARY which matches DINDEX, or -1
2077 if none. If INSERT is true, insert a matching element rather than fail. */
2079 static HOST_WIDE_INT
2080 find_array_ctor_elt (tree ary
, tree dindex
, bool insert
= false)
2082 if (tree_int_cst_sgn (dindex
) < 0)
2085 unsigned HOST_WIDE_INT i
= tree_to_uhwi (dindex
);
2086 vec
<constructor_elt
, va_gc
> *elts
= CONSTRUCTOR_ELTS (ary
);
2087 unsigned HOST_WIDE_INT len
= vec_safe_length (elts
);
2089 unsigned HOST_WIDE_INT end
= len
;
2090 unsigned HOST_WIDE_INT begin
= 0;
2092 /* If the last element of the CONSTRUCTOR has its own index, we can assume
2093 that the same is true of the other elements and index directly. */
2096 tree cindex
= (*elts
)[end
-1].index
;
2097 if (TREE_CODE (cindex
) == INTEGER_CST
2098 && compare_tree_int (cindex
, end
-1) == 0)
2107 /* Otherwise, find a matching index by means of a binary search. */
2108 while (begin
!= end
)
2110 unsigned HOST_WIDE_INT middle
= (begin
+ end
) / 2;
2111 constructor_elt
&elt
= (*elts
)[middle
];
2112 tree idx
= elt
.index
;
2114 int cmp
= array_index_cmp (dindex
, idx
);
2121 if (insert
&& TREE_CODE (idx
) == RANGE_EXPR
)
2123 /* We need to split the range. */
2125 tree lo
= TREE_OPERAND (idx
, 0);
2126 tree hi
= TREE_OPERAND (idx
, 1);
2127 if (tree_int_cst_lt (lo
, dindex
))
2129 /* There are still some lower elts; shorten the range. */
2130 tree new_hi
= int_const_binop (MINUS_EXPR
, dindex
,
2132 if (tree_int_cst_equal (lo
, new_hi
))
2133 /* Only one element left, no longer a range. */
2136 TREE_OPERAND (idx
, 1) = new_hi
;
2137 /* Append the element we want to insert. */
2140 e
.value
= unshare_constructor (elt
.value
);
2141 vec_safe_insert (CONSTRUCTOR_ELTS (ary
), middle
, e
);
2144 /* No lower elts, the range elt is now ours. */
2147 if (tree_int_cst_lt (dindex
, hi
))
2149 /* There are still some higher elts; append a range. */
2150 tree new_lo
= int_const_binop (PLUS_EXPR
, dindex
,
2152 if (tree_int_cst_equal (new_lo
, hi
))
2155 e
.index
= build2 (RANGE_EXPR
, sizetype
, new_lo
, hi
);
2156 e
.value
= unshare_constructor (elt
.value
);
2157 vec_safe_insert (CONSTRUCTOR_ELTS (ary
), middle
+1, e
);
2166 constructor_elt e
= { dindex
, NULL_TREE
};
2167 vec_safe_insert (CONSTRUCTOR_ELTS (ary
), end
, e
);
2174 /* Under the control of CTX, issue a detailed diagnostic for
2175 an out-of-bounds subscript INDEX into the expression ARRAY. */
2178 diag_array_subscript (const constexpr_ctx
*ctx
, tree array
, tree index
)
2182 tree arraytype
= TREE_TYPE (array
);
2184 /* Convert the unsigned array subscript to a signed integer to avoid
2185 printing huge numbers for small negative values. */
2186 tree sidx
= fold_convert (ssizetype
, index
);
2189 error ("array subscript value %qE is outside the bounds "
2190 "of array %qD of type %qT", sidx
, array
, arraytype
);
2191 inform (DECL_SOURCE_LOCATION (array
), "declared here");
2194 error ("array subscript value %qE is outside the bounds "
2195 "of array type %qT", sidx
, arraytype
);
2199 /* Extract element INDEX consisting of CHARS_PER_ELT chars from
2200 STRING_CST STRING. */
2203 extract_string_elt (tree string
, unsigned chars_per_elt
, unsigned index
)
2205 tree type
= cv_unqualified (TREE_TYPE (TREE_TYPE (string
)));
2208 if (chars_per_elt
== 1)
2209 r
= build_int_cst (type
, TREE_STRING_POINTER (string
)[index
]);
2212 const unsigned char *ptr
2213 = ((const unsigned char *)TREE_STRING_POINTER (string
)
2214 + index
* chars_per_elt
);
2215 r
= native_interpret_expr (type
, ptr
, chars_per_elt
);
2220 /* Subroutine of cxx_eval_constant_expression.
2221 Attempt to reduce a reference to an array slot. */
2224 cxx_eval_array_reference (const constexpr_ctx
*ctx
, tree t
,
2226 bool *non_constant_p
, bool *overflow_p
)
2228 tree oldary
= TREE_OPERAND (t
, 0);
2229 tree ary
= cxx_eval_constant_expression (ctx
, oldary
,
2231 non_constant_p
, overflow_p
);
2233 HOST_WIDE_INT i
= 0;
2234 tree elem_type
= NULL_TREE
;
2235 unsigned len
= 0, elem_nchars
= 1;
2236 if (*non_constant_p
)
2238 oldidx
= TREE_OPERAND (t
, 1);
2239 index
= cxx_eval_constant_expression (ctx
, oldidx
,
2241 non_constant_p
, overflow_p
);
2242 VERIFY_CONSTANT (index
);
2245 elem_type
= TREE_TYPE (TREE_TYPE (ary
));
2246 if (TREE_CODE (ary
) == VIEW_CONVERT_EXPR
2247 && VECTOR_TYPE_P (TREE_TYPE (TREE_OPERAND (ary
, 0)))
2248 && TREE_TYPE (t
) == TREE_TYPE (TREE_TYPE (TREE_OPERAND (ary
, 0))))
2249 ary
= TREE_OPERAND (ary
, 0);
2250 if (TREE_CODE (ary
) == CONSTRUCTOR
)
2251 len
= CONSTRUCTOR_NELTS (ary
);
2252 else if (TREE_CODE (ary
) == STRING_CST
)
2254 elem_nchars
= (TYPE_PRECISION (elem_type
)
2255 / TYPE_PRECISION (char_type_node
));
2256 len
= (unsigned) TREE_STRING_LENGTH (ary
) / elem_nchars
;
2258 else if (TREE_CODE (ary
) == VECTOR_CST
)
2259 len
= VECTOR_CST_NELTS (ary
);
2262 /* We can't do anything with other tree codes, so use
2263 VERIFY_CONSTANT to complain and fail. */
2264 VERIFY_CONSTANT (ary
);
2268 if (!tree_fits_shwi_p (index
)
2269 || (i
= tree_to_shwi (index
)) < 0)
2271 diag_array_subscript (ctx
, ary
, index
);
2272 *non_constant_p
= true;
2278 if (TREE_CODE (TREE_TYPE (ary
)) == ARRAY_TYPE
)
2279 nelts
= array_type_nelts_top (TREE_TYPE (ary
));
2280 else if (VECTOR_TYPE_P (TREE_TYPE (ary
)))
2281 nelts
= size_int (TYPE_VECTOR_SUBPARTS (TREE_TYPE (ary
)));
2285 /* For VLAs, the number of elements won't be an integer constant. */
2286 nelts
= cxx_eval_constant_expression (ctx
, nelts
, false, non_constant_p
,
2288 VERIFY_CONSTANT (nelts
);
2290 ? !tree_int_cst_le (index
, nelts
)
2291 : !tree_int_cst_lt (index
, nelts
))
2292 || tree_int_cst_sgn (index
) < 0)
2294 diag_array_subscript (ctx
, ary
, index
);
2295 *non_constant_p
= true;
2299 if (lval
&& ary
== oldary
&& index
== oldidx
)
2302 return build4 (ARRAY_REF
, TREE_TYPE (t
), ary
, index
, NULL
, NULL
);
2305 if (TREE_CODE (ary
) == CONSTRUCTOR
)
2307 HOST_WIDE_INT ix
= find_array_ctor_elt (ary
, index
);
2318 if (TREE_CODE (ary
) == CONSTRUCTOR
)
2319 r
= (*CONSTRUCTOR_ELTS (ary
))[i
].value
;
2320 else if (TREE_CODE (ary
) == VECTOR_CST
)
2321 r
= VECTOR_CST_ELT (ary
, i
);
2323 r
= extract_string_elt (ary
, elem_nchars
, i
);
2326 /* Don't VERIFY_CONSTANT here. */
2329 /* Otherwise the element doesn't have a value yet. */
2334 if (TREE_CODE (ary
) == CONSTRUCTOR
2335 && CONSTRUCTOR_NO_IMPLICIT_ZERO (ary
))
2337 /* 'ary' is part of the aggregate initializer we're currently
2338 building; if there's no initializer for this element yet,
2341 error ("accessing uninitialized array element");
2342 *non_constant_p
= true;
2346 /* If it's within the array bounds but doesn't have an explicit
2347 initializer, it's value-initialized. */
2348 tree val
= build_value_init (elem_type
, tf_warning_or_error
);
2349 return cxx_eval_constant_expression (ctx
, val
, lval
, non_constant_p
,
2353 /* Subroutine of cxx_eval_constant_expression.
2354 Attempt to reduce a field access of a value of class type. */
2357 cxx_eval_component_reference (const constexpr_ctx
*ctx
, tree t
,
2359 bool *non_constant_p
, bool *overflow_p
)
2361 unsigned HOST_WIDE_INT i
;
2364 tree part
= TREE_OPERAND (t
, 1);
2365 tree orig_whole
= TREE_OPERAND (t
, 0);
2366 tree whole
= cxx_eval_constant_expression (ctx
, orig_whole
,
2368 non_constant_p
, overflow_p
);
2369 if (TREE_CODE (whole
) == INDIRECT_REF
2370 && integer_zerop (TREE_OPERAND (whole
, 0))
2372 error ("dereferencing a null pointer in %qE", orig_whole
);
2374 if (TREE_CODE (whole
) == PTRMEM_CST
)
2375 whole
= cplus_expand_constant (whole
);
2376 if (whole
== orig_whole
)
2379 return fold_build3 (COMPONENT_REF
, TREE_TYPE (t
),
2380 whole
, part
, NULL_TREE
);
2381 /* Don't VERIFY_CONSTANT here; we only want to check that we got a
2383 if (!*non_constant_p
&& TREE_CODE (whole
) != CONSTRUCTOR
)
2386 error ("%qE is not a constant expression", orig_whole
);
2387 *non_constant_p
= true;
2389 if (DECL_MUTABLE_P (part
))
2392 error ("mutable %qD is not usable in a constant expression", part
);
2393 *non_constant_p
= true;
2395 if (*non_constant_p
)
2397 bool pmf
= TYPE_PTRMEMFUNC_P (TREE_TYPE (whole
));
2398 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (whole
), i
, field
, value
)
2400 /* Use name match for PMF fields, as a variant will have a
2401 different FIELD_DECL with a different type. */
2402 if (pmf
? DECL_NAME (field
) == DECL_NAME (part
)
2408 /* We're in the middle of initializing it. */
2412 if (TREE_CODE (TREE_TYPE (whole
)) == UNION_TYPE
2413 && CONSTRUCTOR_NELTS (whole
) > 0)
2415 /* DR 1188 says we don't have to deal with this. */
2417 error ("accessing %qD member instead of initialized %qD member in "
2418 "constant expression", part
, CONSTRUCTOR_ELT (whole
, 0)->index
);
2419 *non_constant_p
= true;
2423 /* We only create a CONSTRUCTOR for a subobject when we modify it, so empty
2424 classes never get represented; throw together a value now. */
2425 if (is_really_empty_class (TREE_TYPE (t
)))
2426 return build_constructor (TREE_TYPE (t
), NULL
);
2428 gcc_assert (DECL_CONTEXT (part
) == TYPE_MAIN_VARIANT (TREE_TYPE (whole
)));
2430 if (CONSTRUCTOR_NO_IMPLICIT_ZERO (whole
))
2432 /* 'whole' is part of the aggregate initializer we're currently
2433 building; if there's no initializer for this member yet, that's an
2436 error ("accessing uninitialized member %qD", part
);
2437 *non_constant_p
= true;
2441 /* If there's no explicit init for this field, it's value-initialized. */
2442 value
= build_value_init (TREE_TYPE (t
), tf_warning_or_error
);
2443 return cxx_eval_constant_expression (ctx
, value
,
2445 non_constant_p
, overflow_p
);
2448 /* Subroutine of cxx_eval_constant_expression.
2449 Attempt to reduce a field access of a value of class type that is
2450 expressed as a BIT_FIELD_REF. */
2453 cxx_eval_bit_field_ref (const constexpr_ctx
*ctx
, tree t
,
2455 bool *non_constant_p
, bool *overflow_p
)
2457 tree orig_whole
= TREE_OPERAND (t
, 0);
2458 tree retval
, fldval
, utype
, mask
;
2459 bool fld_seen
= false;
2460 HOST_WIDE_INT istart
, isize
;
2461 tree whole
= cxx_eval_constant_expression (ctx
, orig_whole
,
2463 non_constant_p
, overflow_p
);
2464 tree start
, field
, value
;
2465 unsigned HOST_WIDE_INT i
;
2467 if (whole
== orig_whole
)
2469 /* Don't VERIFY_CONSTANT here; we only want to check that we got a
2471 if (!*non_constant_p
2472 && TREE_CODE (whole
) != VECTOR_CST
2473 && TREE_CODE (whole
) != CONSTRUCTOR
)
2476 error ("%qE is not a constant expression", orig_whole
);
2477 *non_constant_p
= true;
2479 if (*non_constant_p
)
2482 if (TREE_CODE (whole
) == VECTOR_CST
)
2483 return fold_ternary (BIT_FIELD_REF
, TREE_TYPE (t
), whole
,
2484 TREE_OPERAND (t
, 1), TREE_OPERAND (t
, 2));
2486 start
= TREE_OPERAND (t
, 2);
2487 istart
= tree_to_shwi (start
);
2488 isize
= tree_to_shwi (TREE_OPERAND (t
, 1));
2489 utype
= TREE_TYPE (t
);
2490 if (!TYPE_UNSIGNED (utype
))
2491 utype
= build_nonstandard_integer_type (TYPE_PRECISION (utype
), 1);
2492 retval
= build_int_cst (utype
, 0);
2493 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (whole
), i
, field
, value
)
2495 tree bitpos
= bit_position (field
);
2496 if (bitpos
== start
&& DECL_SIZE (field
) == TREE_OPERAND (t
, 1))
2498 if (TREE_CODE (TREE_TYPE (field
)) == INTEGER_TYPE
2499 && TREE_CODE (value
) == INTEGER_CST
2500 && tree_fits_shwi_p (bitpos
)
2501 && tree_fits_shwi_p (DECL_SIZE (field
)))
2503 HOST_WIDE_INT bit
= tree_to_shwi (bitpos
);
2504 HOST_WIDE_INT sz
= tree_to_shwi (DECL_SIZE (field
));
2505 HOST_WIDE_INT shift
;
2506 if (bit
>= istart
&& bit
+ sz
<= istart
+ isize
)
2508 fldval
= fold_convert (utype
, value
);
2509 mask
= build_int_cst_type (utype
, -1);
2510 mask
= fold_build2 (LSHIFT_EXPR
, utype
, mask
,
2511 size_int (TYPE_PRECISION (utype
) - sz
));
2512 mask
= fold_build2 (RSHIFT_EXPR
, utype
, mask
,
2513 size_int (TYPE_PRECISION (utype
) - sz
));
2514 fldval
= fold_build2 (BIT_AND_EXPR
, utype
, fldval
, mask
);
2515 shift
= bit
- istart
;
2516 if (BYTES_BIG_ENDIAN
)
2517 shift
= TYPE_PRECISION (utype
) - shift
- sz
;
2518 fldval
= fold_build2 (LSHIFT_EXPR
, utype
, fldval
,
2520 retval
= fold_build2 (BIT_IOR_EXPR
, utype
, retval
, fldval
);
2526 return fold_convert (TREE_TYPE (t
), retval
);
2528 return error_mark_node
;
2531 /* Subroutine of cxx_eval_constant_expression.
2532 Evaluate a short-circuited logical expression T in the context
2533 of a given constexpr CALL. BAILOUT_VALUE is the value for
2534 early return. CONTINUE_VALUE is used here purely for
2535 sanity check purposes. */
2538 cxx_eval_logical_expression (const constexpr_ctx
*ctx
, tree t
,
2539 tree bailout_value
, tree continue_value
,
2541 bool *non_constant_p
, bool *overflow_p
)
2544 tree lhs
= cxx_eval_constant_expression (ctx
, TREE_OPERAND (t
, 0),
2546 non_constant_p
, overflow_p
);
2547 VERIFY_CONSTANT (lhs
);
2548 if (tree_int_cst_equal (lhs
, bailout_value
))
2550 gcc_assert (tree_int_cst_equal (lhs
, continue_value
));
2551 r
= cxx_eval_constant_expression (ctx
, TREE_OPERAND (t
, 1),
2552 lval
, non_constant_p
,
2554 VERIFY_CONSTANT (r
);
2558 /* REF is a COMPONENT_REF designating a particular field. V is a vector of
2559 CONSTRUCTOR elements to initialize (part of) an object containing that
2560 field. Return a pointer to the constructor_elt corresponding to the
2561 initialization of the field. */
2563 static constructor_elt
*
2564 base_field_constructor_elt (vec
<constructor_elt
, va_gc
> *v
, tree ref
)
2566 tree aggr
= TREE_OPERAND (ref
, 0);
2567 tree field
= TREE_OPERAND (ref
, 1);
2569 constructor_elt
*ce
;
2571 gcc_assert (TREE_CODE (ref
) == COMPONENT_REF
);
2573 if (TREE_CODE (aggr
) == COMPONENT_REF
)
2575 constructor_elt
*base_ce
2576 = base_field_constructor_elt (v
, aggr
);
2577 v
= CONSTRUCTOR_ELTS (base_ce
->value
);
2580 for (i
= 0; vec_safe_iterate (v
, i
, &ce
); ++i
)
2581 if (ce
->index
== field
)
2588 /* Some of the expressions fed to the constexpr mechanism are calls to
2589 constructors, which have type void. In that case, return the type being
2590 initialized by the constructor. */
2593 initialized_type (tree t
)
2597 tree type
= cv_unqualified (TREE_TYPE (t
));
2598 if (TREE_CODE (t
) == CALL_EXPR
|| TREE_CODE (t
) == AGGR_INIT_EXPR
)
2600 /* A constructor call has void type, so we need to look deeper. */
2601 tree fn
= get_function_named_in_call (t
);
2602 if (fn
&& TREE_CODE (fn
) == FUNCTION_DECL
2603 && DECL_CXX_CONSTRUCTOR_P (fn
))
2604 type
= DECL_CONTEXT (fn
);
2609 /* We're about to initialize element INDEX of an array or class from VALUE.
2610 Set up NEW_CTX appropriately by adjusting .object to refer to the
2611 subobject and creating a new CONSTRUCTOR if the element is itself
2612 a class or array. */
2615 init_subob_ctx (const constexpr_ctx
*ctx
, constexpr_ctx
&new_ctx
,
2616 tree index
, tree
&value
)
2620 if (index
&& TREE_CODE (index
) != INTEGER_CST
2621 && TREE_CODE (index
) != FIELD_DECL
)
2622 /* This won't have an element in the new CONSTRUCTOR. */
2625 tree type
= initialized_type (value
);
2626 if (!AGGREGATE_TYPE_P (type
) && !VECTOR_TYPE_P (type
))
2627 /* A non-aggregate member doesn't get its own CONSTRUCTOR. */
2630 /* The sub-aggregate initializer might contain a placeholder;
2631 update object to refer to the subobject and ctor to refer to
2632 the (newly created) sub-initializer. */
2634 new_ctx
.object
= build_ctor_subob_ref (index
, type
, ctx
->object
);
2635 tree elt
= build_constructor (type
, NULL
);
2636 CONSTRUCTOR_NO_IMPLICIT_ZERO (elt
) = true;
2639 if (TREE_CODE (value
) == TARGET_EXPR
)
2640 /* Avoid creating another CONSTRUCTOR when we expand the TARGET_EXPR. */
2641 value
= TARGET_EXPR_INITIAL (value
);
2644 /* We're about to process an initializer for a class or array TYPE. Make
2645 sure that CTX is set up appropriately. */
2648 verify_ctor_sanity (const constexpr_ctx
*ctx
, tree type
)
2650 /* We don't bother building a ctor for an empty base subobject. */
2651 if (is_empty_class (type
))
2654 /* We're in the middle of an initializer that might involve placeholders;
2655 our caller should have created a CONSTRUCTOR for us to put the
2656 initializer into. We will either return that constructor or T. */
2657 gcc_assert (ctx
->ctor
);
2658 gcc_assert (same_type_ignoring_top_level_qualifiers_p
2659 (type
, TREE_TYPE (ctx
->ctor
)));
2660 /* We used to check that ctx->ctor was empty, but that isn't the case when
2661 the object is zero-initialized before calling the constructor. */
2664 tree otype
= TREE_TYPE (ctx
->object
);
2665 gcc_assert (same_type_ignoring_top_level_qualifiers_p (type
, otype
)
2666 /* Handle flexible array members. */
2667 || (TREE_CODE (otype
) == ARRAY_TYPE
2668 && TYPE_DOMAIN (otype
) == NULL_TREE
2669 && TREE_CODE (type
) == ARRAY_TYPE
2670 && (same_type_ignoring_top_level_qualifiers_p
2671 (TREE_TYPE (type
), TREE_TYPE (otype
)))));
2673 gcc_assert (!ctx
->object
|| !DECL_P (ctx
->object
)
2674 || *(ctx
->values
->get (ctx
->object
)) == ctx
->ctor
);
2677 /* Subroutine of cxx_eval_constant_expression.
2678 The expression tree T denotes a C-style array or a C-style
2679 aggregate. Reduce it to a constant expression. */
2682 cxx_eval_bare_aggregate (const constexpr_ctx
*ctx
, tree t
,
2684 bool *non_constant_p
, bool *overflow_p
)
2686 vec
<constructor_elt
, va_gc
> *v
= CONSTRUCTOR_ELTS (t
);
2687 bool changed
= false;
2688 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (t
));
2689 tree type
= TREE_TYPE (t
);
2691 constexpr_ctx new_ctx
;
2692 if (TYPE_PTRMEMFUNC_P (type
) || VECTOR_TYPE_P (type
))
2694 /* We don't really need the ctx->ctor business for a PMF or
2695 vector, but it's simpler to use the same code. */
2697 new_ctx
.ctor
= build_constructor (type
, NULL
);
2698 new_ctx
.object
= NULL_TREE
;
2701 verify_ctor_sanity (ctx
, type
);
2702 vec
<constructor_elt
, va_gc
> **p
= &CONSTRUCTOR_ELTS (ctx
->ctor
);
2703 vec_alloc (*p
, vec_safe_length (v
));
2707 bool constant_p
= true;
2708 bool side_effects_p
= false;
2709 FOR_EACH_CONSTRUCTOR_ELT (v
, i
, index
, value
)
2711 tree orig_value
= value
;
2712 init_subob_ctx (ctx
, new_ctx
, index
, value
);
2713 if (new_ctx
.ctor
!= ctx
->ctor
)
2714 /* If we built a new CONSTRUCTOR, attach it now so that other
2715 initializers can refer to it. */
2716 CONSTRUCTOR_APPEND_ELT (*p
, index
, new_ctx
.ctor
);
2717 tree elt
= cxx_eval_constant_expression (&new_ctx
, value
,
2719 non_constant_p
, overflow_p
);
2720 /* Don't VERIFY_CONSTANT here. */
2721 if (ctx
->quiet
&& *non_constant_p
)
2723 if (elt
!= orig_value
)
2726 if (!TREE_CONSTANT (elt
))
2728 if (TREE_SIDE_EFFECTS (elt
))
2729 side_effects_p
= true;
2730 if (index
&& TREE_CODE (index
) == COMPONENT_REF
)
2732 /* This is an initialization of a vfield inside a base
2733 subaggregate that we already initialized; push this
2734 initialization into the previous initialization. */
2735 constructor_elt
*inner
= base_field_constructor_elt (*p
, index
);
2740 && (TREE_CODE (index
) == NOP_EXPR
2741 || TREE_CODE (index
) == POINTER_PLUS_EXPR
))
2743 /* This is an initializer for an empty base; now that we've
2744 checked that it's constant, we can ignore it. */
2745 gcc_assert (is_empty_class (TREE_TYPE (TREE_TYPE (index
))));
2748 else if (new_ctx
.ctor
!= ctx
->ctor
)
2750 /* We appended this element above; update the value. */
2751 gcc_assert ((*p
)->last().index
== index
);
2752 (*p
)->last().value
= elt
;
2755 CONSTRUCTOR_APPEND_ELT (*p
, index
, elt
);
2757 if (*non_constant_p
|| !changed
)
2760 /* We're done building this CONSTRUCTOR, so now we can interpret an
2761 element without an explicit initializer as value-initialized. */
2762 CONSTRUCTOR_NO_IMPLICIT_ZERO (t
) = false;
2763 TREE_CONSTANT (t
) = constant_p
;
2764 TREE_SIDE_EFFECTS (t
) = side_effects_p
;
2765 if (VECTOR_TYPE_P (type
))
2770 /* Subroutine of cxx_eval_constant_expression.
2771 The expression tree T is a VEC_INIT_EXPR which denotes the desired
2772 initialization of a non-static data member of array type. Reduce it to a
2775 Note that apart from value-initialization (when VALUE_INIT is true),
2776 this is only intended to support value-initialization and the
2777 initializations done by defaulted constructors for classes with
2778 non-static data members of array type. In this case, VEC_INIT_EXPR_INIT
2779 will either be NULL_TREE for the default constructor, or a COMPONENT_REF
2780 for the copy/move constructor. */
2783 cxx_eval_vec_init_1 (const constexpr_ctx
*ctx
, tree atype
, tree init
,
2784 bool value_init
, bool lval
,
2785 bool *non_constant_p
, bool *overflow_p
)
2787 tree elttype
= TREE_TYPE (atype
);
2788 unsigned HOST_WIDE_INT max
= tree_to_uhwi (array_type_nelts_top (atype
));
2789 verify_ctor_sanity (ctx
, atype
);
2790 vec
<constructor_elt
, va_gc
> **p
= &CONSTRUCTOR_ELTS (ctx
->ctor
);
2791 vec_alloc (*p
, max
+ 1);
2792 bool pre_init
= false;
2793 unsigned HOST_WIDE_INT i
;
2795 /* For the default constructor, build up a call to the default
2796 constructor of the element type. We only need to handle class types
2797 here, as for a constructor to be constexpr, all members must be
2798 initialized, which for a defaulted default constructor means they must
2799 be of a class type with a constexpr default constructor. */
2800 if (TREE_CODE (elttype
) == ARRAY_TYPE
)
2801 /* We only do this at the lowest level. */;
2802 else if (value_init
)
2804 init
= build_value_init (elttype
, tf_warning_or_error
);
2809 vec
<tree
, va_gc
> *argvec
= make_tree_vector ();
2810 init
= build_special_member_call (NULL_TREE
, complete_ctor_identifier
,
2811 &argvec
, elttype
, LOOKUP_NORMAL
,
2812 tf_warning_or_error
);
2813 release_tree_vector (argvec
);
2814 init
= build_aggr_init_expr (TREE_TYPE (init
), init
);
2818 for (i
= 0; i
< max
; ++i
)
2820 tree idx
= build_int_cst (size_type_node
, i
);
2823 constexpr_ctx new_ctx
;
2824 init_subob_ctx (ctx
, new_ctx
, idx
, pre_init
? init
: elttype
);
2825 if (new_ctx
.ctor
!= ctx
->ctor
)
2826 CONSTRUCTOR_APPEND_ELT (*p
, idx
, new_ctx
.ctor
);
2827 if (TREE_CODE (elttype
) == ARRAY_TYPE
)
2829 /* A multidimensional array; recurse. */
2830 if (value_init
|| init
== NULL_TREE
)
2832 eltinit
= NULL_TREE
;
2836 eltinit
= cp_build_array_ref (input_location
, init
, idx
,
2837 tf_warning_or_error
);
2838 eltinit
= cxx_eval_vec_init_1 (&new_ctx
, elttype
, eltinit
, value_init
,
2840 non_constant_p
, overflow_p
);
2844 /* Initializing an element using value or default initialization
2845 we just pre-built above. */
2846 eltinit
= cxx_eval_constant_expression (&new_ctx
, init
, lval
,
2847 non_constant_p
, overflow_p
);
2852 /* Copying an element. */
2853 gcc_assert (same_type_ignoring_top_level_qualifiers_p
2854 (atype
, TREE_TYPE (init
)));
2855 eltinit
= cp_build_array_ref (input_location
, init
, idx
,
2856 tf_warning_or_error
);
2857 if (!lvalue_p (init
))
2858 eltinit
= move (eltinit
);
2859 eltinit
= force_rvalue (eltinit
, tf_warning_or_error
);
2860 eltinit
= (cxx_eval_constant_expression
2861 (&new_ctx
, eltinit
, lval
,
2862 non_constant_p
, overflow_p
));
2864 if (*non_constant_p
&& !ctx
->quiet
)
2866 if (new_ctx
.ctor
!= ctx
->ctor
)
2868 /* We appended this element above; update the value. */
2869 gcc_assert ((*p
)->last().index
== idx
);
2870 (*p
)->last().value
= eltinit
;
2873 CONSTRUCTOR_APPEND_ELT (*p
, idx
, eltinit
);
2874 /* Reuse the result of cxx_eval_constant_expression call
2875 from the first iteration to all others if it is a constant
2876 initializer that doesn't require relocations. */
2879 && (initializer_constant_valid_p (eltinit
, TREE_TYPE (eltinit
))
2880 == null_pointer_node
))
2882 if (new_ctx
.ctor
!= ctx
->ctor
)
2883 eltinit
= new_ctx
.ctor
;
2884 for (i
= 1; i
< max
; ++i
)
2886 idx
= build_int_cst (size_type_node
, i
);
2887 CONSTRUCTOR_APPEND_ELT (*p
, idx
, unshare_constructor (eltinit
));
2893 if (!*non_constant_p
)
2896 CONSTRUCTOR_NO_IMPLICIT_ZERO (init
) = false;
2902 cxx_eval_vec_init (const constexpr_ctx
*ctx
, tree t
,
2904 bool *non_constant_p
, bool *overflow_p
)
2906 tree atype
= TREE_TYPE (t
);
2907 tree init
= VEC_INIT_EXPR_INIT (t
);
2908 tree r
= cxx_eval_vec_init_1 (ctx
, atype
, init
,
2909 VEC_INIT_EXPR_VALUE_INIT (t
),
2910 lval
, non_constant_p
, overflow_p
);
2911 if (*non_constant_p
)
2917 /* A less strict version of fold_indirect_ref_1, which requires cv-quals to
2918 match. We want to be less strict for simple *& folding; if we have a
2919 non-const temporary that we access through a const pointer, that should
2920 work. We handle this here rather than change fold_indirect_ref_1
2921 because we're dealing with things like ADDR_EXPR of INTEGER_CST which
2922 don't really make sense outside of constant expression evaluation. Also
2923 we want to allow folding to COMPONENT_REF, which could cause trouble
2924 with TBAA in fold_indirect_ref_1.
2926 Try to keep this function synced with fold_indirect_ref_1. */
2929 cxx_fold_indirect_ref (location_t loc
, tree type
, tree op0
, bool *empty_base
)
2935 subtype
= TREE_TYPE (sub
);
2936 if (!POINTER_TYPE_P (subtype
))
2939 if (TREE_CODE (sub
) == ADDR_EXPR
)
2941 tree op
= TREE_OPERAND (sub
, 0);
2942 tree optype
= TREE_TYPE (op
);
2944 /* *&CONST_DECL -> to the value of the const decl. */
2945 if (TREE_CODE (op
) == CONST_DECL
)
2946 return DECL_INITIAL (op
);
2947 /* *&p => p; make sure to handle *&"str"[cst] here. */
2948 if (same_type_ignoring_top_level_qualifiers_p (optype
, type
)
2949 /* Also handle the case where the desired type is an array of unknown
2950 bounds because the variable has had its bounds deduced since the
2951 ADDR_EXPR was created. */
2952 || (TREE_CODE (type
) == ARRAY_TYPE
2953 && TREE_CODE (optype
) == ARRAY_TYPE
2954 && TYPE_DOMAIN (type
) == NULL_TREE
2955 && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (optype
),
2958 tree fop
= fold_read_from_constant_string (op
);
2964 /* *(foo *)&fooarray => fooarray[0] */
2965 else if (TREE_CODE (optype
) == ARRAY_TYPE
2966 && (same_type_ignoring_top_level_qualifiers_p
2967 (type
, TREE_TYPE (optype
))))
2969 tree type_domain
= TYPE_DOMAIN (optype
);
2970 tree min_val
= size_zero_node
;
2971 if (type_domain
&& TYPE_MIN_VALUE (type_domain
))
2972 min_val
= TYPE_MIN_VALUE (type_domain
);
2973 return build4_loc (loc
, ARRAY_REF
, type
, op
, min_val
,
2974 NULL_TREE
, NULL_TREE
);
2976 /* *(foo *)&complexfoo => __real__ complexfoo */
2977 else if (TREE_CODE (optype
) == COMPLEX_TYPE
2978 && (same_type_ignoring_top_level_qualifiers_p
2979 (type
, TREE_TYPE (optype
))))
2980 return fold_build1_loc (loc
, REALPART_EXPR
, type
, op
);
2981 /* *(foo *)&vectorfoo => BIT_FIELD_REF<vectorfoo,...> */
2982 else if (VECTOR_TYPE_P (optype
)
2983 && (same_type_ignoring_top_level_qualifiers_p
2984 (type
, TREE_TYPE (optype
))))
2986 tree part_width
= TYPE_SIZE (type
);
2987 tree index
= bitsize_int (0);
2988 return fold_build3_loc (loc
, BIT_FIELD_REF
, type
, op
, part_width
, index
);
2990 /* Also handle conversion to an empty base class, which
2991 is represented with a NOP_EXPR. */
2992 else if (is_empty_class (type
)
2993 && CLASS_TYPE_P (optype
)
2994 && DERIVED_FROM_P (type
, optype
))
2999 /* *(foo *)&struct_with_foo_field => COMPONENT_REF */
3000 else if (RECORD_OR_UNION_TYPE_P (optype
))
3002 tree field
= TYPE_FIELDS (optype
);
3003 for (; field
; field
= DECL_CHAIN (field
))
3004 if (TREE_CODE (field
) == FIELD_DECL
3005 && TREE_TYPE (field
) != error_mark_node
3006 && integer_zerop (byte_position (field
))
3007 && (same_type_ignoring_top_level_qualifiers_p
3008 (TREE_TYPE (field
), type
)))
3009 return fold_build3 (COMPONENT_REF
, type
, op
, field
, NULL_TREE
);
3012 else if (TREE_CODE (sub
) == POINTER_PLUS_EXPR
3013 && TREE_CODE (TREE_OPERAND (sub
, 1)) == INTEGER_CST
)
3015 tree op00
= TREE_OPERAND (sub
, 0);
3016 tree op01
= TREE_OPERAND (sub
, 1);
3019 if (TREE_CODE (op00
) == ADDR_EXPR
)
3022 op00
= TREE_OPERAND (op00
, 0);
3023 op00type
= TREE_TYPE (op00
);
3025 /* ((foo*)&vectorfoo)[1] => BIT_FIELD_REF<vectorfoo,...> */
3026 if (VECTOR_TYPE_P (op00type
)
3027 && (same_type_ignoring_top_level_qualifiers_p
3028 (type
, TREE_TYPE (op00type
))))
3030 HOST_WIDE_INT offset
= tree_to_shwi (op01
);
3031 tree part_width
= TYPE_SIZE (type
);
3032 unsigned HOST_WIDE_INT part_widthi
= tree_to_shwi (part_width
)/BITS_PER_UNIT
;
3033 unsigned HOST_WIDE_INT indexi
= offset
* BITS_PER_UNIT
;
3034 tree index
= bitsize_int (indexi
);
3036 if (offset
/ part_widthi
< TYPE_VECTOR_SUBPARTS (op00type
))
3037 return fold_build3_loc (loc
,
3038 BIT_FIELD_REF
, type
, op00
,
3042 /* ((foo*)&complexfoo)[1] => __imag__ complexfoo */
3043 else if (TREE_CODE (op00type
) == COMPLEX_TYPE
3044 && (same_type_ignoring_top_level_qualifiers_p
3045 (type
, TREE_TYPE (op00type
))))
3047 tree size
= TYPE_SIZE_UNIT (type
);
3048 if (tree_int_cst_equal (size
, op01
))
3049 return fold_build1_loc (loc
, IMAGPART_EXPR
, type
, op00
);
3051 /* ((foo *)&fooarray)[1] => fooarray[1] */
3052 else if (TREE_CODE (op00type
) == ARRAY_TYPE
3053 && (same_type_ignoring_top_level_qualifiers_p
3054 (type
, TREE_TYPE (op00type
))))
3056 tree type_domain
= TYPE_DOMAIN (op00type
);
3057 tree min_val
= size_zero_node
;
3058 if (type_domain
&& TYPE_MIN_VALUE (type_domain
))
3059 min_val
= TYPE_MIN_VALUE (type_domain
);
3060 op01
= size_binop_loc (loc
, EXACT_DIV_EXPR
, op01
,
3061 TYPE_SIZE_UNIT (type
));
3062 op01
= size_binop_loc (loc
, PLUS_EXPR
, op01
, min_val
);
3063 return build4_loc (loc
, ARRAY_REF
, type
, op00
, op01
,
3064 NULL_TREE
, NULL_TREE
);
3066 /* Also handle conversion to an empty base class, which
3067 is represented with a NOP_EXPR. */
3068 else if (is_empty_class (type
)
3069 && CLASS_TYPE_P (op00type
)
3070 && DERIVED_FROM_P (type
, op00type
))
3075 /* ((foo *)&struct_with_foo_field)[1] => COMPONENT_REF */
3076 else if (RECORD_OR_UNION_TYPE_P (op00type
))
3078 tree field
= TYPE_FIELDS (op00type
);
3079 for (; field
; field
= DECL_CHAIN (field
))
3080 if (TREE_CODE (field
) == FIELD_DECL
3081 && TREE_TYPE (field
) != error_mark_node
3082 && tree_int_cst_equal (byte_position (field
), op01
)
3083 && (same_type_ignoring_top_level_qualifiers_p
3084 (TREE_TYPE (field
), type
)))
3085 return fold_build3 (COMPONENT_REF
, type
, op00
,
3090 /* *(foo *)fooarrptr => (*fooarrptr)[0] */
3091 else if (TREE_CODE (TREE_TYPE (subtype
)) == ARRAY_TYPE
3092 && (same_type_ignoring_top_level_qualifiers_p
3093 (type
, TREE_TYPE (TREE_TYPE (subtype
)))))
3096 tree min_val
= size_zero_node
;
3097 tree newsub
= cxx_fold_indirect_ref (loc
, TREE_TYPE (subtype
), sub
, NULL
);
3101 sub
= build1_loc (loc
, INDIRECT_REF
, TREE_TYPE (subtype
), sub
);
3102 type_domain
= TYPE_DOMAIN (TREE_TYPE (sub
));
3103 if (type_domain
&& TYPE_MIN_VALUE (type_domain
))
3104 min_val
= TYPE_MIN_VALUE (type_domain
);
3105 return build4_loc (loc
, ARRAY_REF
, type
, sub
, min_val
, NULL_TREE
,
3113 cxx_eval_indirect_ref (const constexpr_ctx
*ctx
, tree t
,
3115 bool *non_constant_p
, bool *overflow_p
)
3117 tree orig_op0
= TREE_OPERAND (t
, 0);
3118 bool empty_base
= false;
3120 /* We can handle a MEM_REF like an INDIRECT_REF, if MEM_REF's second
3121 operand is an integer-zero. Otherwise reject the MEM_REF for now. */
3123 if (TREE_CODE (t
) == MEM_REF
3124 && (!TREE_OPERAND (t
, 1) || !integer_zerop (TREE_OPERAND (t
, 1))))
3126 gcc_assert (ctx
->quiet
);
3127 *non_constant_p
= true;
3131 /* First try to simplify it directly. */
3132 tree r
= cxx_fold_indirect_ref (EXPR_LOCATION (t
), TREE_TYPE (t
), orig_op0
,
3136 /* If that didn't work, evaluate the operand first. */
3137 tree op0
= cxx_eval_constant_expression (ctx
, orig_op0
,
3138 /*lval*/false, non_constant_p
,
3140 /* Don't VERIFY_CONSTANT here. */
3141 if (*non_constant_p
)
3144 if (!lval
&& integer_zerop (op0
))
3147 error ("dereferencing a null pointer");
3148 *non_constant_p
= true;
3152 r
= cxx_fold_indirect_ref (EXPR_LOCATION (t
), TREE_TYPE (t
), op0
,
3156 /* We couldn't fold to a constant value. Make sure it's not
3157 something we should have been able to fold. */
3160 if (TREE_CODE (sub
) == ADDR_EXPR
)
3162 gcc_assert (!same_type_ignoring_top_level_qualifiers_p
3163 (TREE_TYPE (TREE_TYPE (sub
)), TREE_TYPE (t
)));
3164 /* DR 1188 says we don't have to deal with this. */
3166 error ("accessing value of %qE through a %qT glvalue in a "
3167 "constant expression", build_fold_indirect_ref (sub
),
3169 *non_constant_p
= true;
3173 if (lval
&& op0
!= orig_op0
)
3174 return build1 (INDIRECT_REF
, TREE_TYPE (t
), op0
);
3176 VERIFY_CONSTANT (t
);
3181 r
= cxx_eval_constant_expression (ctx
, r
,
3182 lval
, non_constant_p
, overflow_p
);
3183 if (*non_constant_p
)
3186 /* If we're pulling out the value of an empty base, just return an empty
3188 if (empty_base
&& !lval
)
3190 r
= build_constructor (TREE_TYPE (t
), NULL
);
3191 TREE_CONSTANT (r
) = true;
3197 /* Complain about R, a VAR_DECL, not being usable in a constant expression.
3198 Shared between potential_constant_expression and
3199 cxx_eval_constant_expression. */
3202 non_const_var_error (tree r
)
3204 tree type
= TREE_TYPE (r
);
3205 error ("the value of %qD is not usable in a constant "
3207 /* Avoid error cascade. */
3208 if (DECL_INITIAL (r
) == error_mark_node
)
3210 if (DECL_DECLARED_CONSTEXPR_P (r
))
3211 inform (DECL_SOURCE_LOCATION (r
),
3212 "%qD used in its own initializer", r
);
3213 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (type
))
3215 if (!CP_TYPE_CONST_P (type
))
3216 inform (DECL_SOURCE_LOCATION (r
),
3217 "%q#D is not const", r
);
3218 else if (CP_TYPE_VOLATILE_P (type
))
3219 inform (DECL_SOURCE_LOCATION (r
),
3220 "%q#D is volatile", r
);
3221 else if (!DECL_INITIAL (r
)
3222 || !TREE_CONSTANT (DECL_INITIAL (r
))
3223 || !DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r
))
3224 inform (DECL_SOURCE_LOCATION (r
),
3225 "%qD was not initialized with a constant "
3230 else if (TREE_CODE (type
) == REFERENCE_TYPE
)
3231 inform (DECL_SOURCE_LOCATION (r
),
3232 "%qD was not initialized with a constant "
3236 if (cxx_dialect
>= cxx11
&& !DECL_DECLARED_CONSTEXPR_P (r
))
3237 inform (DECL_SOURCE_LOCATION (r
),
3238 "%qD was not declared %<constexpr%>", r
);
3240 inform (DECL_SOURCE_LOCATION (r
),
3241 "%qD does not have integral or enumeration type",
3246 /* Subroutine of cxx_eval_constant_expression.
3247 Like cxx_eval_unary_expression, except for trinary expressions. */
3250 cxx_eval_trinary_expression (const constexpr_ctx
*ctx
, tree t
,
3252 bool *non_constant_p
, bool *overflow_p
)
3258 for (i
= 0; i
< 3; i
++)
3260 args
[i
] = cxx_eval_constant_expression (ctx
, TREE_OPERAND (t
, i
),
3262 non_constant_p
, overflow_p
);
3263 VERIFY_CONSTANT (args
[i
]);
3266 val
= fold_ternary_loc (EXPR_LOCATION (t
), TREE_CODE (t
), TREE_TYPE (t
),
3267 args
[0], args
[1], args
[2]);
3268 if (val
== NULL_TREE
)
3270 VERIFY_CONSTANT (val
);
3274 /* True if T was declared in a function declared to be constexpr, and
3275 therefore potentially constant in C++14. */
3278 var_in_constexpr_fn (tree t
)
3280 tree ctx
= DECL_CONTEXT (t
);
3281 return (ctx
&& TREE_CODE (ctx
) == FUNCTION_DECL
3282 && DECL_DECLARED_CONSTEXPR_P (ctx
));
3285 /* True if T was declared in a function that might be constexpr: either a
3286 function that was declared constexpr, or a C++17 lambda op(). */
3289 var_in_maybe_constexpr_fn (tree t
)
3291 if (cxx_dialect
>= cxx1z
3292 && DECL_FUNCTION_SCOPE_P (t
)
3293 && LAMBDA_FUNCTION_P (DECL_CONTEXT (t
)))
3295 return var_in_constexpr_fn (t
);
3298 /* We're assigning INIT to TARGET. In do_build_copy_constructor and
3299 build_over_call we implement trivial copy of a class with tail padding using
3300 assignment of character arrays, which is valid in normal code, but not in
3301 constexpr evaluation. We don't need to worry about clobbering tail padding
3302 in constexpr evaluation, so strip the type punning. */
3305 maybe_simplify_trivial_copy (tree
&target
, tree
&init
)
3307 if (TREE_CODE (target
) == MEM_REF
3308 && TREE_CODE (init
) == MEM_REF
3309 && TREE_TYPE (target
) == TREE_TYPE (init
)
3310 && TREE_CODE (TREE_TYPE (target
)) == ARRAY_TYPE
3311 && TREE_TYPE (TREE_TYPE (target
)) == unsigned_char_type_node
)
3313 target
= build_fold_indirect_ref (TREE_OPERAND (target
, 0));
3314 init
= build_fold_indirect_ref (TREE_OPERAND (init
, 0));
3318 /* Evaluate an INIT_EXPR or MODIFY_EXPR. */
3321 cxx_eval_store_expression (const constexpr_ctx
*ctx
, tree t
,
3323 bool *non_constant_p
, bool *overflow_p
)
3325 constexpr_ctx new_ctx
= *ctx
;
3327 tree init
= TREE_OPERAND (t
, 1);
3328 if (TREE_CLOBBER_P (init
))
3329 /* Just ignore clobbers. */
3332 /* First we figure out where we're storing to. */
3333 tree target
= TREE_OPERAND (t
, 0);
3335 maybe_simplify_trivial_copy (target
, init
);
3337 tree type
= TREE_TYPE (target
);
3338 target
= cxx_eval_constant_expression (ctx
, target
,
3340 non_constant_p
, overflow_p
);
3341 if (*non_constant_p
)
3344 /* cxx_eval_array_reference for lval = true allows references one past
3345 end of array, because it does not know if it is just taking address
3346 (which is valid), or actual dereference. Here we know it is
3347 a dereference, so diagnose it here. */
3348 for (tree probe
= target
; probe
; )
3350 switch (TREE_CODE (probe
))
3354 ary
= TREE_OPERAND (probe
, 0);
3355 if (TREE_CODE (TREE_TYPE (ary
)) == ARRAY_TYPE
)
3356 nelts
= array_type_nelts_top (TREE_TYPE (ary
));
3357 else if (VECTOR_TYPE_P (TREE_TYPE (ary
)))
3358 nelts
= size_int (TYPE_VECTOR_SUBPARTS (TREE_TYPE (ary
)));
3361 nelts
= cxx_eval_constant_expression (ctx
, nelts
, false,
3362 non_constant_p
, overflow_p
);
3363 VERIFY_CONSTANT (nelts
);
3364 gcc_assert (TREE_CODE (nelts
) == INTEGER_CST
3365 && TREE_CODE (TREE_OPERAND (probe
, 1)) == INTEGER_CST
);
3366 if (wi::eq_p (TREE_OPERAND (probe
, 1), nelts
))
3368 diag_array_subscript (ctx
, ary
, TREE_OPERAND (probe
, 1));
3369 *non_constant_p
= true;
3376 probe
= TREE_OPERAND (probe
, 0);
3385 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (target
), type
))
3387 /* For initialization of an empty base, the original target will be
3388 *(base*)this, which the above evaluation resolves to the object
3389 argument, which has the derived type rather than the base type. In
3390 this situation, just evaluate the initializer and return, since
3391 there's no actual data to store. */
3392 gcc_assert (is_empty_class (type
));
3393 return cxx_eval_constant_expression (ctx
, init
, false,
3394 non_constant_p
, overflow_p
);
3397 /* And then find the underlying variable. */
3398 vec
<tree
,va_gc
> *refs
= make_tree_vector();
3399 tree object
= NULL_TREE
;
3400 for (tree probe
= target
; object
== NULL_TREE
; )
3402 switch (TREE_CODE (probe
))
3407 vec_safe_push (refs
, TREE_OPERAND (probe
, 1));
3408 vec_safe_push (refs
, TREE_TYPE (probe
));
3409 probe
= TREE_OPERAND (probe
, 0);
3417 /* And then find/build up our initializer for the path to the subobject
3418 we're initializing. */
3420 if (object
== ctx
->object
&& VAR_P (object
)
3421 && DECL_NAME (object
) && ctx
->call
== NULL
)
3422 /* The variable we're building up an aggregate initializer for is outside
3423 the constant-expression, so don't evaluate the store. We check
3424 DECL_NAME to handle TARGET_EXPR temporaries, which are fair game. */
3426 else if (DECL_P (object
))
3427 valp
= ctx
->values
->get (object
);
3432 /* A constant-expression cannot modify objects from outside the
3433 constant-expression. */
3435 error ("modification of %qE is not a constant expression", object
);
3436 *non_constant_p
= true;
3439 type
= TREE_TYPE (object
);
3440 bool no_zero_init
= true;
3442 vec
<tree
,va_gc
> *ctors
= make_tree_vector ();
3443 while (!refs
->is_empty())
3445 if (*valp
== NULL_TREE
)
3447 *valp
= build_constructor (type
, NULL
);
3448 CONSTRUCTOR_NO_IMPLICIT_ZERO (*valp
) = no_zero_init
;
3450 else if (TREE_CODE (*valp
) == STRING_CST
)
3452 /* An array was initialized with a string constant, and now
3453 we're writing into one of its elements. Explode the
3454 single initialization into a set of element
3456 gcc_assert (TREE_CODE (type
) == ARRAY_TYPE
);
3458 tree string
= *valp
;
3459 tree elt_type
= TREE_TYPE (type
);
3460 unsigned chars_per_elt
= (TYPE_PRECISION (elt_type
)
3461 / TYPE_PRECISION (char_type_node
));
3462 unsigned num_elts
= TREE_STRING_LENGTH (string
) / chars_per_elt
;
3463 tree ary_ctor
= build_constructor (type
, NULL
);
3465 vec_safe_reserve (CONSTRUCTOR_ELTS (ary_ctor
), num_elts
);
3466 for (unsigned ix
= 0; ix
!= num_elts
; ix
++)
3468 constructor_elt elt
=
3470 build_int_cst (size_type_node
, ix
),
3471 extract_string_elt (string
, chars_per_elt
, ix
)
3473 CONSTRUCTOR_ELTS (ary_ctor
)->quick_push (elt
);
3479 /* If the value of object is already zero-initialized, any new ctors for
3480 subobjects will also be zero-initialized. */
3481 no_zero_init
= CONSTRUCTOR_NO_IMPLICIT_ZERO (*valp
);
3483 vec_safe_push (ctors
, *valp
);
3485 enum tree_code code
= TREE_CODE (type
);
3487 tree index
= refs
->pop();
3489 constructor_elt
*cep
= NULL
;
3490 if (code
== ARRAY_TYPE
)
3493 = find_array_ctor_elt (*valp
, index
, /*insert*/true);
3494 gcc_assert (i
>= 0);
3495 cep
= CONSTRUCTOR_ELT (*valp
, i
);
3496 gcc_assert (TREE_CODE (cep
->index
) != RANGE_EXPR
);
3500 gcc_assert (TREE_CODE (index
) == FIELD_DECL
);
3502 /* We must keep the CONSTRUCTOR's ELTS in FIELD order.
3503 Usually we meet initializers in that order, but it is
3504 possible for base types to be placed not in program
3506 tree fields
= TYPE_FIELDS (DECL_CONTEXT (index
));
3507 unsigned HOST_WIDE_INT idx
;
3509 if (code
== UNION_TYPE
&& CONSTRUCTOR_NELTS (*valp
)
3510 && CONSTRUCTOR_ELT (*valp
, 0)->index
!= index
)
3511 /* Changing active member. */
3512 vec_safe_truncate (CONSTRUCTOR_ELTS (*valp
), 0);
3515 vec_safe_iterate (CONSTRUCTOR_ELTS (*valp
), idx
, &cep
);
3516 idx
++, fields
= DECL_CHAIN (fields
))
3518 if (index
== cep
->index
)
3521 /* The field we're initializing must be on the field
3522 list. Look to see if it is present before the
3523 field the current ELT initializes. */
3524 for (; fields
!= cep
->index
; fields
= DECL_CHAIN (fields
))
3525 if (index
== fields
)
3529 /* We fell off the end of the CONSTRUCTOR, so insert a new
3530 entry at the end. */
3533 constructor_elt ce
= { index
, NULL_TREE
};
3535 vec_safe_insert (CONSTRUCTOR_ELTS (*valp
), idx
, ce
);
3536 cep
= CONSTRUCTOR_ELT (*valp
, idx
);
3542 release_tree_vector (refs
);
3544 if (AGGREGATE_TYPE_P (type
) || VECTOR_TYPE_P (type
))
3546 /* Create a new CONSTRUCTOR in case evaluation of the initializer
3547 wants to modify it. */
3548 if (*valp
== NULL_TREE
)
3550 *valp
= build_constructor (type
, NULL
);
3551 CONSTRUCTOR_NO_IMPLICIT_ZERO (*valp
) = no_zero_init
;
3553 else if (TREE_CODE (*valp
) == PTRMEM_CST
)
3554 *valp
= cplus_expand_constant (*valp
);
3555 new_ctx
.ctor
= *valp
;
3556 new_ctx
.object
= target
;
3559 init
= cxx_eval_constant_expression (&new_ctx
, init
, false,
3560 non_constant_p
, overflow_p
);
3561 /* Don't share a CONSTRUCTOR that might be changed later. */
3562 init
= unshare_constructor (init
);
3563 if (target
== object
)
3564 /* The hash table might have moved since the get earlier. */
3565 valp
= ctx
->values
->get (object
);
3567 if (TREE_CODE (init
) == CONSTRUCTOR
)
3569 /* An outer ctx->ctor might be pointing to *valp, so replace
3571 CONSTRUCTOR_ELTS (*valp
) = CONSTRUCTOR_ELTS (init
);
3572 TREE_CONSTANT (*valp
) = TREE_CONSTANT (init
);
3573 TREE_SIDE_EFFECTS (*valp
) = TREE_SIDE_EFFECTS (init
);
3574 CONSTRUCTOR_NO_IMPLICIT_ZERO (*valp
)
3575 = CONSTRUCTOR_NO_IMPLICIT_ZERO (init
);
3580 /* Update TREE_CONSTANT and TREE_SIDE_EFFECTS on enclosing
3581 CONSTRUCTORs, if any. */
3584 bool c
= TREE_CONSTANT (init
);
3585 bool s
= TREE_SIDE_EFFECTS (init
);
3587 FOR_EACH_VEC_SAFE_ELT (ctors
, i
, elt
)
3590 TREE_CONSTANT (elt
) = false;
3592 TREE_SIDE_EFFECTS (elt
) = true;
3594 release_tree_vector (ctors
);
3596 if (*non_constant_p
)
3604 /* Evaluate a ++ or -- expression. */
3607 cxx_eval_increment_expression (const constexpr_ctx
*ctx
, tree t
,
3609 bool *non_constant_p
, bool *overflow_p
)
3611 enum tree_code code
= TREE_CODE (t
);
3612 tree type
= TREE_TYPE (t
);
3613 tree op
= TREE_OPERAND (t
, 0);
3614 tree offset
= TREE_OPERAND (t
, 1);
3615 gcc_assert (TREE_CONSTANT (offset
));
3617 /* The operand as an lvalue. */
3618 op
= cxx_eval_constant_expression (ctx
, op
, true,
3619 non_constant_p
, overflow_p
);
3621 /* The operand as an rvalue. */
3622 tree val
= rvalue (op
);
3623 val
= cxx_eval_constant_expression (ctx
, val
, false,
3624 non_constant_p
, overflow_p
);
3625 /* Don't VERIFY_CONSTANT if this might be dealing with a pointer to
3626 a local array in a constexpr function. */
3627 bool ptr
= POINTER_TYPE_P (TREE_TYPE (val
));
3629 VERIFY_CONSTANT (val
);
3631 /* The modified value. */
3632 bool inc
= (code
== PREINCREMENT_EXPR
|| code
== POSTINCREMENT_EXPR
);
3634 if (POINTER_TYPE_P (type
))
3636 /* The middle end requires pointers to use POINTER_PLUS_EXPR. */
3637 offset
= convert_to_ptrofftype (offset
);
3639 offset
= fold_build1 (NEGATE_EXPR
, TREE_TYPE (offset
), offset
);
3640 mod
= fold_build2 (POINTER_PLUS_EXPR
, type
, val
, offset
);
3643 mod
= fold_build2 (inc
? PLUS_EXPR
: MINUS_EXPR
, type
, val
, offset
);
3645 VERIFY_CONSTANT (mod
);
3647 /* Storing the modified value. */
3648 tree store
= build2 (MODIFY_EXPR
, type
, op
, mod
);
3649 cxx_eval_constant_expression (ctx
, store
,
3650 true, non_constant_p
, overflow_p
);
3652 /* And the value of the expression. */
3653 if (code
== PREINCREMENT_EXPR
|| code
== PREDECREMENT_EXPR
)
3655 /* Prefix ops are lvalues. */
3659 /* But we optimize when the caller wants an rvalue. */
3663 /* Postfix ops are rvalues. */
3667 /* Predicates for the meaning of *jump_target. */
3670 returns (tree
*jump_target
)
3673 && TREE_CODE (*jump_target
) == RETURN_EXPR
;
3677 breaks (tree
*jump_target
)
3680 && ((TREE_CODE (*jump_target
) == LABEL_DECL
3681 && LABEL_DECL_BREAK (*jump_target
))
3682 || TREE_CODE (*jump_target
) == EXIT_EXPR
);
3686 continues (tree
*jump_target
)
3689 && TREE_CODE (*jump_target
) == LABEL_DECL
3690 && LABEL_DECL_CONTINUE (*jump_target
);
3694 switches (tree
*jump_target
)
3697 && TREE_CODE (*jump_target
) == INTEGER_CST
;
3700 /* Subroutine of cxx_eval_statement_list. Determine whether the statement
3701 STMT matches *jump_target. If we're looking for a case label and we see
3702 the default label, note it in ctx->css_state. */
3705 label_matches (const constexpr_ctx
*ctx
, tree
*jump_target
, tree stmt
)
3707 switch (TREE_CODE (*jump_target
))
3710 if (TREE_CODE (stmt
) == LABEL_EXPR
3711 && LABEL_EXPR_LABEL (stmt
) == *jump_target
)
3716 if (TREE_CODE (stmt
) == CASE_LABEL_EXPR
)
3718 gcc_assert (ctx
->css_state
!= NULL
);
3719 if (!CASE_LOW (stmt
))
3721 /* default: should appear just once in a SWITCH_EXPR
3722 body (excluding nested SWITCH_EXPR). */
3723 gcc_assert (*ctx
->css_state
!= css_default_seen
);
3724 /* When evaluating SWITCH_EXPR body for the second time,
3725 return true for the default: label. */
3726 if (*ctx
->css_state
== css_default_processing
)
3728 *ctx
->css_state
= css_default_seen
;
3730 else if (CASE_HIGH (stmt
))
3732 if (tree_int_cst_le (CASE_LOW (stmt
), *jump_target
)
3733 && tree_int_cst_le (*jump_target
, CASE_HIGH (stmt
)))
3736 else if (tree_int_cst_equal (*jump_target
, CASE_LOW (stmt
)))
3747 /* Evaluate a STATEMENT_LIST for side-effects. Handles various jump
3748 semantics, for switch, break, continue, and return. */
3751 cxx_eval_statement_list (const constexpr_ctx
*ctx
, tree t
,
3752 bool *non_constant_p
, bool *overflow_p
,
3755 tree_stmt_iterator i
;
3757 /* In a statement-expression we want to return the last value.
3758 For empty statement expression return void_node. */
3762 local_target
= NULL_TREE
;
3763 jump_target
= &local_target
;
3765 for (i
= tsi_start (t
); !tsi_end_p (i
); tsi_next (&i
))
3767 tree stmt
= tsi_stmt (i
);
3768 r
= cxx_eval_constant_expression (ctx
, stmt
, false,
3769 non_constant_p
, overflow_p
,
3771 if (*non_constant_p
)
3773 if (returns (jump_target
) || breaks (jump_target
))
3779 /* Evaluate a LOOP_EXPR for side-effects. Handles break and return
3780 semantics; continue semantics are covered by cxx_eval_statement_list. */
3783 cxx_eval_loop_expr (const constexpr_ctx
*ctx
, tree t
,
3784 bool *non_constant_p
, bool *overflow_p
,
3787 constexpr_ctx new_ctx
= *ctx
;
3789 tree body
= TREE_OPERAND (t
, 0);
3793 hash_set
<tree
> save_exprs
;
3794 new_ctx
.save_exprs
= &save_exprs
;
3796 cxx_eval_constant_expression (&new_ctx
, body
, /*lval*/false,
3797 non_constant_p
, overflow_p
, jump_target
);
3799 /* Forget saved values of SAVE_EXPRs. */
3800 for (hash_set
<tree
>::iterator iter
= save_exprs
.begin();
3801 iter
!= save_exprs
.end(); ++iter
)
3802 new_ctx
.values
->remove (*iter
);
3803 if (++count
>= constexpr_loop_limit
)
3806 error_at (EXPR_LOC_OR_LOC (t
, input_location
),
3807 "constexpr loop iteration count exceeds limit of %d "
3808 "(use -fconstexpr-loop-limit= to increase the limit)",
3809 constexpr_loop_limit
);
3810 *non_constant_p
= true;
3814 while (!returns (jump_target
)
3815 && !breaks (jump_target
)
3816 && !switches (jump_target
)
3817 && !*non_constant_p
);
3819 if (breaks (jump_target
))
3820 *jump_target
= NULL_TREE
;
3825 /* Evaluate a SWITCH_EXPR for side-effects. Handles switch and break jump
3829 cxx_eval_switch_expr (const constexpr_ctx
*ctx
, tree t
,
3830 bool *non_constant_p
, bool *overflow_p
,
3833 tree cond
= TREE_OPERAND (t
, 0);
3834 cond
= cxx_eval_constant_expression (ctx
, cond
, false,
3835 non_constant_p
, overflow_p
);
3836 VERIFY_CONSTANT (cond
);
3837 *jump_target
= cond
;
3839 tree body
= TREE_OPERAND (t
, 1);
3840 constexpr_ctx new_ctx
= *ctx
;
3841 constexpr_switch_state css
= css_default_not_seen
;
3842 new_ctx
.css_state
= &css
;
3843 cxx_eval_constant_expression (&new_ctx
, body
, false,
3844 non_constant_p
, overflow_p
, jump_target
);
3845 if (switches (jump_target
) && css
== css_default_seen
)
3847 /* If the SWITCH_EXPR body has default: label, process it once again,
3848 this time instructing label_matches to return true for default:
3849 label on switches (jump_target). */
3850 css
= css_default_processing
;
3851 cxx_eval_constant_expression (&new_ctx
, body
, false,
3852 non_constant_p
, overflow_p
, jump_target
);
3854 if (breaks (jump_target
) || switches (jump_target
))
3855 *jump_target
= NULL_TREE
;
3859 /* Find the object of TYPE under initialization in CTX. */
3862 lookup_placeholder (const constexpr_ctx
*ctx
, bool lval
, tree type
)
3867 /* We could use ctx->object unconditionally, but using ctx->ctor when we
3868 can is a minor optimization. */
3869 if (!lval
&& ctx
->ctor
&& same_type_p (TREE_TYPE (ctx
->ctor
), type
))
3875 /* Since an object cannot have a field of its own type, we can search outward
3876 from ctx->object to find the unique containing object of TYPE. */
3877 tree ob
= ctx
->object
;
3880 if (same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (ob
), type
))
3882 if (handled_component_p (ob
))
3883 ob
= TREE_OPERAND (ob
, 0);
3891 /* Attempt to reduce the expression T to a constant value.
3892 On failure, issue diagnostic and return error_mark_node. */
3893 /* FIXME unify with c_fully_fold */
3894 /* FIXME overflow_p is too global */
3897 cxx_eval_constant_expression (const constexpr_ctx
*ctx
, tree t
,
3899 bool *non_constant_p
, bool *overflow_p
,
3902 constexpr_ctx new_ctx
;
3905 if (jump_target
&& *jump_target
)
3907 /* If we are jumping, ignore all statements/expressions except those
3908 that could have LABEL_EXPR or CASE_LABEL_EXPR in their bodies. */
3909 switch (TREE_CODE (t
))
3912 case STATEMENT_LIST
:
3917 case CASE_LABEL_EXPR
:
3918 if (label_matches (ctx
, jump_target
, t
))
3920 *jump_target
= NULL_TREE
;
3926 if (t
== error_mark_node
)
3928 *non_constant_p
= true;
3931 if (CONSTANT_CLASS_P (t
))
3933 if (TREE_OVERFLOW (t
))
3936 permerror (input_location
, "overflow in constant expression");
3937 if (!flag_permissive
|| ctx
->quiet
)
3941 if (TREE_CODE (t
) == INTEGER_CST
3942 && TREE_CODE (TREE_TYPE (t
)) == POINTER_TYPE
3943 && !integer_zerop (t
))
3946 error ("value %qE of type %qT is not a constant expression",
3948 *non_constant_p
= true;
3954 tree_code tcode
= TREE_CODE (t
);
3960 /* We ask for an rvalue for the RESULT_DECL when indirecting
3961 through an invisible reference, or in named return value
3963 return (*ctx
->values
->get (t
));
3966 if (DECL_HAS_VALUE_EXPR_P (t
))
3967 return cxx_eval_constant_expression (ctx
, DECL_VALUE_EXPR (t
),
3968 lval
, non_constant_p
, overflow_p
);
3971 /* We used to not check lval for CONST_DECL, but darwin.c uses
3972 CONST_DECL for aggregate constants. */
3975 if (COMPLETE_TYPE_P (TREE_TYPE (t
))
3976 && is_really_empty_class (TREE_TYPE (t
)))
3978 /* If the class is empty, we aren't actually loading anything. */
3979 r
= build_constructor (TREE_TYPE (t
), NULL
);
3980 TREE_CONSTANT (r
) = true;
3982 else if (ctx
->strict
)
3983 r
= decl_really_constant_value (t
);
3985 r
= decl_constant_value (t
);
3986 if (TREE_CODE (r
) == TARGET_EXPR
3987 && TREE_CODE (TARGET_EXPR_INITIAL (r
)) == CONSTRUCTOR
)
3988 r
= TARGET_EXPR_INITIAL (r
);
3990 if (tree
*p
= ctx
->values
->get (r
))
3991 if (*p
!= NULL_TREE
)
3996 non_const_var_error (r
);
3997 *non_constant_p
= true;
4005 case CASE_LABEL_EXPR
:
4010 if (lval
&& TREE_CODE (TREE_TYPE (t
)) != REFERENCE_TYPE
)
4012 else if (tree
*p
= ctx
->values
->get (r
))
4015 /* Defer in case this is only used for its type. */;
4016 else if (TREE_CODE (TREE_TYPE (t
)) == REFERENCE_TYPE
)
4017 /* Defer, there's no lvalue->rvalue conversion. */;
4018 else if (COMPLETE_TYPE_P (TREE_TYPE (t
))
4019 && is_really_empty_class (TREE_TYPE (t
)))
4021 /* If the class is empty, we aren't actually loading anything. */
4022 r
= build_constructor (TREE_TYPE (t
), NULL
);
4023 TREE_CONSTANT (r
) = true;
4028 error ("%qE is not a constant expression", t
);
4029 *non_constant_p
= true;
4034 case AGGR_INIT_EXPR
:
4035 r
= cxx_eval_call_expression (ctx
, t
, lval
,
4036 non_constant_p
, overflow_p
);
4041 r
= DECL_EXPR_DECL (t
);
4042 if (AGGREGATE_TYPE_P (TREE_TYPE (r
))
4043 || VECTOR_TYPE_P (TREE_TYPE (r
)))
4047 new_ctx
.ctor
= build_constructor (TREE_TYPE (r
), NULL
);
4048 CONSTRUCTOR_NO_IMPLICIT_ZERO (new_ctx
.ctor
) = true;
4049 new_ctx
.values
->put (r
, new_ctx
.ctor
);
4053 if (tree init
= DECL_INITIAL (r
))
4055 init
= cxx_eval_constant_expression (ctx
, init
,
4057 non_constant_p
, overflow_p
);
4058 /* Don't share a CONSTRUCTOR that might be changed. */
4059 init
= unshare_constructor (init
);
4060 ctx
->values
->put (r
, init
);
4062 else if (ctx
== &new_ctx
)
4063 /* We gave it a CONSTRUCTOR above. */;
4065 ctx
->values
->put (r
, NULL_TREE
);
4070 if (!literal_type_p (TREE_TYPE (t
)))
4074 error ("temporary of non-literal type %qT in a "
4075 "constant expression", TREE_TYPE (t
));
4076 explain_non_literal_class (TREE_TYPE (t
));
4078 *non_constant_p
= true;
4081 if ((AGGREGATE_TYPE_P (TREE_TYPE (t
)) || VECTOR_TYPE_P (TREE_TYPE (t
))))
4083 /* We're being expanded without an explicit target, so start
4084 initializing a new object; expansion with an explicit target
4085 strips the TARGET_EXPR before we get here. */
4087 new_ctx
.ctor
= build_constructor (TREE_TYPE (t
), NULL
);
4088 CONSTRUCTOR_NO_IMPLICIT_ZERO (new_ctx
.ctor
) = true;
4089 new_ctx
.object
= TARGET_EXPR_SLOT (t
);
4090 ctx
->values
->put (new_ctx
.object
, new_ctx
.ctor
);
4093 /* Pass false for 'lval' because this indicates
4094 initialization of a temporary. */
4095 r
= cxx_eval_constant_expression (ctx
, TREE_OPERAND (t
, 1),
4097 non_constant_p
, overflow_p
);
4098 if (!*non_constant_p
)
4099 /* Adjust the type of the result to the type of the temporary. */
4100 r
= adjust_temp_type (TREE_TYPE (t
), r
);
4103 tree slot
= TARGET_EXPR_SLOT (t
);
4104 r
= unshare_constructor (r
);
4105 ctx
->values
->put (slot
, r
);
4112 gcc_assert (jump_target
== NULL
|| *jump_target
== NULL_TREE
);
4113 r
= cxx_eval_store_expression (ctx
, t
, lval
,
4114 non_constant_p
, overflow_p
);
4118 r
= cxx_eval_constant_expression (ctx
, TREE_OPERAND (t
, 1),
4120 non_constant_p
, overflow_p
);
4124 if (TREE_OPERAND (t
, 0) != NULL_TREE
)
4125 r
= cxx_eval_constant_expression (ctx
, TREE_OPERAND (t
, 0),
4127 non_constant_p
, overflow_p
);
4132 /* Avoid evaluating a SAVE_EXPR more than once. */
4133 if (tree
*p
= ctx
->values
->get (t
))
4137 r
= cxx_eval_constant_expression (ctx
, TREE_OPERAND (t
, 0), false,
4138 non_constant_p
, overflow_p
);
4139 ctx
->values
->put (t
, r
);
4140 if (ctx
->save_exprs
)
4141 ctx
->save_exprs
->add (t
);
4145 case NON_LVALUE_EXPR
:
4146 case TRY_CATCH_EXPR
:
4148 case CLEANUP_POINT_EXPR
:
4149 case MUST_NOT_THROW_EXPR
:
4152 r
= cxx_eval_constant_expression (ctx
, TREE_OPERAND (t
, 0),
4154 non_constant_p
, overflow_p
,
4158 case TRY_FINALLY_EXPR
:
4159 r
= cxx_eval_constant_expression (ctx
, TREE_OPERAND (t
, 0), lval
,
4160 non_constant_p
, overflow_p
,
4162 if (!*non_constant_p
)
4163 /* Also evaluate the cleanup. */
4164 cxx_eval_constant_expression (ctx
, TREE_OPERAND (t
, 1), true,
4165 non_constant_p
, overflow_p
,
4169 /* These differ from cxx_eval_unary_expression in that this doesn't
4170 check for a constant operand or result; an address can be
4171 constant without its operand being, and vice versa. */
4174 r
= cxx_eval_indirect_ref (ctx
, t
, lval
,
4175 non_constant_p
, overflow_p
);
4180 tree oldop
= TREE_OPERAND (t
, 0);
4181 tree op
= cxx_eval_constant_expression (ctx
, oldop
,
4183 non_constant_p
, overflow_p
);
4184 /* Don't VERIFY_CONSTANT here. */
4185 if (*non_constant_p
)
4187 gcc_checking_assert (TREE_CODE (op
) != CONSTRUCTOR
);
4188 /* This function does more aggressive folding than fold itself. */
4189 r
= build_fold_addr_expr_with_type (op
, TREE_TYPE (t
));
4190 if (TREE_CODE (r
) == ADDR_EXPR
&& TREE_OPERAND (r
, 0) == oldop
)
4199 r
= cxx_eval_constant_expression (ctx
, TREE_OPERAND (t
, 0), lval
,
4200 non_constant_p
, overflow_p
);
4201 if (r
== error_mark_node
)
4203 else if (r
== TREE_OPERAND (t
, 0))
4206 r
= fold_build1 (TREE_CODE (t
), TREE_TYPE (t
), r
);
4211 case FIX_TRUNC_EXPR
:
4216 case TRUTH_NOT_EXPR
:
4217 case FIXED_CONVERT_EXPR
:
4218 r
= cxx_eval_unary_expression (ctx
, t
, lval
,
4219 non_constant_p
, overflow_p
);
4223 r
= fold_sizeof_expr (t
);
4224 VERIFY_CONSTANT (r
);
4229 /* check_return_expr sometimes wraps a TARGET_EXPR in a
4230 COMPOUND_EXPR; don't get confused. Also handle EMPTY_CLASS_EXPR
4231 introduced by build_call_a. */
4232 tree op0
= TREE_OPERAND (t
, 0);
4233 tree op1
= TREE_OPERAND (t
, 1);
4235 if ((TREE_CODE (op0
) == TARGET_EXPR
&& op1
== TARGET_EXPR_SLOT (op0
))
4236 || TREE_CODE (op1
) == EMPTY_CLASS_EXPR
)
4237 r
= cxx_eval_constant_expression (ctx
, op0
,
4238 lval
, non_constant_p
, overflow_p
,
4242 /* Check that the LHS is constant and then discard it. */
4243 cxx_eval_constant_expression (ctx
, op0
,
4244 true, non_constant_p
, overflow_p
,
4246 if (*non_constant_p
)
4248 op1
= TREE_OPERAND (t
, 1);
4249 r
= cxx_eval_constant_expression (ctx
, op1
,
4250 lval
, non_constant_p
, overflow_p
,
4256 case POINTER_PLUS_EXPR
:
4260 case TRUNC_DIV_EXPR
:
4262 case FLOOR_DIV_EXPR
:
4263 case ROUND_DIV_EXPR
:
4264 case TRUNC_MOD_EXPR
:
4266 case ROUND_MOD_EXPR
:
4268 case EXACT_DIV_EXPR
:
4278 case TRUTH_XOR_EXPR
:
4285 case UNORDERED_EXPR
:
4295 r
= cxx_eval_binary_expression (ctx
, t
, lval
,
4296 non_constant_p
, overflow_p
);
4299 /* fold can introduce non-IF versions of these; still treat them as
4300 short-circuiting. */
4301 case TRUTH_AND_EXPR
:
4302 case TRUTH_ANDIF_EXPR
:
4303 r
= cxx_eval_logical_expression (ctx
, t
, boolean_false_node
,
4306 non_constant_p
, overflow_p
);
4310 case TRUTH_ORIF_EXPR
:
4311 r
= cxx_eval_logical_expression (ctx
, t
, boolean_true_node
,
4314 non_constant_p
, overflow_p
);
4318 r
= cxx_eval_array_reference (ctx
, t
, lval
,
4319 non_constant_p
, overflow_p
);
4323 if (is_overloaded_fn (t
))
4325 /* We can only get here in checking mode via
4326 build_non_dependent_expr, because any expression that
4327 calls or takes the address of the function will have
4328 pulled a FUNCTION_DECL out of the COMPONENT_REF. */
4329 gcc_checking_assert (ctx
->quiet
|| errorcount
);
4330 *non_constant_p
= true;
4333 r
= cxx_eval_component_reference (ctx
, t
, lval
,
4334 non_constant_p
, overflow_p
);
4338 r
= cxx_eval_bit_field_ref (ctx
, t
, lval
,
4339 non_constant_p
, overflow_p
);
4343 if (jump_target
&& *jump_target
)
4345 /* When jumping to a label, the label might be either in the
4346 then or else blocks, so process then block first in skipping
4347 mode first, and if we are still in the skipping mode at its end,
4348 process the else block too. */
4349 r
= cxx_eval_constant_expression (ctx
, TREE_OPERAND (t
, 1),
4350 lval
, non_constant_p
, overflow_p
,
4353 r
= cxx_eval_constant_expression (ctx
, TREE_OPERAND (t
, 2),
4354 lval
, non_constant_p
, overflow_p
,
4360 r
= cxx_eval_conditional_expression (ctx
, t
, lval
,
4361 non_constant_p
, overflow_p
,
4366 if (TREE_CONSTANT (t
))
4368 /* Don't re-process a constant CONSTRUCTOR, but do fold it to
4369 VECTOR_CST if applicable. */
4370 /* FIXME after GCC 6 branches, make the verify unconditional. */
4372 verify_constructor_flags (t
);
4374 recompute_constructor_flags (t
);
4375 if (TREE_CONSTANT (t
))
4378 r
= cxx_eval_bare_aggregate (ctx
, t
, lval
,
4379 non_constant_p
, overflow_p
);
4383 /* We can get this in a defaulted constructor for a class with a
4384 non-static data member of array type. Either the initializer will
4385 be NULL, meaning default-initialization, or it will be an lvalue
4386 or xvalue of the same type, meaning direct-initialization from the
4387 corresponding member. */
4388 r
= cxx_eval_vec_init (ctx
, t
, lval
,
4389 non_constant_p
, overflow_p
);
4394 r
= cxx_eval_trinary_expression (ctx
, t
, lval
,
4395 non_constant_p
, overflow_p
);
4399 case VIEW_CONVERT_EXPR
:
4401 case UNARY_PLUS_EXPR
:
4403 tree oldop
= TREE_OPERAND (t
, 0);
4405 tree op
= cxx_eval_constant_expression (ctx
, oldop
,
4407 non_constant_p
, overflow_p
);
4408 if (*non_constant_p
)
4410 tree type
= TREE_TYPE (t
);
4411 if (TREE_CODE (op
) == PTRMEM_CST
4412 && !TYPE_PTRMEM_P (type
))
4413 op
= cplus_expand_constant (op
);
4414 if (TREE_CODE (op
) == PTRMEM_CST
&& tcode
== NOP_EXPR
)
4416 if (same_type_ignoring_top_level_qualifiers_p (type
,
4418 || can_convert_qual (type
, op
))
4419 return cp_fold_convert (type
, op
);
4423 error_at (EXPR_LOC_OR_LOC (t
, input_location
),
4424 "a reinterpret_cast is not a constant expression");
4425 *non_constant_p
= true;
4430 if (POINTER_TYPE_P (type
) && TREE_CODE (op
) == INTEGER_CST
)
4432 if (integer_zerop (op
))
4434 if (TREE_CODE (type
) == REFERENCE_TYPE
)
4437 error_at (EXPR_LOC_OR_LOC (t
, input_location
),
4438 "dereferencing a null pointer");
4439 *non_constant_p
= true;
4442 else if (TREE_CODE (TREE_TYPE (op
)) == POINTER_TYPE
)
4444 tree from
= TREE_TYPE (op
);
4446 if (!can_convert (type
, from
, tf_none
))
4449 error_at (EXPR_LOC_OR_LOC (t
, input_location
),
4450 "conversion of %qT null pointer to %qT "
4451 "is not a constant expression",
4453 *non_constant_p
= true;
4460 /* This detects for example:
4461 reinterpret_cast<void*>(sizeof 0)
4464 error_at (EXPR_LOC_OR_LOC (t
, input_location
),
4465 "%<reinterpret_cast<%T>(%E)%> is not "
4466 "a constant expression",
4468 *non_constant_p
= true;
4472 if (op
== oldop
&& tcode
!= UNARY_PLUS_EXPR
)
4473 /* We didn't fold at the top so we could check for ptr-int
4476 if (tcode
== UNARY_PLUS_EXPR
)
4477 r
= fold_convert (TREE_TYPE (t
), op
);
4479 r
= fold_build1 (tcode
, type
, op
);
4480 /* Conversion of an out-of-range value has implementation-defined
4481 behavior; the language considers it different from arithmetic
4482 overflow, which is undefined. */
4483 if (TREE_OVERFLOW_P (r
) && !TREE_OVERFLOW_P (op
))
4484 TREE_OVERFLOW (r
) = false;
4488 case EMPTY_CLASS_EXPR
:
4489 /* This is good enough for a function argument that might not get
4490 used, and they can't do anything with it, so just return it. */
4493 case STATEMENT_LIST
:
4495 new_ctx
.ctor
= new_ctx
.object
= NULL_TREE
;
4496 return cxx_eval_statement_list (&new_ctx
, t
,
4497 non_constant_p
, overflow_p
, jump_target
);
4500 return cxx_eval_constant_expression (ctx
, BIND_EXPR_BODY (t
),
4502 non_constant_p
, overflow_p
,
4505 case PREINCREMENT_EXPR
:
4506 case POSTINCREMENT_EXPR
:
4507 case PREDECREMENT_EXPR
:
4508 case POSTDECREMENT_EXPR
:
4509 return cxx_eval_increment_expression (ctx
, t
,
4510 lval
, non_constant_p
, overflow_p
);
4516 case VEC_DELETE_EXPR
:
4519 /* GCC internal stuff. */
4522 case NON_DEPENDENT_EXPR
:
4526 error_at (EXPR_LOC_OR_LOC (t
, input_location
),
4527 "expression %qE is not a constant expression", t
);
4528 *non_constant_p
= true;
4531 case PLACEHOLDER_EXPR
:
4532 /* Use of the value or address of the current object. */
4533 if (tree ctor
= lookup_placeholder (ctx
, lval
, TREE_TYPE (t
)))
4534 return cxx_eval_constant_expression (ctx
, ctor
, lval
,
4535 non_constant_p
, overflow_p
);
4536 /* A placeholder without a referent. We can get here when
4537 checking whether NSDMIs are noexcept, or in massage_init_elt;
4538 just say it's non-constant for now. */
4539 gcc_assert (ctx
->quiet
);
4540 *non_constant_p
= true;
4545 tree cond
= TREE_OPERAND (t
, 0);
4546 cond
= cxx_eval_constant_expression (ctx
, cond
, /*lval*/false,
4547 non_constant_p
, overflow_p
);
4548 VERIFY_CONSTANT (cond
);
4549 if (integer_nonzerop (cond
))
4555 *jump_target
= TREE_OPERAND (t
, 0);
4556 gcc_assert (breaks (jump_target
) || continues (jump_target
));
4560 cxx_eval_loop_expr (ctx
, t
,
4561 non_constant_p
, overflow_p
, jump_target
);
4565 cxx_eval_switch_expr (ctx
, t
,
4566 non_constant_p
, overflow_p
, jump_target
);
4570 /* It's possible to get a requires-expression in a constant
4571 expression. For example:
4573 template<typename T> concept bool C() {
4574 return requires (T t) { t; };
4577 template<typename T> requires !C<T>() void f(T);
4579 Normalization leaves f with the associated constraint
4580 '!requires (T t) { ... }' which is not transformed into
4582 if (!processing_template_decl
)
4583 return evaluate_constraint_expression (t
, NULL_TREE
);
4585 *non_constant_p
= true;
4589 gcc_assert (tree_to_uhwi (TREE_OPERAND (t
, 1)) == annot_expr_ivdep_kind
);
4590 r
= cxx_eval_constant_expression (ctx
, TREE_OPERAND (t
, 0),
4592 non_constant_p
, overflow_p
,
4597 if (STATEMENT_CODE_P (TREE_CODE (t
)))
4599 /* This function doesn't know how to deal with pre-genericize
4600 statements; this can only happen with statement-expressions,
4601 so for now just fail. */
4603 error_at (EXPR_LOCATION (t
),
4604 "statement is not a constant expression");
4607 internal_error ("unexpected expression %qE of kind %s", t
,
4608 get_tree_code_name (TREE_CODE (t
)));
4609 *non_constant_p
= true;
4613 if (r
== error_mark_node
)
4614 *non_constant_p
= true;
4616 if (*non_constant_p
)
4623 cxx_eval_outermost_constant_expr (tree t
, bool allow_non_constant
,
4624 bool strict
= true, tree object
= NULL_TREE
)
4626 auto_timevar
time (TV_CONSTEXPR
);
4628 bool non_constant_p
= false;
4629 bool overflow_p
= false;
4630 hash_map
<tree
,tree
> map
;
4632 constexpr_ctx ctx
= { NULL
, &map
, NULL
, NULL
, NULL
, NULL
,
4633 allow_non_constant
, strict
};
4635 tree type
= initialized_type (t
);
4637 if (AGGREGATE_TYPE_P (type
) || VECTOR_TYPE_P (type
))
4639 /* In C++14 an NSDMI can participate in aggregate initialization,
4640 and can refer to the address of the object being initialized, so
4641 we need to pass in the relevant VAR_DECL if we want to do the
4642 evaluation in a single pass. The evaluation will dynamically
4643 update ctx.values for the VAR_DECL. We use the same strategy
4644 for C++11 constexpr constructors that refer to the object being
4646 ctx
.ctor
= build_constructor (type
, NULL
);
4647 CONSTRUCTOR_NO_IMPLICIT_ZERO (ctx
.ctor
) = true;
4650 if (TREE_CODE (t
) == TARGET_EXPR
)
4651 object
= TARGET_EXPR_SLOT (t
);
4652 else if (TREE_CODE (t
) == AGGR_INIT_EXPR
)
4653 object
= AGGR_INIT_EXPR_SLOT (t
);
4655 ctx
.object
= object
;
4657 gcc_assert (same_type_ignoring_top_level_qualifiers_p
4658 (type
, TREE_TYPE (object
)));
4659 if (object
&& DECL_P (object
))
4660 map
.put (object
, ctx
.ctor
);
4661 if (TREE_CODE (r
) == TARGET_EXPR
)
4662 /* Avoid creating another CONSTRUCTOR when we expand the
4664 r
= TARGET_EXPR_INITIAL (r
);
4667 r
= cxx_eval_constant_expression (&ctx
, r
,
4668 false, &non_constant_p
, &overflow_p
);
4670 verify_constant (r
, allow_non_constant
, &non_constant_p
, &overflow_p
);
4672 /* Mutable logic is a bit tricky: we want to allow initialization of
4673 constexpr variables with mutable members, but we can't copy those
4674 members to another constexpr variable. */
4675 if (TREE_CODE (r
) == CONSTRUCTOR
4676 && CONSTRUCTOR_MUTABLE_POISON (r
))
4678 if (!allow_non_constant
)
4679 error ("%qE is not a constant expression because it refers to "
4680 "mutable subobjects of %qT", t
, type
);
4681 non_constant_p
= true;
4684 if (TREE_CODE (r
) == CONSTRUCTOR
4685 && CONSTRUCTOR_NO_IMPLICIT_ZERO (r
))
4687 if (!allow_non_constant
)
4688 error ("%qE is not a constant expression because it refers to "
4689 "an incompletely initialized variable", t
);
4690 TREE_CONSTANT (r
) = false;
4691 non_constant_p
= true;
4694 /* Technically we should check this for all subexpressions, but that
4695 runs into problems with our internal representation of pointer
4696 subtraction and the 5.19 rules are still in flux. */
4697 if (CONVERT_EXPR_CODE_P (TREE_CODE (r
))
4698 && ARITHMETIC_TYPE_P (TREE_TYPE (r
))
4699 && TREE_CODE (TREE_OPERAND (r
, 0)) == ADDR_EXPR
)
4701 if (!allow_non_constant
)
4702 error ("conversion from pointer type %qT "
4703 "to arithmetic type %qT in a constant expression",
4704 TREE_TYPE (TREE_OPERAND (r
, 0)), TREE_TYPE (r
));
4705 non_constant_p
= true;
4708 if (!non_constant_p
&& overflow_p
)
4709 non_constant_p
= true;
4711 /* Unshare the result unless it's a CONSTRUCTOR in which case it's already
4713 bool should_unshare
= true;
4714 if (r
== t
|| TREE_CODE (r
) == CONSTRUCTOR
)
4715 should_unshare
= false;
4717 if (non_constant_p
&& !allow_non_constant
)
4718 return error_mark_node
;
4719 else if (non_constant_p
&& TREE_CONSTANT (r
))
4721 /* This isn't actually constant, so unset TREE_CONSTANT. */
4724 else if (TREE_CODE (r
) == CONSTRUCTOR
)
4725 r
= build1 (VIEW_CONVERT_EXPR
, TREE_TYPE (r
), r
);
4727 r
= build_nop (TREE_TYPE (r
), r
);
4728 TREE_CONSTANT (r
) = false;
4730 else if (non_constant_p
|| r
== t
)
4734 r
= unshare_expr (r
);
4736 if (TREE_CODE (r
) == CONSTRUCTOR
&& CLASS_TYPE_P (TREE_TYPE (r
)))
4738 if (TREE_CODE (t
) == TARGET_EXPR
4739 && TARGET_EXPR_INITIAL (t
) == r
)
4743 r
= get_target_expr (r
);
4744 TREE_CONSTANT (r
) = true;
4752 /* Returns true if T is a valid subexpression of a constant expression,
4753 even if it isn't itself a constant expression. */
4756 is_sub_constant_expr (tree t
)
4758 bool non_constant_p
= false;
4759 bool overflow_p
= false;
4760 hash_map
<tree
, tree
> map
;
4762 constexpr_ctx ctx
= { NULL
, &map
, NULL
, NULL
, NULL
, NULL
, true, true };
4764 cxx_eval_constant_expression (&ctx
, t
, false, &non_constant_p
,
4766 return !non_constant_p
&& !overflow_p
;
4769 /* If T represents a constant expression returns its reduced value.
4770 Otherwise return error_mark_node. If T is dependent, then
4774 cxx_constant_value (tree t
, tree decl
)
4776 return cxx_eval_outermost_constant_expr (t
, false, true, decl
);
4779 /* Helper routine for fold_simple function. Either return simplified
4780 expression T, otherwise NULL_TREE.
4781 In contrast to cp_fully_fold, and to maybe_constant_value, we try to fold
4782 even if we are within template-declaration. So be careful on call, as in
4783 such case types can be undefined. */
4786 fold_simple_1 (tree t
)
4789 enum tree_code code
= TREE_CODE (t
);
4801 return fold_sizeof_expr (t
);
4809 case TRUTH_NOT_EXPR
:
4811 case VIEW_CONVERT_EXPR
:
4814 case FIX_TRUNC_EXPR
:
4815 case FIXED_CONVERT_EXPR
:
4816 case ADDR_SPACE_CONVERT_EXPR
:
4818 op1
= TREE_OPERAND (t
, 0);
4820 t
= const_unop (code
, TREE_TYPE (t
), op1
);
4824 if (CONVERT_EXPR_CODE_P (code
)
4825 && TREE_OVERFLOW_P (t
) && !TREE_OVERFLOW_P (op1
))
4826 TREE_OVERFLOW (t
) = false;
4834 /* If T is a simple constant expression, returns its simplified value.
4835 Otherwise returns T. In contrast to maybe_constant_value do we
4836 simplify only few operations on constant-expressions, and we don't
4837 try to simplify constexpressions. */
4840 fold_simple (tree t
)
4843 if (processing_template_decl
)
4846 r
= fold_simple_1 (t
);
4853 /* If T is a constant expression, returns its reduced value.
4854 Otherwise, if T does not have TREE_CONSTANT set, returns T.
4855 Otherwise, returns a version of T without TREE_CONSTANT. */
4857 static GTY((deletable
)) hash_map
<tree
, tree
> *cv_cache
;
4860 maybe_constant_value (tree t
, tree decl
)
4864 if (!potential_nondependent_constant_expression (t
))
4866 if (TREE_OVERFLOW_P (t
))
4868 t
= build_nop (TREE_TYPE (t
), t
);
4869 TREE_CONSTANT (t
) = false;
4873 else if (CONSTANT_CLASS_P (t
))
4874 /* No caching or evaluation needed. */
4877 if (cv_cache
== NULL
)
4878 cv_cache
= hash_map
<tree
, tree
>::create_ggc (101);
4879 if (tree
*cached
= cv_cache
->get (t
))
4882 r
= cxx_eval_outermost_constant_expr (t
, true, true, decl
);
4883 gcc_checking_assert (r
== t
4884 || CONVERT_EXPR_P (t
)
4885 || TREE_CODE (t
) == VIEW_CONVERT_EXPR
4886 || (TREE_CONSTANT (t
) && !TREE_CONSTANT (r
))
4887 || !cp_tree_equal (r
, t
));
4888 cv_cache
->put (t
, r
);
4892 /* Dispose of the whole CV_CACHE. */
4895 clear_cv_cache (void)
4897 if (cv_cache
!= NULL
)
4901 /* Dispose of the whole CV_CACHE and FOLD_CACHE. */
4904 clear_cv_and_fold_caches (void)
4907 clear_fold_cache ();
4910 /* Like maybe_constant_value but first fully instantiate the argument.
4912 Note: this is equivalent to instantiate_non_dependent_expr_sfinae
4913 (t, tf_none) followed by maybe_constant_value but is more efficient,
4914 because calls instantiation_dependent_expression_p and
4915 potential_constant_expression at most once. */
4918 fold_non_dependent_expr (tree t
)
4923 /* If we're in a template, but T isn't value dependent, simplify
4924 it. We're supposed to treat:
4926 template <typename T> void f(T[1 + 1]);
4927 template <typename T> void f(T[2]);
4929 as two declarations of the same function, for example. */
4930 if (processing_template_decl
)
4932 if (potential_nondependent_constant_expression (t
))
4934 processing_template_decl_sentinel s
;
4935 t
= instantiate_non_dependent_expr_internal (t
, tf_none
);
4937 if (type_unknown_p (t
)
4938 || BRACE_ENCLOSED_INITIALIZER_P (t
))
4940 if (TREE_OVERFLOW_P (t
))
4942 t
= build_nop (TREE_TYPE (t
), t
);
4943 TREE_CONSTANT (t
) = false;
4948 tree r
= cxx_eval_outermost_constant_expr (t
, true, true, NULL_TREE
);
4949 /* cp_tree_equal looks through NOPs, so allow them. */
4950 gcc_checking_assert (r
== t
4951 || CONVERT_EXPR_P (t
)
4952 || TREE_CODE (t
) == VIEW_CONVERT_EXPR
4953 || (TREE_CONSTANT (t
) && !TREE_CONSTANT (r
))
4954 || !cp_tree_equal (r
, t
));
4957 else if (TREE_OVERFLOW_P (t
))
4959 t
= build_nop (TREE_TYPE (t
), t
);
4960 TREE_CONSTANT (t
) = false;
4965 return maybe_constant_value (t
);
4968 /* Like maybe_constant_value, but returns a CONSTRUCTOR directly, rather
4969 than wrapped in a TARGET_EXPR. */
4972 maybe_constant_init (tree t
, tree decl
)
4976 if (TREE_CODE (t
) == EXPR_STMT
)
4977 t
= TREE_OPERAND (t
, 0);
4978 if (TREE_CODE (t
) == CONVERT_EXPR
4979 && VOID_TYPE_P (TREE_TYPE (t
)))
4980 t
= TREE_OPERAND (t
, 0);
4981 if (TREE_CODE (t
) == INIT_EXPR
)
4982 t
= TREE_OPERAND (t
, 1);
4983 if (TREE_CODE (t
) == TARGET_EXPR
)
4984 t
= TARGET_EXPR_INITIAL (t
);
4985 if (!potential_nondependent_static_init_expression (t
))
4986 /* Don't try to evaluate it. */;
4987 else if (CONSTANT_CLASS_P (t
))
4988 /* No evaluation needed. */;
4990 t
= cxx_eval_outermost_constant_expr (t
, true, false, decl
);
4991 if (TREE_CODE (t
) == TARGET_EXPR
)
4993 tree init
= TARGET_EXPR_INITIAL (t
);
4994 if (TREE_CODE (init
) == CONSTRUCTOR
)
5001 /* FIXME see ADDR_EXPR section in potential_constant_expression_1. */
5002 /* Return true if the object referred to by REF has automatic or thread
5005 enum { ck_ok
, ck_bad
, ck_unknown
};
5007 check_automatic_or_tls (tree ref
)
5010 HOST_WIDE_INT bitsize
, bitpos
;
5012 int volatilep
= 0, unsignedp
= 0;
5013 tree decl
= get_inner_reference (ref
, &bitsize
, &bitpos
, &offset
,
5014 &mode
, &unsignedp
, &volatilep
, false);
5017 /* If there isn't a decl in the middle, we don't know the linkage here,
5018 and this isn't a constant expression anyway. */
5021 dk
= decl_storage_duration (decl
);
5022 return (dk
== dk_auto
|| dk
== dk_thread
) ? ck_bad
: ck_ok
;
5026 /* Return true if T denotes a potentially constant expression. Issue
5027 diagnostic as appropriate under control of FLAGS. If WANT_RVAL is true,
5028 an lvalue-rvalue conversion is implied.
5030 C++0x [expr.const] used to say
5032 6 An expression is a potential constant expression if it is
5033 a constant expression where all occurrences of function
5034 parameters are replaced by arbitrary constant expressions
5035 of the appropriate type.
5037 2 A conditional expression is a constant expression unless it
5038 involves one of the following as a potentially evaluated
5039 subexpression (3.2), but subexpressions of logical AND (5.14),
5040 logical OR (5.15), and conditional (5.16) operations that are
5041 not evaluated are not considered. */
5044 potential_constant_expression_1 (tree t
, bool want_rval
, bool strict
,
5045 tsubst_flags_t flags
)
5047 #define RECUR(T,RV) potential_constant_expression_1 ((T), (RV), strict, flags)
5048 enum { any
= false, rval
= true };
5052 if (t
== error_mark_node
)
5056 location_t loc
= EXPR_LOC_OR_LOC (t
, input_location
);
5057 if (TREE_THIS_VOLATILE (t
) && !DECL_P (t
))
5059 if (flags
& tf_error
)
5060 error_at (loc
, "expression %qE has side-effects", t
);
5063 if (CONSTANT_CLASS_P (t
))
5065 if (CODE_CONTAINS_STRUCT (TREE_CODE (t
), TS_TYPED
)
5066 && TREE_TYPE (t
) == error_mark_node
)
5069 switch (TREE_CODE (t
))
5075 case TEMPLATE_ID_EXPR
:
5078 case CASE_LABEL_EXPR
:
5084 case TEMPLATE_PARM_INDEX
:
5086 case IDENTIFIER_NODE
:
5087 case USERDEF_LITERAL
:
5088 /* We can see a FIELD_DECL in a pointer-to-member expression. */
5094 case PLACEHOLDER_EXPR
:
5101 case AGGR_INIT_EXPR
:
5103 /* -- an invocation of a function other than a constexpr function
5104 or a constexpr constructor. */
5106 tree fun
= get_function_named_in_call (t
);
5107 const int nargs
= call_expr_nargs (t
);
5110 if (fun
== NULL_TREE
)
5112 /* Reset to allow the function to continue past the end
5113 of the block below. Otherwise return early. */
5116 if (TREE_CODE (t
) == CALL_EXPR
5117 && CALL_EXPR_FN (t
) == NULL_TREE
)
5118 switch (CALL_EXPR_IFN (t
))
5120 /* These should be ignored, they are optimized away from
5121 constexpr functions. */
5122 case IFN_UBSAN_NULL
:
5123 case IFN_UBSAN_BOUNDS
:
5124 case IFN_UBSAN_VPTR
:
5125 case IFN_FALLTHROUGH
:
5128 case IFN_ADD_OVERFLOW
:
5129 case IFN_SUB_OVERFLOW
:
5130 case IFN_MUL_OVERFLOW
:
5140 /* fold_call_expr can't do anything with IFN calls. */
5141 if (flags
& tf_error
)
5142 error_at (loc
, "call to internal function %qE", t
);
5147 if (fun
&& is_overloaded_fn (fun
))
5149 if (TREE_CODE (fun
) == FUNCTION_DECL
)
5151 if (builtin_valid_in_constant_expr_p (fun
))
5153 if (!DECL_DECLARED_CONSTEXPR_P (fun
)
5154 /* Allow any built-in function; if the expansion
5155 isn't constant, we'll deal with that then. */
5156 && !is_builtin_fn (fun
))
5158 if (flags
& tf_error
)
5160 error_at (loc
, "call to non-constexpr function %qD",
5162 explain_invalid_constexpr_fn (fun
);
5166 /* A call to a non-static member function takes the address
5167 of the object as the first argument. But in a constant
5168 expression the address will be folded away, so look
5170 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fun
)
5171 && !DECL_CONSTRUCTOR_P (fun
))
5173 tree x
= get_nth_callarg (t
, 0);
5174 if (is_this_parameter (x
))
5176 else if (!RECUR (x
, rval
))
5183 if (!RECUR (fun
, true))
5185 fun
= get_first_fn (fun
);
5187 /* Skip initial arguments to base constructors. */
5188 if (DECL_BASE_CONSTRUCTOR_P (fun
))
5189 i
= num_artificial_parms_for (fun
);
5190 fun
= DECL_ORIGIN (fun
);
5194 if (RECUR (fun
, rval
))
5195 /* Might end up being a constant function pointer. */;
5199 for (; i
< nargs
; ++i
)
5201 tree x
= get_nth_callarg (t
, i
);
5202 /* In a template, reference arguments haven't been converted to
5203 REFERENCE_TYPE and we might not even know if the parameter
5204 is a reference, so accept lvalue constants too. */
5205 bool rv
= processing_template_decl
? any
: rval
;
5212 case NON_LVALUE_EXPR
:
5213 /* -- an lvalue-to-rvalue conversion (4.1) unless it is applied to
5214 -- an lvalue of integral type that refers to a non-volatile
5215 const variable or static data member initialized with
5216 constant expressions, or
5218 -- an lvalue of literal type that refers to non-volatile
5219 object defined with constexpr, or that refers to a
5220 sub-object of such an object; */
5221 return RECUR (TREE_OPERAND (t
, 0), rval
);
5224 if (DECL_HAS_VALUE_EXPR_P (t
))
5225 return RECUR (DECL_VALUE_EXPR (t
), rval
);
5227 && !var_in_maybe_constexpr_fn (t
)
5228 && !type_dependent_expression_p (t
)
5229 && !decl_maybe_constant_var_p (t
)
5231 || !CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (t
))
5232 || (DECL_INITIAL (t
)
5233 && !DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t
)))
5234 && COMPLETE_TYPE_P (TREE_TYPE (t
))
5235 && !is_really_empty_class (TREE_TYPE (t
)))
5237 if (flags
& tf_error
)
5238 non_const_var_error (t
);
5245 case VIEW_CONVERT_EXPR
:
5246 /* -- a reinterpret_cast. FIXME not implemented, and this rule
5247 may change to something more specific to type-punning (DR 1312). */
5249 tree from
= TREE_OPERAND (t
, 0);
5250 if (POINTER_TYPE_P (TREE_TYPE (t
))
5251 && TREE_CODE (from
) == INTEGER_CST
5252 && !integer_zerop (from
))
5254 if (flags
& tf_error
)
5255 error_at (loc
, "reinterpret_cast from integer to pointer");
5258 return (RECUR (from
, TREE_CODE (t
) != VIEW_CONVERT_EXPR
));
5261 case ADDRESSOF_EXPR
:
5262 /* This is like ADDR_EXPR, except it won't form pointer-to-member. */
5263 t
= TREE_OPERAND (t
, 0);
5264 goto handle_addr_expr
;
5267 /* -- a unary operator & that is applied to an lvalue that
5268 designates an object with thread or automatic storage
5270 t
= TREE_OPERAND (t
, 0);
5272 if (TREE_CODE (t
) == OFFSET_REF
&& PTRMEM_OK_P (t
))
5273 /* A pointer-to-member constant. */
5278 /* FIXME adjust when issue 1197 is fully resolved. For now don't do
5279 any checking here, as we might dereference the pointer later. If
5280 we remove this code, also remove check_automatic_or_tls. */
5281 i
= check_automatic_or_tls (t
);
5286 if (flags
& tf_error
)
5287 error ("address-of an object %qE with thread local or "
5288 "automatic storage is not a constant expression", t
);
5292 return RECUR (t
, any
);
5300 /* -- a class member access unless its postfix-expression is
5301 of literal type or of pointer to literal type. */
5302 /* This test would be redundant, as it follows from the
5303 postfix-expression being a potential constant expression. */
5304 if (type_unknown_p (t
))
5306 return RECUR (TREE_OPERAND (t
, 0), want_rval
);
5308 case EXPR_PACK_EXPANSION
:
5309 return RECUR (PACK_EXPANSION_PATTERN (t
), want_rval
);
5313 tree x
= TREE_OPERAND (t
, 0);
5315 if (is_this_parameter (x
) && !is_capture_proxy (x
))
5317 if (DECL_CONTEXT (x
)
5318 && !DECL_DECLARED_CONSTEXPR_P (DECL_CONTEXT (x
)))
5320 if (flags
& tf_error
)
5321 error_at (loc
, "use of %<this%> in a constant expression");
5326 return RECUR (x
, rval
);
5329 case STATEMENT_LIST
:
5331 tree_stmt_iterator i
;
5332 for (i
= tsi_start (t
); !tsi_end_p (i
); tsi_next (&i
))
5334 if (!RECUR (tsi_stmt (i
), any
))
5342 if (cxx_dialect
< cxx14
)
5344 if (!RECUR (TREE_OPERAND (t
, 0), any
))
5346 if (!RECUR (TREE_OPERAND (t
, 1), rval
))
5351 if (cxx_dialect
< cxx14
)
5353 if (!RECUR (TREE_OPERAND (t
, 0), rval
))
5355 if (!RECUR (TREE_OPERAND (t
, 2), rval
))
5360 if (!RECUR (DO_COND (t
), rval
))
5362 if (!RECUR (DO_BODY (t
), any
))
5367 if (!RECUR (FOR_INIT_STMT (t
), any
))
5369 if (!RECUR (FOR_COND (t
), rval
))
5371 if (!RECUR (FOR_EXPR (t
), any
))
5373 if (!RECUR (FOR_BODY (t
), any
))
5377 case RANGE_FOR_STMT
:
5378 if (!RECUR (RANGE_FOR_EXPR (t
), any
))
5380 if (!RECUR (RANGE_FOR_BODY (t
), any
))
5385 if (!RECUR (WHILE_COND (t
), rval
))
5387 if (!RECUR (WHILE_BODY (t
), any
))
5392 if (!RECUR (SWITCH_STMT_COND (t
), rval
))
5394 /* FIXME we don't check SWITCH_STMT_BODY currently, because even
5395 unreachable labels would be checked. */
5399 return RECUR (STMT_EXPR_STMT (t
), rval
);
5402 case DYNAMIC_CAST_EXPR
:
5403 case PSEUDO_DTOR_EXPR
:
5407 case VEC_DELETE_EXPR
:
5412 case OMP_DISTRIBUTE
:
5415 case OMP_TARGET_DATA
:
5424 case OMP_TARGET_UPDATE
:
5425 case OMP_TARGET_ENTER_DATA
:
5426 case OMP_TARGET_EXIT_DATA
:
5428 case OMP_ATOMIC_READ
:
5429 case OMP_ATOMIC_CAPTURE_OLD
:
5430 case OMP_ATOMIC_CAPTURE_NEW
:
5434 case OACC_HOST_DATA
:
5438 case OACC_ENTER_DATA
:
5439 case OACC_EXIT_DATA
:
5443 /* GCC internal stuff. */
5446 case TRANSACTION_EXPR
:
5448 case AT_ENCODE_EXPR
:
5450 if (flags
& tf_error
)
5451 error_at (loc
, "expression %qE is not a constant expression", t
);
5455 /* -- a typeid expression whose operand is of polymorphic
5458 tree e
= TREE_OPERAND (t
, 0);
5459 if (!TYPE_P (e
) && !type_dependent_expression_p (e
)
5460 && TYPE_POLYMORPHIC_P (TREE_TYPE (e
)))
5462 if (flags
& tf_error
)
5463 error_at (loc
, "typeid-expression is not a constant expression "
5464 "because %qE is of polymorphic type", e
);
5483 case PREINCREMENT_EXPR
:
5484 case POSTINCREMENT_EXPR
:
5485 case PREDECREMENT_EXPR
:
5486 case POSTDECREMENT_EXPR
:
5487 if (cxx_dialect
< cxx14
)
5493 if (TYPE_P (TREE_OPERAND (t
, 0)))
5499 case FIX_TRUNC_EXPR
:
5503 case TRUTH_NOT_EXPR
:
5504 case FIXED_CONVERT_EXPR
:
5505 case UNARY_PLUS_EXPR
:
5506 case UNARY_LEFT_FOLD_EXPR
:
5507 case UNARY_RIGHT_FOLD_EXPR
:
5509 return RECUR (TREE_OPERAND (t
, 0), rval
);
5512 case CONST_CAST_EXPR
:
5513 case STATIC_CAST_EXPR
:
5514 case REINTERPRET_CAST_EXPR
:
5515 case IMPLICIT_CONV_EXPR
:
5516 if (cxx_dialect
< cxx11
5517 && !dependent_type_p (TREE_TYPE (t
))
5518 && !INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t
)))
5519 /* In C++98, a conversion to non-integral type can't be part of a
5520 constant expression. */
5522 if (flags
& tf_error
)
5524 "cast to non-integral type %qT in a constant expression",
5529 return (RECUR (TREE_OPERAND (t
, 0),
5530 TREE_CODE (TREE_TYPE (t
)) != REFERENCE_TYPE
));
5533 return RECUR (BIND_EXPR_BODY (t
), want_rval
);
5535 case CLEANUP_POINT_EXPR
:
5536 case MUST_NOT_THROW_EXPR
:
5537 case TRY_CATCH_EXPR
:
5542 case NON_DEPENDENT_EXPR
:
5543 /* For convenience. */
5547 return RECUR (TREE_OPERAND (t
, 0), want_rval
);
5550 tmp
= DECL_EXPR_DECL (t
);
5551 if (VAR_P (tmp
) && !DECL_ARTIFICIAL (tmp
))
5553 if (TREE_STATIC (tmp
))
5555 if (flags
& tf_error
)
5556 error_at (DECL_SOURCE_LOCATION (tmp
), "%qD declared "
5557 "%<static%> in %<constexpr%> context", tmp
);
5560 else if (CP_DECL_THREAD_LOCAL_P (tmp
))
5562 if (flags
& tf_error
)
5563 error_at (DECL_SOURCE_LOCATION (tmp
), "%qD declared "
5564 "%<thread_local%> in %<constexpr%> context", tmp
);
5567 else if (!DECL_NONTRIVIALLY_INITIALIZED_P (tmp
))
5569 if (flags
& tf_error
)
5570 error_at (DECL_SOURCE_LOCATION (tmp
), "uninitialized "
5571 "variable %qD in %<constexpr%> context", tmp
);
5575 return RECUR (tmp
, want_rval
);
5577 case TRY_FINALLY_EXPR
:
5578 return (RECUR (TREE_OPERAND (t
, 0), want_rval
)
5579 && RECUR (TREE_OPERAND (t
, 1), any
));
5582 return RECUR (TREE_OPERAND (t
, 1), want_rval
);
5585 if (!literal_type_p (TREE_TYPE (t
)))
5587 if (flags
& tf_error
)
5589 error_at (loc
, "temporary of non-literal type %qT in a "
5590 "constant expression", TREE_TYPE (t
));
5591 explain_non_literal_class (TREE_TYPE (t
));
5597 return RECUR (TREE_OPERAND (t
, 1), rval
);
5601 vec
<constructor_elt
, va_gc
> *v
= CONSTRUCTOR_ELTS (t
);
5602 constructor_elt
*ce
;
5603 for (i
= 0; vec_safe_iterate (v
, i
, &ce
); ++i
)
5604 if (!RECUR (ce
->value
, want_rval
))
5611 gcc_assert (TREE_PURPOSE (t
) == NULL_TREE
5612 || DECL_P (TREE_PURPOSE (t
)));
5613 if (!RECUR (TREE_VALUE (t
), want_rval
))
5615 if (TREE_CHAIN (t
) == NULL_TREE
)
5617 return RECUR (TREE_CHAIN (t
), want_rval
);
5620 case TRUNC_DIV_EXPR
:
5622 case FLOOR_DIV_EXPR
:
5623 case ROUND_DIV_EXPR
:
5624 case TRUNC_MOD_EXPR
:
5626 case ROUND_MOD_EXPR
:
5628 tree denom
= TREE_OPERAND (t
, 1);
5629 if (!RECUR (denom
, rval
))
5631 /* We can't call cxx_eval_outermost_constant_expr on an expression
5632 that hasn't been through instantiate_non_dependent_expr yet. */
5633 if (!processing_template_decl
)
5634 denom
= cxx_eval_outermost_constant_expr (denom
, true);
5635 if (integer_zerop (denom
))
5637 if (flags
& tf_error
)
5638 error ("division by zero is not a constant expression");
5644 return RECUR (TREE_OPERAND (t
, 0), want_rval
);
5650 /* check_return_expr sometimes wraps a TARGET_EXPR in a
5651 COMPOUND_EXPR; don't get confused. Also handle EMPTY_CLASS_EXPR
5652 introduced by build_call_a. */
5653 tree op0
= TREE_OPERAND (t
, 0);
5654 tree op1
= TREE_OPERAND (t
, 1);
5656 if ((TREE_CODE (op0
) == TARGET_EXPR
&& op1
== TARGET_EXPR_SLOT (op0
))
5657 || TREE_CODE (op1
) == EMPTY_CLASS_EXPR
)
5658 return RECUR (op0
, want_rval
);
5663 /* If the first operand is the non-short-circuit constant, look at
5664 the second operand; otherwise we only care about the first one for
5666 case TRUTH_AND_EXPR
:
5667 case TRUTH_ANDIF_EXPR
:
5668 tmp
= boolean_true_node
;
5671 case TRUTH_ORIF_EXPR
:
5672 tmp
= boolean_false_node
;
5675 tree op
= TREE_OPERAND (t
, 0);
5676 if (!RECUR (op
, rval
))
5678 if (!processing_template_decl
)
5679 op
= cxx_eval_outermost_constant_expr (op
, true);
5680 if (tree_int_cst_equal (op
, tmp
))
5681 return RECUR (TREE_OPERAND (t
, 1), rval
);
5688 case POINTER_PLUS_EXPR
:
5690 case EXACT_DIV_EXPR
:
5700 case TRUTH_XOR_EXPR
:
5701 case UNORDERED_EXPR
:
5714 case ARRAY_RANGE_REF
:
5718 case BINARY_LEFT_FOLD_EXPR
:
5719 case BINARY_RIGHT_FOLD_EXPR
:
5721 for (i
= 0; i
< 2; ++i
)
5722 if (!RECUR (TREE_OPERAND (t
, i
), want_rval
))
5726 case CILK_SYNC_STMT
:
5727 case CILK_SPAWN_STMT
:
5728 case ARRAY_NOTATION_REF
:
5733 for (i
= 0; i
< 3; ++i
)
5734 if (!RECUR (TREE_OPERAND (t
, i
), true))
5739 if (COND_EXPR_IS_VEC_DELETE (t
))
5741 if (flags
& tf_error
)
5742 error_at (loc
, "%<delete[]%> is not a constant expression");
5748 /* If the condition is a known constant, we know which of the legs we
5749 care about; otherwise we only require that the condition and
5750 either of the legs be potentially constant. */
5751 tmp
= TREE_OPERAND (t
, 0);
5752 if (!RECUR (tmp
, rval
))
5754 if (!processing_template_decl
)
5755 tmp
= cxx_eval_outermost_constant_expr (tmp
, true);
5756 if (integer_zerop (tmp
))
5757 return RECUR (TREE_OPERAND (t
, 2), want_rval
);
5758 else if (TREE_CODE (tmp
) == INTEGER_CST
)
5759 return RECUR (TREE_OPERAND (t
, 1), want_rval
);
5760 for (i
= 1; i
< 3; ++i
)
5761 if (potential_constant_expression_1 (TREE_OPERAND (t
, i
),
5762 want_rval
, strict
, tf_none
))
5764 if (flags
& tf_error
)
5765 error_at (loc
, "expression %qE is not a constant expression", t
);
5769 if (VEC_INIT_EXPR_IS_CONSTEXPR (t
))
5771 if (flags
& tf_error
)
5773 error_at (loc
, "non-constant array initialization");
5774 diagnose_non_constexpr_vec_init (t
);
5780 /* We can see these in statement-expressions. */
5784 case EMPTY_CLASS_EXPR
:
5789 tree
*target
= &TREE_OPERAND (t
, 0);
5790 /* Gotos representing break and continue are OK. */
5791 if (breaks (target
) || continues (target
))
5793 if (flags
& tf_error
)
5794 error_at (loc
, "%<goto%> is not a constant expression");
5799 gcc_assert (tree_to_uhwi (TREE_OPERAND (t
, 1)) == annot_expr_ivdep_kind
);
5800 return RECUR (TREE_OPERAND (t
, 0), rval
);
5803 if (objc_is_property_ref (t
))
5806 sorry ("unexpected AST of kind %s", get_tree_code_name (TREE_CODE (t
)));
5813 /* The main entry point to the above. */
5816 potential_constant_expression (tree t
)
5818 return potential_constant_expression_1 (t
, false, true, tf_none
);
5822 potential_static_init_expression (tree t
)
5824 return potential_constant_expression_1 (t
, false, false, tf_none
);
5827 /* As above, but require a constant rvalue. */
5830 potential_rvalue_constant_expression (tree t
)
5832 return potential_constant_expression_1 (t
, true, true, tf_none
);
5835 /* Like above, but complain about non-constant expressions. */
5838 require_potential_constant_expression (tree t
)
5840 return potential_constant_expression_1 (t
, false, true, tf_warning_or_error
);
5843 /* Cross product of the above. */
5846 require_potential_rvalue_constant_expression (tree t
)
5848 return potential_constant_expression_1 (t
, true, true, tf_warning_or_error
);
5851 /* Returns true if T is a potential constant expression that is not
5852 instantiation-dependent, and therefore a candidate for constant folding even
5856 potential_nondependent_constant_expression (tree t
)
5858 return (!type_unknown_p (t
)
5859 && !BRACE_ENCLOSED_INITIALIZER_P (t
)
5860 && potential_constant_expression (t
)
5861 && !instantiation_dependent_expression_p (t
));
5864 /* Returns true if T is a potential static initializer expression that is not
5865 instantiation-dependent. */
5868 potential_nondependent_static_init_expression (tree t
)
5870 return (!type_unknown_p (t
)
5871 && !BRACE_ENCLOSED_INITIALIZER_P (t
)
5872 && potential_static_init_expression (t
)
5873 && !instantiation_dependent_expression_p (t
));
5876 /* Finalize constexpr processing after parsing. */
5879 fini_constexpr (void)
5881 /* The contexpr call and fundef copies tables are no longer needed. */
5882 constexpr_call_table
= NULL
;
5883 fundef_copies_table
= NULL
;
5886 #include "gt-cp-constexpr.h"