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-2016 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"
36 static bool verify_constant (tree
, bool, bool *, bool *);
37 #define VERIFY_CONSTANT(X) \
39 if (verify_constant ((X), ctx->quiet, non_constant_p, overflow_p)) \
43 /* Returns true iff FUN is an instantiation of a constexpr function
44 template or a defaulted constexpr function. */
47 is_instantiation_of_constexpr (tree fun
)
49 return ((DECL_TEMPLOID_INSTANTIATION (fun
)
50 && DECL_DECLARED_CONSTEXPR_P (DECL_TI_TEMPLATE (fun
)))
51 || (DECL_DEFAULTED_FN (fun
)
52 && DECL_DECLARED_CONSTEXPR_P (fun
)));
55 /* Return true if T is a literal type. */
58 literal_type_p (tree t
)
62 || TREE_CODE (t
) == REFERENCE_TYPE
63 || (VOID_TYPE_P (t
) && cxx_dialect
>= cxx14
))
67 t
= complete_type (t
);
68 gcc_assert (COMPLETE_TYPE_P (t
) || errorcount
);
69 return CLASSTYPE_LITERAL_P (t
);
71 if (TREE_CODE (t
) == ARRAY_TYPE
)
72 return literal_type_p (strip_array_types (t
));
76 /* If DECL is a variable declared `constexpr', require its type
77 be literal. Return the DECL if OK, otherwise NULL. */
80 ensure_literal_type_for_constexpr_object (tree decl
)
82 tree type
= TREE_TYPE (decl
);
84 && (DECL_DECLARED_CONSTEXPR_P (decl
)
85 || var_in_constexpr_fn (decl
))
86 && !processing_template_decl
)
88 tree stype
= strip_array_types (type
);
89 if (CLASS_TYPE_P (stype
) && !COMPLETE_TYPE_P (complete_type (stype
)))
90 /* Don't complain here, we'll complain about incompleteness
91 when we try to initialize the variable. */;
92 else if (!literal_type_p (type
))
94 if (DECL_DECLARED_CONSTEXPR_P (decl
))
96 error ("the type %qT of constexpr variable %qD is not literal",
98 explain_non_literal_class (type
);
102 if (!DECL_TEMPLATE_INSTANTIATION (current_function_decl
))
104 error ("variable %qD of non-literal type %qT in %<constexpr%> "
105 "function", decl
, type
);
106 explain_non_literal_class (type
);
108 cp_function_chain
->invalid_constexpr
= true;
116 /* Representation of entries in the constexpr function definition table. */
118 struct GTY((for_user
)) constexpr_fundef
{
123 struct constexpr_fundef_hasher
: ggc_ptr_hash
<constexpr_fundef
>
125 static hashval_t
hash (constexpr_fundef
*);
126 static bool equal (constexpr_fundef
*, constexpr_fundef
*);
129 /* This table holds all constexpr function definitions seen in
130 the current translation unit. */
132 static GTY (()) hash_table
<constexpr_fundef_hasher
> *constexpr_fundef_table
;
134 /* Utility function used for managing the constexpr function table.
135 Return true if the entries pointed to by P and Q are for the
136 same constexpr function. */
139 constexpr_fundef_hasher::equal (constexpr_fundef
*lhs
, constexpr_fundef
*rhs
)
141 return lhs
->decl
== rhs
->decl
;
144 /* Utility function used for managing the constexpr function table.
145 Return a hash value for the entry pointed to by Q. */
148 constexpr_fundef_hasher::hash (constexpr_fundef
*fundef
)
150 return DECL_UID (fundef
->decl
);
153 /* Return a previously saved definition of function FUN. */
155 static constexpr_fundef
*
156 retrieve_constexpr_fundef (tree fun
)
158 constexpr_fundef fundef
= { NULL
, NULL
};
159 if (constexpr_fundef_table
== NULL
)
163 return constexpr_fundef_table
->find (&fundef
);
166 /* Check whether the parameter and return types of FUN are valid for a
167 constexpr function, and complain if COMPLAIN. */
170 is_valid_constexpr_fn (tree fun
, bool complain
)
174 if (DECL_INHERITED_CTOR_BASE (fun
)
175 && TREE_CODE (fun
) == TEMPLATE_DECL
)
179 error ("inherited constructor %qD is not constexpr",
180 get_inherited_ctor (fun
));
184 for (tree parm
= FUNCTION_FIRST_USER_PARM (fun
);
185 parm
!= NULL_TREE
; parm
= TREE_CHAIN (parm
))
186 if (!literal_type_p (TREE_TYPE (parm
)))
191 error ("invalid type for parameter %d of constexpr "
192 "function %q+#D", DECL_PARM_INDEX (parm
), fun
);
193 explain_non_literal_class (TREE_TYPE (parm
));
198 if (!DECL_CONSTRUCTOR_P (fun
))
200 tree rettype
= TREE_TYPE (TREE_TYPE (fun
));
201 if (!literal_type_p (rettype
))
206 error ("invalid return type %qT of constexpr function %q+D",
208 explain_non_literal_class (rettype
);
212 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fun
)
213 && !CLASSTYPE_LITERAL_P (DECL_CONTEXT (fun
)))
218 error ("enclosing class of constexpr non-static member "
219 "function %q+#D is not a literal type", fun
);
220 explain_non_literal_class (DECL_CONTEXT (fun
));
224 else if (CLASSTYPE_VBASECLASSES (DECL_CONTEXT (fun
)))
228 error ("%q#T has virtual base classes", DECL_CONTEXT (fun
));
234 /* Subroutine of build_data_member_initialization. MEMBER is a COMPONENT_REF
235 for a member of an anonymous aggregate, INIT is the initializer for that
236 member, and VEC_OUTER is the vector of constructor elements for the class
237 whose constructor we are processing. Add the initializer to the vector
238 and return true to indicate success. */
241 build_anon_member_initialization (tree member
, tree init
,
242 vec
<constructor_elt
, va_gc
> **vec_outer
)
244 /* MEMBER presents the relevant fields from the inside out, but we need
245 to build up the initializer from the outside in so that we can reuse
246 previously built CONSTRUCTORs if this is, say, the second field in an
247 anonymous struct. So we use a vec as a stack. */
248 auto_vec
<tree
, 2> fields
;
251 fields
.safe_push (TREE_OPERAND (member
, 1));
252 member
= TREE_OPERAND (member
, 0);
254 while (ANON_AGGR_TYPE_P (TREE_TYPE (member
))
255 && TREE_CODE (member
) == COMPONENT_REF
);
257 /* VEC has the constructor elements vector for the context of FIELD.
258 If FIELD is an anonymous aggregate, we will push inside it. */
259 vec
<constructor_elt
, va_gc
> **vec
= vec_outer
;
261 while (field
= fields
.pop(),
262 ANON_AGGR_TYPE_P (TREE_TYPE (field
)))
265 /* If there is already an outer constructor entry for the anonymous
266 aggregate FIELD, use it; otherwise, insert one. */
267 if (vec_safe_is_empty (*vec
)
268 || (*vec
)->last().index
!= field
)
270 ctor
= build_constructor (TREE_TYPE (field
), NULL
);
271 CONSTRUCTOR_APPEND_ELT (*vec
, field
, ctor
);
274 ctor
= (*vec
)->last().value
;
275 vec
= &CONSTRUCTOR_ELTS (ctor
);
278 /* Now we're at the innermost field, the one that isn't an anonymous
279 aggregate. Add its initializer to the CONSTRUCTOR and we're done. */
280 gcc_assert (fields
.is_empty());
281 CONSTRUCTOR_APPEND_ELT (*vec
, field
, init
);
286 /* Subroutine of build_constexpr_constructor_member_initializers.
287 The expression tree T represents a data member initialization
288 in a (constexpr) constructor definition. Build a pairing of
289 the data member with its initializer, and prepend that pair
290 to the existing initialization pair INITS. */
293 build_data_member_initialization (tree t
, vec
<constructor_elt
, va_gc
> **vec
)
296 if (TREE_CODE (t
) == CLEANUP_POINT_EXPR
)
297 t
= TREE_OPERAND (t
, 0);
298 if (TREE_CODE (t
) == EXPR_STMT
)
299 t
= TREE_OPERAND (t
, 0);
300 if (t
== error_mark_node
)
302 if (TREE_CODE (t
) == STATEMENT_LIST
)
304 tree_stmt_iterator i
;
305 for (i
= tsi_start (t
); !tsi_end_p (i
); tsi_next (&i
))
307 if (! build_data_member_initialization (tsi_stmt (i
), vec
))
312 if (TREE_CODE (t
) == CLEANUP_STMT
)
314 /* We can't see a CLEANUP_STMT in a constructor for a literal class,
315 but we can in a constexpr constructor for a non-literal class. Just
316 ignore it; either all the initialization will be constant, in which
317 case the cleanup can't run, or it can't be constexpr.
318 Still recurse into CLEANUP_BODY. */
319 return build_data_member_initialization (CLEANUP_BODY (t
), vec
);
321 if (TREE_CODE (t
) == CONVERT_EXPR
)
322 t
= TREE_OPERAND (t
, 0);
323 if (TREE_CODE (t
) == INIT_EXPR
324 /* vptr initialization shows up as a MODIFY_EXPR. In C++14 we only
325 use what this function builds for cx_check_missing_mem_inits, and
326 assignment in the ctor body doesn't count. */
327 || (cxx_dialect
< cxx14
&& TREE_CODE (t
) == MODIFY_EXPR
))
329 member
= TREE_OPERAND (t
, 0);
330 init
= break_out_target_exprs (TREE_OPERAND (t
, 1));
332 else if (TREE_CODE (t
) == CALL_EXPR
)
334 tree fn
= get_callee_fndecl (t
);
335 if (!fn
|| !DECL_CONSTRUCTOR_P (fn
))
336 /* We're only interested in calls to subobject constructors. */
338 member
= CALL_EXPR_ARG (t
, 0);
339 /* We don't use build_cplus_new here because it complains about
340 abstract bases. Leaving the call unwrapped means that it has the
341 wrong type, but cxx_eval_constant_expression doesn't care. */
342 init
= break_out_target_exprs (t
);
344 else if (TREE_CODE (t
) == BIND_EXPR
)
345 return build_data_member_initialization (BIND_EXPR_BODY (t
), vec
);
347 /* Don't add anything else to the CONSTRUCTOR. */
349 if (INDIRECT_REF_P (member
))
350 member
= TREE_OPERAND (member
, 0);
351 if (TREE_CODE (member
) == NOP_EXPR
)
355 if (TREE_CODE (op
) == ADDR_EXPR
)
357 gcc_assert (same_type_ignoring_top_level_qualifiers_p
358 (TREE_TYPE (TREE_TYPE (op
)),
359 TREE_TYPE (TREE_TYPE (member
))));
360 /* Initializing a cv-qualified member; we need to look through
364 else if (op
== current_class_ptr
365 && (same_type_ignoring_top_level_qualifiers_p
366 (TREE_TYPE (TREE_TYPE (member
)),
367 current_class_type
)))
368 /* Delegating constructor. */
372 /* This is an initializer for an empty base; keep it for now so
373 we can check it in cxx_eval_bare_aggregate. */
374 gcc_assert (is_empty_class (TREE_TYPE (TREE_TYPE (member
))));
377 if (TREE_CODE (member
) == ADDR_EXPR
)
378 member
= TREE_OPERAND (member
, 0);
379 if (TREE_CODE (member
) == COMPONENT_REF
)
381 tree aggr
= TREE_OPERAND (member
, 0);
382 if (TREE_CODE (aggr
) != COMPONENT_REF
)
383 /* Normal member initialization. */
384 member
= TREE_OPERAND (member
, 1);
385 else if (ANON_AGGR_TYPE_P (TREE_TYPE (aggr
)))
386 /* Initializing a member of an anonymous union. */
387 return build_anon_member_initialization (member
, init
, vec
);
389 /* We're initializing a vtable pointer in a base. Leave it as
390 COMPONENT_REF so we remember the path to get to the vfield. */
391 gcc_assert (TREE_TYPE (member
) == vtbl_ptr_type_node
);
394 CONSTRUCTOR_APPEND_ELT (*vec
, member
, init
);
398 /* Subroutine of check_constexpr_ctor_body_1 and constexpr_fn_retval.
399 In C++11 mode checks that the TYPE_DECLs in the BIND_EXPR_VARS of a
400 BIND_EXPR conform to 7.1.5/3/4 on typedef and alias declarations. */
403 check_constexpr_bind_expr_vars (tree t
)
405 gcc_assert (TREE_CODE (t
) == BIND_EXPR
);
407 for (tree var
= BIND_EXPR_VARS (t
); var
; var
= DECL_CHAIN (var
))
408 if (TREE_CODE (var
) == TYPE_DECL
409 && DECL_IMPLICIT_TYPEDEF_P (var
)
410 && !LAMBDA_TYPE_P (TREE_TYPE (var
)))
415 /* Subroutine of check_constexpr_ctor_body. */
418 check_constexpr_ctor_body_1 (tree last
, tree list
)
420 switch (TREE_CODE (list
))
423 if (TREE_CODE (DECL_EXPR_DECL (list
)) == USING_DECL
)
427 case CLEANUP_POINT_EXPR
:
428 return check_constexpr_ctor_body (last
, TREE_OPERAND (list
, 0),
432 if (!check_constexpr_bind_expr_vars (list
)
433 || !check_constexpr_ctor_body (last
, BIND_EXPR_BODY (list
),
447 /* Make sure that there are no statements after LAST in the constructor
448 body represented by LIST. */
451 check_constexpr_ctor_body (tree last
, tree list
, bool complain
)
453 /* C++14 doesn't require a constexpr ctor to have an empty body. */
454 if (cxx_dialect
>= cxx14
)
458 if (TREE_CODE (list
) == STATEMENT_LIST
)
460 tree_stmt_iterator i
= tsi_last (list
);
461 for (; !tsi_end_p (i
); tsi_prev (&i
))
463 tree t
= tsi_stmt (i
);
466 if (!check_constexpr_ctor_body_1 (last
, t
))
473 else if (list
!= last
474 && !check_constexpr_ctor_body_1 (last
, list
))
479 error ("constexpr constructor does not have empty body");
480 DECL_DECLARED_CONSTEXPR_P (current_function_decl
) = false;
485 /* V is a vector of constructor elements built up for the base and member
486 initializers of a constructor for TYPE. They need to be in increasing
487 offset order, which they might not be yet if TYPE has a primary base
488 which is not first in the base-clause or a vptr and at least one base
489 all of which are non-primary. */
491 static vec
<constructor_elt
, va_gc
> *
492 sort_constexpr_mem_initializers (tree type
, vec
<constructor_elt
, va_gc
> *v
)
494 tree pri
= CLASSTYPE_PRIMARY_BINFO (type
);
500 field_type
= BINFO_TYPE (pri
);
501 else if (TYPE_CONTAINS_VPTR_P (type
))
502 field_type
= vtbl_ptr_type_node
;
506 /* Find the element for the primary base or vptr and move it to the
507 beginning of the vec. */
508 for (i
= 0; vec_safe_iterate (v
, i
, &ce
); ++i
)
509 if (TREE_TYPE (ce
->index
) == field_type
)
512 if (i
> 0 && i
< vec_safe_length (v
))
514 vec
<constructor_elt
, va_gc
> &vref
= *v
;
515 constructor_elt elt
= vref
[i
];
524 /* Build compile-time evalable representations of member-initializer list
525 for a constexpr constructor. */
528 build_constexpr_constructor_member_initializers (tree type
, tree body
)
530 vec
<constructor_elt
, va_gc
> *vec
= NULL
;
533 switch (TREE_CODE (body
))
535 case MUST_NOT_THROW_EXPR
:
537 body
= TREE_OPERAND (body
, 0);
541 for (tree_stmt_iterator i
= tsi_start (body
);
542 !tsi_end_p (i
); tsi_next (&i
))
545 if (TREE_CODE (body
) == BIND_EXPR
)
551 body
= BIND_EXPR_BODY (body
);
558 if (TREE_CODE (body
) == CLEANUP_POINT_EXPR
)
560 body
= TREE_OPERAND (body
, 0);
561 if (TREE_CODE (body
) == EXPR_STMT
)
562 body
= TREE_OPERAND (body
, 0);
563 if (TREE_CODE (body
) == INIT_EXPR
564 && (same_type_ignoring_top_level_qualifiers_p
565 (TREE_TYPE (TREE_OPERAND (body
, 0)),
566 current_class_type
)))
569 return TREE_OPERAND (body
, 1);
571 ok
= build_data_member_initialization (body
, &vec
);
573 else if (TREE_CODE (body
) == STATEMENT_LIST
)
575 tree_stmt_iterator i
;
576 for (i
= tsi_start (body
); !tsi_end_p (i
); tsi_next (&i
))
578 ok
= build_data_member_initialization (tsi_stmt (i
), &vec
);
583 else if (TREE_CODE (body
) == TRY_BLOCK
)
585 error ("body of %<constexpr%> constructor cannot be "
586 "a function-try-block");
587 return error_mark_node
;
589 else if (EXPR_P (body
))
590 ok
= build_data_member_initialization (body
, &vec
);
592 gcc_assert (errorcount
> 0);
595 if (vec_safe_length (vec
) > 0)
597 /* In a delegating constructor, return the target. */
598 constructor_elt
*ce
= &(*vec
)[0];
599 if (ce
->index
== current_class_ptr
)
606 vec
= sort_constexpr_mem_initializers (type
, vec
);
607 return build_constructor (type
, vec
);
610 return error_mark_node
;
613 /* Subroutine of register_constexpr_fundef. BODY is the body of a function
614 declared to be constexpr, or a sub-statement thereof. Returns the
615 return value if suitable, error_mark_node for a statement not allowed in
616 a constexpr function, or NULL_TREE if no return value was found. */
619 constexpr_fn_retval (tree body
)
621 switch (TREE_CODE (body
))
625 tree_stmt_iterator i
;
626 tree expr
= NULL_TREE
;
627 for (i
= tsi_start (body
); !tsi_end_p (i
); tsi_next (&i
))
629 tree s
= constexpr_fn_retval (tsi_stmt (i
));
630 if (s
== error_mark_node
)
631 return error_mark_node
;
632 else if (s
== NULL_TREE
)
633 /* Keep iterating. */;
635 /* Multiple return statements. */
636 return error_mark_node
;
644 return break_out_target_exprs (TREE_OPERAND (body
, 0));
648 tree decl
= DECL_EXPR_DECL (body
);
649 if (TREE_CODE (decl
) == USING_DECL
650 /* Accept __func__, __FUNCTION__, and __PRETTY_FUNCTION__. */
651 || DECL_ARTIFICIAL (decl
))
653 return error_mark_node
;
656 case CLEANUP_POINT_EXPR
:
657 return constexpr_fn_retval (TREE_OPERAND (body
, 0));
660 if (!check_constexpr_bind_expr_vars (body
))
661 return error_mark_node
;
662 return constexpr_fn_retval (BIND_EXPR_BODY (body
));
668 return error_mark_node
;
672 /* Subroutine of register_constexpr_fundef. BODY is the DECL_SAVED_TREE of
673 FUN; do the necessary transformations to turn it into a single expression
674 that we can store in the hash table. */
677 massage_constexpr_body (tree fun
, tree body
)
679 if (DECL_CONSTRUCTOR_P (fun
))
680 body
= build_constexpr_constructor_member_initializers
681 (DECL_CONTEXT (fun
), body
);
682 else if (cxx_dialect
< cxx14
)
684 if (TREE_CODE (body
) == EH_SPEC_BLOCK
)
685 body
= EH_SPEC_STMTS (body
);
686 if (TREE_CODE (body
) == MUST_NOT_THROW_EXPR
)
687 body
= TREE_OPERAND (body
, 0);
688 body
= constexpr_fn_retval (body
);
693 /* FUN is a constexpr constructor with massaged body BODY. Return true
694 if some bases/fields are uninitialized, and complain if COMPLAIN. */
697 cx_check_missing_mem_inits (tree fun
, tree body
, bool complain
)
704 if (TREE_CODE (body
) != CONSTRUCTOR
)
707 nelts
= CONSTRUCTOR_NELTS (body
);
708 ctype
= DECL_CONTEXT (fun
);
709 field
= TYPE_FIELDS (ctype
);
711 if (TREE_CODE (ctype
) == UNION_TYPE
)
713 if (nelts
== 0 && next_initializable_field (field
))
716 error ("%<constexpr%> constructor for union %qT must "
717 "initialize exactly one non-static data member", ctype
);
724 for (i
= 0; i
<= nelts
; ++i
)
731 index
= CONSTRUCTOR_ELT (body
, i
)->index
;
732 /* Skip base and vtable inits. */
733 if (TREE_CODE (index
) != FIELD_DECL
734 || DECL_ARTIFICIAL (index
))
737 for (; field
!= index
; field
= DECL_CHAIN (field
))
740 if (TREE_CODE (field
) != FIELD_DECL
741 || (DECL_C_BIT_FIELD (field
) && !DECL_NAME (field
))
742 || DECL_ARTIFICIAL (field
))
744 ftype
= strip_array_types (TREE_TYPE (field
));
745 if (type_has_constexpr_default_constructor (ftype
))
747 /* It's OK to skip a member with a trivial constexpr ctor.
748 A constexpr ctor that isn't trivial should have been
750 gcc_checking_assert (!TYPE_HAS_COMPLEX_DFLT (ftype
)
756 error ("member %qD must be initialized by mem-initializer "
757 "in %<constexpr%> constructor", field
);
758 inform (DECL_SOURCE_LOCATION (field
), "declared here");
761 if (field
== NULL_TREE
)
763 field
= DECL_CHAIN (field
);
769 /* We are processing the definition of the constexpr function FUN.
770 Check that its BODY fulfills the propriate requirements and
771 enter it in the constexpr function definition table.
772 For constructor BODY is actually the TREE_LIST of the
773 member-initializer list. */
776 register_constexpr_fundef (tree fun
, tree body
)
778 constexpr_fundef entry
;
779 constexpr_fundef
**slot
;
781 if (!is_valid_constexpr_fn (fun
, !DECL_GENERATED_P (fun
)))
784 tree massaged
= massage_constexpr_body (fun
, body
);
785 if (massaged
== NULL_TREE
|| massaged
== error_mark_node
)
787 if (!DECL_CONSTRUCTOR_P (fun
))
788 error ("body of constexpr function %qD not a return-statement", fun
);
792 if (!potential_rvalue_constant_expression (massaged
))
794 if (!DECL_GENERATED_P (fun
))
795 require_potential_rvalue_constant_expression (massaged
);
799 if (DECL_CONSTRUCTOR_P (fun
)
800 && cx_check_missing_mem_inits (fun
, massaged
, !DECL_GENERATED_P (fun
)))
803 /* Create the constexpr function table if necessary. */
804 if (constexpr_fundef_table
== NULL
)
805 constexpr_fundef_table
806 = hash_table
<constexpr_fundef_hasher
>::create_ggc (101);
810 slot
= constexpr_fundef_table
->find_slot (&entry
, INSERT
);
812 gcc_assert (*slot
== NULL
);
813 *slot
= ggc_alloc
<constexpr_fundef
> ();
819 /* FUN is a non-constexpr function called in a context that requires a
820 constant expression. If it comes from a constexpr template, explain why
821 the instantiation isn't constexpr. */
824 explain_invalid_constexpr_fn (tree fun
)
826 static hash_set
<tree
> *diagnosed
;
829 /* Only diagnose defaulted functions or instantiations. */
830 if (!DECL_DEFAULTED_FN (fun
)
831 && !is_instantiation_of_constexpr (fun
))
833 if (diagnosed
== NULL
)
834 diagnosed
= new hash_set
<tree
>;
835 if (diagnosed
->add (fun
))
836 /* Already explained. */
839 save_loc
= input_location
;
840 input_location
= DECL_SOURCE_LOCATION (fun
);
841 inform (input_location
,
842 "%qD is not usable as a constexpr function because:", fun
);
843 /* First check the declaration. */
844 if (is_valid_constexpr_fn (fun
, true))
846 /* Then if it's OK, the body. */
847 if (!DECL_DECLARED_CONSTEXPR_P (fun
))
848 explain_implicit_non_constexpr (fun
);
851 body
= massage_constexpr_body (fun
, DECL_SAVED_TREE (fun
));
852 require_potential_rvalue_constant_expression (body
);
853 if (DECL_CONSTRUCTOR_P (fun
))
854 cx_check_missing_mem_inits (fun
, body
, true);
857 input_location
= save_loc
;
860 /* Objects of this type represent calls to constexpr functions
861 along with the bindings of parameters to their arguments, for
862 the purpose of compile time evaluation. */
864 struct GTY((for_user
)) constexpr_call
{
865 /* Description of the constexpr function definition. */
866 constexpr_fundef
*fundef
;
867 /* Parameter bindings environment. A TREE_LIST where each TREE_PURPOSE
868 is a parameter _DECL and the TREE_VALUE is the value of the parameter.
869 Note: This arrangement is made to accommodate the use of
870 iterative_hash_template_arg (see pt.c). If you change this
871 representation, also change the hash calculation in
872 cxx_eval_call_expression. */
874 /* Result of the call.
875 NULL means the call is being evaluated.
876 error_mark_node means that the evaluation was erroneous;
877 otherwise, the actuall value of the call. */
879 /* The hash of this call; we remember it here to avoid having to
880 recalculate it when expanding the hash table. */
884 struct constexpr_call_hasher
: ggc_ptr_hash
<constexpr_call
>
886 static hashval_t
hash (constexpr_call
*);
887 static bool equal (constexpr_call
*, constexpr_call
*);
890 /* The constexpr expansion context. CALL is the current function
891 expansion, CTOR is the current aggregate initializer, OBJECT is the
892 object being initialized by CTOR, either a VAR_DECL or a _REF. VALUES
893 is a map of values of variables initialized within the expression. */
895 struct constexpr_ctx
{
896 /* The innermost call we're evaluating. */
897 constexpr_call
*call
;
898 /* Values for any temporaries or local variables within the
899 constant-expression. */
900 hash_map
<tree
,tree
> *values
;
901 /* SAVE_EXPRs that we've seen within the current LOOP_EXPR. NULL if we
902 aren't inside a loop. */
903 hash_set
<tree
> *save_exprs
;
904 /* The CONSTRUCTOR we're currently building up for an aggregate
907 /* The object we're building the CONSTRUCTOR for. */
909 /* Whether we should error on a non-constant expression or fail quietly. */
911 /* Whether we are strictly conforming to constant expression rules or
912 trying harder to get a constant value. */
916 /* A table of all constexpr calls that have been evaluated by the
917 compiler in this translation unit. */
919 static GTY (()) hash_table
<constexpr_call_hasher
> *constexpr_call_table
;
921 static tree
cxx_eval_constant_expression (const constexpr_ctx
*, tree
,
922 bool, bool *, bool *, tree
* = NULL
);
924 /* Compute a hash value for a constexpr call representation. */
927 constexpr_call_hasher::hash (constexpr_call
*info
)
932 /* Return true if the objects pointed to by P and Q represent calls
933 to the same constexpr function with the same arguments.
934 Otherwise, return false. */
937 constexpr_call_hasher::equal (constexpr_call
*lhs
, constexpr_call
*rhs
)
943 if (!constexpr_fundef_hasher::equal (lhs
->fundef
, rhs
->fundef
))
945 lhs_bindings
= lhs
->bindings
;
946 rhs_bindings
= rhs
->bindings
;
947 while (lhs_bindings
!= NULL
&& rhs_bindings
!= NULL
)
949 tree lhs_arg
= TREE_VALUE (lhs_bindings
);
950 tree rhs_arg
= TREE_VALUE (rhs_bindings
);
951 gcc_assert (TREE_TYPE (lhs_arg
) == TREE_TYPE (rhs_arg
));
952 if (!cp_tree_equal (lhs_arg
, rhs_arg
))
954 lhs_bindings
= TREE_CHAIN (lhs_bindings
);
955 rhs_bindings
= TREE_CHAIN (rhs_bindings
);
957 return lhs_bindings
== rhs_bindings
;
960 /* Initialize the constexpr call table, if needed. */
963 maybe_initialize_constexpr_call_table (void)
965 if (constexpr_call_table
== NULL
)
966 constexpr_call_table
= hash_table
<constexpr_call_hasher
>::create_ggc (101);
969 /* During constexpr CALL_EXPR evaluation, to avoid issues with sharing when
970 a function happens to get called recursively, we unshare the callee
971 function's body and evaluate this unshared copy instead of evaluating the
974 FUNDEF_COPIES_TABLE is a per-function freelist of these unshared function
975 copies. The underlying data structure of FUNDEF_COPIES_TABLE is a hash_map
976 that's keyed off of the original FUNCTION_DECL and whose value is a
977 TREE_LIST of this function's unused copies awaiting reuse.
979 This is not GC-deletable to avoid GC affecting UID generation. */
981 static GTY(()) hash_map
<tree
, tree
> *fundef_copies_table
;
983 /* Initialize FUNDEF_COPIES_TABLE if it's not initialized. */
986 maybe_initialize_fundef_copies_table ()
988 if (fundef_copies_table
== NULL
)
989 fundef_copies_table
= hash_map
<tree
,tree
>::create_ggc (101);
992 /* Reuse a copy or create a new unshared copy of the function FUN.
993 Return this copy. We use a TREE_LIST whose PURPOSE is body, VALUE
994 is parms, TYPE is result. */
997 get_fundef_copy (tree fun
)
999 maybe_initialize_fundef_copies_table ();
1003 tree
*slot
= &fundef_copies_table
->get_or_insert (fun
, &existed
);
1007 /* There is no cached function available, or in use. We can use
1008 the function directly. That the slot is now created records
1009 that this function is now in use. */
1010 copy
= build_tree_list (DECL_SAVED_TREE (fun
), DECL_ARGUMENTS (fun
));
1011 TREE_TYPE (copy
) = DECL_RESULT (fun
);
1013 else if (*slot
== NULL_TREE
)
1015 /* We've already used the function itself, so make a copy. */
1016 copy
= build_tree_list (NULL
, NULL
);
1017 TREE_PURPOSE (copy
) = copy_fn (fun
, TREE_VALUE (copy
), TREE_TYPE (copy
));
1021 /* We have a cached function available. */
1023 *slot
= TREE_CHAIN (copy
);
1029 /* Save the copy COPY of function FUN for later reuse by
1030 get_fundef_copy(). By construction, there will always be an entry
1034 save_fundef_copy (tree fun
, tree copy
)
1036 tree
*slot
= fundef_copies_table
->get (fun
);
1037 TREE_CHAIN (copy
) = *slot
;
1041 /* We have an expression tree T that represents a call, either CALL_EXPR
1042 or AGGR_INIT_EXPR. If the call is lexically to a named function,
1043 retrun the _DECL for that function. */
1046 get_function_named_in_call (tree t
)
1048 tree fun
= cp_get_callee (t
);
1049 if (fun
&& TREE_CODE (fun
) == ADDR_EXPR
1050 && TREE_CODE (TREE_OPERAND (fun
, 0)) == FUNCTION_DECL
)
1051 fun
= TREE_OPERAND (fun
, 0);
1055 /* We have an expression tree T that represents a call, either CALL_EXPR
1056 or AGGR_INIT_EXPR. Return the Nth argument. */
1059 get_nth_callarg (tree t
, int n
)
1061 switch (TREE_CODE (t
))
1064 return CALL_EXPR_ARG (t
, n
);
1066 case AGGR_INIT_EXPR
:
1067 return AGGR_INIT_EXPR_ARG (t
, n
);
1075 /* Attempt to evaluate T which represents a call to a builtin function.
1076 We assume here that all builtin functions evaluate to scalar types
1077 represented by _CST nodes. */
1080 cxx_eval_builtin_function_call (const constexpr_ctx
*ctx
, tree t
, tree fun
,
1082 bool *non_constant_p
, bool *overflow_p
)
1084 const int nargs
= call_expr_nargs (t
);
1085 tree
*args
= (tree
*) alloca (nargs
* sizeof (tree
));
1089 /* Don't fold __builtin_constant_p within a constexpr function. */
1090 bool bi_const_p
= (DECL_FUNCTION_CODE (fun
) == BUILT_IN_CONSTANT_P
);
1093 && current_function_decl
1094 && DECL_DECLARED_CONSTEXPR_P (current_function_decl
))
1096 *non_constant_p
= true;
1100 /* Be permissive for arguments to built-ins; __builtin_constant_p should
1101 return constant false for a non-constant argument. */
1102 constexpr_ctx new_ctx
= *ctx
;
1103 new_ctx
.quiet
= true;
1104 bool dummy1
= false, dummy2
= false;
1105 for (i
= 0; i
< nargs
; ++i
)
1107 args
[i
] = cxx_eval_constant_expression (&new_ctx
, CALL_EXPR_ARG (t
, i
),
1108 lval
, &dummy1
, &dummy2
);
1110 /* For __built_in_constant_p, fold all expressions with constant values
1111 even if they aren't C++ constant-expressions. */
1112 args
[i
] = cp_fully_fold (args
[i
]);
1115 bool save_ffbcp
= force_folding_builtin_constant_p
;
1116 force_folding_builtin_constant_p
= true;
1117 new_call
= fold_build_call_array_loc (EXPR_LOCATION (t
), TREE_TYPE (t
),
1118 CALL_EXPR_FN (t
), nargs
, args
);
1119 /* Fold away the NOP_EXPR from fold_builtin_n. */
1120 new_call
= fold (new_call
);
1121 force_folding_builtin_constant_p
= save_ffbcp
;
1122 VERIFY_CONSTANT (new_call
);
1126 /* TEMP is the constant value of a temporary object of type TYPE. Adjust
1127 the type of the value to match. */
1130 adjust_temp_type (tree type
, tree temp
)
1132 if (TREE_TYPE (temp
) == type
)
1134 /* Avoid wrapping an aggregate value in a NOP_EXPR. */
1135 if (TREE_CODE (temp
) == CONSTRUCTOR
)
1136 return build_constructor (type
, CONSTRUCTOR_ELTS (temp
));
1137 gcc_assert (scalarish_type_p (type
));
1138 return cp_fold_convert (type
, temp
);
1141 /* Callback for walk_tree used by unshare_constructor. */
1144 find_constructor (tree
*tp
, int *walk_subtrees
, void *)
1148 if (TREE_CODE (*tp
) == CONSTRUCTOR
)
1153 /* If T is a CONSTRUCTOR or an expression that has a CONSTRUCTOR node as a
1154 subexpression, return an unshared copy of T. Otherwise return T. */
1157 unshare_constructor (tree t
)
1159 tree ctor
= walk_tree (&t
, find_constructor
, NULL
, NULL
);
1160 if (ctor
!= NULL_TREE
)
1161 return unshare_expr (t
);
1165 /* Subroutine of cxx_eval_call_expression.
1166 We are processing a call expression (either CALL_EXPR or
1167 AGGR_INIT_EXPR) in the context of CTX. Evaluate
1168 all arguments and bind their values to correspondings
1169 parameters, making up the NEW_CALL context. */
1172 cxx_bind_parameters_in_call (const constexpr_ctx
*ctx
, tree t
,
1173 constexpr_call
*new_call
,
1174 bool *non_constant_p
, bool *overflow_p
,
1175 bool *non_constant_args
)
1177 const int nargs
= call_expr_nargs (t
);
1178 tree fun
= new_call
->fundef
->decl
;
1179 tree parms
= DECL_ARGUMENTS (fun
);
1181 tree
*p
= &new_call
->bindings
;
1182 for (i
= 0; i
< nargs
; ++i
)
1185 tree type
= parms
? TREE_TYPE (parms
) : void_type_node
;
1186 x
= get_nth_callarg (t
, i
);
1187 /* For member function, the first argument is a pointer to the implied
1188 object. For a constructor, it might still be a dummy object, in
1189 which case we get the real argument from ctx. */
1190 if (i
== 0 && DECL_CONSTRUCTOR_P (fun
)
1191 && is_dummy_object (x
))
1194 x
= cp_build_addr_expr (x
, tf_warning_or_error
);
1197 arg
= cxx_eval_constant_expression (ctx
, x
, lval
,
1198 non_constant_p
, overflow_p
);
1199 /* Don't VERIFY_CONSTANT here. */
1200 if (*non_constant_p
&& ctx
->quiet
)
1202 /* Just discard ellipsis args after checking their constantitude. */
1206 if (!*non_constant_p
)
1208 /* Make sure the binding has the same type as the parm. But
1209 only for constant args. */
1210 if (TREE_CODE (type
) != REFERENCE_TYPE
)
1211 arg
= adjust_temp_type (type
, arg
);
1212 if (!TREE_CONSTANT (arg
))
1213 *non_constant_args
= true;
1214 *p
= build_tree_list (parms
, arg
);
1215 p
= &TREE_CHAIN (*p
);
1217 parms
= TREE_CHAIN (parms
);
1221 /* Variables and functions to manage constexpr call expansion context.
1222 These do not need to be marked for PCH or GC. */
1224 /* FIXME remember and print actual constant arguments. */
1225 static vec
<tree
> call_stack
= vNULL
;
1226 static int call_stack_tick
;
1227 static int last_cx_error_tick
;
1230 push_cx_call_context (tree call
)
1233 if (!EXPR_HAS_LOCATION (call
))
1234 SET_EXPR_LOCATION (call
, input_location
);
1235 call_stack
.safe_push (call
);
1236 if (call_stack
.length () > (unsigned) max_constexpr_depth
)
1242 pop_cx_call_context (void)
1249 cx_error_context (void)
1251 vec
<tree
> r
= vNULL
;
1252 if (call_stack_tick
!= last_cx_error_tick
1253 && !call_stack
.is_empty ())
1255 last_cx_error_tick
= call_stack_tick
;
1259 /* Evaluate a call T to a GCC internal function when possible and return
1260 the evaluated result or, under the control of CTX, give an error, set
1261 NON_CONSTANT_P, and return the unevaluated call T otherwise. */
1264 cxx_eval_internal_function (const constexpr_ctx
*ctx
, tree t
,
1266 bool *non_constant_p
, bool *overflow_p
)
1268 enum tree_code opcode
= ERROR_MARK
;
1270 switch (CALL_EXPR_IFN (t
))
1272 case IFN_UBSAN_NULL
:
1273 case IFN_UBSAN_BOUNDS
:
1274 case IFN_UBSAN_VPTR
:
1277 case IFN_ADD_OVERFLOW
:
1280 case IFN_SUB_OVERFLOW
:
1281 opcode
= MINUS_EXPR
;
1283 case IFN_MUL_OVERFLOW
:
1289 error_at (EXPR_LOC_OR_LOC (t
, input_location
),
1290 "call to internal function %qE", t
);
1291 *non_constant_p
= true;
1295 /* Evaluate constant arguments using OPCODE and return a complex
1296 number containing the result and the overflow bit. */
1297 tree arg0
= cxx_eval_constant_expression (ctx
, CALL_EXPR_ARG (t
, 0), lval
,
1298 non_constant_p
, overflow_p
);
1299 tree arg1
= cxx_eval_constant_expression (ctx
, CALL_EXPR_ARG (t
, 1), lval
,
1300 non_constant_p
, overflow_p
);
1302 if (TREE_CODE (arg0
) == INTEGER_CST
&& TREE_CODE (arg1
) == INTEGER_CST
)
1304 location_t loc
= EXPR_LOC_OR_LOC (t
, input_location
);
1305 tree type
= TREE_TYPE (TREE_TYPE (t
));
1306 tree result
= fold_binary_loc (loc
, opcode
, type
,
1307 fold_convert_loc (loc
, type
, arg0
),
1308 fold_convert_loc (loc
, type
, arg1
));
1310 = build_int_cst (type
, arith_overflowed_p (opcode
, type
, arg0
, arg1
));
1311 /* Reset TREE_OVERFLOW to avoid warnings for the overflow. */
1312 if (TREE_OVERFLOW (result
))
1313 TREE_OVERFLOW (result
) = 0;
1315 return build_complex (TREE_TYPE (t
), result
, ovf
);
1318 *non_constant_p
= true;
1322 /* Subroutine of cxx_eval_constant_expression.
1323 Evaluate the call expression tree T in the context of OLD_CALL expression
1327 cxx_eval_call_expression (const constexpr_ctx
*ctx
, tree t
,
1329 bool *non_constant_p
, bool *overflow_p
)
1331 location_t loc
= EXPR_LOC_OR_LOC (t
, input_location
);
1332 tree fun
= get_function_named_in_call (t
);
1333 constexpr_call new_call
= { NULL
, NULL
, NULL
, 0 };
1336 if (fun
== NULL_TREE
)
1337 return cxx_eval_internal_function (ctx
, t
, lval
,
1338 non_constant_p
, overflow_p
);
1340 if (TREE_CODE (fun
) != FUNCTION_DECL
)
1342 /* Might be a constexpr function pointer. */
1343 fun
= cxx_eval_constant_expression (ctx
, fun
,
1344 /*lval*/false, non_constant_p
,
1347 if (TREE_CODE (fun
) == ADDR_EXPR
)
1348 fun
= TREE_OPERAND (fun
, 0);
1350 if (TREE_CODE (fun
) != FUNCTION_DECL
)
1352 if (!ctx
->quiet
&& !*non_constant_p
)
1353 error_at (loc
, "expression %qE does not designate a constexpr "
1355 *non_constant_p
= true;
1358 if (DECL_CLONED_FUNCTION_P (fun
))
1359 fun
= DECL_CLONED_FUNCTION (fun
);
1361 if (is_ubsan_builtin_p (fun
))
1364 if (is_builtin_fn (fun
))
1365 return cxx_eval_builtin_function_call (ctx
, t
, fun
,
1366 lval
, non_constant_p
, overflow_p
);
1367 if (!DECL_DECLARED_CONSTEXPR_P (fun
))
1371 error_at (loc
, "call to non-constexpr function %qD", fun
);
1372 explain_invalid_constexpr_fn (fun
);
1374 *non_constant_p
= true;
1378 constexpr_ctx new_ctx
= *ctx
;
1379 if (DECL_CONSTRUCTOR_P (fun
) && !ctx
->object
1380 && TREE_CODE (t
) == AGGR_INIT_EXPR
)
1382 /* We want to have an initialization target for an AGGR_INIT_EXPR.
1383 If we don't already have one in CTX, use the AGGR_INIT_EXPR_SLOT. */
1384 new_ctx
.object
= AGGR_INIT_EXPR_SLOT (t
);
1385 tree ctor
= new_ctx
.ctor
= build_constructor (DECL_CONTEXT (fun
), NULL
);
1386 CONSTRUCTOR_NO_IMPLICIT_ZERO (ctor
) = true;
1387 ctx
->values
->put (new_ctx
.object
, ctor
);
1391 /* Shortcut trivial constructor/op=. */
1392 if (trivial_fn_p (fun
))
1394 tree init
= NULL_TREE
;
1395 if (call_expr_nargs (t
) == 2)
1396 init
= convert_from_reference (get_nth_callarg (t
, 1));
1397 else if (TREE_CODE (t
) == AGGR_INIT_EXPR
1398 && AGGR_INIT_ZERO_FIRST (t
))
1399 init
= build_zero_init (DECL_CONTEXT (fun
), NULL_TREE
, false);
1402 tree op
= get_nth_callarg (t
, 0);
1403 if (is_dummy_object (op
))
1406 op
= build1 (INDIRECT_REF
, TREE_TYPE (TREE_TYPE (op
)), op
);
1407 tree set
= build2 (MODIFY_EXPR
, TREE_TYPE (op
), op
, init
);
1408 return cxx_eval_constant_expression (ctx
, set
, lval
,
1409 non_constant_p
, overflow_p
);
1413 /* We can't defer instantiating the function any longer. */
1414 if (!DECL_INITIAL (fun
)
1415 && DECL_TEMPLOID_INSTANTIATION (fun
))
1418 instantiate_decl (fun
, /*defer_ok*/false, /*expl_inst*/false);
1422 /* If in direct recursive call, optimize definition search. */
1423 if (ctx
&& ctx
->call
&& ctx
->call
->fundef
->decl
== fun
)
1424 new_call
.fundef
= ctx
->call
->fundef
;
1427 new_call
.fundef
= retrieve_constexpr_fundef (fun
);
1428 if (new_call
.fundef
== NULL
|| new_call
.fundef
->body
== NULL
1429 || fun
== current_function_decl
)
1433 /* We need to check for current_function_decl here in case we're
1434 being called during cp_fold_function, because at that point
1435 DECL_INITIAL is set properly and we have a fundef but we
1436 haven't lowered invisirefs yet (c++/70344). */
1437 if (DECL_INITIAL (fun
) == error_mark_node
1438 || fun
== current_function_decl
)
1439 error_at (loc
, "%qD called in a constant expression before its "
1440 "definition is complete", fun
);
1441 else if (DECL_INITIAL (fun
))
1443 /* The definition of fun was somehow unsuitable. */
1444 error_at (loc
, "%qD called in a constant expression", fun
);
1445 explain_invalid_constexpr_fn (fun
);
1448 error_at (loc
, "%qD used before its definition", fun
);
1450 *non_constant_p
= true;
1455 bool non_constant_args
= false;
1456 cxx_bind_parameters_in_call (ctx
, t
, &new_call
,
1457 non_constant_p
, overflow_p
, &non_constant_args
);
1458 if (*non_constant_p
)
1461 depth_ok
= push_cx_call_context (t
);
1463 tree result
= NULL_TREE
;
1465 constexpr_call
*entry
= NULL
;
1466 if (depth_ok
&& !non_constant_args
)
1468 new_call
.hash
= iterative_hash_template_arg
1469 (new_call
.bindings
, constexpr_fundef_hasher::hash (new_call
.fundef
));
1471 /* If we have seen this call before, we are done. */
1472 maybe_initialize_constexpr_call_table ();
1473 constexpr_call
**slot
1474 = constexpr_call_table
->find_slot (&new_call
, INSERT
);
1478 /* We need to keep a pointer to the entry, not just the slot, as the
1479 slot can move in the call to cxx_eval_builtin_function_call. */
1480 *slot
= entry
= ggc_alloc
<constexpr_call
> ();
1483 /* Calls that are in progress have their result set to NULL,
1484 so that we can detect circular dependencies. */
1485 else if (entry
->result
== NULL
)
1488 error ("call has circular dependency");
1489 *non_constant_p
= true;
1490 entry
->result
= result
= error_mark_node
;
1493 result
= entry
->result
;
1499 error ("constexpr evaluation depth exceeds maximum of %d (use "
1500 "-fconstexpr-depth= to increase the maximum)",
1501 max_constexpr_depth
);
1502 *non_constant_p
= true;
1503 result
= error_mark_node
;
1507 if (!result
|| result
== error_mark_node
)
1509 gcc_assert (DECL_SAVED_TREE (fun
));
1510 tree body
, parms
, res
;
1512 /* Reuse or create a new unshared copy of this function's body. */
1513 tree copy
= get_fundef_copy (fun
);
1514 body
= TREE_PURPOSE (copy
);
1515 parms
= TREE_VALUE (copy
);
1516 res
= TREE_TYPE (copy
);
1518 /* Associate the bindings with the remapped parms. */
1519 tree bound
= new_call
.bindings
;
1520 tree remapped
= parms
;
1523 tree oparm
= TREE_PURPOSE (bound
);
1524 tree arg
= TREE_VALUE (bound
);
1525 gcc_assert (DECL_NAME (remapped
) == DECL_NAME (oparm
));
1526 /* Don't share a CONSTRUCTOR that might be changed. */
1527 arg
= unshare_constructor (arg
);
1528 ctx
->values
->put (remapped
, arg
);
1529 bound
= TREE_CHAIN (bound
);
1530 remapped
= DECL_CHAIN (remapped
);
1532 /* Add the RESULT_DECL to the values map, too. */
1533 tree slot
= NULL_TREE
;
1534 if (DECL_BY_REFERENCE (res
))
1536 slot
= AGGR_INIT_EXPR_SLOT (t
);
1537 tree addr
= build_address (slot
);
1538 addr
= build_nop (TREE_TYPE (res
), addr
);
1539 ctx
->values
->put (res
, addr
);
1540 ctx
->values
->put (slot
, NULL_TREE
);
1543 ctx
->values
->put (res
, NULL_TREE
);
1545 /* Track the callee's evaluated SAVE_EXPRs so that we can forget
1546 their values after the call. */
1547 constexpr_ctx ctx_with_save_exprs
= *ctx
;
1548 hash_set
<tree
> save_exprs
;
1549 ctx_with_save_exprs
.save_exprs
= &save_exprs
;
1551 tree jump_target
= NULL_TREE
;
1552 cxx_eval_constant_expression (&ctx_with_save_exprs
, body
,
1553 lval
, non_constant_p
, overflow_p
,
1556 if (DECL_CONSTRUCTOR_P (fun
))
1557 /* This can be null for a subobject constructor call, in
1558 which case what we care about is the initialization
1559 side-effects rather than the value. We could get at the
1560 value by evaluating *this, but we don't bother; there's
1561 no need to put such a call in the hash table. */
1562 result
= lval
? ctx
->object
: ctx
->ctor
;
1563 else if (VOID_TYPE_P (TREE_TYPE (res
)))
1567 result
= *ctx
->values
->get (slot
? slot
: res
);
1568 if (result
== NULL_TREE
&& !*non_constant_p
)
1571 error ("constexpr call flows off the end "
1573 *non_constant_p
= true;
1577 /* Forget the saved values of the callee's SAVE_EXPRs. */
1578 for (hash_set
<tree
>::iterator iter
= save_exprs
.begin();
1579 iter
!= save_exprs
.end(); ++iter
)
1580 ctx_with_save_exprs
.values
->remove (*iter
);
1582 /* Remove the parms/result from the values map. Is it worth
1583 bothering to do this when the map itself is only live for
1584 one constexpr evaluation? If so, maybe also clear out
1585 other vars from call, maybe in BIND_EXPR handling? */
1586 ctx
->values
->remove (res
);
1588 ctx
->values
->remove (slot
);
1589 for (tree parm
= parms
; parm
; parm
= TREE_CHAIN (parm
))
1590 ctx
->values
->remove (parm
);
1592 /* Make the unshared function copy we used available for re-use. */
1593 save_fundef_copy (fun
, copy
);
1596 if (result
== error_mark_node
)
1597 *non_constant_p
= true;
1598 if (*non_constant_p
|| *overflow_p
)
1599 result
= error_mark_node
;
1603 entry
->result
= result
;
1606 pop_cx_call_context ();
1607 return unshare_constructor (result
);
1610 /* FIXME speed this up, it's taking 16% of compile time on sieve testcase. */
1613 reduced_constant_expression_p (tree t
)
1615 switch (TREE_CODE (t
))
1618 /* Even if we can't lower this yet, it's constant. */
1622 /* And we need to handle PTRMEM_CST wrapped in a CONSTRUCTOR. */
1623 tree elt
; unsigned HOST_WIDE_INT idx
;
1624 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (t
), idx
, elt
)
1625 if (!reduced_constant_expression_p (elt
))
1630 /* FIXME are we calling this too much? */
1631 return initializer_constant_valid_p (t
, TREE_TYPE (t
)) != NULL_TREE
;
1635 /* Some expressions may have constant operands but are not constant
1636 themselves, such as 1/0. Call this function (or rather, the macro
1637 following it) to check for that condition.
1639 We only call this in places that require an arithmetic constant, not in
1640 places where we might have a non-constant expression that can be a
1641 component of a constant expression, such as the address of a constexpr
1642 variable that might be dereferenced later. */
1645 verify_constant (tree t
, bool allow_non_constant
, bool *non_constant_p
,
1648 if (!*non_constant_p
&& !reduced_constant_expression_p (t
))
1650 if (!allow_non_constant
)
1651 error ("%q+E is not a constant expression", t
);
1652 *non_constant_p
= true;
1654 if (TREE_OVERFLOW_P (t
))
1656 if (!allow_non_constant
)
1658 permerror (input_location
, "overflow in constant expression");
1659 /* If we're being permissive (and are in an enforcing
1660 context), ignore the overflow. */
1661 if (flag_permissive
)
1662 return *non_constant_p
;
1666 return *non_constant_p
;
1669 /* Check whether the shift operation with code CODE and type TYPE on LHS
1670 and RHS is undefined. If it is, give an error with an explanation,
1671 and return true; return false otherwise. */
1674 cxx_eval_check_shift_p (location_t loc
, const constexpr_ctx
*ctx
,
1675 enum tree_code code
, tree type
, tree lhs
, tree rhs
)
1677 if ((code
!= LSHIFT_EXPR
&& code
!= RSHIFT_EXPR
)
1678 || TREE_CODE (lhs
) != INTEGER_CST
1679 || TREE_CODE (rhs
) != INTEGER_CST
)
1682 tree lhstype
= TREE_TYPE (lhs
);
1683 unsigned HOST_WIDE_INT uprec
= TYPE_PRECISION (TREE_TYPE (lhs
));
1685 /* [expr.shift] The behavior is undefined if the right operand
1686 is negative, or greater than or equal to the length in bits
1687 of the promoted left operand. */
1688 if (tree_int_cst_sgn (rhs
) == -1)
1691 permerror (loc
, "right operand of shift expression %q+E is negative",
1692 build2_loc (loc
, code
, type
, lhs
, rhs
));
1693 return (!flag_permissive
|| ctx
->quiet
);
1695 if (compare_tree_int (rhs
, uprec
) >= 0)
1698 permerror (loc
, "right operand of shift expression %q+E is >= than "
1699 "the precision of the left operand",
1700 build2_loc (loc
, code
, type
, lhs
, rhs
));
1701 return (!flag_permissive
|| ctx
->quiet
);
1704 /* The value of E1 << E2 is E1 left-shifted E2 bit positions; [...]
1705 if E1 has a signed type and non-negative value, and E1x2^E2 is
1706 representable in the corresponding unsigned type of the result type,
1707 then that value, converted to the result type, is the resulting value;
1708 otherwise, the behavior is undefined. */
1709 if (code
== LSHIFT_EXPR
&& !TYPE_UNSIGNED (lhstype
)
1710 && (cxx_dialect
>= cxx11
))
1712 if (tree_int_cst_sgn (lhs
) == -1)
1716 "left operand of shift expression %q+E is negative",
1717 build2_loc (loc
, code
, type
, lhs
, rhs
));
1718 return (!flag_permissive
|| ctx
->quiet
);
1720 /* For signed x << y the following:
1721 (unsigned) x >> ((prec (lhs) - 1) - y)
1722 if > 1, is undefined. The right-hand side of this formula
1723 is the highest bit of the LHS that can be set (starting from 0),
1724 so that the shift doesn't overflow. We then right-shift the LHS
1725 to see whether any other bit is set making the original shift
1726 undefined -- the result is not representable in the corresponding
1728 tree t
= build_int_cst (unsigned_type_node
, uprec
- 1);
1729 t
= fold_build2 (MINUS_EXPR
, unsigned_type_node
, t
, rhs
);
1730 tree ulhs
= fold_convert (unsigned_type_for (lhstype
), lhs
);
1731 t
= fold_build2 (RSHIFT_EXPR
, TREE_TYPE (ulhs
), ulhs
, t
);
1732 if (tree_int_cst_lt (integer_one_node
, t
))
1735 permerror (loc
, "shift expression %q+E overflows",
1736 build2_loc (loc
, code
, type
, lhs
, rhs
));
1737 return (!flag_permissive
|| ctx
->quiet
);
1743 /* Subroutine of cxx_eval_constant_expression.
1744 Attempt to reduce the unary expression tree T to a compile time value.
1745 If successful, return the value. Otherwise issue a diagnostic
1746 and return error_mark_node. */
1749 cxx_eval_unary_expression (const constexpr_ctx
*ctx
, tree t
,
1751 bool *non_constant_p
, bool *overflow_p
)
1754 tree orig_arg
= TREE_OPERAND (t
, 0);
1755 tree arg
= cxx_eval_constant_expression (ctx
, orig_arg
, /*lval*/false,
1756 non_constant_p
, overflow_p
);
1757 VERIFY_CONSTANT (arg
);
1758 location_t loc
= EXPR_LOCATION (t
);
1759 enum tree_code code
= TREE_CODE (t
);
1760 tree type
= TREE_TYPE (t
);
1761 r
= fold_unary_loc (loc
, code
, type
, arg
);
1764 if (arg
== orig_arg
)
1767 r
= build1_loc (loc
, code
, type
, arg
);
1769 VERIFY_CONSTANT (r
);
1773 /* Subroutine of cxx_eval_constant_expression.
1774 Like cxx_eval_unary_expression, except for binary expressions. */
1777 cxx_eval_binary_expression (const constexpr_ctx
*ctx
, tree t
,
1779 bool *non_constant_p
, bool *overflow_p
)
1782 tree orig_lhs
= TREE_OPERAND (t
, 0);
1783 tree orig_rhs
= TREE_OPERAND (t
, 1);
1785 lhs
= cxx_eval_constant_expression (ctx
, orig_lhs
, /*lval*/false,
1786 non_constant_p
, overflow_p
);
1787 /* Don't VERIFY_CONSTANT here, it's unnecessary and will break pointer
1789 if (*non_constant_p
)
1791 rhs
= cxx_eval_constant_expression (ctx
, orig_rhs
, /*lval*/false,
1792 non_constant_p
, overflow_p
);
1793 if (*non_constant_p
)
1796 location_t loc
= EXPR_LOCATION (t
);
1797 enum tree_code code
= TREE_CODE (t
);
1798 tree type
= TREE_TYPE (t
);
1800 if (code
== EQ_EXPR
|| code
== NE_EXPR
)
1802 bool is_code_eq
= (code
== EQ_EXPR
);
1804 if (TREE_CODE (lhs
) == PTRMEM_CST
1805 && TREE_CODE (rhs
) == PTRMEM_CST
)
1806 r
= constant_boolean_node (cp_tree_equal (lhs
, rhs
) == is_code_eq
,
1808 else if ((TREE_CODE (lhs
) == PTRMEM_CST
1809 || TREE_CODE (rhs
) == PTRMEM_CST
)
1810 && (null_member_pointer_value_p (lhs
)
1811 || null_member_pointer_value_p (rhs
)))
1812 r
= constant_boolean_node (!is_code_eq
, type
);
1816 r
= fold_binary_loc (loc
, code
, type
, lhs
, rhs
);
1820 if (lhs
== orig_lhs
&& rhs
== orig_rhs
)
1823 r
= build2_loc (loc
, code
, type
, lhs
, rhs
);
1825 else if (cxx_eval_check_shift_p (loc
, ctx
, code
, type
, lhs
, rhs
))
1826 *non_constant_p
= true;
1827 /* Don't VERIFY_CONSTANT if this might be dealing with a pointer to
1828 a local array in a constexpr function. */
1829 bool ptr
= POINTER_TYPE_P (TREE_TYPE (lhs
));
1831 VERIFY_CONSTANT (r
);
1835 /* Subroutine of cxx_eval_constant_expression.
1836 Attempt to evaluate condition expressions. Dead branches are not
1840 cxx_eval_conditional_expression (const constexpr_ctx
*ctx
, tree t
,
1842 bool *non_constant_p
, bool *overflow_p
,
1845 tree val
= cxx_eval_constant_expression (ctx
, TREE_OPERAND (t
, 0),
1847 non_constant_p
, overflow_p
);
1848 VERIFY_CONSTANT (val
);
1849 /* Don't VERIFY_CONSTANT the other operands. */
1850 if (integer_zerop (val
))
1851 return cxx_eval_constant_expression (ctx
, TREE_OPERAND (t
, 2),
1853 non_constant_p
, overflow_p
,
1855 return cxx_eval_constant_expression (ctx
, TREE_OPERAND (t
, 1),
1857 non_constant_p
, overflow_p
,
1861 /* Returns less than, equal to, or greater than zero if KEY is found to be
1862 less than, to match, or to be greater than the constructor_elt's INDEX. */
1865 array_index_cmp (tree key
, tree index
)
1867 gcc_assert (TREE_CODE (key
) == INTEGER_CST
);
1869 switch (TREE_CODE (index
))
1872 return tree_int_cst_compare (key
, index
);
1875 tree lo
= TREE_OPERAND (index
, 0);
1876 tree hi
= TREE_OPERAND (index
, 1);
1877 if (tree_int_cst_lt (key
, lo
))
1879 else if (tree_int_cst_lt (hi
, key
))
1889 /* Returns the index of the constructor_elt of ARY which matches DINDEX, or -1
1890 if none. If INSERT is true, insert a matching element rather than fail. */
1892 static HOST_WIDE_INT
1893 find_array_ctor_elt (tree ary
, tree dindex
, bool insert
= false)
1895 if (tree_int_cst_sgn (dindex
) < 0)
1898 unsigned HOST_WIDE_INT i
= tree_to_uhwi (dindex
);
1899 vec
<constructor_elt
, va_gc
> *elts
= CONSTRUCTOR_ELTS (ary
);
1900 unsigned HOST_WIDE_INT len
= vec_safe_length (elts
);
1902 unsigned HOST_WIDE_INT end
= len
;
1903 unsigned HOST_WIDE_INT begin
= 0;
1905 /* If the last element of the CONSTRUCTOR has its own index, we can assume
1906 that the same is true of the other elements and index directly. */
1909 tree cindex
= (*elts
)[end
-1].index
;
1910 if (TREE_CODE (cindex
) == INTEGER_CST
1911 && compare_tree_int (cindex
, end
-1) == 0)
1920 /* Otherwise, find a matching index by means of a binary search. */
1921 while (begin
!= end
)
1923 unsigned HOST_WIDE_INT middle
= (begin
+ end
) / 2;
1924 constructor_elt
&elt
= (*elts
)[middle
];
1925 tree idx
= elt
.index
;
1927 int cmp
= array_index_cmp (dindex
, idx
);
1934 if (insert
&& TREE_CODE (idx
) == RANGE_EXPR
)
1936 /* We need to split the range. */
1938 tree lo
= TREE_OPERAND (idx
, 0);
1939 tree hi
= TREE_OPERAND (idx
, 1);
1940 if (tree_int_cst_lt (lo
, dindex
))
1942 /* There are still some lower elts; shorten the range. */
1943 tree new_hi
= int_const_binop (MINUS_EXPR
, dindex
,
1945 if (tree_int_cst_equal (lo
, new_hi
))
1946 /* Only one element left, no longer a range. */
1949 TREE_OPERAND (idx
, 1) = new_hi
;
1950 /* Append the element we want to insert. */
1953 e
.value
= unshare_constructor (elt
.value
);
1954 vec_safe_insert (CONSTRUCTOR_ELTS (ary
), middle
, e
);
1957 /* No lower elts, the range elt is now ours. */
1960 if (tree_int_cst_lt (dindex
, hi
))
1962 /* There are still some higher elts; append a range. */
1963 tree new_lo
= int_const_binop (PLUS_EXPR
, dindex
,
1965 if (tree_int_cst_equal (new_lo
, hi
))
1968 e
.index
= build2 (RANGE_EXPR
, sizetype
, new_lo
, hi
);
1969 e
.value
= unshare_constructor (elt
.value
);
1970 vec_safe_insert (CONSTRUCTOR_ELTS (ary
), middle
+1, e
);
1979 constructor_elt e
= { dindex
, NULL_TREE
};
1980 vec_safe_insert (CONSTRUCTOR_ELTS (ary
), end
, e
);
1987 /* Under the control of CTX, issue a detailed diagnostic for
1988 an out-of-bounds subscript INDEX into the expression ARRAY. */
1991 diag_array_subscript (const constexpr_ctx
*ctx
, tree array
, tree index
)
1995 tree arraytype
= TREE_TYPE (array
);
1997 /* Convert the unsigned array subscript to a signed integer to avoid
1998 printing huge numbers for small negative values. */
1999 tree sidx
= fold_convert (ssizetype
, index
);
2002 error ("array subscript value %qE is outside the bounds "
2003 "of array %qD of type %qT", sidx
, array
, arraytype
);
2004 inform (DECL_SOURCE_LOCATION (array
), "declared here");
2007 error ("array subscript value %qE is outside the bounds "
2008 "of array type %qT", sidx
, arraytype
);
2012 /* Subroutine of cxx_eval_constant_expression.
2013 Attempt to reduce a reference to an array slot. */
2016 cxx_eval_array_reference (const constexpr_ctx
*ctx
, tree t
,
2018 bool *non_constant_p
, bool *overflow_p
)
2020 tree oldary
= TREE_OPERAND (t
, 0);
2021 tree ary
= cxx_eval_constant_expression (ctx
, oldary
,
2023 non_constant_p
, overflow_p
);
2027 unsigned len
, elem_nchars
= 1;
2028 if (*non_constant_p
)
2030 oldidx
= TREE_OPERAND (t
, 1);
2031 index
= cxx_eval_constant_expression (ctx
, oldidx
,
2033 non_constant_p
, overflow_p
);
2034 VERIFY_CONSTANT (index
);
2035 if (lval
&& ary
== oldary
&& index
== oldidx
)
2038 return build4 (ARRAY_REF
, TREE_TYPE (t
), ary
, index
, NULL
, NULL
);
2039 elem_type
= TREE_TYPE (TREE_TYPE (ary
));
2040 if (TREE_CODE (ary
) == VIEW_CONVERT_EXPR
2041 && VECTOR_TYPE_P (TREE_TYPE (TREE_OPERAND (ary
, 0)))
2042 && TREE_TYPE (t
) == TREE_TYPE (TREE_TYPE (TREE_OPERAND (ary
, 0))))
2043 ary
= TREE_OPERAND (ary
, 0);
2044 if (TREE_CODE (ary
) == CONSTRUCTOR
)
2045 len
= CONSTRUCTOR_NELTS (ary
);
2046 else if (TREE_CODE (ary
) == STRING_CST
)
2048 elem_nchars
= (TYPE_PRECISION (elem_type
)
2049 / TYPE_PRECISION (char_type_node
));
2050 len
= (unsigned) TREE_STRING_LENGTH (ary
) / elem_nchars
;
2052 else if (TREE_CODE (ary
) == VECTOR_CST
)
2053 len
= VECTOR_CST_NELTS (ary
);
2056 /* We can't do anything with other tree codes, so use
2057 VERIFY_CONSTANT to complain and fail. */
2058 VERIFY_CONSTANT (ary
);
2062 if (!tree_fits_shwi_p (index
)
2063 || (i
= tree_to_shwi (index
)) < 0)
2065 diag_array_subscript (ctx
, ary
, index
);
2066 *non_constant_p
= true;
2071 if (TREE_CODE (TREE_TYPE (ary
)) == ARRAY_TYPE
)
2072 nelts
= array_type_nelts_top (TREE_TYPE (ary
));
2073 else if (VECTOR_TYPE_P (TREE_TYPE (ary
)))
2074 nelts
= size_int (TYPE_VECTOR_SUBPARTS (TREE_TYPE (ary
)));
2078 /* For VLAs, the number of elements won't be an integer constant. */
2079 nelts
= cxx_eval_constant_expression (ctx
, nelts
, false, non_constant_p
,
2081 VERIFY_CONSTANT (nelts
);
2082 if (!tree_int_cst_lt (index
, nelts
))
2084 diag_array_subscript (ctx
, ary
, index
);
2085 *non_constant_p
= true;
2090 if (TREE_CODE (ary
) == CONSTRUCTOR
)
2092 HOST_WIDE_INT ix
= find_array_ctor_elt (ary
, index
);
2102 if (TREE_CODE (ary
) == CONSTRUCTOR
2103 && CONSTRUCTOR_NO_IMPLICIT_ZERO (ary
))
2105 /* 'ary' is part of the aggregate initializer we're currently
2106 building; if there's no initializer for this element yet,
2109 error ("accessing uninitialized array element");
2110 *non_constant_p
= true;
2114 /* If it's within the array bounds but doesn't have an explicit
2115 initializer, it's value-initialized. */
2116 tree val
= build_value_init (elem_type
, tf_warning_or_error
);
2117 return cxx_eval_constant_expression (ctx
, val
, lval
, non_constant_p
,
2121 if (TREE_CODE (ary
) == CONSTRUCTOR
)
2122 return (*CONSTRUCTOR_ELTS (ary
))[i
].value
;
2123 else if (TREE_CODE (ary
) == VECTOR_CST
)
2124 return VECTOR_CST_ELT (ary
, i
);
2125 else if (elem_nchars
== 1)
2126 return build_int_cst (cv_unqualified (TREE_TYPE (TREE_TYPE (ary
))),
2127 TREE_STRING_POINTER (ary
)[i
]);
2130 tree type
= cv_unqualified (TREE_TYPE (TREE_TYPE (ary
)));
2131 return native_interpret_expr (type
, (const unsigned char *)
2132 TREE_STRING_POINTER (ary
)
2133 + i
* elem_nchars
, elem_nchars
);
2135 /* Don't VERIFY_CONSTANT here. */
2138 /* Subroutine of cxx_eval_constant_expression.
2139 Attempt to reduce a field access of a value of class type. */
2142 cxx_eval_component_reference (const constexpr_ctx
*ctx
, tree t
,
2144 bool *non_constant_p
, bool *overflow_p
)
2146 unsigned HOST_WIDE_INT i
;
2149 tree part
= TREE_OPERAND (t
, 1);
2150 tree orig_whole
= TREE_OPERAND (t
, 0);
2151 tree whole
= cxx_eval_constant_expression (ctx
, orig_whole
,
2153 non_constant_p
, overflow_p
);
2154 if (TREE_CODE (whole
) == PTRMEM_CST
)
2155 whole
= cplus_expand_constant (whole
);
2156 if (whole
== orig_whole
)
2159 return fold_build3 (COMPONENT_REF
, TREE_TYPE (t
),
2160 whole
, part
, NULL_TREE
);
2161 /* Don't VERIFY_CONSTANT here; we only want to check that we got a
2163 if (!*non_constant_p
&& TREE_CODE (whole
) != CONSTRUCTOR
)
2166 error ("%qE is not a constant expression", orig_whole
);
2167 *non_constant_p
= true;
2169 if (DECL_MUTABLE_P (part
))
2172 error ("mutable %qD is not usable in a constant expression", part
);
2173 *non_constant_p
= true;
2175 if (*non_constant_p
)
2177 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (whole
), i
, field
, value
)
2184 /* We're in the middle of initializing it. */
2188 if (TREE_CODE (TREE_TYPE (whole
)) == UNION_TYPE
2189 && CONSTRUCTOR_NELTS (whole
) > 0)
2191 /* DR 1188 says we don't have to deal with this. */
2193 error ("accessing %qD member instead of initialized %qD member in "
2194 "constant expression", part
, CONSTRUCTOR_ELT (whole
, 0)->index
);
2195 *non_constant_p
= true;
2199 /* We only create a CONSTRUCTOR for a subobject when we modify it, so empty
2200 classes never get represented; throw together a value now. */
2201 if (is_really_empty_class (TREE_TYPE (t
)))
2202 return build_constructor (TREE_TYPE (t
), NULL
);
2204 if (CONSTRUCTOR_NO_IMPLICIT_ZERO (whole
))
2206 /* 'whole' is part of the aggregate initializer we're currently
2207 building; if there's no initializer for this member yet, that's an
2210 error ("accessing uninitialized member %qD", part
);
2211 *non_constant_p
= true;
2215 /* If there's no explicit init for this field, it's value-initialized. */
2216 value
= build_value_init (TREE_TYPE (t
), tf_warning_or_error
);
2217 return cxx_eval_constant_expression (ctx
, value
,
2219 non_constant_p
, overflow_p
);
2222 /* Subroutine of cxx_eval_constant_expression.
2223 Attempt to reduce a field access of a value of class type that is
2224 expressed as a BIT_FIELD_REF. */
2227 cxx_eval_bit_field_ref (const constexpr_ctx
*ctx
, tree t
,
2229 bool *non_constant_p
, bool *overflow_p
)
2231 tree orig_whole
= TREE_OPERAND (t
, 0);
2232 tree retval
, fldval
, utype
, mask
;
2233 bool fld_seen
= false;
2234 HOST_WIDE_INT istart
, isize
;
2235 tree whole
= cxx_eval_constant_expression (ctx
, orig_whole
,
2237 non_constant_p
, overflow_p
);
2238 tree start
, field
, value
;
2239 unsigned HOST_WIDE_INT i
;
2241 if (whole
== orig_whole
)
2243 /* Don't VERIFY_CONSTANT here; we only want to check that we got a
2245 if (!*non_constant_p
2246 && TREE_CODE (whole
) != VECTOR_CST
2247 && TREE_CODE (whole
) != CONSTRUCTOR
)
2250 error ("%qE is not a constant expression", orig_whole
);
2251 *non_constant_p
= true;
2253 if (*non_constant_p
)
2256 if (TREE_CODE (whole
) == VECTOR_CST
)
2257 return fold_ternary (BIT_FIELD_REF
, TREE_TYPE (t
), whole
,
2258 TREE_OPERAND (t
, 1), TREE_OPERAND (t
, 2));
2260 start
= TREE_OPERAND (t
, 2);
2261 istart
= tree_to_shwi (start
);
2262 isize
= tree_to_shwi (TREE_OPERAND (t
, 1));
2263 utype
= TREE_TYPE (t
);
2264 if (!TYPE_UNSIGNED (utype
))
2265 utype
= build_nonstandard_integer_type (TYPE_PRECISION (utype
), 1);
2266 retval
= build_int_cst (utype
, 0);
2267 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (whole
), i
, field
, value
)
2269 tree bitpos
= bit_position (field
);
2270 if (bitpos
== start
&& DECL_SIZE (field
) == TREE_OPERAND (t
, 1))
2272 if (TREE_CODE (TREE_TYPE (field
)) == INTEGER_TYPE
2273 && TREE_CODE (value
) == INTEGER_CST
2274 && tree_fits_shwi_p (bitpos
)
2275 && tree_fits_shwi_p (DECL_SIZE (field
)))
2277 HOST_WIDE_INT bit
= tree_to_shwi (bitpos
);
2278 HOST_WIDE_INT sz
= tree_to_shwi (DECL_SIZE (field
));
2279 HOST_WIDE_INT shift
;
2280 if (bit
>= istart
&& bit
+ sz
<= istart
+ isize
)
2282 fldval
= fold_convert (utype
, value
);
2283 mask
= build_int_cst_type (utype
, -1);
2284 mask
= fold_build2 (LSHIFT_EXPR
, utype
, mask
,
2285 size_int (TYPE_PRECISION (utype
) - sz
));
2286 mask
= fold_build2 (RSHIFT_EXPR
, utype
, mask
,
2287 size_int (TYPE_PRECISION (utype
) - sz
));
2288 fldval
= fold_build2 (BIT_AND_EXPR
, utype
, fldval
, mask
);
2289 shift
= bit
- istart
;
2290 if (BYTES_BIG_ENDIAN
)
2291 shift
= TYPE_PRECISION (utype
) - shift
- sz
;
2292 fldval
= fold_build2 (LSHIFT_EXPR
, utype
, fldval
,
2294 retval
= fold_build2 (BIT_IOR_EXPR
, utype
, retval
, fldval
);
2300 return fold_convert (TREE_TYPE (t
), retval
);
2302 return error_mark_node
;
2305 /* Subroutine of cxx_eval_constant_expression.
2306 Evaluate a short-circuited logical expression T in the context
2307 of a given constexpr CALL. BAILOUT_VALUE is the value for
2308 early return. CONTINUE_VALUE is used here purely for
2309 sanity check purposes. */
2312 cxx_eval_logical_expression (const constexpr_ctx
*ctx
, tree t
,
2313 tree bailout_value
, tree continue_value
,
2315 bool *non_constant_p
, bool *overflow_p
)
2318 tree lhs
= cxx_eval_constant_expression (ctx
, TREE_OPERAND (t
, 0),
2320 non_constant_p
, overflow_p
);
2321 VERIFY_CONSTANT (lhs
);
2322 if (tree_int_cst_equal (lhs
, bailout_value
))
2324 gcc_assert (tree_int_cst_equal (lhs
, continue_value
));
2325 r
= cxx_eval_constant_expression (ctx
, TREE_OPERAND (t
, 1),
2326 lval
, non_constant_p
,
2328 VERIFY_CONSTANT (r
);
2332 /* REF is a COMPONENT_REF designating a particular field. V is a vector of
2333 CONSTRUCTOR elements to initialize (part of) an object containing that
2334 field. Return a pointer to the constructor_elt corresponding to the
2335 initialization of the field. */
2337 static constructor_elt
*
2338 base_field_constructor_elt (vec
<constructor_elt
, va_gc
> *v
, tree ref
)
2340 tree aggr
= TREE_OPERAND (ref
, 0);
2341 tree field
= TREE_OPERAND (ref
, 1);
2343 constructor_elt
*ce
;
2345 gcc_assert (TREE_CODE (ref
) == COMPONENT_REF
);
2347 if (TREE_CODE (aggr
) == COMPONENT_REF
)
2349 constructor_elt
*base_ce
2350 = base_field_constructor_elt (v
, aggr
);
2351 v
= CONSTRUCTOR_ELTS (base_ce
->value
);
2354 for (i
= 0; vec_safe_iterate (v
, i
, &ce
); ++i
)
2355 if (ce
->index
== field
)
2362 /* Some of the expressions fed to the constexpr mechanism are calls to
2363 constructors, which have type void. In that case, return the type being
2364 initialized by the constructor. */
2367 initialized_type (tree t
)
2371 tree type
= cv_unqualified (TREE_TYPE (t
));
2372 if (TREE_CODE (t
) == CALL_EXPR
|| TREE_CODE (t
) == AGGR_INIT_EXPR
)
2374 /* A constructor call has void type, so we need to look deeper. */
2375 tree fn
= get_function_named_in_call (t
);
2376 if (fn
&& TREE_CODE (fn
) == FUNCTION_DECL
2377 && DECL_CXX_CONSTRUCTOR_P (fn
))
2378 type
= DECL_CONTEXT (fn
);
2383 /* We're about to initialize element INDEX of an array or class from VALUE.
2384 Set up NEW_CTX appropriately by adjusting .object to refer to the
2385 subobject and creating a new CONSTRUCTOR if the element is itself
2386 a class or array. */
2389 init_subob_ctx (const constexpr_ctx
*ctx
, constexpr_ctx
&new_ctx
,
2390 tree index
, tree
&value
)
2394 if (index
&& TREE_CODE (index
) != INTEGER_CST
2395 && TREE_CODE (index
) != FIELD_DECL
)
2396 /* This won't have an element in the new CONSTRUCTOR. */
2399 tree type
= initialized_type (value
);
2400 if (!AGGREGATE_TYPE_P (type
) && !VECTOR_TYPE_P (type
))
2401 /* A non-aggregate member doesn't get its own CONSTRUCTOR. */
2404 /* The sub-aggregate initializer might contain a placeholder;
2405 update object to refer to the subobject and ctor to refer to
2406 the (newly created) sub-initializer. */
2408 new_ctx
.object
= build_ctor_subob_ref (index
, type
, ctx
->object
);
2409 tree elt
= build_constructor (type
, NULL
);
2410 CONSTRUCTOR_NO_IMPLICIT_ZERO (elt
) = true;
2413 if (TREE_CODE (value
) == TARGET_EXPR
)
2414 /* Avoid creating another CONSTRUCTOR when we expand the TARGET_EXPR. */
2415 value
= TARGET_EXPR_INITIAL (value
);
2418 /* We're about to process an initializer for a class or array TYPE. Make
2419 sure that CTX is set up appropriately. */
2422 verify_ctor_sanity (const constexpr_ctx
*ctx
, tree type
)
2424 /* We don't bother building a ctor for an empty base subobject. */
2425 if (is_empty_class (type
))
2428 /* We're in the middle of an initializer that might involve placeholders;
2429 our caller should have created a CONSTRUCTOR for us to put the
2430 initializer into. We will either return that constructor or T. */
2431 gcc_assert (ctx
->ctor
);
2432 gcc_assert (same_type_ignoring_top_level_qualifiers_p
2433 (type
, TREE_TYPE (ctx
->ctor
)));
2434 /* We used to check that ctx->ctor was empty, but that isn't the case when
2435 the object is zero-initialized before calling the constructor. */
2437 gcc_assert (same_type_ignoring_top_level_qualifiers_p
2438 (type
, TREE_TYPE (ctx
->object
)));
2439 gcc_assert (!ctx
->object
|| !DECL_P (ctx
->object
)
2440 || *(ctx
->values
->get (ctx
->object
)) == ctx
->ctor
);
2443 /* Subroutine of cxx_eval_constant_expression.
2444 The expression tree T denotes a C-style array or a C-style
2445 aggregate. Reduce it to a constant expression. */
2448 cxx_eval_bare_aggregate (const constexpr_ctx
*ctx
, tree t
,
2450 bool *non_constant_p
, bool *overflow_p
)
2452 vec
<constructor_elt
, va_gc
> *v
= CONSTRUCTOR_ELTS (t
);
2453 bool changed
= false;
2454 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (t
));
2455 tree type
= TREE_TYPE (t
);
2457 constexpr_ctx new_ctx
;
2458 if (TYPE_PTRMEMFUNC_P (type
) || VECTOR_TYPE_P (type
))
2460 /* We don't really need the ctx->ctor business for a PMF or
2461 vector, but it's simpler to use the same code. */
2463 new_ctx
.ctor
= build_constructor (type
, NULL
);
2464 new_ctx
.object
= NULL_TREE
;
2467 verify_ctor_sanity (ctx
, type
);
2468 vec
<constructor_elt
, va_gc
> **p
= &CONSTRUCTOR_ELTS (ctx
->ctor
);
2469 vec_alloc (*p
, vec_safe_length (v
));
2473 bool constant_p
= true;
2474 bool side_effects_p
= false;
2475 FOR_EACH_CONSTRUCTOR_ELT (v
, i
, index
, value
)
2477 tree orig_value
= value
;
2478 init_subob_ctx (ctx
, new_ctx
, index
, value
);
2479 if (new_ctx
.ctor
!= ctx
->ctor
)
2480 /* If we built a new CONSTRUCTOR, attach it now so that other
2481 initializers can refer to it. */
2482 CONSTRUCTOR_APPEND_ELT (*p
, index
, new_ctx
.ctor
);
2483 tree elt
= cxx_eval_constant_expression (&new_ctx
, value
,
2485 non_constant_p
, overflow_p
);
2486 /* Don't VERIFY_CONSTANT here. */
2487 if (ctx
->quiet
&& *non_constant_p
)
2489 if (elt
!= orig_value
)
2492 if (!TREE_CONSTANT (elt
))
2494 if (TREE_SIDE_EFFECTS (elt
))
2495 side_effects_p
= true;
2496 if (index
&& TREE_CODE (index
) == COMPONENT_REF
)
2498 /* This is an initialization of a vfield inside a base
2499 subaggregate that we already initialized; push this
2500 initialization into the previous initialization. */
2501 constructor_elt
*inner
= base_field_constructor_elt (*p
, index
);
2506 && (TREE_CODE (index
) == NOP_EXPR
2507 || TREE_CODE (index
) == POINTER_PLUS_EXPR
))
2509 /* This is an initializer for an empty base; now that we've
2510 checked that it's constant, we can ignore it. */
2511 gcc_assert (is_empty_class (TREE_TYPE (TREE_TYPE (index
))));
2514 else if (new_ctx
.ctor
!= ctx
->ctor
)
2516 /* We appended this element above; update the value. */
2517 gcc_assert ((*p
)->last().index
== index
);
2518 (*p
)->last().value
= elt
;
2521 CONSTRUCTOR_APPEND_ELT (*p
, index
, elt
);
2523 if (*non_constant_p
|| !changed
)
2526 /* We're done building this CONSTRUCTOR, so now we can interpret an
2527 element without an explicit initializer as value-initialized. */
2528 CONSTRUCTOR_NO_IMPLICIT_ZERO (t
) = false;
2529 TREE_CONSTANT (t
) = constant_p
;
2530 TREE_SIDE_EFFECTS (t
) = side_effects_p
;
2531 if (VECTOR_TYPE_P (type
))
2536 /* Subroutine of cxx_eval_constant_expression.
2537 The expression tree T is a VEC_INIT_EXPR which denotes the desired
2538 initialization of a non-static data member of array type. Reduce it to a
2541 Note that apart from value-initialization (when VALUE_INIT is true),
2542 this is only intended to support value-initialization and the
2543 initializations done by defaulted constructors for classes with
2544 non-static data members of array type. In this case, VEC_INIT_EXPR_INIT
2545 will either be NULL_TREE for the default constructor, or a COMPONENT_REF
2546 for the copy/move constructor. */
2549 cxx_eval_vec_init_1 (const constexpr_ctx
*ctx
, tree atype
, tree init
,
2550 bool value_init
, bool lval
,
2551 bool *non_constant_p
, bool *overflow_p
)
2553 tree elttype
= TREE_TYPE (atype
);
2554 unsigned HOST_WIDE_INT max
= tree_to_uhwi (array_type_nelts_top (atype
));
2555 verify_ctor_sanity (ctx
, atype
);
2556 vec
<constructor_elt
, va_gc
> **p
= &CONSTRUCTOR_ELTS (ctx
->ctor
);
2557 vec_alloc (*p
, max
+ 1);
2558 bool pre_init
= false;
2559 unsigned HOST_WIDE_INT i
;
2561 /* For the default constructor, build up a call to the default
2562 constructor of the element type. We only need to handle class types
2563 here, as for a constructor to be constexpr, all members must be
2564 initialized, which for a defaulted default constructor means they must
2565 be of a class type with a constexpr default constructor. */
2566 if (TREE_CODE (elttype
) == ARRAY_TYPE
)
2567 /* We only do this at the lowest level. */;
2568 else if (value_init
)
2570 init
= build_value_init (elttype
, tf_warning_or_error
);
2575 vec
<tree
, va_gc
> *argvec
= make_tree_vector ();
2576 init
= build_special_member_call (NULL_TREE
, complete_ctor_identifier
,
2577 &argvec
, elttype
, LOOKUP_NORMAL
,
2578 tf_warning_or_error
);
2579 release_tree_vector (argvec
);
2580 init
= build_aggr_init_expr (TREE_TYPE (init
), init
);
2584 for (i
= 0; i
< max
; ++i
)
2586 tree idx
= build_int_cst (size_type_node
, i
);
2589 constexpr_ctx new_ctx
;
2590 init_subob_ctx (ctx
, new_ctx
, idx
, pre_init
? init
: elttype
);
2591 if (new_ctx
.ctor
!= ctx
->ctor
)
2592 CONSTRUCTOR_APPEND_ELT (*p
, idx
, new_ctx
.ctor
);
2593 if (TREE_CODE (elttype
) == ARRAY_TYPE
)
2595 /* A multidimensional array; recurse. */
2596 if (value_init
|| init
== NULL_TREE
)
2598 eltinit
= NULL_TREE
;
2602 eltinit
= cp_build_array_ref (input_location
, init
, idx
,
2603 tf_warning_or_error
);
2604 eltinit
= cxx_eval_vec_init_1 (&new_ctx
, elttype
, eltinit
, value_init
,
2606 non_constant_p
, overflow_p
);
2610 /* Initializing an element using value or default initialization
2611 we just pre-built above. */
2612 eltinit
= cxx_eval_constant_expression (&new_ctx
, init
, lval
,
2613 non_constant_p
, overflow_p
);
2618 /* Copying an element. */
2619 gcc_assert (same_type_ignoring_top_level_qualifiers_p
2620 (atype
, TREE_TYPE (init
)));
2621 eltinit
= cp_build_array_ref (input_location
, init
, idx
,
2622 tf_warning_or_error
);
2623 if (!real_lvalue_p (init
))
2624 eltinit
= move (eltinit
);
2625 eltinit
= force_rvalue (eltinit
, tf_warning_or_error
);
2626 eltinit
= (cxx_eval_constant_expression
2627 (&new_ctx
, eltinit
, lval
,
2628 non_constant_p
, overflow_p
));
2630 if (*non_constant_p
&& !ctx
->quiet
)
2632 if (new_ctx
.ctor
!= ctx
->ctor
)
2634 /* We appended this element above; update the value. */
2635 gcc_assert ((*p
)->last().index
== idx
);
2636 (*p
)->last().value
= eltinit
;
2639 CONSTRUCTOR_APPEND_ELT (*p
, idx
, eltinit
);
2640 /* Reuse the result of cxx_eval_constant_expression call
2641 from the first iteration to all others if it is a constant
2642 initializer that doesn't require relocations. */
2645 && (initializer_constant_valid_p (eltinit
, TREE_TYPE (eltinit
))
2646 == null_pointer_node
))
2648 if (new_ctx
.ctor
!= ctx
->ctor
)
2649 eltinit
= new_ctx
.ctor
;
2650 for (i
= 1; i
< max
; ++i
)
2652 idx
= build_int_cst (size_type_node
, i
);
2653 CONSTRUCTOR_APPEND_ELT (*p
, idx
, unshare_constructor (eltinit
));
2659 if (!*non_constant_p
)
2662 CONSTRUCTOR_NO_IMPLICIT_ZERO (init
) = false;
2668 cxx_eval_vec_init (const constexpr_ctx
*ctx
, tree t
,
2670 bool *non_constant_p
, bool *overflow_p
)
2672 tree atype
= TREE_TYPE (t
);
2673 tree init
= VEC_INIT_EXPR_INIT (t
);
2674 tree r
= cxx_eval_vec_init_1 (ctx
, atype
, init
,
2675 VEC_INIT_EXPR_VALUE_INIT (t
),
2676 lval
, non_constant_p
, overflow_p
);
2677 if (*non_constant_p
)
2683 /* A less strict version of fold_indirect_ref_1, which requires cv-quals to
2684 match. We want to be less strict for simple *& folding; if we have a
2685 non-const temporary that we access through a const pointer, that should
2686 work. We handle this here rather than change fold_indirect_ref_1
2687 because we're dealing with things like ADDR_EXPR of INTEGER_CST which
2688 don't really make sense outside of constant expression evaluation. Also
2689 we want to allow folding to COMPONENT_REF, which could cause trouble
2690 with TBAA in fold_indirect_ref_1.
2692 Try to keep this function synced with fold_indirect_ref_1. */
2695 cxx_fold_indirect_ref (location_t loc
, tree type
, tree op0
, bool *empty_base
)
2701 subtype
= TREE_TYPE (sub
);
2702 if (!POINTER_TYPE_P (subtype
))
2705 if (TREE_CODE (sub
) == ADDR_EXPR
)
2707 tree op
= TREE_OPERAND (sub
, 0);
2708 tree optype
= TREE_TYPE (op
);
2710 /* *&CONST_DECL -> to the value of the const decl. */
2711 if (TREE_CODE (op
) == CONST_DECL
)
2712 return DECL_INITIAL (op
);
2713 /* *&p => p; make sure to handle *&"str"[cst] here. */
2714 if (same_type_ignoring_top_level_qualifiers_p (optype
, type
)
2715 /* Also handle the case where the desired type is an array of unknown
2716 bounds because the variable has had its bounds deduced since the
2717 ADDR_EXPR was created. */
2718 || (TREE_CODE (type
) == ARRAY_TYPE
2719 && TREE_CODE (optype
) == ARRAY_TYPE
2720 && TYPE_DOMAIN (type
) == NULL_TREE
2721 && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (optype
),
2724 tree fop
= fold_read_from_constant_string (op
);
2730 /* *(foo *)&fooarray => fooarray[0] */
2731 else if (TREE_CODE (optype
) == ARRAY_TYPE
2732 && (same_type_ignoring_top_level_qualifiers_p
2733 (type
, TREE_TYPE (optype
))))
2735 tree type_domain
= TYPE_DOMAIN (optype
);
2736 tree min_val
= size_zero_node
;
2737 if (type_domain
&& TYPE_MIN_VALUE (type_domain
))
2738 min_val
= TYPE_MIN_VALUE (type_domain
);
2739 return build4_loc (loc
, ARRAY_REF
, type
, op
, min_val
,
2740 NULL_TREE
, NULL_TREE
);
2742 /* *(foo *)&complexfoo => __real__ complexfoo */
2743 else if (TREE_CODE (optype
) == COMPLEX_TYPE
2744 && (same_type_ignoring_top_level_qualifiers_p
2745 (type
, TREE_TYPE (optype
))))
2746 return fold_build1_loc (loc
, REALPART_EXPR
, type
, op
);
2747 /* *(foo *)&vectorfoo => BIT_FIELD_REF<vectorfoo,...> */
2748 else if (VECTOR_TYPE_P (optype
)
2749 && (same_type_ignoring_top_level_qualifiers_p
2750 (type
, TREE_TYPE (optype
))))
2752 tree part_width
= TYPE_SIZE (type
);
2753 tree index
= bitsize_int (0);
2754 return fold_build3_loc (loc
, BIT_FIELD_REF
, type
, op
, part_width
, index
);
2756 /* Also handle conversion to an empty base class, which
2757 is represented with a NOP_EXPR. */
2758 else if (is_empty_class (type
)
2759 && CLASS_TYPE_P (optype
)
2760 && DERIVED_FROM_P (type
, optype
))
2765 /* *(foo *)&struct_with_foo_field => COMPONENT_REF */
2766 else if (RECORD_OR_UNION_TYPE_P (optype
))
2768 tree field
= TYPE_FIELDS (optype
);
2769 for (; field
; field
= DECL_CHAIN (field
))
2770 if (TREE_CODE (field
) == FIELD_DECL
2771 && integer_zerop (byte_position (field
))
2772 && (same_type_ignoring_top_level_qualifiers_p
2773 (TREE_TYPE (field
), type
)))
2775 return fold_build3 (COMPONENT_REF
, type
, op
, field
, NULL_TREE
);
2780 else if (TREE_CODE (sub
) == POINTER_PLUS_EXPR
2781 && TREE_CODE (TREE_OPERAND (sub
, 1)) == INTEGER_CST
)
2783 tree op00
= TREE_OPERAND (sub
, 0);
2784 tree op01
= TREE_OPERAND (sub
, 1);
2787 if (TREE_CODE (op00
) == ADDR_EXPR
)
2790 op00
= TREE_OPERAND (op00
, 0);
2791 op00type
= TREE_TYPE (op00
);
2793 /* ((foo*)&vectorfoo)[1] => BIT_FIELD_REF<vectorfoo,...> */
2794 if (VECTOR_TYPE_P (op00type
)
2795 && (same_type_ignoring_top_level_qualifiers_p
2796 (type
, TREE_TYPE (op00type
))))
2798 HOST_WIDE_INT offset
= tree_to_shwi (op01
);
2799 tree part_width
= TYPE_SIZE (type
);
2800 unsigned HOST_WIDE_INT part_widthi
= tree_to_shwi (part_width
)/BITS_PER_UNIT
;
2801 unsigned HOST_WIDE_INT indexi
= offset
* BITS_PER_UNIT
;
2802 tree index
= bitsize_int (indexi
);
2804 if (offset
/ part_widthi
< TYPE_VECTOR_SUBPARTS (op00type
))
2805 return fold_build3_loc (loc
,
2806 BIT_FIELD_REF
, type
, op00
,
2810 /* ((foo*)&complexfoo)[1] => __imag__ complexfoo */
2811 else if (TREE_CODE (op00type
) == COMPLEX_TYPE
2812 && (same_type_ignoring_top_level_qualifiers_p
2813 (type
, TREE_TYPE (op00type
))))
2815 tree size
= TYPE_SIZE_UNIT (type
);
2816 if (tree_int_cst_equal (size
, op01
))
2817 return fold_build1_loc (loc
, IMAGPART_EXPR
, type
, op00
);
2819 /* ((foo *)&fooarray)[1] => fooarray[1] */
2820 else if (TREE_CODE (op00type
) == ARRAY_TYPE
2821 && (same_type_ignoring_top_level_qualifiers_p
2822 (type
, TREE_TYPE (op00type
))))
2824 tree type_domain
= TYPE_DOMAIN (op00type
);
2825 tree min_val
= size_zero_node
;
2826 if (type_domain
&& TYPE_MIN_VALUE (type_domain
))
2827 min_val
= TYPE_MIN_VALUE (type_domain
);
2828 op01
= size_binop_loc (loc
, EXACT_DIV_EXPR
, op01
,
2829 TYPE_SIZE_UNIT (type
));
2830 op01
= size_binop_loc (loc
, PLUS_EXPR
, op01
, min_val
);
2831 return build4_loc (loc
, ARRAY_REF
, type
, op00
, op01
,
2832 NULL_TREE
, NULL_TREE
);
2834 /* Also handle conversion to an empty base class, which
2835 is represented with a NOP_EXPR. */
2836 else if (is_empty_class (type
)
2837 && CLASS_TYPE_P (op00type
)
2838 && DERIVED_FROM_P (type
, op00type
))
2843 /* ((foo *)&struct_with_foo_field)[1] => COMPONENT_REF */
2844 else if (RECORD_OR_UNION_TYPE_P (op00type
))
2846 tree field
= TYPE_FIELDS (op00type
);
2847 for (; field
; field
= DECL_CHAIN (field
))
2848 if (TREE_CODE (field
) == FIELD_DECL
2849 && tree_int_cst_equal (byte_position (field
), op01
)
2850 && (same_type_ignoring_top_level_qualifiers_p
2851 (TREE_TYPE (field
), type
)))
2853 return fold_build3 (COMPONENT_REF
, type
, op00
,
2860 /* *(foo *)fooarrptr => (*fooarrptr)[0] */
2861 else if (TREE_CODE (TREE_TYPE (subtype
)) == ARRAY_TYPE
2862 && (same_type_ignoring_top_level_qualifiers_p
2863 (type
, TREE_TYPE (TREE_TYPE (subtype
)))))
2866 tree min_val
= size_zero_node
;
2867 tree newsub
= cxx_fold_indirect_ref (loc
, TREE_TYPE (subtype
), sub
, NULL
);
2871 sub
= build1_loc (loc
, INDIRECT_REF
, TREE_TYPE (subtype
), sub
);
2872 type_domain
= TYPE_DOMAIN (TREE_TYPE (sub
));
2873 if (type_domain
&& TYPE_MIN_VALUE (type_domain
))
2874 min_val
= TYPE_MIN_VALUE (type_domain
);
2875 return build4_loc (loc
, ARRAY_REF
, type
, sub
, min_val
, NULL_TREE
,
2883 cxx_eval_indirect_ref (const constexpr_ctx
*ctx
, tree t
,
2885 bool *non_constant_p
, bool *overflow_p
)
2887 tree orig_op0
= TREE_OPERAND (t
, 0);
2888 bool empty_base
= false;
2890 /* We can handle a MEM_REF like an INDIRECT_REF, if MEM_REF's second
2891 operand is an integer-zero. Otherwise reject the MEM_REF for now. */
2893 if (TREE_CODE (t
) == MEM_REF
2894 && (!TREE_OPERAND (t
, 1) || !integer_zerop (TREE_OPERAND (t
, 1))))
2896 gcc_assert (ctx
->quiet
);
2897 *non_constant_p
= true;
2901 /* First try to simplify it directly. */
2902 tree r
= cxx_fold_indirect_ref (EXPR_LOCATION (t
), TREE_TYPE (t
), orig_op0
,
2906 /* If that didn't work, evaluate the operand first. */
2907 tree op0
= cxx_eval_constant_expression (ctx
, orig_op0
,
2908 /*lval*/false, non_constant_p
,
2910 /* Don't VERIFY_CONSTANT here. */
2911 if (*non_constant_p
)
2914 r
= cxx_fold_indirect_ref (EXPR_LOCATION (t
), TREE_TYPE (t
), op0
,
2918 /* We couldn't fold to a constant value. Make sure it's not
2919 something we should have been able to fold. */
2922 if (TREE_CODE (sub
) == ADDR_EXPR
)
2924 gcc_assert (!same_type_ignoring_top_level_qualifiers_p
2925 (TREE_TYPE (TREE_TYPE (sub
)), TREE_TYPE (t
)));
2926 /* DR 1188 says we don't have to deal with this. */
2928 error ("accessing value of %qE through a %qT glvalue in a "
2929 "constant expression", build_fold_indirect_ref (sub
),
2931 *non_constant_p
= true;
2935 if (lval
&& op0
!= orig_op0
)
2936 return build1 (INDIRECT_REF
, TREE_TYPE (t
), op0
);
2938 VERIFY_CONSTANT (t
);
2943 r
= cxx_eval_constant_expression (ctx
, r
,
2944 lval
, non_constant_p
, overflow_p
);
2945 if (*non_constant_p
)
2948 /* If we're pulling out the value of an empty base, make sure
2949 that the whole object is constant and then return an empty
2951 if (empty_base
&& !lval
)
2953 VERIFY_CONSTANT (r
);
2954 r
= build_constructor (TREE_TYPE (t
), NULL
);
2955 TREE_CONSTANT (r
) = true;
2961 /* Complain about R, a VAR_DECL, not being usable in a constant expression.
2962 Shared between potential_constant_expression and
2963 cxx_eval_constant_expression. */
2966 non_const_var_error (tree r
)
2968 tree type
= TREE_TYPE (r
);
2969 error ("the value of %qD is not usable in a constant "
2971 /* Avoid error cascade. */
2972 if (DECL_INITIAL (r
) == error_mark_node
)
2974 if (DECL_DECLARED_CONSTEXPR_P (r
))
2975 inform (DECL_SOURCE_LOCATION (r
),
2976 "%qD used in its own initializer", r
);
2977 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (type
))
2979 if (!CP_TYPE_CONST_P (type
))
2980 inform (DECL_SOURCE_LOCATION (r
),
2981 "%q#D is not const", r
);
2982 else if (CP_TYPE_VOLATILE_P (type
))
2983 inform (DECL_SOURCE_LOCATION (r
),
2984 "%q#D is volatile", r
);
2985 else if (!DECL_INITIAL (r
)
2986 || !TREE_CONSTANT (DECL_INITIAL (r
))
2987 || !DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r
))
2988 inform (DECL_SOURCE_LOCATION (r
),
2989 "%qD was not initialized with a constant "
2996 if (cxx_dialect
>= cxx11
&& !DECL_DECLARED_CONSTEXPR_P (r
))
2997 inform (DECL_SOURCE_LOCATION (r
),
2998 "%qD was not declared %<constexpr%>", r
);
3000 inform (DECL_SOURCE_LOCATION (r
),
3001 "%qD does not have integral or enumeration type",
3006 /* Subroutine of cxx_eval_constant_expression.
3007 Like cxx_eval_unary_expression, except for trinary expressions. */
3010 cxx_eval_trinary_expression (const constexpr_ctx
*ctx
, tree t
,
3012 bool *non_constant_p
, bool *overflow_p
)
3018 for (i
= 0; i
< 3; i
++)
3020 args
[i
] = cxx_eval_constant_expression (ctx
, TREE_OPERAND (t
, i
),
3022 non_constant_p
, overflow_p
);
3023 VERIFY_CONSTANT (args
[i
]);
3026 val
= fold_ternary_loc (EXPR_LOCATION (t
), TREE_CODE (t
), TREE_TYPE (t
),
3027 args
[0], args
[1], args
[2]);
3028 if (val
== NULL_TREE
)
3030 VERIFY_CONSTANT (val
);
3035 var_in_constexpr_fn (tree t
)
3037 tree ctx
= DECL_CONTEXT (t
);
3038 return (cxx_dialect
>= cxx14
&& ctx
&& TREE_CODE (ctx
) == FUNCTION_DECL
3039 && DECL_DECLARED_CONSTEXPR_P (ctx
));
3042 /* Evaluate an INIT_EXPR or MODIFY_EXPR. */
3045 cxx_eval_store_expression (const constexpr_ctx
*ctx
, tree t
,
3047 bool *non_constant_p
, bool *overflow_p
)
3049 constexpr_ctx new_ctx
= *ctx
;
3051 tree init
= TREE_OPERAND (t
, 1);
3052 if (TREE_CLOBBER_P (init
))
3053 /* Just ignore clobbers. */
3056 /* First we figure out where we're storing to. */
3057 tree target
= TREE_OPERAND (t
, 0);
3058 tree type
= TREE_TYPE (target
);
3059 target
= cxx_eval_constant_expression (ctx
, target
,
3061 non_constant_p
, overflow_p
);
3062 if (*non_constant_p
)
3065 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (target
), type
))
3067 /* For initialization of an empty base, the original target will be
3068 *(base*)this, which the above evaluation resolves to the object
3069 argument, which has the derived type rather than the base type. In
3070 this situation, just evaluate the initializer and return, since
3071 there's no actual data to store. */
3072 gcc_assert (is_empty_class (type
));
3073 return cxx_eval_constant_expression (ctx
, init
, false,
3074 non_constant_p
, overflow_p
);
3077 /* And then find the underlying variable. */
3078 vec
<tree
,va_gc
> *refs
= make_tree_vector();
3079 tree object
= NULL_TREE
;
3080 for (tree probe
= target
; object
== NULL_TREE
; )
3082 switch (TREE_CODE (probe
))
3087 vec_safe_push (refs
, TREE_OPERAND (probe
, 1));
3088 vec_safe_push (refs
, TREE_TYPE (probe
));
3089 probe
= TREE_OPERAND (probe
, 0);
3097 /* And then find/build up our initializer for the path to the subobject
3098 we're initializing. */
3100 if (DECL_P (object
))
3101 valp
= ctx
->values
->get (object
);
3106 /* A constant-expression cannot modify objects from outside the
3107 constant-expression. */
3109 error ("modification of %qE is not a constant-expression", object
);
3110 *non_constant_p
= true;
3113 type
= TREE_TYPE (object
);
3114 bool no_zero_init
= true;
3116 vec
<tree
,va_gc
> *ctors
= make_tree_vector ();
3117 while (!refs
->is_empty())
3119 if (*valp
== NULL_TREE
)
3121 *valp
= build_constructor (type
, NULL
);
3122 CONSTRUCTOR_NO_IMPLICIT_ZERO (*valp
) = no_zero_init
;
3124 /* If the value of object is already zero-initialized, any new ctors for
3125 subobjects will also be zero-initialized. */
3126 no_zero_init
= CONSTRUCTOR_NO_IMPLICIT_ZERO (*valp
);
3128 vec_safe_push (ctors
, *valp
);
3130 enum tree_code code
= TREE_CODE (type
);
3132 tree index
= refs
->pop();
3134 constructor_elt
*cep
= NULL
;
3135 if (code
== ARRAY_TYPE
)
3138 = find_array_ctor_elt (*valp
, index
, /*insert*/true);
3139 gcc_assert (i
>= 0);
3140 cep
= CONSTRUCTOR_ELT (*valp
, i
);
3141 gcc_assert (TREE_CODE (cep
->index
) != RANGE_EXPR
);
3145 gcc_assert (TREE_CODE (index
) == FIELD_DECL
);
3147 /* We must keep the CONSTRUCTOR's ELTS in FIELD order.
3148 Usually we meet initializers in that order, but it is
3149 possible for base types to be placed not in program
3151 tree fields
= TYPE_FIELDS (DECL_CONTEXT (index
));
3152 unsigned HOST_WIDE_INT idx
;
3155 vec_safe_iterate (CONSTRUCTOR_ELTS (*valp
), idx
, &cep
);
3156 idx
++, fields
= DECL_CHAIN (fields
))
3158 if (index
== cep
->index
)
3161 /* The field we're initializing must be on the field
3162 list. Look to see if it is present before the
3163 field the current ELT initializes. */
3164 for (; fields
!= cep
->index
; fields
= DECL_CHAIN (fields
))
3165 if (index
== fields
)
3169 /* We fell off the end of the CONSTRUCTOR, so insert a new
3170 entry at the end. */
3173 constructor_elt ce
= { index
, NULL_TREE
};
3175 vec_safe_insert (CONSTRUCTOR_ELTS (*valp
), idx
, ce
);
3176 cep
= CONSTRUCTOR_ELT (*valp
, idx
);
3182 release_tree_vector (refs
);
3184 if (AGGREGATE_TYPE_P (type
) || VECTOR_TYPE_P (type
))
3186 /* Create a new CONSTRUCTOR in case evaluation of the initializer
3187 wants to modify it. */
3188 if (*valp
== NULL_TREE
)
3190 *valp
= new_ctx
.ctor
= build_constructor (type
, NULL
);
3191 CONSTRUCTOR_NO_IMPLICIT_ZERO (new_ctx
.ctor
) = no_zero_init
;
3194 new_ctx
.ctor
= *valp
;
3195 new_ctx
.object
= target
;
3198 init
= cxx_eval_constant_expression (&new_ctx
, init
, false,
3199 non_constant_p
, overflow_p
);
3200 /* Don't share a CONSTRUCTOR that might be changed later. */
3201 init
= unshare_constructor (init
);
3202 if (target
== object
)
3203 /* The hash table might have moved since the get earlier. */
3204 valp
= ctx
->values
->get (object
);
3206 if (TREE_CODE (init
) == CONSTRUCTOR
)
3208 /* An outer ctx->ctor might be pointing to *valp, so replace
3210 CONSTRUCTOR_ELTS (*valp
) = CONSTRUCTOR_ELTS (init
);
3211 TREE_CONSTANT (*valp
) = TREE_CONSTANT (init
);
3212 TREE_SIDE_EFFECTS (*valp
) = TREE_SIDE_EFFECTS (init
);
3213 CONSTRUCTOR_NO_IMPLICIT_ZERO (*valp
)
3214 = CONSTRUCTOR_NO_IMPLICIT_ZERO (init
);
3219 /* Update TREE_CONSTANT and TREE_SIDE_EFFECTS on enclosing
3220 CONSTRUCTORs, if any. */
3223 bool c
= TREE_CONSTANT (init
);
3224 bool s
= TREE_SIDE_EFFECTS (init
);
3226 FOR_EACH_VEC_SAFE_ELT (ctors
, i
, elt
)
3229 TREE_CONSTANT (elt
) = false;
3231 TREE_SIDE_EFFECTS (elt
) = true;
3233 release_tree_vector (ctors
);
3235 if (*non_constant_p
)
3243 /* Evaluate a ++ or -- expression. */
3246 cxx_eval_increment_expression (const constexpr_ctx
*ctx
, tree t
,
3248 bool *non_constant_p
, bool *overflow_p
)
3250 enum tree_code code
= TREE_CODE (t
);
3251 tree type
= TREE_TYPE (t
);
3252 tree op
= TREE_OPERAND (t
, 0);
3253 tree offset
= TREE_OPERAND (t
, 1);
3254 gcc_assert (TREE_CONSTANT (offset
));
3256 /* The operand as an lvalue. */
3257 op
= cxx_eval_constant_expression (ctx
, op
, true,
3258 non_constant_p
, overflow_p
);
3260 /* The operand as an rvalue. */
3261 tree val
= rvalue (op
);
3262 val
= cxx_eval_constant_expression (ctx
, val
, false,
3263 non_constant_p
, overflow_p
);
3264 /* Don't VERIFY_CONSTANT if this might be dealing with a pointer to
3265 a local array in a constexpr function. */
3266 bool ptr
= POINTER_TYPE_P (TREE_TYPE (val
));
3268 VERIFY_CONSTANT (val
);
3270 /* The modified value. */
3271 bool inc
= (code
== PREINCREMENT_EXPR
|| code
== POSTINCREMENT_EXPR
);
3273 if (POINTER_TYPE_P (type
))
3275 /* The middle end requires pointers to use POINTER_PLUS_EXPR. */
3276 offset
= convert_to_ptrofftype (offset
);
3278 offset
= fold_build1 (NEGATE_EXPR
, TREE_TYPE (offset
), offset
);
3279 mod
= fold_build2 (POINTER_PLUS_EXPR
, type
, val
, offset
);
3282 mod
= fold_build2 (inc
? PLUS_EXPR
: MINUS_EXPR
, type
, val
, offset
);
3284 VERIFY_CONSTANT (mod
);
3286 /* Storing the modified value. */
3287 tree store
= build2 (MODIFY_EXPR
, type
, op
, mod
);
3288 cxx_eval_constant_expression (ctx
, store
,
3289 true, non_constant_p
, overflow_p
);
3291 /* And the value of the expression. */
3292 if (code
== PREINCREMENT_EXPR
|| code
== PREDECREMENT_EXPR
)
3294 /* Prefix ops are lvalues. */
3298 /* But we optimize when the caller wants an rvalue. */
3302 /* Postfix ops are rvalues. */
3306 /* Predicates for the meaning of *jump_target. */
3309 returns (tree
*jump_target
)
3312 && TREE_CODE (*jump_target
) == RETURN_EXPR
;
3316 breaks (tree
*jump_target
)
3319 && ((TREE_CODE (*jump_target
) == LABEL_DECL
3320 && LABEL_DECL_BREAK (*jump_target
))
3321 || TREE_CODE (*jump_target
) == EXIT_EXPR
);
3325 continues (tree
*jump_target
)
3328 && TREE_CODE (*jump_target
) == LABEL_DECL
3329 && LABEL_DECL_CONTINUE (*jump_target
);
3333 switches (tree
*jump_target
)
3336 && TREE_CODE (*jump_target
) == INTEGER_CST
;
3339 /* Subroutine of cxx_eval_statement_list. Determine whether the statement
3340 at I matches *jump_target. If we're looking for a case label and we see
3341 the default label, copy I into DEFAULT_LABEL. */
3344 label_matches (tree
*jump_target
, tree_stmt_iterator i
,
3345 tree_stmt_iterator
& default_label
)
3347 tree stmt
= tsi_stmt (i
);
3348 switch (TREE_CODE (*jump_target
))
3351 if (TREE_CODE (stmt
) == LABEL_EXPR
3352 && LABEL_EXPR_LABEL (stmt
) == *jump_target
)
3357 if (TREE_CODE (stmt
) == CASE_LABEL_EXPR
)
3359 if (!CASE_LOW (stmt
))
3361 else if (tree_int_cst_equal (*jump_target
, CASE_LOW (stmt
)))
3372 /* Evaluate a STATEMENT_LIST for side-effects. Handles various jump
3373 semantics, for switch, break, continue, and return. */
3376 cxx_eval_statement_list (const constexpr_ctx
*ctx
, tree t
,
3377 bool *non_constant_p
, bool *overflow_p
,
3380 tree_stmt_iterator i
;
3381 tree_stmt_iterator default_label
= tree_stmt_iterator();
3383 /* In a statement-expression we want to return the last value. */
3387 local_target
= NULL_TREE
;
3388 jump_target
= &local_target
;
3390 for (i
= tsi_start (t
); !tsi_end_p (i
); tsi_next (&i
))
3393 tree stmt
= tsi_stmt (i
);
3396 if (TREE_CODE (stmt
) == STATEMENT_LIST
)
3397 /* The label we want might be inside. */;
3398 else if (label_matches (jump_target
, i
, default_label
))
3400 *jump_target
= NULL_TREE
;
3404 r
= cxx_eval_constant_expression (ctx
, stmt
, false,
3405 non_constant_p
, overflow_p
,
3407 if (*non_constant_p
)
3409 if (returns (jump_target
) || breaks (jump_target
))
3412 if (switches (jump_target
) && !tsi_end_p (default_label
))
3415 *jump_target
= NULL_TREE
;
3421 /* Evaluate a LOOP_EXPR for side-effects. Handles break and return
3422 semantics; continue semantics are covered by cxx_eval_statement_list. */
3425 cxx_eval_loop_expr (const constexpr_ctx
*ctx
, tree t
,
3426 bool *non_constant_p
, bool *overflow_p
,
3429 constexpr_ctx new_ctx
= *ctx
;
3431 tree body
= TREE_OPERAND (t
, 0);
3434 hash_set
<tree
> save_exprs
;
3435 new_ctx
.save_exprs
= &save_exprs
;
3437 cxx_eval_constant_expression (&new_ctx
, body
, /*lval*/false,
3438 non_constant_p
, overflow_p
, jump_target
);
3440 /* Forget saved values of SAVE_EXPRs. */
3441 for (hash_set
<tree
>::iterator iter
= save_exprs
.begin();
3442 iter
!= save_exprs
.end(); ++iter
)
3443 new_ctx
.values
->remove (*iter
);
3445 while (!returns (jump_target
) && !breaks (jump_target
) && !*non_constant_p
);
3447 if (breaks (jump_target
))
3448 *jump_target
= NULL_TREE
;
3453 /* Evaluate a SWITCH_EXPR for side-effects. Handles switch and break jump
3457 cxx_eval_switch_expr (const constexpr_ctx
*ctx
, tree t
,
3458 bool *non_constant_p
, bool *overflow_p
,
3461 tree cond
= TREE_OPERAND (t
, 0);
3462 cond
= cxx_eval_constant_expression (ctx
, cond
, false,
3463 non_constant_p
, overflow_p
);
3464 VERIFY_CONSTANT (cond
);
3465 *jump_target
= cond
;
3467 tree body
= TREE_OPERAND (t
, 1);
3468 cxx_eval_statement_list (ctx
, body
,
3469 non_constant_p
, overflow_p
, jump_target
);
3470 if (breaks (jump_target
) || switches (jump_target
))
3471 *jump_target
= NULL_TREE
;
3475 /* Subroutine of cxx_eval_constant_expression.
3476 Attempt to reduce a POINTER_PLUS_EXPR expression T. */
3479 cxx_eval_pointer_plus_expression (const constexpr_ctx
*ctx
, tree t
,
3480 bool lval
, bool *non_constant_p
,
3483 tree orig_type
= TREE_TYPE (t
);
3484 tree op00
= TREE_OPERAND (t
, 0);
3485 tree op01
= TREE_OPERAND (t
, 1);
3486 location_t loc
= EXPR_LOCATION (t
);
3488 op00
= cxx_eval_constant_expression (ctx
, op00
, lval
,
3489 non_constant_p
, overflow_p
);
3492 if (TREE_CODE (op00
) != ADDR_EXPR
)
3495 op01
= cxx_eval_constant_expression (ctx
, op01
, lval
,
3496 non_constant_p
, overflow_p
);
3497 op00
= TREE_OPERAND (op00
, 0);
3499 /* &A[i] p+ j => &A[i + j] */
3500 if (TREE_CODE (op00
) == ARRAY_REF
3501 && TREE_CODE (TREE_OPERAND (op00
, 1)) == INTEGER_CST
3502 && TREE_CODE (op01
) == INTEGER_CST
3503 && TYPE_SIZE_UNIT (TREE_TYPE (op00
))
3504 && TREE_CODE (TYPE_SIZE_UNIT (TREE_TYPE (op00
))) == INTEGER_CST
)
3506 tree type
= TREE_TYPE (op00
);
3507 t
= fold_convert_loc (loc
, ssizetype
, TREE_OPERAND (op00
, 1));
3508 tree nelts
= array_type_nelts_top (TREE_TYPE (TREE_OPERAND (op00
, 0)));
3509 /* Don't fold an out-of-bound access. */
3510 if (!tree_int_cst_le (t
, nelts
))
3512 op01
= cp_fold_convert (ssizetype
, op01
);
3513 /* Don't fold if op01 can't be divided exactly by TYPE_SIZE_UNIT.
3514 constexpr int A[1]; ... (char *)&A[0] + 1 */
3515 if (!integer_zerop (fold_build2_loc (loc
, TRUNC_MOD_EXPR
, sizetype
,
3516 op01
, TYPE_SIZE_UNIT (type
))))
3518 /* Make sure to treat the second operand of POINTER_PLUS_EXPR
3520 op01
= fold_build2_loc (loc
, EXACT_DIV_EXPR
, ssizetype
, op01
,
3521 TYPE_SIZE_UNIT (type
));
3522 t
= size_binop_loc (loc
, PLUS_EXPR
, op01
, t
);
3523 t
= build4_loc (loc
, ARRAY_REF
, type
, TREE_OPERAND (op00
, 0),
3524 t
, NULL_TREE
, NULL_TREE
);
3525 t
= cp_build_addr_expr (t
, tf_warning_or_error
);
3526 t
= cp_fold_convert (orig_type
, t
);
3527 return cxx_eval_constant_expression (ctx
, t
, lval
, non_constant_p
,
3534 /* Attempt to reduce the expression T to a constant value.
3535 On failure, issue diagnostic and return error_mark_node. */
3536 /* FIXME unify with c_fully_fold */
3537 /* FIXME overflow_p is too global */
3540 cxx_eval_constant_expression (const constexpr_ctx
*ctx
, tree t
,
3542 bool *non_constant_p
, bool *overflow_p
,
3545 constexpr_ctx new_ctx
;
3548 if (t
== error_mark_node
)
3550 *non_constant_p
= true;
3553 if (CONSTANT_CLASS_P (t
))
3555 if (TREE_OVERFLOW (t
))
3558 permerror (input_location
, "overflow in constant expression");
3559 if (!flag_permissive
|| ctx
->quiet
)
3565 switch (TREE_CODE (t
))
3570 /* We ask for an rvalue for the RESULT_DECL when indirecting
3571 through an invisible reference, or in named return value
3573 return (*ctx
->values
->get (t
));
3577 /* We used to not check lval for CONST_DECL, but darwin.c uses
3578 CONST_DECL for aggregate constants. */
3582 r
= decl_really_constant_value (t
);
3584 r
= decl_constant_value (t
);
3585 if (TREE_CODE (r
) == TARGET_EXPR
3586 && TREE_CODE (TARGET_EXPR_INITIAL (r
)) == CONSTRUCTOR
)
3587 r
= TARGET_EXPR_INITIAL (r
);
3589 if (tree
*p
= ctx
->values
->get (r
))
3590 if (*p
!= NULL_TREE
)
3595 non_const_var_error (r
);
3596 *non_constant_p
= true;
3604 case CASE_LABEL_EXPR
:
3608 if (lval
&& TREE_CODE (TREE_TYPE (t
)) != REFERENCE_TYPE
)
3610 else if (tree
*p
= ctx
->values
->get (r
))
3613 /* Defer in case this is only used for its type. */;
3614 else if (TREE_CODE (TREE_TYPE (t
)) == REFERENCE_TYPE
)
3615 /* Defer, there's no lvalue->rvalue conversion. */;
3616 else if (is_empty_class (TREE_TYPE (t
)))
3618 /* If the class is empty, we aren't actually loading anything. */
3619 r
= build_constructor (TREE_TYPE (t
), NULL
);
3620 TREE_CONSTANT (r
) = true;
3625 error ("%qE is not a constant expression", t
);
3626 *non_constant_p
= true;
3631 case AGGR_INIT_EXPR
:
3632 r
= cxx_eval_call_expression (ctx
, t
, lval
,
3633 non_constant_p
, overflow_p
);
3638 r
= DECL_EXPR_DECL (t
);
3639 if (AGGREGATE_TYPE_P (TREE_TYPE (r
))
3640 || VECTOR_TYPE_P (TREE_TYPE (r
)))
3644 new_ctx
.ctor
= build_constructor (TREE_TYPE (r
), NULL
);
3645 CONSTRUCTOR_NO_IMPLICIT_ZERO (new_ctx
.ctor
) = true;
3646 new_ctx
.values
->put (r
, new_ctx
.ctor
);
3650 if (tree init
= DECL_INITIAL (r
))
3652 init
= cxx_eval_constant_expression (ctx
, init
,
3654 non_constant_p
, overflow_p
);
3655 /* Don't share a CONSTRUCTOR that might be changed. */
3656 init
= unshare_constructor (init
);
3657 ctx
->values
->put (r
, init
);
3659 else if (ctx
== &new_ctx
)
3660 /* We gave it a CONSTRUCTOR above. */;
3662 ctx
->values
->put (r
, NULL_TREE
);
3667 if (!literal_type_p (TREE_TYPE (t
)))
3671 error ("temporary of non-literal type %qT in a "
3672 "constant expression", TREE_TYPE (t
));
3673 explain_non_literal_class (TREE_TYPE (t
));
3675 *non_constant_p
= true;
3678 if ((AGGREGATE_TYPE_P (TREE_TYPE (t
)) || VECTOR_TYPE_P (TREE_TYPE (t
))))
3680 /* We're being expanded without an explicit target, so start
3681 initializing a new object; expansion with an explicit target
3682 strips the TARGET_EXPR before we get here. */
3684 new_ctx
.ctor
= build_constructor (TREE_TYPE (t
), NULL
);
3685 CONSTRUCTOR_NO_IMPLICIT_ZERO (new_ctx
.ctor
) = true;
3686 new_ctx
.object
= TARGET_EXPR_SLOT (t
);
3687 ctx
->values
->put (new_ctx
.object
, new_ctx
.ctor
);
3690 /* Pass false for 'lval' because this indicates
3691 initialization of a temporary. */
3692 r
= cxx_eval_constant_expression (ctx
, TREE_OPERAND (t
, 1),
3694 non_constant_p
, overflow_p
);
3695 if (!*non_constant_p
)
3696 /* Adjust the type of the result to the type of the temporary. */
3697 r
= adjust_temp_type (TREE_TYPE (t
), r
);
3700 tree slot
= TARGET_EXPR_SLOT (t
);
3701 r
= unshare_constructor (r
);
3702 ctx
->values
->put (slot
, r
);
3709 r
= cxx_eval_store_expression (ctx
, t
, lval
,
3710 non_constant_p
, overflow_p
);
3714 r
= cxx_eval_constant_expression (ctx
, TREE_OPERAND (t
, 1),
3716 non_constant_p
, overflow_p
);
3720 if (TREE_OPERAND (t
, 0) != NULL_TREE
)
3721 r
= cxx_eval_constant_expression (ctx
, TREE_OPERAND (t
, 0),
3723 non_constant_p
, overflow_p
);
3728 /* Avoid evaluating a SAVE_EXPR more than once. */
3729 if (tree
*p
= ctx
->values
->get (t
))
3733 r
= cxx_eval_constant_expression (ctx
, TREE_OPERAND (t
, 0), false,
3734 non_constant_p
, overflow_p
);
3735 ctx
->values
->put (t
, r
);
3736 if (ctx
->save_exprs
)
3737 ctx
->save_exprs
->add (t
);
3741 case NON_LVALUE_EXPR
:
3742 case TRY_CATCH_EXPR
:
3744 case CLEANUP_POINT_EXPR
:
3745 case MUST_NOT_THROW_EXPR
:
3748 r
= cxx_eval_constant_expression (ctx
, TREE_OPERAND (t
, 0),
3750 non_constant_p
, overflow_p
,
3754 case TRY_FINALLY_EXPR
:
3755 r
= cxx_eval_constant_expression (ctx
, TREE_OPERAND (t
, 0), lval
,
3756 non_constant_p
, overflow_p
,
3758 if (!*non_constant_p
)
3759 /* Also evaluate the cleanup. */
3760 cxx_eval_constant_expression (ctx
, TREE_OPERAND (t
, 1), true,
3761 non_constant_p
, overflow_p
,
3765 /* These differ from cxx_eval_unary_expression in that this doesn't
3766 check for a constant operand or result; an address can be
3767 constant without its operand being, and vice versa. */
3770 r
= cxx_eval_indirect_ref (ctx
, t
, lval
,
3771 non_constant_p
, overflow_p
);
3776 tree oldop
= TREE_OPERAND (t
, 0);
3777 tree op
= cxx_eval_constant_expression (ctx
, oldop
,
3779 non_constant_p
, overflow_p
);
3780 /* Don't VERIFY_CONSTANT here. */
3781 if (*non_constant_p
)
3783 gcc_checking_assert (TREE_CODE (op
) != CONSTRUCTOR
);
3784 /* This function does more aggressive folding than fold itself. */
3785 r
= build_fold_addr_expr_with_type (op
, TREE_TYPE (t
));
3786 if (TREE_CODE (r
) == ADDR_EXPR
&& TREE_OPERAND (r
, 0) == oldop
)
3794 case FIX_TRUNC_EXPR
:
3799 case TRUTH_NOT_EXPR
:
3800 case FIXED_CONVERT_EXPR
:
3801 r
= cxx_eval_unary_expression (ctx
, t
, lval
,
3802 non_constant_p
, overflow_p
);
3806 r
= fold_sizeof_expr (t
);
3807 VERIFY_CONSTANT (r
);
3812 /* check_return_expr sometimes wraps a TARGET_EXPR in a
3813 COMPOUND_EXPR; don't get confused. Also handle EMPTY_CLASS_EXPR
3814 introduced by build_call_a. */
3815 tree op0
= TREE_OPERAND (t
, 0);
3816 tree op1
= TREE_OPERAND (t
, 1);
3818 if ((TREE_CODE (op0
) == TARGET_EXPR
&& op1
== TARGET_EXPR_SLOT (op0
))
3819 || TREE_CODE (op1
) == EMPTY_CLASS_EXPR
)
3820 r
= cxx_eval_constant_expression (ctx
, op0
,
3821 lval
, non_constant_p
, overflow_p
,
3825 /* Check that the LHS is constant and then discard it. */
3826 cxx_eval_constant_expression (ctx
, op0
,
3827 true, non_constant_p
, overflow_p
,
3829 if (*non_constant_p
)
3831 op1
= TREE_OPERAND (t
, 1);
3832 r
= cxx_eval_constant_expression (ctx
, op1
,
3833 lval
, non_constant_p
, overflow_p
,
3839 case POINTER_PLUS_EXPR
:
3840 r
= cxx_eval_pointer_plus_expression (ctx
, t
, lval
, non_constant_p
,
3844 /* else fall through */
3849 case TRUNC_DIV_EXPR
:
3851 case FLOOR_DIV_EXPR
:
3852 case ROUND_DIV_EXPR
:
3853 case TRUNC_MOD_EXPR
:
3855 case ROUND_MOD_EXPR
:
3857 case EXACT_DIV_EXPR
:
3867 case TRUTH_XOR_EXPR
:
3874 case UNORDERED_EXPR
:
3884 r
= cxx_eval_binary_expression (ctx
, t
, lval
,
3885 non_constant_p
, overflow_p
);
3888 /* fold can introduce non-IF versions of these; still treat them as
3889 short-circuiting. */
3890 case TRUTH_AND_EXPR
:
3891 case TRUTH_ANDIF_EXPR
:
3892 r
= cxx_eval_logical_expression (ctx
, t
, boolean_false_node
,
3895 non_constant_p
, overflow_p
);
3899 case TRUTH_ORIF_EXPR
:
3900 r
= cxx_eval_logical_expression (ctx
, t
, boolean_true_node
,
3903 non_constant_p
, overflow_p
);
3907 r
= cxx_eval_array_reference (ctx
, t
, lval
,
3908 non_constant_p
, overflow_p
);
3912 if (is_overloaded_fn (t
))
3914 /* We can only get here in checking mode via
3915 build_non_dependent_expr, because any expression that
3916 calls or takes the address of the function will have
3917 pulled a FUNCTION_DECL out of the COMPONENT_REF. */
3918 gcc_checking_assert (ctx
->quiet
|| errorcount
);
3919 *non_constant_p
= true;
3922 r
= cxx_eval_component_reference (ctx
, t
, lval
,
3923 non_constant_p
, overflow_p
);
3927 r
= cxx_eval_bit_field_ref (ctx
, t
, lval
,
3928 non_constant_p
, overflow_p
);
3933 r
= cxx_eval_conditional_expression (ctx
, t
, lval
,
3934 non_constant_p
, overflow_p
,
3939 if (TREE_CONSTANT (t
))
3941 /* Don't re-process a constant CONSTRUCTOR, but do fold it to
3942 VECTOR_CST if applicable. */
3943 /* FIXME after GCC 6 branches, make the verify unconditional. */
3945 verify_constructor_flags (t
);
3947 recompute_constructor_flags (t
);
3948 if (TREE_CONSTANT (t
))
3951 r
= cxx_eval_bare_aggregate (ctx
, t
, lval
,
3952 non_constant_p
, overflow_p
);
3956 /* We can get this in a defaulted constructor for a class with a
3957 non-static data member of array type. Either the initializer will
3958 be NULL, meaning default-initialization, or it will be an lvalue
3959 or xvalue of the same type, meaning direct-initialization from the
3960 corresponding member. */
3961 r
= cxx_eval_vec_init (ctx
, t
, lval
,
3962 non_constant_p
, overflow_p
);
3967 r
= cxx_eval_trinary_expression (ctx
, t
, lval
,
3968 non_constant_p
, overflow_p
);
3972 case VIEW_CONVERT_EXPR
:
3974 case UNARY_PLUS_EXPR
:
3976 enum tree_code tcode
= TREE_CODE (t
);
3977 tree oldop
= TREE_OPERAND (t
, 0);
3979 tree op
= cxx_eval_constant_expression (ctx
, oldop
,
3981 non_constant_p
, overflow_p
);
3982 if (*non_constant_p
)
3984 tree type
= TREE_TYPE (t
);
3985 if (TREE_CODE (op
) == PTRMEM_CST
3986 && !TYPE_PTRMEM_P (type
))
3987 op
= cplus_expand_constant (op
);
3988 if (TREE_CODE (op
) == PTRMEM_CST
&& tcode
== NOP_EXPR
)
3990 if (same_type_ignoring_top_level_qualifiers_p (type
,
3996 error_at (EXPR_LOC_OR_LOC (t
, input_location
),
3997 "a reinterpret_cast is not a constant-expression");
3998 *non_constant_p
= true;
4002 if (POINTER_TYPE_P (type
)
4003 && TREE_CODE (op
) == INTEGER_CST
4004 && !integer_zerop (op
))
4007 error_at (EXPR_LOC_OR_LOC (t
, input_location
),
4008 "reinterpret_cast from integer to pointer");
4009 *non_constant_p
= true;
4012 if (op
== oldop
&& tcode
!= UNARY_PLUS_EXPR
)
4013 /* We didn't fold at the top so we could check for ptr-int
4016 if (tcode
== UNARY_PLUS_EXPR
)
4017 r
= fold_convert (TREE_TYPE (t
), op
);
4019 r
= fold_build1 (tcode
, type
, op
);
4020 /* Conversion of an out-of-range value has implementation-defined
4021 behavior; the language considers it different from arithmetic
4022 overflow, which is undefined. */
4023 if (TREE_OVERFLOW_P (r
) && !TREE_OVERFLOW_P (op
))
4024 TREE_OVERFLOW (r
) = false;
4028 case EMPTY_CLASS_EXPR
:
4029 /* This is good enough for a function argument that might not get
4030 used, and they can't do anything with it, so just return it. */
4033 case STATEMENT_LIST
:
4035 new_ctx
.ctor
= new_ctx
.object
= NULL_TREE
;
4036 return cxx_eval_statement_list (&new_ctx
, t
,
4037 non_constant_p
, overflow_p
, jump_target
);
4040 return cxx_eval_constant_expression (ctx
, BIND_EXPR_BODY (t
),
4042 non_constant_p
, overflow_p
,
4045 case PREINCREMENT_EXPR
:
4046 case POSTINCREMENT_EXPR
:
4047 case PREDECREMENT_EXPR
:
4048 case POSTDECREMENT_EXPR
:
4049 return cxx_eval_increment_expression (ctx
, t
,
4050 lval
, non_constant_p
, overflow_p
);
4056 case VEC_DELETE_EXPR
:
4059 /* GCC internal stuff. */
4062 case WITH_CLEANUP_EXPR
:
4063 case NON_DEPENDENT_EXPR
:
4067 error_at (EXPR_LOC_OR_LOC (t
, input_location
),
4068 "expression %qE is not a constant-expression", t
);
4069 *non_constant_p
= true;
4072 case PLACEHOLDER_EXPR
:
4073 if (!ctx
|| !ctx
->ctor
|| (lval
&& !ctx
->object
)
4074 || !(same_type_ignoring_top_level_qualifiers_p
4075 (TREE_TYPE (t
), TREE_TYPE (ctx
->ctor
))))
4077 /* A placeholder without a referent. We can get here when
4078 checking whether NSDMIs are noexcept, or in massage_init_elt;
4079 just say it's non-constant for now. */
4080 gcc_assert (ctx
->quiet
);
4081 *non_constant_p
= true;
4086 /* Use of the value or address of the current object. We could
4087 use ctx->object unconditionally, but using ctx->ctor when we
4088 can is a minor optimization. */
4089 tree ctor
= lval
? ctx
->object
: ctx
->ctor
;
4090 return cxx_eval_constant_expression
4092 non_constant_p
, overflow_p
);
4098 tree cond
= TREE_OPERAND (t
, 0);
4099 cond
= cxx_eval_constant_expression (ctx
, cond
, /*lval*/false,
4100 non_constant_p
, overflow_p
);
4101 VERIFY_CONSTANT (cond
);
4102 if (integer_nonzerop (cond
))
4108 *jump_target
= TREE_OPERAND (t
, 0);
4109 gcc_assert (breaks (jump_target
) || continues (jump_target
));
4113 cxx_eval_loop_expr (ctx
, t
,
4114 non_constant_p
, overflow_p
, jump_target
);
4118 cxx_eval_switch_expr (ctx
, t
,
4119 non_constant_p
, overflow_p
, jump_target
);
4123 /* It's possible to get a requires-expression in a constant
4124 expression. For example:
4126 template<typename T> concept bool C() {
4127 return requires (T t) { t; };
4130 template<typename T> requires !C<T>() void f(T);
4132 Normalization leaves f with the associated constraint
4133 '!requires (T t) { ... }' which is not transformed into
4135 if (!processing_template_decl
)
4136 return evaluate_constraint_expression (t
, NULL_TREE
);
4138 *non_constant_p
= true;
4142 if (STATEMENT_CODE_P (TREE_CODE (t
)))
4144 /* This function doesn't know how to deal with pre-genericize
4145 statements; this can only happen with statement-expressions,
4146 so for now just fail. */
4148 error_at (EXPR_LOCATION (t
),
4149 "statement is not a constant-expression");
4152 internal_error ("unexpected expression %qE of kind %s", t
,
4153 get_tree_code_name (TREE_CODE (t
)));
4154 *non_constant_p
= true;
4158 if (r
== error_mark_node
)
4159 *non_constant_p
= true;
4161 if (*non_constant_p
)
4168 cxx_eval_outermost_constant_expr (tree t
, bool allow_non_constant
,
4169 bool strict
= true, tree object
= NULL_TREE
)
4171 bool non_constant_p
= false;
4172 bool overflow_p
= false;
4173 hash_map
<tree
,tree
> map
;
4175 constexpr_ctx ctx
= { NULL
, &map
, NULL
, NULL
, NULL
,
4176 allow_non_constant
, strict
};
4178 tree type
= initialized_type (t
);
4180 if (AGGREGATE_TYPE_P (type
) || VECTOR_TYPE_P (type
))
4182 /* In C++14 an NSDMI can participate in aggregate initialization,
4183 and can refer to the address of the object being initialized, so
4184 we need to pass in the relevant VAR_DECL if we want to do the
4185 evaluation in a single pass. The evaluation will dynamically
4186 update ctx.values for the VAR_DECL. We use the same strategy
4187 for C++11 constexpr constructors that refer to the object being
4189 ctx
.ctor
= build_constructor (type
, NULL
);
4190 CONSTRUCTOR_NO_IMPLICIT_ZERO (ctx
.ctor
) = true;
4193 if (TREE_CODE (t
) == TARGET_EXPR
)
4194 object
= TARGET_EXPR_SLOT (t
);
4195 else if (TREE_CODE (t
) == AGGR_INIT_EXPR
)
4196 object
= AGGR_INIT_EXPR_SLOT (t
);
4198 ctx
.object
= object
;
4200 gcc_assert (same_type_ignoring_top_level_qualifiers_p
4201 (type
, TREE_TYPE (object
)));
4202 if (object
&& DECL_P (object
))
4203 map
.put (object
, ctx
.ctor
);
4204 if (TREE_CODE (r
) == TARGET_EXPR
)
4205 /* Avoid creating another CONSTRUCTOR when we expand the
4207 r
= TARGET_EXPR_INITIAL (r
);
4210 r
= cxx_eval_constant_expression (&ctx
, r
,
4211 false, &non_constant_p
, &overflow_p
);
4213 verify_constant (r
, allow_non_constant
, &non_constant_p
, &overflow_p
);
4215 /* Mutable logic is a bit tricky: we want to allow initialization of
4216 constexpr variables with mutable members, but we can't copy those
4217 members to another constexpr variable. */
4218 if (TREE_CODE (r
) == CONSTRUCTOR
4219 && CONSTRUCTOR_MUTABLE_POISON (r
))
4221 if (!allow_non_constant
)
4222 error ("%qE is not a constant expression because it refers to "
4223 "mutable subobjects of %qT", t
, type
);
4224 non_constant_p
= true;
4227 /* Technically we should check this for all subexpressions, but that
4228 runs into problems with our internal representation of pointer
4229 subtraction and the 5.19 rules are still in flux. */
4230 if (CONVERT_EXPR_CODE_P (TREE_CODE (r
))
4231 && ARITHMETIC_TYPE_P (TREE_TYPE (r
))
4232 && TREE_CODE (TREE_OPERAND (r
, 0)) == ADDR_EXPR
)
4234 if (!allow_non_constant
)
4235 error ("conversion from pointer type %qT "
4236 "to arithmetic type %qT in a constant-expression",
4237 TREE_TYPE (TREE_OPERAND (r
, 0)), TREE_TYPE (r
));
4238 non_constant_p
= true;
4241 if (!non_constant_p
&& overflow_p
)
4242 non_constant_p
= true;
4244 /* Unshare the result unless it's a CONSTRUCTOR in which case it's already
4246 bool should_unshare
= true;
4247 if (r
== t
|| TREE_CODE (r
) == CONSTRUCTOR
)
4248 should_unshare
= false;
4250 if (non_constant_p
&& !allow_non_constant
)
4251 return error_mark_node
;
4252 else if (non_constant_p
&& TREE_CONSTANT (r
))
4254 /* This isn't actually constant, so unset TREE_CONSTANT. */
4257 else if (TREE_CODE (r
) == CONSTRUCTOR
)
4258 r
= build1 (VIEW_CONVERT_EXPR
, TREE_TYPE (r
), r
);
4260 r
= build_nop (TREE_TYPE (r
), r
);
4261 TREE_CONSTANT (r
) = false;
4263 else if (non_constant_p
|| r
== t
)
4267 r
= unshare_expr (r
);
4269 if (TREE_CODE (r
) == CONSTRUCTOR
&& CLASS_TYPE_P (TREE_TYPE (r
)))
4271 if (TREE_CODE (t
) == TARGET_EXPR
4272 && TARGET_EXPR_INITIAL (t
) == r
)
4276 r
= get_target_expr (r
);
4277 TREE_CONSTANT (r
) = true;
4285 /* Returns true if T is a valid subexpression of a constant expression,
4286 even if it isn't itself a constant expression. */
4289 is_sub_constant_expr (tree t
)
4291 bool non_constant_p
= false;
4292 bool overflow_p
= false;
4293 hash_map
<tree
, tree
> map
;
4295 constexpr_ctx ctx
= { NULL
, &map
, NULL
, NULL
, NULL
, true, true };
4297 cxx_eval_constant_expression (&ctx
, t
, false, &non_constant_p
,
4299 return !non_constant_p
&& !overflow_p
;
4302 /* If T represents a constant expression returns its reduced value.
4303 Otherwise return error_mark_node. If T is dependent, then
4307 cxx_constant_value (tree t
, tree decl
)
4309 return cxx_eval_outermost_constant_expr (t
, false, true, decl
);
4312 /* Helper routine for fold_simple function. Either return simplified
4313 expression T, otherwise NULL_TREE.
4314 In contrast to cp_fully_fold, and to maybe_constant_value, we try to fold
4315 even if we are within template-declaration. So be careful on call, as in
4316 such case types can be undefined. */
4319 fold_simple_1 (tree t
)
4322 enum tree_code code
= TREE_CODE (t
);
4334 return fold_sizeof_expr (t
);
4342 case TRUTH_NOT_EXPR
:
4344 case VIEW_CONVERT_EXPR
:
4347 case FIX_TRUNC_EXPR
:
4348 case FIXED_CONVERT_EXPR
:
4349 case ADDR_SPACE_CONVERT_EXPR
:
4351 op1
= TREE_OPERAND (t
, 0);
4353 t
= const_unop (code
, TREE_TYPE (t
), op1
);
4357 if (CONVERT_EXPR_CODE_P (code
)
4358 && TREE_OVERFLOW_P (t
) && !TREE_OVERFLOW_P (op1
))
4359 TREE_OVERFLOW (t
) = false;
4367 /* If T is a simple constant expression, returns its simplified value.
4368 Otherwise returns T. In contrast to maybe_constant_value do we
4369 simplify only few operations on constant-expressions, and we don't
4370 try to simplify constexpressions. */
4373 fold_simple (tree t
)
4376 if (processing_template_decl
)
4379 r
= fold_simple_1 (t
);
4386 /* If T is a constant expression, returns its reduced value.
4387 Otherwise, if T does not have TREE_CONSTANT set, returns T.
4388 Otherwise, returns a version of T without TREE_CONSTANT. */
4391 maybe_constant_value_1 (tree t
, tree decl
)
4395 if (!potential_nondependent_constant_expression (t
))
4397 if (TREE_OVERFLOW_P (t
))
4399 t
= build_nop (TREE_TYPE (t
), t
);
4400 TREE_CONSTANT (t
) = false;
4405 r
= cxx_eval_outermost_constant_expr (t
, true, true, decl
);
4406 gcc_checking_assert (r
== t
4407 || CONVERT_EXPR_P (t
)
4408 || TREE_CODE (t
) == VIEW_CONVERT_EXPR
4409 || (TREE_CONSTANT (t
) && !TREE_CONSTANT (r
))
4410 || !cp_tree_equal (r
, t
));
4414 static GTY((deletable
)) hash_map
<tree
, tree
> *cv_cache
;
4416 /* If T is a constant expression, returns its reduced value.
4417 Otherwise, if T does not have TREE_CONSTANT set, returns T.
4418 Otherwise, returns a version of T without TREE_CONSTANT. */
4421 maybe_constant_value (tree t
, tree decl
)
4423 if (cv_cache
== NULL
)
4424 cv_cache
= hash_map
<tree
, tree
>::create_ggc (101);
4426 if (tree
*cached
= cv_cache
->get (t
))
4429 tree ret
= maybe_constant_value_1 (t
, decl
);
4430 cv_cache
->put (t
, ret
);
4434 /* Dispose of the whole CV_CACHE. */
4437 clear_cv_cache (void)
4439 if (cv_cache
!= NULL
)
4443 /* Dispose of the whole CV_CACHE and FOLD_CACHE. */
4446 clear_cv_and_fold_caches (void)
4449 clear_fold_cache ();
4452 /* Like maybe_constant_value but first fully instantiate the argument.
4454 Note: this is equivalent to instantiate_non_dependent_expr_sfinae
4455 (t, tf_none) followed by maybe_constant_value but is more efficient,
4456 because calls instantiation_dependent_expression_p and
4457 potential_constant_expression at most once. */
4460 fold_non_dependent_expr (tree t
)
4465 /* If we're in a template, but T isn't value dependent, simplify
4466 it. We're supposed to treat:
4468 template <typename T> void f(T[1 + 1]);
4469 template <typename T> void f(T[2]);
4471 as two declarations of the same function, for example. */
4472 if (processing_template_decl
)
4474 if (potential_nondependent_constant_expression (t
))
4476 processing_template_decl_sentinel s
;
4477 t
= instantiate_non_dependent_expr_internal (t
, tf_none
);
4479 if (type_unknown_p (t
)
4480 || BRACE_ENCLOSED_INITIALIZER_P (t
))
4482 if (TREE_OVERFLOW_P (t
))
4484 t
= build_nop (TREE_TYPE (t
), t
);
4485 TREE_CONSTANT (t
) = false;
4490 tree r
= cxx_eval_outermost_constant_expr (t
, true, true, NULL_TREE
);
4491 /* cp_tree_equal looks through NOPs, so allow them. */
4492 gcc_checking_assert (r
== t
4493 || CONVERT_EXPR_P (t
)
4494 || TREE_CODE (t
) == VIEW_CONVERT_EXPR
4495 || (TREE_CONSTANT (t
) && !TREE_CONSTANT (r
))
4496 || !cp_tree_equal (r
, t
));
4499 else if (TREE_OVERFLOW_P (t
))
4501 t
= build_nop (TREE_TYPE (t
), t
);
4502 TREE_CONSTANT (t
) = false;
4507 return maybe_constant_value (t
);
4510 /* Like maybe_constant_value, but returns a CONSTRUCTOR directly, rather
4511 than wrapped in a TARGET_EXPR. */
4514 maybe_constant_init (tree t
, tree decl
)
4518 if (TREE_CODE (t
) == EXPR_STMT
)
4519 t
= TREE_OPERAND (t
, 0);
4520 if (TREE_CODE (t
) == CONVERT_EXPR
4521 && VOID_TYPE_P (TREE_TYPE (t
)))
4522 t
= TREE_OPERAND (t
, 0);
4523 if (TREE_CODE (t
) == INIT_EXPR
)
4524 t
= TREE_OPERAND (t
, 1);
4525 if (!potential_nondependent_static_init_expression (t
))
4526 /* Don't try to evaluate it. */;
4528 t
= cxx_eval_outermost_constant_expr (t
, true, false, decl
);
4529 if (TREE_CODE (t
) == TARGET_EXPR
)
4531 tree init
= TARGET_EXPR_INITIAL (t
);
4532 if (TREE_CODE (init
) == CONSTRUCTOR
)
4539 /* FIXME see ADDR_EXPR section in potential_constant_expression_1. */
4540 /* Return true if the object referred to by REF has automatic or thread
4543 enum { ck_ok
, ck_bad
, ck_unknown
};
4545 check_automatic_or_tls (tree ref
)
4548 HOST_WIDE_INT bitsize
, bitpos
;
4550 int volatilep
= 0, unsignedp
= 0;
4551 tree decl
= get_inner_reference (ref
, &bitsize
, &bitpos
, &offset
,
4552 &mode
, &unsignedp
, &volatilep
, false);
4555 /* If there isn't a decl in the middle, we don't know the linkage here,
4556 and this isn't a constant expression anyway. */
4559 dk
= decl_storage_duration (decl
);
4560 return (dk
== dk_auto
|| dk
== dk_thread
) ? ck_bad
: ck_ok
;
4564 /* Return true if T denotes a potentially constant expression. Issue
4565 diagnostic as appropriate under control of FLAGS. If WANT_RVAL is true,
4566 an lvalue-rvalue conversion is implied.
4568 C++0x [expr.const] used to say
4570 6 An expression is a potential constant expression if it is
4571 a constant expression where all occurrences of function
4572 parameters are replaced by arbitrary constant expressions
4573 of the appropriate type.
4575 2 A conditional expression is a constant expression unless it
4576 involves one of the following as a potentially evaluated
4577 subexpression (3.2), but subexpressions of logical AND (5.14),
4578 logical OR (5.15), and conditional (5.16) operations that are
4579 not evaluated are not considered. */
4582 potential_constant_expression_1 (tree t
, bool want_rval
, bool strict
,
4583 tsubst_flags_t flags
)
4585 #define RECUR(T,RV) potential_constant_expression_1 ((T), (RV), strict, flags)
4586 enum { any
= false, rval
= true };
4590 if (t
== error_mark_node
)
4594 if (TREE_THIS_VOLATILE (t
) && !DECL_P (t
))
4596 if (flags
& tf_error
)
4597 error ("expression %qE has side-effects", t
);
4600 if (CONSTANT_CLASS_P (t
))
4603 switch (TREE_CODE (t
))
4609 case TEMPLATE_ID_EXPR
:
4612 case CASE_LABEL_EXPR
:
4618 case TEMPLATE_PARM_INDEX
:
4620 case IDENTIFIER_NODE
:
4621 case USERDEF_LITERAL
:
4622 /* We can see a FIELD_DECL in a pointer-to-member expression. */
4628 case PLACEHOLDER_EXPR
:
4634 case AGGR_INIT_EXPR
:
4636 /* -- an invocation of a function other than a constexpr function
4637 or a constexpr constructor. */
4639 tree fun
= get_function_named_in_call (t
);
4640 const int nargs
= call_expr_nargs (t
);
4643 if (fun
== NULL_TREE
)
4645 /* Reset to allow the function to continue past the end
4646 of the block below. Otherwise return early. */
4649 if (TREE_CODE (t
) == CALL_EXPR
4650 && CALL_EXPR_FN (t
) == NULL_TREE
)
4651 switch (CALL_EXPR_IFN (t
))
4653 /* These should be ignored, they are optimized away from
4654 constexpr functions. */
4655 case IFN_UBSAN_NULL
:
4656 case IFN_UBSAN_BOUNDS
:
4657 case IFN_UBSAN_VPTR
:
4660 case IFN_ADD_OVERFLOW
:
4661 case IFN_SUB_OVERFLOW
:
4662 case IFN_MUL_OVERFLOW
:
4671 /* fold_call_expr can't do anything with IFN calls. */
4672 if (flags
& tf_error
)
4673 error_at (EXPR_LOC_OR_LOC (t
, input_location
),
4674 "call to internal function %qE", t
);
4679 if (fun
&& is_overloaded_fn (fun
))
4681 if (TREE_CODE (fun
) == FUNCTION_DECL
)
4683 if (builtin_valid_in_constant_expr_p (fun
))
4685 if (!DECL_DECLARED_CONSTEXPR_P (fun
)
4686 /* Allow any built-in function; if the expansion
4687 isn't constant, we'll deal with that then. */
4688 && !is_builtin_fn (fun
))
4690 if (flags
& tf_error
)
4692 error_at (EXPR_LOC_OR_LOC (t
, input_location
),
4693 "call to non-constexpr function %qD", fun
);
4694 explain_invalid_constexpr_fn (fun
);
4698 /* A call to a non-static member function takes the address
4699 of the object as the first argument. But in a constant
4700 expression the address will be folded away, so look
4702 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fun
)
4703 && !DECL_CONSTRUCTOR_P (fun
))
4705 tree x
= get_nth_callarg (t
, 0);
4706 if (is_this_parameter (x
))
4708 else if (!RECUR (x
, rval
))
4715 if (!RECUR (fun
, true))
4717 fun
= get_first_fn (fun
);
4719 /* Skip initial arguments to base constructors. */
4720 if (DECL_BASE_CONSTRUCTOR_P (fun
))
4721 i
= num_artificial_parms_for (fun
);
4722 fun
= DECL_ORIGIN (fun
);
4726 if (RECUR (fun
, rval
))
4727 /* Might end up being a constant function pointer. */;
4731 for (; i
< nargs
; ++i
)
4733 tree x
= get_nth_callarg (t
, i
);
4734 /* In a template, reference arguments haven't been converted to
4735 REFERENCE_TYPE and we might not even know if the parameter
4736 is a reference, so accept lvalue constants too. */
4737 bool rv
= processing_template_decl
? any
: rval
;
4744 case NON_LVALUE_EXPR
:
4745 /* -- an lvalue-to-rvalue conversion (4.1) unless it is applied to
4746 -- an lvalue of integral type that refers to a non-volatile
4747 const variable or static data member initialized with
4748 constant expressions, or
4750 -- an lvalue of literal type that refers to non-volatile
4751 object defined with constexpr, or that refers to a
4752 sub-object of such an object; */
4753 return RECUR (TREE_OPERAND (t
, 0), rval
);
4757 && !decl_constant_var_p (t
)
4759 || !CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (t
))
4760 || !DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t
))
4761 && !var_in_constexpr_fn (t
)
4762 && !type_dependent_expression_p (t
))
4764 if (flags
& tf_error
)
4765 non_const_var_error (t
);
4772 case VIEW_CONVERT_EXPR
:
4773 /* -- a reinterpret_cast. FIXME not implemented, and this rule
4774 may change to something more specific to type-punning (DR 1312). */
4776 tree from
= TREE_OPERAND (t
, 0);
4777 if (POINTER_TYPE_P (TREE_TYPE (t
))
4778 && TREE_CODE (from
) == INTEGER_CST
4779 && !integer_zerop (from
))
4781 if (flags
& tf_error
)
4782 error_at (EXPR_LOC_OR_LOC (t
, input_location
),
4783 "reinterpret_cast from integer to pointer");
4786 return (RECUR (from
, TREE_CODE (t
) != VIEW_CONVERT_EXPR
));
4790 /* -- a unary operator & that is applied to an lvalue that
4791 designates an object with thread or automatic storage
4793 t
= TREE_OPERAND (t
, 0);
4795 if (TREE_CODE (t
) == OFFSET_REF
&& PTRMEM_OK_P (t
))
4796 /* A pointer-to-member constant. */
4800 /* FIXME adjust when issue 1197 is fully resolved. For now don't do
4801 any checking here, as we might dereference the pointer later. If
4802 we remove this code, also remove check_automatic_or_tls. */
4803 i
= check_automatic_or_tls (t
);
4808 if (flags
& tf_error
)
4809 error ("address-of an object %qE with thread local or "
4810 "automatic storage is not a constant expression", t
);
4814 return RECUR (t
, any
);
4820 /* -- a class member access unless its postfix-expression is
4821 of literal type or of pointer to literal type. */
4822 /* This test would be redundant, as it follows from the
4823 postfix-expression being a potential constant expression. */
4824 if (type_unknown_p (t
))
4826 return RECUR (TREE_OPERAND (t
, 0), want_rval
);
4828 case EXPR_PACK_EXPANSION
:
4829 return RECUR (PACK_EXPANSION_PATTERN (t
), want_rval
);
4833 tree x
= TREE_OPERAND (t
, 0);
4835 if (is_this_parameter (x
))
4837 if (DECL_CONTEXT (x
)
4838 && !DECL_DECLARED_CONSTEXPR_P (DECL_CONTEXT (x
)))
4840 if (flags
& tf_error
)
4841 error ("use of %<this%> in a constant expression");
4846 return RECUR (x
, rval
);
4849 case STATEMENT_LIST
:
4851 tree_stmt_iterator i
;
4852 for (i
= tsi_start (t
); !tsi_end_p (i
); tsi_next (&i
))
4854 if (!RECUR (tsi_stmt (i
), any
))
4862 if (cxx_dialect
< cxx14
)
4864 if (!RECUR (TREE_OPERAND (t
, 0), any
))
4866 if (!RECUR (TREE_OPERAND (t
, 1), rval
))
4871 if (cxx_dialect
< cxx14
)
4873 if (!RECUR (TREE_OPERAND (t
, 0), rval
))
4875 if (!RECUR (TREE_OPERAND (t
, 2), rval
))
4880 if (!RECUR (DO_COND (t
), rval
))
4882 if (!RECUR (DO_BODY (t
), any
))
4887 if (!RECUR (FOR_INIT_STMT (t
), any
))
4889 if (!RECUR (FOR_COND (t
), rval
))
4891 if (!RECUR (FOR_EXPR (t
), any
))
4893 if (!RECUR (FOR_BODY (t
), any
))
4898 if (!RECUR (WHILE_COND (t
), rval
))
4900 if (!RECUR (WHILE_BODY (t
), any
))
4905 if (!RECUR (SWITCH_STMT_COND (t
), rval
))
4907 /* FIXME we don't check SWITCH_STMT_BODY currently, because even
4908 unreachable labels would be checked. */
4912 return RECUR (STMT_EXPR_STMT (t
), rval
);
4915 case DYNAMIC_CAST_EXPR
:
4916 case PSEUDO_DTOR_EXPR
:
4920 case VEC_DELETE_EXPR
:
4923 case OMP_ATOMIC_READ
:
4924 case OMP_ATOMIC_CAPTURE_OLD
:
4925 case OMP_ATOMIC_CAPTURE_NEW
:
4926 /* GCC internal stuff. */
4929 case TRANSACTION_EXPR
:
4931 case AT_ENCODE_EXPR
:
4933 if (flags
& tf_error
)
4934 error ("expression %qE is not a constant-expression", t
);
4938 /* -- a typeid expression whose operand is of polymorphic
4941 tree e
= TREE_OPERAND (t
, 0);
4942 if (!TYPE_P (e
) && !type_dependent_expression_p (e
)
4943 && TYPE_POLYMORPHIC_P (TREE_TYPE (e
)))
4945 if (flags
& tf_error
)
4946 error ("typeid-expression is not a constant expression "
4947 "because %qE is of polymorphic type", e
);
4966 case PREINCREMENT_EXPR
:
4967 case POSTINCREMENT_EXPR
:
4968 case PREDECREMENT_EXPR
:
4969 case POSTDECREMENT_EXPR
:
4970 if (cxx_dialect
< cxx14
)
4976 if (TYPE_P (TREE_OPERAND (t
, 0)))
4978 /* else fall through. */
4984 case FIX_TRUNC_EXPR
:
4988 case TRUTH_NOT_EXPR
:
4989 case FIXED_CONVERT_EXPR
:
4990 case UNARY_PLUS_EXPR
:
4991 case UNARY_LEFT_FOLD_EXPR
:
4992 case UNARY_RIGHT_FOLD_EXPR
:
4994 return RECUR (TREE_OPERAND (t
, 0), rval
);
4997 case CONST_CAST_EXPR
:
4998 case STATIC_CAST_EXPR
:
4999 case REINTERPRET_CAST_EXPR
:
5000 case IMPLICIT_CONV_EXPR
:
5001 if (cxx_dialect
< cxx11
5002 && !dependent_type_p (TREE_TYPE (t
))
5003 && !INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t
)))
5004 /* In C++98, a conversion to non-integral type can't be part of a
5005 constant expression. */
5007 if (flags
& tf_error
)
5008 error ("cast to non-integral type %qT in a constant expression",
5013 return (RECUR (TREE_OPERAND (t
, 0),
5014 TREE_CODE (TREE_TYPE (t
)) != REFERENCE_TYPE
));
5017 return RECUR (BIND_EXPR_BODY (t
), want_rval
);
5019 case WITH_CLEANUP_EXPR
:
5020 case CLEANUP_POINT_EXPR
:
5021 case MUST_NOT_THROW_EXPR
:
5022 case TRY_CATCH_EXPR
:
5028 case NON_DEPENDENT_EXPR
:
5029 /* For convenience. */
5033 return RECUR (TREE_OPERAND (t
, 0), want_rval
);
5035 case TRY_FINALLY_EXPR
:
5036 return (RECUR (TREE_OPERAND (t
, 0), want_rval
)
5037 && RECUR (TREE_OPERAND (t
, 1), any
));
5040 return RECUR (TREE_OPERAND (t
, 1), want_rval
);
5043 if (!literal_type_p (TREE_TYPE (t
)))
5045 if (flags
& tf_error
)
5047 error ("temporary of non-literal type %qT in a "
5048 "constant expression", TREE_TYPE (t
));
5049 explain_non_literal_class (TREE_TYPE (t
));
5054 return RECUR (TREE_OPERAND (t
, 1), rval
);
5058 vec
<constructor_elt
, va_gc
> *v
= CONSTRUCTOR_ELTS (t
);
5059 constructor_elt
*ce
;
5060 for (i
= 0; vec_safe_iterate (v
, i
, &ce
); ++i
)
5061 if (!RECUR (ce
->value
, want_rval
))
5068 gcc_assert (TREE_PURPOSE (t
) == NULL_TREE
5069 || DECL_P (TREE_PURPOSE (t
)));
5070 if (!RECUR (TREE_VALUE (t
), want_rval
))
5072 if (TREE_CHAIN (t
) == NULL_TREE
)
5074 return RECUR (TREE_CHAIN (t
), want_rval
);
5077 case TRUNC_DIV_EXPR
:
5079 case FLOOR_DIV_EXPR
:
5080 case ROUND_DIV_EXPR
:
5081 case TRUNC_MOD_EXPR
:
5083 case ROUND_MOD_EXPR
:
5085 tree denom
= TREE_OPERAND (t
, 1);
5086 if (!RECUR (denom
, rval
))
5088 /* We can't call cxx_eval_outermost_constant_expr on an expression
5089 that hasn't been through instantiate_non_dependent_expr yet. */
5090 if (!processing_template_decl
)
5091 denom
= cxx_eval_outermost_constant_expr (denom
, true);
5092 if (integer_zerop (denom
))
5094 if (flags
& tf_error
)
5095 error ("division by zero is not a constant-expression");
5101 return RECUR (TREE_OPERAND (t
, 0), want_rval
);
5107 /* check_return_expr sometimes wraps a TARGET_EXPR in a
5108 COMPOUND_EXPR; don't get confused. Also handle EMPTY_CLASS_EXPR
5109 introduced by build_call_a. */
5110 tree op0
= TREE_OPERAND (t
, 0);
5111 tree op1
= TREE_OPERAND (t
, 1);
5113 if ((TREE_CODE (op0
) == TARGET_EXPR
&& op1
== TARGET_EXPR_SLOT (op0
))
5114 || TREE_CODE (op1
) == EMPTY_CLASS_EXPR
)
5115 return RECUR (op0
, want_rval
);
5120 /* If the first operand is the non-short-circuit constant, look at
5121 the second operand; otherwise we only care about the first one for
5123 case TRUTH_AND_EXPR
:
5124 case TRUTH_ANDIF_EXPR
:
5125 tmp
= boolean_true_node
;
5128 case TRUTH_ORIF_EXPR
:
5129 tmp
= boolean_false_node
;
5132 tree op
= TREE_OPERAND (t
, 0);
5133 if (!RECUR (op
, rval
))
5135 if (!processing_template_decl
)
5136 op
= cxx_eval_outermost_constant_expr (op
, true);
5137 if (tree_int_cst_equal (op
, tmp
))
5138 return RECUR (TREE_OPERAND (t
, 1), rval
);
5145 case POINTER_PLUS_EXPR
:
5147 case EXACT_DIV_EXPR
:
5157 case TRUTH_XOR_EXPR
:
5158 case UNORDERED_EXPR
:
5171 case ARRAY_RANGE_REF
:
5175 case BINARY_LEFT_FOLD_EXPR
:
5176 case BINARY_RIGHT_FOLD_EXPR
:
5178 for (i
= 0; i
< 2; ++i
)
5179 if (!RECUR (TREE_OPERAND (t
, i
), want_rval
))
5183 case CILK_SYNC_STMT
:
5184 case CILK_SPAWN_STMT
:
5185 case ARRAY_NOTATION_REF
:
5190 for (i
= 0; i
< 3; ++i
)
5191 if (!RECUR (TREE_OPERAND (t
, i
), true))
5196 if (COND_EXPR_IS_VEC_DELETE (t
))
5198 if (flags
& tf_error
)
5199 error_at (location_of (t
),
5200 "%<delete[]%> is not a constant-expression");
5206 /* If the condition is a known constant, we know which of the legs we
5207 care about; otherwise we only require that the condition and
5208 either of the legs be potentially constant. */
5209 tmp
= TREE_OPERAND (t
, 0);
5210 if (!RECUR (tmp
, rval
))
5212 if (!processing_template_decl
)
5213 tmp
= cxx_eval_outermost_constant_expr (tmp
, true);
5214 if (integer_zerop (tmp
))
5215 return RECUR (TREE_OPERAND (t
, 2), want_rval
);
5216 else if (TREE_CODE (tmp
) == INTEGER_CST
)
5217 return RECUR (TREE_OPERAND (t
, 1), want_rval
);
5218 for (i
= 1; i
< 3; ++i
)
5219 if (potential_constant_expression_1 (TREE_OPERAND (t
, i
),
5220 want_rval
, strict
, tf_none
))
5222 if (flags
& tf_error
)
5223 error ("expression %qE is not a constant-expression", t
);
5227 if (VEC_INIT_EXPR_IS_CONSTEXPR (t
))
5229 if (flags
& tf_error
)
5231 error ("non-constant array initialization");
5232 diagnose_non_constexpr_vec_init (t
);
5238 /* We can see these in statement-expressions. */
5241 case EMPTY_CLASS_EXPR
:
5246 tree
*target
= &TREE_OPERAND (t
, 0);
5247 /* Gotos representing break and continue are OK; we should have
5248 rejected other gotos in parsing. */
5249 gcc_assert (breaks (target
) || continues (target
));
5254 if (objc_is_property_ref (t
))
5257 sorry ("unexpected AST of kind %s", get_tree_code_name (TREE_CODE (t
)));
5264 /* The main entry point to the above. */
5267 potential_constant_expression (tree t
)
5269 return potential_constant_expression_1 (t
, false, true, tf_none
);
5273 potential_static_init_expression (tree t
)
5275 return potential_constant_expression_1 (t
, false, false, tf_none
);
5278 /* As above, but require a constant rvalue. */
5281 potential_rvalue_constant_expression (tree t
)
5283 return potential_constant_expression_1 (t
, true, true, tf_none
);
5286 /* Like above, but complain about non-constant expressions. */
5289 require_potential_constant_expression (tree t
)
5291 return potential_constant_expression_1 (t
, false, true, tf_warning_or_error
);
5294 /* Cross product of the above. */
5297 require_potential_rvalue_constant_expression (tree t
)
5299 return potential_constant_expression_1 (t
, true, true, tf_warning_or_error
);
5302 /* Returns true if T is a potential constant expression that is not
5303 instantiation-dependent, and therefore a candidate for constant folding even
5307 potential_nondependent_constant_expression (tree t
)
5309 return (!type_unknown_p (t
)
5310 && !BRACE_ENCLOSED_INITIALIZER_P (t
)
5311 && potential_constant_expression (t
)
5312 && !instantiation_dependent_expression_p (t
));
5315 /* Returns true if T is a potential static initializer expression that is not
5316 instantiation-dependent. */
5319 potential_nondependent_static_init_expression (tree t
)
5321 return (!type_unknown_p (t
)
5322 && !BRACE_ENCLOSED_INITIALIZER_P (t
)
5323 && potential_static_init_expression (t
)
5324 && !instantiation_dependent_expression_p (t
));
5327 /* Finalize constexpr processing after parsing. */
5330 fini_constexpr (void)
5332 /* The contexpr call and fundef copies tables are no longer needed. */
5333 constexpr_call_table
= NULL
;
5334 fundef_copies_table
= NULL
;
5337 #include "gt-cp-constexpr.h"