PR c++/85746: Don't fold __builtin_constant_p prematurely
[official-gcc.git] / gcc / cp / constexpr.c
blob2e1b9b765491772cd35ad409ecd09351afde42a2
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-2019 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)
12 any later version.
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/>. */
23 #include "config.h"
24 #include "system.h"
25 #include "coretypes.h"
26 #include "cp-tree.h"
27 #include "varasm.h"
28 #include "c-family/c-objc.h"
29 #include "tree-iterator.h"
30 #include "gimplify.h"
31 #include "builtins.h"
32 #include "tree-inline.h"
33 #include "ubsan.h"
34 #include "gimple-fold.h"
35 #include "timevar.h"
36 #include "fold-const-call.h"
37 #include "stor-layout.h"
39 static bool verify_constant (tree, bool, bool *, bool *);
40 #define VERIFY_CONSTANT(X) \
41 do { \
42 if (verify_constant ((X), ctx->quiet, non_constant_p, overflow_p)) \
43 return t; \
44 } while (0)
46 static HOST_WIDE_INT find_array_ctor_elt (tree ary, tree dindex,
47 bool insert = false);
49 /* Returns true iff FUN is an instantiation of a constexpr function
50 template or a defaulted constexpr function. */
52 bool
53 is_instantiation_of_constexpr (tree fun)
55 return ((DECL_TEMPLOID_INSTANTIATION (fun)
56 && DECL_DECLARED_CONSTEXPR_P (DECL_TI_TEMPLATE (fun)))
57 || (DECL_DEFAULTED_FN (fun)
58 && DECL_DECLARED_CONSTEXPR_P (fun)));
61 /* Return true if T is a literal type. */
63 bool
64 literal_type_p (tree t)
66 if (SCALAR_TYPE_P (t)
67 || VECTOR_TYPE_P (t)
68 || TYPE_REF_P (t)
69 || (VOID_TYPE_P (t) && cxx_dialect >= cxx14))
70 return true;
71 if (CLASS_TYPE_P (t))
73 t = complete_type (t);
74 gcc_assert (COMPLETE_TYPE_P (t) || errorcount);
75 return CLASSTYPE_LITERAL_P (t);
77 if (TREE_CODE (t) == ARRAY_TYPE)
78 return literal_type_p (strip_array_types (t));
79 return false;
82 /* If DECL is a variable declared `constexpr', require its type
83 be literal. Return error_mark_node if we give an error, the
84 DECL otherwise. */
86 tree
87 ensure_literal_type_for_constexpr_object (tree decl)
89 tree type = TREE_TYPE (decl);
90 if (VAR_P (decl)
91 && (DECL_DECLARED_CONSTEXPR_P (decl)
92 || var_in_constexpr_fn (decl))
93 && !processing_template_decl)
95 tree stype = strip_array_types (type);
96 if (CLASS_TYPE_P (stype) && !COMPLETE_TYPE_P (complete_type (stype)))
97 /* Don't complain here, we'll complain about incompleteness
98 when we try to initialize the variable. */;
99 else if (type_uses_auto (type))
100 /* We don't know the actual type yet. */;
101 else if (!literal_type_p (type))
103 if (DECL_DECLARED_CONSTEXPR_P (decl))
105 auto_diagnostic_group d;
106 error_at (DECL_SOURCE_LOCATION (decl),
107 "the type %qT of %<constexpr%> variable %qD "
108 "is not literal", type, decl);
109 explain_non_literal_class (type);
110 decl = error_mark_node;
112 else
114 if (!is_instantiation_of_constexpr (current_function_decl))
116 auto_diagnostic_group d;
117 error_at (DECL_SOURCE_LOCATION (decl),
118 "variable %qD of non-literal type %qT in "
119 "%<constexpr%> function", decl, type);
120 explain_non_literal_class (type);
121 decl = error_mark_node;
123 cp_function_chain->invalid_constexpr = true;
126 else if (DECL_DECLARED_CONSTEXPR_P (decl)
127 && variably_modified_type_p (type, NULL_TREE))
129 error_at (DECL_SOURCE_LOCATION (decl),
130 "%<constexpr%> variable %qD has variably-modified "
131 "type %qT", decl, type);
132 decl = error_mark_node;
135 return decl;
138 /* Representation of entries in the constexpr function definition table. */
140 struct GTY((for_user)) constexpr_fundef {
141 tree decl;
142 tree body;
143 tree parms;
144 tree result;
147 struct constexpr_fundef_hasher : ggc_ptr_hash<constexpr_fundef>
149 static hashval_t hash (constexpr_fundef *);
150 static bool equal (constexpr_fundef *, constexpr_fundef *);
153 /* This table holds all constexpr function definitions seen in
154 the current translation unit. */
156 static GTY (()) hash_table<constexpr_fundef_hasher> *constexpr_fundef_table;
158 /* Utility function used for managing the constexpr function table.
159 Return true if the entries pointed to by P and Q are for the
160 same constexpr function. */
162 inline bool
163 constexpr_fundef_hasher::equal (constexpr_fundef *lhs, constexpr_fundef *rhs)
165 return lhs->decl == rhs->decl;
168 /* Utility function used for managing the constexpr function table.
169 Return a hash value for the entry pointed to by Q. */
171 inline hashval_t
172 constexpr_fundef_hasher::hash (constexpr_fundef *fundef)
174 return DECL_UID (fundef->decl);
177 /* Return a previously saved definition of function FUN. */
179 static constexpr_fundef *
180 retrieve_constexpr_fundef (tree fun)
182 if (constexpr_fundef_table == NULL)
183 return NULL;
185 constexpr_fundef fundef = { fun, NULL, NULL, NULL };
186 return constexpr_fundef_table->find (&fundef);
189 /* Check whether the parameter and return types of FUN are valid for a
190 constexpr function, and complain if COMPLAIN. */
192 bool
193 is_valid_constexpr_fn (tree fun, bool complain)
195 bool ret = true;
197 if (DECL_INHERITED_CTOR (fun)
198 && TREE_CODE (fun) == TEMPLATE_DECL)
200 ret = false;
201 if (complain)
202 error ("inherited constructor %qD is not %<constexpr%>",
203 DECL_INHERITED_CTOR (fun));
205 else
207 for (tree parm = FUNCTION_FIRST_USER_PARM (fun);
208 parm != NULL_TREE; parm = TREE_CHAIN (parm))
209 if (!literal_type_p (TREE_TYPE (parm)))
211 ret = false;
212 if (complain)
214 auto_diagnostic_group d;
215 error ("invalid type for parameter %d of %<constexpr%> "
216 "function %q+#D", DECL_PARM_INDEX (parm), fun);
217 explain_non_literal_class (TREE_TYPE (parm));
222 if (LAMBDA_TYPE_P (CP_DECL_CONTEXT (fun)) && cxx_dialect < cxx17)
224 ret = false;
225 if (complain)
226 inform (DECL_SOURCE_LOCATION (fun),
227 "lambdas are implicitly %<constexpr%> only in C++17 and later");
229 else if (!DECL_CONSTRUCTOR_P (fun))
231 tree rettype = TREE_TYPE (TREE_TYPE (fun));
232 if (!literal_type_p (rettype))
234 ret = false;
235 if (complain)
237 auto_diagnostic_group d;
238 error ("invalid return type %qT of %<constexpr%> function %q+D",
239 rettype, fun);
240 explain_non_literal_class (rettype);
244 /* C++14 DR 1684 removed this restriction. */
245 if (cxx_dialect < cxx14
246 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fun)
247 && !CLASSTYPE_LITERAL_P (DECL_CONTEXT (fun)))
249 ret = false;
250 if (complain)
252 auto_diagnostic_group d;
253 if (pedwarn (DECL_SOURCE_LOCATION (fun), OPT_Wpedantic,
254 "enclosing class of %<constexpr%> non-static"
255 " member function %q+#D is not a literal type",
256 fun))
257 explain_non_literal_class (DECL_CONTEXT (fun));
261 else if (CLASSTYPE_VBASECLASSES (DECL_CONTEXT (fun)))
263 ret = false;
264 if (complain)
265 error ("%q#T has virtual base classes", DECL_CONTEXT (fun));
268 return ret;
271 /* Subroutine of build_data_member_initialization. MEMBER is a COMPONENT_REF
272 for a member of an anonymous aggregate, INIT is the initializer for that
273 member, and VEC_OUTER is the vector of constructor elements for the class
274 whose constructor we are processing. Add the initializer to the vector
275 and return true to indicate success. */
277 static bool
278 build_anon_member_initialization (tree member, tree init,
279 vec<constructor_elt, va_gc> **vec_outer)
281 /* MEMBER presents the relevant fields from the inside out, but we need
282 to build up the initializer from the outside in so that we can reuse
283 previously built CONSTRUCTORs if this is, say, the second field in an
284 anonymous struct. So we use a vec as a stack. */
285 auto_vec<tree, 2> fields;
288 fields.safe_push (TREE_OPERAND (member, 1));
289 member = TREE_OPERAND (member, 0);
291 while (ANON_AGGR_TYPE_P (TREE_TYPE (member))
292 && TREE_CODE (member) == COMPONENT_REF);
294 /* VEC has the constructor elements vector for the context of FIELD.
295 If FIELD is an anonymous aggregate, we will push inside it. */
296 vec<constructor_elt, va_gc> **vec = vec_outer;
297 tree field;
298 while (field = fields.pop(),
299 ANON_AGGR_TYPE_P (TREE_TYPE (field)))
301 tree ctor;
302 /* If there is already an outer constructor entry for the anonymous
303 aggregate FIELD, use it; otherwise, insert one. */
304 if (vec_safe_is_empty (*vec)
305 || (*vec)->last().index != field)
307 ctor = build_constructor (TREE_TYPE (field), NULL);
308 CONSTRUCTOR_APPEND_ELT (*vec, field, ctor);
310 else
311 ctor = (*vec)->last().value;
312 vec = &CONSTRUCTOR_ELTS (ctor);
315 /* Now we're at the innermost field, the one that isn't an anonymous
316 aggregate. Add its initializer to the CONSTRUCTOR and we're done. */
317 gcc_assert (fields.is_empty());
318 CONSTRUCTOR_APPEND_ELT (*vec, field, init);
320 return true;
323 /* Subroutine of build_constexpr_constructor_member_initializers.
324 The expression tree T represents a data member initialization
325 in a (constexpr) constructor definition. Build a pairing of
326 the data member with its initializer, and prepend that pair
327 to the existing initialization pair INITS. */
329 static bool
330 build_data_member_initialization (tree t, vec<constructor_elt, va_gc> **vec)
332 tree member, init;
333 if (TREE_CODE (t) == CLEANUP_POINT_EXPR)
334 t = TREE_OPERAND (t, 0);
335 if (TREE_CODE (t) == EXPR_STMT)
336 t = TREE_OPERAND (t, 0);
337 if (t == error_mark_node)
338 return false;
339 if (TREE_CODE (t) == STATEMENT_LIST)
341 tree_stmt_iterator i;
342 for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
344 if (! build_data_member_initialization (tsi_stmt (i), vec))
345 return false;
347 return true;
349 if (TREE_CODE (t) == CLEANUP_STMT)
351 /* We can't see a CLEANUP_STMT in a constructor for a literal class,
352 but we can in a constexpr constructor for a non-literal class. Just
353 ignore it; either all the initialization will be constant, in which
354 case the cleanup can't run, or it can't be constexpr.
355 Still recurse into CLEANUP_BODY. */
356 return build_data_member_initialization (CLEANUP_BODY (t), vec);
358 if (TREE_CODE (t) == CONVERT_EXPR)
359 t = TREE_OPERAND (t, 0);
360 if (TREE_CODE (t) == INIT_EXPR
361 /* vptr initialization shows up as a MODIFY_EXPR. In C++14 we only
362 use what this function builds for cx_check_missing_mem_inits, and
363 assignment in the ctor body doesn't count. */
364 || (cxx_dialect < cxx14 && TREE_CODE (t) == MODIFY_EXPR))
366 member = TREE_OPERAND (t, 0);
367 init = break_out_target_exprs (TREE_OPERAND (t, 1));
369 else if (TREE_CODE (t) == CALL_EXPR)
371 tree fn = get_callee_fndecl (t);
372 if (!fn || !DECL_CONSTRUCTOR_P (fn))
373 /* We're only interested in calls to subobject constructors. */
374 return true;
375 member = CALL_EXPR_ARG (t, 0);
376 /* We don't use build_cplus_new here because it complains about
377 abstract bases. Leaving the call unwrapped means that it has the
378 wrong type, but cxx_eval_constant_expression doesn't care. */
379 init = break_out_target_exprs (t);
381 else if (TREE_CODE (t) == BIND_EXPR)
382 return build_data_member_initialization (BIND_EXPR_BODY (t), vec);
383 else
384 /* Don't add anything else to the CONSTRUCTOR. */
385 return true;
386 if (INDIRECT_REF_P (member))
387 member = TREE_OPERAND (member, 0);
388 if (TREE_CODE (member) == NOP_EXPR)
390 tree op = member;
391 STRIP_NOPS (op);
392 if (TREE_CODE (op) == ADDR_EXPR)
394 gcc_assert (same_type_ignoring_top_level_qualifiers_p
395 (TREE_TYPE (TREE_TYPE (op)),
396 TREE_TYPE (TREE_TYPE (member))));
397 /* Initializing a cv-qualified member; we need to look through
398 the const_cast. */
399 member = op;
401 else if (op == current_class_ptr
402 && (same_type_ignoring_top_level_qualifiers_p
403 (TREE_TYPE (TREE_TYPE (member)),
404 current_class_type)))
405 /* Delegating constructor. */
406 member = op;
407 else
409 /* This is an initializer for an empty base; keep it for now so
410 we can check it in cxx_eval_bare_aggregate. */
411 gcc_assert (is_empty_class (TREE_TYPE (TREE_TYPE (member))));
414 if (TREE_CODE (member) == ADDR_EXPR)
415 member = TREE_OPERAND (member, 0);
416 if (TREE_CODE (member) == COMPONENT_REF)
418 tree aggr = TREE_OPERAND (member, 0);
419 if (TREE_CODE (aggr) == VAR_DECL)
420 /* Initializing a local variable, don't add anything. */
421 return true;
422 if (TREE_CODE (aggr) != COMPONENT_REF)
423 /* Normal member initialization. */
424 member = TREE_OPERAND (member, 1);
425 else if (ANON_AGGR_TYPE_P (TREE_TYPE (aggr)))
426 /* Initializing a member of an anonymous union. */
427 return build_anon_member_initialization (member, init, vec);
428 else
429 /* We're initializing a vtable pointer in a base. Leave it as
430 COMPONENT_REF so we remember the path to get to the vfield. */
431 gcc_assert (TREE_TYPE (member) == vtbl_ptr_type_node);
434 /* Value-initialization can produce multiple initializers for the
435 same field; use the last one. */
436 if (!vec_safe_is_empty (*vec) && (*vec)->last().index == member)
437 (*vec)->last().value = init;
438 else
439 CONSTRUCTOR_APPEND_ELT (*vec, member, init);
440 return true;
443 /* Subroutine of check_constexpr_ctor_body_1 and constexpr_fn_retval.
444 In C++11 mode checks that the TYPE_DECLs in the BIND_EXPR_VARS of a
445 BIND_EXPR conform to 7.1.5/3/4 on typedef and alias declarations. */
447 static bool
448 check_constexpr_bind_expr_vars (tree t)
450 gcc_assert (TREE_CODE (t) == BIND_EXPR);
452 for (tree var = BIND_EXPR_VARS (t); var; var = DECL_CHAIN (var))
453 if (TREE_CODE (var) == TYPE_DECL
454 && DECL_IMPLICIT_TYPEDEF_P (var)
455 && !LAMBDA_TYPE_P (TREE_TYPE (var)))
456 return false;
457 return true;
460 /* Subroutine of check_constexpr_ctor_body. */
462 static bool
463 check_constexpr_ctor_body_1 (tree last, tree list)
465 switch (TREE_CODE (list))
467 case DECL_EXPR:
468 if (TREE_CODE (DECL_EXPR_DECL (list)) == USING_DECL
469 || TREE_CODE (DECL_EXPR_DECL (list)) == TYPE_DECL)
470 return true;
471 return false;
473 case CLEANUP_POINT_EXPR:
474 return check_constexpr_ctor_body (last, TREE_OPERAND (list, 0),
475 /*complain=*/false);
477 case BIND_EXPR:
478 if (!check_constexpr_bind_expr_vars (list)
479 || !check_constexpr_ctor_body (last, BIND_EXPR_BODY (list),
480 /*complain=*/false))
481 return false;
482 return true;
484 case USING_STMT:
485 case STATIC_ASSERT:
486 case DEBUG_BEGIN_STMT:
487 return true;
489 default:
490 return false;
494 /* Make sure that there are no statements after LAST in the constructor
495 body represented by LIST. */
497 bool
498 check_constexpr_ctor_body (tree last, tree list, bool complain)
500 /* C++14 doesn't require a constexpr ctor to have an empty body. */
501 if (cxx_dialect >= cxx14)
502 return true;
504 bool ok = true;
505 if (TREE_CODE (list) == STATEMENT_LIST)
507 tree_stmt_iterator i = tsi_last (list);
508 for (; !tsi_end_p (i); tsi_prev (&i))
510 tree t = tsi_stmt (i);
511 if (t == last)
512 break;
513 if (!check_constexpr_ctor_body_1 (last, t))
515 ok = false;
516 break;
520 else if (list != last
521 && !check_constexpr_ctor_body_1 (last, list))
522 ok = false;
523 if (!ok)
525 if (complain)
526 error ("%<constexpr%> constructor does not have empty body");
527 DECL_DECLARED_CONSTEXPR_P (current_function_decl) = false;
529 return ok;
532 /* V is a vector of constructor elements built up for the base and member
533 initializers of a constructor for TYPE. They need to be in increasing
534 offset order, which they might not be yet if TYPE has a primary base
535 which is not first in the base-clause or a vptr and at least one base
536 all of which are non-primary. */
538 static vec<constructor_elt, va_gc> *
539 sort_constexpr_mem_initializers (tree type, vec<constructor_elt, va_gc> *v)
541 tree pri = CLASSTYPE_PRIMARY_BINFO (type);
542 tree field_type;
543 unsigned i;
544 constructor_elt *ce;
546 if (pri)
547 field_type = BINFO_TYPE (pri);
548 else if (TYPE_CONTAINS_VPTR_P (type))
549 field_type = vtbl_ptr_type_node;
550 else
551 return v;
553 /* Find the element for the primary base or vptr and move it to the
554 beginning of the vec. */
555 for (i = 0; vec_safe_iterate (v, i, &ce); ++i)
556 if (TREE_TYPE (ce->index) == field_type)
557 break;
559 if (i > 0 && i < vec_safe_length (v))
561 vec<constructor_elt, va_gc> &vref = *v;
562 constructor_elt elt = vref[i];
563 for (; i > 0; --i)
564 vref[i] = vref[i-1];
565 vref[0] = elt;
568 return v;
571 /* Build compile-time evalable representations of member-initializer list
572 for a constexpr constructor. */
574 static tree
575 build_constexpr_constructor_member_initializers (tree type, tree body)
577 vec<constructor_elt, va_gc> *vec = NULL;
578 bool ok = true;
579 while (true)
580 switch (TREE_CODE (body))
582 case MUST_NOT_THROW_EXPR:
583 case EH_SPEC_BLOCK:
584 body = TREE_OPERAND (body, 0);
585 break;
587 case STATEMENT_LIST:
588 for (tree_stmt_iterator i = tsi_start (body);
589 !tsi_end_p (i); tsi_next (&i))
591 body = tsi_stmt (i);
592 if (TREE_CODE (body) == BIND_EXPR)
593 break;
595 break;
597 case BIND_EXPR:
598 body = BIND_EXPR_BODY (body);
599 goto found;
601 default:
602 gcc_unreachable ();
604 found:
605 if (TREE_CODE (body) == TRY_BLOCK)
607 body = TREE_OPERAND (body, 0);
608 if (TREE_CODE (body) == BIND_EXPR)
609 body = BIND_EXPR_BODY (body);
611 if (TREE_CODE (body) == CLEANUP_POINT_EXPR)
613 body = TREE_OPERAND (body, 0);
614 if (TREE_CODE (body) == EXPR_STMT)
615 body = TREE_OPERAND (body, 0);
616 if (TREE_CODE (body) == INIT_EXPR
617 && (same_type_ignoring_top_level_qualifiers_p
618 (TREE_TYPE (TREE_OPERAND (body, 0)),
619 current_class_type)))
621 /* Trivial copy. */
622 return TREE_OPERAND (body, 1);
624 ok = build_data_member_initialization (body, &vec);
626 else if (TREE_CODE (body) == STATEMENT_LIST)
628 tree_stmt_iterator i;
629 for (i = tsi_start (body); !tsi_end_p (i); tsi_next (&i))
631 ok = build_data_member_initialization (tsi_stmt (i), &vec);
632 if (!ok)
633 break;
636 else if (EXPR_P (body))
637 ok = build_data_member_initialization (body, &vec);
638 else
639 gcc_assert (errorcount > 0);
640 if (ok)
642 if (vec_safe_length (vec) > 0)
644 /* In a delegating constructor, return the target. */
645 constructor_elt *ce = &(*vec)[0];
646 if (ce->index == current_class_ptr)
648 body = ce->value;
649 vec_free (vec);
650 return body;
653 vec = sort_constexpr_mem_initializers (type, vec);
654 return build_constructor (type, vec);
656 else
657 return error_mark_node;
660 /* We have an expression tree T that represents a call, either CALL_EXPR
661 or AGGR_INIT_EXPR. If the call is lexically to a named function,
662 retrun the _DECL for that function. */
664 static tree
665 get_function_named_in_call (tree t)
667 tree fun = cp_get_callee (t);
668 if (fun && TREE_CODE (fun) == ADDR_EXPR
669 && TREE_CODE (TREE_OPERAND (fun, 0)) == FUNCTION_DECL)
670 fun = TREE_OPERAND (fun, 0);
671 return fun;
674 /* Subroutine of register_constexpr_fundef. BODY is the body of a function
675 declared to be constexpr, or a sub-statement thereof. Returns the
676 return value if suitable, error_mark_node for a statement not allowed in
677 a constexpr function, or NULL_TREE if no return value was found. */
679 tree
680 constexpr_fn_retval (tree body)
682 switch (TREE_CODE (body))
684 case STATEMENT_LIST:
686 tree_stmt_iterator i;
687 tree expr = NULL_TREE;
688 for (i = tsi_start (body); !tsi_end_p (i); tsi_next (&i))
690 tree s = constexpr_fn_retval (tsi_stmt (i));
691 if (s == error_mark_node)
692 return error_mark_node;
693 else if (s == NULL_TREE)
694 /* Keep iterating. */;
695 else if (expr)
696 /* Multiple return statements. */
697 return error_mark_node;
698 else
699 expr = s;
701 return expr;
704 case RETURN_EXPR:
705 return break_out_target_exprs (TREE_OPERAND (body, 0));
707 case DECL_EXPR:
709 tree decl = DECL_EXPR_DECL (body);
710 if (TREE_CODE (decl) == USING_DECL
711 /* Accept __func__, __FUNCTION__, and __PRETTY_FUNCTION__. */
712 || DECL_ARTIFICIAL (decl))
713 return NULL_TREE;
714 return error_mark_node;
717 case CLEANUP_POINT_EXPR:
718 return constexpr_fn_retval (TREE_OPERAND (body, 0));
720 case BIND_EXPR:
721 if (!check_constexpr_bind_expr_vars (body))
722 return error_mark_node;
723 return constexpr_fn_retval (BIND_EXPR_BODY (body));
725 case USING_STMT:
726 case DEBUG_BEGIN_STMT:
727 return NULL_TREE;
729 case CALL_EXPR:
731 tree fun = get_function_named_in_call (body);
732 if (fun != NULL_TREE
733 && fndecl_built_in_p (fun, BUILT_IN_UNREACHABLE))
734 return NULL_TREE;
736 /* Fallthru. */
738 default:
739 return error_mark_node;
743 /* Subroutine of register_constexpr_fundef. BODY is the DECL_SAVED_TREE of
744 FUN; do the necessary transformations to turn it into a single expression
745 that we can store in the hash table. */
747 static tree
748 massage_constexpr_body (tree fun, tree body)
750 if (DECL_CONSTRUCTOR_P (fun))
751 body = build_constexpr_constructor_member_initializers
752 (DECL_CONTEXT (fun), body);
753 else if (cxx_dialect < cxx14)
755 if (TREE_CODE (body) == EH_SPEC_BLOCK)
756 body = EH_SPEC_STMTS (body);
757 if (TREE_CODE (body) == MUST_NOT_THROW_EXPR)
758 body = TREE_OPERAND (body, 0);
759 body = constexpr_fn_retval (body);
761 return body;
764 /* CTYPE is a type constructed from BODY. Return true if some
765 bases/fields are uninitialized, and complain if COMPLAIN. */
767 static bool
768 cx_check_missing_mem_inits (tree ctype, tree body, bool complain)
770 unsigned nelts = 0;
772 if (body)
774 if (TREE_CODE (body) != CONSTRUCTOR)
775 return false;
776 nelts = CONSTRUCTOR_NELTS (body);
778 tree field = TYPE_FIELDS (ctype);
780 if (TREE_CODE (ctype) == UNION_TYPE)
782 if (nelts == 0 && next_initializable_field (field))
784 if (complain)
785 error ("%<constexpr%> constructor for union %qT must "
786 "initialize exactly one non-static data member", ctype);
787 return true;
789 return false;
792 /* Iterate over the CONSTRUCTOR, checking any missing fields don't
793 need an explicit initialization. */
794 bool bad = false;
795 for (unsigned i = 0; i <= nelts; ++i)
797 tree index = NULL_TREE;
798 if (i < nelts)
800 index = CONSTRUCTOR_ELT (body, i)->index;
801 /* Skip base and vtable inits. */
802 if (TREE_CODE (index) != FIELD_DECL
803 || DECL_ARTIFICIAL (index))
804 continue;
807 for (; field != index; field = DECL_CHAIN (field))
809 tree ftype;
810 if (TREE_CODE (field) != FIELD_DECL)
811 continue;
812 if (DECL_UNNAMED_BIT_FIELD (field))
813 continue;
814 if (DECL_ARTIFICIAL (field))
815 continue;
816 if (ANON_AGGR_TYPE_P (TREE_TYPE (field)))
818 /* Recurse to check the anonummous aggregate member. */
819 bad |= cx_check_missing_mem_inits
820 (TREE_TYPE (field), NULL_TREE, complain);
821 if (bad && !complain)
822 return true;
823 continue;
825 ftype = strip_array_types (TREE_TYPE (field));
826 if (type_has_constexpr_default_constructor (ftype))
828 /* It's OK to skip a member with a trivial constexpr ctor.
829 A constexpr ctor that isn't trivial should have been
830 added in by now. */
831 gcc_checking_assert (!TYPE_HAS_COMPLEX_DFLT (ftype)
832 || errorcount != 0);
833 continue;
835 if (!complain)
836 return true;
837 auto_diagnostic_group d;
838 error ("member %qD must be initialized by mem-initializer "
839 "in %<constexpr%> constructor", field);
840 inform (DECL_SOURCE_LOCATION (field), "declared here");
841 bad = true;
843 if (field == NULL_TREE)
844 break;
846 if (ANON_AGGR_TYPE_P (TREE_TYPE (index)))
848 /* Check the anonymous aggregate initializer is valid. */
849 bad |= cx_check_missing_mem_inits
850 (TREE_TYPE (index), CONSTRUCTOR_ELT (body, i)->value, complain);
851 if (bad && !complain)
852 return true;
854 field = DECL_CHAIN (field);
857 return bad;
860 /* We are processing the definition of the constexpr function FUN.
861 Check that its BODY fulfills the propriate requirements and
862 enter it in the constexpr function definition table.
863 For constructor BODY is actually the TREE_LIST of the
864 member-initializer list. */
866 tree
867 register_constexpr_fundef (tree fun, tree body)
869 constexpr_fundef entry;
870 constexpr_fundef **slot;
872 if (!is_valid_constexpr_fn (fun, !DECL_GENERATED_P (fun)))
873 return NULL;
875 tree massaged = massage_constexpr_body (fun, body);
876 if (massaged == NULL_TREE || massaged == error_mark_node)
878 if (!DECL_CONSTRUCTOR_P (fun))
879 error ("body of %<constexpr%> function %qD not a return-statement",
880 fun);
881 return NULL;
884 if (!potential_rvalue_constant_expression (massaged))
886 if (!DECL_GENERATED_P (fun))
887 require_potential_rvalue_constant_expression (massaged);
888 return NULL;
891 if (DECL_CONSTRUCTOR_P (fun)
892 && cx_check_missing_mem_inits (DECL_CONTEXT (fun),
893 massaged, !DECL_GENERATED_P (fun)))
894 return NULL;
896 /* Create the constexpr function table if necessary. */
897 if (constexpr_fundef_table == NULL)
898 constexpr_fundef_table
899 = hash_table<constexpr_fundef_hasher>::create_ggc (101);
901 entry.decl = fun;
902 tree saved_fn = current_function_decl;
903 bool clear_ctx = false;
904 current_function_decl = fun;
905 if (DECL_RESULT (fun) && DECL_CONTEXT (DECL_RESULT (fun)) == NULL_TREE)
907 clear_ctx = true;
908 DECL_CONTEXT (DECL_RESULT (fun)) = fun;
910 entry.body = copy_fn (fun, entry.parms, entry.result);
911 current_function_decl = saved_fn;
912 slot = constexpr_fundef_table->find_slot (&entry, INSERT);
913 if (clear_ctx)
914 DECL_CONTEXT (DECL_RESULT (fun)) = NULL_TREE;
916 gcc_assert (*slot == NULL);
917 *slot = ggc_alloc<constexpr_fundef> ();
918 **slot = entry;
920 return fun;
923 /* FUN is a non-constexpr function called in a context that requires a
924 constant expression. If it comes from a constexpr template, explain why
925 the instantiation isn't constexpr. */
927 void
928 explain_invalid_constexpr_fn (tree fun)
930 static hash_set<tree> *diagnosed;
931 tree body;
932 location_t save_loc;
933 /* Only diagnose defaulted functions, lambdas, or instantiations. */
934 if (!DECL_DEFAULTED_FN (fun)
935 && !LAMBDA_TYPE_P (CP_DECL_CONTEXT (fun))
936 && !is_instantiation_of_constexpr (fun))
937 return;
938 if (diagnosed == NULL)
939 diagnosed = new hash_set<tree>;
940 if (diagnosed->add (fun))
941 /* Already explained. */
942 return;
944 save_loc = input_location;
945 if (!lambda_static_thunk_p (fun))
947 /* Diagnostics should completely ignore the static thunk, so leave
948 input_location set to our caller's location. */
949 input_location = DECL_SOURCE_LOCATION (fun);
950 inform (input_location,
951 "%qD is not usable as a %<constexpr%> function because:", fun);
953 /* First check the declaration. */
954 if (is_valid_constexpr_fn (fun, true))
956 /* Then if it's OK, the body. */
957 if (!DECL_DECLARED_CONSTEXPR_P (fun)
958 && !LAMBDA_TYPE_P (CP_DECL_CONTEXT (fun)))
959 explain_implicit_non_constexpr (fun);
960 else
962 body = massage_constexpr_body (fun, DECL_SAVED_TREE (fun));
963 require_potential_rvalue_constant_expression (body);
964 if (DECL_CONSTRUCTOR_P (fun))
965 cx_check_missing_mem_inits (DECL_CONTEXT (fun), body, true);
968 input_location = save_loc;
971 /* Objects of this type represent calls to constexpr functions
972 along with the bindings of parameters to their arguments, for
973 the purpose of compile time evaluation. */
975 struct GTY((for_user)) constexpr_call {
976 /* Description of the constexpr function definition. */
977 constexpr_fundef *fundef;
978 /* Parameter bindings environment. A TREE_VEC of arguments. */
979 tree bindings;
980 /* Result of the call.
981 NULL means the call is being evaluated.
982 error_mark_node means that the evaluation was erroneous;
983 otherwise, the actuall value of the call. */
984 tree result;
985 /* The hash of this call; we remember it here to avoid having to
986 recalculate it when expanding the hash table. */
987 hashval_t hash;
988 /* Whether __builtin_is_constant_evaluated() should evaluate to true. */
989 bool manifestly_const_eval;
992 struct constexpr_call_hasher : ggc_ptr_hash<constexpr_call>
994 static hashval_t hash (constexpr_call *);
995 static bool equal (constexpr_call *, constexpr_call *);
998 enum constexpr_switch_state {
999 /* Used when processing a switch for the first time by cxx_eval_switch_expr
1000 and default: label for that switch has not been seen yet. */
1001 css_default_not_seen,
1002 /* Used when processing a switch for the first time by cxx_eval_switch_expr
1003 and default: label for that switch has been seen already. */
1004 css_default_seen,
1005 /* Used when processing a switch for the second time by
1006 cxx_eval_switch_expr, where default: label should match. */
1007 css_default_processing
1010 /* The constexpr expansion context part which needs one instance per
1011 cxx_eval_outermost_constant_expr invocation. VALUES is a map of values of
1012 variables initialized within the expression. */
1014 struct constexpr_global_ctx {
1015 /* Values for any temporaries or local variables within the
1016 constant-expression. */
1017 hash_map<tree,tree> values;
1018 /* Number of cxx_eval_constant_expression calls (except skipped ones,
1019 on simple constants or location wrappers) encountered during current
1020 cxx_eval_outermost_constant_expr call. */
1021 HOST_WIDE_INT constexpr_ops_count;
1022 /* Heap VAR_DECLs created during the evaluation of the outermost constant
1023 expression. */
1024 auto_vec<tree, 16> heap_vars;
1025 /* Constructor. */
1026 constexpr_global_ctx () : constexpr_ops_count (0) {}
1029 /* The constexpr expansion context. CALL is the current function
1030 expansion, CTOR is the current aggregate initializer, OBJECT is the
1031 object being initialized by CTOR, either a VAR_DECL or a _REF. */
1033 struct constexpr_ctx {
1034 /* The part of the context that needs to be unique to the whole
1035 cxx_eval_outermost_constant_expr invocation. */
1036 constexpr_global_ctx *global;
1037 /* The innermost call we're evaluating. */
1038 constexpr_call *call;
1039 /* SAVE_EXPRs that we've seen within the current LOOP_EXPR. NULL if we
1040 aren't inside a loop. */
1041 vec<tree> *save_exprs;
1042 /* The CONSTRUCTOR we're currently building up for an aggregate
1043 initializer. */
1044 tree ctor;
1045 /* The object we're building the CONSTRUCTOR for. */
1046 tree object;
1047 /* If inside SWITCH_EXPR. */
1048 constexpr_switch_state *css_state;
1050 /* Whether we should error on a non-constant expression or fail quietly. */
1051 bool quiet;
1052 /* Whether we are strictly conforming to constant expression rules or
1053 trying harder to get a constant value. */
1054 bool strict;
1055 /* Whether __builtin_is_constant_evaluated () should be true. */
1056 bool manifestly_const_eval;
1059 /* A table of all constexpr calls that have been evaluated by the
1060 compiler in this translation unit. */
1062 static GTY (()) hash_table<constexpr_call_hasher> *constexpr_call_table;
1064 static tree cxx_eval_constant_expression (const constexpr_ctx *, tree,
1065 bool, bool *, bool *, tree * = NULL);
1067 /* Compute a hash value for a constexpr call representation. */
1069 inline hashval_t
1070 constexpr_call_hasher::hash (constexpr_call *info)
1072 return info->hash;
1075 /* Return true if the objects pointed to by P and Q represent calls
1076 to the same constexpr function with the same arguments.
1077 Otherwise, return false. */
1079 bool
1080 constexpr_call_hasher::equal (constexpr_call *lhs, constexpr_call *rhs)
1082 if (lhs == rhs)
1083 return true;
1084 if (lhs->hash != rhs->hash)
1085 return false;
1086 if (lhs->manifestly_const_eval != rhs->manifestly_const_eval)
1087 return false;
1088 if (!constexpr_fundef_hasher::equal (lhs->fundef, rhs->fundef))
1089 return false;
1090 return cp_tree_equal (lhs->bindings, rhs->bindings);
1093 /* Initialize the constexpr call table, if needed. */
1095 static void
1096 maybe_initialize_constexpr_call_table (void)
1098 if (constexpr_call_table == NULL)
1099 constexpr_call_table = hash_table<constexpr_call_hasher>::create_ggc (101);
1102 /* During constexpr CALL_EXPR evaluation, to avoid issues with sharing when
1103 a function happens to get called recursively, we unshare the callee
1104 function's body and evaluate this unshared copy instead of evaluating the
1105 original body.
1107 FUNDEF_COPIES_TABLE is a per-function freelist of these unshared function
1108 copies. The underlying data structure of FUNDEF_COPIES_TABLE is a hash_map
1109 that's keyed off of the original FUNCTION_DECL and whose value is a
1110 TREE_LIST of this function's unused copies awaiting reuse.
1112 This is not GC-deletable to avoid GC affecting UID generation. */
1114 static GTY(()) hash_map<tree, tree> *fundef_copies_table;
1116 /* Reuse a copy or create a new unshared copy of the function FUN.
1117 Return this copy. We use a TREE_LIST whose PURPOSE is body, VALUE
1118 is parms, TYPE is result. */
1120 static tree
1121 get_fundef_copy (constexpr_fundef *fundef)
1123 tree copy;
1124 bool existed;
1125 tree *slot = &(hash_map_safe_get_or_insert<hm_ggc>
1126 (fundef_copies_table, fundef->decl, &existed, 127));
1128 if (!existed)
1130 /* There is no cached function available, or in use. We can use
1131 the function directly. That the slot is now created records
1132 that this function is now in use. */
1133 copy = build_tree_list (fundef->body, fundef->parms);
1134 TREE_TYPE (copy) = fundef->result;
1136 else if (*slot == NULL_TREE)
1138 /* We've already used the function itself, so make a copy. */
1139 copy = build_tree_list (NULL, NULL);
1140 tree saved_body = DECL_SAVED_TREE (fundef->decl);
1141 tree saved_parms = DECL_ARGUMENTS (fundef->decl);
1142 tree saved_result = DECL_RESULT (fundef->decl);
1143 tree saved_fn = current_function_decl;
1144 DECL_SAVED_TREE (fundef->decl) = fundef->body;
1145 DECL_ARGUMENTS (fundef->decl) = fundef->parms;
1146 DECL_RESULT (fundef->decl) = fundef->result;
1147 current_function_decl = fundef->decl;
1148 TREE_PURPOSE (copy) = copy_fn (fundef->decl, TREE_VALUE (copy),
1149 TREE_TYPE (copy));
1150 current_function_decl = saved_fn;
1151 DECL_RESULT (fundef->decl) = saved_result;
1152 DECL_ARGUMENTS (fundef->decl) = saved_parms;
1153 DECL_SAVED_TREE (fundef->decl) = saved_body;
1155 else
1157 /* We have a cached function available. */
1158 copy = *slot;
1159 *slot = TREE_CHAIN (copy);
1162 return copy;
1165 /* Save the copy COPY of function FUN for later reuse by
1166 get_fundef_copy(). By construction, there will always be an entry
1167 to find. */
1169 static void
1170 save_fundef_copy (tree fun, tree copy)
1172 tree *slot = fundef_copies_table->get (fun);
1173 TREE_CHAIN (copy) = *slot;
1174 *slot = copy;
1177 /* We have an expression tree T that represents a call, either CALL_EXPR
1178 or AGGR_INIT_EXPR. Return the Nth argument. */
1180 static inline tree
1181 get_nth_callarg (tree t, int n)
1183 switch (TREE_CODE (t))
1185 case CALL_EXPR:
1186 return CALL_EXPR_ARG (t, n);
1188 case AGGR_INIT_EXPR:
1189 return AGGR_INIT_EXPR_ARG (t, n);
1191 default:
1192 gcc_unreachable ();
1193 return NULL;
1197 /* Attempt to evaluate T which represents a call to a builtin function.
1198 We assume here that all builtin functions evaluate to scalar types
1199 represented by _CST nodes. */
1201 static tree
1202 cxx_eval_builtin_function_call (const constexpr_ctx *ctx, tree t, tree fun,
1203 bool lval,
1204 bool *non_constant_p, bool *overflow_p)
1206 const int nargs = call_expr_nargs (t);
1207 tree *args = (tree *) alloca (nargs * sizeof (tree));
1208 tree new_call;
1209 int i;
1211 /* Don't fold __builtin_constant_p within a constexpr function. */
1212 bool bi_const_p = DECL_IS_BUILTIN_CONSTANT_P (fun);
1214 /* If we aren't requiring a constant expression, defer __builtin_constant_p
1215 in a constexpr function until we have values for the parameters. */
1216 if (bi_const_p
1217 && !ctx->manifestly_const_eval
1218 && current_function_decl
1219 && DECL_DECLARED_CONSTEXPR_P (current_function_decl))
1221 *non_constant_p = true;
1222 return t;
1225 /* For __builtin_is_constant_evaluated, defer it if not
1226 ctx->manifestly_const_eval, otherwise fold it to true. */
1227 if (fndecl_built_in_p (fun, CP_BUILT_IN_IS_CONSTANT_EVALUATED,
1228 BUILT_IN_FRONTEND))
1230 if (!ctx->manifestly_const_eval)
1232 *non_constant_p = true;
1233 return t;
1235 return boolean_true_node;
1238 /* Be permissive for arguments to built-ins; __builtin_constant_p should
1239 return constant false for a non-constant argument. */
1240 constexpr_ctx new_ctx = *ctx;
1241 new_ctx.quiet = true;
1242 for (i = 0; i < nargs; ++i)
1244 args[i] = CALL_EXPR_ARG (t, i);
1245 /* If builtin_valid_in_constant_expr_p is true,
1246 potential_constant_expression_1 has not recursed into the arguments
1247 of the builtin, verify it here. */
1248 if (!builtin_valid_in_constant_expr_p (fun)
1249 || potential_constant_expression (args[i]))
1251 bool dummy1 = false, dummy2 = false;
1252 args[i] = cxx_eval_constant_expression (&new_ctx, args[i], false,
1253 &dummy1, &dummy2);
1256 if (bi_const_p)
1257 /* For __builtin_constant_p, fold all expressions with constant values
1258 even if they aren't C++ constant-expressions. */
1259 args[i] = cp_fold_rvalue (args[i]);
1262 bool save_ffbcp = force_folding_builtin_constant_p;
1263 force_folding_builtin_constant_p |= ctx->manifestly_const_eval;
1264 tree save_cur_fn = current_function_decl;
1265 /* Return name of ctx->call->fundef->decl for __builtin_FUNCTION (). */
1266 if (fndecl_built_in_p (fun, BUILT_IN_FUNCTION)
1267 && ctx->call
1268 && ctx->call->fundef)
1269 current_function_decl = ctx->call->fundef->decl;
1270 new_call = fold_builtin_call_array (EXPR_LOCATION (t), TREE_TYPE (t),
1271 CALL_EXPR_FN (t), nargs, args);
1272 current_function_decl = save_cur_fn;
1273 force_folding_builtin_constant_p = save_ffbcp;
1274 if (new_call == NULL)
1276 if (!*non_constant_p && !ctx->quiet)
1278 /* Do not allow__builtin_unreachable in constexpr function.
1279 The __builtin_unreachable call with BUILTINS_LOCATION
1280 comes from cp_maybe_instrument_return. */
1281 if (fndecl_built_in_p (fun, BUILT_IN_UNREACHABLE)
1282 && EXPR_LOCATION (t) == BUILTINS_LOCATION)
1283 error ("%<constexpr%> call flows off the end of the function");
1284 else
1286 new_call = build_call_array_loc (EXPR_LOCATION (t), TREE_TYPE (t),
1287 CALL_EXPR_FN (t), nargs, args);
1288 error ("%q+E is not a constant expression", new_call);
1291 *non_constant_p = true;
1292 return t;
1295 if (!potential_constant_expression (new_call))
1297 if (!*non_constant_p && !ctx->quiet)
1298 error ("%q+E is not a constant expression", new_call);
1299 *non_constant_p = true;
1300 return t;
1303 return cxx_eval_constant_expression (&new_ctx, new_call, lval,
1304 non_constant_p, overflow_p);
1307 /* TEMP is the constant value of a temporary object of type TYPE. Adjust
1308 the type of the value to match. */
1310 static tree
1311 adjust_temp_type (tree type, tree temp)
1313 if (same_type_p (TREE_TYPE (temp), type))
1314 return temp;
1315 /* Avoid wrapping an aggregate value in a NOP_EXPR. */
1316 if (TREE_CODE (temp) == CONSTRUCTOR)
1318 /* build_constructor wouldn't retain various CONSTRUCTOR flags. */
1319 tree t = copy_node (temp);
1320 TREE_TYPE (t) = type;
1321 return t;
1323 if (TREE_CODE (temp) == EMPTY_CLASS_EXPR)
1324 return build0 (EMPTY_CLASS_EXPR, type);
1325 gcc_assert (scalarish_type_p (type));
1326 /* Now we know we're dealing with a scalar, and a prvalue of non-class
1327 type is cv-unqualified. */
1328 return cp_fold_convert (cv_unqualified (type), temp);
1331 /* If T is a CONSTRUCTOR, return an unshared copy of T and any
1332 sub-CONSTRUCTORs. Otherwise return T.
1334 We use this whenever we initialize an object as a whole, whether it's a
1335 parameter, a local variable, or a subobject, so that subsequent
1336 modifications don't affect other places where it was used. */
1338 tree
1339 unshare_constructor (tree t MEM_STAT_DECL)
1341 if (!t || TREE_CODE (t) != CONSTRUCTOR)
1342 return t;
1343 auto_vec <tree*, 4> ptrs;
1344 ptrs.safe_push (&t);
1345 while (!ptrs.is_empty ())
1347 tree *p = ptrs.pop ();
1348 tree n = copy_node (*p PASS_MEM_STAT);
1349 CONSTRUCTOR_ELTS (n) = vec_safe_copy (CONSTRUCTOR_ELTS (*p) PASS_MEM_STAT);
1350 *p = n;
1351 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (n);
1352 constructor_elt *ce;
1353 for (HOST_WIDE_INT i = 0; vec_safe_iterate (v, i, &ce); ++i)
1354 if (TREE_CODE (ce->value) == CONSTRUCTOR)
1355 ptrs.safe_push (&ce->value);
1357 return t;
1360 /* If T is a CONSTRUCTOR, ggc_free T and any sub-CONSTRUCTORs. */
1362 static void
1363 free_constructor (tree t)
1365 if (!t || TREE_CODE (t) != CONSTRUCTOR)
1366 return;
1367 releasing_vec ctors;
1368 vec_safe_push (ctors, t);
1369 while (!ctors->is_empty ())
1371 tree c = ctors->pop ();
1372 if (vec<constructor_elt, va_gc> *elts = CONSTRUCTOR_ELTS (c))
1374 constructor_elt *ce;
1375 for (HOST_WIDE_INT i = 0; vec_safe_iterate (elts, i, &ce); ++i)
1376 if (TREE_CODE (ce->value) == CONSTRUCTOR)
1377 vec_safe_push (ctors, ce->value);
1378 ggc_free (elts);
1380 ggc_free (c);
1384 /* Subroutine of cxx_eval_call_expression.
1385 We are processing a call expression (either CALL_EXPR or
1386 AGGR_INIT_EXPR) in the context of CTX. Evaluate
1387 all arguments and bind their values to correspondings
1388 parameters, making up the NEW_CALL context. */
1390 static void
1391 cxx_bind_parameters_in_call (const constexpr_ctx *ctx, tree t,
1392 constexpr_call *new_call,
1393 bool *non_constant_p, bool *overflow_p,
1394 bool *non_constant_args)
1396 const int nargs = call_expr_nargs (t);
1397 tree fun = new_call->fundef->decl;
1398 tree parms = new_call->fundef->parms;
1399 int i;
1400 /* We don't record ellipsis args below. */
1401 int nparms = list_length (parms);
1402 int nbinds = nargs < nparms ? nargs : nparms;
1403 tree binds = new_call->bindings = make_tree_vec (nbinds);
1404 for (i = 0; i < nargs; ++i)
1406 tree x, arg;
1407 tree type = parms ? TREE_TYPE (parms) : void_type_node;
1408 x = get_nth_callarg (t, i);
1409 /* For member function, the first argument is a pointer to the implied
1410 object. For a constructor, it might still be a dummy object, in
1411 which case we get the real argument from ctx. */
1412 if (i == 0 && DECL_CONSTRUCTOR_P (fun)
1413 && is_dummy_object (x))
1415 x = ctx->object;
1416 x = build_address (x);
1418 if (TREE_ADDRESSABLE (type))
1419 /* Undo convert_for_arg_passing work here. */
1420 x = convert_from_reference (x);
1421 arg = cxx_eval_constant_expression (ctx, x, /*lval=*/false,
1422 non_constant_p, overflow_p);
1423 /* Don't VERIFY_CONSTANT here. */
1424 if (*non_constant_p && ctx->quiet)
1425 return;
1426 /* Just discard ellipsis args after checking their constantitude. */
1427 if (!parms)
1428 continue;
1430 if (!*non_constant_p)
1432 /* Unsharing here isn't necessary for correctness, but it
1433 significantly improves memory performance for some reason. */
1434 arg = unshare_constructor (arg);
1435 /* Make sure the binding has the same type as the parm. But
1436 only for constant args. */
1437 if (!TYPE_REF_P (type))
1438 arg = adjust_temp_type (type, arg);
1439 if (!TREE_CONSTANT (arg))
1440 *non_constant_args = true;
1441 TREE_VEC_ELT (binds, i) = arg;
1443 parms = TREE_CHAIN (parms);
1447 /* Variables and functions to manage constexpr call expansion context.
1448 These do not need to be marked for PCH or GC. */
1450 /* FIXME remember and print actual constant arguments. */
1451 static vec<tree> call_stack;
1452 static int call_stack_tick;
1453 static int last_cx_error_tick;
1455 static int
1456 push_cx_call_context (tree call)
1458 ++call_stack_tick;
1459 if (!EXPR_HAS_LOCATION (call))
1460 SET_EXPR_LOCATION (call, input_location);
1461 call_stack.safe_push (call);
1462 int len = call_stack.length ();
1463 if (len > max_constexpr_depth)
1464 return false;
1465 return len;
1468 static void
1469 pop_cx_call_context (void)
1471 ++call_stack_tick;
1472 call_stack.pop ();
1475 vec<tree>
1476 cx_error_context (void)
1478 vec<tree> r = vNULL;
1479 if (call_stack_tick != last_cx_error_tick
1480 && !call_stack.is_empty ())
1481 r = call_stack;
1482 last_cx_error_tick = call_stack_tick;
1483 return r;
1486 /* Evaluate a call T to a GCC internal function when possible and return
1487 the evaluated result or, under the control of CTX, give an error, set
1488 NON_CONSTANT_P, and return the unevaluated call T otherwise. */
1490 static tree
1491 cxx_eval_internal_function (const constexpr_ctx *ctx, tree t,
1492 bool lval,
1493 bool *non_constant_p, bool *overflow_p)
1495 enum tree_code opcode = ERROR_MARK;
1497 switch (CALL_EXPR_IFN (t))
1499 case IFN_UBSAN_NULL:
1500 case IFN_UBSAN_BOUNDS:
1501 case IFN_UBSAN_VPTR:
1502 case IFN_FALLTHROUGH:
1503 return void_node;
1505 case IFN_ADD_OVERFLOW:
1506 opcode = PLUS_EXPR;
1507 break;
1508 case IFN_SUB_OVERFLOW:
1509 opcode = MINUS_EXPR;
1510 break;
1511 case IFN_MUL_OVERFLOW:
1512 opcode = MULT_EXPR;
1513 break;
1515 case IFN_LAUNDER:
1516 return cxx_eval_constant_expression (ctx, CALL_EXPR_ARG (t, 0),
1517 false, non_constant_p, overflow_p);
1519 case IFN_VEC_CONVERT:
1521 tree arg = cxx_eval_constant_expression (ctx, CALL_EXPR_ARG (t, 0),
1522 false, non_constant_p,
1523 overflow_p);
1524 if (TREE_CODE (arg) == VECTOR_CST)
1525 return fold_const_call (CFN_VEC_CONVERT, TREE_TYPE (t), arg);
1526 else
1528 *non_constant_p = true;
1529 return t;
1533 default:
1534 if (!ctx->quiet)
1535 error_at (cp_expr_loc_or_input_loc (t),
1536 "call to internal function %qE", t);
1537 *non_constant_p = true;
1538 return t;
1541 /* Evaluate constant arguments using OPCODE and return a complex
1542 number containing the result and the overflow bit. */
1543 tree arg0 = cxx_eval_constant_expression (ctx, CALL_EXPR_ARG (t, 0), lval,
1544 non_constant_p, overflow_p);
1545 tree arg1 = cxx_eval_constant_expression (ctx, CALL_EXPR_ARG (t, 1), lval,
1546 non_constant_p, overflow_p);
1548 if (TREE_CODE (arg0) == INTEGER_CST && TREE_CODE (arg1) == INTEGER_CST)
1550 location_t loc = cp_expr_loc_or_input_loc (t);
1551 tree type = TREE_TYPE (TREE_TYPE (t));
1552 tree result = fold_binary_loc (loc, opcode, type,
1553 fold_convert_loc (loc, type, arg0),
1554 fold_convert_loc (loc, type, arg1));
1555 tree ovf
1556 = build_int_cst (type, arith_overflowed_p (opcode, type, arg0, arg1));
1557 /* Reset TREE_OVERFLOW to avoid warnings for the overflow. */
1558 if (TREE_OVERFLOW (result))
1559 TREE_OVERFLOW (result) = 0;
1561 return build_complex (TREE_TYPE (t), result, ovf);
1564 *non_constant_p = true;
1565 return t;
1568 /* Clean CONSTRUCTOR_NO_CLEARING from CTOR and its sub-aggregates. */
1570 static void
1571 clear_no_implicit_zero (tree ctor)
1573 if (CONSTRUCTOR_NO_CLEARING (ctor))
1575 CONSTRUCTOR_NO_CLEARING (ctor) = false;
1576 tree elt; unsigned HOST_WIDE_INT idx;
1577 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), idx, elt)
1578 if (TREE_CODE (elt) == CONSTRUCTOR)
1579 clear_no_implicit_zero (elt);
1583 /* Complain about a const object OBJ being modified in a constant expression.
1584 EXPR is the MODIFY_EXPR expression performing the modification. */
1586 static void
1587 modifying_const_object_error (tree expr, tree obj)
1589 location_t loc = cp_expr_loc_or_input_loc (expr);
1590 auto_diagnostic_group d;
1591 error_at (loc, "modifying a const object %qE is not allowed in "
1592 "a constant expression", TREE_OPERAND (expr, 0));
1593 inform (location_of (obj), "originally declared %<const%> here");
1596 /* Return true if FNDECL is a replaceable global allocation function that
1597 should be useable during constant expression evaluation. */
1599 static inline bool
1600 cxx_replaceable_global_alloc_fn (tree fndecl)
1602 return (cxx_dialect >= cxx2a
1603 && IDENTIFIER_NEWDEL_OP_P (DECL_NAME (fndecl))
1604 && CP_DECL_CONTEXT (fndecl) == global_namespace);
1607 /* Subroutine of cxx_eval_constant_expression.
1608 Evaluate the call expression tree T in the context of OLD_CALL expression
1609 evaluation. */
1611 static tree
1612 cxx_eval_call_expression (const constexpr_ctx *ctx, tree t,
1613 bool lval,
1614 bool *non_constant_p, bool *overflow_p)
1616 location_t loc = cp_expr_loc_or_input_loc (t);
1617 tree fun = get_function_named_in_call (t);
1618 constexpr_call new_call
1619 = { NULL, NULL, NULL, 0, ctx->manifestly_const_eval };
1620 int depth_ok;
1622 if (fun == NULL_TREE)
1623 return cxx_eval_internal_function (ctx, t, lval,
1624 non_constant_p, overflow_p);
1626 if (TREE_CODE (fun) != FUNCTION_DECL)
1628 /* Might be a constexpr function pointer. */
1629 fun = cxx_eval_constant_expression (ctx, fun,
1630 /*lval*/false, non_constant_p,
1631 overflow_p);
1632 STRIP_NOPS (fun);
1633 if (TREE_CODE (fun) == ADDR_EXPR)
1634 fun = TREE_OPERAND (fun, 0);
1635 /* For TARGET_VTABLE_USES_DESCRIPTORS targets, there is no
1636 indirection, the called expression is a pointer into the
1637 virtual table which should contain FDESC_EXPR. Extract the
1638 FUNCTION_DECL from there. */
1639 else if (TARGET_VTABLE_USES_DESCRIPTORS
1640 && TREE_CODE (fun) == POINTER_PLUS_EXPR
1641 && TREE_CODE (TREE_OPERAND (fun, 0)) == ADDR_EXPR
1642 && TREE_CODE (TREE_OPERAND (fun, 1)) == INTEGER_CST)
1644 tree d = TREE_OPERAND (TREE_OPERAND (fun, 0), 0);
1645 if (VAR_P (d)
1646 && DECL_VTABLE_OR_VTT_P (d)
1647 && TREE_CODE (TREE_TYPE (d)) == ARRAY_TYPE
1648 && TREE_TYPE (TREE_TYPE (d)) == vtable_entry_type
1649 && DECL_INITIAL (d)
1650 && TREE_CODE (DECL_INITIAL (d)) == CONSTRUCTOR)
1652 tree i = int_const_binop (TRUNC_DIV_EXPR, TREE_OPERAND (fun, 1),
1653 TYPE_SIZE_UNIT (vtable_entry_type));
1654 HOST_WIDE_INT idx = find_array_ctor_elt (DECL_INITIAL (d), i);
1655 if (idx >= 0)
1657 tree fdesc
1658 = (*CONSTRUCTOR_ELTS (DECL_INITIAL (d)))[idx].value;
1659 if (TREE_CODE (fdesc) == FDESC_EXPR
1660 && integer_zerop (TREE_OPERAND (fdesc, 1)))
1661 fun = TREE_OPERAND (fdesc, 0);
1666 if (TREE_CODE (fun) != FUNCTION_DECL)
1668 if (!ctx->quiet && !*non_constant_p)
1669 error_at (loc, "expression %qE does not designate a %<constexpr%> "
1670 "function", fun);
1671 *non_constant_p = true;
1672 return t;
1674 if (DECL_CLONED_FUNCTION_P (fun))
1675 fun = DECL_CLONED_FUNCTION (fun);
1677 if (is_ubsan_builtin_p (fun))
1678 return void_node;
1680 if (fndecl_built_in_p (fun))
1681 return cxx_eval_builtin_function_call (ctx, t, fun,
1682 lval, non_constant_p, overflow_p);
1683 if (!DECL_DECLARED_CONSTEXPR_P (fun))
1685 if (cxx_replaceable_global_alloc_fn (fun))
1687 const int nargs = call_expr_nargs (t);
1688 tree arg0 = NULL_TREE;
1689 for (int i = 0; i < nargs; ++i)
1691 tree arg = CALL_EXPR_ARG (t, i);
1692 arg = cxx_eval_constant_expression (ctx, arg, false,
1693 non_constant_p, overflow_p);
1694 VERIFY_CONSTANT (arg);
1695 if (i == 0)
1696 arg0 = arg;
1698 gcc_assert (arg0);
1699 if (IDENTIFIER_NEW_OP_P (DECL_NAME (fun)))
1701 tree type = build_array_type_nelts (char_type_node,
1702 tree_to_uhwi (arg0));
1703 tree var = build_decl (loc, VAR_DECL, heap_uninit_identifier,
1704 type);
1705 DECL_ARTIFICIAL (var) = 1;
1706 TREE_STATIC (var) = 1;
1707 ctx->global->heap_vars.safe_push (var);
1708 ctx->global->values.put (var, NULL_TREE);
1709 return fold_convert (ptr_type_node, build_address (var));
1711 else
1713 STRIP_NOPS (arg0);
1714 if (TREE_CODE (arg0) == ADDR_EXPR
1715 && VAR_P (TREE_OPERAND (arg0, 0)))
1717 tree var = TREE_OPERAND (arg0, 0);
1718 if (DECL_NAME (var) == heap_uninit_identifier
1719 || DECL_NAME (var) == heap_identifier)
1721 DECL_NAME (var) = heap_deleted_identifier;
1722 ctx->global->values.remove (var);
1723 return void_node;
1725 else if (DECL_NAME (var) == heap_deleted_identifier)
1727 if (!ctx->quiet)
1728 error_at (loc, "deallocation of already deallocated "
1729 "storage");
1730 *non_constant_p = true;
1731 return t;
1734 if (!ctx->quiet)
1735 error_at (loc, "deallocation of storage that was "
1736 "not previously allocated");
1737 *non_constant_p = true;
1738 return t;
1741 if (!ctx->quiet)
1743 if (!lambda_static_thunk_p (fun))
1744 error_at (loc, "call to non-%<constexpr%> function %qD", fun);
1745 explain_invalid_constexpr_fn (fun);
1747 *non_constant_p = true;
1748 return t;
1751 constexpr_ctx new_ctx = *ctx;
1752 if (DECL_CONSTRUCTOR_P (fun) && !ctx->object
1753 && TREE_CODE (t) == AGGR_INIT_EXPR)
1755 /* We want to have an initialization target for an AGGR_INIT_EXPR.
1756 If we don't already have one in CTX, use the AGGR_INIT_EXPR_SLOT. */
1757 new_ctx.object = AGGR_INIT_EXPR_SLOT (t);
1758 tree ctor = new_ctx.ctor = build_constructor (DECL_CONTEXT (fun), NULL);
1759 CONSTRUCTOR_NO_CLEARING (ctor) = true;
1760 ctx->global->values.put (new_ctx.object, ctor);
1761 ctx = &new_ctx;
1764 /* Shortcut trivial constructor/op=. */
1765 if (trivial_fn_p (fun))
1767 tree init = NULL_TREE;
1768 if (call_expr_nargs (t) == 2)
1769 init = convert_from_reference (get_nth_callarg (t, 1));
1770 else if (TREE_CODE (t) == AGGR_INIT_EXPR
1771 && AGGR_INIT_ZERO_FIRST (t))
1772 init = build_zero_init (DECL_CONTEXT (fun), NULL_TREE, false);
1773 if (init)
1775 tree op = get_nth_callarg (t, 0);
1776 if (is_dummy_object (op))
1777 op = ctx->object;
1778 else
1779 op = build1 (INDIRECT_REF, TREE_TYPE (TREE_TYPE (op)), op);
1780 tree set = build2 (MODIFY_EXPR, TREE_TYPE (op), op, init);
1781 new_ctx.call = &new_call;
1782 return cxx_eval_constant_expression (&new_ctx, set, lval,
1783 non_constant_p, overflow_p);
1787 /* We can't defer instantiating the function any longer. */
1788 if (!DECL_INITIAL (fun)
1789 && DECL_TEMPLOID_INSTANTIATION (fun))
1791 location_t save_loc = input_location;
1792 input_location = loc;
1793 ++function_depth;
1794 instantiate_decl (fun, /*defer_ok*/false, /*expl_inst*/false);
1795 --function_depth;
1796 input_location = save_loc;
1799 /* If in direct recursive call, optimize definition search. */
1800 if (ctx && ctx->call && ctx->call->fundef && ctx->call->fundef->decl == fun)
1801 new_call.fundef = ctx->call->fundef;
1802 else
1804 new_call.fundef = retrieve_constexpr_fundef (fun);
1805 if (new_call.fundef == NULL || new_call.fundef->body == NULL
1806 || fun == current_function_decl)
1808 if (!ctx->quiet)
1810 /* We need to check for current_function_decl here in case we're
1811 being called during cp_fold_function, because at that point
1812 DECL_INITIAL is set properly and we have a fundef but we
1813 haven't lowered invisirefs yet (c++/70344). */
1814 if (DECL_INITIAL (fun) == error_mark_node
1815 || fun == current_function_decl)
1816 error_at (loc, "%qD called in a constant expression before its "
1817 "definition is complete", fun);
1818 else if (DECL_INITIAL (fun))
1820 /* The definition of fun was somehow unsuitable. But pretend
1821 that lambda static thunks don't exist. */
1822 if (!lambda_static_thunk_p (fun))
1823 error_at (loc, "%qD called in a constant expression", fun);
1824 explain_invalid_constexpr_fn (fun);
1826 else
1827 error_at (loc, "%qD used before its definition", fun);
1829 *non_constant_p = true;
1830 return t;
1834 bool non_constant_args = false;
1835 cxx_bind_parameters_in_call (ctx, t, &new_call,
1836 non_constant_p, overflow_p, &non_constant_args);
1838 /* We build up the bindings list before we know whether we already have this
1839 call cached. If we don't end up saving these bindings, ggc_free them when
1840 this function exits. */
1841 class free_bindings
1843 public:
1844 tree &bindings;
1845 bool do_free;
1846 free_bindings (tree &b): bindings (b), do_free(true) { }
1847 void preserve () { do_free = false; }
1848 ~free_bindings () {
1849 if (do_free)
1851 for (int i = 0; i < TREE_VEC_LENGTH (bindings); ++i)
1852 free_constructor (TREE_VEC_ELT (bindings, i));
1853 ggc_free (bindings);
1856 } fb (new_call.bindings);
1858 if (*non_constant_p)
1859 return t;
1861 depth_ok = push_cx_call_context (t);
1863 /* Remember the object we are constructing. */
1864 tree new_obj = NULL_TREE;
1865 if (DECL_CONSTRUCTOR_P (fun))
1867 /* In a constructor, it should be the first `this' argument.
1868 At this point it has already been evaluated in the call
1869 to cxx_bind_parameters_in_call. */
1870 new_obj = TREE_VEC_ELT (new_call.bindings, 0);
1871 STRIP_NOPS (new_obj);
1872 if (TREE_CODE (new_obj) == ADDR_EXPR)
1873 new_obj = TREE_OPERAND (new_obj, 0);
1876 tree result = NULL_TREE;
1878 constexpr_call *entry = NULL;
1879 if (depth_ok && !non_constant_args && ctx->strict)
1881 new_call.hash = constexpr_fundef_hasher::hash (new_call.fundef);
1882 new_call.hash
1883 = iterative_hash_template_arg (new_call.bindings, new_call.hash);
1884 new_call.hash
1885 = iterative_hash_object (ctx->manifestly_const_eval, new_call.hash);
1887 /* If we have seen this call before, we are done. */
1888 maybe_initialize_constexpr_call_table ();
1889 constexpr_call **slot
1890 = constexpr_call_table->find_slot (&new_call, INSERT);
1891 entry = *slot;
1892 if (entry == NULL)
1894 /* Only cache up to constexpr_cache_depth to limit memory use. */
1895 if (depth_ok < constexpr_cache_depth)
1897 /* We need to keep a pointer to the entry, not just the slot, as
1898 the slot can move during evaluation of the body. */
1899 *slot = entry = ggc_alloc<constexpr_call> ();
1900 *entry = new_call;
1901 fb.preserve ();
1904 /* Calls that are in progress have their result set to NULL, so that we
1905 can detect circular dependencies. Now that we only cache up to
1906 constexpr_cache_depth this won't catch circular dependencies that
1907 start deeper, but they'll hit the recursion or ops limit. */
1908 else if (entry->result == NULL)
1910 if (!ctx->quiet)
1911 error ("call has circular dependency");
1912 *non_constant_p = true;
1913 entry->result = result = error_mark_node;
1915 else
1916 result = entry->result;
1919 if (!depth_ok)
1921 if (!ctx->quiet)
1922 error ("%<constexpr%> evaluation depth exceeds maximum of %d (use "
1923 "%<-fconstexpr-depth=%> to increase the maximum)",
1924 max_constexpr_depth);
1925 *non_constant_p = true;
1926 result = error_mark_node;
1928 else
1930 if (result && result != error_mark_node)
1931 /* OK */;
1932 else if (!DECL_SAVED_TREE (fun))
1934 /* When at_eof >= 2, cgraph has started throwing away
1935 DECL_SAVED_TREE, so fail quietly. FIXME we get here because of
1936 late code generation for VEC_INIT_EXPR, which needs to be
1937 completely reconsidered. */
1938 gcc_assert (at_eof >= 2 && ctx->quiet);
1939 *non_constant_p = true;
1941 else
1943 tree body, parms, res;
1944 releasing_vec ctors;
1946 /* Reuse or create a new unshared copy of this function's body. */
1947 tree copy = get_fundef_copy (new_call.fundef);
1948 body = TREE_PURPOSE (copy);
1949 parms = TREE_VALUE (copy);
1950 res = TREE_TYPE (copy);
1952 /* Associate the bindings with the remapped parms. */
1953 tree bound = new_call.bindings;
1954 tree remapped = parms;
1955 for (int i = 0; i < TREE_VEC_LENGTH (bound); ++i)
1957 tree arg = TREE_VEC_ELT (bound, i);
1958 /* Don't share a CONSTRUCTOR that might be changed. */
1959 arg = unshare_constructor (arg);
1960 if (TREE_CODE (arg) == CONSTRUCTOR)
1961 vec_safe_push (ctors, arg);
1962 ctx->global->values.put (remapped, arg);
1963 remapped = DECL_CHAIN (remapped);
1965 /* Add the RESULT_DECL to the values map, too. */
1966 tree slot = NULL_TREE;
1967 if (DECL_BY_REFERENCE (res))
1969 slot = AGGR_INIT_EXPR_SLOT (t);
1970 tree addr = build_address (slot);
1971 addr = build_nop (TREE_TYPE (res), addr);
1972 ctx->global->values.put (res, addr);
1973 ctx->global->values.put (slot, NULL_TREE);
1975 else
1976 ctx->global->values.put (res, NULL_TREE);
1978 /* Track the callee's evaluated SAVE_EXPRs so that we can forget
1979 their values after the call. */
1980 constexpr_ctx ctx_with_save_exprs = *ctx;
1981 auto_vec<tree, 10> save_exprs;
1982 ctx_with_save_exprs.save_exprs = &save_exprs;
1983 ctx_with_save_exprs.call = &new_call;
1985 tree jump_target = NULL_TREE;
1986 cxx_eval_constant_expression (&ctx_with_save_exprs, body,
1987 lval, non_constant_p, overflow_p,
1988 &jump_target);
1990 if (DECL_CONSTRUCTOR_P (fun))
1991 /* This can be null for a subobject constructor call, in
1992 which case what we care about is the initialization
1993 side-effects rather than the value. We could get at the
1994 value by evaluating *this, but we don't bother; there's
1995 no need to put such a call in the hash table. */
1996 result = lval ? ctx->object : ctx->ctor;
1997 else if (VOID_TYPE_P (TREE_TYPE (res)))
1998 result = void_node;
1999 else
2001 result = *ctx->global->values.get (slot ? slot : res);
2002 if (result == NULL_TREE && !*non_constant_p)
2004 if (!ctx->quiet)
2005 error ("%<constexpr%> call flows off the end "
2006 "of the function");
2007 *non_constant_p = true;
2011 /* At this point, the object's constructor will have run, so
2012 the object is no longer under construction, and its possible
2013 'const' semantics now apply. Make a note of this fact by
2014 marking the CONSTRUCTOR TREE_READONLY. */
2015 if (new_obj
2016 && CLASS_TYPE_P (TREE_TYPE (new_obj))
2017 && CP_TYPE_CONST_P (TREE_TYPE (new_obj)))
2019 /* Subobjects might not be stored in ctx->global->values but we
2020 can get its CONSTRUCTOR by evaluating *this. */
2021 tree e = cxx_eval_constant_expression (ctx, new_obj,
2022 /*lval*/false,
2023 non_constant_p,
2024 overflow_p);
2025 TREE_READONLY (e) = true;
2028 /* Forget the saved values of the callee's SAVE_EXPRs. */
2029 unsigned int i;
2030 tree save_expr;
2031 FOR_EACH_VEC_ELT (save_exprs, i, save_expr)
2032 ctx->global->values.remove (save_expr);
2034 /* Remove the parms/result from the values map. Is it worth
2035 bothering to do this when the map itself is only live for
2036 one constexpr evaluation? If so, maybe also clear out
2037 other vars from call, maybe in BIND_EXPR handling? */
2038 ctx->global->values.remove (res);
2039 if (slot)
2040 ctx->global->values.remove (slot);
2041 for (tree parm = parms; parm; parm = TREE_CHAIN (parm))
2042 ctx->global->values.remove (parm);
2044 /* Free any parameter CONSTRUCTORs we aren't returning directly. */
2045 while (!ctors->is_empty ())
2047 tree c = ctors->pop ();
2048 if (c != result)
2049 free_constructor (c);
2052 /* Make the unshared function copy we used available for re-use. */
2053 save_fundef_copy (fun, copy);
2056 if (result == error_mark_node)
2057 *non_constant_p = true;
2058 if (*non_constant_p || *overflow_p)
2059 result = error_mark_node;
2060 else if (!result)
2061 result = void_node;
2062 if (entry)
2063 entry->result = result;
2066 /* The result of a constexpr function must be completely initialized. */
2067 if (TREE_CODE (result) == CONSTRUCTOR)
2068 clear_no_implicit_zero (result);
2070 pop_cx_call_context ();
2071 return result;
2074 /* FIXME speed this up, it's taking 16% of compile time on sieve testcase. */
2076 bool
2077 reduced_constant_expression_p (tree t)
2079 if (t == NULL_TREE)
2080 return false;
2082 switch (TREE_CODE (t))
2084 case PTRMEM_CST:
2085 /* Even if we can't lower this yet, it's constant. */
2086 return true;
2088 case CONSTRUCTOR:
2089 /* And we need to handle PTRMEM_CST wrapped in a CONSTRUCTOR. */
2090 tree idx, val, field; unsigned HOST_WIDE_INT i;
2091 if (CONSTRUCTOR_NO_CLEARING (t))
2093 if (TREE_CODE (TREE_TYPE (t)) == VECTOR_TYPE)
2094 /* An initialized vector would have a VECTOR_CST. */
2095 return false;
2096 else
2097 field = next_initializable_field (TYPE_FIELDS (TREE_TYPE (t)));
2099 else
2100 field = NULL_TREE;
2101 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (t), i, idx, val)
2103 /* If VAL is null, we're in the middle of initializing this
2104 element. */
2105 if (!reduced_constant_expression_p (val))
2106 return false;
2107 if (field)
2109 if (idx != field)
2110 return false;
2111 field = next_initializable_field (DECL_CHAIN (field));
2114 if (field)
2115 return false;
2116 else if (CONSTRUCTOR_NO_CLEARING (t))
2117 /* All the fields are initialized. */
2118 CONSTRUCTOR_NO_CLEARING (t) = false;
2119 return true;
2121 default:
2122 /* FIXME are we calling this too much? */
2123 return initializer_constant_valid_p (t, TREE_TYPE (t)) != NULL_TREE;
2127 /* Some expressions may have constant operands but are not constant
2128 themselves, such as 1/0. Call this function to check for that
2129 condition.
2131 We only call this in places that require an arithmetic constant, not in
2132 places where we might have a non-constant expression that can be a
2133 component of a constant expression, such as the address of a constexpr
2134 variable that might be dereferenced later. */
2136 static bool
2137 verify_constant (tree t, bool allow_non_constant, bool *non_constant_p,
2138 bool *overflow_p)
2140 if (!*non_constant_p && !reduced_constant_expression_p (t))
2142 if (!allow_non_constant)
2143 error ("%q+E is not a constant expression", t);
2144 *non_constant_p = true;
2146 if (TREE_OVERFLOW_P (t))
2148 if (!allow_non_constant)
2150 permerror (input_location, "overflow in constant expression");
2151 /* If we're being permissive (and are in an enforcing
2152 context), ignore the overflow. */
2153 if (flag_permissive)
2154 return *non_constant_p;
2156 *overflow_p = true;
2158 return *non_constant_p;
2161 /* Check whether the shift operation with code CODE and type TYPE on LHS
2162 and RHS is undefined. If it is, give an error with an explanation,
2163 and return true; return false otherwise. */
2165 static bool
2166 cxx_eval_check_shift_p (location_t loc, const constexpr_ctx *ctx,
2167 enum tree_code code, tree type, tree lhs, tree rhs)
2169 if ((code != LSHIFT_EXPR && code != RSHIFT_EXPR)
2170 || TREE_CODE (lhs) != INTEGER_CST
2171 || TREE_CODE (rhs) != INTEGER_CST)
2172 return false;
2174 tree lhstype = TREE_TYPE (lhs);
2175 unsigned HOST_WIDE_INT uprec = TYPE_PRECISION (TREE_TYPE (lhs));
2177 /* [expr.shift] The behavior is undefined if the right operand
2178 is negative, or greater than or equal to the length in bits
2179 of the promoted left operand. */
2180 if (tree_int_cst_sgn (rhs) == -1)
2182 if (!ctx->quiet)
2183 permerror (loc, "right operand of shift expression %q+E is negative",
2184 build2_loc (loc, code, type, lhs, rhs));
2185 return (!flag_permissive || ctx->quiet);
2187 if (compare_tree_int (rhs, uprec) >= 0)
2189 if (!ctx->quiet)
2190 permerror (loc, "right operand of shift expression %q+E is greater "
2191 "than or equal to the precision %wu of the left operand",
2192 build2_loc (loc, code, type, lhs, rhs), uprec);
2193 return (!flag_permissive || ctx->quiet);
2196 /* The value of E1 << E2 is E1 left-shifted E2 bit positions; [...]
2197 if E1 has a signed type and non-negative value, and E1x2^E2 is
2198 representable in the corresponding unsigned type of the result type,
2199 then that value, converted to the result type, is the resulting value;
2200 otherwise, the behavior is undefined.
2201 For C++2a:
2202 The value of E1 << E2 is the unique value congruent to E1 x 2^E2 modulo
2203 2^N, where N is the range exponent of the type of the result. */
2204 if (code == LSHIFT_EXPR
2205 && !TYPE_UNSIGNED (lhstype)
2206 && cxx_dialect >= cxx11
2207 && cxx_dialect < cxx2a)
2209 if (tree_int_cst_sgn (lhs) == -1)
2211 if (!ctx->quiet)
2212 permerror (loc,
2213 "left operand of shift expression %q+E is negative",
2214 build2_loc (loc, code, type, lhs, rhs));
2215 return (!flag_permissive || ctx->quiet);
2217 /* For signed x << y the following:
2218 (unsigned) x >> ((prec (lhs) - 1) - y)
2219 if > 1, is undefined. The right-hand side of this formula
2220 is the highest bit of the LHS that can be set (starting from 0),
2221 so that the shift doesn't overflow. We then right-shift the LHS
2222 to see whether any other bit is set making the original shift
2223 undefined -- the result is not representable in the corresponding
2224 unsigned type. */
2225 tree t = build_int_cst (unsigned_type_node, uprec - 1);
2226 t = fold_build2 (MINUS_EXPR, unsigned_type_node, t, rhs);
2227 tree ulhs = fold_convert (unsigned_type_for (lhstype), lhs);
2228 t = fold_build2 (RSHIFT_EXPR, TREE_TYPE (ulhs), ulhs, t);
2229 if (tree_int_cst_lt (integer_one_node, t))
2231 if (!ctx->quiet)
2232 permerror (loc, "shift expression %q+E overflows",
2233 build2_loc (loc, code, type, lhs, rhs));
2234 return (!flag_permissive || ctx->quiet);
2237 return false;
2240 /* Subroutine of cxx_eval_constant_expression.
2241 Attempt to reduce the unary expression tree T to a compile time value.
2242 If successful, return the value. Otherwise issue a diagnostic
2243 and return error_mark_node. */
2245 static tree
2246 cxx_eval_unary_expression (const constexpr_ctx *ctx, tree t,
2247 bool /*lval*/,
2248 bool *non_constant_p, bool *overflow_p)
2250 tree r;
2251 tree orig_arg = TREE_OPERAND (t, 0);
2252 tree arg = cxx_eval_constant_expression (ctx, orig_arg, /*lval*/false,
2253 non_constant_p, overflow_p);
2254 VERIFY_CONSTANT (arg);
2255 location_t loc = EXPR_LOCATION (t);
2256 enum tree_code code = TREE_CODE (t);
2257 tree type = TREE_TYPE (t);
2258 r = fold_unary_loc (loc, code, type, arg);
2259 if (r == NULL_TREE)
2261 if (arg == orig_arg)
2262 r = t;
2263 else
2264 r = build1_loc (loc, code, type, arg);
2266 VERIFY_CONSTANT (r);
2267 return r;
2270 /* Helper function for cxx_eval_binary_expression. Try to optimize
2271 original POINTER_PLUS_EXPR T, LHS p+ RHS, return NULL_TREE if the
2272 generic folding should be used. */
2274 static tree
2275 cxx_fold_pointer_plus_expression (const constexpr_ctx *ctx, tree t,
2276 tree lhs, tree rhs, bool *non_constant_p,
2277 bool *overflow_p)
2279 STRIP_NOPS (lhs);
2280 if (TREE_CODE (lhs) != ADDR_EXPR)
2281 return NULL_TREE;
2283 lhs = TREE_OPERAND (lhs, 0);
2285 /* &A[i] p+ j => &A[i + j] */
2286 if (TREE_CODE (lhs) == ARRAY_REF
2287 && TREE_CODE (TREE_OPERAND (lhs, 1)) == INTEGER_CST
2288 && TREE_CODE (rhs) == INTEGER_CST
2289 && TYPE_SIZE_UNIT (TREE_TYPE (lhs))
2290 && TREE_CODE (TYPE_SIZE_UNIT (TREE_TYPE (lhs))) == INTEGER_CST)
2292 tree orig_type = TREE_TYPE (t);
2293 location_t loc = EXPR_LOCATION (t);
2294 tree type = TREE_TYPE (lhs);
2296 t = fold_convert_loc (loc, ssizetype, TREE_OPERAND (lhs, 1));
2297 tree nelts = array_type_nelts_top (TREE_TYPE (TREE_OPERAND (lhs, 0)));
2298 nelts = cxx_eval_constant_expression (ctx, nelts, false, non_constant_p,
2299 overflow_p);
2300 if (*non_constant_p)
2301 return NULL_TREE;
2302 /* Don't fold an out-of-bound access. */
2303 if (!tree_int_cst_le (t, nelts))
2304 return NULL_TREE;
2305 rhs = cp_fold_convert (ssizetype, rhs);
2306 /* Don't fold if rhs can't be divided exactly by TYPE_SIZE_UNIT.
2307 constexpr int A[1]; ... (char *)&A[0] + 1 */
2308 if (!integer_zerop (fold_build2_loc (loc, TRUNC_MOD_EXPR, sizetype,
2309 rhs, TYPE_SIZE_UNIT (type))))
2310 return NULL_TREE;
2311 /* Make sure to treat the second operand of POINTER_PLUS_EXPR
2312 as signed. */
2313 rhs = fold_build2_loc (loc, EXACT_DIV_EXPR, ssizetype, rhs,
2314 TYPE_SIZE_UNIT (type));
2315 t = size_binop_loc (loc, PLUS_EXPR, rhs, t);
2316 t = build4_loc (loc, ARRAY_REF, type, TREE_OPERAND (lhs, 0),
2317 t, NULL_TREE, NULL_TREE);
2318 t = cp_build_addr_expr (t, tf_warning_or_error);
2319 t = cp_fold_convert (orig_type, t);
2320 return cxx_eval_constant_expression (ctx, t, /*lval*/false,
2321 non_constant_p, overflow_p);
2324 return NULL_TREE;
2327 /* Subroutine of cxx_eval_constant_expression.
2328 Like cxx_eval_unary_expression, except for binary expressions. */
2330 static tree
2331 cxx_eval_binary_expression (const constexpr_ctx *ctx, tree t,
2332 bool /*lval*/,
2333 bool *non_constant_p, bool *overflow_p)
2335 tree r = NULL_TREE;
2336 tree orig_lhs = TREE_OPERAND (t, 0);
2337 tree orig_rhs = TREE_OPERAND (t, 1);
2338 tree lhs, rhs;
2339 lhs = cxx_eval_constant_expression (ctx, orig_lhs, /*lval*/false,
2340 non_constant_p, overflow_p);
2341 /* Don't VERIFY_CONSTANT here, it's unnecessary and will break pointer
2342 subtraction. */
2343 if (*non_constant_p)
2344 return t;
2345 rhs = cxx_eval_constant_expression (ctx, orig_rhs, /*lval*/false,
2346 non_constant_p, overflow_p);
2347 if (*non_constant_p)
2348 return t;
2350 location_t loc = EXPR_LOCATION (t);
2351 enum tree_code code = TREE_CODE (t);
2352 tree type = TREE_TYPE (t);
2354 if (code == EQ_EXPR || code == NE_EXPR)
2356 bool is_code_eq = (code == EQ_EXPR);
2358 if (TREE_CODE (lhs) == PTRMEM_CST
2359 && TREE_CODE (rhs) == PTRMEM_CST)
2361 tree lmem = PTRMEM_CST_MEMBER (lhs);
2362 tree rmem = PTRMEM_CST_MEMBER (rhs);
2363 bool eq;
2364 if (TREE_CODE (lmem) == TREE_CODE (rmem)
2365 && TREE_CODE (lmem) == FIELD_DECL
2366 && TREE_CODE (DECL_CONTEXT (lmem)) == UNION_TYPE
2367 && same_type_p (DECL_CONTEXT (lmem),
2368 DECL_CONTEXT (rmem)))
2369 /* If both refer to (possibly different) members of the same union
2370 (12.3), they compare equal. */
2371 eq = true;
2372 else
2373 eq = cp_tree_equal (lhs, rhs);
2374 r = constant_boolean_node (eq == is_code_eq, type);
2376 else if ((TREE_CODE (lhs) == PTRMEM_CST
2377 || TREE_CODE (rhs) == PTRMEM_CST)
2378 && (null_member_pointer_value_p (lhs)
2379 || null_member_pointer_value_p (rhs)))
2380 r = constant_boolean_node (!is_code_eq, type);
2381 else if (TREE_CODE (lhs) == PTRMEM_CST)
2382 lhs = cplus_expand_constant (lhs);
2383 else if (TREE_CODE (rhs) == PTRMEM_CST)
2384 rhs = cplus_expand_constant (rhs);
2386 if (code == POINTER_PLUS_EXPR && !*non_constant_p
2387 && integer_zerop (lhs) && !integer_zerop (rhs))
2389 if (!ctx->quiet)
2390 error ("arithmetic involving a null pointer in %qE", lhs);
2391 *non_constant_p = true;
2392 return t;
2394 else if (code == POINTER_PLUS_EXPR)
2395 r = cxx_fold_pointer_plus_expression (ctx, t, lhs, rhs, non_constant_p,
2396 overflow_p);
2398 if (r == NULL_TREE)
2399 r = fold_binary_loc (loc, code, type, lhs, rhs);
2401 if (r == NULL_TREE)
2403 if (lhs == orig_lhs && rhs == orig_rhs)
2404 r = t;
2405 else
2406 r = build2_loc (loc, code, type, lhs, rhs);
2408 else if (cxx_eval_check_shift_p (loc, ctx, code, type, lhs, rhs))
2409 *non_constant_p = true;
2410 /* Don't VERIFY_CONSTANT if this might be dealing with a pointer to
2411 a local array in a constexpr function. */
2412 bool ptr = INDIRECT_TYPE_P (TREE_TYPE (lhs));
2413 if (!ptr)
2414 VERIFY_CONSTANT (r);
2415 return r;
2418 /* Subroutine of cxx_eval_constant_expression.
2419 Attempt to evaluate condition expressions. Dead branches are not
2420 looked into. */
2422 static tree
2423 cxx_eval_conditional_expression (const constexpr_ctx *ctx, tree t,
2424 bool lval,
2425 bool *non_constant_p, bool *overflow_p,
2426 tree *jump_target)
2428 tree val = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0),
2429 /*lval*/false,
2430 non_constant_p, overflow_p);
2431 VERIFY_CONSTANT (val);
2432 /* Don't VERIFY_CONSTANT the other operands. */
2433 if (integer_zerop (val))
2434 val = TREE_OPERAND (t, 2);
2435 else
2436 val = TREE_OPERAND (t, 1);
2437 if (TREE_CODE (t) == IF_STMT && !val)
2438 val = void_node;
2439 return cxx_eval_constant_expression (ctx, val, lval, non_constant_p,
2440 overflow_p, jump_target);
2443 /* Subroutine of cxx_eval_constant_expression.
2444 Attempt to evaluate vector condition expressions. Unlike
2445 cxx_eval_conditional_expression, VEC_COND_EXPR acts like a normal
2446 ternary arithmetics operation, where all 3 arguments have to be
2447 evaluated as constants and then folding computes the result from
2448 them. */
2450 static tree
2451 cxx_eval_vector_conditional_expression (const constexpr_ctx *ctx, tree t,
2452 bool *non_constant_p, bool *overflow_p)
2454 tree arg1 = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0),
2455 /*lval*/false,
2456 non_constant_p, overflow_p);
2457 VERIFY_CONSTANT (arg1);
2458 tree arg2 = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 1),
2459 /*lval*/false,
2460 non_constant_p, overflow_p);
2461 VERIFY_CONSTANT (arg2);
2462 tree arg3 = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 2),
2463 /*lval*/false,
2464 non_constant_p, overflow_p);
2465 VERIFY_CONSTANT (arg3);
2466 location_t loc = EXPR_LOCATION (t);
2467 tree type = TREE_TYPE (t);
2468 tree r = fold_ternary_loc (loc, VEC_COND_EXPR, type, arg1, arg2, arg3);
2469 if (r == NULL_TREE)
2471 if (arg1 == TREE_OPERAND (t, 0)
2472 && arg2 == TREE_OPERAND (t, 1)
2473 && arg3 == TREE_OPERAND (t, 2))
2474 r = t;
2475 else
2476 r = build3_loc (loc, VEC_COND_EXPR, type, arg1, arg2, arg3);
2478 VERIFY_CONSTANT (r);
2479 return r;
2482 /* Returns less than, equal to, or greater than zero if KEY is found to be
2483 less than, to match, or to be greater than the constructor_elt's INDEX. */
2485 static int
2486 array_index_cmp (tree key, tree index)
2488 gcc_assert (TREE_CODE (key) == INTEGER_CST);
2490 switch (TREE_CODE (index))
2492 case INTEGER_CST:
2493 return tree_int_cst_compare (key, index);
2494 case RANGE_EXPR:
2496 tree lo = TREE_OPERAND (index, 0);
2497 tree hi = TREE_OPERAND (index, 1);
2498 if (tree_int_cst_lt (key, lo))
2499 return -1;
2500 else if (tree_int_cst_lt (hi, key))
2501 return 1;
2502 else
2503 return 0;
2505 default:
2506 gcc_unreachable ();
2510 /* Returns the index of the constructor_elt of ARY which matches DINDEX, or -1
2511 if none. If INSERT is true, insert a matching element rather than fail. */
2513 static HOST_WIDE_INT
2514 find_array_ctor_elt (tree ary, tree dindex, bool insert)
2516 if (tree_int_cst_sgn (dindex) < 0)
2517 return -1;
2519 unsigned HOST_WIDE_INT i = tree_to_uhwi (dindex);
2520 vec<constructor_elt, va_gc> *elts = CONSTRUCTOR_ELTS (ary);
2521 unsigned HOST_WIDE_INT len = vec_safe_length (elts);
2523 unsigned HOST_WIDE_INT end = len;
2524 unsigned HOST_WIDE_INT begin = 0;
2526 /* If the last element of the CONSTRUCTOR has its own index, we can assume
2527 that the same is true of the other elements and index directly. */
2528 if (end > 0)
2530 tree cindex = (*elts)[end - 1].index;
2531 if (TREE_CODE (cindex) == INTEGER_CST
2532 && compare_tree_int (cindex, end - 1) == 0)
2534 if (i < end)
2535 return i;
2536 else
2537 begin = end;
2541 /* Otherwise, find a matching index by means of a binary search. */
2542 while (begin != end)
2544 unsigned HOST_WIDE_INT middle = (begin + end) / 2;
2545 constructor_elt &elt = (*elts)[middle];
2546 tree idx = elt.index;
2548 int cmp = array_index_cmp (dindex, idx);
2549 if (cmp < 0)
2550 end = middle;
2551 else if (cmp > 0)
2552 begin = middle + 1;
2553 else
2555 if (insert && TREE_CODE (idx) == RANGE_EXPR)
2557 /* We need to split the range. */
2558 constructor_elt e;
2559 tree lo = TREE_OPERAND (idx, 0);
2560 tree hi = TREE_OPERAND (idx, 1);
2561 tree value = elt.value;
2562 dindex = fold_convert (sizetype, dindex);
2563 if (tree_int_cst_lt (lo, dindex))
2565 /* There are still some lower elts; shorten the range. */
2566 tree new_hi = int_const_binop (MINUS_EXPR, dindex,
2567 size_one_node);
2568 if (tree_int_cst_equal (lo, new_hi))
2569 /* Only one element left, no longer a range. */
2570 elt.index = lo;
2571 else
2572 TREE_OPERAND (idx, 1) = new_hi;
2573 /* Append the element we want to insert. */
2574 ++middle;
2575 e.index = dindex;
2576 e.value = unshare_constructor (value);
2577 vec_safe_insert (CONSTRUCTOR_ELTS (ary), middle, e);
2579 else
2580 /* No lower elts, the range elt is now ours. */
2581 elt.index = dindex;
2583 if (tree_int_cst_lt (dindex, hi))
2585 /* There are still some higher elts; append a range. */
2586 tree new_lo = int_const_binop (PLUS_EXPR, dindex,
2587 size_one_node);
2588 if (tree_int_cst_equal (new_lo, hi))
2589 e.index = hi;
2590 else
2591 e.index = build2 (RANGE_EXPR, sizetype, new_lo, hi);
2592 e.value = unshare_constructor (value);
2593 vec_safe_insert (CONSTRUCTOR_ELTS (ary), middle + 1, e);
2596 return middle;
2600 if (insert)
2602 constructor_elt e = { dindex, NULL_TREE };
2603 vec_safe_insert (CONSTRUCTOR_ELTS (ary), end, e);
2604 return end;
2607 return -1;
2610 /* Under the control of CTX, issue a detailed diagnostic for
2611 an out-of-bounds subscript INDEX into the expression ARRAY. */
2613 static void
2614 diag_array_subscript (location_t loc, const constexpr_ctx *ctx, tree array, tree index)
2616 if (!ctx->quiet)
2618 tree arraytype = TREE_TYPE (array);
2620 /* Convert the unsigned array subscript to a signed integer to avoid
2621 printing huge numbers for small negative values. */
2622 tree sidx = fold_convert (ssizetype, index);
2623 STRIP_ANY_LOCATION_WRAPPER (array);
2624 if (DECL_P (array))
2626 if (TYPE_DOMAIN (arraytype))
2627 error_at (loc, "array subscript value %qE is outside the bounds "
2628 "of array %qD of type %qT", sidx, array, arraytype);
2629 else
2630 error_at (loc, "nonzero array subscript %qE is used with array %qD of "
2631 "type %qT with unknown bounds", sidx, array, arraytype);
2632 inform (DECL_SOURCE_LOCATION (array), "declared here");
2634 else if (TYPE_DOMAIN (arraytype))
2635 error_at (loc, "array subscript value %qE is outside the bounds "
2636 "of array type %qT", sidx, arraytype);
2637 else
2638 error_at (loc, "nonzero array subscript %qE is used with array of type %qT "
2639 "with unknown bounds", sidx, arraytype);
2643 /* Return the number of elements for TYPE (which is an ARRAY_TYPE or
2644 a VECTOR_TYPE). */
2646 static tree
2647 get_array_or_vector_nelts (const constexpr_ctx *ctx, tree type,
2648 bool *non_constant_p, bool *overflow_p)
2650 tree nelts;
2651 if (TREE_CODE (type) == ARRAY_TYPE)
2653 if (TYPE_DOMAIN (type))
2654 nelts = array_type_nelts_top (type);
2655 else
2656 nelts = size_zero_node;
2658 else if (VECTOR_TYPE_P (type))
2659 nelts = size_int (TYPE_VECTOR_SUBPARTS (type));
2660 else
2661 gcc_unreachable ();
2663 /* For VLAs, the number of elements won't be an integer constant. */
2664 nelts = cxx_eval_constant_expression (ctx, nelts, false,
2665 non_constant_p, overflow_p);
2666 return nelts;
2669 /* Extract element INDEX consisting of CHARS_PER_ELT chars from
2670 STRING_CST STRING. */
2672 static tree
2673 extract_string_elt (tree string, unsigned chars_per_elt, unsigned index)
2675 tree type = cv_unqualified (TREE_TYPE (TREE_TYPE (string)));
2676 tree r;
2678 if (chars_per_elt == 1)
2679 r = build_int_cst (type, TREE_STRING_POINTER (string)[index]);
2680 else
2682 const unsigned char *ptr
2683 = ((const unsigned char *)TREE_STRING_POINTER (string)
2684 + index * chars_per_elt);
2685 r = native_interpret_expr (type, ptr, chars_per_elt);
2687 return r;
2690 /* Subroutine of cxx_eval_array_reference. T is an ARRAY_REF; evaluate the
2691 subscript, diagnose any problems with it, and return the result. */
2693 static tree
2694 eval_and_check_array_index (const constexpr_ctx *ctx,
2695 tree t, bool allow_one_past,
2696 bool *non_constant_p, bool *overflow_p)
2698 location_t loc = cp_expr_loc_or_input_loc (t);
2699 tree ary = TREE_OPERAND (t, 0);
2700 t = TREE_OPERAND (t, 1);
2701 tree index = cxx_eval_constant_expression (ctx, t, false,
2702 non_constant_p, overflow_p);
2703 VERIFY_CONSTANT (index);
2705 if (!tree_fits_shwi_p (index)
2706 || tree_int_cst_sgn (index) < 0)
2708 diag_array_subscript (loc, ctx, ary, index);
2709 *non_constant_p = true;
2710 return t;
2713 tree nelts = get_array_or_vector_nelts (ctx, TREE_TYPE (ary), non_constant_p,
2714 overflow_p);
2715 VERIFY_CONSTANT (nelts);
2716 if (allow_one_past
2717 ? !tree_int_cst_le (index, nelts)
2718 : !tree_int_cst_lt (index, nelts))
2720 diag_array_subscript (loc, ctx, ary, index);
2721 *non_constant_p = true;
2722 return t;
2725 return index;
2728 /* Subroutine of cxx_eval_constant_expression.
2729 Attempt to reduce a reference to an array slot. */
2731 static tree
2732 cxx_eval_array_reference (const constexpr_ctx *ctx, tree t,
2733 bool lval,
2734 bool *non_constant_p, bool *overflow_p)
2736 tree oldary = TREE_OPERAND (t, 0);
2737 tree ary = cxx_eval_constant_expression (ctx, oldary,
2738 lval,
2739 non_constant_p, overflow_p);
2740 if (*non_constant_p)
2741 return t;
2742 if (!lval
2743 && TREE_CODE (ary) == VIEW_CONVERT_EXPR
2744 && VECTOR_TYPE_P (TREE_TYPE (TREE_OPERAND (ary, 0)))
2745 && TREE_TYPE (t) == TREE_TYPE (TREE_TYPE (TREE_OPERAND (ary, 0))))
2746 ary = TREE_OPERAND (ary, 0);
2748 tree oldidx = TREE_OPERAND (t, 1);
2749 tree index = eval_and_check_array_index (ctx, t, lval,
2750 non_constant_p, overflow_p);
2751 if (*non_constant_p)
2752 return t;
2754 if (lval && ary == oldary && index == oldidx)
2755 return t;
2756 else if (lval)
2757 return build4 (ARRAY_REF, TREE_TYPE (t), ary, index, NULL, NULL);
2759 unsigned len = 0, elem_nchars = 1;
2760 tree elem_type = TREE_TYPE (TREE_TYPE (ary));
2761 if (TREE_CODE (ary) == CONSTRUCTOR)
2762 len = CONSTRUCTOR_NELTS (ary);
2763 else if (TREE_CODE (ary) == STRING_CST)
2765 elem_nchars = (TYPE_PRECISION (elem_type)
2766 / TYPE_PRECISION (char_type_node));
2767 len = (unsigned) TREE_STRING_LENGTH (ary) / elem_nchars;
2769 else if (TREE_CODE (ary) == VECTOR_CST)
2770 /* We don't create variable-length VECTOR_CSTs. */
2771 len = VECTOR_CST_NELTS (ary).to_constant ();
2772 else
2774 /* We can't do anything with other tree codes, so use
2775 VERIFY_CONSTANT to complain and fail. */
2776 VERIFY_CONSTANT (ary);
2777 gcc_unreachable ();
2780 bool found;
2781 HOST_WIDE_INT i = 0;
2782 if (TREE_CODE (ary) == CONSTRUCTOR)
2784 HOST_WIDE_INT ix = find_array_ctor_elt (ary, index);
2785 found = (ix >= 0);
2786 if (found)
2787 i = ix;
2789 else
2791 i = tree_to_shwi (index);
2792 found = (i < len);
2795 if (found)
2797 tree r;
2798 if (TREE_CODE (ary) == CONSTRUCTOR)
2799 r = (*CONSTRUCTOR_ELTS (ary))[i].value;
2800 else if (TREE_CODE (ary) == VECTOR_CST)
2801 r = VECTOR_CST_ELT (ary, i);
2802 else
2803 r = extract_string_elt (ary, elem_nchars, i);
2805 if (r)
2806 /* Don't VERIFY_CONSTANT here. */
2807 return r;
2809 /* Otherwise the element doesn't have a value yet. */
2812 /* Not found. */
2814 if (TREE_CODE (ary) == CONSTRUCTOR
2815 && CONSTRUCTOR_NO_CLEARING (ary))
2817 /* 'ary' is part of the aggregate initializer we're currently
2818 building; if there's no initializer for this element yet,
2819 that's an error. */
2820 if (!ctx->quiet)
2821 error ("accessing uninitialized array element");
2822 *non_constant_p = true;
2823 return t;
2826 /* If it's within the array bounds but doesn't have an explicit
2827 initializer, it's value-initialized. */
2828 tree val = build_value_init (elem_type, tf_warning_or_error);
2829 return cxx_eval_constant_expression (ctx, val, lval, non_constant_p,
2830 overflow_p);
2833 /* Subroutine of cxx_eval_constant_expression.
2834 Attempt to reduce a field access of a value of class type. */
2836 static tree
2837 cxx_eval_component_reference (const constexpr_ctx *ctx, tree t,
2838 bool lval,
2839 bool *non_constant_p, bool *overflow_p)
2841 unsigned HOST_WIDE_INT i;
2842 tree field;
2843 tree value;
2844 tree part = TREE_OPERAND (t, 1);
2845 tree orig_whole = TREE_OPERAND (t, 0);
2846 tree whole = cxx_eval_constant_expression (ctx, orig_whole,
2847 lval,
2848 non_constant_p, overflow_p);
2849 if (INDIRECT_REF_P (whole)
2850 && integer_zerop (TREE_OPERAND (whole, 0)))
2852 if (!ctx->quiet)
2853 error ("dereferencing a null pointer in %qE", orig_whole);
2854 *non_constant_p = true;
2855 return t;
2858 if (TREE_CODE (whole) == PTRMEM_CST)
2859 whole = cplus_expand_constant (whole);
2860 if (whole == orig_whole)
2861 return t;
2862 if (lval)
2863 return fold_build3 (COMPONENT_REF, TREE_TYPE (t),
2864 whole, part, NULL_TREE);
2865 /* Don't VERIFY_CONSTANT here; we only want to check that we got a
2866 CONSTRUCTOR. */
2867 if (!*non_constant_p && TREE_CODE (whole) != CONSTRUCTOR)
2869 if (!ctx->quiet)
2870 error ("%qE is not a constant expression", orig_whole);
2871 *non_constant_p = true;
2873 if (DECL_MUTABLE_P (part))
2875 if (!ctx->quiet)
2876 error ("mutable %qD is not usable in a constant expression", part);
2877 *non_constant_p = true;
2879 if (*non_constant_p)
2880 return t;
2881 bool pmf = TYPE_PTRMEMFUNC_P (TREE_TYPE (whole));
2882 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (whole), i, field, value)
2884 /* Use name match for PMF fields, as a variant will have a
2885 different FIELD_DECL with a different type. */
2886 if (pmf ? DECL_NAME (field) == DECL_NAME (part)
2887 : field == part)
2889 if (value)
2891 STRIP_ANY_LOCATION_WRAPPER (value);
2892 return value;
2894 else
2895 /* We're in the middle of initializing it. */
2896 break;
2899 if (TREE_CODE (TREE_TYPE (whole)) == UNION_TYPE
2900 && CONSTRUCTOR_NELTS (whole) > 0)
2902 /* DR 1188 says we don't have to deal with this. */
2903 if (!ctx->quiet)
2904 error ("accessing %qD member instead of initialized %qD member in "
2905 "constant expression", part, CONSTRUCTOR_ELT (whole, 0)->index);
2906 *non_constant_p = true;
2907 return t;
2910 /* We only create a CONSTRUCTOR for a subobject when we modify it, so empty
2911 classes never get represented; throw together a value now. */
2912 if (is_really_empty_class (TREE_TYPE (t), /*ignore_vptr*/false))
2913 return build_constructor (TREE_TYPE (t), NULL);
2915 gcc_assert (DECL_CONTEXT (part) == TYPE_MAIN_VARIANT (TREE_TYPE (whole)));
2917 if (CONSTRUCTOR_NO_CLEARING (whole))
2919 /* 'whole' is part of the aggregate initializer we're currently
2920 building; if there's no initializer for this member yet, that's an
2921 error. */
2922 if (!ctx->quiet)
2923 error ("accessing uninitialized member %qD", part);
2924 *non_constant_p = true;
2925 return t;
2928 /* If there's no explicit init for this field, it's value-initialized. */
2929 value = build_value_init (TREE_TYPE (t), tf_warning_or_error);
2930 return cxx_eval_constant_expression (ctx, value,
2931 lval,
2932 non_constant_p, overflow_p);
2935 /* Subroutine of cxx_eval_constant_expression.
2936 Attempt to reduce a field access of a value of class type that is
2937 expressed as a BIT_FIELD_REF. */
2939 static tree
2940 cxx_eval_bit_field_ref (const constexpr_ctx *ctx, tree t,
2941 bool lval,
2942 bool *non_constant_p, bool *overflow_p)
2944 tree orig_whole = TREE_OPERAND (t, 0);
2945 tree retval, fldval, utype, mask;
2946 bool fld_seen = false;
2947 HOST_WIDE_INT istart, isize;
2948 tree whole = cxx_eval_constant_expression (ctx, orig_whole,
2949 lval,
2950 non_constant_p, overflow_p);
2951 tree start, field, value;
2952 unsigned HOST_WIDE_INT i;
2954 if (whole == orig_whole)
2955 return t;
2956 /* Don't VERIFY_CONSTANT here; we only want to check that we got a
2957 CONSTRUCTOR. */
2958 if (!*non_constant_p
2959 && TREE_CODE (whole) != VECTOR_CST
2960 && TREE_CODE (whole) != CONSTRUCTOR)
2962 if (!ctx->quiet)
2963 error ("%qE is not a constant expression", orig_whole);
2964 *non_constant_p = true;
2966 if (*non_constant_p)
2967 return t;
2969 if (TREE_CODE (whole) == VECTOR_CST)
2970 return fold_ternary (BIT_FIELD_REF, TREE_TYPE (t), whole,
2971 TREE_OPERAND (t, 1), TREE_OPERAND (t, 2));
2973 start = TREE_OPERAND (t, 2);
2974 istart = tree_to_shwi (start);
2975 isize = tree_to_shwi (TREE_OPERAND (t, 1));
2976 utype = TREE_TYPE (t);
2977 if (!TYPE_UNSIGNED (utype))
2978 utype = build_nonstandard_integer_type (TYPE_PRECISION (utype), 1);
2979 retval = build_int_cst (utype, 0);
2980 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (whole), i, field, value)
2982 tree bitpos = bit_position (field);
2983 STRIP_ANY_LOCATION_WRAPPER (value);
2984 if (bitpos == start && DECL_SIZE (field) == TREE_OPERAND (t, 1))
2985 return value;
2986 if (TREE_CODE (TREE_TYPE (field)) == INTEGER_TYPE
2987 && TREE_CODE (value) == INTEGER_CST
2988 && tree_fits_shwi_p (bitpos)
2989 && tree_fits_shwi_p (DECL_SIZE (field)))
2991 HOST_WIDE_INT bit = tree_to_shwi (bitpos);
2992 HOST_WIDE_INT sz = tree_to_shwi (DECL_SIZE (field));
2993 HOST_WIDE_INT shift;
2994 if (bit >= istart && bit + sz <= istart + isize)
2996 fldval = fold_convert (utype, value);
2997 mask = build_int_cst_type (utype, -1);
2998 mask = fold_build2 (LSHIFT_EXPR, utype, mask,
2999 size_int (TYPE_PRECISION (utype) - sz));
3000 mask = fold_build2 (RSHIFT_EXPR, utype, mask,
3001 size_int (TYPE_PRECISION (utype) - sz));
3002 fldval = fold_build2 (BIT_AND_EXPR, utype, fldval, mask);
3003 shift = bit - istart;
3004 if (BYTES_BIG_ENDIAN)
3005 shift = TYPE_PRECISION (utype) - shift - sz;
3006 fldval = fold_build2 (LSHIFT_EXPR, utype, fldval,
3007 size_int (shift));
3008 retval = fold_build2 (BIT_IOR_EXPR, utype, retval, fldval);
3009 fld_seen = true;
3013 if (fld_seen)
3014 return fold_convert (TREE_TYPE (t), retval);
3015 gcc_unreachable ();
3016 return error_mark_node;
3019 /* Subroutine of cxx_eval_constant_expression.
3020 Evaluate a short-circuited logical expression T in the context
3021 of a given constexpr CALL. BAILOUT_VALUE is the value for
3022 early return. CONTINUE_VALUE is used here purely for
3023 sanity check purposes. */
3025 static tree
3026 cxx_eval_logical_expression (const constexpr_ctx *ctx, tree t,
3027 tree bailout_value, tree continue_value,
3028 bool lval,
3029 bool *non_constant_p, bool *overflow_p)
3031 tree r;
3032 tree lhs = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0),
3033 lval,
3034 non_constant_p, overflow_p);
3035 VERIFY_CONSTANT (lhs);
3036 if (tree_int_cst_equal (lhs, bailout_value))
3037 return lhs;
3038 gcc_assert (tree_int_cst_equal (lhs, continue_value));
3039 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 1),
3040 lval, non_constant_p,
3041 overflow_p);
3042 VERIFY_CONSTANT (r);
3043 return r;
3046 /* REF is a COMPONENT_REF designating a particular field. V is a vector of
3047 CONSTRUCTOR elements to initialize (part of) an object containing that
3048 field. Return a pointer to the constructor_elt corresponding to the
3049 initialization of the field. */
3051 static constructor_elt *
3052 base_field_constructor_elt (vec<constructor_elt, va_gc> *v, tree ref)
3054 tree aggr = TREE_OPERAND (ref, 0);
3055 tree field = TREE_OPERAND (ref, 1);
3056 HOST_WIDE_INT i;
3057 constructor_elt *ce;
3059 gcc_assert (TREE_CODE (ref) == COMPONENT_REF);
3061 if (TREE_CODE (aggr) == COMPONENT_REF)
3063 constructor_elt *base_ce
3064 = base_field_constructor_elt (v, aggr);
3065 v = CONSTRUCTOR_ELTS (base_ce->value);
3068 for (i = 0; vec_safe_iterate (v, i, &ce); ++i)
3069 if (ce->index == field)
3070 return ce;
3072 gcc_unreachable ();
3073 return NULL;
3076 /* Some of the expressions fed to the constexpr mechanism are calls to
3077 constructors, which have type void. In that case, return the type being
3078 initialized by the constructor. */
3080 static tree
3081 initialized_type (tree t)
3083 if (TYPE_P (t))
3084 return t;
3085 tree type = TREE_TYPE (t);
3086 if (TREE_CODE (t) == CALL_EXPR)
3088 /* A constructor call has void type, so we need to look deeper. */
3089 tree fn = get_function_named_in_call (t);
3090 if (fn && TREE_CODE (fn) == FUNCTION_DECL
3091 && DECL_CXX_CONSTRUCTOR_P (fn))
3092 type = DECL_CONTEXT (fn);
3094 else if (TREE_CODE (t) == COMPOUND_EXPR)
3095 return initialized_type (TREE_OPERAND (t, 1));
3096 else if (TREE_CODE (t) == AGGR_INIT_EXPR)
3097 type = TREE_TYPE (AGGR_INIT_EXPR_SLOT (t));
3098 return cv_unqualified (type);
3101 /* We're about to initialize element INDEX of an array or class from VALUE.
3102 Set up NEW_CTX appropriately by adjusting .object to refer to the
3103 subobject and creating a new CONSTRUCTOR if the element is itself
3104 a class or array. */
3106 static void
3107 init_subob_ctx (const constexpr_ctx *ctx, constexpr_ctx &new_ctx,
3108 tree index, tree &value)
3110 new_ctx = *ctx;
3112 if (index && TREE_CODE (index) != INTEGER_CST
3113 && TREE_CODE (index) != FIELD_DECL)
3114 /* This won't have an element in the new CONSTRUCTOR. */
3115 return;
3117 tree type = initialized_type (value);
3118 if (!AGGREGATE_TYPE_P (type) && !VECTOR_TYPE_P (type))
3119 /* A non-aggregate member doesn't get its own CONSTRUCTOR. */
3120 return;
3122 /* The sub-aggregate initializer might contain a placeholder;
3123 update object to refer to the subobject and ctor to refer to
3124 the (newly created) sub-initializer. */
3125 if (ctx->object)
3126 new_ctx.object = build_ctor_subob_ref (index, type, ctx->object);
3127 tree elt = build_constructor (type, NULL);
3128 CONSTRUCTOR_NO_CLEARING (elt) = true;
3129 new_ctx.ctor = elt;
3131 if (TREE_CODE (value) == TARGET_EXPR)
3132 /* Avoid creating another CONSTRUCTOR when we expand the TARGET_EXPR. */
3133 value = TARGET_EXPR_INITIAL (value);
3136 /* We're about to process an initializer for a class or array TYPE. Make
3137 sure that CTX is set up appropriately. */
3139 static void
3140 verify_ctor_sanity (const constexpr_ctx *ctx, tree type)
3142 /* We don't bother building a ctor for an empty base subobject. */
3143 if (is_empty_class (type))
3144 return;
3146 /* We're in the middle of an initializer that might involve placeholders;
3147 our caller should have created a CONSTRUCTOR for us to put the
3148 initializer into. We will either return that constructor or T. */
3149 gcc_assert (ctx->ctor);
3150 gcc_assert (same_type_ignoring_top_level_qualifiers_p
3151 (type, TREE_TYPE (ctx->ctor)));
3152 /* We used to check that ctx->ctor was empty, but that isn't the case when
3153 the object is zero-initialized before calling the constructor. */
3154 if (ctx->object)
3156 tree otype = TREE_TYPE (ctx->object);
3157 gcc_assert (same_type_ignoring_top_level_qualifiers_p (type, otype)
3158 /* Handle flexible array members. */
3159 || (TREE_CODE (otype) == ARRAY_TYPE
3160 && TYPE_DOMAIN (otype) == NULL_TREE
3161 && TREE_CODE (type) == ARRAY_TYPE
3162 && (same_type_ignoring_top_level_qualifiers_p
3163 (TREE_TYPE (type), TREE_TYPE (otype)))));
3165 gcc_assert (!ctx->object || !DECL_P (ctx->object)
3166 || *(ctx->global->values.get (ctx->object)) == ctx->ctor);
3169 /* Subroutine of cxx_eval_constant_expression.
3170 The expression tree T denotes a C-style array or a C-style
3171 aggregate. Reduce it to a constant expression. */
3173 static tree
3174 cxx_eval_bare_aggregate (const constexpr_ctx *ctx, tree t,
3175 bool lval,
3176 bool *non_constant_p, bool *overflow_p)
3178 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (t);
3179 bool changed = false;
3180 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (t));
3181 tree type = TREE_TYPE (t);
3183 constexpr_ctx new_ctx;
3184 if (TYPE_PTRMEMFUNC_P (type) || VECTOR_TYPE_P (type))
3186 /* We don't really need the ctx->ctor business for a PMF or
3187 vector, but it's simpler to use the same code. */
3188 new_ctx = *ctx;
3189 new_ctx.ctor = build_constructor (type, NULL);
3190 new_ctx.object = NULL_TREE;
3191 ctx = &new_ctx;
3193 verify_ctor_sanity (ctx, type);
3194 vec<constructor_elt, va_gc> **p = &CONSTRUCTOR_ELTS (ctx->ctor);
3195 vec_alloc (*p, vec_safe_length (v));
3197 unsigned i;
3198 tree index, value;
3199 bool constant_p = true;
3200 bool side_effects_p = false;
3201 FOR_EACH_CONSTRUCTOR_ELT (v, i, index, value)
3203 tree orig_value = value;
3204 init_subob_ctx (ctx, new_ctx, index, value);
3205 if (new_ctx.ctor != ctx->ctor)
3206 /* If we built a new CONSTRUCTOR, attach it now so that other
3207 initializers can refer to it. */
3208 CONSTRUCTOR_APPEND_ELT (*p, index, new_ctx.ctor);
3209 tree elt = cxx_eval_constant_expression (&new_ctx, value,
3210 lval,
3211 non_constant_p, overflow_p);
3212 /* Don't VERIFY_CONSTANT here. */
3213 if (ctx->quiet && *non_constant_p)
3214 break;
3215 if (elt != orig_value)
3216 changed = true;
3218 if (!TREE_CONSTANT (elt))
3219 constant_p = false;
3220 if (TREE_SIDE_EFFECTS (elt))
3221 side_effects_p = true;
3222 if (index && TREE_CODE (index) == COMPONENT_REF)
3224 /* This is an initialization of a vfield inside a base
3225 subaggregate that we already initialized; push this
3226 initialization into the previous initialization. */
3227 constructor_elt *inner = base_field_constructor_elt (*p, index);
3228 inner->value = elt;
3229 changed = true;
3231 else if (index
3232 && (TREE_CODE (index) == NOP_EXPR
3233 || TREE_CODE (index) == POINTER_PLUS_EXPR))
3235 /* This is an initializer for an empty base; now that we've
3236 checked that it's constant, we can ignore it. */
3237 gcc_assert (is_empty_class (TREE_TYPE (TREE_TYPE (index))));
3238 changed = true;
3240 else
3242 if (new_ctx.ctor != ctx->ctor)
3244 /* We appended this element above; update the value. */
3245 gcc_assert ((*p)->last().index == index);
3246 (*p)->last().value = elt;
3248 else
3249 CONSTRUCTOR_APPEND_ELT (*p, index, elt);
3250 /* Adding or replacing an element might change the ctor's flags. */
3251 TREE_CONSTANT (ctx->ctor) = constant_p;
3252 TREE_SIDE_EFFECTS (ctx->ctor) = side_effects_p;
3255 if (*non_constant_p || !changed)
3256 return t;
3257 t = ctx->ctor;
3258 /* We're done building this CONSTRUCTOR, so now we can interpret an
3259 element without an explicit initializer as value-initialized. */
3260 CONSTRUCTOR_NO_CLEARING (t) = false;
3261 TREE_CONSTANT (t) = constant_p;
3262 TREE_SIDE_EFFECTS (t) = side_effects_p;
3263 if (VECTOR_TYPE_P (type))
3264 t = fold (t);
3265 return t;
3268 /* Subroutine of cxx_eval_constant_expression.
3269 The expression tree T is a VEC_INIT_EXPR which denotes the desired
3270 initialization of a non-static data member of array type. Reduce it to a
3271 CONSTRUCTOR.
3273 Note that apart from value-initialization (when VALUE_INIT is true),
3274 this is only intended to support value-initialization and the
3275 initializations done by defaulted constructors for classes with
3276 non-static data members of array type. In this case, VEC_INIT_EXPR_INIT
3277 will either be NULL_TREE for the default constructor, or a COMPONENT_REF
3278 for the copy/move constructor. */
3280 static tree
3281 cxx_eval_vec_init_1 (const constexpr_ctx *ctx, tree atype, tree init,
3282 bool value_init, bool lval,
3283 bool *non_constant_p, bool *overflow_p)
3285 tree elttype = TREE_TYPE (atype);
3286 verify_ctor_sanity (ctx, atype);
3287 vec<constructor_elt, va_gc> **p = &CONSTRUCTOR_ELTS (ctx->ctor);
3288 bool pre_init = false;
3289 unsigned HOST_WIDE_INT i;
3290 tsubst_flags_t complain = ctx->quiet ? tf_none : tf_warning_or_error;
3292 /* For the default constructor, build up a call to the default
3293 constructor of the element type. We only need to handle class types
3294 here, as for a constructor to be constexpr, all members must be
3295 initialized, which for a defaulted default constructor means they must
3296 be of a class type with a constexpr default constructor. */
3297 if (TREE_CODE (elttype) == ARRAY_TYPE)
3298 /* We only do this at the lowest level. */;
3299 else if (value_init)
3301 init = build_value_init (elttype, complain);
3302 pre_init = true;
3304 else if (!init)
3306 releasing_vec argvec;
3307 init = build_special_member_call (NULL_TREE, complete_ctor_identifier,
3308 &argvec, elttype, LOOKUP_NORMAL,
3309 complain);
3310 init = build_aggr_init_expr (elttype, init);
3311 pre_init = true;
3314 tree nelts = get_array_or_vector_nelts (ctx, atype, non_constant_p,
3315 overflow_p);
3316 unsigned HOST_WIDE_INT max = tree_to_uhwi (nelts);
3317 for (i = 0; i < max; ++i)
3319 tree idx = build_int_cst (size_type_node, i);
3320 tree eltinit;
3321 bool reuse = false;
3322 constexpr_ctx new_ctx;
3323 init_subob_ctx (ctx, new_ctx, idx, pre_init ? init : elttype);
3324 if (new_ctx.ctor != ctx->ctor)
3325 CONSTRUCTOR_APPEND_ELT (*p, idx, new_ctx.ctor);
3326 if (TREE_CODE (elttype) == ARRAY_TYPE)
3328 /* A multidimensional array; recurse. */
3329 if (value_init || init == NULL_TREE)
3331 eltinit = NULL_TREE;
3332 reuse = i == 0;
3334 else
3335 eltinit = cp_build_array_ref (input_location, init, idx, complain);
3336 eltinit = cxx_eval_vec_init_1 (&new_ctx, elttype, eltinit, value_init,
3337 lval,
3338 non_constant_p, overflow_p);
3340 else if (pre_init)
3342 /* Initializing an element using value or default initialization
3343 we just pre-built above. */
3344 if (init == void_node)
3345 /* Trivial default-init, don't do anything to the CONSTRUCTOR. */
3346 return ctx->ctor;
3347 eltinit = cxx_eval_constant_expression (&new_ctx, init, lval,
3348 non_constant_p, overflow_p);
3349 reuse = i == 0;
3351 else
3353 /* Copying an element. */
3354 gcc_assert (same_type_ignoring_top_level_qualifiers_p
3355 (atype, TREE_TYPE (init)));
3356 eltinit = cp_build_array_ref (input_location, init, idx, complain);
3357 if (!lvalue_p (init))
3358 eltinit = move (eltinit);
3359 eltinit = force_rvalue (eltinit, complain);
3360 eltinit = cxx_eval_constant_expression (&new_ctx, eltinit, lval,
3361 non_constant_p, overflow_p);
3363 if (*non_constant_p && !ctx->quiet)
3364 break;
3365 if (new_ctx.ctor != ctx->ctor)
3367 /* We appended this element above; update the value. */
3368 gcc_assert ((*p)->last().index == idx);
3369 (*p)->last().value = eltinit;
3371 else
3372 CONSTRUCTOR_APPEND_ELT (*p, idx, eltinit);
3373 /* Reuse the result of cxx_eval_constant_expression call
3374 from the first iteration to all others if it is a constant
3375 initializer that doesn't require relocations. */
3376 if (reuse
3377 && max > 1
3378 && (eltinit == NULL_TREE
3379 || (initializer_constant_valid_p (eltinit, TREE_TYPE (eltinit))
3380 == null_pointer_node)))
3382 if (new_ctx.ctor != ctx->ctor)
3383 eltinit = new_ctx.ctor;
3384 tree range = build2 (RANGE_EXPR, size_type_node,
3385 build_int_cst (size_type_node, 1),
3386 build_int_cst (size_type_node, max - 1));
3387 CONSTRUCTOR_APPEND_ELT (*p, range, unshare_constructor (eltinit));
3388 break;
3390 else if (i == 0)
3391 vec_safe_reserve (*p, max);
3394 if (!*non_constant_p)
3396 init = ctx->ctor;
3397 CONSTRUCTOR_NO_CLEARING (init) = false;
3399 return init;
3402 static tree
3403 cxx_eval_vec_init (const constexpr_ctx *ctx, tree t,
3404 bool lval,
3405 bool *non_constant_p, bool *overflow_p)
3407 tree atype = TREE_TYPE (t);
3408 tree init = VEC_INIT_EXPR_INIT (t);
3409 tree r = cxx_eval_vec_init_1 (ctx, atype, init,
3410 VEC_INIT_EXPR_VALUE_INIT (t),
3411 lval, non_constant_p, overflow_p);
3412 if (*non_constant_p)
3413 return t;
3414 else
3415 return r;
3418 /* Like same_type_ignoring_top_level_qualifiers_p, but also handle the case
3419 where the desired type is an array of unknown bounds because the variable
3420 has had its bounds deduced since the wrapping expression was created. */
3422 static bool
3423 same_type_ignoring_tlq_and_bounds_p (tree type1, tree type2)
3425 while (TREE_CODE (type1) == ARRAY_TYPE
3426 && TREE_CODE (type2) == ARRAY_TYPE
3427 && (!TYPE_DOMAIN (type1) || !TYPE_DOMAIN (type2)))
3429 type1 = TREE_TYPE (type1);
3430 type2 = TREE_TYPE (type2);
3432 return same_type_ignoring_top_level_qualifiers_p (type1, type2);
3435 /* Helper function for cxx_fold_indirect_ref_1, called recursively. */
3437 static tree
3438 cxx_fold_indirect_ref_1 (location_t loc, tree type, tree op,
3439 unsigned HOST_WIDE_INT off, bool *empty_base)
3441 tree optype = TREE_TYPE (op);
3442 unsigned HOST_WIDE_INT const_nunits;
3443 if (off == 0)
3445 if (similar_type_p (optype, type))
3446 return op;
3447 /* Also handle conversion to an empty base class, which
3448 is represented with a NOP_EXPR. */
3449 /* *(foo *)&complexfoo => __real__ complexfoo */
3450 else if (TREE_CODE (optype) == COMPLEX_TYPE
3451 && similar_type_p (type, TREE_TYPE (optype)))
3452 return build1_loc (loc, REALPART_EXPR, type, op);
3454 /* ((foo*)&complexfoo)[1] => __imag__ complexfoo */
3455 else if (TREE_CODE (optype) == COMPLEX_TYPE
3456 && similar_type_p (type, TREE_TYPE (optype))
3457 && tree_to_uhwi (TYPE_SIZE_UNIT (type)) == off)
3458 return build1_loc (loc, IMAGPART_EXPR, type, op);
3459 if (is_empty_class (type)
3460 && CLASS_TYPE_P (optype)
3461 && DERIVED_FROM_P (type, optype))
3463 *empty_base = true;
3464 return op;
3466 /* ((foo*)&vectorfoo)[x] => BIT_FIELD_REF<vectorfoo,...> */
3467 else if (VECTOR_TYPE_P (optype)
3468 && similar_type_p (type, TREE_TYPE (optype))
3469 && TYPE_VECTOR_SUBPARTS (optype).is_constant (&const_nunits))
3471 unsigned HOST_WIDE_INT part_width = tree_to_uhwi (TYPE_SIZE_UNIT (type));
3472 unsigned HOST_WIDE_INT max_offset = part_width * const_nunits;
3473 if (off < max_offset && off % part_width == 0)
3475 tree index = bitsize_int (off * BITS_PER_UNIT);
3476 return build3_loc (loc, BIT_FIELD_REF, type, op,
3477 TYPE_SIZE (type), index);
3480 /* ((foo *)&fooarray)[x] => fooarray[x] */
3481 else if (TREE_CODE (optype) == ARRAY_TYPE
3482 && tree_fits_uhwi_p (TYPE_SIZE_UNIT (TREE_TYPE (optype)))
3483 && !integer_zerop (TYPE_SIZE_UNIT (TREE_TYPE (optype))))
3485 tree type_domain = TYPE_DOMAIN (optype);
3486 tree min_val = size_zero_node;
3487 if (type_domain && TYPE_MIN_VALUE (type_domain))
3488 min_val = TYPE_MIN_VALUE (type_domain);
3489 unsigned HOST_WIDE_INT el_sz
3490 = tree_to_uhwi (TYPE_SIZE_UNIT (TREE_TYPE (optype)));
3491 unsigned HOST_WIDE_INT idx = off / el_sz;
3492 unsigned HOST_WIDE_INT rem = off % el_sz;
3493 if (tree_fits_uhwi_p (min_val))
3495 tree index = size_int (idx + tree_to_uhwi (min_val));
3496 op = build4_loc (loc, ARRAY_REF, TREE_TYPE (optype), op, index,
3497 NULL_TREE, NULL_TREE);
3498 return cxx_fold_indirect_ref_1 (loc, type, op, rem,
3499 empty_base);
3502 /* ((foo *)&struct_with_foo_field)[x] => COMPONENT_REF */
3503 else if (TREE_CODE (optype) == RECORD_TYPE)
3505 for (tree field = TYPE_FIELDS (optype);
3506 field; field = DECL_CHAIN (field))
3507 if (TREE_CODE (field) == FIELD_DECL
3508 && TREE_TYPE (field) != error_mark_node
3509 && tree_fits_uhwi_p (TYPE_SIZE_UNIT (TREE_TYPE (field))))
3511 tree pos = byte_position (field);
3512 if (!tree_fits_uhwi_p (pos))
3513 continue;
3514 unsigned HOST_WIDE_INT upos = tree_to_uhwi (pos);
3515 unsigned el_sz
3516 = tree_to_uhwi (TYPE_SIZE_UNIT (TREE_TYPE (field)));
3517 if (upos <= off && off < upos + el_sz)
3519 tree cop = build3 (COMPONENT_REF, TREE_TYPE (field),
3520 op, field, NULL_TREE);
3521 if (tree ret = cxx_fold_indirect_ref_1 (loc, type, cop,
3522 off - upos,
3523 empty_base))
3524 return ret;
3529 return NULL_TREE;
3532 /* A less strict version of fold_indirect_ref_1, which requires cv-quals to
3533 match. We want to be less strict for simple *& folding; if we have a
3534 non-const temporary that we access through a const pointer, that should
3535 work. We handle this here rather than change fold_indirect_ref_1
3536 because we're dealing with things like ADDR_EXPR of INTEGER_CST which
3537 don't really make sense outside of constant expression evaluation. Also
3538 we want to allow folding to COMPONENT_REF, which could cause trouble
3539 with TBAA in fold_indirect_ref_1. */
3541 static tree
3542 cxx_fold_indirect_ref (location_t loc, tree type, tree op0, bool *empty_base)
3544 tree sub = op0;
3545 tree subtype;
3546 poly_uint64 const_op01;
3548 STRIP_NOPS (sub);
3549 subtype = TREE_TYPE (sub);
3550 if (!INDIRECT_TYPE_P (subtype))
3551 return NULL_TREE;
3553 if (TREE_CODE (sub) == ADDR_EXPR)
3555 tree op = TREE_OPERAND (sub, 0);
3556 tree optype = TREE_TYPE (op);
3558 /* *&CONST_DECL -> to the value of the const decl. */
3559 if (TREE_CODE (op) == CONST_DECL)
3560 return DECL_INITIAL (op);
3561 /* *&p => p; make sure to handle *&"str"[cst] here. */
3562 if (similar_type_p (optype, type))
3564 tree fop = fold_read_from_constant_string (op);
3565 if (fop)
3566 return fop;
3567 else
3568 return op;
3570 else
3571 return cxx_fold_indirect_ref_1 (loc, type, op, 0, empty_base);
3573 else if (TREE_CODE (sub) == POINTER_PLUS_EXPR
3574 && tree_fits_uhwi_p (TREE_OPERAND (sub, 1)))
3576 tree op00 = TREE_OPERAND (sub, 0);
3577 tree op01 = TREE_OPERAND (sub, 1);
3579 STRIP_NOPS (op00);
3580 if (TREE_CODE (op00) == ADDR_EXPR)
3581 return cxx_fold_indirect_ref_1 (loc, type, TREE_OPERAND (op00, 0),
3582 tree_to_uhwi (op01), empty_base);
3584 /* *(foo *)fooarrptr => (*fooarrptr)[0] */
3585 else if (TREE_CODE (TREE_TYPE (subtype)) == ARRAY_TYPE
3586 && similar_type_p (type, TREE_TYPE (TREE_TYPE (subtype))))
3588 tree type_domain;
3589 tree min_val = size_zero_node;
3590 tree newsub
3591 = cxx_fold_indirect_ref (loc, TREE_TYPE (subtype), sub, NULL);
3592 if (newsub)
3593 sub = newsub;
3594 else
3595 sub = build1_loc (loc, INDIRECT_REF, TREE_TYPE (subtype), sub);
3596 type_domain = TYPE_DOMAIN (TREE_TYPE (sub));
3597 if (type_domain && TYPE_MIN_VALUE (type_domain))
3598 min_val = TYPE_MIN_VALUE (type_domain);
3599 return build4_loc (loc, ARRAY_REF, type, sub, min_val, NULL_TREE,
3600 NULL_TREE);
3603 return NULL_TREE;
3606 static tree
3607 cxx_eval_indirect_ref (const constexpr_ctx *ctx, tree t,
3608 bool lval,
3609 bool *non_constant_p, bool *overflow_p)
3611 tree orig_op0 = TREE_OPERAND (t, 0);
3612 bool empty_base = false;
3614 /* We can handle a MEM_REF like an INDIRECT_REF, if MEM_REF's second
3615 operand is an integer-zero. Otherwise reject the MEM_REF for now. */
3617 if (TREE_CODE (t) == MEM_REF
3618 && (!TREE_OPERAND (t, 1) || !integer_zerop (TREE_OPERAND (t, 1))))
3620 gcc_assert (ctx->quiet);
3621 *non_constant_p = true;
3622 return t;
3625 /* First try to simplify it directly. */
3626 tree r = cxx_fold_indirect_ref (EXPR_LOCATION (t), TREE_TYPE (t), orig_op0,
3627 &empty_base);
3628 if (!r)
3630 /* If that didn't work, evaluate the operand first. */
3631 tree op0 = cxx_eval_constant_expression (ctx, orig_op0,
3632 /*lval*/false, non_constant_p,
3633 overflow_p);
3634 /* Don't VERIFY_CONSTANT here. */
3635 if (*non_constant_p)
3636 return t;
3638 if (!lval && integer_zerop (op0))
3640 if (!ctx->quiet)
3641 error ("dereferencing a null pointer");
3642 *non_constant_p = true;
3643 return t;
3646 r = cxx_fold_indirect_ref (EXPR_LOCATION (t), TREE_TYPE (t), op0,
3647 &empty_base);
3648 if (r == NULL_TREE)
3650 /* We couldn't fold to a constant value. Make sure it's not
3651 something we should have been able to fold. */
3652 tree sub = op0;
3653 STRIP_NOPS (sub);
3654 if (TREE_CODE (sub) == ADDR_EXPR)
3656 gcc_assert (!similar_type_p
3657 (TREE_TYPE (TREE_TYPE (sub)), TREE_TYPE (t)));
3658 /* DR 1188 says we don't have to deal with this. */
3659 if (!ctx->quiet)
3660 error_at (cp_expr_loc_or_input_loc (t),
3661 "accessing value of %qE through a %qT glvalue in a "
3662 "constant expression", build_fold_indirect_ref (sub),
3663 TREE_TYPE (t));
3664 *non_constant_p = true;
3665 return t;
3668 if (lval && op0 != orig_op0)
3669 return build1 (INDIRECT_REF, TREE_TYPE (t), op0);
3670 if (!lval)
3671 VERIFY_CONSTANT (t);
3672 return t;
3676 r = cxx_eval_constant_expression (ctx, r,
3677 lval, non_constant_p, overflow_p);
3678 if (*non_constant_p)
3679 return t;
3681 /* If we're pulling out the value of an empty base, just return an empty
3682 CONSTRUCTOR. */
3683 if (empty_base && !lval)
3685 r = build_constructor (TREE_TYPE (t), NULL);
3686 TREE_CONSTANT (r) = true;
3689 return r;
3692 /* Complain about R, a VAR_DECL, not being usable in a constant expression.
3693 Shared between potential_constant_expression and
3694 cxx_eval_constant_expression. */
3696 static void
3697 non_const_var_error (tree r)
3699 auto_diagnostic_group d;
3700 tree type = TREE_TYPE (r);
3701 if (DECL_NAME (r) == heap_uninit_identifier
3702 || DECL_NAME (r) == heap_identifier)
3704 error ("the content of uninitialized storage is not usable "
3705 "in a constant expression");
3706 inform (DECL_SOURCE_LOCATION (r), "allocated here");
3707 return;
3709 if (DECL_NAME (r) == heap_deleted_identifier)
3711 error ("use of allocated storage after deallocation in a "
3712 "constant expression");
3713 inform (DECL_SOURCE_LOCATION (r), "allocated here");
3714 return;
3716 error ("the value of %qD is not usable in a constant "
3717 "expression", r);
3718 /* Avoid error cascade. */
3719 if (DECL_INITIAL (r) == error_mark_node)
3720 return;
3721 if (DECL_DECLARED_CONSTEXPR_P (r))
3722 inform (DECL_SOURCE_LOCATION (r),
3723 "%qD used in its own initializer", r);
3724 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
3726 if (!CP_TYPE_CONST_P (type))
3727 inform (DECL_SOURCE_LOCATION (r),
3728 "%q#D is not const", r);
3729 else if (CP_TYPE_VOLATILE_P (type))
3730 inform (DECL_SOURCE_LOCATION (r),
3731 "%q#D is volatile", r);
3732 else if (!DECL_INITIAL (r)
3733 || !TREE_CONSTANT (DECL_INITIAL (r))
3734 || !DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r))
3735 inform (DECL_SOURCE_LOCATION (r),
3736 "%qD was not initialized with a constant "
3737 "expression", r);
3738 else
3739 gcc_unreachable ();
3741 else if (TYPE_REF_P (type))
3742 inform (DECL_SOURCE_LOCATION (r),
3743 "%qD was not initialized with a constant "
3744 "expression", r);
3745 else
3747 if (cxx_dialect >= cxx11 && !DECL_DECLARED_CONSTEXPR_P (r))
3748 inform (DECL_SOURCE_LOCATION (r),
3749 "%qD was not declared %<constexpr%>", r);
3750 else
3751 inform (DECL_SOURCE_LOCATION (r),
3752 "%qD does not have integral or enumeration type",
3757 /* Subroutine of cxx_eval_constant_expression.
3758 Like cxx_eval_unary_expression, except for trinary expressions. */
3760 static tree
3761 cxx_eval_trinary_expression (const constexpr_ctx *ctx, tree t,
3762 bool lval,
3763 bool *non_constant_p, bool *overflow_p)
3765 int i;
3766 tree args[3];
3767 tree val;
3769 for (i = 0; i < 3; i++)
3771 args[i] = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, i),
3772 lval,
3773 non_constant_p, overflow_p);
3774 VERIFY_CONSTANT (args[i]);
3777 val = fold_ternary_loc (EXPR_LOCATION (t), TREE_CODE (t), TREE_TYPE (t),
3778 args[0], args[1], args[2]);
3779 if (val == NULL_TREE)
3780 return t;
3781 VERIFY_CONSTANT (val);
3782 return val;
3785 /* True if T was declared in a function declared to be constexpr, and
3786 therefore potentially constant in C++14. */
3788 bool
3789 var_in_constexpr_fn (tree t)
3791 tree ctx = DECL_CONTEXT (t);
3792 return (ctx && TREE_CODE (ctx) == FUNCTION_DECL
3793 && DECL_DECLARED_CONSTEXPR_P (ctx));
3796 /* True if T was declared in a function that might be constexpr: either a
3797 function that was declared constexpr, or a C++17 lambda op(). */
3799 bool
3800 var_in_maybe_constexpr_fn (tree t)
3802 if (cxx_dialect >= cxx17
3803 && DECL_FUNCTION_SCOPE_P (t)
3804 && LAMBDA_FUNCTION_P (DECL_CONTEXT (t)))
3805 return true;
3806 return var_in_constexpr_fn (t);
3809 /* We're assigning INIT to TARGET. In do_build_copy_constructor and
3810 build_over_call we implement trivial copy of a class with tail padding using
3811 assignment of character arrays, which is valid in normal code, but not in
3812 constexpr evaluation. We don't need to worry about clobbering tail padding
3813 in constexpr evaluation, so strip the type punning. */
3815 static void
3816 maybe_simplify_trivial_copy (tree &target, tree &init)
3818 if (TREE_CODE (target) == MEM_REF
3819 && TREE_CODE (init) == MEM_REF
3820 && TREE_TYPE (target) == TREE_TYPE (init)
3821 && TREE_CODE (TREE_TYPE (target)) == ARRAY_TYPE
3822 && TREE_TYPE (TREE_TYPE (target)) == unsigned_char_type_node)
3824 target = build_fold_indirect_ref (TREE_OPERAND (target, 0));
3825 init = build_fold_indirect_ref (TREE_OPERAND (init, 0));
3829 /* Return true if we are modifying something that is const during constant
3830 expression evaluation. CODE is the code of the statement, OBJ is the
3831 object in question, MUTABLE_P is true if one of the subobjects were
3832 declared mutable. */
3834 static bool
3835 modifying_const_object_p (tree_code code, tree obj, bool mutable_p)
3837 /* If this is initialization, there's no problem. */
3838 if (code != MODIFY_EXPR)
3839 return false;
3841 /* [basic.type.qualifier] "A const object is an object of type
3842 const T or a non-mutable subobject of a const object." */
3843 if (mutable_p)
3844 return false;
3846 return (TREE_READONLY (obj) || CP_TYPE_CONST_P (TREE_TYPE (obj)));
3849 /* Evaluate an INIT_EXPR or MODIFY_EXPR. */
3851 static tree
3852 cxx_eval_store_expression (const constexpr_ctx *ctx, tree t,
3853 bool lval,
3854 bool *non_constant_p, bool *overflow_p)
3856 constexpr_ctx new_ctx = *ctx;
3858 tree init = TREE_OPERAND (t, 1);
3859 if (TREE_CLOBBER_P (init))
3860 /* Just ignore clobbers. */
3861 return void_node;
3863 /* First we figure out where we're storing to. */
3864 tree target = TREE_OPERAND (t, 0);
3866 maybe_simplify_trivial_copy (target, init);
3868 tree type = TREE_TYPE (target);
3869 bool preeval = SCALAR_TYPE_P (type) || TREE_CODE (t) == MODIFY_EXPR;
3870 if (preeval)
3872 /* Evaluate the value to be stored without knowing what object it will be
3873 stored in, so that any side-effects happen first. */
3874 if (!SCALAR_TYPE_P (type))
3875 new_ctx.ctor = new_ctx.object = NULL_TREE;
3876 init = cxx_eval_constant_expression (&new_ctx, init, false,
3877 non_constant_p, overflow_p);
3878 if (*non_constant_p)
3879 return t;
3882 bool evaluated = false;
3883 if (lval)
3885 /* If we want to return a reference to the target, we need to evaluate it
3886 as a whole; otherwise, only evaluate the innermost piece to avoid
3887 building up unnecessary *_REFs. */
3888 target = cxx_eval_constant_expression (ctx, target, true,
3889 non_constant_p, overflow_p);
3890 evaluated = true;
3891 if (*non_constant_p)
3892 return t;
3895 /* Find the underlying variable. */
3896 releasing_vec refs;
3897 tree object = NULL_TREE;
3898 /* If we're modifying a const object, save it. */
3899 tree const_object_being_modified = NULL_TREE;
3900 bool mutable_p = false;
3901 for (tree probe = target; object == NULL_TREE; )
3903 switch (TREE_CODE (probe))
3905 case BIT_FIELD_REF:
3906 case COMPONENT_REF:
3907 case ARRAY_REF:
3909 tree ob = TREE_OPERAND (probe, 0);
3910 tree elt = TREE_OPERAND (probe, 1);
3911 if (TREE_CODE (elt) == FIELD_DECL && DECL_MUTABLE_P (elt))
3912 mutable_p = true;
3913 if (evaluated
3914 && modifying_const_object_p (TREE_CODE (t), probe, mutable_p)
3915 && const_object_being_modified == NULL_TREE)
3916 const_object_being_modified = probe;
3917 if (TREE_CODE (probe) == ARRAY_REF)
3919 elt = eval_and_check_array_index (ctx, probe, false,
3920 non_constant_p, overflow_p);
3921 if (*non_constant_p)
3922 return t;
3924 vec_safe_push (refs, elt);
3925 vec_safe_push (refs, TREE_TYPE (probe));
3926 probe = ob;
3928 break;
3930 default:
3931 if (evaluated)
3932 object = probe;
3933 else
3935 probe = cxx_eval_constant_expression (ctx, probe, true,
3936 non_constant_p, overflow_p);
3937 evaluated = true;
3938 if (*non_constant_p)
3939 return t;
3941 break;
3945 if (modifying_const_object_p (TREE_CODE (t), object, mutable_p)
3946 && const_object_being_modified == NULL_TREE)
3947 const_object_being_modified = object;
3949 /* And then find/build up our initializer for the path to the subobject
3950 we're initializing. */
3951 tree *valp;
3952 if (object == ctx->object && VAR_P (object)
3953 && DECL_NAME (object) && ctx->call == NULL)
3954 /* The variable we're building up an aggregate initializer for is outside
3955 the constant-expression, so don't evaluate the store. We check
3956 DECL_NAME to handle TARGET_EXPR temporaries, which are fair game. */
3957 valp = NULL;
3958 else if (DECL_P (object))
3959 valp = ctx->global->values.get (object);
3960 else
3961 valp = NULL;
3962 if (!valp)
3964 /* A constant-expression cannot modify objects from outside the
3965 constant-expression. */
3966 if (!ctx->quiet)
3967 error ("modification of %qE is not a constant expression", object);
3968 *non_constant_p = true;
3969 return t;
3971 type = TREE_TYPE (object);
3972 bool no_zero_init = true;
3974 releasing_vec ctors;
3975 while (!refs->is_empty ())
3977 if (*valp == NULL_TREE)
3979 *valp = build_constructor (type, NULL);
3980 CONSTRUCTOR_NO_CLEARING (*valp) = no_zero_init;
3982 else if (TREE_CODE (*valp) == STRING_CST)
3984 /* An array was initialized with a string constant, and now
3985 we're writing into one of its elements. Explode the
3986 single initialization into a set of element
3987 initializations. */
3988 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
3990 tree string = *valp;
3991 tree elt_type = TREE_TYPE (type);
3992 unsigned chars_per_elt = (TYPE_PRECISION (elt_type)
3993 / TYPE_PRECISION (char_type_node));
3994 unsigned num_elts = TREE_STRING_LENGTH (string) / chars_per_elt;
3995 tree ary_ctor = build_constructor (type, NULL);
3997 vec_safe_reserve (CONSTRUCTOR_ELTS (ary_ctor), num_elts);
3998 for (unsigned ix = 0; ix != num_elts; ix++)
4000 constructor_elt elt =
4002 build_int_cst (size_type_node, ix),
4003 extract_string_elt (string, chars_per_elt, ix)
4005 CONSTRUCTOR_ELTS (ary_ctor)->quick_push (elt);
4008 *valp = ary_ctor;
4011 /* If the value of object is already zero-initialized, any new ctors for
4012 subobjects will also be zero-initialized. */
4013 no_zero_init = CONSTRUCTOR_NO_CLEARING (*valp);
4015 vec_safe_push (ctors, *valp);
4017 enum tree_code code = TREE_CODE (type);
4018 type = refs->pop();
4019 tree index = refs->pop();
4021 constructor_elt *cep = NULL;
4022 if (code == ARRAY_TYPE)
4024 HOST_WIDE_INT i
4025 = find_array_ctor_elt (*valp, index, /*insert*/true);
4026 gcc_assert (i >= 0);
4027 cep = CONSTRUCTOR_ELT (*valp, i);
4028 gcc_assert (TREE_CODE (cep->index) != RANGE_EXPR);
4030 else
4032 gcc_assert (TREE_CODE (index) == FIELD_DECL);
4034 /* We must keep the CONSTRUCTOR's ELTS in FIELD order.
4035 Usually we meet initializers in that order, but it is
4036 possible for base types to be placed not in program
4037 order. */
4038 tree fields = TYPE_FIELDS (DECL_CONTEXT (index));
4039 unsigned HOST_WIDE_INT idx;
4041 if (code == UNION_TYPE && CONSTRUCTOR_NELTS (*valp)
4042 && CONSTRUCTOR_ELT (*valp, 0)->index != index)
4044 if (cxx_dialect < cxx2a)
4046 if (!ctx->quiet)
4047 error_at (cp_expr_loc_or_input_loc (t),
4048 "change of the active member of a union "
4049 "from %qD to %qD",
4050 CONSTRUCTOR_ELT (*valp, 0)->index,
4051 index);
4052 *non_constant_p = true;
4054 /* Changing active member. */
4055 vec_safe_truncate (CONSTRUCTOR_ELTS (*valp), 0);
4056 no_zero_init = true;
4059 for (idx = 0;
4060 vec_safe_iterate (CONSTRUCTOR_ELTS (*valp), idx, &cep);
4061 idx++, fields = DECL_CHAIN (fields))
4063 if (index == cep->index)
4064 goto found;
4066 /* The field we're initializing must be on the field
4067 list. Look to see if it is present before the
4068 field the current ELT initializes. */
4069 for (; fields != cep->index; fields = DECL_CHAIN (fields))
4070 if (index == fields)
4071 goto insert;
4074 /* We fell off the end of the CONSTRUCTOR, so insert a new
4075 entry at the end. */
4076 insert:
4078 constructor_elt ce = { index, NULL_TREE };
4080 vec_safe_insert (CONSTRUCTOR_ELTS (*valp), idx, ce);
4081 cep = CONSTRUCTOR_ELT (*valp, idx);
4083 found:;
4085 valp = &cep->value;
4088 /* Detect modifying a constant object in constexpr evaluation.
4089 We have found a const object that is being modified. Figure out
4090 if we need to issue an error. Consider
4092 struct A {
4093 int n;
4094 constexpr A() : n(1) { n = 2; } // #1
4096 struct B {
4097 const A a;
4098 constexpr B() { a.n = 3; } // #2
4100 constexpr B b{};
4102 #1 is OK, since we're modifying an object under construction, but
4103 #2 is wrong, since "a" is const and has been fully constructed.
4104 To track it, we use the TREE_READONLY bit in the object's CONSTRUCTOR
4105 which means that the object is read-only. For the example above, the
4106 *ctors stack at the point of #2 will look like:
4108 ctors[0] = {.a={.n=2}} TREE_READONLY = 0
4109 ctors[1] = {.n=2} TREE_READONLY = 1
4111 and we're modifying "b.a", so we search the stack and see if the
4112 constructor for "b.a" has already run. */
4113 if (const_object_being_modified)
4115 bool fail = false;
4116 tree const_objtype
4117 = strip_array_types (TREE_TYPE (const_object_being_modified));
4118 if (!CLASS_TYPE_P (const_objtype))
4119 fail = true;
4120 else
4122 /* [class.ctor]p5 "A constructor can be invoked for a const,
4123 volatile, or const volatile object. const and volatile
4124 semantics are not applied on an object under construction.
4125 They come into effect when the constructor for the most
4126 derived object ends." */
4127 tree elt;
4128 unsigned int i;
4129 FOR_EACH_VEC_ELT (*ctors, i, elt)
4130 if (same_type_ignoring_top_level_qualifiers_p
4131 (TREE_TYPE (const_object_being_modified), TREE_TYPE (elt)))
4133 fail = TREE_READONLY (elt);
4134 break;
4137 if (fail)
4139 if (!ctx->quiet)
4140 modifying_const_object_error (t, const_object_being_modified);
4141 *non_constant_p = true;
4142 return t;
4146 if (!preeval)
4148 /* Create a new CONSTRUCTOR in case evaluation of the initializer
4149 wants to modify it. */
4150 if (*valp == NULL_TREE)
4152 *valp = build_constructor (type, NULL);
4153 CONSTRUCTOR_NO_CLEARING (*valp) = no_zero_init;
4155 new_ctx.ctor = *valp;
4156 new_ctx.object = target;
4157 init = cxx_eval_constant_expression (&new_ctx, init, false,
4158 non_constant_p, overflow_p);
4159 if (ctors->is_empty())
4160 /* The hash table might have moved since the get earlier. */
4161 valp = ctx->global->values.get (object);
4164 /* Don't share a CONSTRUCTOR that might be changed later. */
4165 init = unshare_constructor (init);
4167 if (*valp && TREE_CODE (*valp) == CONSTRUCTOR
4168 && TREE_CODE (init) == CONSTRUCTOR)
4170 /* An outer ctx->ctor might be pointing to *valp, so replace
4171 its contents. */
4172 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (init),
4173 TREE_TYPE (*valp)))
4175 /* For initialization of an empty base, the original target will be
4176 *(base*)this, evaluation of which resolves to the object
4177 argument, which has the derived type rather than the base type. In
4178 this situation, just evaluate the initializer and return, since
4179 there's no actual data to store. */
4180 gcc_assert (is_empty_class (TREE_TYPE (init)) && !lval);
4181 return init;
4183 CONSTRUCTOR_ELTS (*valp) = CONSTRUCTOR_ELTS (init);
4184 TREE_CONSTANT (*valp) = TREE_CONSTANT (init);
4185 TREE_SIDE_EFFECTS (*valp) = TREE_SIDE_EFFECTS (init);
4186 CONSTRUCTOR_NO_CLEARING (*valp)
4187 = CONSTRUCTOR_NO_CLEARING (init);
4189 else
4190 *valp = init;
4192 /* Update TREE_CONSTANT and TREE_SIDE_EFFECTS on enclosing
4193 CONSTRUCTORs, if any. */
4194 tree elt;
4195 unsigned i;
4196 bool c = TREE_CONSTANT (init);
4197 bool s = TREE_SIDE_EFFECTS (init);
4198 if (!c || s)
4199 FOR_EACH_VEC_ELT (*ctors, i, elt)
4201 if (!c)
4202 TREE_CONSTANT (elt) = false;
4203 if (s)
4204 TREE_SIDE_EFFECTS (elt) = true;
4207 if (*non_constant_p)
4208 return t;
4209 else if (lval)
4210 return target;
4211 else
4212 return init;
4215 /* Evaluate a ++ or -- expression. */
4217 static tree
4218 cxx_eval_increment_expression (const constexpr_ctx *ctx, tree t,
4219 bool lval,
4220 bool *non_constant_p, bool *overflow_p)
4222 enum tree_code code = TREE_CODE (t);
4223 tree type = TREE_TYPE (t);
4224 tree op = TREE_OPERAND (t, 0);
4225 tree offset = TREE_OPERAND (t, 1);
4226 gcc_assert (TREE_CONSTANT (offset));
4228 /* OFFSET is constant, but perhaps not constant enough. We need to
4229 e.g. bash FLOAT_EXPRs to REAL_CSTs. */
4230 offset = fold_simple (offset);
4232 /* The operand as an lvalue. */
4233 op = cxx_eval_constant_expression (ctx, op, true,
4234 non_constant_p, overflow_p);
4236 /* The operand as an rvalue. */
4237 tree val
4238 = cxx_eval_constant_expression (ctx, op, false,
4239 non_constant_p, overflow_p);
4240 /* Don't VERIFY_CONSTANT if this might be dealing with a pointer to
4241 a local array in a constexpr function. */
4242 bool ptr = INDIRECT_TYPE_P (TREE_TYPE (val));
4243 if (!ptr)
4244 VERIFY_CONSTANT (val);
4246 /* The modified value. */
4247 bool inc = (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR);
4248 tree mod;
4249 if (INDIRECT_TYPE_P (type))
4251 /* The middle end requires pointers to use POINTER_PLUS_EXPR. */
4252 offset = convert_to_ptrofftype (offset);
4253 if (!inc)
4254 offset = fold_build1 (NEGATE_EXPR, TREE_TYPE (offset), offset);
4255 mod = fold_build2 (POINTER_PLUS_EXPR, type, val, offset);
4257 else
4258 mod = fold_build2 (inc ? PLUS_EXPR : MINUS_EXPR, type, val, offset);
4259 if (!ptr)
4260 VERIFY_CONSTANT (mod);
4262 /* Storing the modified value. */
4263 tree store = build2_loc (cp_expr_loc_or_loc (t, input_location),
4264 MODIFY_EXPR, type, op, mod);
4265 cxx_eval_constant_expression (ctx, store,
4266 true, non_constant_p, overflow_p);
4267 ggc_free (store);
4269 /* And the value of the expression. */
4270 if (code == PREINCREMENT_EXPR || code == PREDECREMENT_EXPR)
4272 /* Prefix ops are lvalues. */
4273 if (lval)
4274 return op;
4275 else
4276 /* But we optimize when the caller wants an rvalue. */
4277 return mod;
4279 else
4280 /* Postfix ops are rvalues. */
4281 return val;
4284 /* Predicates for the meaning of *jump_target. */
4286 static bool
4287 returns (tree *jump_target)
4289 return *jump_target
4290 && (TREE_CODE (*jump_target) == RETURN_EXPR
4291 || (TREE_CODE (*jump_target) == LABEL_DECL
4292 && LABEL_DECL_CDTOR (*jump_target)));
4295 static bool
4296 breaks (tree *jump_target)
4298 return *jump_target
4299 && ((TREE_CODE (*jump_target) == LABEL_DECL
4300 && LABEL_DECL_BREAK (*jump_target))
4301 || TREE_CODE (*jump_target) == BREAK_STMT
4302 || TREE_CODE (*jump_target) == EXIT_EXPR);
4305 static bool
4306 continues (tree *jump_target)
4308 return *jump_target
4309 && ((TREE_CODE (*jump_target) == LABEL_DECL
4310 && LABEL_DECL_CONTINUE (*jump_target))
4311 || TREE_CODE (*jump_target) == CONTINUE_STMT);
4315 static bool
4316 switches (tree *jump_target)
4318 return *jump_target
4319 && TREE_CODE (*jump_target) == INTEGER_CST;
4322 /* Subroutine of cxx_eval_statement_list. Determine whether the statement
4323 STMT matches *jump_target. If we're looking for a case label and we see
4324 the default label, note it in ctx->css_state. */
4326 static bool
4327 label_matches (const constexpr_ctx *ctx, tree *jump_target, tree stmt)
4329 switch (TREE_CODE (*jump_target))
4331 case LABEL_DECL:
4332 if (TREE_CODE (stmt) == LABEL_EXPR
4333 && LABEL_EXPR_LABEL (stmt) == *jump_target)
4334 return true;
4335 break;
4337 case INTEGER_CST:
4338 if (TREE_CODE (stmt) == CASE_LABEL_EXPR)
4340 gcc_assert (ctx->css_state != NULL);
4341 if (!CASE_LOW (stmt))
4343 /* default: should appear just once in a SWITCH_EXPR
4344 body (excluding nested SWITCH_EXPR). */
4345 gcc_assert (*ctx->css_state != css_default_seen);
4346 /* When evaluating SWITCH_EXPR body for the second time,
4347 return true for the default: label. */
4348 if (*ctx->css_state == css_default_processing)
4349 return true;
4350 *ctx->css_state = css_default_seen;
4352 else if (CASE_HIGH (stmt))
4354 if (tree_int_cst_le (CASE_LOW (stmt), *jump_target)
4355 && tree_int_cst_le (*jump_target, CASE_HIGH (stmt)))
4356 return true;
4358 else if (tree_int_cst_equal (*jump_target, CASE_LOW (stmt)))
4359 return true;
4361 break;
4363 case BREAK_STMT:
4364 case CONTINUE_STMT:
4365 /* These two are handled directly in cxx_eval_loop_expr by testing
4366 breaks (jump_target) or continues (jump_target). */
4367 break;
4369 default:
4370 gcc_unreachable ();
4372 return false;
4375 /* Evaluate a STATEMENT_LIST for side-effects. Handles various jump
4376 semantics, for switch, break, continue, and return. */
4378 static tree
4379 cxx_eval_statement_list (const constexpr_ctx *ctx, tree t,
4380 bool *non_constant_p, bool *overflow_p,
4381 tree *jump_target)
4383 tree_stmt_iterator i;
4384 tree local_target;
4385 /* In a statement-expression we want to return the last value.
4386 For empty statement expression return void_node. */
4387 tree r = void_node;
4388 if (!jump_target)
4390 local_target = NULL_TREE;
4391 jump_target = &local_target;
4393 for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
4395 tree stmt = tsi_stmt (i);
4396 /* We've found a continue, so skip everything until we reach
4397 the label its jumping to. */
4398 if (continues (jump_target))
4400 if (label_matches (ctx, jump_target, stmt))
4401 /* Found it. */
4402 *jump_target = NULL_TREE;
4403 else
4404 continue;
4406 if (TREE_CODE (stmt) == DEBUG_BEGIN_STMT)
4407 continue;
4408 r = cxx_eval_constant_expression (ctx, stmt, false,
4409 non_constant_p, overflow_p,
4410 jump_target);
4411 if (*non_constant_p)
4412 break;
4413 if (returns (jump_target) || breaks (jump_target))
4414 break;
4416 if (*jump_target && jump_target == &local_target)
4418 /* We aren't communicating the jump to our caller, so give up. We don't
4419 need to support evaluation of jumps out of statement-exprs. */
4420 if (!ctx->quiet)
4421 error_at (cp_expr_loc_or_input_loc (r),
4422 "statement is not a constant expression");
4423 *non_constant_p = true;
4425 return r;
4428 /* Evaluate a LOOP_EXPR for side-effects. Handles break and return
4429 semantics; continue semantics are covered by cxx_eval_statement_list. */
4431 static tree
4432 cxx_eval_loop_expr (const constexpr_ctx *ctx, tree t,
4433 bool *non_constant_p, bool *overflow_p,
4434 tree *jump_target)
4436 constexpr_ctx new_ctx = *ctx;
4437 tree local_target;
4438 if (!jump_target)
4440 local_target = NULL_TREE;
4441 jump_target = &local_target;
4444 tree body, cond = NULL_TREE, expr = NULL_TREE;
4445 int count = 0;
4446 switch (TREE_CODE (t))
4448 case LOOP_EXPR:
4449 body = LOOP_EXPR_BODY (t);
4450 break;
4451 case DO_STMT:
4452 body = DO_BODY (t);
4453 cond = DO_COND (t);
4454 break;
4455 case WHILE_STMT:
4456 body = WHILE_BODY (t);
4457 cond = WHILE_COND (t);
4458 count = -1;
4459 break;
4460 case FOR_STMT:
4461 if (FOR_INIT_STMT (t))
4462 cxx_eval_constant_expression (ctx, FOR_INIT_STMT (t), /*lval*/false,
4463 non_constant_p, overflow_p, jump_target);
4464 if (*non_constant_p)
4465 return NULL_TREE;
4466 body = FOR_BODY (t);
4467 cond = FOR_COND (t);
4468 expr = FOR_EXPR (t);
4469 count = -1;
4470 break;
4471 default:
4472 gcc_unreachable ();
4474 auto_vec<tree, 10> save_exprs;
4475 new_ctx.save_exprs = &save_exprs;
4478 if (count != -1)
4480 if (body)
4481 cxx_eval_constant_expression (&new_ctx, body, /*lval*/false,
4482 non_constant_p, overflow_p,
4483 jump_target);
4484 if (breaks (jump_target))
4486 *jump_target = NULL_TREE;
4487 break;
4490 if (TREE_CODE (t) != LOOP_EXPR && continues (jump_target))
4491 *jump_target = NULL_TREE;
4493 if (expr)
4494 cxx_eval_constant_expression (&new_ctx, expr, /*lval*/false,
4495 non_constant_p, overflow_p,
4496 jump_target);
4499 if (cond)
4501 tree res
4502 = cxx_eval_constant_expression (&new_ctx, cond, /*lval*/false,
4503 non_constant_p, overflow_p,
4504 jump_target);
4505 if (res)
4507 if (verify_constant (res, ctx->quiet, non_constant_p,
4508 overflow_p))
4509 break;
4510 if (integer_zerop (res))
4511 break;
4513 else
4514 gcc_assert (*jump_target);
4517 /* Forget saved values of SAVE_EXPRs. */
4518 unsigned int i;
4519 tree save_expr;
4520 FOR_EACH_VEC_ELT (save_exprs, i, save_expr)
4521 ctx->global->values.remove (save_expr);
4522 save_exprs.truncate (0);
4524 if (++count >= constexpr_loop_limit)
4526 if (!ctx->quiet)
4527 error_at (cp_expr_loc_or_input_loc (t),
4528 "%<constexpr%> loop iteration count exceeds limit of %d "
4529 "(use %<-fconstexpr-loop-limit=%> to increase the limit)",
4530 constexpr_loop_limit);
4531 *non_constant_p = true;
4532 break;
4535 while (!returns (jump_target)
4536 && !breaks (jump_target)
4537 && !continues (jump_target)
4538 && (!switches (jump_target) || count == 0)
4539 && !*non_constant_p);
4541 /* Forget saved values of SAVE_EXPRs. */
4542 unsigned int i;
4543 tree save_expr;
4544 FOR_EACH_VEC_ELT (save_exprs, i, save_expr)
4545 ctx->global->values.remove (save_expr);
4547 return NULL_TREE;
4550 /* Evaluate a SWITCH_EXPR for side-effects. Handles switch and break jump
4551 semantics. */
4553 static tree
4554 cxx_eval_switch_expr (const constexpr_ctx *ctx, tree t,
4555 bool *non_constant_p, bool *overflow_p,
4556 tree *jump_target)
4558 tree cond
4559 = TREE_CODE (t) == SWITCH_STMT ? SWITCH_STMT_COND (t) : SWITCH_COND (t);
4560 cond = cxx_eval_constant_expression (ctx, cond, false,
4561 non_constant_p, overflow_p);
4562 VERIFY_CONSTANT (cond);
4563 *jump_target = cond;
4565 tree body
4566 = TREE_CODE (t) == SWITCH_STMT ? SWITCH_STMT_BODY (t) : SWITCH_BODY (t);
4567 constexpr_ctx new_ctx = *ctx;
4568 constexpr_switch_state css = css_default_not_seen;
4569 new_ctx.css_state = &css;
4570 cxx_eval_constant_expression (&new_ctx, body, false,
4571 non_constant_p, overflow_p, jump_target);
4572 if (switches (jump_target) && css == css_default_seen)
4574 /* If the SWITCH_EXPR body has default: label, process it once again,
4575 this time instructing label_matches to return true for default:
4576 label on switches (jump_target). */
4577 css = css_default_processing;
4578 cxx_eval_constant_expression (&new_ctx, body, false,
4579 non_constant_p, overflow_p, jump_target);
4581 if (breaks (jump_target) || switches (jump_target))
4582 *jump_target = NULL_TREE;
4583 return NULL_TREE;
4586 /* Find the object of TYPE under initialization in CTX. */
4588 static tree
4589 lookup_placeholder (const constexpr_ctx *ctx, bool lval, tree type)
4591 if (!ctx)
4592 return NULL_TREE;
4594 /* We could use ctx->object unconditionally, but using ctx->ctor when we
4595 can is a minor optimization. */
4596 if (!lval && ctx->ctor && same_type_p (TREE_TYPE (ctx->ctor), type))
4597 return ctx->ctor;
4599 if (!ctx->object)
4600 return NULL_TREE;
4602 /* Since an object cannot have a field of its own type, we can search outward
4603 from ctx->object to find the unique containing object of TYPE. */
4604 tree ob = ctx->object;
4605 while (ob)
4607 if (same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (ob), type))
4608 break;
4609 if (handled_component_p (ob))
4610 ob = TREE_OPERAND (ob, 0);
4611 else
4612 ob = NULL_TREE;
4615 return ob;
4618 /* Complain about an attempt to evaluate inline assembly. */
4620 static void
4621 inline_asm_in_constexpr_error (location_t loc)
4623 auto_diagnostic_group d;
4624 error_at (loc, "inline assembly is not a constant expression");
4625 inform (loc, "only unevaluated inline assembly is allowed in a "
4626 "%<constexpr%> function in C++2a");
4629 /* Attempt to reduce the expression T to a constant value.
4630 On failure, issue diagnostic and return error_mark_node. */
4631 /* FIXME unify with c_fully_fold */
4632 /* FIXME overflow_p is too global */
4634 static tree
4635 cxx_eval_constant_expression (const constexpr_ctx *ctx, tree t,
4636 bool lval,
4637 bool *non_constant_p, bool *overflow_p,
4638 tree *jump_target /* = NULL */)
4640 if (jump_target && *jump_target)
4642 /* If we are jumping, ignore all statements/expressions except those
4643 that could have LABEL_EXPR or CASE_LABEL_EXPR in their bodies. */
4644 switch (TREE_CODE (t))
4646 case BIND_EXPR:
4647 case STATEMENT_LIST:
4648 case LOOP_EXPR:
4649 case COND_EXPR:
4650 case IF_STMT:
4651 case DO_STMT:
4652 case WHILE_STMT:
4653 case FOR_STMT:
4654 break;
4655 case LABEL_EXPR:
4656 case CASE_LABEL_EXPR:
4657 if (label_matches (ctx, jump_target, t))
4658 /* Found it. */
4659 *jump_target = NULL_TREE;
4660 return NULL_TREE;
4661 default:
4662 return NULL_TREE;
4665 if (error_operand_p (t))
4667 *non_constant_p = true;
4668 return t;
4671 STRIP_ANY_LOCATION_WRAPPER (t);
4673 if (CONSTANT_CLASS_P (t))
4675 if (TREE_OVERFLOW (t))
4677 if (!ctx->quiet)
4678 permerror (input_location, "overflow in constant expression");
4679 if (!flag_permissive || ctx->quiet)
4680 *overflow_p = true;
4683 if (TREE_CODE (t) == INTEGER_CST
4684 && TYPE_PTR_P (TREE_TYPE (t))
4685 && !integer_zerop (t))
4687 if (!ctx->quiet)
4688 error ("value %qE of type %qT is not a constant expression",
4689 t, TREE_TYPE (t));
4690 *non_constant_p = true;
4693 return t;
4696 /* Avoid excessively long constexpr evaluations. */
4697 if (++ctx->global->constexpr_ops_count >= constexpr_ops_limit)
4699 if (!ctx->quiet)
4700 error_at (cp_expr_loc_or_input_loc (t),
4701 "%<constexpr%> evaluation operation count exceeds limit of "
4702 "%wd (use %<-fconstexpr-ops-limit=%> to increase the limit)",
4703 constexpr_ops_limit);
4704 ctx->global->constexpr_ops_count = INTTYPE_MINIMUM (HOST_WIDE_INT);
4705 *non_constant_p = true;
4706 return t;
4709 constexpr_ctx new_ctx;
4710 tree r = t;
4712 tree_code tcode = TREE_CODE (t);
4713 switch (tcode)
4715 case RESULT_DECL:
4716 if (lval)
4717 return t;
4718 /* We ask for an rvalue for the RESULT_DECL when indirecting
4719 through an invisible reference, or in named return value
4720 optimization. */
4721 if (tree *p = ctx->global->values.get (t))
4722 return *p;
4723 else
4725 if (!ctx->quiet)
4726 error ("%qE is not a constant expression", t);
4727 *non_constant_p = true;
4729 break;
4731 case VAR_DECL:
4732 if (DECL_HAS_VALUE_EXPR_P (t))
4734 if (is_normal_capture_proxy (t)
4735 && current_function_decl == DECL_CONTEXT (t))
4737 /* Function parms aren't constexpr within the function
4738 definition, so don't try to look at the closure. But if the
4739 captured variable is constant, try to evaluate it directly. */
4740 r = DECL_CAPTURED_VARIABLE (t);
4741 tree type = TREE_TYPE (t);
4742 if (TYPE_REF_P (type) != TYPE_REF_P (TREE_TYPE (r)))
4744 /* Adjust r to match the reference-ness of t. */
4745 if (TYPE_REF_P (type))
4746 r = build_address (r);
4747 else
4748 r = convert_from_reference (r);
4751 else
4752 r = DECL_VALUE_EXPR (t);
4753 return cxx_eval_constant_expression (ctx, r, lval, non_constant_p,
4754 overflow_p);
4756 /* fall through */
4757 case CONST_DECL:
4758 /* We used to not check lval for CONST_DECL, but darwin.c uses
4759 CONST_DECL for aggregate constants. */
4760 if (lval)
4761 return t;
4762 if (COMPLETE_TYPE_P (TREE_TYPE (t))
4763 && is_really_empty_class (TREE_TYPE (t), /*ignore_vptr*/false))
4765 /* If the class is empty, we aren't actually loading anything. */
4766 r = build_constructor (TREE_TYPE (t), NULL);
4767 TREE_CONSTANT (r) = true;
4769 else if (ctx->strict)
4770 r = decl_really_constant_value (t);
4771 else
4772 r = decl_constant_value (t);
4773 if (TREE_CODE (r) == TARGET_EXPR
4774 && TREE_CODE (TARGET_EXPR_INITIAL (r)) == CONSTRUCTOR)
4775 r = TARGET_EXPR_INITIAL (r);
4776 if (VAR_P (r))
4777 if (tree *p = ctx->global->values.get (r))
4778 if (*p != NULL_TREE)
4779 r = *p;
4780 if (DECL_P (r))
4782 if (!ctx->quiet)
4783 non_const_var_error (r);
4784 *non_constant_p = true;
4786 break;
4788 case DEBUG_BEGIN_STMT:
4789 /* ??? It might be nice to retain this information somehow, so
4790 as to be able to step into a constexpr function call. */
4791 /* Fall through. */
4793 case FUNCTION_DECL:
4794 case TEMPLATE_DECL:
4795 case LABEL_DECL:
4796 case LABEL_EXPR:
4797 case CASE_LABEL_EXPR:
4798 case PREDICT_EXPR:
4799 return t;
4801 case PARM_DECL:
4802 if (lval && !TYPE_REF_P (TREE_TYPE (t)))
4803 /* glvalue use. */;
4804 else if (tree *p = ctx->global->values.get (r))
4805 r = *p;
4806 else if (lval)
4807 /* Defer in case this is only used for its type. */;
4808 else if (TYPE_REF_P (TREE_TYPE (t)))
4809 /* Defer, there's no lvalue->rvalue conversion. */;
4810 else if (COMPLETE_TYPE_P (TREE_TYPE (t))
4811 && is_really_empty_class (TREE_TYPE (t), /*ignore_vptr*/false))
4813 /* If the class is empty, we aren't actually loading anything. */
4814 r = build_constructor (TREE_TYPE (t), NULL);
4815 TREE_CONSTANT (r) = true;
4817 else
4819 if (!ctx->quiet)
4820 error ("%qE is not a constant expression", t);
4821 *non_constant_p = true;
4823 break;
4825 case CALL_EXPR:
4826 case AGGR_INIT_EXPR:
4827 r = cxx_eval_call_expression (ctx, t, lval,
4828 non_constant_p, overflow_p);
4829 break;
4831 case DECL_EXPR:
4833 r = DECL_EXPR_DECL (t);
4834 if (TREE_CODE (r) == USING_DECL)
4836 r = void_node;
4837 break;
4839 if (AGGREGATE_TYPE_P (TREE_TYPE (r))
4840 || VECTOR_TYPE_P (TREE_TYPE (r)))
4842 new_ctx = *ctx;
4843 new_ctx.object = r;
4844 new_ctx.ctor = build_constructor (TREE_TYPE (r), NULL);
4845 CONSTRUCTOR_NO_CLEARING (new_ctx.ctor) = true;
4846 ctx->global->values.put (r, new_ctx.ctor);
4847 ctx = &new_ctx;
4850 if (tree init = DECL_INITIAL (r))
4852 init = cxx_eval_constant_expression (ctx, init,
4853 false,
4854 non_constant_p, overflow_p);
4855 /* Don't share a CONSTRUCTOR that might be changed. */
4856 init = unshare_constructor (init);
4857 /* Remember that a constant object's constructor has already
4858 run. */
4859 if (CLASS_TYPE_P (TREE_TYPE (r))
4860 && CP_TYPE_CONST_P (TREE_TYPE (r)))
4861 TREE_READONLY (init) = true;
4862 ctx->global->values.put (r, init);
4864 else if (ctx == &new_ctx)
4865 /* We gave it a CONSTRUCTOR above. */;
4866 else
4867 ctx->global->values.put (r, NULL_TREE);
4869 break;
4871 case TARGET_EXPR:
4872 if (!literal_type_p (TREE_TYPE (t)))
4874 if (!ctx->quiet)
4876 auto_diagnostic_group d;
4877 error ("temporary of non-literal type %qT in a "
4878 "constant expression", TREE_TYPE (t));
4879 explain_non_literal_class (TREE_TYPE (t));
4881 *non_constant_p = true;
4882 break;
4884 if ((AGGREGATE_TYPE_P (TREE_TYPE (t)) || VECTOR_TYPE_P (TREE_TYPE (t))))
4886 /* We're being expanded without an explicit target, so start
4887 initializing a new object; expansion with an explicit target
4888 strips the TARGET_EXPR before we get here. */
4889 new_ctx = *ctx;
4890 new_ctx.ctor = build_constructor (TREE_TYPE (t), NULL);
4891 CONSTRUCTOR_NO_CLEARING (new_ctx.ctor) = true;
4892 new_ctx.object = TARGET_EXPR_SLOT (t);
4893 ctx->global->values.put (new_ctx.object, new_ctx.ctor);
4894 ctx = &new_ctx;
4896 /* Pass false for 'lval' because this indicates
4897 initialization of a temporary. */
4898 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 1),
4899 false,
4900 non_constant_p, overflow_p);
4901 if (!*non_constant_p)
4902 /* Adjust the type of the result to the type of the temporary. */
4903 r = adjust_temp_type (TREE_TYPE (t), r);
4904 if (lval)
4906 tree slot = TARGET_EXPR_SLOT (t);
4907 r = unshare_constructor (r);
4908 ctx->global->values.put (slot, r);
4909 return slot;
4911 break;
4913 case INIT_EXPR:
4914 case MODIFY_EXPR:
4915 gcc_assert (jump_target == NULL || *jump_target == NULL_TREE);
4916 r = cxx_eval_store_expression (ctx, t, lval,
4917 non_constant_p, overflow_p);
4918 break;
4920 case SCOPE_REF:
4921 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 1),
4922 lval,
4923 non_constant_p, overflow_p);
4924 break;
4926 case RETURN_EXPR:
4927 if (TREE_OPERAND (t, 0) != NULL_TREE)
4928 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0),
4929 lval,
4930 non_constant_p, overflow_p);
4931 /* FALLTHRU */
4932 case BREAK_STMT:
4933 case CONTINUE_STMT:
4934 if (jump_target)
4935 *jump_target = t;
4936 else
4938 /* Can happen with ({ return true; }) && false; passed to
4939 maybe_constant_value. There is nothing to jump over in this
4940 case, and the bug will be diagnosed later. */
4941 gcc_assert (ctx->quiet);
4942 *non_constant_p = true;
4944 break;
4946 case SAVE_EXPR:
4947 /* Avoid evaluating a SAVE_EXPR more than once. */
4948 if (tree *p = ctx->global->values.get (t))
4949 r = *p;
4950 else
4952 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0), false,
4953 non_constant_p, overflow_p);
4954 ctx->global->values.put (t, r);
4955 if (ctx->save_exprs)
4956 ctx->save_exprs->safe_push (t);
4958 break;
4960 case NON_LVALUE_EXPR:
4961 case TRY_CATCH_EXPR:
4962 case TRY_BLOCK:
4963 case CLEANUP_POINT_EXPR:
4964 case MUST_NOT_THROW_EXPR:
4965 case EXPR_STMT:
4966 case EH_SPEC_BLOCK:
4967 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0),
4968 lval,
4969 non_constant_p, overflow_p,
4970 jump_target);
4971 break;
4973 case TRY_FINALLY_EXPR:
4974 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0), lval,
4975 non_constant_p, overflow_p,
4976 jump_target);
4977 if (!*non_constant_p)
4978 /* Also evaluate the cleanup. */
4979 cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 1), true,
4980 non_constant_p, overflow_p,
4981 jump_target);
4982 break;
4984 case CLEANUP_STMT:
4986 tree initial_jump_target = jump_target ? *jump_target : NULL_TREE;
4987 r = cxx_eval_constant_expression (ctx, CLEANUP_BODY (t), lval,
4988 non_constant_p, overflow_p,
4989 jump_target);
4990 if (!CLEANUP_EH_ONLY (t) && !*non_constant_p)
4991 /* Also evaluate the cleanup. If we weren't skipping at the
4992 start of the CLEANUP_BODY, change jump_target temporarily
4993 to &initial_jump_target, so that even a return or break or
4994 continue in the body doesn't skip the cleanup. */
4995 cxx_eval_constant_expression (ctx, CLEANUP_EXPR (t), true,
4996 non_constant_p, overflow_p,
4997 jump_target ? &initial_jump_target
4998 : NULL);
5000 break;
5002 /* These differ from cxx_eval_unary_expression in that this doesn't
5003 check for a constant operand or result; an address can be
5004 constant without its operand being, and vice versa. */
5005 case MEM_REF:
5006 case INDIRECT_REF:
5007 r = cxx_eval_indirect_ref (ctx, t, lval,
5008 non_constant_p, overflow_p);
5009 break;
5011 case ADDR_EXPR:
5013 tree oldop = TREE_OPERAND (t, 0);
5014 tree op = cxx_eval_constant_expression (ctx, oldop,
5015 /*lval*/true,
5016 non_constant_p, overflow_p);
5017 /* Don't VERIFY_CONSTANT here. */
5018 if (*non_constant_p)
5019 return t;
5020 gcc_checking_assert (TREE_CODE (op) != CONSTRUCTOR);
5021 /* This function does more aggressive folding than fold itself. */
5022 r = build_fold_addr_expr_with_type (op, TREE_TYPE (t));
5023 if (TREE_CODE (r) == ADDR_EXPR && TREE_OPERAND (r, 0) == oldop)
5025 ggc_free (r);
5026 return t;
5028 break;
5031 case REALPART_EXPR:
5032 case IMAGPART_EXPR:
5033 if (lval)
5035 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0), lval,
5036 non_constant_p, overflow_p);
5037 if (r == error_mark_node)
5039 else if (r == TREE_OPERAND (t, 0))
5040 r = t;
5041 else
5042 r = fold_build1 (TREE_CODE (t), TREE_TYPE (t), r);
5043 break;
5045 /* FALLTHRU */
5046 case CONJ_EXPR:
5047 case FIX_TRUNC_EXPR:
5048 case FLOAT_EXPR:
5049 case NEGATE_EXPR:
5050 case ABS_EXPR:
5051 case ABSU_EXPR:
5052 case BIT_NOT_EXPR:
5053 case TRUTH_NOT_EXPR:
5054 case FIXED_CONVERT_EXPR:
5055 r = cxx_eval_unary_expression (ctx, t, lval,
5056 non_constant_p, overflow_p);
5057 break;
5059 case SIZEOF_EXPR:
5060 r = fold_sizeof_expr (t);
5061 /* In a template, fold_sizeof_expr may merely create a new SIZEOF_EXPR,
5062 which could lead to an infinite recursion. */
5063 if (TREE_CODE (r) != SIZEOF_EXPR)
5064 r = cxx_eval_constant_expression (ctx, r, lval,
5065 non_constant_p, overflow_p,
5066 jump_target);
5067 else
5069 *non_constant_p = true;
5070 gcc_assert (ctx->quiet);
5073 break;
5075 case COMPOUND_EXPR:
5077 /* check_return_expr sometimes wraps a TARGET_EXPR in a
5078 COMPOUND_EXPR; don't get confused. Also handle EMPTY_CLASS_EXPR
5079 introduced by build_call_a. */
5080 tree op0 = TREE_OPERAND (t, 0);
5081 tree op1 = TREE_OPERAND (t, 1);
5082 STRIP_NOPS (op1);
5083 if ((TREE_CODE (op0) == TARGET_EXPR && op1 == TARGET_EXPR_SLOT (op0))
5084 || TREE_CODE (op1) == EMPTY_CLASS_EXPR)
5085 r = cxx_eval_constant_expression (ctx, op0,
5086 lval, non_constant_p, overflow_p,
5087 jump_target);
5088 else
5090 /* Check that the LHS is constant and then discard it. */
5091 cxx_eval_constant_expression (ctx, op0,
5092 true, non_constant_p, overflow_p,
5093 jump_target);
5094 if (*non_constant_p)
5095 return t;
5096 op1 = TREE_OPERAND (t, 1);
5097 r = cxx_eval_constant_expression (ctx, op1,
5098 lval, non_constant_p, overflow_p,
5099 jump_target);
5102 break;
5104 case POINTER_PLUS_EXPR:
5105 case POINTER_DIFF_EXPR:
5106 case PLUS_EXPR:
5107 case MINUS_EXPR:
5108 case MULT_EXPR:
5109 case TRUNC_DIV_EXPR:
5110 case CEIL_DIV_EXPR:
5111 case FLOOR_DIV_EXPR:
5112 case ROUND_DIV_EXPR:
5113 case TRUNC_MOD_EXPR:
5114 case CEIL_MOD_EXPR:
5115 case ROUND_MOD_EXPR:
5116 case RDIV_EXPR:
5117 case EXACT_DIV_EXPR:
5118 case MIN_EXPR:
5119 case MAX_EXPR:
5120 case LSHIFT_EXPR:
5121 case RSHIFT_EXPR:
5122 case BIT_IOR_EXPR:
5123 case BIT_XOR_EXPR:
5124 case BIT_AND_EXPR:
5125 case TRUTH_XOR_EXPR:
5126 case LT_EXPR:
5127 case LE_EXPR:
5128 case GT_EXPR:
5129 case GE_EXPR:
5130 case EQ_EXPR:
5131 case NE_EXPR:
5132 case UNORDERED_EXPR:
5133 case ORDERED_EXPR:
5134 case UNLT_EXPR:
5135 case UNLE_EXPR:
5136 case UNGT_EXPR:
5137 case UNGE_EXPR:
5138 case UNEQ_EXPR:
5139 case LTGT_EXPR:
5140 case RANGE_EXPR:
5141 case COMPLEX_EXPR:
5142 r = cxx_eval_binary_expression (ctx, t, lval,
5143 non_constant_p, overflow_p);
5144 break;
5146 /* fold can introduce non-IF versions of these; still treat them as
5147 short-circuiting. */
5148 case TRUTH_AND_EXPR:
5149 case TRUTH_ANDIF_EXPR:
5150 r = cxx_eval_logical_expression (ctx, t, boolean_false_node,
5151 boolean_true_node,
5152 lval,
5153 non_constant_p, overflow_p);
5154 break;
5156 case TRUTH_OR_EXPR:
5157 case TRUTH_ORIF_EXPR:
5158 r = cxx_eval_logical_expression (ctx, t, boolean_true_node,
5159 boolean_false_node,
5160 lval,
5161 non_constant_p, overflow_p);
5162 break;
5164 case ARRAY_REF:
5165 r = cxx_eval_array_reference (ctx, t, lval,
5166 non_constant_p, overflow_p);
5167 break;
5169 case COMPONENT_REF:
5170 if (is_overloaded_fn (t))
5172 /* We can only get here in checking mode via
5173 build_non_dependent_expr, because any expression that
5174 calls or takes the address of the function will have
5175 pulled a FUNCTION_DECL out of the COMPONENT_REF. */
5176 gcc_checking_assert (ctx->quiet || errorcount);
5177 *non_constant_p = true;
5178 return t;
5180 r = cxx_eval_component_reference (ctx, t, lval,
5181 non_constant_p, overflow_p);
5182 break;
5184 case BIT_FIELD_REF:
5185 r = cxx_eval_bit_field_ref (ctx, t, lval,
5186 non_constant_p, overflow_p);
5187 break;
5189 case COND_EXPR:
5190 case IF_STMT:
5191 if (jump_target && *jump_target)
5193 tree orig_jump = *jump_target;
5194 tree arg = ((TREE_CODE (t) != IF_STMT || TREE_OPERAND (t, 1))
5195 ? TREE_OPERAND (t, 1) : void_node);
5196 /* When jumping to a label, the label might be either in the
5197 then or else blocks, so process then block first in skipping
5198 mode first, and if we are still in the skipping mode at its end,
5199 process the else block too. */
5200 r = cxx_eval_constant_expression (ctx, arg, lval, non_constant_p,
5201 overflow_p, jump_target);
5202 /* It's possible that we found the label in the then block. But
5203 it could have been followed by another jumping statement, e.g.
5204 say we're looking for case 1:
5205 if (cond)
5207 // skipped statements
5208 case 1:; // clears up *jump_target
5209 return 1; // and sets it to a RETURN_EXPR
5211 else { ... }
5212 in which case we need not go looking to the else block.
5213 (goto is not allowed in a constexpr function.) */
5214 if (*jump_target == orig_jump)
5216 arg = ((TREE_CODE (t) != IF_STMT || TREE_OPERAND (t, 2))
5217 ? TREE_OPERAND (t, 2) : void_node);
5218 r = cxx_eval_constant_expression (ctx, arg, lval, non_constant_p,
5219 overflow_p, jump_target);
5221 break;
5223 r = cxx_eval_conditional_expression (ctx, t, lval,
5224 non_constant_p, overflow_p,
5225 jump_target);
5226 break;
5227 case VEC_COND_EXPR:
5228 r = cxx_eval_vector_conditional_expression (ctx, t, non_constant_p,
5229 overflow_p);
5230 break;
5232 case CONSTRUCTOR:
5233 if (TREE_CONSTANT (t) && reduced_constant_expression_p (t))
5235 /* Don't re-process a constant CONSTRUCTOR, but do fold it to
5236 VECTOR_CST if applicable. */
5237 verify_constructor_flags (t);
5238 if (TREE_CONSTANT (t))
5239 return fold (t);
5241 r = cxx_eval_bare_aggregate (ctx, t, lval,
5242 non_constant_p, overflow_p);
5243 break;
5245 case VEC_INIT_EXPR:
5246 /* We can get this in a defaulted constructor for a class with a
5247 non-static data member of array type. Either the initializer will
5248 be NULL, meaning default-initialization, or it will be an lvalue
5249 or xvalue of the same type, meaning direct-initialization from the
5250 corresponding member. */
5251 r = cxx_eval_vec_init (ctx, t, lval,
5252 non_constant_p, overflow_p);
5253 break;
5255 case VEC_PERM_EXPR:
5256 r = cxx_eval_trinary_expression (ctx, t, lval,
5257 non_constant_p, overflow_p);
5258 break;
5260 case NOP_EXPR:
5261 if (REINTERPRET_CAST_P (t))
5263 if (!ctx->quiet)
5264 error_at (cp_expr_loc_or_input_loc (t),
5265 "%<reinterpret_cast%> is not a constant expression");
5266 *non_constant_p = true;
5267 return t;
5269 /* FALLTHROUGH. */
5270 case CONVERT_EXPR:
5271 case VIEW_CONVERT_EXPR:
5272 case UNARY_PLUS_EXPR:
5274 tree oldop = TREE_OPERAND (t, 0);
5276 tree op = cxx_eval_constant_expression (ctx, oldop,
5277 lval,
5278 non_constant_p, overflow_p);
5279 if (*non_constant_p)
5280 return t;
5281 tree type = TREE_TYPE (t);
5283 if (VOID_TYPE_P (type))
5284 return void_node;
5286 if (TREE_CODE (op) == PTRMEM_CST && !TYPE_PTRMEM_P (type))
5287 op = cplus_expand_constant (op);
5289 if (TREE_CODE (op) == PTRMEM_CST && tcode == NOP_EXPR)
5291 if (!same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (op))
5292 && !can_convert_qual (type, op))
5293 op = cplus_expand_constant (op);
5294 return cp_fold_convert (type, op);
5297 if (INDIRECT_TYPE_P (type) && TREE_CODE (op) == INTEGER_CST)
5299 if (integer_zerop (op))
5301 if (TYPE_REF_P (type))
5303 if (!ctx->quiet)
5304 error_at (cp_expr_loc_or_input_loc (t),
5305 "dereferencing a null pointer");
5306 *non_constant_p = true;
5307 return t;
5309 else if (TYPE_PTR_P (TREE_TYPE (op)))
5311 tree from = TREE_TYPE (op);
5313 if (!can_convert (type, from, tf_none))
5315 if (!ctx->quiet)
5316 error_at (cp_expr_loc_or_input_loc (t),
5317 "conversion of %qT null pointer to %qT "
5318 "is not a constant expression",
5319 from, type);
5320 *non_constant_p = true;
5321 return t;
5325 else
5327 /* This detects for example:
5328 reinterpret_cast<void*>(sizeof 0)
5330 if (!ctx->quiet)
5331 error_at (cp_expr_loc_or_input_loc (t),
5332 "%<reinterpret_cast<%T>(%E)%> is not "
5333 "a constant expression",
5334 type, op);
5335 *non_constant_p = true;
5336 return t;
5340 if (INDIRECT_TYPE_P (type)
5341 && TREE_CODE (op) == NOP_EXPR
5342 && TREE_TYPE (op) == ptr_type_node
5343 && TREE_CODE (TREE_OPERAND (op, 0)) == ADDR_EXPR
5344 && VAR_P (TREE_OPERAND (TREE_OPERAND (op, 0), 0))
5345 && DECL_NAME (TREE_OPERAND (TREE_OPERAND (op, 0),
5346 0)) == heap_uninit_identifier)
5348 tree var = TREE_OPERAND (TREE_OPERAND (op, 0), 0);
5349 tree var_size = TYPE_SIZE_UNIT (TREE_TYPE (var));
5350 tree elt_type = TREE_TYPE (type);
5351 tree cookie_size = NULL_TREE;
5352 if (TREE_CODE (elt_type) == RECORD_TYPE
5353 && TYPE_NAME (elt_type) == heap_identifier)
5355 tree fld1 = TYPE_FIELDS (elt_type);
5356 tree fld2 = DECL_CHAIN (fld1);
5357 elt_type = TREE_TYPE (TREE_TYPE (fld2));
5358 cookie_size = TYPE_SIZE_UNIT (TREE_TYPE (fld1));
5360 DECL_NAME (var) = heap_identifier;
5361 TREE_TYPE (var)
5362 = build_new_constexpr_heap_type (elt_type, cookie_size,
5363 var_size);
5364 TREE_TYPE (TREE_OPERAND (op, 0))
5365 = build_pointer_type (TREE_TYPE (var));
5368 if (op == oldop && tcode != UNARY_PLUS_EXPR)
5369 /* We didn't fold at the top so we could check for ptr-int
5370 conversion. */
5371 return fold (t);
5373 tree sop;
5375 /* Handle an array's bounds having been deduced after we built
5376 the wrapping expression. */
5377 if (same_type_ignoring_tlq_and_bounds_p (type, TREE_TYPE (op)))
5378 r = op;
5379 else if (sop = tree_strip_nop_conversions (op),
5380 sop != op && (same_type_ignoring_tlq_and_bounds_p
5381 (type, TREE_TYPE (sop))))
5382 r = sop;
5383 else if (tcode == UNARY_PLUS_EXPR)
5384 r = fold_convert (TREE_TYPE (t), op);
5385 else
5386 r = fold_build1 (tcode, type, op);
5388 /* Conversion of an out-of-range value has implementation-defined
5389 behavior; the language considers it different from arithmetic
5390 overflow, which is undefined. */
5391 if (TREE_OVERFLOW_P (r) && !TREE_OVERFLOW_P (op))
5392 TREE_OVERFLOW (r) = false;
5394 break;
5396 case EMPTY_CLASS_EXPR:
5397 /* This is good enough for a function argument that might not get
5398 used, and they can't do anything with it, so just return it. */
5399 return t;
5401 case STATEMENT_LIST:
5402 new_ctx = *ctx;
5403 new_ctx.ctor = new_ctx.object = NULL_TREE;
5404 return cxx_eval_statement_list (&new_ctx, t,
5405 non_constant_p, overflow_p, jump_target);
5407 case BIND_EXPR:
5408 return cxx_eval_constant_expression (ctx, BIND_EXPR_BODY (t),
5409 lval,
5410 non_constant_p, overflow_p,
5411 jump_target);
5413 case PREINCREMENT_EXPR:
5414 case POSTINCREMENT_EXPR:
5415 case PREDECREMENT_EXPR:
5416 case POSTDECREMENT_EXPR:
5417 return cxx_eval_increment_expression (ctx, t,
5418 lval, non_constant_p, overflow_p);
5420 case LAMBDA_EXPR:
5421 case NEW_EXPR:
5422 case VEC_NEW_EXPR:
5423 case DELETE_EXPR:
5424 case VEC_DELETE_EXPR:
5425 case THROW_EXPR:
5426 case MODOP_EXPR:
5427 /* GCC internal stuff. */
5428 case VA_ARG_EXPR:
5429 case NON_DEPENDENT_EXPR:
5430 case BASELINK:
5431 case OFFSET_REF:
5432 if (!ctx->quiet)
5433 error_at (cp_expr_loc_or_input_loc (t),
5434 "expression %qE is not a constant expression", t);
5435 *non_constant_p = true;
5436 break;
5438 case OBJ_TYPE_REF:
5440 /* Virtual function call. Let the constexpr machinery figure out
5441 the dynamic type. */
5442 int token = tree_to_shwi (OBJ_TYPE_REF_TOKEN (t));
5443 tree obj = OBJ_TYPE_REF_OBJECT (t);
5444 obj = cxx_eval_constant_expression (ctx, obj, lval, non_constant_p,
5445 overflow_p);
5446 /* We expect something in the form of &x.D.2103.D.2094; get x. */
5447 if (TREE_CODE (obj) != ADDR_EXPR
5448 || !DECL_P (get_base_address (TREE_OPERAND (obj, 0))))
5450 if (!ctx->quiet)
5451 error_at (cp_expr_loc_or_input_loc (t),
5452 "expression %qE is not a constant expression", t);
5453 *non_constant_p = true;
5454 return t;
5456 obj = TREE_OPERAND (obj, 0);
5457 while (TREE_CODE (obj) == COMPONENT_REF
5458 && DECL_FIELD_IS_BASE (TREE_OPERAND (obj, 1)))
5459 obj = TREE_OPERAND (obj, 0);
5460 tree objtype = TREE_TYPE (obj);
5461 /* Find the function decl in the virtual functions list. TOKEN is
5462 the DECL_VINDEX that says which function we're looking for. */
5463 tree virtuals = BINFO_VIRTUALS (TYPE_BINFO (objtype));
5464 if (TARGET_VTABLE_USES_DESCRIPTORS)
5465 token /= MAX (TARGET_VTABLE_USES_DESCRIPTORS, 1);
5466 r = TREE_VALUE (chain_index (token, virtuals));
5467 break;
5470 case PLACEHOLDER_EXPR:
5471 /* Use of the value or address of the current object. */
5472 if (tree ctor = lookup_placeholder (ctx, lval, TREE_TYPE (t)))
5473 return cxx_eval_constant_expression (ctx, ctor, lval,
5474 non_constant_p, overflow_p);
5475 /* A placeholder without a referent. We can get here when
5476 checking whether NSDMIs are noexcept, or in massage_init_elt;
5477 just say it's non-constant for now. */
5478 gcc_assert (ctx->quiet);
5479 *non_constant_p = true;
5480 break;
5482 case EXIT_EXPR:
5484 tree cond = TREE_OPERAND (t, 0);
5485 cond = cxx_eval_constant_expression (ctx, cond, /*lval*/false,
5486 non_constant_p, overflow_p);
5487 VERIFY_CONSTANT (cond);
5488 if (integer_nonzerop (cond))
5489 *jump_target = t;
5491 break;
5493 case GOTO_EXPR:
5494 *jump_target = TREE_OPERAND (t, 0);
5495 gcc_assert (breaks (jump_target) || continues (jump_target)
5496 /* Allow for jumping to a cdtor_label. */
5497 || returns (jump_target));
5498 break;
5500 case LOOP_EXPR:
5501 case DO_STMT:
5502 case WHILE_STMT:
5503 case FOR_STMT:
5504 cxx_eval_loop_expr (ctx, t,
5505 non_constant_p, overflow_p, jump_target);
5506 break;
5508 case SWITCH_EXPR:
5509 case SWITCH_STMT:
5510 cxx_eval_switch_expr (ctx, t,
5511 non_constant_p, overflow_p, jump_target);
5512 break;
5514 case REQUIRES_EXPR:
5515 /* It's possible to get a requires-expression in a constant
5516 expression. For example:
5518 template<typename T> concept bool C() {
5519 return requires (T t) { t; };
5522 template<typename T> requires !C<T>() void f(T);
5524 Normalization leaves f with the associated constraint
5525 '!requires (T t) { ... }' which is not transformed into
5526 a constraint. */
5527 if (!processing_template_decl)
5528 return satisfy_constraint_expression (t);
5529 else
5530 *non_constant_p = true;
5531 return t;
5533 case ANNOTATE_EXPR:
5534 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0),
5535 lval,
5536 non_constant_p, overflow_p,
5537 jump_target);
5538 break;
5540 case USING_STMT:
5541 r = void_node;
5542 break;
5544 case TEMPLATE_ID_EXPR:
5546 /* We can evaluate template-id that refers to a concept only if
5547 the template arguments are non-dependent. */
5548 if (!concept_definition_p (TREE_OPERAND (t, 0)))
5549 internal_error ("unexpected template-id %qE", t);
5551 if (!processing_template_decl)
5552 return satisfy_constraint_expression (t);
5553 else
5554 *non_constant_p = true;
5555 return t;
5558 case ASM_EXPR:
5559 if (!ctx->quiet)
5560 inline_asm_in_constexpr_error (cp_expr_loc_or_input_loc (t));
5561 *non_constant_p = true;
5562 return t;
5564 default:
5565 if (STATEMENT_CODE_P (TREE_CODE (t)))
5567 /* This function doesn't know how to deal with pre-genericize
5568 statements; this can only happen with statement-expressions,
5569 so for now just fail. */
5570 if (!ctx->quiet)
5571 error_at (EXPR_LOCATION (t),
5572 "statement is not a constant expression");
5574 else
5575 internal_error ("unexpected expression %qE of kind %s", t,
5576 get_tree_code_name (TREE_CODE (t)));
5577 *non_constant_p = true;
5578 break;
5581 if (r == error_mark_node)
5582 *non_constant_p = true;
5584 if (*non_constant_p)
5585 return t;
5586 else
5587 return r;
5590 /* P0859: A function is needed for constant evaluation if it is a constexpr
5591 function that is named by an expression ([basic.def.odr]) that is
5592 potentially constant evaluated.
5594 So we need to instantiate any constexpr functions mentioned by the
5595 expression even if the definition isn't needed for evaluating the
5596 expression. */
5598 static tree
5599 instantiate_cx_fn_r (tree *tp, int *walk_subtrees, void */*data*/)
5601 if (TREE_CODE (*tp) == FUNCTION_DECL
5602 && DECL_DECLARED_CONSTEXPR_P (*tp)
5603 && !DECL_INITIAL (*tp)
5604 && !trivial_fn_p (*tp)
5605 && DECL_TEMPLOID_INSTANTIATION (*tp))
5607 ++function_depth;
5608 instantiate_decl (*tp, /*defer_ok*/false, /*expl_inst*/false);
5609 --function_depth;
5611 else if (TREE_CODE (*tp) == CALL_EXPR
5612 || TREE_CODE (*tp) == AGGR_INIT_EXPR)
5614 if (EXPR_HAS_LOCATION (*tp))
5615 input_location = EXPR_LOCATION (*tp);
5618 if (!EXPR_P (*tp))
5619 *walk_subtrees = 0;
5621 return NULL_TREE;
5624 static void
5625 instantiate_constexpr_fns (tree t)
5627 location_t loc = input_location;
5628 cp_walk_tree_without_duplicates (&t, instantiate_cx_fn_r, NULL);
5629 input_location = loc;
5632 /* Look for heap variables in the expression *TP. */
5634 static tree
5635 find_heap_var_refs (tree *tp, int *walk_subtrees, void */*data*/)
5637 if (VAR_P (*tp)
5638 && (DECL_NAME (*tp) == heap_uninit_identifier
5639 || DECL_NAME (*tp) == heap_identifier
5640 || DECL_NAME (*tp) == heap_deleted_identifier))
5641 return *tp;
5643 if (TYPE_P (*tp))
5644 *walk_subtrees = 0;
5645 return NULL_TREE;
5648 /* ALLOW_NON_CONSTANT is false if T is required to be a constant expression.
5649 STRICT has the same sense as for constant_value_1: true if we only allow
5650 conforming C++ constant expressions, or false if we want a constant value
5651 even if it doesn't conform.
5652 MANIFESTLY_CONST_EVAL is true if T is manifestly const-evaluated as
5653 per P0595 even when ALLOW_NON_CONSTANT is true.
5654 CONSTEXPR_DTOR is true when evaluating the dtor of a constexpr variable.
5655 OBJECT must be non-NULL in that case. */
5657 static tree
5658 cxx_eval_outermost_constant_expr (tree t, bool allow_non_constant,
5659 bool strict = true,
5660 bool manifestly_const_eval = false,
5661 bool constexpr_dtor = false,
5662 tree object = NULL_TREE)
5664 auto_timevar time (TV_CONSTEXPR);
5666 bool non_constant_p = false;
5667 bool overflow_p = false;
5669 constexpr_global_ctx global_ctx;
5670 constexpr_ctx ctx = { &global_ctx, NULL, NULL, NULL, NULL, NULL,
5671 allow_non_constant, strict,
5672 manifestly_const_eval || !allow_non_constant };
5674 tree type = initialized_type (t);
5675 tree r = t;
5676 if (VOID_TYPE_P (type))
5678 if (constexpr_dtor)
5679 /* Used for destructors of array elements. */
5680 type = TREE_TYPE (object);
5681 else
5682 return t;
5684 if (AGGREGATE_TYPE_P (type) || VECTOR_TYPE_P (type))
5686 /* In C++14 an NSDMI can participate in aggregate initialization,
5687 and can refer to the address of the object being initialized, so
5688 we need to pass in the relevant VAR_DECL if we want to do the
5689 evaluation in a single pass. The evaluation will dynamically
5690 update ctx.values for the VAR_DECL. We use the same strategy
5691 for C++11 constexpr constructors that refer to the object being
5692 initialized. */
5693 if (constexpr_dtor)
5695 gcc_assert (object && VAR_P (object));
5696 gcc_assert (DECL_DECLARED_CONSTEXPR_P (object));
5697 gcc_assert (DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (object));
5698 ctx.ctor = unshare_expr (DECL_INITIAL (object));
5699 TREE_READONLY (ctx.ctor) = false;
5700 /* Temporarily force decl_really_constant_value to return false
5701 for it, we want to use ctx.ctor for the current value instead. */
5702 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (object) = false;
5704 else
5706 ctx.ctor = build_constructor (type, NULL);
5707 CONSTRUCTOR_NO_CLEARING (ctx.ctor) = true;
5709 if (!object)
5711 if (TREE_CODE (t) == TARGET_EXPR)
5712 object = TARGET_EXPR_SLOT (t);
5713 else if (TREE_CODE (t) == AGGR_INIT_EXPR)
5714 object = AGGR_INIT_EXPR_SLOT (t);
5716 ctx.object = object;
5717 if (object)
5718 gcc_assert (same_type_ignoring_top_level_qualifiers_p
5719 (type, TREE_TYPE (object)));
5720 if (object && DECL_P (object))
5721 global_ctx.values.put (object, ctx.ctor);
5722 if (TREE_CODE (r) == TARGET_EXPR)
5723 /* Avoid creating another CONSTRUCTOR when we expand the
5724 TARGET_EXPR. */
5725 r = TARGET_EXPR_INITIAL (r);
5728 instantiate_constexpr_fns (r);
5729 r = cxx_eval_constant_expression (&ctx, r,
5730 false, &non_constant_p, &overflow_p);
5732 if (!constexpr_dtor)
5733 verify_constant (r, allow_non_constant, &non_constant_p, &overflow_p);
5734 else
5735 DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (object) = true;
5737 /* Mutable logic is a bit tricky: we want to allow initialization of
5738 constexpr variables with mutable members, but we can't copy those
5739 members to another constexpr variable. */
5740 if (TREE_CODE (r) == CONSTRUCTOR && CONSTRUCTOR_MUTABLE_POISON (r))
5742 if (!allow_non_constant)
5743 error ("%qE is not a constant expression because it refers to "
5744 "mutable subobjects of %qT", t, type);
5745 non_constant_p = true;
5748 if (TREE_CODE (r) == CONSTRUCTOR && CONSTRUCTOR_NO_CLEARING (r))
5750 if (!allow_non_constant)
5751 error ("%qE is not a constant expression because it refers to "
5752 "an incompletely initialized variable", t);
5753 TREE_CONSTANT (r) = false;
5754 non_constant_p = true;
5757 if (!global_ctx.heap_vars.is_empty ())
5759 tree heap_var = cp_walk_tree_without_duplicates (&r, find_heap_var_refs,
5760 NULL);
5761 unsigned int i;
5762 if (heap_var)
5764 if (!allow_non_constant && !non_constant_p)
5765 error_at (DECL_SOURCE_LOCATION (heap_var),
5766 "%qE is not a constant expression because it refers to "
5767 "a result of %<operator new%>", t);
5768 r = t;
5769 non_constant_p = true;
5771 FOR_EACH_VEC_ELT (global_ctx.heap_vars, i, heap_var)
5772 if (DECL_NAME (heap_var) != heap_deleted_identifier)
5774 if (!allow_non_constant && !non_constant_p)
5775 error_at (DECL_SOURCE_LOCATION (heap_var),
5776 "%qE is not a constant expression because allocated "
5777 "storage has not been deallocated", t);
5778 r = t;
5779 non_constant_p = true;
5783 /* Technically we should check this for all subexpressions, but that
5784 runs into problems with our internal representation of pointer
5785 subtraction and the 5.19 rules are still in flux. */
5786 if (CONVERT_EXPR_CODE_P (TREE_CODE (r))
5787 && ARITHMETIC_TYPE_P (TREE_TYPE (r))
5788 && TREE_CODE (TREE_OPERAND (r, 0)) == ADDR_EXPR)
5790 if (!allow_non_constant)
5791 error ("conversion from pointer type %qT "
5792 "to arithmetic type %qT in a constant expression",
5793 TREE_TYPE (TREE_OPERAND (r, 0)), TREE_TYPE (r));
5794 non_constant_p = true;
5797 if (!non_constant_p && overflow_p)
5798 non_constant_p = true;
5800 /* Unshare the result unless it's a CONSTRUCTOR in which case it's already
5801 unshared. */
5802 bool should_unshare = true;
5803 if (r == t || TREE_CODE (r) == CONSTRUCTOR)
5804 should_unshare = false;
5806 if (non_constant_p && !allow_non_constant)
5807 return error_mark_node;
5808 else if (constexpr_dtor)
5809 return r;
5810 else if (non_constant_p && TREE_CONSTANT (r))
5812 /* If __builtin_is_constant_evaluated () was evaluated to true
5813 and the result is not a valid constant expression, we need to
5814 punt. */
5815 if (manifestly_const_eval)
5816 return cxx_eval_outermost_constant_expr (t, true, strict,
5817 false, false, object);
5818 /* This isn't actually constant, so unset TREE_CONSTANT.
5819 Don't clear TREE_CONSTANT on ADDR_EXPR, as the middle-end requires
5820 it to be set if it is invariant address, even when it is not
5821 a valid C++ constant expression. Wrap it with a NOP_EXPR
5822 instead. */
5823 if (EXPR_P (r) && TREE_CODE (r) != ADDR_EXPR)
5824 r = copy_node (r);
5825 else if (TREE_CODE (r) == CONSTRUCTOR)
5826 r = build1 (VIEW_CONVERT_EXPR, TREE_TYPE (r), r);
5827 else
5828 r = build_nop (TREE_TYPE (r), r);
5829 TREE_CONSTANT (r) = false;
5831 else if (non_constant_p)
5832 return t;
5834 if (should_unshare)
5835 r = unshare_expr (r);
5837 if (TREE_CODE (r) == CONSTRUCTOR && CLASS_TYPE_P (TREE_TYPE (r)))
5839 r = adjust_temp_type (type, r);
5840 if (TREE_CODE (t) == TARGET_EXPR
5841 && TARGET_EXPR_INITIAL (t) == r)
5842 return t;
5843 else if (TREE_CODE (t) != CONSTRUCTOR)
5845 r = get_target_expr_sfinae (r, tf_warning_or_error | tf_no_cleanup);
5846 TREE_CONSTANT (r) = true;
5850 return r;
5853 /* If T represents a constant expression returns its reduced value.
5854 Otherwise return error_mark_node. If T is dependent, then
5855 return NULL. */
5857 tree
5858 cxx_constant_value (tree t, tree decl)
5860 return cxx_eval_outermost_constant_expr (t, false, true, true, false, decl);
5863 /* Like cxx_constant_value, but used for evaluation of constexpr destructors
5864 of constexpr variables. The actual initializer of DECL is not modified. */
5866 void
5867 cxx_constant_dtor (tree t, tree decl)
5869 cxx_eval_outermost_constant_expr (t, false, true, true, true, decl);
5872 /* Helper routine for fold_simple function. Either return simplified
5873 expression T, otherwise NULL_TREE.
5874 In contrast to cp_fully_fold, and to maybe_constant_value, we try to fold
5875 even if we are within template-declaration. So be careful on call, as in
5876 such case types can be undefined. */
5878 static tree
5879 fold_simple_1 (tree t)
5881 tree op1;
5882 enum tree_code code = TREE_CODE (t);
5884 switch (code)
5886 case INTEGER_CST:
5887 case REAL_CST:
5888 case VECTOR_CST:
5889 case FIXED_CST:
5890 case COMPLEX_CST:
5891 return t;
5893 case SIZEOF_EXPR:
5894 return fold_sizeof_expr (t);
5896 case ABS_EXPR:
5897 case ABSU_EXPR:
5898 case CONJ_EXPR:
5899 case REALPART_EXPR:
5900 case IMAGPART_EXPR:
5901 case NEGATE_EXPR:
5902 case BIT_NOT_EXPR:
5903 case TRUTH_NOT_EXPR:
5904 case NOP_EXPR:
5905 case VIEW_CONVERT_EXPR:
5906 case CONVERT_EXPR:
5907 case FLOAT_EXPR:
5908 case FIX_TRUNC_EXPR:
5909 case FIXED_CONVERT_EXPR:
5910 case ADDR_SPACE_CONVERT_EXPR:
5912 op1 = TREE_OPERAND (t, 0);
5914 t = const_unop (code, TREE_TYPE (t), op1);
5915 if (!t)
5916 return NULL_TREE;
5918 if (CONVERT_EXPR_CODE_P (code)
5919 && TREE_OVERFLOW_P (t) && !TREE_OVERFLOW_P (op1))
5920 TREE_OVERFLOW (t) = false;
5921 return t;
5923 default:
5924 return NULL_TREE;
5928 /* If T is a simple constant expression, returns its simplified value.
5929 Otherwise returns T. In contrast to maybe_constant_value we
5930 simplify only few operations on constant-expressions, and we don't
5931 try to simplify constexpressions. */
5933 tree
5934 fold_simple (tree t)
5936 if (processing_template_decl)
5937 return t;
5939 tree r = fold_simple_1 (t);
5940 if (r)
5941 return r;
5943 return t;
5946 /* If T is a constant expression, returns its reduced value.
5947 Otherwise, if T does not have TREE_CONSTANT set, returns T.
5948 Otherwise, returns a version of T without TREE_CONSTANT.
5949 MANIFESTLY_CONST_EVAL is true if T is manifestly const-evaluated
5950 as per P0595. */
5952 static GTY((deletable)) hash_map<tree, tree> *cv_cache;
5954 tree
5955 maybe_constant_value (tree t, tree decl, bool manifestly_const_eval)
5957 tree r;
5959 if (!is_nondependent_constant_expression (t))
5961 if (TREE_OVERFLOW_P (t))
5963 t = build_nop (TREE_TYPE (t), t);
5964 TREE_CONSTANT (t) = false;
5966 return t;
5968 else if (CONSTANT_CLASS_P (t))
5969 /* No caching or evaluation needed. */
5970 return t;
5972 if (manifestly_const_eval)
5973 return cxx_eval_outermost_constant_expr (t, true, true, true, false, decl);
5975 if (cv_cache == NULL)
5976 cv_cache = hash_map<tree, tree>::create_ggc (101);
5977 if (tree *cached = cv_cache->get (t))
5978 return *cached;
5980 r = cxx_eval_outermost_constant_expr (t, true, true, false, false, decl);
5981 gcc_checking_assert (r == t
5982 || CONVERT_EXPR_P (t)
5983 || TREE_CODE (t) == VIEW_CONVERT_EXPR
5984 || (TREE_CONSTANT (t) && !TREE_CONSTANT (r))
5985 || !cp_tree_equal (r, t));
5986 cv_cache->put (t, r);
5987 return r;
5990 /* Dispose of the whole CV_CACHE. */
5992 static void
5993 clear_cv_cache (void)
5995 if (cv_cache != NULL)
5996 cv_cache->empty ();
5999 /* Dispose of the whole CV_CACHE, FOLD_CACHE, and satisfaction caches. */
6001 void
6002 clear_cv_and_fold_caches (bool sat /*= true*/)
6004 clear_cv_cache ();
6005 clear_fold_cache ();
6006 if (sat)
6007 clear_satisfaction_cache ();
6010 /* Internal function handling expressions in templates for
6011 fold_non_dependent_expr and fold_non_dependent_init.
6013 If we're in a template, but T isn't value dependent, simplify
6014 it. We're supposed to treat:
6016 template <typename T> void f(T[1 + 1]);
6017 template <typename T> void f(T[2]);
6019 as two declarations of the same function, for example. */
6021 static tree
6022 fold_non_dependent_expr_template (tree t, tsubst_flags_t complain,
6023 bool manifestly_const_eval)
6025 gcc_assert (processing_template_decl);
6027 if (is_nondependent_constant_expression (t))
6029 processing_template_decl_sentinel s;
6030 t = instantiate_non_dependent_expr_internal (t, complain);
6032 if (type_unknown_p (t) || BRACE_ENCLOSED_INITIALIZER_P (t))
6034 if (TREE_OVERFLOW_P (t))
6036 t = build_nop (TREE_TYPE (t), t);
6037 TREE_CONSTANT (t) = false;
6039 return t;
6042 tree r = cxx_eval_outermost_constant_expr (t, true, true,
6043 manifestly_const_eval,
6044 false, NULL_TREE);
6045 /* cp_tree_equal looks through NOPs, so allow them. */
6046 gcc_checking_assert (r == t
6047 || CONVERT_EXPR_P (t)
6048 || TREE_CODE (t) == VIEW_CONVERT_EXPR
6049 || (TREE_CONSTANT (t) && !TREE_CONSTANT (r))
6050 || !cp_tree_equal (r, t));
6051 return r;
6053 else if (TREE_OVERFLOW_P (t))
6055 t = build_nop (TREE_TYPE (t), t);
6056 TREE_CONSTANT (t) = false;
6059 return t;
6062 /* Like maybe_constant_value but first fully instantiate the argument.
6064 Note: this is equivalent to instantiate_non_dependent_expr_sfinae
6065 (t, complain) followed by maybe_constant_value but is more efficient,
6066 because it calls instantiation_dependent_expression_p and
6067 potential_constant_expression at most once.
6068 The manifestly_const_eval argument is passed to maybe_constant_value.
6070 Callers should generally pass their active complain, or if they are in a
6071 non-template, diagnosing context, they can use the default of
6072 tf_warning_or_error. Callers that might be within a template context, don't
6073 have a complain parameter, and aren't going to remember the result for long
6074 (e.g. null_ptr_cst_p), can pass tf_none and deal with error_mark_node
6075 appropriately. */
6077 tree
6078 fold_non_dependent_expr (tree t,
6079 tsubst_flags_t complain /* = tf_warning_or_error */,
6080 bool manifestly_const_eval /* = false */)
6082 if (t == NULL_TREE)
6083 return NULL_TREE;
6085 if (processing_template_decl)
6086 return fold_non_dependent_expr_template (t, complain,
6087 manifestly_const_eval);
6089 return maybe_constant_value (t, NULL_TREE, manifestly_const_eval);
6093 /* Like maybe_constant_init but first fully instantiate the argument. */
6095 tree
6096 fold_non_dependent_init (tree t,
6097 tsubst_flags_t complain /*=tf_warning_or_error*/,
6098 bool manifestly_const_eval /*=false*/)
6100 if (t == NULL_TREE)
6101 return NULL_TREE;
6103 if (processing_template_decl)
6105 t = fold_non_dependent_expr_template (t, complain,
6106 manifestly_const_eval);
6107 /* maybe_constant_init does this stripping, so do it here too. */
6108 if (TREE_CODE (t) == TARGET_EXPR)
6110 tree init = TARGET_EXPR_INITIAL (t);
6111 if (TREE_CODE (init) == CONSTRUCTOR)
6112 t = init;
6114 return t;
6117 return maybe_constant_init (t, NULL_TREE, manifestly_const_eval);
6120 /* Like maybe_constant_value, but returns a CONSTRUCTOR directly, rather
6121 than wrapped in a TARGET_EXPR.
6122 ALLOW_NON_CONSTANT is false if T is required to be a constant expression.
6123 MANIFESTLY_CONST_EVAL is true if T is manifestly const-evaluated as
6124 per P0595 even when ALLOW_NON_CONSTANT is true. */
6126 static tree
6127 maybe_constant_init_1 (tree t, tree decl, bool allow_non_constant,
6128 bool manifestly_const_eval)
6130 if (!t)
6131 return t;
6132 if (TREE_CODE (t) == EXPR_STMT)
6133 t = TREE_OPERAND (t, 0);
6134 if (TREE_CODE (t) == CONVERT_EXPR
6135 && VOID_TYPE_P (TREE_TYPE (t)))
6136 t = TREE_OPERAND (t, 0);
6137 if (TREE_CODE (t) == INIT_EXPR)
6138 t = TREE_OPERAND (t, 1);
6139 if (TREE_CODE (t) == TARGET_EXPR)
6140 t = TARGET_EXPR_INITIAL (t);
6141 if (!is_nondependent_static_init_expression (t))
6142 /* Don't try to evaluate it. */;
6143 else if (CONSTANT_CLASS_P (t) && allow_non_constant)
6144 /* No evaluation needed. */;
6145 else
6146 t = cxx_eval_outermost_constant_expr (t, allow_non_constant,
6147 /*strict*/false,
6148 manifestly_const_eval, false, decl);
6149 if (TREE_CODE (t) == TARGET_EXPR)
6151 tree init = TARGET_EXPR_INITIAL (t);
6152 if (TREE_CODE (init) == CONSTRUCTOR)
6153 t = init;
6155 return t;
6158 /* Wrapper for maybe_constant_init_1 which permits non constants. */
6160 tree
6161 maybe_constant_init (tree t, tree decl, bool manifestly_const_eval)
6163 return maybe_constant_init_1 (t, decl, true, manifestly_const_eval);
6166 /* Wrapper for maybe_constant_init_1 which does not permit non constants. */
6168 tree
6169 cxx_constant_init (tree t, tree decl)
6171 return maybe_constant_init_1 (t, decl, false, true);
6174 #if 0
6175 /* FIXME see ADDR_EXPR section in potential_constant_expression_1. */
6176 /* Return true if the object referred to by REF has automatic or thread
6177 local storage. */
6179 enum { ck_ok, ck_bad, ck_unknown };
6180 static int
6181 check_automatic_or_tls (tree ref)
6183 machine_mode mode;
6184 poly_int64 bitsize, bitpos;
6185 tree offset;
6186 int volatilep = 0, unsignedp = 0;
6187 tree decl = get_inner_reference (ref, &bitsize, &bitpos, &offset,
6188 &mode, &unsignedp, &volatilep, false);
6189 duration_kind dk;
6191 /* If there isn't a decl in the middle, we don't know the linkage here,
6192 and this isn't a constant expression anyway. */
6193 if (!DECL_P (decl))
6194 return ck_unknown;
6195 dk = decl_storage_duration (decl);
6196 return (dk == dk_auto || dk == dk_thread) ? ck_bad : ck_ok;
6198 #endif
6200 /* Data structure for passing data from potential_constant_expression_1
6201 to check_for_return_continue via cp_walk_tree. */
6202 struct check_for_return_continue_data {
6203 hash_set<tree> *pset;
6204 tree continue_stmt;
6207 /* Helper function for potential_constant_expression_1 SWITCH_STMT handling,
6208 called through cp_walk_tree. Return the first RETURN_EXPR found, or note
6209 the first CONTINUE_STMT if RETURN_EXPR is not found. */
6210 static tree
6211 check_for_return_continue (tree *tp, int *walk_subtrees, void *data)
6213 tree t = *tp, s;
6214 check_for_return_continue_data *d = (check_for_return_continue_data *) data;
6215 switch (TREE_CODE (t))
6217 case RETURN_EXPR:
6218 return t;
6220 case CONTINUE_STMT:
6221 if (d->continue_stmt == NULL_TREE)
6222 d->continue_stmt = t;
6223 break;
6225 #define RECUR(x) \
6226 if (tree r = cp_walk_tree (&x, check_for_return_continue, data, \
6227 d->pset)) \
6228 return r
6230 /* For loops, walk subtrees manually, so that continue stmts found
6231 inside of the bodies of the loops are ignored. */
6232 case DO_STMT:
6233 *walk_subtrees = 0;
6234 RECUR (DO_COND (t));
6235 s = d->continue_stmt;
6236 RECUR (DO_BODY (t));
6237 d->continue_stmt = s;
6238 break;
6240 case WHILE_STMT:
6241 *walk_subtrees = 0;
6242 RECUR (WHILE_COND (t));
6243 s = d->continue_stmt;
6244 RECUR (WHILE_BODY (t));
6245 d->continue_stmt = s;
6246 break;
6248 case FOR_STMT:
6249 *walk_subtrees = 0;
6250 RECUR (FOR_INIT_STMT (t));
6251 RECUR (FOR_COND (t));
6252 RECUR (FOR_EXPR (t));
6253 s = d->continue_stmt;
6254 RECUR (FOR_BODY (t));
6255 d->continue_stmt = s;
6256 break;
6258 case RANGE_FOR_STMT:
6259 *walk_subtrees = 0;
6260 RECUR (RANGE_FOR_EXPR (t));
6261 s = d->continue_stmt;
6262 RECUR (RANGE_FOR_BODY (t));
6263 d->continue_stmt = s;
6264 break;
6265 #undef RECUR
6267 case STATEMENT_LIST:
6268 case CONSTRUCTOR:
6269 break;
6271 default:
6272 if (!EXPR_P (t))
6273 *walk_subtrees = 0;
6274 break;
6277 return NULL_TREE;
6280 /* Return true if T denotes a potentially constant expression. Issue
6281 diagnostic as appropriate under control of FLAGS. If WANT_RVAL is true,
6282 an lvalue-rvalue conversion is implied. If NOW is true, we want to
6283 consider the expression in the current context, independent of constexpr
6284 substitution.
6286 C++0x [expr.const] used to say
6288 6 An expression is a potential constant expression if it is
6289 a constant expression where all occurrences of function
6290 parameters are replaced by arbitrary constant expressions
6291 of the appropriate type.
6293 2 A conditional expression is a constant expression unless it
6294 involves one of the following as a potentially evaluated
6295 subexpression (3.2), but subexpressions of logical AND (5.14),
6296 logical OR (5.15), and conditional (5.16) operations that are
6297 not evaluated are not considered. */
6299 static bool
6300 potential_constant_expression_1 (tree t, bool want_rval, bool strict, bool now,
6301 tsubst_flags_t flags, tree *jump_target)
6303 #define RECUR(T,RV) \
6304 potential_constant_expression_1 ((T), (RV), strict, now, flags, jump_target)
6306 enum { any = false, rval = true };
6307 int i;
6308 tree tmp;
6310 if (t == error_mark_node)
6311 return false;
6312 if (t == NULL_TREE)
6313 return true;
6314 location_t loc = cp_expr_loc_or_input_loc (t);
6316 if (*jump_target)
6317 /* If we are jumping, ignore everything. This is simpler than the
6318 cxx_eval_constant_expression handling because we only need to be
6319 conservatively correct, and we don't necessarily have a constant value
6320 available, so we don't bother with switch tracking. */
6321 return true;
6323 if (TREE_THIS_VOLATILE (t) && want_rval)
6325 if (flags & tf_error)
6326 error_at (loc, "lvalue-to-rvalue conversion of a volatile lvalue "
6327 "%qE with type %qT", t, TREE_TYPE (t));
6328 return false;
6330 if (CONSTANT_CLASS_P (t))
6331 return true;
6332 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_TYPED)
6333 && TREE_TYPE (t) == error_mark_node)
6334 return false;
6336 switch (TREE_CODE (t))
6338 case FUNCTION_DECL:
6339 case BASELINK:
6340 case TEMPLATE_DECL:
6341 case OVERLOAD:
6342 case TEMPLATE_ID_EXPR:
6343 case LABEL_DECL:
6344 case LABEL_EXPR:
6345 case CASE_LABEL_EXPR:
6346 case CONST_DECL:
6347 case SIZEOF_EXPR:
6348 case ALIGNOF_EXPR:
6349 case OFFSETOF_EXPR:
6350 case NOEXCEPT_EXPR:
6351 case TEMPLATE_PARM_INDEX:
6352 case TRAIT_EXPR:
6353 case IDENTIFIER_NODE:
6354 case USERDEF_LITERAL:
6355 /* We can see a FIELD_DECL in a pointer-to-member expression. */
6356 case FIELD_DECL:
6357 case RESULT_DECL:
6358 case USING_DECL:
6359 case USING_STMT:
6360 case PLACEHOLDER_EXPR:
6361 case REQUIRES_EXPR:
6362 case STATIC_ASSERT:
6363 case DEBUG_BEGIN_STMT:
6364 return true;
6366 case RETURN_EXPR:
6367 if (!RECUR (TREE_OPERAND (t, 0), any))
6368 return false;
6369 /* FALLTHROUGH */
6371 case BREAK_STMT:
6372 case CONTINUE_STMT:
6373 *jump_target = t;
6374 return true;
6376 case PARM_DECL:
6377 if (now)
6379 if (flags & tf_error)
6380 error ("%qE is not a constant expression", t);
6381 return false;
6383 return true;
6385 case AGGR_INIT_EXPR:
6386 case CALL_EXPR:
6387 /* -- an invocation of a function other than a constexpr function
6388 or a constexpr constructor. */
6390 tree fun = get_function_named_in_call (t);
6391 const int nargs = call_expr_nargs (t);
6392 i = 0;
6394 if (fun == NULL_TREE)
6396 /* Reset to allow the function to continue past the end
6397 of the block below. Otherwise return early. */
6398 bool bail = true;
6400 if (TREE_CODE (t) == CALL_EXPR
6401 && CALL_EXPR_FN (t) == NULL_TREE)
6402 switch (CALL_EXPR_IFN (t))
6404 /* These should be ignored, they are optimized away from
6405 constexpr functions. */
6406 case IFN_UBSAN_NULL:
6407 case IFN_UBSAN_BOUNDS:
6408 case IFN_UBSAN_VPTR:
6409 case IFN_FALLTHROUGH:
6410 return true;
6412 case IFN_ADD_OVERFLOW:
6413 case IFN_SUB_OVERFLOW:
6414 case IFN_MUL_OVERFLOW:
6415 case IFN_LAUNDER:
6416 case IFN_VEC_CONVERT:
6417 bail = false;
6418 break;
6420 default:
6421 break;
6424 if (bail)
6426 /* fold_call_expr can't do anything with IFN calls. */
6427 if (flags & tf_error)
6428 error_at (loc, "call to internal function %qE", t);
6429 return false;
6433 if (fun && is_overloaded_fn (fun))
6435 if (TREE_CODE (fun) == FUNCTION_DECL)
6437 if (builtin_valid_in_constant_expr_p (fun))
6438 return true;
6439 if (!DECL_DECLARED_CONSTEXPR_P (fun)
6440 /* Allow any built-in function; if the expansion
6441 isn't constant, we'll deal with that then. */
6442 && !fndecl_built_in_p (fun)
6443 /* In C++2a, replaceable global allocation functions
6444 are constant expressions. */
6445 && !cxx_replaceable_global_alloc_fn (fun))
6447 if (flags & tf_error)
6449 error_at (loc, "call to non-%<constexpr%> function %qD",
6450 fun);
6451 explain_invalid_constexpr_fn (fun);
6453 return false;
6455 /* A call to a non-static member function takes the address
6456 of the object as the first argument. But in a constant
6457 expression the address will be folded away, so look
6458 through it now. */
6459 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fun)
6460 && !DECL_CONSTRUCTOR_P (fun))
6462 tree x = get_nth_callarg (t, 0);
6463 if (is_this_parameter (x))
6464 return true;
6465 /* Don't require an immediately constant value, as
6466 constexpr substitution might not use the value. */
6467 bool sub_now = false;
6468 if (!potential_constant_expression_1 (x, rval, strict,
6469 sub_now, flags,
6470 jump_target))
6471 return false;
6472 i = 1;
6475 else
6477 if (!RECUR (fun, true))
6478 return false;
6479 fun = get_first_fn (fun);
6481 /* Skip initial arguments to base constructors. */
6482 if (DECL_BASE_CONSTRUCTOR_P (fun))
6483 i = num_artificial_parms_for (fun);
6484 fun = DECL_ORIGIN (fun);
6486 else if (fun)
6488 if (RECUR (fun, rval))
6489 /* Might end up being a constant function pointer. */;
6490 else
6491 return false;
6493 for (; i < nargs; ++i)
6495 tree x = get_nth_callarg (t, i);
6496 /* In a template, reference arguments haven't been converted to
6497 REFERENCE_TYPE and we might not even know if the parameter
6498 is a reference, so accept lvalue constants too. */
6499 bool rv = processing_template_decl ? any : rval;
6500 /* Don't require an immediately constant value, as constexpr
6501 substitution might not use the value of the argument. */
6502 bool sub_now = false;
6503 if (!potential_constant_expression_1 (x, rv, strict,
6504 sub_now, flags, jump_target))
6505 return false;
6507 return true;
6510 case NON_LVALUE_EXPR:
6511 /* -- an lvalue-to-rvalue conversion (4.1) unless it is applied to
6512 -- an lvalue of integral type that refers to a non-volatile
6513 const variable or static data member initialized with
6514 constant expressions, or
6516 -- an lvalue of literal type that refers to non-volatile
6517 object defined with constexpr, or that refers to a
6518 sub-object of such an object; */
6519 return RECUR (TREE_OPERAND (t, 0), rval);
6521 case VAR_DECL:
6522 if (DECL_HAS_VALUE_EXPR_P (t))
6524 if (now && is_normal_capture_proxy (t))
6526 /* -- in a lambda-expression, a reference to this or to a
6527 variable with automatic storage duration defined outside that
6528 lambda-expression, where the reference would be an
6529 odr-use. */
6530 if (flags & tf_error)
6532 tree cap = DECL_CAPTURED_VARIABLE (t);
6533 error ("lambda capture of %qE is not a constant expression",
6534 cap);
6535 if (!want_rval && decl_constant_var_p (cap))
6536 inform (input_location, "because it is used as a glvalue");
6538 return false;
6540 return RECUR (DECL_VALUE_EXPR (t), rval);
6542 if (want_rval
6543 && !var_in_maybe_constexpr_fn (t)
6544 && !type_dependent_expression_p (t)
6545 && !decl_maybe_constant_var_p (t)
6546 && (strict
6547 || !CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (t))
6548 || (DECL_INITIAL (t)
6549 && !DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t)))
6550 && COMPLETE_TYPE_P (TREE_TYPE (t))
6551 && !is_really_empty_class (TREE_TYPE (t), /*ignore_vptr*/false))
6553 if (flags & tf_error)
6554 non_const_var_error (t);
6555 return false;
6557 return true;
6559 case NOP_EXPR:
6560 if (REINTERPRET_CAST_P (t))
6562 if (flags & tf_error)
6563 error_at (loc, "%<reinterpret_cast%> is not a constant expression");
6564 return false;
6566 /* FALLTHRU */
6567 case CONVERT_EXPR:
6568 case VIEW_CONVERT_EXPR:
6569 /* -- a reinterpret_cast. FIXME not implemented, and this rule
6570 may change to something more specific to type-punning (DR 1312). */
6572 tree from = TREE_OPERAND (t, 0);
6573 if (location_wrapper_p (t))
6574 return (RECUR (from, want_rval));
6575 if (INDIRECT_TYPE_P (TREE_TYPE (t)))
6577 STRIP_ANY_LOCATION_WRAPPER (from);
6578 if (TREE_CODE (from) == INTEGER_CST
6579 && !integer_zerop (from))
6581 if (flags & tf_error)
6582 error_at (loc,
6583 "%<reinterpret_cast%> from integer to pointer");
6584 return false;
6587 return (RECUR (from, TREE_CODE (t) != VIEW_CONVERT_EXPR));
6590 case ADDRESSOF_EXPR:
6591 /* This is like ADDR_EXPR, except it won't form pointer-to-member. */
6592 t = TREE_OPERAND (t, 0);
6593 goto handle_addr_expr;
6595 case ADDR_EXPR:
6596 /* -- a unary operator & that is applied to an lvalue that
6597 designates an object with thread or automatic storage
6598 duration; */
6599 t = TREE_OPERAND (t, 0);
6601 if (TREE_CODE (t) == OFFSET_REF && PTRMEM_OK_P (t))
6602 /* A pointer-to-member constant. */
6603 return true;
6605 handle_addr_expr:
6606 #if 0
6607 /* FIXME adjust when issue 1197 is fully resolved. For now don't do
6608 any checking here, as we might dereference the pointer later. If
6609 we remove this code, also remove check_automatic_or_tls. */
6610 i = check_automatic_or_tls (t);
6611 if (i == ck_ok)
6612 return true;
6613 if (i == ck_bad)
6615 if (flags & tf_error)
6616 error ("address-of an object %qE with thread local or "
6617 "automatic storage is not a constant expression", t);
6618 return false;
6620 #endif
6621 return RECUR (t, any);
6623 case REALPART_EXPR:
6624 case IMAGPART_EXPR:
6625 case COMPONENT_REF:
6626 case BIT_FIELD_REF:
6627 case ARROW_EXPR:
6628 case OFFSET_REF:
6629 /* -- a class member access unless its postfix-expression is
6630 of literal type or of pointer to literal type. */
6631 /* This test would be redundant, as it follows from the
6632 postfix-expression being a potential constant expression. */
6633 if (type_unknown_p (t))
6634 return true;
6635 return RECUR (TREE_OPERAND (t, 0), want_rval);
6637 case EXPR_PACK_EXPANSION:
6638 return RECUR (PACK_EXPANSION_PATTERN (t), want_rval);
6640 case INDIRECT_REF:
6642 tree x = TREE_OPERAND (t, 0);
6643 STRIP_NOPS (x);
6644 if (is_this_parameter (x) && !is_capture_proxy (x))
6646 if (!var_in_maybe_constexpr_fn (x))
6648 if (flags & tf_error)
6649 error_at (loc, "use of %<this%> in a constant expression");
6650 return false;
6652 return true;
6654 return RECUR (x, rval);
6657 case STATEMENT_LIST:
6659 tree_stmt_iterator i;
6660 for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
6662 if (!RECUR (tsi_stmt (i), any))
6663 return false;
6665 return true;
6667 break;
6669 case MODIFY_EXPR:
6670 if (cxx_dialect < cxx14)
6671 goto fail;
6672 if (!RECUR (TREE_OPERAND (t, 0), any))
6673 return false;
6674 /* Just ignore clobbers. */
6675 if (TREE_CLOBBER_P (TREE_OPERAND (t, 1)))
6676 return true;
6677 if (!RECUR (TREE_OPERAND (t, 1), rval))
6678 return false;
6679 return true;
6681 case MODOP_EXPR:
6682 if (cxx_dialect < cxx14)
6683 goto fail;
6684 if (!RECUR (TREE_OPERAND (t, 0), rval))
6685 return false;
6686 if (!RECUR (TREE_OPERAND (t, 2), rval))
6687 return false;
6688 return true;
6690 case DO_STMT:
6691 if (!RECUR (DO_COND (t), rval))
6692 return false;
6693 if (!RECUR (DO_BODY (t), any))
6694 return false;
6695 if (breaks (jump_target) || continues (jump_target))
6696 *jump_target = NULL_TREE;
6697 return true;
6699 case FOR_STMT:
6700 if (!RECUR (FOR_INIT_STMT (t), any))
6701 return false;
6702 tmp = FOR_COND (t);
6703 if (!RECUR (tmp, rval))
6704 return false;
6705 if (tmp)
6707 if (!processing_template_decl)
6708 tmp = cxx_eval_outermost_constant_expr (tmp, true);
6709 /* If we couldn't evaluate the condition, it might not ever be
6710 true. */
6711 if (!integer_onep (tmp))
6712 return true;
6714 if (!RECUR (FOR_EXPR (t), any))
6715 return false;
6716 if (!RECUR (FOR_BODY (t), any))
6717 return false;
6718 if (breaks (jump_target) || continues (jump_target))
6719 *jump_target = NULL_TREE;
6720 return true;
6722 case RANGE_FOR_STMT:
6723 if (!RECUR (RANGE_FOR_INIT_STMT (t), any))
6724 return false;
6725 if (!RECUR (RANGE_FOR_EXPR (t), any))
6726 return false;
6727 if (!RECUR (RANGE_FOR_BODY (t), any))
6728 return false;
6729 if (breaks (jump_target) || continues (jump_target))
6730 *jump_target = NULL_TREE;
6731 return true;
6733 case WHILE_STMT:
6734 tmp = WHILE_COND (t);
6735 if (!RECUR (tmp, rval))
6736 return false;
6737 if (!processing_template_decl)
6738 tmp = cxx_eval_outermost_constant_expr (tmp, true);
6739 /* If we couldn't evaluate the condition, it might not ever be true. */
6740 if (!integer_onep (tmp))
6741 return true;
6742 if (!RECUR (WHILE_BODY (t), any))
6743 return false;
6744 if (breaks (jump_target) || continues (jump_target))
6745 *jump_target = NULL_TREE;
6746 return true;
6748 case SWITCH_STMT:
6749 if (!RECUR (SWITCH_STMT_COND (t), rval))
6750 return false;
6751 /* FIXME we don't check SWITCH_STMT_BODY currently, because even
6752 unreachable labels would be checked and it is enough if there is
6753 a single switch cond value for which it is a valid constant
6754 expression. We need to check if there are any RETURN_EXPRs
6755 or CONTINUE_STMTs inside of the body though, as in that case
6756 we need to set *jump_target. */
6757 else
6759 hash_set<tree> pset;
6760 check_for_return_continue_data data = { &pset, NULL_TREE };
6761 if (tree ret_expr
6762 = cp_walk_tree (&SWITCH_STMT_BODY (t), check_for_return_continue,
6763 &data, &pset))
6764 /* The switch might return. */
6765 *jump_target = ret_expr;
6766 else if (data.continue_stmt)
6767 /* The switch can't return, but might continue. */
6768 *jump_target = data.continue_stmt;
6770 return true;
6772 case STMT_EXPR:
6773 return RECUR (STMT_EXPR_STMT (t), rval);
6775 case LAMBDA_EXPR:
6776 if (cxx_dialect >= cxx17)
6777 /* In C++17 lambdas can be constexpr, don't give up yet. */
6778 return true;
6779 else if (flags & tf_error)
6780 error_at (loc, "lambda-expression is not a constant expression "
6781 "before C++17");
6782 return false;
6784 case DYNAMIC_CAST_EXPR:
6785 case PSEUDO_DTOR_EXPR:
6786 case NEW_EXPR:
6787 case VEC_NEW_EXPR:
6788 case DELETE_EXPR:
6789 case VEC_DELETE_EXPR:
6790 case THROW_EXPR:
6791 case OMP_PARALLEL:
6792 case OMP_TASK:
6793 case OMP_FOR:
6794 case OMP_SIMD:
6795 case OMP_DISTRIBUTE:
6796 case OMP_TASKLOOP:
6797 case OMP_LOOP:
6798 case OMP_TEAMS:
6799 case OMP_TARGET_DATA:
6800 case OMP_TARGET:
6801 case OMP_SECTIONS:
6802 case OMP_ORDERED:
6803 case OMP_CRITICAL:
6804 case OMP_SINGLE:
6805 case OMP_SECTION:
6806 case OMP_MASTER:
6807 case OMP_TASKGROUP:
6808 case OMP_TARGET_UPDATE:
6809 case OMP_TARGET_ENTER_DATA:
6810 case OMP_TARGET_EXIT_DATA:
6811 case OMP_ATOMIC:
6812 case OMP_ATOMIC_READ:
6813 case OMP_ATOMIC_CAPTURE_OLD:
6814 case OMP_ATOMIC_CAPTURE_NEW:
6815 case OMP_DEPOBJ:
6816 case OACC_PARALLEL:
6817 case OACC_KERNELS:
6818 case OACC_DATA:
6819 case OACC_HOST_DATA:
6820 case OACC_LOOP:
6821 case OACC_CACHE:
6822 case OACC_DECLARE:
6823 case OACC_ENTER_DATA:
6824 case OACC_EXIT_DATA:
6825 case OACC_UPDATE:
6826 /* GCC internal stuff. */
6827 case VA_ARG_EXPR:
6828 case TRANSACTION_EXPR:
6829 case AT_ENCODE_EXPR:
6830 fail:
6831 if (flags & tf_error)
6832 error_at (loc, "expression %qE is not a constant expression", t);
6833 return false;
6835 case ASM_EXPR:
6836 if (flags & tf_error)
6837 inline_asm_in_constexpr_error (loc);
6838 return false;
6840 case OBJ_TYPE_REF:
6841 if (cxx_dialect >= cxx2a)
6842 /* In C++2a virtual calls can be constexpr, don't give up yet. */
6843 return true;
6844 else if (flags & tf_error)
6845 error_at (loc,
6846 "virtual functions cannot be %<constexpr%> before C++2a");
6847 return false;
6849 case TYPEID_EXPR:
6850 /* -- a typeid expression whose operand is of polymorphic
6851 class type; */
6853 tree e = TREE_OPERAND (t, 0);
6854 if (!TYPE_P (e) && !type_dependent_expression_p (e)
6855 && TYPE_POLYMORPHIC_P (TREE_TYPE (e)))
6857 if (flags & tf_error)
6858 error_at (loc, "%<typeid%> is not a constant expression "
6859 "because %qE is of polymorphic type", e);
6860 return false;
6862 return true;
6865 case POINTER_DIFF_EXPR:
6866 case MINUS_EXPR:
6867 want_rval = true;
6868 goto binary;
6870 case LT_EXPR:
6871 case LE_EXPR:
6872 case GT_EXPR:
6873 case GE_EXPR:
6874 case EQ_EXPR:
6875 case NE_EXPR:
6876 want_rval = true;
6877 goto binary;
6879 case PREINCREMENT_EXPR:
6880 case POSTINCREMENT_EXPR:
6881 case PREDECREMENT_EXPR:
6882 case POSTDECREMENT_EXPR:
6883 if (cxx_dialect < cxx14)
6884 goto fail;
6885 goto unary;
6887 case BIT_NOT_EXPR:
6888 /* A destructor. */
6889 if (TYPE_P (TREE_OPERAND (t, 0)))
6890 return true;
6891 /* fall through. */
6893 case CONJ_EXPR:
6894 case SAVE_EXPR:
6895 case FIX_TRUNC_EXPR:
6896 case FLOAT_EXPR:
6897 case NEGATE_EXPR:
6898 case ABS_EXPR:
6899 case ABSU_EXPR:
6900 case TRUTH_NOT_EXPR:
6901 case FIXED_CONVERT_EXPR:
6902 case UNARY_PLUS_EXPR:
6903 case UNARY_LEFT_FOLD_EXPR:
6904 case UNARY_RIGHT_FOLD_EXPR:
6905 unary:
6906 return RECUR (TREE_OPERAND (t, 0), rval);
6908 case CAST_EXPR:
6909 case CONST_CAST_EXPR:
6910 case STATIC_CAST_EXPR:
6911 case REINTERPRET_CAST_EXPR:
6912 case IMPLICIT_CONV_EXPR:
6913 if (cxx_dialect < cxx11
6914 && !dependent_type_p (TREE_TYPE (t))
6915 && !INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t)))
6916 /* In C++98, a conversion to non-integral type can't be part of a
6917 constant expression. */
6919 if (flags & tf_error)
6920 error_at (loc,
6921 "cast to non-integral type %qT in a constant expression",
6922 TREE_TYPE (t));
6923 return false;
6925 /* This might be a conversion from a class to a (potentially) literal
6926 type. Let's consider it potentially constant since the conversion
6927 might be a constexpr user-defined conversion. */
6928 else if (cxx_dialect >= cxx11
6929 && (dependent_type_p (TREE_TYPE (t))
6930 || !COMPLETE_TYPE_P (TREE_TYPE (t))
6931 || literal_type_p (TREE_TYPE (t)))
6932 && TREE_OPERAND (t, 0))
6934 tree type = TREE_TYPE (TREE_OPERAND (t, 0));
6935 /* If this is a dependent type, it could end up being a class
6936 with conversions. */
6937 if (type == NULL_TREE || WILDCARD_TYPE_P (type))
6938 return true;
6939 /* Or a non-dependent class which has conversions. */
6940 else if (CLASS_TYPE_P (type)
6941 && (TYPE_HAS_CONVERSION (type) || dependent_scope_p (type)))
6942 return true;
6945 return (RECUR (TREE_OPERAND (t, 0),
6946 !TYPE_REF_P (TREE_TYPE (t))));
6948 case BIND_EXPR:
6949 return RECUR (BIND_EXPR_BODY (t), want_rval);
6951 case CLEANUP_POINT_EXPR:
6952 case MUST_NOT_THROW_EXPR:
6953 case TRY_CATCH_EXPR:
6954 case TRY_BLOCK:
6955 case EH_SPEC_BLOCK:
6956 case EXPR_STMT:
6957 case PAREN_EXPR:
6958 case NON_DEPENDENT_EXPR:
6959 /* For convenience. */
6960 case LOOP_EXPR:
6961 case EXIT_EXPR:
6962 return RECUR (TREE_OPERAND (t, 0), want_rval);
6964 case DECL_EXPR:
6965 tmp = DECL_EXPR_DECL (t);
6966 if (VAR_P (tmp) && !DECL_ARTIFICIAL (tmp))
6968 if (TREE_STATIC (tmp))
6970 if (flags & tf_error)
6971 error_at (DECL_SOURCE_LOCATION (tmp), "%qD declared "
6972 "%<static%> in %<constexpr%> context", tmp);
6973 return false;
6975 else if (CP_DECL_THREAD_LOCAL_P (tmp))
6977 if (flags & tf_error)
6978 error_at (DECL_SOURCE_LOCATION (tmp), "%qD declared "
6979 "%<thread_local%> in %<constexpr%> context", tmp);
6980 return false;
6982 else if (!check_for_uninitialized_const_var
6983 (tmp, /*constexpr_context_p=*/true, flags))
6984 return false;
6986 return RECUR (tmp, want_rval);
6988 case TRY_FINALLY_EXPR:
6989 return (RECUR (TREE_OPERAND (t, 0), want_rval)
6990 && RECUR (TREE_OPERAND (t, 1), any));
6992 case SCOPE_REF:
6993 return RECUR (TREE_OPERAND (t, 1), want_rval);
6995 case TARGET_EXPR:
6996 if (!TARGET_EXPR_DIRECT_INIT_P (t)
6997 && !literal_type_p (TREE_TYPE (t)))
6999 if (flags & tf_error)
7001 auto_diagnostic_group d;
7002 error_at (loc, "temporary of non-literal type %qT in a "
7003 "constant expression", TREE_TYPE (t));
7004 explain_non_literal_class (TREE_TYPE (t));
7006 return false;
7008 /* FALLTHRU */
7009 case INIT_EXPR:
7010 return RECUR (TREE_OPERAND (t, 1), rval);
7012 case CONSTRUCTOR:
7014 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (t);
7015 constructor_elt *ce;
7016 for (i = 0; vec_safe_iterate (v, i, &ce); ++i)
7017 if (!RECUR (ce->value, want_rval))
7018 return false;
7019 return true;
7022 case TREE_LIST:
7024 gcc_assert (TREE_PURPOSE (t) == NULL_TREE
7025 || DECL_P (TREE_PURPOSE (t)));
7026 if (!RECUR (TREE_VALUE (t), want_rval))
7027 return false;
7028 if (TREE_CHAIN (t) == NULL_TREE)
7029 return true;
7030 return RECUR (TREE_CHAIN (t), want_rval);
7033 case TRUNC_DIV_EXPR:
7034 case CEIL_DIV_EXPR:
7035 case FLOOR_DIV_EXPR:
7036 case ROUND_DIV_EXPR:
7037 case TRUNC_MOD_EXPR:
7038 case CEIL_MOD_EXPR:
7039 case ROUND_MOD_EXPR:
7041 tree denom = TREE_OPERAND (t, 1);
7042 if (!RECUR (denom, rval))
7043 return false;
7044 /* We can't call cxx_eval_outermost_constant_expr on an expression
7045 that hasn't been through instantiate_non_dependent_expr yet. */
7046 if (!processing_template_decl)
7047 denom = cxx_eval_outermost_constant_expr (denom, true);
7048 if (integer_zerop (denom))
7050 if (flags & tf_error)
7051 error ("division by zero is not a constant expression");
7052 return false;
7054 else
7056 want_rval = true;
7057 return RECUR (TREE_OPERAND (t, 0), want_rval);
7061 case COMPOUND_EXPR:
7063 /* check_return_expr sometimes wraps a TARGET_EXPR in a
7064 COMPOUND_EXPR; don't get confused. Also handle EMPTY_CLASS_EXPR
7065 introduced by build_call_a. */
7066 tree op0 = TREE_OPERAND (t, 0);
7067 tree op1 = TREE_OPERAND (t, 1);
7068 STRIP_NOPS (op1);
7069 if ((TREE_CODE (op0) == TARGET_EXPR && op1 == TARGET_EXPR_SLOT (op0))
7070 || TREE_CODE (op1) == EMPTY_CLASS_EXPR)
7071 return RECUR (op0, want_rval);
7072 else
7073 goto binary;
7076 /* If the first operand is the non-short-circuit constant, look at
7077 the second operand; otherwise we only care about the first one for
7078 potentiality. */
7079 case TRUTH_AND_EXPR:
7080 case TRUTH_ANDIF_EXPR:
7081 tmp = boolean_true_node;
7082 goto truth;
7083 case TRUTH_OR_EXPR:
7084 case TRUTH_ORIF_EXPR:
7085 tmp = boolean_false_node;
7086 truth:
7088 tree op = TREE_OPERAND (t, 0);
7089 if (!RECUR (op, rval))
7090 return false;
7091 if (!processing_template_decl)
7092 op = cxx_eval_outermost_constant_expr (op, true);
7093 if (tree_int_cst_equal (op, tmp))
7094 return RECUR (TREE_OPERAND (t, 1), rval);
7095 else
7096 return true;
7099 case PLUS_EXPR:
7100 case MULT_EXPR:
7101 case POINTER_PLUS_EXPR:
7102 case RDIV_EXPR:
7103 case EXACT_DIV_EXPR:
7104 case MIN_EXPR:
7105 case MAX_EXPR:
7106 case LSHIFT_EXPR:
7107 case RSHIFT_EXPR:
7108 case BIT_IOR_EXPR:
7109 case BIT_XOR_EXPR:
7110 case BIT_AND_EXPR:
7111 case TRUTH_XOR_EXPR:
7112 case UNORDERED_EXPR:
7113 case ORDERED_EXPR:
7114 case UNLT_EXPR:
7115 case UNLE_EXPR:
7116 case UNGT_EXPR:
7117 case UNGE_EXPR:
7118 case UNEQ_EXPR:
7119 case LTGT_EXPR:
7120 case RANGE_EXPR:
7121 case COMPLEX_EXPR:
7122 want_rval = true;
7123 /* Fall through. */
7124 case ARRAY_REF:
7125 case ARRAY_RANGE_REF:
7126 case MEMBER_REF:
7127 case DOTSTAR_EXPR:
7128 case MEM_REF:
7129 case BINARY_LEFT_FOLD_EXPR:
7130 case BINARY_RIGHT_FOLD_EXPR:
7131 binary:
7132 for (i = 0; i < 2; ++i)
7133 if (!RECUR (TREE_OPERAND (t, i), want_rval))
7134 return false;
7135 return true;
7137 case VEC_PERM_EXPR:
7138 for (i = 0; i < 3; ++i)
7139 if (!RECUR (TREE_OPERAND (t, i), true))
7140 return false;
7141 return true;
7143 case COND_EXPR:
7144 if (COND_EXPR_IS_VEC_DELETE (t) && cxx_dialect < cxx2a)
7146 if (flags & tf_error)
7147 error_at (loc, "%<delete[]%> is not a constant expression");
7148 return false;
7150 /* Fall through. */
7151 case IF_STMT:
7152 case VEC_COND_EXPR:
7153 /* If the condition is a known constant, we know which of the legs we
7154 care about; otherwise we only require that the condition and
7155 either of the legs be potentially constant. */
7156 tmp = TREE_OPERAND (t, 0);
7157 if (!RECUR (tmp, rval))
7158 return false;
7159 if (!processing_template_decl)
7160 tmp = cxx_eval_outermost_constant_expr (tmp, true);
7161 if (integer_zerop (tmp))
7162 return RECUR (TREE_OPERAND (t, 2), want_rval);
7163 else if (TREE_CODE (tmp) == INTEGER_CST)
7164 return RECUR (TREE_OPERAND (t, 1), want_rval);
7165 for (i = 1; i < 3; ++i)
7166 if (potential_constant_expression_1 (TREE_OPERAND (t, i),
7167 want_rval, strict, now,
7168 tf_none, jump_target))
7169 return true;
7170 if (flags & tf_error)
7171 error_at (loc, "expression %qE is not a constant expression", t);
7172 return false;
7174 case VEC_INIT_EXPR:
7175 if (VEC_INIT_EXPR_IS_CONSTEXPR (t))
7176 return true;
7177 if (flags & tf_error)
7179 error_at (loc, "non-constant array initialization");
7180 diagnose_non_constexpr_vec_init (t);
7182 return false;
7184 case TYPE_DECL:
7185 case TAG_DEFN:
7186 /* We can see these in statement-expressions. */
7187 return true;
7189 case CLEANUP_STMT:
7190 if (!RECUR (CLEANUP_BODY (t), any))
7191 return false;
7192 if (!CLEANUP_EH_ONLY (t) && !RECUR (CLEANUP_EXPR (t), any))
7193 return false;
7194 return true;
7196 case EMPTY_CLASS_EXPR:
7197 case PREDICT_EXPR:
7198 return false;
7200 case GOTO_EXPR:
7202 tree *target = &TREE_OPERAND (t, 0);
7203 /* Gotos representing break and continue are OK. */
7204 if (breaks (target) || continues (target))
7206 *jump_target = *target;
7207 return true;
7209 if (flags & tf_error)
7210 error_at (loc, "%<goto%> is not a constant expression");
7211 return false;
7214 case ANNOTATE_EXPR:
7215 return RECUR (TREE_OPERAND (t, 0), rval);
7217 default:
7218 if (objc_is_property_ref (t))
7219 return false;
7221 sorry ("unexpected AST of kind %s", get_tree_code_name (TREE_CODE (t)));
7222 gcc_unreachable ();
7223 return false;
7225 #undef RECUR
7228 bool
7229 potential_constant_expression_1 (tree t, bool want_rval, bool strict, bool now,
7230 tsubst_flags_t flags)
7232 tree target = NULL_TREE;
7233 return potential_constant_expression_1 (t, want_rval, strict, now,
7234 flags, &target);
7237 /* The main entry point to the above. */
7239 bool
7240 potential_constant_expression (tree t)
7242 return potential_constant_expression_1 (t, false, true, false, tf_none);
7245 /* As above, but require a constant rvalue. */
7247 bool
7248 potential_rvalue_constant_expression (tree t)
7250 return potential_constant_expression_1 (t, true, true, false, tf_none);
7253 /* Like above, but complain about non-constant expressions. */
7255 bool
7256 require_potential_constant_expression (tree t)
7258 return potential_constant_expression_1 (t, false, true, false,
7259 tf_warning_or_error);
7262 /* Cross product of the above. */
7264 bool
7265 require_potential_rvalue_constant_expression (tree t)
7267 return potential_constant_expression_1 (t, true, true, false,
7268 tf_warning_or_error);
7271 /* Like above, but don't consider PARM_DECL a potential_constant_expression. */
7273 bool
7274 require_rvalue_constant_expression (tree t)
7276 return potential_constant_expression_1 (t, true, true, true,
7277 tf_warning_or_error);
7280 /* Like potential_constant_expression, but don't consider possible constexpr
7281 substitution of the current function. That is, PARM_DECL qualifies under
7282 potential_constant_expression, but not here.
7284 This is basically what you can check when any actual constant values might
7285 be value-dependent. */
7287 bool
7288 is_constant_expression (tree t)
7290 return potential_constant_expression_1 (t, false, true, true, tf_none);
7293 /* Like above, but complain about non-constant expressions. */
7295 bool
7296 require_constant_expression (tree t)
7298 return potential_constant_expression_1 (t, false, true, true,
7299 tf_warning_or_error);
7302 /* Like is_constant_expression, but allow const variables that are not allowed
7303 under constexpr rules. */
7305 bool
7306 is_static_init_expression (tree t)
7308 return potential_constant_expression_1 (t, false, false, true, tf_none);
7311 /* Returns true if T is a potential constant expression that is not
7312 instantiation-dependent, and therefore a candidate for constant folding even
7313 in a template. */
7315 bool
7316 is_nondependent_constant_expression (tree t)
7318 return (!type_unknown_p (t)
7319 && !BRACE_ENCLOSED_INITIALIZER_P (t)
7320 && is_constant_expression (t)
7321 && !instantiation_dependent_expression_p (t));
7324 /* Returns true if T is a potential static initializer expression that is not
7325 instantiation-dependent. */
7327 bool
7328 is_nondependent_static_init_expression (tree t)
7330 return (!type_unknown_p (t)
7331 && !BRACE_ENCLOSED_INITIALIZER_P (t)
7332 && is_static_init_expression (t)
7333 && !instantiation_dependent_expression_p (t));
7336 /* Finalize constexpr processing after parsing. */
7338 void
7339 fini_constexpr (void)
7341 /* The contexpr call and fundef copies tables are no longer needed. */
7342 constexpr_call_table = NULL;
7343 fundef_copies_table = NULL;
7346 #include "gt-cp-constexpr.h"