Update LOCAL_PATCHES after libsanitizer merge.
[official-gcc.git] / gcc / cp / constexpr.c
blob7692b1727da0219fa9f19db714bd4f0f6a114254
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-2018 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"
37 static bool verify_constant (tree, bool, bool *, bool *);
38 #define VERIFY_CONSTANT(X) \
39 do { \
40 if (verify_constant ((X), ctx->quiet, non_constant_p, overflow_p)) \
41 return t; \
42 } while (0)
44 /* Returns true iff FUN is an instantiation of a constexpr function
45 template or a defaulted constexpr function. */
47 bool
48 is_instantiation_of_constexpr (tree fun)
50 return ((DECL_TEMPLOID_INSTANTIATION (fun)
51 && DECL_DECLARED_CONSTEXPR_P (DECL_TI_TEMPLATE (fun)))
52 || (DECL_DEFAULTED_FN (fun)
53 && DECL_DECLARED_CONSTEXPR_P (fun)));
56 /* Return true if T is a literal type. */
58 bool
59 literal_type_p (tree t)
61 if (SCALAR_TYPE_P (t)
62 || VECTOR_TYPE_P (t)
63 || TYPE_REF_P (t)
64 || (VOID_TYPE_P (t) && cxx_dialect >= cxx14))
65 return true;
66 if (CLASS_TYPE_P (t))
68 t = complete_type (t);
69 gcc_assert (COMPLETE_TYPE_P (t) || errorcount);
70 return CLASSTYPE_LITERAL_P (t);
72 if (TREE_CODE (t) == ARRAY_TYPE)
73 return literal_type_p (strip_array_types (t));
74 return false;
77 /* If DECL is a variable declared `constexpr', require its type
78 be literal. Return error_mark_node if we give an error, the
79 DECL otherwise. */
81 tree
82 ensure_literal_type_for_constexpr_object (tree decl)
84 tree type = TREE_TYPE (decl);
85 if (VAR_P (decl)
86 && (DECL_DECLARED_CONSTEXPR_P (decl)
87 || var_in_constexpr_fn (decl))
88 && !processing_template_decl)
90 tree stype = strip_array_types (type);
91 if (CLASS_TYPE_P (stype) && !COMPLETE_TYPE_P (complete_type (stype)))
92 /* Don't complain here, we'll complain about incompleteness
93 when we try to initialize the variable. */;
94 else if (type_uses_auto (type))
95 /* We don't know the actual type yet. */;
96 else if (!literal_type_p (type))
98 if (DECL_DECLARED_CONSTEXPR_P (decl))
100 auto_diagnostic_group d;
101 error ("the type %qT of %<constexpr%> variable %qD "
102 "is not literal", type, decl);
103 explain_non_literal_class (type);
104 decl = error_mark_node;
106 else
108 if (!is_instantiation_of_constexpr (current_function_decl))
110 auto_diagnostic_group d;
111 error ("variable %qD of non-literal type %qT in %<constexpr%> "
112 "function", decl, type);
113 explain_non_literal_class (type);
114 decl = error_mark_node;
116 cp_function_chain->invalid_constexpr = true;
119 else if (DECL_DECLARED_CONSTEXPR_P (decl)
120 && variably_modified_type_p (type, NULL_TREE))
122 error ("%<constexpr%> variable %qD has variably-modified type %qT",
123 decl, type);
124 decl = error_mark_node;
127 return decl;
130 /* Representation of entries in the constexpr function definition table. */
132 struct GTY((for_user)) constexpr_fundef {
133 tree decl;
134 tree body;
137 struct constexpr_fundef_hasher : ggc_ptr_hash<constexpr_fundef>
139 static hashval_t hash (constexpr_fundef *);
140 static bool equal (constexpr_fundef *, constexpr_fundef *);
143 /* This table holds all constexpr function definitions seen in
144 the current translation unit. */
146 static GTY (()) hash_table<constexpr_fundef_hasher> *constexpr_fundef_table;
148 /* Utility function used for managing the constexpr function table.
149 Return true if the entries pointed to by P and Q are for the
150 same constexpr function. */
152 inline bool
153 constexpr_fundef_hasher::equal (constexpr_fundef *lhs, constexpr_fundef *rhs)
155 return lhs->decl == rhs->decl;
158 /* Utility function used for managing the constexpr function table.
159 Return a hash value for the entry pointed to by Q. */
161 inline hashval_t
162 constexpr_fundef_hasher::hash (constexpr_fundef *fundef)
164 return DECL_UID (fundef->decl);
167 /* Return a previously saved definition of function FUN. */
169 static constexpr_fundef *
170 retrieve_constexpr_fundef (tree fun)
172 constexpr_fundef fundef = { NULL, NULL };
173 if (constexpr_fundef_table == NULL)
174 return NULL;
176 fundef.decl = fun;
177 return constexpr_fundef_table->find (&fundef);
180 /* Check whether the parameter and return types of FUN are valid for a
181 constexpr function, and complain if COMPLAIN. */
183 bool
184 is_valid_constexpr_fn (tree fun, bool complain)
186 bool ret = true;
188 if (DECL_INHERITED_CTOR (fun)
189 && TREE_CODE (fun) == TEMPLATE_DECL)
191 ret = false;
192 if (complain)
193 error ("inherited constructor %qD is not %<constexpr%>",
194 DECL_INHERITED_CTOR (fun));
196 else
198 for (tree parm = FUNCTION_FIRST_USER_PARM (fun);
199 parm != NULL_TREE; parm = TREE_CHAIN (parm))
200 if (!literal_type_p (TREE_TYPE (parm)))
202 ret = false;
203 if (complain)
205 auto_diagnostic_group d;
206 error ("invalid type for parameter %d of %<constexpr%> "
207 "function %q+#D", DECL_PARM_INDEX (parm), fun);
208 explain_non_literal_class (TREE_TYPE (parm));
213 if (LAMBDA_TYPE_P (CP_DECL_CONTEXT (fun)) && cxx_dialect < cxx17)
215 ret = false;
216 if (complain)
217 inform (DECL_SOURCE_LOCATION (fun),
218 "lambdas are implicitly %<constexpr%> only in C++17 and later");
220 else if (!DECL_CONSTRUCTOR_P (fun))
222 tree rettype = TREE_TYPE (TREE_TYPE (fun));
223 if (!literal_type_p (rettype))
225 ret = false;
226 if (complain)
228 auto_diagnostic_group d;
229 error ("invalid return type %qT of %<constexpr%> function %q+D",
230 rettype, fun);
231 explain_non_literal_class (rettype);
235 /* C++14 DR 1684 removed this restriction. */
236 if (cxx_dialect < cxx14
237 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fun)
238 && !CLASSTYPE_LITERAL_P (DECL_CONTEXT (fun)))
240 ret = false;
241 if (complain)
243 auto_diagnostic_group d;
244 if (pedwarn (DECL_SOURCE_LOCATION (fun), OPT_Wpedantic,
245 "enclosing class of %<constexpr%> non-static"
246 " member function %q+#D is not a literal type",
247 fun))
248 explain_non_literal_class (DECL_CONTEXT (fun));
252 else if (CLASSTYPE_VBASECLASSES (DECL_CONTEXT (fun)))
254 ret = false;
255 if (complain)
256 error ("%q#T has virtual base classes", DECL_CONTEXT (fun));
259 return ret;
262 /* Subroutine of build_data_member_initialization. MEMBER is a COMPONENT_REF
263 for a member of an anonymous aggregate, INIT is the initializer for that
264 member, and VEC_OUTER is the vector of constructor elements for the class
265 whose constructor we are processing. Add the initializer to the vector
266 and return true to indicate success. */
268 static bool
269 build_anon_member_initialization (tree member, tree init,
270 vec<constructor_elt, va_gc> **vec_outer)
272 /* MEMBER presents the relevant fields from the inside out, but we need
273 to build up the initializer from the outside in so that we can reuse
274 previously built CONSTRUCTORs if this is, say, the second field in an
275 anonymous struct. So we use a vec as a stack. */
276 auto_vec<tree, 2> fields;
279 fields.safe_push (TREE_OPERAND (member, 1));
280 member = TREE_OPERAND (member, 0);
282 while (ANON_AGGR_TYPE_P (TREE_TYPE (member))
283 && TREE_CODE (member) == COMPONENT_REF);
285 /* VEC has the constructor elements vector for the context of FIELD.
286 If FIELD is an anonymous aggregate, we will push inside it. */
287 vec<constructor_elt, va_gc> **vec = vec_outer;
288 tree field;
289 while (field = fields.pop(),
290 ANON_AGGR_TYPE_P (TREE_TYPE (field)))
292 tree ctor;
293 /* If there is already an outer constructor entry for the anonymous
294 aggregate FIELD, use it; otherwise, insert one. */
295 if (vec_safe_is_empty (*vec)
296 || (*vec)->last().index != field)
298 ctor = build_constructor (TREE_TYPE (field), NULL);
299 CONSTRUCTOR_APPEND_ELT (*vec, field, ctor);
301 else
302 ctor = (*vec)->last().value;
303 vec = &CONSTRUCTOR_ELTS (ctor);
306 /* Now we're at the innermost field, the one that isn't an anonymous
307 aggregate. Add its initializer to the CONSTRUCTOR and we're done. */
308 gcc_assert (fields.is_empty());
309 CONSTRUCTOR_APPEND_ELT (*vec, field, init);
311 return true;
314 /* Subroutine of build_constexpr_constructor_member_initializers.
315 The expression tree T represents a data member initialization
316 in a (constexpr) constructor definition. Build a pairing of
317 the data member with its initializer, and prepend that pair
318 to the existing initialization pair INITS. */
320 static bool
321 build_data_member_initialization (tree t, vec<constructor_elt, va_gc> **vec)
323 tree member, init;
324 if (TREE_CODE (t) == CLEANUP_POINT_EXPR)
325 t = TREE_OPERAND (t, 0);
326 if (TREE_CODE (t) == EXPR_STMT)
327 t = TREE_OPERAND (t, 0);
328 if (t == error_mark_node)
329 return false;
330 if (TREE_CODE (t) == STATEMENT_LIST)
332 tree_stmt_iterator i;
333 for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
335 if (! build_data_member_initialization (tsi_stmt (i), vec))
336 return false;
338 return true;
340 if (TREE_CODE (t) == CLEANUP_STMT)
342 /* We can't see a CLEANUP_STMT in a constructor for a literal class,
343 but we can in a constexpr constructor for a non-literal class. Just
344 ignore it; either all the initialization will be constant, in which
345 case the cleanup can't run, or it can't be constexpr.
346 Still recurse into CLEANUP_BODY. */
347 return build_data_member_initialization (CLEANUP_BODY (t), vec);
349 if (TREE_CODE (t) == CONVERT_EXPR)
350 t = TREE_OPERAND (t, 0);
351 if (TREE_CODE (t) == INIT_EXPR
352 /* vptr initialization shows up as a MODIFY_EXPR. In C++14 we only
353 use what this function builds for cx_check_missing_mem_inits, and
354 assignment in the ctor body doesn't count. */
355 || (cxx_dialect < cxx14 && TREE_CODE (t) == MODIFY_EXPR))
357 member = TREE_OPERAND (t, 0);
358 init = break_out_target_exprs (TREE_OPERAND (t, 1));
360 else if (TREE_CODE (t) == CALL_EXPR)
362 tree fn = get_callee_fndecl (t);
363 if (!fn || !DECL_CONSTRUCTOR_P (fn))
364 /* We're only interested in calls to subobject constructors. */
365 return true;
366 member = CALL_EXPR_ARG (t, 0);
367 /* We don't use build_cplus_new here because it complains about
368 abstract bases. Leaving the call unwrapped means that it has the
369 wrong type, but cxx_eval_constant_expression doesn't care. */
370 init = break_out_target_exprs (t);
372 else if (TREE_CODE (t) == BIND_EXPR)
373 return build_data_member_initialization (BIND_EXPR_BODY (t), vec);
374 else
375 /* Don't add anything else to the CONSTRUCTOR. */
376 return true;
377 if (INDIRECT_REF_P (member))
378 member = TREE_OPERAND (member, 0);
379 if (TREE_CODE (member) == NOP_EXPR)
381 tree op = member;
382 STRIP_NOPS (op);
383 if (TREE_CODE (op) == ADDR_EXPR)
385 gcc_assert (same_type_ignoring_top_level_qualifiers_p
386 (TREE_TYPE (TREE_TYPE (op)),
387 TREE_TYPE (TREE_TYPE (member))));
388 /* Initializing a cv-qualified member; we need to look through
389 the const_cast. */
390 member = op;
392 else if (op == current_class_ptr
393 && (same_type_ignoring_top_level_qualifiers_p
394 (TREE_TYPE (TREE_TYPE (member)),
395 current_class_type)))
396 /* Delegating constructor. */
397 member = op;
398 else
400 /* This is an initializer for an empty base; keep it for now so
401 we can check it in cxx_eval_bare_aggregate. */
402 gcc_assert (is_empty_class (TREE_TYPE (TREE_TYPE (member))));
405 if (TREE_CODE (member) == ADDR_EXPR)
406 member = TREE_OPERAND (member, 0);
407 if (TREE_CODE (member) == COMPONENT_REF)
409 tree aggr = TREE_OPERAND (member, 0);
410 if (TREE_CODE (aggr) == VAR_DECL)
411 /* Initializing a local variable, don't add anything. */
412 return true;
413 if (TREE_CODE (aggr) != COMPONENT_REF)
414 /* Normal member initialization. */
415 member = TREE_OPERAND (member, 1);
416 else if (ANON_AGGR_TYPE_P (TREE_TYPE (aggr)))
417 /* Initializing a member of an anonymous union. */
418 return build_anon_member_initialization (member, init, vec);
419 else
420 /* We're initializing a vtable pointer in a base. Leave it as
421 COMPONENT_REF so we remember the path to get to the vfield. */
422 gcc_assert (TREE_TYPE (member) == vtbl_ptr_type_node);
425 /* Value-initialization can produce multiple initializers for the
426 same field; use the last one. */
427 if (!vec_safe_is_empty (*vec) && (*vec)->last().index == member)
428 (*vec)->last().value = init;
429 else
430 CONSTRUCTOR_APPEND_ELT (*vec, member, init);
431 return true;
434 /* Subroutine of check_constexpr_ctor_body_1 and constexpr_fn_retval.
435 In C++11 mode checks that the TYPE_DECLs in the BIND_EXPR_VARS of a
436 BIND_EXPR conform to 7.1.5/3/4 on typedef and alias declarations. */
438 static bool
439 check_constexpr_bind_expr_vars (tree t)
441 gcc_assert (TREE_CODE (t) == BIND_EXPR);
443 for (tree var = BIND_EXPR_VARS (t); var; var = DECL_CHAIN (var))
444 if (TREE_CODE (var) == TYPE_DECL
445 && DECL_IMPLICIT_TYPEDEF_P (var)
446 && !LAMBDA_TYPE_P (TREE_TYPE (var)))
447 return false;
448 return true;
451 /* Subroutine of check_constexpr_ctor_body. */
453 static bool
454 check_constexpr_ctor_body_1 (tree last, tree list)
456 switch (TREE_CODE (list))
458 case DECL_EXPR:
459 if (TREE_CODE (DECL_EXPR_DECL (list)) == USING_DECL
460 || TREE_CODE (DECL_EXPR_DECL (list)) == TYPE_DECL)
461 return true;
462 return false;
464 case CLEANUP_POINT_EXPR:
465 return check_constexpr_ctor_body (last, TREE_OPERAND (list, 0),
466 /*complain=*/false);
468 case BIND_EXPR:
469 if (!check_constexpr_bind_expr_vars (list)
470 || !check_constexpr_ctor_body (last, BIND_EXPR_BODY (list),
471 /*complain=*/false))
472 return false;
473 return true;
475 case USING_STMT:
476 case STATIC_ASSERT:
477 case DEBUG_BEGIN_STMT:
478 return true;
480 default:
481 return false;
485 /* Make sure that there are no statements after LAST in the constructor
486 body represented by LIST. */
488 bool
489 check_constexpr_ctor_body (tree last, tree list, bool complain)
491 /* C++14 doesn't require a constexpr ctor to have an empty body. */
492 if (cxx_dialect >= cxx14)
493 return true;
495 bool ok = true;
496 if (TREE_CODE (list) == STATEMENT_LIST)
498 tree_stmt_iterator i = tsi_last (list);
499 for (; !tsi_end_p (i); tsi_prev (&i))
501 tree t = tsi_stmt (i);
502 if (t == last)
503 break;
504 if (!check_constexpr_ctor_body_1 (last, t))
506 ok = false;
507 break;
511 else if (list != last
512 && !check_constexpr_ctor_body_1 (last, list))
513 ok = false;
514 if (!ok)
516 if (complain)
517 error ("%<constexpr%> constructor does not have empty body");
518 DECL_DECLARED_CONSTEXPR_P (current_function_decl) = false;
520 return ok;
523 /* V is a vector of constructor elements built up for the base and member
524 initializers of a constructor for TYPE. They need to be in increasing
525 offset order, which they might not be yet if TYPE has a primary base
526 which is not first in the base-clause or a vptr and at least one base
527 all of which are non-primary. */
529 static vec<constructor_elt, va_gc> *
530 sort_constexpr_mem_initializers (tree type, vec<constructor_elt, va_gc> *v)
532 tree pri = CLASSTYPE_PRIMARY_BINFO (type);
533 tree field_type;
534 unsigned i;
535 constructor_elt *ce;
537 if (pri)
538 field_type = BINFO_TYPE (pri);
539 else if (TYPE_CONTAINS_VPTR_P (type))
540 field_type = vtbl_ptr_type_node;
541 else
542 return v;
544 /* Find the element for the primary base or vptr and move it to the
545 beginning of the vec. */
546 for (i = 0; vec_safe_iterate (v, i, &ce); ++i)
547 if (TREE_TYPE (ce->index) == field_type)
548 break;
550 if (i > 0 && i < vec_safe_length (v))
552 vec<constructor_elt, va_gc> &vref = *v;
553 constructor_elt elt = vref[i];
554 for (; i > 0; --i)
555 vref[i] = vref[i-1];
556 vref[0] = elt;
559 return v;
562 /* Build compile-time evalable representations of member-initializer list
563 for a constexpr constructor. */
565 static tree
566 build_constexpr_constructor_member_initializers (tree type, tree body)
568 vec<constructor_elt, va_gc> *vec = NULL;
569 bool ok = true;
570 while (true)
571 switch (TREE_CODE (body))
573 case MUST_NOT_THROW_EXPR:
574 case EH_SPEC_BLOCK:
575 body = TREE_OPERAND (body, 0);
576 break;
578 case STATEMENT_LIST:
579 for (tree_stmt_iterator i = tsi_start (body);
580 !tsi_end_p (i); tsi_next (&i))
582 body = tsi_stmt (i);
583 if (TREE_CODE (body) == BIND_EXPR)
584 break;
586 break;
588 case BIND_EXPR:
589 body = BIND_EXPR_BODY (body);
590 goto found;
592 default:
593 gcc_unreachable ();
595 found:
596 if (TREE_CODE (body) == CLEANUP_POINT_EXPR)
598 body = TREE_OPERAND (body, 0);
599 if (TREE_CODE (body) == EXPR_STMT)
600 body = TREE_OPERAND (body, 0);
601 if (TREE_CODE (body) == INIT_EXPR
602 && (same_type_ignoring_top_level_qualifiers_p
603 (TREE_TYPE (TREE_OPERAND (body, 0)),
604 current_class_type)))
606 /* Trivial copy. */
607 return TREE_OPERAND (body, 1);
609 ok = build_data_member_initialization (body, &vec);
611 else if (TREE_CODE (body) == STATEMENT_LIST)
613 tree_stmt_iterator i;
614 for (i = tsi_start (body); !tsi_end_p (i); tsi_next (&i))
616 ok = build_data_member_initialization (tsi_stmt (i), &vec);
617 if (!ok)
618 break;
621 else if (TREE_CODE (body) == TRY_BLOCK)
623 error ("body of %<constexpr%> constructor cannot be "
624 "a function-try-block");
625 return error_mark_node;
627 else if (EXPR_P (body))
628 ok = build_data_member_initialization (body, &vec);
629 else
630 gcc_assert (errorcount > 0);
631 if (ok)
633 if (vec_safe_length (vec) > 0)
635 /* In a delegating constructor, return the target. */
636 constructor_elt *ce = &(*vec)[0];
637 if (ce->index == current_class_ptr)
639 body = ce->value;
640 vec_free (vec);
641 return body;
644 vec = sort_constexpr_mem_initializers (type, vec);
645 return build_constructor (type, vec);
647 else
648 return error_mark_node;
651 /* We have an expression tree T that represents a call, either CALL_EXPR
652 or AGGR_INIT_EXPR. If the call is lexically to a named function,
653 retrun the _DECL for that function. */
655 static tree
656 get_function_named_in_call (tree t)
658 tree fun = cp_get_callee (t);
659 if (fun && TREE_CODE (fun) == ADDR_EXPR
660 && TREE_CODE (TREE_OPERAND (fun, 0)) == FUNCTION_DECL)
661 fun = TREE_OPERAND (fun, 0);
662 return fun;
665 /* Subroutine of register_constexpr_fundef. BODY is the body of a function
666 declared to be constexpr, or a sub-statement thereof. Returns the
667 return value if suitable, error_mark_node for a statement not allowed in
668 a constexpr function, or NULL_TREE if no return value was found. */
670 tree
671 constexpr_fn_retval (tree body)
673 switch (TREE_CODE (body))
675 case STATEMENT_LIST:
677 tree_stmt_iterator i;
678 tree expr = NULL_TREE;
679 for (i = tsi_start (body); !tsi_end_p (i); tsi_next (&i))
681 tree s = constexpr_fn_retval (tsi_stmt (i));
682 if (s == error_mark_node)
683 return error_mark_node;
684 else if (s == NULL_TREE)
685 /* Keep iterating. */;
686 else if (expr)
687 /* Multiple return statements. */
688 return error_mark_node;
689 else
690 expr = s;
692 return expr;
695 case RETURN_EXPR:
696 return break_out_target_exprs (TREE_OPERAND (body, 0));
698 case DECL_EXPR:
700 tree decl = DECL_EXPR_DECL (body);
701 if (TREE_CODE (decl) == USING_DECL
702 /* Accept __func__, __FUNCTION__, and __PRETTY_FUNCTION__. */
703 || DECL_ARTIFICIAL (decl))
704 return NULL_TREE;
705 return error_mark_node;
708 case CLEANUP_POINT_EXPR:
709 return constexpr_fn_retval (TREE_OPERAND (body, 0));
711 case BIND_EXPR:
712 if (!check_constexpr_bind_expr_vars (body))
713 return error_mark_node;
714 return constexpr_fn_retval (BIND_EXPR_BODY (body));
716 case USING_STMT:
717 case DEBUG_BEGIN_STMT:
718 return NULL_TREE;
720 case CALL_EXPR:
722 tree fun = get_function_named_in_call (body);
723 if (fun != NULL_TREE
724 && fndecl_built_in_p (fun, BUILT_IN_UNREACHABLE))
725 return NULL_TREE;
727 /* Fallthru. */
729 default:
730 return error_mark_node;
734 /* Subroutine of register_constexpr_fundef. BODY is the DECL_SAVED_TREE of
735 FUN; do the necessary transformations to turn it into a single expression
736 that we can store in the hash table. */
738 static tree
739 massage_constexpr_body (tree fun, tree body)
741 if (DECL_CONSTRUCTOR_P (fun))
742 body = build_constexpr_constructor_member_initializers
743 (DECL_CONTEXT (fun), body);
744 else if (cxx_dialect < cxx14)
746 if (TREE_CODE (body) == EH_SPEC_BLOCK)
747 body = EH_SPEC_STMTS (body);
748 if (TREE_CODE (body) == MUST_NOT_THROW_EXPR)
749 body = TREE_OPERAND (body, 0);
750 body = constexpr_fn_retval (body);
752 return body;
755 /* CTYPE is a type constructed from BODY. Return true if some
756 bases/fields are uninitialized, and complain if COMPLAIN. */
758 static bool
759 cx_check_missing_mem_inits (tree ctype, tree body, bool complain)
761 unsigned nelts = 0;
763 if (body)
765 if (TREE_CODE (body) != CONSTRUCTOR)
766 return false;
767 nelts = CONSTRUCTOR_NELTS (body);
769 tree field = TYPE_FIELDS (ctype);
771 if (TREE_CODE (ctype) == UNION_TYPE)
773 if (nelts == 0 && next_initializable_field (field))
775 if (complain)
776 error ("%<constexpr%> constructor for union %qT must "
777 "initialize exactly one non-static data member", ctype);
778 return true;
780 return false;
783 /* Iterate over the CONSTRUCTOR, checking any missing fields don't
784 need an explicit initialization. */
785 bool bad = false;
786 for (unsigned i = 0; i <= nelts; ++i)
788 tree index = NULL_TREE;
789 if (i < nelts)
791 index = CONSTRUCTOR_ELT (body, i)->index;
792 /* Skip base and vtable inits. */
793 if (TREE_CODE (index) != FIELD_DECL
794 || DECL_ARTIFICIAL (index))
795 continue;
798 for (; field != index; field = DECL_CHAIN (field))
800 tree ftype;
801 if (TREE_CODE (field) != FIELD_DECL)
802 continue;
803 if (DECL_UNNAMED_BIT_FIELD (field))
804 continue;
805 if (DECL_ARTIFICIAL (field))
806 continue;
807 if (ANON_AGGR_TYPE_P (TREE_TYPE (field)))
809 /* Recurse to check the anonummous aggregate member. */
810 bad |= cx_check_missing_mem_inits
811 (TREE_TYPE (field), NULL_TREE, complain);
812 if (bad && !complain)
813 return true;
814 continue;
816 ftype = strip_array_types (TREE_TYPE (field));
817 if (type_has_constexpr_default_constructor (ftype))
819 /* It's OK to skip a member with a trivial constexpr ctor.
820 A constexpr ctor that isn't trivial should have been
821 added in by now. */
822 gcc_checking_assert (!TYPE_HAS_COMPLEX_DFLT (ftype)
823 || errorcount != 0);
824 continue;
826 if (!complain)
827 return true;
828 auto_diagnostic_group d;
829 error ("member %qD must be initialized by mem-initializer "
830 "in %<constexpr%> constructor", field);
831 inform (DECL_SOURCE_LOCATION (field), "declared here");
832 bad = true;
834 if (field == NULL_TREE)
835 break;
837 if (ANON_AGGR_TYPE_P (TREE_TYPE (index)))
839 /* Check the anonymous aggregate initializer is valid. */
840 bad |= cx_check_missing_mem_inits
841 (TREE_TYPE (index), CONSTRUCTOR_ELT (body, i)->value, complain);
842 if (bad && !complain)
843 return true;
845 field = DECL_CHAIN (field);
848 return bad;
851 /* We are processing the definition of the constexpr function FUN.
852 Check that its BODY fulfills the propriate requirements and
853 enter it in the constexpr function definition table.
854 For constructor BODY is actually the TREE_LIST of the
855 member-initializer list. */
857 tree
858 register_constexpr_fundef (tree fun, tree body)
860 constexpr_fundef entry;
861 constexpr_fundef **slot;
863 if (!is_valid_constexpr_fn (fun, !DECL_GENERATED_P (fun)))
864 return NULL;
866 tree massaged = massage_constexpr_body (fun, body);
867 if (massaged == NULL_TREE || massaged == error_mark_node)
869 if (!DECL_CONSTRUCTOR_P (fun))
870 error ("body of %<constexpr%> function %qD not a return-statement",
871 fun);
872 return NULL;
875 if (!potential_rvalue_constant_expression (massaged))
877 if (!DECL_GENERATED_P (fun))
878 require_potential_rvalue_constant_expression (massaged);
879 return NULL;
882 if (DECL_CONSTRUCTOR_P (fun)
883 && cx_check_missing_mem_inits (DECL_CONTEXT (fun),
884 massaged, !DECL_GENERATED_P (fun)))
885 return NULL;
887 /* Create the constexpr function table if necessary. */
888 if (constexpr_fundef_table == NULL)
889 constexpr_fundef_table
890 = hash_table<constexpr_fundef_hasher>::create_ggc (101);
892 entry.decl = fun;
893 entry.body = body;
894 slot = constexpr_fundef_table->find_slot (&entry, INSERT);
896 gcc_assert (*slot == NULL);
897 *slot = ggc_alloc<constexpr_fundef> ();
898 **slot = entry;
900 return fun;
903 /* FUN is a non-constexpr function called in a context that requires a
904 constant expression. If it comes from a constexpr template, explain why
905 the instantiation isn't constexpr. */
907 void
908 explain_invalid_constexpr_fn (tree fun)
910 static hash_set<tree> *diagnosed;
911 tree body;
912 location_t save_loc;
913 /* Only diagnose defaulted functions, lambdas, or instantiations. */
914 if (!DECL_DEFAULTED_FN (fun)
915 && !LAMBDA_TYPE_P (CP_DECL_CONTEXT (fun))
916 && !is_instantiation_of_constexpr (fun))
917 return;
918 if (diagnosed == NULL)
919 diagnosed = new hash_set<tree>;
920 if (diagnosed->add (fun))
921 /* Already explained. */
922 return;
924 save_loc = input_location;
925 if (!lambda_static_thunk_p (fun))
927 /* Diagnostics should completely ignore the static thunk, so leave
928 input_location set to our caller's location. */
929 input_location = DECL_SOURCE_LOCATION (fun);
930 inform (input_location,
931 "%qD is not usable as a %<constexpr%> function because:", fun);
933 /* First check the declaration. */
934 if (is_valid_constexpr_fn (fun, true))
936 /* Then if it's OK, the body. */
937 if (!DECL_DECLARED_CONSTEXPR_P (fun)
938 && !LAMBDA_TYPE_P (CP_DECL_CONTEXT (fun)))
939 explain_implicit_non_constexpr (fun);
940 else
942 body = massage_constexpr_body (fun, DECL_SAVED_TREE (fun));
943 require_potential_rvalue_constant_expression (body);
944 if (DECL_CONSTRUCTOR_P (fun))
945 cx_check_missing_mem_inits (DECL_CONTEXT (fun), body, true);
948 input_location = save_loc;
951 /* Objects of this type represent calls to constexpr functions
952 along with the bindings of parameters to their arguments, for
953 the purpose of compile time evaluation. */
955 struct GTY((for_user)) constexpr_call {
956 /* Description of the constexpr function definition. */
957 constexpr_fundef *fundef;
958 /* Parameter bindings environment. A TREE_LIST where each TREE_PURPOSE
959 is a parameter _DECL and the TREE_VALUE is the value of the parameter.
960 Note: This arrangement is made to accommodate the use of
961 iterative_hash_template_arg (see pt.c). If you change this
962 representation, also change the hash calculation in
963 cxx_eval_call_expression. */
964 tree bindings;
965 /* Result of the call.
966 NULL means the call is being evaluated.
967 error_mark_node means that the evaluation was erroneous;
968 otherwise, the actuall value of the call. */
969 tree result;
970 /* The hash of this call; we remember it here to avoid having to
971 recalculate it when expanding the hash table. */
972 hashval_t hash;
975 struct constexpr_call_hasher : ggc_ptr_hash<constexpr_call>
977 static hashval_t hash (constexpr_call *);
978 static bool equal (constexpr_call *, constexpr_call *);
981 enum constexpr_switch_state {
982 /* Used when processing a switch for the first time by cxx_eval_switch_expr
983 and default: label for that switch has not been seen yet. */
984 css_default_not_seen,
985 /* Used when processing a switch for the first time by cxx_eval_switch_expr
986 and default: label for that switch has been seen already. */
987 css_default_seen,
988 /* Used when processing a switch for the second time by
989 cxx_eval_switch_expr, where default: label should match. */
990 css_default_processing
993 /* The constexpr expansion context. CALL is the current function
994 expansion, CTOR is the current aggregate initializer, OBJECT is the
995 object being initialized by CTOR, either a VAR_DECL or a _REF. VALUES
996 is a map of values of variables initialized within the expression. */
998 struct constexpr_ctx {
999 /* The innermost call we're evaluating. */
1000 constexpr_call *call;
1001 /* Values for any temporaries or local variables within the
1002 constant-expression. */
1003 hash_map<tree,tree> *values;
1004 /* SAVE_EXPRs that we've seen within the current LOOP_EXPR. NULL if we
1005 aren't inside a loop. */
1006 hash_set<tree> *save_exprs;
1007 /* The CONSTRUCTOR we're currently building up for an aggregate
1008 initializer. */
1009 tree ctor;
1010 /* The object we're building the CONSTRUCTOR for. */
1011 tree object;
1012 /* If inside SWITCH_EXPR. */
1013 constexpr_switch_state *css_state;
1014 /* Whether we should error on a non-constant expression or fail quietly. */
1015 bool quiet;
1016 /* Whether we are strictly conforming to constant expression rules or
1017 trying harder to get a constant value. */
1018 bool strict;
1019 /* Whether __builtin_is_constant_evaluated () should be true. */
1020 bool pretend_const_required;
1023 /* A table of all constexpr calls that have been evaluated by the
1024 compiler in this translation unit. */
1026 static GTY (()) hash_table<constexpr_call_hasher> *constexpr_call_table;
1028 static tree cxx_eval_constant_expression (const constexpr_ctx *, tree,
1029 bool, bool *, bool *, tree * = NULL);
1031 /* Compute a hash value for a constexpr call representation. */
1033 inline hashval_t
1034 constexpr_call_hasher::hash (constexpr_call *info)
1036 return info->hash;
1039 /* Return true if the objects pointed to by P and Q represent calls
1040 to the same constexpr function with the same arguments.
1041 Otherwise, return false. */
1043 bool
1044 constexpr_call_hasher::equal (constexpr_call *lhs, constexpr_call *rhs)
1046 tree lhs_bindings;
1047 tree rhs_bindings;
1048 if (lhs == rhs)
1049 return true;
1050 if (lhs->hash != rhs->hash)
1051 return false;
1052 if (!constexpr_fundef_hasher::equal (lhs->fundef, rhs->fundef))
1053 return false;
1054 lhs_bindings = lhs->bindings;
1055 rhs_bindings = rhs->bindings;
1056 while (lhs_bindings != NULL && rhs_bindings != NULL)
1058 tree lhs_arg = TREE_VALUE (lhs_bindings);
1059 tree rhs_arg = TREE_VALUE (rhs_bindings);
1060 gcc_assert (TREE_TYPE (lhs_arg) == TREE_TYPE (rhs_arg));
1061 if (!cp_tree_equal (lhs_arg, rhs_arg))
1062 return false;
1063 lhs_bindings = TREE_CHAIN (lhs_bindings);
1064 rhs_bindings = TREE_CHAIN (rhs_bindings);
1066 return lhs_bindings == rhs_bindings;
1069 /* Initialize the constexpr call table, if needed. */
1071 static void
1072 maybe_initialize_constexpr_call_table (void)
1074 if (constexpr_call_table == NULL)
1075 constexpr_call_table = hash_table<constexpr_call_hasher>::create_ggc (101);
1078 /* During constexpr CALL_EXPR evaluation, to avoid issues with sharing when
1079 a function happens to get called recursively, we unshare the callee
1080 function's body and evaluate this unshared copy instead of evaluating the
1081 original body.
1083 FUNDEF_COPIES_TABLE is a per-function freelist of these unshared function
1084 copies. The underlying data structure of FUNDEF_COPIES_TABLE is a hash_map
1085 that's keyed off of the original FUNCTION_DECL and whose value is a
1086 TREE_LIST of this function's unused copies awaiting reuse.
1088 This is not GC-deletable to avoid GC affecting UID generation. */
1090 static GTY(()) hash_map<tree, tree> *fundef_copies_table;
1092 /* Initialize FUNDEF_COPIES_TABLE if it's not initialized. */
1094 static void
1095 maybe_initialize_fundef_copies_table ()
1097 if (fundef_copies_table == NULL)
1098 fundef_copies_table = hash_map<tree,tree>::create_ggc (101);
1101 /* Reuse a copy or create a new unshared copy of the function FUN.
1102 Return this copy. We use a TREE_LIST whose PURPOSE is body, VALUE
1103 is parms, TYPE is result. */
1105 static tree
1106 get_fundef_copy (tree fun)
1108 maybe_initialize_fundef_copies_table ();
1110 tree copy;
1111 bool existed;
1112 tree *slot = &fundef_copies_table->get_or_insert (fun, &existed);
1114 if (!existed)
1116 /* There is no cached function available, or in use. We can use
1117 the function directly. That the slot is now created records
1118 that this function is now in use. */
1119 copy = build_tree_list (DECL_SAVED_TREE (fun), DECL_ARGUMENTS (fun));
1120 TREE_TYPE (copy) = DECL_RESULT (fun);
1122 else if (*slot == NULL_TREE)
1124 /* We've already used the function itself, so make a copy. */
1125 copy = build_tree_list (NULL, NULL);
1126 TREE_PURPOSE (copy) = copy_fn (fun, TREE_VALUE (copy), TREE_TYPE (copy));
1128 else
1130 /* We have a cached function available. */
1131 copy = *slot;
1132 *slot = TREE_CHAIN (copy);
1135 return copy;
1138 /* Save the copy COPY of function FUN for later reuse by
1139 get_fundef_copy(). By construction, there will always be an entry
1140 to find. */
1142 static void
1143 save_fundef_copy (tree fun, tree copy)
1145 tree *slot = fundef_copies_table->get (fun);
1146 TREE_CHAIN (copy) = *slot;
1147 *slot = copy;
1150 /* We have an expression tree T that represents a call, either CALL_EXPR
1151 or AGGR_INIT_EXPR. Return the Nth argument. */
1153 static inline tree
1154 get_nth_callarg (tree t, int n)
1156 switch (TREE_CODE (t))
1158 case CALL_EXPR:
1159 return CALL_EXPR_ARG (t, n);
1161 case AGGR_INIT_EXPR:
1162 return AGGR_INIT_EXPR_ARG (t, n);
1164 default:
1165 gcc_unreachable ();
1166 return NULL;
1170 /* Attempt to evaluate T which represents a call to a builtin function.
1171 We assume here that all builtin functions evaluate to scalar types
1172 represented by _CST nodes. */
1174 static tree
1175 cxx_eval_builtin_function_call (const constexpr_ctx *ctx, tree t, tree fun,
1176 bool lval,
1177 bool *non_constant_p, bool *overflow_p)
1179 const int nargs = call_expr_nargs (t);
1180 tree *args = (tree *) alloca (nargs * sizeof (tree));
1181 tree new_call;
1182 int i;
1184 /* Don't fold __builtin_constant_p within a constexpr function. */
1185 bool bi_const_p = DECL_IS_BUILTIN_CONSTANT_P (fun);
1187 /* If we aren't requiring a constant expression, defer __builtin_constant_p
1188 in a constexpr function until we have values for the parameters. */
1189 if (bi_const_p
1190 && ctx->quiet
1191 && current_function_decl
1192 && DECL_DECLARED_CONSTEXPR_P (current_function_decl))
1194 *non_constant_p = true;
1195 return t;
1198 /* For __builtin_is_constant_evaluated, defer it if not
1199 ctx->pretend_const_required, otherwise fold it to true. */
1200 if (fndecl_built_in_p (fun, CP_BUILT_IN_IS_CONSTANT_EVALUATED,
1201 BUILT_IN_FRONTEND))
1203 if (!ctx->pretend_const_required)
1205 *non_constant_p = true;
1206 return t;
1208 return boolean_true_node;
1211 /* Be permissive for arguments to built-ins; __builtin_constant_p should
1212 return constant false for a non-constant argument. */
1213 constexpr_ctx new_ctx = *ctx;
1214 new_ctx.quiet = true;
1215 bool dummy1 = false, dummy2 = false;
1216 for (i = 0; i < nargs; ++i)
1218 args[i] = CALL_EXPR_ARG (t, i);
1219 /* If builtin_valid_in_constant_expr_p is true,
1220 potential_constant_expression_1 has not recursed into the arguments
1221 of the builtin, verify it here. */
1222 if (!builtin_valid_in_constant_expr_p (fun)
1223 || potential_constant_expression (args[i]))
1224 args[i] = cxx_eval_constant_expression (&new_ctx, args[i], false,
1225 &dummy1, &dummy2);
1226 if (bi_const_p)
1227 /* For __built_in_constant_p, fold all expressions with constant values
1228 even if they aren't C++ constant-expressions. */
1229 args[i] = cp_fully_fold (args[i]);
1232 bool save_ffbcp = force_folding_builtin_constant_p;
1233 force_folding_builtin_constant_p = true;
1234 new_call = fold_builtin_call_array (EXPR_LOCATION (t), TREE_TYPE (t),
1235 CALL_EXPR_FN (t), nargs, args);
1236 force_folding_builtin_constant_p = save_ffbcp;
1237 if (new_call == NULL)
1239 if (!*non_constant_p && !ctx->quiet)
1241 /* Do not allow__builtin_unreachable in constexpr function.
1242 The __builtin_unreachable call with BUILTINS_LOCATION
1243 comes from cp_maybe_instrument_return. */
1244 if (fndecl_built_in_p (fun, BUILT_IN_UNREACHABLE)
1245 && EXPR_LOCATION (t) == BUILTINS_LOCATION)
1246 error ("%<constexpr%> call flows off the end of the function");
1247 else
1249 new_call = build_call_array_loc (EXPR_LOCATION (t), TREE_TYPE (t),
1250 CALL_EXPR_FN (t), nargs, args);
1251 error ("%q+E is not a constant expression", new_call);
1254 *non_constant_p = true;
1255 return t;
1258 if (!is_constant_expression (new_call))
1260 if (!*non_constant_p && !ctx->quiet)
1261 error ("%q+E is not a constant expression", new_call);
1262 *non_constant_p = true;
1263 return t;
1266 return cxx_eval_constant_expression (&new_ctx, new_call, lval,
1267 non_constant_p, overflow_p);
1270 /* TEMP is the constant value of a temporary object of type TYPE. Adjust
1271 the type of the value to match. */
1273 static tree
1274 adjust_temp_type (tree type, tree temp)
1276 if (TREE_TYPE (temp) == type)
1277 return temp;
1278 /* Avoid wrapping an aggregate value in a NOP_EXPR. */
1279 if (TREE_CODE (temp) == CONSTRUCTOR)
1280 return build_constructor (type, CONSTRUCTOR_ELTS (temp));
1281 gcc_assert (scalarish_type_p (type));
1282 return cp_fold_convert (type, temp);
1285 /* Callback for walk_tree used by unshare_constructor. */
1287 static tree
1288 find_constructor (tree *tp, int *walk_subtrees, void *)
1290 if (TYPE_P (*tp))
1291 *walk_subtrees = 0;
1292 if (TREE_CODE (*tp) == CONSTRUCTOR)
1293 return *tp;
1294 return NULL_TREE;
1297 /* If T is a CONSTRUCTOR or an expression that has a CONSTRUCTOR node as a
1298 subexpression, return an unshared copy of T. Otherwise return T. */
1300 static tree
1301 unshare_constructor (tree t)
1303 tree ctor = walk_tree (&t, find_constructor, NULL, NULL);
1304 if (ctor != NULL_TREE)
1305 return unshare_expr (t);
1306 return t;
1309 /* Subroutine of cxx_eval_call_expression.
1310 We are processing a call expression (either CALL_EXPR or
1311 AGGR_INIT_EXPR) in the context of CTX. Evaluate
1312 all arguments and bind their values to correspondings
1313 parameters, making up the NEW_CALL context. */
1315 static void
1316 cxx_bind_parameters_in_call (const constexpr_ctx *ctx, tree t,
1317 constexpr_call *new_call,
1318 bool *non_constant_p, bool *overflow_p,
1319 bool *non_constant_args)
1321 const int nargs = call_expr_nargs (t);
1322 tree fun = new_call->fundef->decl;
1323 tree parms = DECL_ARGUMENTS (fun);
1324 int i;
1325 tree *p = &new_call->bindings;
1326 for (i = 0; i < nargs; ++i)
1328 tree x, arg;
1329 tree type = parms ? TREE_TYPE (parms) : void_type_node;
1330 x = get_nth_callarg (t, i);
1331 /* For member function, the first argument is a pointer to the implied
1332 object. For a constructor, it might still be a dummy object, in
1333 which case we get the real argument from ctx. */
1334 if (i == 0 && DECL_CONSTRUCTOR_P (fun)
1335 && is_dummy_object (x))
1337 x = ctx->object;
1338 x = build_address (x);
1340 arg = cxx_eval_constant_expression (ctx, x, /*lval=*/false,
1341 non_constant_p, overflow_p);
1342 /* Don't VERIFY_CONSTANT here. */
1343 if (*non_constant_p && ctx->quiet)
1344 return;
1345 /* Just discard ellipsis args after checking their constantitude. */
1346 if (!parms)
1347 continue;
1349 if (!*non_constant_p)
1351 /* Don't share a CONSTRUCTOR that might be changed. */
1352 arg = unshare_constructor (arg);
1353 /* Make sure the binding has the same type as the parm. But
1354 only for constant args. */
1355 if (!TYPE_REF_P (type))
1356 arg = adjust_temp_type (type, arg);
1357 if (!TREE_CONSTANT (arg))
1358 *non_constant_args = true;
1359 *p = build_tree_list (parms, arg);
1360 p = &TREE_CHAIN (*p);
1362 parms = TREE_CHAIN (parms);
1366 /* Variables and functions to manage constexpr call expansion context.
1367 These do not need to be marked for PCH or GC. */
1369 /* FIXME remember and print actual constant arguments. */
1370 static vec<tree> call_stack;
1371 static int call_stack_tick;
1372 static int last_cx_error_tick;
1374 static bool
1375 push_cx_call_context (tree call)
1377 ++call_stack_tick;
1378 if (!EXPR_HAS_LOCATION (call))
1379 SET_EXPR_LOCATION (call, input_location);
1380 call_stack.safe_push (call);
1381 if (call_stack.length () > (unsigned) max_constexpr_depth)
1382 return false;
1383 return true;
1386 static void
1387 pop_cx_call_context (void)
1389 ++call_stack_tick;
1390 call_stack.pop ();
1393 vec<tree>
1394 cx_error_context (void)
1396 vec<tree> r = vNULL;
1397 if (call_stack_tick != last_cx_error_tick
1398 && !call_stack.is_empty ())
1399 r = call_stack;
1400 last_cx_error_tick = call_stack_tick;
1401 return r;
1404 /* Evaluate a call T to a GCC internal function when possible and return
1405 the evaluated result or, under the control of CTX, give an error, set
1406 NON_CONSTANT_P, and return the unevaluated call T otherwise. */
1408 static tree
1409 cxx_eval_internal_function (const constexpr_ctx *ctx, tree t,
1410 bool lval,
1411 bool *non_constant_p, bool *overflow_p)
1413 enum tree_code opcode = ERROR_MARK;
1415 switch (CALL_EXPR_IFN (t))
1417 case IFN_UBSAN_NULL:
1418 case IFN_UBSAN_BOUNDS:
1419 case IFN_UBSAN_VPTR:
1420 case IFN_FALLTHROUGH:
1421 return void_node;
1423 case IFN_ADD_OVERFLOW:
1424 opcode = PLUS_EXPR;
1425 break;
1426 case IFN_SUB_OVERFLOW:
1427 opcode = MINUS_EXPR;
1428 break;
1429 case IFN_MUL_OVERFLOW:
1430 opcode = MULT_EXPR;
1431 break;
1433 case IFN_LAUNDER:
1434 return cxx_eval_constant_expression (ctx, CALL_EXPR_ARG (t, 0),
1435 false, non_constant_p, overflow_p);
1437 default:
1438 if (!ctx->quiet)
1439 error_at (cp_expr_loc_or_loc (t, input_location),
1440 "call to internal function %qE", t);
1441 *non_constant_p = true;
1442 return t;
1445 /* Evaluate constant arguments using OPCODE and return a complex
1446 number containing the result and the overflow bit. */
1447 tree arg0 = cxx_eval_constant_expression (ctx, CALL_EXPR_ARG (t, 0), lval,
1448 non_constant_p, overflow_p);
1449 tree arg1 = cxx_eval_constant_expression (ctx, CALL_EXPR_ARG (t, 1), lval,
1450 non_constant_p, overflow_p);
1452 if (TREE_CODE (arg0) == INTEGER_CST && TREE_CODE (arg1) == INTEGER_CST)
1454 location_t loc = cp_expr_loc_or_loc (t, input_location);
1455 tree type = TREE_TYPE (TREE_TYPE (t));
1456 tree result = fold_binary_loc (loc, opcode, type,
1457 fold_convert_loc (loc, type, arg0),
1458 fold_convert_loc (loc, type, arg1));
1459 tree ovf
1460 = build_int_cst (type, arith_overflowed_p (opcode, type, arg0, arg1));
1461 /* Reset TREE_OVERFLOW to avoid warnings for the overflow. */
1462 if (TREE_OVERFLOW (result))
1463 TREE_OVERFLOW (result) = 0;
1465 return build_complex (TREE_TYPE (t), result, ovf);
1468 *non_constant_p = true;
1469 return t;
1472 /* Clean CONSTRUCTOR_NO_CLEARING from CTOR and its sub-aggregates. */
1474 static void
1475 clear_no_implicit_zero (tree ctor)
1477 if (CONSTRUCTOR_NO_CLEARING (ctor))
1479 CONSTRUCTOR_NO_CLEARING (ctor) = false;
1480 tree elt; unsigned HOST_WIDE_INT idx;
1481 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), idx, elt)
1482 if (TREE_CODE (elt) == CONSTRUCTOR)
1483 clear_no_implicit_zero (elt);
1487 /* Subroutine of cxx_eval_constant_expression.
1488 Evaluate the call expression tree T in the context of OLD_CALL expression
1489 evaluation. */
1491 static tree
1492 cxx_eval_call_expression (const constexpr_ctx *ctx, tree t,
1493 bool lval,
1494 bool *non_constant_p, bool *overflow_p)
1496 location_t loc = cp_expr_loc_or_loc (t, input_location);
1497 tree fun = get_function_named_in_call (t);
1498 constexpr_call new_call = { NULL, NULL, NULL, 0 };
1499 bool depth_ok;
1501 if (fun == NULL_TREE)
1502 return cxx_eval_internal_function (ctx, t, lval,
1503 non_constant_p, overflow_p);
1505 if (TREE_CODE (fun) != FUNCTION_DECL)
1507 /* Might be a constexpr function pointer. */
1508 fun = cxx_eval_constant_expression (ctx, fun,
1509 /*lval*/false, non_constant_p,
1510 overflow_p);
1511 STRIP_NOPS (fun);
1512 if (TREE_CODE (fun) == ADDR_EXPR)
1513 fun = TREE_OPERAND (fun, 0);
1515 if (TREE_CODE (fun) != FUNCTION_DECL)
1517 if (!ctx->quiet && !*non_constant_p)
1518 error_at (loc, "expression %qE does not designate a %<constexpr%> "
1519 "function", fun);
1520 *non_constant_p = true;
1521 return t;
1523 if (DECL_CLONED_FUNCTION_P (fun))
1524 fun = DECL_CLONED_FUNCTION (fun);
1526 if (is_ubsan_builtin_p (fun))
1527 return void_node;
1529 if (fndecl_built_in_p (fun))
1530 return cxx_eval_builtin_function_call (ctx, t, fun,
1531 lval, non_constant_p, overflow_p);
1532 if (!DECL_DECLARED_CONSTEXPR_P (fun))
1534 if (!ctx->quiet)
1536 if (!lambda_static_thunk_p (fun))
1537 error_at (loc, "call to non-%<constexpr%> function %qD", fun);
1538 explain_invalid_constexpr_fn (fun);
1540 *non_constant_p = true;
1541 return t;
1544 constexpr_ctx new_ctx = *ctx;
1545 if (DECL_CONSTRUCTOR_P (fun) && !ctx->object
1546 && TREE_CODE (t) == AGGR_INIT_EXPR)
1548 /* We want to have an initialization target for an AGGR_INIT_EXPR.
1549 If we don't already have one in CTX, use the AGGR_INIT_EXPR_SLOT. */
1550 new_ctx.object = AGGR_INIT_EXPR_SLOT (t);
1551 tree ctor = new_ctx.ctor = build_constructor (DECL_CONTEXT (fun), NULL);
1552 CONSTRUCTOR_NO_CLEARING (ctor) = true;
1553 ctx->values->put (new_ctx.object, ctor);
1554 ctx = &new_ctx;
1557 /* Shortcut trivial constructor/op=. */
1558 if (trivial_fn_p (fun))
1560 tree init = NULL_TREE;
1561 if (call_expr_nargs (t) == 2)
1562 init = convert_from_reference (get_nth_callarg (t, 1));
1563 else if (TREE_CODE (t) == AGGR_INIT_EXPR
1564 && AGGR_INIT_ZERO_FIRST (t))
1565 init = build_zero_init (DECL_CONTEXT (fun), NULL_TREE, false);
1566 if (init)
1568 tree op = get_nth_callarg (t, 0);
1569 if (is_dummy_object (op))
1570 op = ctx->object;
1571 else
1572 op = build1 (INDIRECT_REF, TREE_TYPE (TREE_TYPE (op)), op);
1573 tree set = build2 (MODIFY_EXPR, TREE_TYPE (op), op, init);
1574 new_ctx.call = &new_call;
1575 return cxx_eval_constant_expression (&new_ctx, set, lval,
1576 non_constant_p, overflow_p);
1580 /* We can't defer instantiating the function any longer. */
1581 if (!DECL_INITIAL (fun)
1582 && DECL_TEMPLOID_INSTANTIATION (fun))
1584 location_t save_loc = input_location;
1585 input_location = loc;
1586 ++function_depth;
1587 instantiate_decl (fun, /*defer_ok*/false, /*expl_inst*/false);
1588 --function_depth;
1589 input_location = save_loc;
1592 /* If in direct recursive call, optimize definition search. */
1593 if (ctx && ctx->call && ctx->call->fundef && ctx->call->fundef->decl == fun)
1594 new_call.fundef = ctx->call->fundef;
1595 else
1597 new_call.fundef = retrieve_constexpr_fundef (fun);
1598 if (new_call.fundef == NULL || new_call.fundef->body == NULL
1599 || fun == current_function_decl)
1601 if (!ctx->quiet)
1603 /* We need to check for current_function_decl here in case we're
1604 being called during cp_fold_function, because at that point
1605 DECL_INITIAL is set properly and we have a fundef but we
1606 haven't lowered invisirefs yet (c++/70344). */
1607 if (DECL_INITIAL (fun) == error_mark_node
1608 || fun == current_function_decl)
1609 error_at (loc, "%qD called in a constant expression before its "
1610 "definition is complete", fun);
1611 else if (DECL_INITIAL (fun))
1613 /* The definition of fun was somehow unsuitable. But pretend
1614 that lambda static thunks don't exist. */
1615 if (!lambda_static_thunk_p (fun))
1616 error_at (loc, "%qD called in a constant expression", fun);
1617 explain_invalid_constexpr_fn (fun);
1619 else
1620 error_at (loc, "%qD used before its definition", fun);
1622 *non_constant_p = true;
1623 return t;
1627 bool non_constant_args = false;
1628 cxx_bind_parameters_in_call (ctx, t, &new_call,
1629 non_constant_p, overflow_p, &non_constant_args);
1630 if (*non_constant_p)
1631 return t;
1633 depth_ok = push_cx_call_context (t);
1635 tree result = NULL_TREE;
1637 constexpr_call *entry = NULL;
1638 if (depth_ok && !non_constant_args && ctx->strict)
1640 new_call.hash = iterative_hash_template_arg
1641 (new_call.bindings, constexpr_fundef_hasher::hash (new_call.fundef));
1643 /* If we have seen this call before, we are done. */
1644 maybe_initialize_constexpr_call_table ();
1645 constexpr_call **slot
1646 = constexpr_call_table->find_slot (&new_call, INSERT);
1647 entry = *slot;
1648 if (entry == NULL)
1650 /* We need to keep a pointer to the entry, not just the slot, as the
1651 slot can move in the call to cxx_eval_builtin_function_call. */
1652 *slot = entry = ggc_alloc<constexpr_call> ();
1653 *entry = new_call;
1655 /* Calls that are in progress have their result set to NULL,
1656 so that we can detect circular dependencies. */
1657 else if (entry->result == NULL)
1659 if (!ctx->quiet)
1660 error ("call has circular dependency");
1661 *non_constant_p = true;
1662 entry->result = result = error_mark_node;
1664 else
1665 result = entry->result;
1668 if (!depth_ok)
1670 if (!ctx->quiet)
1671 error ("%<constexpr%> evaluation depth exceeds maximum of %d (use "
1672 "%<-fconstexpr-depth=%> to increase the maximum)",
1673 max_constexpr_depth);
1674 *non_constant_p = true;
1675 result = error_mark_node;
1677 else
1679 if (result && result != error_mark_node)
1680 /* OK */;
1681 else if (!DECL_SAVED_TREE (fun))
1683 /* When at_eof >= 2, cgraph has started throwing away
1684 DECL_SAVED_TREE, so fail quietly. FIXME we get here because of
1685 late code generation for VEC_INIT_EXPR, which needs to be
1686 completely reconsidered. */
1687 gcc_assert (at_eof >= 2 && ctx->quiet);
1688 *non_constant_p = true;
1690 else
1692 tree body, parms, res;
1694 /* Reuse or create a new unshared copy of this function's body. */
1695 tree copy = get_fundef_copy (fun);
1696 body = TREE_PURPOSE (copy);
1697 parms = TREE_VALUE (copy);
1698 res = TREE_TYPE (copy);
1700 /* Associate the bindings with the remapped parms. */
1701 tree bound = new_call.bindings;
1702 tree remapped = parms;
1703 while (bound)
1705 tree oparm = TREE_PURPOSE (bound);
1706 tree arg = TREE_VALUE (bound);
1707 gcc_assert (DECL_NAME (remapped) == DECL_NAME (oparm));
1708 /* Don't share a CONSTRUCTOR that might be changed. */
1709 arg = unshare_constructor (arg);
1710 ctx->values->put (remapped, arg);
1711 bound = TREE_CHAIN (bound);
1712 remapped = DECL_CHAIN (remapped);
1714 /* Add the RESULT_DECL to the values map, too. */
1715 tree slot = NULL_TREE;
1716 if (DECL_BY_REFERENCE (res))
1718 slot = AGGR_INIT_EXPR_SLOT (t);
1719 tree addr = build_address (slot);
1720 addr = build_nop (TREE_TYPE (res), addr);
1721 ctx->values->put (res, addr);
1722 ctx->values->put (slot, NULL_TREE);
1724 else
1725 ctx->values->put (res, NULL_TREE);
1727 /* Track the callee's evaluated SAVE_EXPRs so that we can forget
1728 their values after the call. */
1729 constexpr_ctx ctx_with_save_exprs = *ctx;
1730 hash_set<tree> save_exprs;
1731 ctx_with_save_exprs.save_exprs = &save_exprs;
1732 ctx_with_save_exprs.call = &new_call;
1734 tree jump_target = NULL_TREE;
1735 cxx_eval_constant_expression (&ctx_with_save_exprs, body,
1736 lval, non_constant_p, overflow_p,
1737 &jump_target);
1739 if (DECL_CONSTRUCTOR_P (fun))
1740 /* This can be null for a subobject constructor call, in
1741 which case what we care about is the initialization
1742 side-effects rather than the value. We could get at the
1743 value by evaluating *this, but we don't bother; there's
1744 no need to put such a call in the hash table. */
1745 result = lval ? ctx->object : ctx->ctor;
1746 else if (VOID_TYPE_P (TREE_TYPE (res)))
1747 result = void_node;
1748 else
1750 result = *ctx->values->get (slot ? slot : res);
1751 if (result == NULL_TREE && !*non_constant_p)
1753 if (!ctx->quiet)
1754 error ("%<constexpr%> call flows off the end "
1755 "of the function");
1756 *non_constant_p = true;
1760 /* Forget the saved values of the callee's SAVE_EXPRs. */
1761 for (hash_set<tree>::iterator iter = save_exprs.begin();
1762 iter != save_exprs.end(); ++iter)
1763 ctx_with_save_exprs.values->remove (*iter);
1765 /* Remove the parms/result from the values map. Is it worth
1766 bothering to do this when the map itself is only live for
1767 one constexpr evaluation? If so, maybe also clear out
1768 other vars from call, maybe in BIND_EXPR handling? */
1769 ctx->values->remove (res);
1770 if (slot)
1771 ctx->values->remove (slot);
1772 for (tree parm = parms; parm; parm = TREE_CHAIN (parm))
1773 ctx->values->remove (parm);
1775 /* Make the unshared function copy we used available for re-use. */
1776 save_fundef_copy (fun, copy);
1779 if (result == error_mark_node)
1780 *non_constant_p = true;
1781 if (*non_constant_p || *overflow_p)
1782 result = error_mark_node;
1783 else if (!result)
1784 result = void_node;
1785 if (entry)
1786 entry->result = result;
1789 /* The result of a constexpr function must be completely initialized. */
1790 if (TREE_CODE (result) == CONSTRUCTOR)
1791 clear_no_implicit_zero (result);
1793 pop_cx_call_context ();
1794 return unshare_constructor (result);
1797 /* FIXME speed this up, it's taking 16% of compile time on sieve testcase. */
1799 bool
1800 reduced_constant_expression_p (tree t)
1802 if (t == NULL_TREE)
1803 return false;
1805 switch (TREE_CODE (t))
1807 case PTRMEM_CST:
1808 /* Even if we can't lower this yet, it's constant. */
1809 return true;
1811 case CONSTRUCTOR:
1812 /* And we need to handle PTRMEM_CST wrapped in a CONSTRUCTOR. */
1813 tree idx, val, field; unsigned HOST_WIDE_INT i;
1814 if (CONSTRUCTOR_NO_CLEARING (t))
1816 if (TREE_CODE (TREE_TYPE (t)) == VECTOR_TYPE)
1817 /* An initialized vector would have a VECTOR_CST. */
1818 return false;
1819 else
1820 field = next_initializable_field (TYPE_FIELDS (TREE_TYPE (t)));
1822 else
1823 field = NULL_TREE;
1824 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (t), i, idx, val)
1826 /* If VAL is null, we're in the middle of initializing this
1827 element. */
1828 if (!reduced_constant_expression_p (val))
1829 return false;
1830 if (field)
1832 if (idx != field)
1833 return false;
1834 field = next_initializable_field (DECL_CHAIN (field));
1837 if (field)
1838 return false;
1839 else if (CONSTRUCTOR_NO_CLEARING (t))
1840 /* All the fields are initialized. */
1841 CONSTRUCTOR_NO_CLEARING (t) = false;
1842 return true;
1844 default:
1845 /* FIXME are we calling this too much? */
1846 return initializer_constant_valid_p (t, TREE_TYPE (t)) != NULL_TREE;
1850 /* Some expressions may have constant operands but are not constant
1851 themselves, such as 1/0. Call this function to check for that
1852 condition.
1854 We only call this in places that require an arithmetic constant, not in
1855 places where we might have a non-constant expression that can be a
1856 component of a constant expression, such as the address of a constexpr
1857 variable that might be dereferenced later. */
1859 static bool
1860 verify_constant (tree t, bool allow_non_constant, bool *non_constant_p,
1861 bool *overflow_p)
1863 if (!*non_constant_p && !reduced_constant_expression_p (t))
1865 if (!allow_non_constant)
1866 error ("%q+E is not a constant expression", t);
1867 *non_constant_p = true;
1869 if (TREE_OVERFLOW_P (t))
1871 if (!allow_non_constant)
1873 permerror (input_location, "overflow in constant expression");
1874 /* If we're being permissive (and are in an enforcing
1875 context), ignore the overflow. */
1876 if (flag_permissive)
1877 return *non_constant_p;
1879 *overflow_p = true;
1881 return *non_constant_p;
1884 /* Check whether the shift operation with code CODE and type TYPE on LHS
1885 and RHS is undefined. If it is, give an error with an explanation,
1886 and return true; return false otherwise. */
1888 static bool
1889 cxx_eval_check_shift_p (location_t loc, const constexpr_ctx *ctx,
1890 enum tree_code code, tree type, tree lhs, tree rhs)
1892 if ((code != LSHIFT_EXPR && code != RSHIFT_EXPR)
1893 || TREE_CODE (lhs) != INTEGER_CST
1894 || TREE_CODE (rhs) != INTEGER_CST)
1895 return false;
1897 tree lhstype = TREE_TYPE (lhs);
1898 unsigned HOST_WIDE_INT uprec = TYPE_PRECISION (TREE_TYPE (lhs));
1900 /* [expr.shift] The behavior is undefined if the right operand
1901 is negative, or greater than or equal to the length in bits
1902 of the promoted left operand. */
1903 if (tree_int_cst_sgn (rhs) == -1)
1905 if (!ctx->quiet)
1906 permerror (loc, "right operand of shift expression %q+E is negative",
1907 build2_loc (loc, code, type, lhs, rhs));
1908 return (!flag_permissive || ctx->quiet);
1910 if (compare_tree_int (rhs, uprec) >= 0)
1912 if (!ctx->quiet)
1913 permerror (loc, "right operand of shift expression %q+E is >= than "
1914 "the precision of the left operand",
1915 build2_loc (loc, code, type, lhs, rhs));
1916 return (!flag_permissive || ctx->quiet);
1919 /* The value of E1 << E2 is E1 left-shifted E2 bit positions; [...]
1920 if E1 has a signed type and non-negative value, and E1x2^E2 is
1921 representable in the corresponding unsigned type of the result type,
1922 then that value, converted to the result type, is the resulting value;
1923 otherwise, the behavior is undefined. */
1924 if (code == LSHIFT_EXPR && !TYPE_UNSIGNED (lhstype)
1925 && (cxx_dialect >= cxx11))
1927 if (tree_int_cst_sgn (lhs) == -1)
1929 if (!ctx->quiet)
1930 permerror (loc,
1931 "left operand of shift expression %q+E is negative",
1932 build2_loc (loc, code, type, lhs, rhs));
1933 return (!flag_permissive || ctx->quiet);
1935 /* For signed x << y the following:
1936 (unsigned) x >> ((prec (lhs) - 1) - y)
1937 if > 1, is undefined. The right-hand side of this formula
1938 is the highest bit of the LHS that can be set (starting from 0),
1939 so that the shift doesn't overflow. We then right-shift the LHS
1940 to see whether any other bit is set making the original shift
1941 undefined -- the result is not representable in the corresponding
1942 unsigned type. */
1943 tree t = build_int_cst (unsigned_type_node, uprec - 1);
1944 t = fold_build2 (MINUS_EXPR, unsigned_type_node, t, rhs);
1945 tree ulhs = fold_convert (unsigned_type_for (lhstype), lhs);
1946 t = fold_build2 (RSHIFT_EXPR, TREE_TYPE (ulhs), ulhs, t);
1947 if (tree_int_cst_lt (integer_one_node, t))
1949 if (!ctx->quiet)
1950 permerror (loc, "shift expression %q+E overflows",
1951 build2_loc (loc, code, type, lhs, rhs));
1952 return (!flag_permissive || ctx->quiet);
1955 return false;
1958 /* Subroutine of cxx_eval_constant_expression.
1959 Attempt to reduce the unary expression tree T to a compile time value.
1960 If successful, return the value. Otherwise issue a diagnostic
1961 and return error_mark_node. */
1963 static tree
1964 cxx_eval_unary_expression (const constexpr_ctx *ctx, tree t,
1965 bool /*lval*/,
1966 bool *non_constant_p, bool *overflow_p)
1968 tree r;
1969 tree orig_arg = TREE_OPERAND (t, 0);
1970 tree arg = cxx_eval_constant_expression (ctx, orig_arg, /*lval*/false,
1971 non_constant_p, overflow_p);
1972 VERIFY_CONSTANT (arg);
1973 location_t loc = EXPR_LOCATION (t);
1974 enum tree_code code = TREE_CODE (t);
1975 tree type = TREE_TYPE (t);
1976 r = fold_unary_loc (loc, code, type, arg);
1977 if (r == NULL_TREE)
1979 if (arg == orig_arg)
1980 r = t;
1981 else
1982 r = build1_loc (loc, code, type, arg);
1984 VERIFY_CONSTANT (r);
1985 return r;
1988 /* Helper function for cxx_eval_binary_expression. Try to optimize
1989 original POINTER_PLUS_EXPR T, LHS p+ RHS, return NULL_TREE if the
1990 generic folding should be used. */
1992 static tree
1993 cxx_fold_pointer_plus_expression (const constexpr_ctx *ctx, tree t,
1994 tree lhs, tree rhs, bool *non_constant_p,
1995 bool *overflow_p)
1997 STRIP_NOPS (lhs);
1998 if (TREE_CODE (lhs) != ADDR_EXPR)
1999 return NULL_TREE;
2001 lhs = TREE_OPERAND (lhs, 0);
2003 /* &A[i] p+ j => &A[i + j] */
2004 if (TREE_CODE (lhs) == ARRAY_REF
2005 && TREE_CODE (TREE_OPERAND (lhs, 1)) == INTEGER_CST
2006 && TREE_CODE (rhs) == INTEGER_CST
2007 && TYPE_SIZE_UNIT (TREE_TYPE (lhs))
2008 && TREE_CODE (TYPE_SIZE_UNIT (TREE_TYPE (lhs))) == INTEGER_CST)
2010 tree orig_type = TREE_TYPE (t);
2011 location_t loc = EXPR_LOCATION (t);
2012 tree type = TREE_TYPE (lhs);
2014 t = fold_convert_loc (loc, ssizetype, TREE_OPERAND (lhs, 1));
2015 tree nelts = array_type_nelts_top (TREE_TYPE (TREE_OPERAND (lhs, 0)));
2016 nelts = cxx_eval_constant_expression (ctx, nelts, false, non_constant_p,
2017 overflow_p);
2018 if (*non_constant_p)
2019 return NULL_TREE;
2020 /* Don't fold an out-of-bound access. */
2021 if (!tree_int_cst_le (t, nelts))
2022 return NULL_TREE;
2023 rhs = cp_fold_convert (ssizetype, rhs);
2024 /* Don't fold if rhs can't be divided exactly by TYPE_SIZE_UNIT.
2025 constexpr int A[1]; ... (char *)&A[0] + 1 */
2026 if (!integer_zerop (fold_build2_loc (loc, TRUNC_MOD_EXPR, sizetype,
2027 rhs, TYPE_SIZE_UNIT (type))))
2028 return NULL_TREE;
2029 /* Make sure to treat the second operand of POINTER_PLUS_EXPR
2030 as signed. */
2031 rhs = fold_build2_loc (loc, EXACT_DIV_EXPR, ssizetype, rhs,
2032 TYPE_SIZE_UNIT (type));
2033 t = size_binop_loc (loc, PLUS_EXPR, rhs, t);
2034 t = build4_loc (loc, ARRAY_REF, type, TREE_OPERAND (lhs, 0),
2035 t, NULL_TREE, NULL_TREE);
2036 t = cp_build_addr_expr (t, tf_warning_or_error);
2037 t = cp_fold_convert (orig_type, t);
2038 return cxx_eval_constant_expression (ctx, t, /*lval*/false,
2039 non_constant_p, overflow_p);
2042 return NULL_TREE;
2045 /* Subroutine of cxx_eval_constant_expression.
2046 Like cxx_eval_unary_expression, except for binary expressions. */
2048 static tree
2049 cxx_eval_binary_expression (const constexpr_ctx *ctx, tree t,
2050 bool /*lval*/,
2051 bool *non_constant_p, bool *overflow_p)
2053 tree r = NULL_TREE;
2054 tree orig_lhs = TREE_OPERAND (t, 0);
2055 tree orig_rhs = TREE_OPERAND (t, 1);
2056 tree lhs, rhs;
2057 lhs = cxx_eval_constant_expression (ctx, orig_lhs, /*lval*/false,
2058 non_constant_p, overflow_p);
2059 /* Don't VERIFY_CONSTANT here, it's unnecessary and will break pointer
2060 subtraction. */
2061 if (*non_constant_p)
2062 return t;
2063 rhs = cxx_eval_constant_expression (ctx, orig_rhs, /*lval*/false,
2064 non_constant_p, overflow_p);
2065 if (*non_constant_p)
2066 return t;
2068 location_t loc = EXPR_LOCATION (t);
2069 enum tree_code code = TREE_CODE (t);
2070 tree type = TREE_TYPE (t);
2072 if (code == EQ_EXPR || code == NE_EXPR)
2074 bool is_code_eq = (code == EQ_EXPR);
2076 if (TREE_CODE (lhs) == PTRMEM_CST
2077 && TREE_CODE (rhs) == PTRMEM_CST)
2079 tree lmem = PTRMEM_CST_MEMBER (lhs);
2080 tree rmem = PTRMEM_CST_MEMBER (rhs);
2081 bool eq;
2082 if (TREE_CODE (lmem) == TREE_CODE (rmem)
2083 && TREE_CODE (lmem) == FIELD_DECL
2084 && TREE_CODE (DECL_CONTEXT (lmem)) == UNION_TYPE
2085 && same_type_p (DECL_CONTEXT (lmem),
2086 DECL_CONTEXT (rmem)))
2087 /* If both refer to (possibly different) members of the same union
2088 (12.3), they compare equal. */
2089 eq = true;
2090 else
2091 eq = cp_tree_equal (lhs, rhs);
2092 r = constant_boolean_node (eq == is_code_eq, type);
2094 else if ((TREE_CODE (lhs) == PTRMEM_CST
2095 || TREE_CODE (rhs) == PTRMEM_CST)
2096 && (null_member_pointer_value_p (lhs)
2097 || null_member_pointer_value_p (rhs)))
2098 r = constant_boolean_node (!is_code_eq, type);
2099 else if (TREE_CODE (lhs) == PTRMEM_CST)
2100 lhs = cplus_expand_constant (lhs);
2101 else if (TREE_CODE (rhs) == PTRMEM_CST)
2102 rhs = cplus_expand_constant (rhs);
2104 if (code == POINTER_PLUS_EXPR && !*non_constant_p
2105 && integer_zerop (lhs) && !integer_zerop (rhs))
2107 if (!ctx->quiet)
2108 error ("arithmetic involving a null pointer in %qE", lhs);
2109 *non_constant_p = true;
2110 return t;
2112 else if (code == POINTER_PLUS_EXPR)
2113 r = cxx_fold_pointer_plus_expression (ctx, t, lhs, rhs, non_constant_p,
2114 overflow_p);
2116 if (r == NULL_TREE)
2117 r = fold_binary_loc (loc, code, type, lhs, rhs);
2119 if (r == NULL_TREE)
2121 if (lhs == orig_lhs && rhs == orig_rhs)
2122 r = t;
2123 else
2124 r = build2_loc (loc, code, type, lhs, rhs);
2126 else if (cxx_eval_check_shift_p (loc, ctx, code, type, lhs, rhs))
2127 *non_constant_p = true;
2128 /* Don't VERIFY_CONSTANT if this might be dealing with a pointer to
2129 a local array in a constexpr function. */
2130 bool ptr = INDIRECT_TYPE_P (TREE_TYPE (lhs));
2131 if (!ptr)
2132 VERIFY_CONSTANT (r);
2133 return r;
2136 /* Subroutine of cxx_eval_constant_expression.
2137 Attempt to evaluate condition expressions. Dead branches are not
2138 looked into. */
2140 static tree
2141 cxx_eval_conditional_expression (const constexpr_ctx *ctx, tree t,
2142 bool lval,
2143 bool *non_constant_p, bool *overflow_p,
2144 tree *jump_target)
2146 tree val = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0),
2147 /*lval*/false,
2148 non_constant_p, overflow_p);
2149 VERIFY_CONSTANT (val);
2150 /* Don't VERIFY_CONSTANT the other operands. */
2151 if (integer_zerop (val))
2152 return cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 2),
2153 lval,
2154 non_constant_p, overflow_p,
2155 jump_target);
2156 return cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 1),
2157 lval,
2158 non_constant_p, overflow_p,
2159 jump_target);
2162 /* Subroutine of cxx_eval_constant_expression.
2163 Attempt to evaluate vector condition expressions. Unlike
2164 cxx_eval_conditional_expression, VEC_COND_EXPR acts like a normal
2165 ternary arithmetics operation, where all 3 arguments have to be
2166 evaluated as constants and then folding computes the result from
2167 them. */
2169 static tree
2170 cxx_eval_vector_conditional_expression (const constexpr_ctx *ctx, tree t,
2171 bool *non_constant_p, bool *overflow_p)
2173 tree arg1 = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0),
2174 /*lval*/false,
2175 non_constant_p, overflow_p);
2176 VERIFY_CONSTANT (arg1);
2177 tree arg2 = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 1),
2178 /*lval*/false,
2179 non_constant_p, overflow_p);
2180 VERIFY_CONSTANT (arg2);
2181 tree arg3 = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 2),
2182 /*lval*/false,
2183 non_constant_p, overflow_p);
2184 VERIFY_CONSTANT (arg3);
2185 location_t loc = EXPR_LOCATION (t);
2186 tree type = TREE_TYPE (t);
2187 tree r = fold_ternary_loc (loc, VEC_COND_EXPR, type, arg1, arg2, arg3);
2188 if (r == NULL_TREE)
2190 if (arg1 == TREE_OPERAND (t, 0)
2191 && arg2 == TREE_OPERAND (t, 1)
2192 && arg3 == TREE_OPERAND (t, 2))
2193 r = t;
2194 else
2195 r = build3_loc (loc, VEC_COND_EXPR, type, arg1, arg2, arg3);
2197 VERIFY_CONSTANT (r);
2198 return r;
2201 /* Returns less than, equal to, or greater than zero if KEY is found to be
2202 less than, to match, or to be greater than the constructor_elt's INDEX. */
2204 static int
2205 array_index_cmp (tree key, tree index)
2207 gcc_assert (TREE_CODE (key) == INTEGER_CST);
2209 switch (TREE_CODE (index))
2211 case INTEGER_CST:
2212 return tree_int_cst_compare (key, index);
2213 case RANGE_EXPR:
2215 tree lo = TREE_OPERAND (index, 0);
2216 tree hi = TREE_OPERAND (index, 1);
2217 if (tree_int_cst_lt (key, lo))
2218 return -1;
2219 else if (tree_int_cst_lt (hi, key))
2220 return 1;
2221 else
2222 return 0;
2224 default:
2225 gcc_unreachable ();
2229 /* Returns the index of the constructor_elt of ARY which matches DINDEX, or -1
2230 if none. If INSERT is true, insert a matching element rather than fail. */
2232 static HOST_WIDE_INT
2233 find_array_ctor_elt (tree ary, tree dindex, bool insert = false)
2235 if (tree_int_cst_sgn (dindex) < 0)
2236 return -1;
2238 unsigned HOST_WIDE_INT i = tree_to_uhwi (dindex);
2239 vec<constructor_elt, va_gc> *elts = CONSTRUCTOR_ELTS (ary);
2240 unsigned HOST_WIDE_INT len = vec_safe_length (elts);
2242 unsigned HOST_WIDE_INT end = len;
2243 unsigned HOST_WIDE_INT begin = 0;
2245 /* If the last element of the CONSTRUCTOR has its own index, we can assume
2246 that the same is true of the other elements and index directly. */
2247 if (end > 0)
2249 tree cindex = (*elts)[end - 1].index;
2250 if (TREE_CODE (cindex) == INTEGER_CST
2251 && compare_tree_int (cindex, end - 1) == 0)
2253 if (i < end)
2254 return i;
2255 else
2256 begin = end;
2260 /* Otherwise, find a matching index by means of a binary search. */
2261 while (begin != end)
2263 unsigned HOST_WIDE_INT middle = (begin + end) / 2;
2264 constructor_elt &elt = (*elts)[middle];
2265 tree idx = elt.index;
2267 int cmp = array_index_cmp (dindex, idx);
2268 if (cmp < 0)
2269 end = middle;
2270 else if (cmp > 0)
2271 begin = middle + 1;
2272 else
2274 if (insert && TREE_CODE (idx) == RANGE_EXPR)
2276 /* We need to split the range. */
2277 constructor_elt e;
2278 tree lo = TREE_OPERAND (idx, 0);
2279 tree hi = TREE_OPERAND (idx, 1);
2280 tree value = elt.value;
2281 dindex = fold_convert (sizetype, dindex);
2282 if (tree_int_cst_lt (lo, dindex))
2284 /* There are still some lower elts; shorten the range. */
2285 tree new_hi = int_const_binop (MINUS_EXPR, dindex,
2286 size_one_node);
2287 if (tree_int_cst_equal (lo, new_hi))
2288 /* Only one element left, no longer a range. */
2289 elt.index = lo;
2290 else
2291 TREE_OPERAND (idx, 1) = new_hi;
2292 /* Append the element we want to insert. */
2293 ++middle;
2294 e.index = dindex;
2295 e.value = unshare_constructor (value);
2296 vec_safe_insert (CONSTRUCTOR_ELTS (ary), middle, e);
2298 else
2299 /* No lower elts, the range elt is now ours. */
2300 elt.index = dindex;
2302 if (tree_int_cst_lt (dindex, hi))
2304 /* There are still some higher elts; append a range. */
2305 tree new_lo = int_const_binop (PLUS_EXPR, dindex,
2306 size_one_node);
2307 if (tree_int_cst_equal (new_lo, hi))
2308 e.index = hi;
2309 else
2310 e.index = build2 (RANGE_EXPR, sizetype, new_lo, hi);
2311 e.value = unshare_constructor (value);
2312 vec_safe_insert (CONSTRUCTOR_ELTS (ary), middle + 1, e);
2315 return middle;
2319 if (insert)
2321 constructor_elt e = { dindex, NULL_TREE };
2322 vec_safe_insert (CONSTRUCTOR_ELTS (ary), end, e);
2323 return end;
2326 return -1;
2329 /* Under the control of CTX, issue a detailed diagnostic for
2330 an out-of-bounds subscript INDEX into the expression ARRAY. */
2332 static void
2333 diag_array_subscript (const constexpr_ctx *ctx, tree array, tree index)
2335 if (!ctx->quiet)
2337 tree arraytype = TREE_TYPE (array);
2339 /* Convert the unsigned array subscript to a signed integer to avoid
2340 printing huge numbers for small negative values. */
2341 tree sidx = fold_convert (ssizetype, index);
2342 if (DECL_P (array))
2344 if (TYPE_DOMAIN (arraytype))
2345 error ("array subscript value %qE is outside the bounds "
2346 "of array %qD of type %qT", sidx, array, arraytype);
2347 else
2348 error ("non-zero array subscript %qE is used with array %qD of "
2349 "type %qT with unknown bounds", sidx, array, arraytype);
2350 inform (DECL_SOURCE_LOCATION (array), "declared here");
2352 else if (TYPE_DOMAIN (arraytype))
2353 error ("array subscript value %qE is outside the bounds "
2354 "of array type %qT", sidx, arraytype);
2355 else
2356 error ("non-zero array subscript %qE is used with array of type %qT "
2357 "with unknown bounds", sidx, arraytype);
2361 /* Return the number of elements for TYPE (which is an ARRAY_TYPE or
2362 a VECTOR_TYPE). */
2364 static tree
2365 get_array_or_vector_nelts (const constexpr_ctx *ctx, tree type,
2366 bool *non_constant_p, bool *overflow_p)
2368 tree nelts;
2369 if (TREE_CODE (type) == ARRAY_TYPE)
2371 if (TYPE_DOMAIN (type))
2372 nelts = array_type_nelts_top (type);
2373 else
2374 nelts = size_zero_node;
2376 else if (VECTOR_TYPE_P (type))
2377 nelts = size_int (TYPE_VECTOR_SUBPARTS (type));
2378 else
2379 gcc_unreachable ();
2381 /* For VLAs, the number of elements won't be an integer constant. */
2382 nelts = cxx_eval_constant_expression (ctx, nelts, false,
2383 non_constant_p, overflow_p);
2384 return nelts;
2387 /* Extract element INDEX consisting of CHARS_PER_ELT chars from
2388 STRING_CST STRING. */
2390 static tree
2391 extract_string_elt (tree string, unsigned chars_per_elt, unsigned index)
2393 tree type = cv_unqualified (TREE_TYPE (TREE_TYPE (string)));
2394 tree r;
2396 if (chars_per_elt == 1)
2397 r = build_int_cst (type, TREE_STRING_POINTER (string)[index]);
2398 else
2400 const unsigned char *ptr
2401 = ((const unsigned char *)TREE_STRING_POINTER (string)
2402 + index * chars_per_elt);
2403 r = native_interpret_expr (type, ptr, chars_per_elt);
2405 return r;
2408 /* Subroutine of cxx_eval_constant_expression.
2409 Attempt to reduce a reference to an array slot. */
2411 static tree
2412 cxx_eval_array_reference (const constexpr_ctx *ctx, tree t,
2413 bool lval,
2414 bool *non_constant_p, bool *overflow_p)
2416 tree oldary = TREE_OPERAND (t, 0);
2417 tree ary = cxx_eval_constant_expression (ctx, oldary,
2418 lval,
2419 non_constant_p, overflow_p);
2420 tree index, oldidx;
2421 HOST_WIDE_INT i = 0;
2422 tree elem_type = NULL_TREE;
2423 unsigned len = 0, elem_nchars = 1;
2424 if (*non_constant_p)
2425 return t;
2426 oldidx = TREE_OPERAND (t, 1);
2427 index = cxx_eval_constant_expression (ctx, oldidx,
2428 false,
2429 non_constant_p, overflow_p);
2430 VERIFY_CONSTANT (index);
2431 if (!lval)
2433 elem_type = TREE_TYPE (TREE_TYPE (ary));
2434 if (TREE_CODE (ary) == VIEW_CONVERT_EXPR
2435 && VECTOR_TYPE_P (TREE_TYPE (TREE_OPERAND (ary, 0)))
2436 && TREE_TYPE (t) == TREE_TYPE (TREE_TYPE (TREE_OPERAND (ary, 0))))
2437 ary = TREE_OPERAND (ary, 0);
2438 if (TREE_CODE (ary) == CONSTRUCTOR)
2439 len = CONSTRUCTOR_NELTS (ary);
2440 else if (TREE_CODE (ary) == STRING_CST)
2442 elem_nchars = (TYPE_PRECISION (elem_type)
2443 / TYPE_PRECISION (char_type_node));
2444 len = (unsigned) TREE_STRING_LENGTH (ary) / elem_nchars;
2446 else if (TREE_CODE (ary) == VECTOR_CST)
2447 /* We don't create variable-length VECTOR_CSTs. */
2448 len = VECTOR_CST_NELTS (ary).to_constant ();
2449 else
2451 /* We can't do anything with other tree codes, so use
2452 VERIFY_CONSTANT to complain and fail. */
2453 VERIFY_CONSTANT (ary);
2454 gcc_unreachable ();
2457 if (!tree_fits_shwi_p (index)
2458 || (i = tree_to_shwi (index)) < 0)
2460 diag_array_subscript (ctx, ary, index);
2461 *non_constant_p = true;
2462 return t;
2466 tree nelts = get_array_or_vector_nelts (ctx, TREE_TYPE (ary), non_constant_p,
2467 overflow_p);
2468 VERIFY_CONSTANT (nelts);
2469 if ((lval
2470 ? !tree_int_cst_le (index, nelts)
2471 : !tree_int_cst_lt (index, nelts))
2472 || tree_int_cst_sgn (index) < 0)
2474 diag_array_subscript (ctx, ary, index);
2475 *non_constant_p = true;
2476 return t;
2479 if (lval && ary == oldary && index == oldidx)
2480 return t;
2481 else if (lval)
2482 return build4 (ARRAY_REF, TREE_TYPE (t), ary, index, NULL, NULL);
2484 bool found;
2485 if (TREE_CODE (ary) == CONSTRUCTOR)
2487 HOST_WIDE_INT ix = find_array_ctor_elt (ary, index);
2488 found = (ix >= 0);
2489 if (found)
2490 i = ix;
2492 else
2493 found = (i < len);
2495 if (found)
2497 tree r;
2498 if (TREE_CODE (ary) == CONSTRUCTOR)
2499 r = (*CONSTRUCTOR_ELTS (ary))[i].value;
2500 else if (TREE_CODE (ary) == VECTOR_CST)
2501 r = VECTOR_CST_ELT (ary, i);
2502 else
2503 r = extract_string_elt (ary, elem_nchars, i);
2505 if (r)
2506 /* Don't VERIFY_CONSTANT here. */
2507 return r;
2509 /* Otherwise the element doesn't have a value yet. */
2512 /* Not found. */
2514 if (TREE_CODE (ary) == CONSTRUCTOR
2515 && CONSTRUCTOR_NO_CLEARING (ary))
2517 /* 'ary' is part of the aggregate initializer we're currently
2518 building; if there's no initializer for this element yet,
2519 that's an error. */
2520 if (!ctx->quiet)
2521 error ("accessing uninitialized array element");
2522 *non_constant_p = true;
2523 return t;
2526 /* If it's within the array bounds but doesn't have an explicit
2527 initializer, it's value-initialized. */
2528 tree val = build_value_init (elem_type, tf_warning_or_error);
2529 return cxx_eval_constant_expression (ctx, val, lval, non_constant_p,
2530 overflow_p);
2533 /* Subroutine of cxx_eval_constant_expression.
2534 Attempt to reduce a field access of a value of class type. */
2536 static tree
2537 cxx_eval_component_reference (const constexpr_ctx *ctx, tree t,
2538 bool lval,
2539 bool *non_constant_p, bool *overflow_p)
2541 unsigned HOST_WIDE_INT i;
2542 tree field;
2543 tree value;
2544 tree part = TREE_OPERAND (t, 1);
2545 tree orig_whole = TREE_OPERAND (t, 0);
2546 tree whole = cxx_eval_constant_expression (ctx, orig_whole,
2547 lval,
2548 non_constant_p, overflow_p);
2549 if (INDIRECT_REF_P (whole)
2550 && integer_zerop (TREE_OPERAND (whole, 0)))
2552 if (!ctx->quiet)
2553 error ("dereferencing a null pointer in %qE", orig_whole);
2554 *non_constant_p = true;
2555 return t;
2558 if (TREE_CODE (whole) == PTRMEM_CST)
2559 whole = cplus_expand_constant (whole);
2560 if (whole == orig_whole)
2561 return t;
2562 if (lval)
2563 return fold_build3 (COMPONENT_REF, TREE_TYPE (t),
2564 whole, part, NULL_TREE);
2565 /* Don't VERIFY_CONSTANT here; we only want to check that we got a
2566 CONSTRUCTOR. */
2567 if (!*non_constant_p && TREE_CODE (whole) != CONSTRUCTOR)
2569 if (!ctx->quiet)
2570 error ("%qE is not a constant expression", orig_whole);
2571 *non_constant_p = true;
2573 if (DECL_MUTABLE_P (part))
2575 if (!ctx->quiet)
2576 error ("mutable %qD is not usable in a constant expression", part);
2577 *non_constant_p = true;
2579 if (*non_constant_p)
2580 return t;
2581 bool pmf = TYPE_PTRMEMFUNC_P (TREE_TYPE (whole));
2582 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (whole), i, field, value)
2584 /* Use name match for PMF fields, as a variant will have a
2585 different FIELD_DECL with a different type. */
2586 if (pmf ? DECL_NAME (field) == DECL_NAME (part)
2587 : field == part)
2589 if (value)
2590 return value;
2591 else
2592 /* We're in the middle of initializing it. */
2593 break;
2596 if (TREE_CODE (TREE_TYPE (whole)) == UNION_TYPE
2597 && CONSTRUCTOR_NELTS (whole) > 0)
2599 /* DR 1188 says we don't have to deal with this. */
2600 if (!ctx->quiet)
2601 error ("accessing %qD member instead of initialized %qD member in "
2602 "constant expression", part, CONSTRUCTOR_ELT (whole, 0)->index);
2603 *non_constant_p = true;
2604 return t;
2607 /* We only create a CONSTRUCTOR for a subobject when we modify it, so empty
2608 classes never get represented; throw together a value now. */
2609 if (is_really_empty_class (TREE_TYPE (t)))
2610 return build_constructor (TREE_TYPE (t), NULL);
2612 gcc_assert (DECL_CONTEXT (part) == TYPE_MAIN_VARIANT (TREE_TYPE (whole)));
2614 if (CONSTRUCTOR_NO_CLEARING (whole))
2616 /* 'whole' is part of the aggregate initializer we're currently
2617 building; if there's no initializer for this member yet, that's an
2618 error. */
2619 if (!ctx->quiet)
2620 error ("accessing uninitialized member %qD", part);
2621 *non_constant_p = true;
2622 return t;
2625 /* If there's no explicit init for this field, it's value-initialized. */
2626 value = build_value_init (TREE_TYPE (t), tf_warning_or_error);
2627 return cxx_eval_constant_expression (ctx, value,
2628 lval,
2629 non_constant_p, overflow_p);
2632 /* Subroutine of cxx_eval_constant_expression.
2633 Attempt to reduce a field access of a value of class type that is
2634 expressed as a BIT_FIELD_REF. */
2636 static tree
2637 cxx_eval_bit_field_ref (const constexpr_ctx *ctx, tree t,
2638 bool lval,
2639 bool *non_constant_p, bool *overflow_p)
2641 tree orig_whole = TREE_OPERAND (t, 0);
2642 tree retval, fldval, utype, mask;
2643 bool fld_seen = false;
2644 HOST_WIDE_INT istart, isize;
2645 tree whole = cxx_eval_constant_expression (ctx, orig_whole,
2646 lval,
2647 non_constant_p, overflow_p);
2648 tree start, field, value;
2649 unsigned HOST_WIDE_INT i;
2651 if (whole == orig_whole)
2652 return t;
2653 /* Don't VERIFY_CONSTANT here; we only want to check that we got a
2654 CONSTRUCTOR. */
2655 if (!*non_constant_p
2656 && TREE_CODE (whole) != VECTOR_CST
2657 && TREE_CODE (whole) != CONSTRUCTOR)
2659 if (!ctx->quiet)
2660 error ("%qE is not a constant expression", orig_whole);
2661 *non_constant_p = true;
2663 if (*non_constant_p)
2664 return t;
2666 if (TREE_CODE (whole) == VECTOR_CST)
2667 return fold_ternary (BIT_FIELD_REF, TREE_TYPE (t), whole,
2668 TREE_OPERAND (t, 1), TREE_OPERAND (t, 2));
2670 start = TREE_OPERAND (t, 2);
2671 istart = tree_to_shwi (start);
2672 isize = tree_to_shwi (TREE_OPERAND (t, 1));
2673 utype = TREE_TYPE (t);
2674 if (!TYPE_UNSIGNED (utype))
2675 utype = build_nonstandard_integer_type (TYPE_PRECISION (utype), 1);
2676 retval = build_int_cst (utype, 0);
2677 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (whole), i, field, value)
2679 tree bitpos = bit_position (field);
2680 if (bitpos == start && DECL_SIZE (field) == TREE_OPERAND (t, 1))
2681 return value;
2682 if (TREE_CODE (TREE_TYPE (field)) == INTEGER_TYPE
2683 && TREE_CODE (value) == INTEGER_CST
2684 && tree_fits_shwi_p (bitpos)
2685 && tree_fits_shwi_p (DECL_SIZE (field)))
2687 HOST_WIDE_INT bit = tree_to_shwi (bitpos);
2688 HOST_WIDE_INT sz = tree_to_shwi (DECL_SIZE (field));
2689 HOST_WIDE_INT shift;
2690 if (bit >= istart && bit + sz <= istart + isize)
2692 fldval = fold_convert (utype, value);
2693 mask = build_int_cst_type (utype, -1);
2694 mask = fold_build2 (LSHIFT_EXPR, utype, mask,
2695 size_int (TYPE_PRECISION (utype) - sz));
2696 mask = fold_build2 (RSHIFT_EXPR, utype, mask,
2697 size_int (TYPE_PRECISION (utype) - sz));
2698 fldval = fold_build2 (BIT_AND_EXPR, utype, fldval, mask);
2699 shift = bit - istart;
2700 if (BYTES_BIG_ENDIAN)
2701 shift = TYPE_PRECISION (utype) - shift - sz;
2702 fldval = fold_build2 (LSHIFT_EXPR, utype, fldval,
2703 size_int (shift));
2704 retval = fold_build2 (BIT_IOR_EXPR, utype, retval, fldval);
2705 fld_seen = true;
2709 if (fld_seen)
2710 return fold_convert (TREE_TYPE (t), retval);
2711 gcc_unreachable ();
2712 return error_mark_node;
2715 /* Subroutine of cxx_eval_constant_expression.
2716 Evaluate a short-circuited logical expression T in the context
2717 of a given constexpr CALL. BAILOUT_VALUE is the value for
2718 early return. CONTINUE_VALUE is used here purely for
2719 sanity check purposes. */
2721 static tree
2722 cxx_eval_logical_expression (const constexpr_ctx *ctx, tree t,
2723 tree bailout_value, tree continue_value,
2724 bool lval,
2725 bool *non_constant_p, bool *overflow_p)
2727 tree r;
2728 tree lhs = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0),
2729 lval,
2730 non_constant_p, overflow_p);
2731 VERIFY_CONSTANT (lhs);
2732 if (tree_int_cst_equal (lhs, bailout_value))
2733 return lhs;
2734 gcc_assert (tree_int_cst_equal (lhs, continue_value));
2735 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 1),
2736 lval, non_constant_p,
2737 overflow_p);
2738 VERIFY_CONSTANT (r);
2739 return r;
2742 /* REF is a COMPONENT_REF designating a particular field. V is a vector of
2743 CONSTRUCTOR elements to initialize (part of) an object containing that
2744 field. Return a pointer to the constructor_elt corresponding to the
2745 initialization of the field. */
2747 static constructor_elt *
2748 base_field_constructor_elt (vec<constructor_elt, va_gc> *v, tree ref)
2750 tree aggr = TREE_OPERAND (ref, 0);
2751 tree field = TREE_OPERAND (ref, 1);
2752 HOST_WIDE_INT i;
2753 constructor_elt *ce;
2755 gcc_assert (TREE_CODE (ref) == COMPONENT_REF);
2757 if (TREE_CODE (aggr) == COMPONENT_REF)
2759 constructor_elt *base_ce
2760 = base_field_constructor_elt (v, aggr);
2761 v = CONSTRUCTOR_ELTS (base_ce->value);
2764 for (i = 0; vec_safe_iterate (v, i, &ce); ++i)
2765 if (ce->index == field)
2766 return ce;
2768 gcc_unreachable ();
2769 return NULL;
2772 /* Some of the expressions fed to the constexpr mechanism are calls to
2773 constructors, which have type void. In that case, return the type being
2774 initialized by the constructor. */
2776 static tree
2777 initialized_type (tree t)
2779 if (TYPE_P (t))
2780 return t;
2781 tree type = cv_unqualified (TREE_TYPE (t));
2782 if (TREE_CODE (t) == CALL_EXPR || TREE_CODE (t) == AGGR_INIT_EXPR)
2784 /* A constructor call has void type, so we need to look deeper. */
2785 tree fn = get_function_named_in_call (t);
2786 if (fn && TREE_CODE (fn) == FUNCTION_DECL
2787 && DECL_CXX_CONSTRUCTOR_P (fn))
2788 type = DECL_CONTEXT (fn);
2790 return type;
2793 /* We're about to initialize element INDEX of an array or class from VALUE.
2794 Set up NEW_CTX appropriately by adjusting .object to refer to the
2795 subobject and creating a new CONSTRUCTOR if the element is itself
2796 a class or array. */
2798 static void
2799 init_subob_ctx (const constexpr_ctx *ctx, constexpr_ctx &new_ctx,
2800 tree index, tree &value)
2802 new_ctx = *ctx;
2804 if (index && TREE_CODE (index) != INTEGER_CST
2805 && TREE_CODE (index) != FIELD_DECL)
2806 /* This won't have an element in the new CONSTRUCTOR. */
2807 return;
2809 tree type = initialized_type (value);
2810 if (!AGGREGATE_TYPE_P (type) && !VECTOR_TYPE_P (type))
2811 /* A non-aggregate member doesn't get its own CONSTRUCTOR. */
2812 return;
2814 /* The sub-aggregate initializer might contain a placeholder;
2815 update object to refer to the subobject and ctor to refer to
2816 the (newly created) sub-initializer. */
2817 if (ctx->object)
2818 new_ctx.object = build_ctor_subob_ref (index, type, ctx->object);
2819 tree elt = build_constructor (type, NULL);
2820 CONSTRUCTOR_NO_CLEARING (elt) = true;
2821 new_ctx.ctor = elt;
2823 if (TREE_CODE (value) == TARGET_EXPR)
2824 /* Avoid creating another CONSTRUCTOR when we expand the TARGET_EXPR. */
2825 value = TARGET_EXPR_INITIAL (value);
2828 /* We're about to process an initializer for a class or array TYPE. Make
2829 sure that CTX is set up appropriately. */
2831 static void
2832 verify_ctor_sanity (const constexpr_ctx *ctx, tree type)
2834 /* We don't bother building a ctor for an empty base subobject. */
2835 if (is_empty_class (type))
2836 return;
2838 /* We're in the middle of an initializer that might involve placeholders;
2839 our caller should have created a CONSTRUCTOR for us to put the
2840 initializer into. We will either return that constructor or T. */
2841 gcc_assert (ctx->ctor);
2842 gcc_assert (same_type_ignoring_top_level_qualifiers_p
2843 (type, TREE_TYPE (ctx->ctor)));
2844 /* We used to check that ctx->ctor was empty, but that isn't the case when
2845 the object is zero-initialized before calling the constructor. */
2846 if (ctx->object)
2848 tree otype = TREE_TYPE (ctx->object);
2849 gcc_assert (same_type_ignoring_top_level_qualifiers_p (type, otype)
2850 /* Handle flexible array members. */
2851 || (TREE_CODE (otype) == ARRAY_TYPE
2852 && TYPE_DOMAIN (otype) == NULL_TREE
2853 && TREE_CODE (type) == ARRAY_TYPE
2854 && (same_type_ignoring_top_level_qualifiers_p
2855 (TREE_TYPE (type), TREE_TYPE (otype)))));
2857 gcc_assert (!ctx->object || !DECL_P (ctx->object)
2858 || *(ctx->values->get (ctx->object)) == ctx->ctor);
2861 /* Subroutine of cxx_eval_constant_expression.
2862 The expression tree T denotes a C-style array or a C-style
2863 aggregate. Reduce it to a constant expression. */
2865 static tree
2866 cxx_eval_bare_aggregate (const constexpr_ctx *ctx, tree t,
2867 bool lval,
2868 bool *non_constant_p, bool *overflow_p)
2870 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (t);
2871 bool changed = false;
2872 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (t));
2873 tree type = TREE_TYPE (t);
2875 constexpr_ctx new_ctx;
2876 if (TYPE_PTRMEMFUNC_P (type) || VECTOR_TYPE_P (type))
2878 /* We don't really need the ctx->ctor business for a PMF or
2879 vector, but it's simpler to use the same code. */
2880 new_ctx = *ctx;
2881 new_ctx.ctor = build_constructor (type, NULL);
2882 new_ctx.object = NULL_TREE;
2883 ctx = &new_ctx;
2885 verify_ctor_sanity (ctx, type);
2886 vec<constructor_elt, va_gc> **p = &CONSTRUCTOR_ELTS (ctx->ctor);
2887 vec_alloc (*p, vec_safe_length (v));
2889 unsigned i;
2890 tree index, value;
2891 bool constant_p = true;
2892 bool side_effects_p = false;
2893 FOR_EACH_CONSTRUCTOR_ELT (v, i, index, value)
2895 tree orig_value = value;
2896 init_subob_ctx (ctx, new_ctx, index, value);
2897 if (new_ctx.ctor != ctx->ctor)
2898 /* If we built a new CONSTRUCTOR, attach it now so that other
2899 initializers can refer to it. */
2900 CONSTRUCTOR_APPEND_ELT (*p, index, new_ctx.ctor);
2901 tree elt = cxx_eval_constant_expression (&new_ctx, value,
2902 lval,
2903 non_constant_p, overflow_p);
2904 /* Don't VERIFY_CONSTANT here. */
2905 if (ctx->quiet && *non_constant_p)
2906 break;
2907 if (elt != orig_value)
2908 changed = true;
2910 if (!TREE_CONSTANT (elt))
2911 constant_p = false;
2912 if (TREE_SIDE_EFFECTS (elt))
2913 side_effects_p = true;
2914 if (index && TREE_CODE (index) == COMPONENT_REF)
2916 /* This is an initialization of a vfield inside a base
2917 subaggregate that we already initialized; push this
2918 initialization into the previous initialization. */
2919 constructor_elt *inner = base_field_constructor_elt (*p, index);
2920 inner->value = elt;
2921 changed = true;
2923 else if (index
2924 && (TREE_CODE (index) == NOP_EXPR
2925 || TREE_CODE (index) == POINTER_PLUS_EXPR))
2927 /* This is an initializer for an empty base; now that we've
2928 checked that it's constant, we can ignore it. */
2929 gcc_assert (is_empty_class (TREE_TYPE (TREE_TYPE (index))));
2930 changed = true;
2932 else
2934 if (new_ctx.ctor != ctx->ctor)
2936 /* We appended this element above; update the value. */
2937 gcc_assert ((*p)->last().index == index);
2938 (*p)->last().value = elt;
2940 else
2941 CONSTRUCTOR_APPEND_ELT (*p, index, elt);
2942 /* Adding or replacing an element might change the ctor's flags. */
2943 TREE_CONSTANT (ctx->ctor) = constant_p;
2944 TREE_SIDE_EFFECTS (ctx->ctor) = side_effects_p;
2947 if (*non_constant_p || !changed)
2948 return t;
2949 t = ctx->ctor;
2950 /* We're done building this CONSTRUCTOR, so now we can interpret an
2951 element without an explicit initializer as value-initialized. */
2952 CONSTRUCTOR_NO_CLEARING (t) = false;
2953 TREE_CONSTANT (t) = constant_p;
2954 TREE_SIDE_EFFECTS (t) = side_effects_p;
2955 if (VECTOR_TYPE_P (type))
2956 t = fold (t);
2957 return t;
2960 /* Subroutine of cxx_eval_constant_expression.
2961 The expression tree T is a VEC_INIT_EXPR which denotes the desired
2962 initialization of a non-static data member of array type. Reduce it to a
2963 CONSTRUCTOR.
2965 Note that apart from value-initialization (when VALUE_INIT is true),
2966 this is only intended to support value-initialization and the
2967 initializations done by defaulted constructors for classes with
2968 non-static data members of array type. In this case, VEC_INIT_EXPR_INIT
2969 will either be NULL_TREE for the default constructor, or a COMPONENT_REF
2970 for the copy/move constructor. */
2972 static tree
2973 cxx_eval_vec_init_1 (const constexpr_ctx *ctx, tree atype, tree init,
2974 bool value_init, bool lval,
2975 bool *non_constant_p, bool *overflow_p)
2977 tree elttype = TREE_TYPE (atype);
2978 verify_ctor_sanity (ctx, atype);
2979 vec<constructor_elt, va_gc> **p = &CONSTRUCTOR_ELTS (ctx->ctor);
2980 bool pre_init = false;
2981 unsigned HOST_WIDE_INT i;
2982 tsubst_flags_t complain = ctx->quiet ? tf_none : tf_warning_or_error;
2984 /* For the default constructor, build up a call to the default
2985 constructor of the element type. We only need to handle class types
2986 here, as for a constructor to be constexpr, all members must be
2987 initialized, which for a defaulted default constructor means they must
2988 be of a class type with a constexpr default constructor. */
2989 if (TREE_CODE (elttype) == ARRAY_TYPE)
2990 /* We only do this at the lowest level. */;
2991 else if (value_init)
2993 init = build_value_init (elttype, complain);
2994 pre_init = true;
2996 else if (!init)
2998 vec<tree, va_gc> *argvec = make_tree_vector ();
2999 init = build_special_member_call (NULL_TREE, complete_ctor_identifier,
3000 &argvec, elttype, LOOKUP_NORMAL,
3001 complain);
3002 release_tree_vector (argvec);
3003 init = build_aggr_init_expr (TREE_TYPE (init), init);
3004 pre_init = true;
3007 tree nelts = get_array_or_vector_nelts (ctx, atype, non_constant_p,
3008 overflow_p);
3009 unsigned HOST_WIDE_INT max = tree_to_uhwi (nelts);
3010 for (i = 0; i < max; ++i)
3012 tree idx = build_int_cst (size_type_node, i);
3013 tree eltinit;
3014 bool reuse = false;
3015 constexpr_ctx new_ctx;
3016 init_subob_ctx (ctx, new_ctx, idx, pre_init ? init : elttype);
3017 if (new_ctx.ctor != ctx->ctor)
3018 CONSTRUCTOR_APPEND_ELT (*p, idx, new_ctx.ctor);
3019 if (TREE_CODE (elttype) == ARRAY_TYPE)
3021 /* A multidimensional array; recurse. */
3022 if (value_init || init == NULL_TREE)
3024 eltinit = NULL_TREE;
3025 reuse = i == 0;
3027 else
3028 eltinit = cp_build_array_ref (input_location, init, idx, complain);
3029 eltinit = cxx_eval_vec_init_1 (&new_ctx, elttype, eltinit, value_init,
3030 lval,
3031 non_constant_p, overflow_p);
3033 else if (pre_init)
3035 /* Initializing an element using value or default initialization
3036 we just pre-built above. */
3037 if (init == void_node)
3038 /* Trivial default-init, don't do anything to the CONSTRUCTOR. */
3039 return ctx->ctor;
3040 eltinit = cxx_eval_constant_expression (&new_ctx, init, lval,
3041 non_constant_p, overflow_p);
3042 reuse = i == 0;
3044 else
3046 /* Copying an element. */
3047 gcc_assert (same_type_ignoring_top_level_qualifiers_p
3048 (atype, TREE_TYPE (init)));
3049 eltinit = cp_build_array_ref (input_location, init, idx, complain);
3050 if (!lvalue_p (init))
3051 eltinit = move (eltinit);
3052 eltinit = force_rvalue (eltinit, complain);
3053 eltinit = cxx_eval_constant_expression (&new_ctx, eltinit, lval,
3054 non_constant_p, overflow_p);
3056 if (*non_constant_p && !ctx->quiet)
3057 break;
3058 if (new_ctx.ctor != ctx->ctor)
3060 /* We appended this element above; update the value. */
3061 gcc_assert ((*p)->last().index == idx);
3062 (*p)->last().value = eltinit;
3064 else
3065 CONSTRUCTOR_APPEND_ELT (*p, idx, eltinit);
3066 /* Reuse the result of cxx_eval_constant_expression call
3067 from the first iteration to all others if it is a constant
3068 initializer that doesn't require relocations. */
3069 if (reuse
3070 && max > 1
3071 && (eltinit == NULL_TREE
3072 || (initializer_constant_valid_p (eltinit, TREE_TYPE (eltinit))
3073 == null_pointer_node)))
3075 if (new_ctx.ctor != ctx->ctor)
3076 eltinit = new_ctx.ctor;
3077 tree range = build2 (RANGE_EXPR, size_type_node,
3078 build_int_cst (size_type_node, 1),
3079 build_int_cst (size_type_node, max - 1));
3080 CONSTRUCTOR_APPEND_ELT (*p, range, unshare_constructor (eltinit));
3081 break;
3083 else if (i == 0)
3084 vec_safe_reserve (*p, max);
3087 if (!*non_constant_p)
3089 init = ctx->ctor;
3090 CONSTRUCTOR_NO_CLEARING (init) = false;
3092 return init;
3095 static tree
3096 cxx_eval_vec_init (const constexpr_ctx *ctx, tree t,
3097 bool lval,
3098 bool *non_constant_p, bool *overflow_p)
3100 tree atype = TREE_TYPE (t);
3101 tree init = VEC_INIT_EXPR_INIT (t);
3102 tree r = cxx_eval_vec_init_1 (ctx, atype, init,
3103 VEC_INIT_EXPR_VALUE_INIT (t),
3104 lval, non_constant_p, overflow_p);
3105 if (*non_constant_p)
3106 return t;
3107 else
3108 return r;
3111 /* Like same_type_ignoring_top_level_qualifiers_p, but also handle the case
3112 where the desired type is an array of unknown bounds because the variable
3113 has had its bounds deduced since the wrapping expression was created. */
3115 static bool
3116 same_type_ignoring_tlq_and_bounds_p (tree type1, tree type2)
3118 while (TREE_CODE (type1) == ARRAY_TYPE
3119 && TREE_CODE (type2) == ARRAY_TYPE
3120 && (!TYPE_DOMAIN (type1) || !TYPE_DOMAIN (type2)))
3122 type1 = TREE_TYPE (type1);
3123 type2 = TREE_TYPE (type2);
3125 return same_type_ignoring_top_level_qualifiers_p (type1, type2);
3128 /* A less strict version of fold_indirect_ref_1, which requires cv-quals to
3129 match. We want to be less strict for simple *& folding; if we have a
3130 non-const temporary that we access through a const pointer, that should
3131 work. We handle this here rather than change fold_indirect_ref_1
3132 because we're dealing with things like ADDR_EXPR of INTEGER_CST which
3133 don't really make sense outside of constant expression evaluation. Also
3134 we want to allow folding to COMPONENT_REF, which could cause trouble
3135 with TBAA in fold_indirect_ref_1.
3137 Try to keep this function synced with fold_indirect_ref_1. */
3139 static tree
3140 cxx_fold_indirect_ref (location_t loc, tree type, tree op0, bool *empty_base)
3142 tree sub = op0;
3143 tree subtype;
3144 poly_uint64 const_op01;
3146 STRIP_NOPS (sub);
3147 subtype = TREE_TYPE (sub);
3148 if (!INDIRECT_TYPE_P (subtype))
3149 return NULL_TREE;
3151 if (TREE_CODE (sub) == ADDR_EXPR)
3153 tree op = TREE_OPERAND (sub, 0);
3154 tree optype = TREE_TYPE (op);
3156 /* *&CONST_DECL -> to the value of the const decl. */
3157 if (TREE_CODE (op) == CONST_DECL)
3158 return DECL_INITIAL (op);
3159 /* *&p => p; make sure to handle *&"str"[cst] here. */
3160 if (same_type_ignoring_tlq_and_bounds_p (optype, type))
3162 tree fop = fold_read_from_constant_string (op);
3163 if (fop)
3164 return fop;
3165 else
3166 return op;
3168 /* *(foo *)&fooarray => fooarray[0] */
3169 else if (TREE_CODE (optype) == ARRAY_TYPE
3170 && (same_type_ignoring_top_level_qualifiers_p
3171 (type, TREE_TYPE (optype))))
3173 tree type_domain = TYPE_DOMAIN (optype);
3174 tree min_val = size_zero_node;
3175 if (type_domain && TYPE_MIN_VALUE (type_domain))
3176 min_val = TYPE_MIN_VALUE (type_domain);
3177 return build4_loc (loc, ARRAY_REF, type, op, min_val,
3178 NULL_TREE, NULL_TREE);
3180 /* *(foo *)&complexfoo => __real__ complexfoo */
3181 else if (TREE_CODE (optype) == COMPLEX_TYPE
3182 && (same_type_ignoring_top_level_qualifiers_p
3183 (type, TREE_TYPE (optype))))
3184 return fold_build1_loc (loc, REALPART_EXPR, type, op);
3185 /* *(foo *)&vectorfoo => BIT_FIELD_REF<vectorfoo,...> */
3186 else if (VECTOR_TYPE_P (optype)
3187 && (same_type_ignoring_top_level_qualifiers_p
3188 (type, TREE_TYPE (optype))))
3190 tree part_width = TYPE_SIZE (type);
3191 tree index = bitsize_int (0);
3192 return fold_build3_loc (loc, BIT_FIELD_REF, type, op, part_width,
3193 index);
3195 /* Also handle conversion to an empty base class, which
3196 is represented with a NOP_EXPR. */
3197 else if (is_empty_class (type)
3198 && CLASS_TYPE_P (optype)
3199 && DERIVED_FROM_P (type, optype))
3201 *empty_base = true;
3202 return op;
3204 /* *(foo *)&struct_with_foo_field => COMPONENT_REF */
3205 else if (RECORD_OR_UNION_TYPE_P (optype))
3207 tree field = TYPE_FIELDS (optype);
3208 for (; field; field = DECL_CHAIN (field))
3209 if (TREE_CODE (field) == FIELD_DECL
3210 && TREE_TYPE (field) != error_mark_node
3211 && integer_zerop (byte_position (field))
3212 && (same_type_ignoring_top_level_qualifiers_p
3213 (TREE_TYPE (field), type)))
3214 return fold_build3 (COMPONENT_REF, type, op, field, NULL_TREE);
3217 else if (TREE_CODE (sub) == POINTER_PLUS_EXPR
3218 && poly_int_tree_p (TREE_OPERAND (sub, 1), &const_op01))
3220 tree op00 = TREE_OPERAND (sub, 0);
3221 tree op01 = TREE_OPERAND (sub, 1);
3223 STRIP_NOPS (op00);
3224 if (TREE_CODE (op00) == ADDR_EXPR)
3226 tree op00type;
3227 op00 = TREE_OPERAND (op00, 0);
3228 op00type = TREE_TYPE (op00);
3230 /* ((foo*)&vectorfoo)[1] => BIT_FIELD_REF<vectorfoo,...> */
3231 if (VECTOR_TYPE_P (op00type)
3232 && same_type_ignoring_top_level_qualifiers_p
3233 (type, TREE_TYPE (op00type))
3234 /* POINTER_PLUS_EXPR second operand is sizetype, unsigned,
3235 but we want to treat offsets with MSB set as negative.
3236 For the code below negative offsets are invalid and
3237 TYPE_SIZE of the element is something unsigned, so
3238 check whether op01 fits into poly_int64, which implies
3239 it is from 0 to INTTYPE_MAXIMUM (HOST_WIDE_INT), and
3240 then just use poly_uint64 because we want to treat the
3241 value as unsigned. */
3242 && tree_fits_poly_int64_p (op01))
3244 tree part_width = TYPE_SIZE (type);
3245 poly_uint64 max_offset
3246 = (tree_to_uhwi (part_width) / BITS_PER_UNIT
3247 * TYPE_VECTOR_SUBPARTS (op00type));
3248 if (known_lt (const_op01, max_offset))
3250 tree index = bitsize_int (const_op01 * BITS_PER_UNIT);
3251 return fold_build3_loc (loc,
3252 BIT_FIELD_REF, type, op00,
3253 part_width, index);
3256 /* ((foo*)&complexfoo)[1] => __imag__ complexfoo */
3257 else if (TREE_CODE (op00type) == COMPLEX_TYPE
3258 && (same_type_ignoring_top_level_qualifiers_p
3259 (type, TREE_TYPE (op00type))))
3261 if (known_eq (wi::to_poly_offset (TYPE_SIZE_UNIT (type)),
3262 const_op01))
3263 return fold_build1_loc (loc, IMAGPART_EXPR, type, op00);
3265 /* ((foo *)&fooarray)[1] => fooarray[1] */
3266 else if (TREE_CODE (op00type) == ARRAY_TYPE
3267 && (same_type_ignoring_top_level_qualifiers_p
3268 (type, TREE_TYPE (op00type))))
3270 tree type_domain = TYPE_DOMAIN (op00type);
3271 tree min_val = size_zero_node;
3272 if (type_domain && TYPE_MIN_VALUE (type_domain))
3273 min_val = TYPE_MIN_VALUE (type_domain);
3274 offset_int off = wi::to_offset (op01);
3275 offset_int el_sz = wi::to_offset (TYPE_SIZE_UNIT (type));
3276 offset_int remainder;
3277 off = wi::divmod_trunc (off, el_sz, SIGNED, &remainder);
3278 if (remainder == 0 && TREE_CODE (min_val) == INTEGER_CST)
3280 off = off + wi::to_offset (min_val);
3281 op01 = wide_int_to_tree (sizetype, off);
3282 return build4_loc (loc, ARRAY_REF, type, op00, op01,
3283 NULL_TREE, NULL_TREE);
3286 /* Also handle conversion to an empty base class, which
3287 is represented with a NOP_EXPR. */
3288 else if (is_empty_class (type)
3289 && CLASS_TYPE_P (op00type)
3290 && DERIVED_FROM_P (type, op00type))
3292 *empty_base = true;
3293 return op00;
3295 /* ((foo *)&struct_with_foo_field)[1] => COMPONENT_REF */
3296 else if (RECORD_OR_UNION_TYPE_P (op00type))
3298 tree field = TYPE_FIELDS (op00type);
3299 for (; field; field = DECL_CHAIN (field))
3300 if (TREE_CODE (field) == FIELD_DECL
3301 && TREE_TYPE (field) != error_mark_node
3302 && tree_int_cst_equal (byte_position (field), op01)
3303 && (same_type_ignoring_top_level_qualifiers_p
3304 (TREE_TYPE (field), type)))
3305 return fold_build3 (COMPONENT_REF, type, op00,
3306 field, NULL_TREE);
3310 /* *(foo *)fooarrptr => (*fooarrptr)[0] */
3311 else if (TREE_CODE (TREE_TYPE (subtype)) == ARRAY_TYPE
3312 && (same_type_ignoring_top_level_qualifiers_p
3313 (type, TREE_TYPE (TREE_TYPE (subtype)))))
3315 tree type_domain;
3316 tree min_val = size_zero_node;
3317 tree newsub
3318 = cxx_fold_indirect_ref (loc, TREE_TYPE (subtype), sub, NULL);
3319 if (newsub)
3320 sub = newsub;
3321 else
3322 sub = build1_loc (loc, INDIRECT_REF, TREE_TYPE (subtype), sub);
3323 type_domain = TYPE_DOMAIN (TREE_TYPE (sub));
3324 if (type_domain && TYPE_MIN_VALUE (type_domain))
3325 min_val = TYPE_MIN_VALUE (type_domain);
3326 return build4_loc (loc, ARRAY_REF, type, sub, min_val, NULL_TREE,
3327 NULL_TREE);
3330 return NULL_TREE;
3333 static tree
3334 cxx_eval_indirect_ref (const constexpr_ctx *ctx, tree t,
3335 bool lval,
3336 bool *non_constant_p, bool *overflow_p)
3338 tree orig_op0 = TREE_OPERAND (t, 0);
3339 bool empty_base = false;
3341 /* We can handle a MEM_REF like an INDIRECT_REF, if MEM_REF's second
3342 operand is an integer-zero. Otherwise reject the MEM_REF for now. */
3344 if (TREE_CODE (t) == MEM_REF
3345 && (!TREE_OPERAND (t, 1) || !integer_zerop (TREE_OPERAND (t, 1))))
3347 gcc_assert (ctx->quiet);
3348 *non_constant_p = true;
3349 return t;
3352 /* First try to simplify it directly. */
3353 tree r = cxx_fold_indirect_ref (EXPR_LOCATION (t), TREE_TYPE (t), orig_op0,
3354 &empty_base);
3355 if (!r)
3357 /* If that didn't work, evaluate the operand first. */
3358 tree op0 = cxx_eval_constant_expression (ctx, orig_op0,
3359 /*lval*/false, non_constant_p,
3360 overflow_p);
3361 /* Don't VERIFY_CONSTANT here. */
3362 if (*non_constant_p)
3363 return t;
3365 if (!lval && integer_zerop (op0))
3367 if (!ctx->quiet)
3368 error ("dereferencing a null pointer");
3369 *non_constant_p = true;
3370 return t;
3373 r = cxx_fold_indirect_ref (EXPR_LOCATION (t), TREE_TYPE (t), op0,
3374 &empty_base);
3375 if (r == NULL_TREE)
3377 /* We couldn't fold to a constant value. Make sure it's not
3378 something we should have been able to fold. */
3379 tree sub = op0;
3380 STRIP_NOPS (sub);
3381 if (TREE_CODE (sub) == ADDR_EXPR)
3383 gcc_assert (!same_type_ignoring_top_level_qualifiers_p
3384 (TREE_TYPE (TREE_TYPE (sub)), TREE_TYPE (t)));
3385 /* DR 1188 says we don't have to deal with this. */
3386 if (!ctx->quiet)
3387 error ("accessing value of %qE through a %qT glvalue in a "
3388 "constant expression", build_fold_indirect_ref (sub),
3389 TREE_TYPE (t));
3390 *non_constant_p = true;
3391 return t;
3394 if (lval && op0 != orig_op0)
3395 return build1 (INDIRECT_REF, TREE_TYPE (t), op0);
3396 if (!lval)
3397 VERIFY_CONSTANT (t);
3398 return t;
3402 r = cxx_eval_constant_expression (ctx, r,
3403 lval, non_constant_p, overflow_p);
3404 if (*non_constant_p)
3405 return t;
3407 /* If we're pulling out the value of an empty base, just return an empty
3408 CONSTRUCTOR. */
3409 if (empty_base && !lval)
3411 r = build_constructor (TREE_TYPE (t), NULL);
3412 TREE_CONSTANT (r) = true;
3415 return r;
3418 /* Complain about R, a VAR_DECL, not being usable in a constant expression.
3419 Shared between potential_constant_expression and
3420 cxx_eval_constant_expression. */
3422 static void
3423 non_const_var_error (tree r)
3425 tree type = TREE_TYPE (r);
3426 error ("the value of %qD is not usable in a constant "
3427 "expression", r);
3428 /* Avoid error cascade. */
3429 if (DECL_INITIAL (r) == error_mark_node)
3430 return;
3431 if (DECL_DECLARED_CONSTEXPR_P (r))
3432 inform (DECL_SOURCE_LOCATION (r),
3433 "%qD used in its own initializer", r);
3434 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
3436 if (!CP_TYPE_CONST_P (type))
3437 inform (DECL_SOURCE_LOCATION (r),
3438 "%q#D is not const", r);
3439 else if (CP_TYPE_VOLATILE_P (type))
3440 inform (DECL_SOURCE_LOCATION (r),
3441 "%q#D is volatile", r);
3442 else if (!DECL_INITIAL (r)
3443 || !TREE_CONSTANT (DECL_INITIAL (r))
3444 || !DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r))
3445 inform (DECL_SOURCE_LOCATION (r),
3446 "%qD was not initialized with a constant "
3447 "expression", r);
3448 else
3449 gcc_unreachable ();
3451 else if (TYPE_REF_P (type))
3452 inform (DECL_SOURCE_LOCATION (r),
3453 "%qD was not initialized with a constant "
3454 "expression", r);
3455 else
3457 if (cxx_dialect >= cxx11 && !DECL_DECLARED_CONSTEXPR_P (r))
3458 inform (DECL_SOURCE_LOCATION (r),
3459 "%qD was not declared %<constexpr%>", r);
3460 else
3461 inform (DECL_SOURCE_LOCATION (r),
3462 "%qD does not have integral or enumeration type",
3467 /* Subroutine of cxx_eval_constant_expression.
3468 Like cxx_eval_unary_expression, except for trinary expressions. */
3470 static tree
3471 cxx_eval_trinary_expression (const constexpr_ctx *ctx, tree t,
3472 bool lval,
3473 bool *non_constant_p, bool *overflow_p)
3475 int i;
3476 tree args[3];
3477 tree val;
3479 for (i = 0; i < 3; i++)
3481 args[i] = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, i),
3482 lval,
3483 non_constant_p, overflow_p);
3484 VERIFY_CONSTANT (args[i]);
3487 val = fold_ternary_loc (EXPR_LOCATION (t), TREE_CODE (t), TREE_TYPE (t),
3488 args[0], args[1], args[2]);
3489 if (val == NULL_TREE)
3490 return t;
3491 VERIFY_CONSTANT (val);
3492 return val;
3495 /* True if T was declared in a function declared to be constexpr, and
3496 therefore potentially constant in C++14. */
3498 bool
3499 var_in_constexpr_fn (tree t)
3501 tree ctx = DECL_CONTEXT (t);
3502 return (ctx && TREE_CODE (ctx) == FUNCTION_DECL
3503 && DECL_DECLARED_CONSTEXPR_P (ctx));
3506 /* True if T was declared in a function that might be constexpr: either a
3507 function that was declared constexpr, or a C++17 lambda op(). */
3509 bool
3510 var_in_maybe_constexpr_fn (tree t)
3512 if (cxx_dialect >= cxx17
3513 && DECL_FUNCTION_SCOPE_P (t)
3514 && LAMBDA_FUNCTION_P (DECL_CONTEXT (t)))
3515 return true;
3516 return var_in_constexpr_fn (t);
3519 /* We're assigning INIT to TARGET. In do_build_copy_constructor and
3520 build_over_call we implement trivial copy of a class with tail padding using
3521 assignment of character arrays, which is valid in normal code, but not in
3522 constexpr evaluation. We don't need to worry about clobbering tail padding
3523 in constexpr evaluation, so strip the type punning. */
3525 static void
3526 maybe_simplify_trivial_copy (tree &target, tree &init)
3528 if (TREE_CODE (target) == MEM_REF
3529 && TREE_CODE (init) == MEM_REF
3530 && TREE_TYPE (target) == TREE_TYPE (init)
3531 && TREE_CODE (TREE_TYPE (target)) == ARRAY_TYPE
3532 && TREE_TYPE (TREE_TYPE (target)) == unsigned_char_type_node)
3534 target = build_fold_indirect_ref (TREE_OPERAND (target, 0));
3535 init = build_fold_indirect_ref (TREE_OPERAND (init, 0));
3539 /* Evaluate an INIT_EXPR or MODIFY_EXPR. */
3541 static tree
3542 cxx_eval_store_expression (const constexpr_ctx *ctx, tree t,
3543 bool lval,
3544 bool *non_constant_p, bool *overflow_p)
3546 constexpr_ctx new_ctx = *ctx;
3548 tree init = TREE_OPERAND (t, 1);
3549 if (TREE_CLOBBER_P (init))
3550 /* Just ignore clobbers. */
3551 return void_node;
3553 /* First we figure out where we're storing to. */
3554 tree target = TREE_OPERAND (t, 0);
3556 maybe_simplify_trivial_copy (target, init);
3558 tree type = TREE_TYPE (target);
3559 target = cxx_eval_constant_expression (ctx, target,
3560 true,
3561 non_constant_p, overflow_p);
3562 if (*non_constant_p)
3563 return t;
3565 /* cxx_eval_array_reference for lval = true allows references one past
3566 end of array, because it does not know if it is just taking address
3567 (which is valid), or actual dereference. Here we know it is
3568 a dereference, so diagnose it here. */
3569 for (tree probe = target; probe; )
3571 switch (TREE_CODE (probe))
3573 case ARRAY_REF:
3574 tree nelts, ary;
3575 ary = TREE_OPERAND (probe, 0);
3576 nelts = get_array_or_vector_nelts (ctx, TREE_TYPE (ary),
3577 non_constant_p, overflow_p);
3578 VERIFY_CONSTANT (nelts);
3579 gcc_assert (TREE_CODE (nelts) == INTEGER_CST
3580 && TREE_CODE (TREE_OPERAND (probe, 1)) == INTEGER_CST);
3581 if (wi::to_widest (TREE_OPERAND (probe, 1)) == wi::to_widest (nelts))
3583 diag_array_subscript (ctx, ary, TREE_OPERAND (probe, 1));
3584 *non_constant_p = true;
3585 return t;
3587 /* FALLTHRU */
3589 case BIT_FIELD_REF:
3590 case COMPONENT_REF:
3591 probe = TREE_OPERAND (probe, 0);
3592 continue;
3594 default:
3595 probe = NULL_TREE;
3596 continue;
3600 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (target), type))
3602 /* For initialization of an empty base, the original target will be
3603 *(base*)this, which the above evaluation resolves to the object
3604 argument, which has the derived type rather than the base type. In
3605 this situation, just evaluate the initializer and return, since
3606 there's no actual data to store. */
3607 gcc_assert (is_empty_class (type));
3608 return cxx_eval_constant_expression (ctx, init, false,
3609 non_constant_p, overflow_p);
3612 /* And then find the underlying variable. */
3613 vec<tree,va_gc> *refs = make_tree_vector();
3614 tree object = NULL_TREE;
3615 for (tree probe = target; object == NULL_TREE; )
3617 switch (TREE_CODE (probe))
3619 case BIT_FIELD_REF:
3620 case COMPONENT_REF:
3621 case ARRAY_REF:
3622 vec_safe_push (refs, TREE_OPERAND (probe, 1));
3623 vec_safe_push (refs, TREE_TYPE (probe));
3624 probe = TREE_OPERAND (probe, 0);
3625 break;
3627 default:
3628 object = probe;
3632 /* And then find/build up our initializer for the path to the subobject
3633 we're initializing. */
3634 tree *valp;
3635 if (object == ctx->object && VAR_P (object)
3636 && DECL_NAME (object) && ctx->call == NULL)
3637 /* The variable we're building up an aggregate initializer for is outside
3638 the constant-expression, so don't evaluate the store. We check
3639 DECL_NAME to handle TARGET_EXPR temporaries, which are fair game. */
3640 valp = NULL;
3641 else if (DECL_P (object))
3642 valp = ctx->values->get (object);
3643 else
3644 valp = NULL;
3645 if (!valp)
3647 /* A constant-expression cannot modify objects from outside the
3648 constant-expression. */
3649 if (!ctx->quiet)
3650 error ("modification of %qE is not a constant expression", object);
3651 *non_constant_p = true;
3652 return t;
3654 type = TREE_TYPE (object);
3655 bool no_zero_init = true;
3657 vec<tree,va_gc> *ctors = make_tree_vector ();
3658 while (!refs->is_empty())
3660 if (*valp == NULL_TREE)
3662 *valp = build_constructor (type, NULL);
3663 CONSTRUCTOR_NO_CLEARING (*valp) = no_zero_init;
3665 else if (TREE_CODE (*valp) == STRING_CST)
3667 /* An array was initialized with a string constant, and now
3668 we're writing into one of its elements. Explode the
3669 single initialization into a set of element
3670 initializations. */
3671 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
3673 tree string = *valp;
3674 tree elt_type = TREE_TYPE (type);
3675 unsigned chars_per_elt = (TYPE_PRECISION (elt_type)
3676 / TYPE_PRECISION (char_type_node));
3677 unsigned num_elts = TREE_STRING_LENGTH (string) / chars_per_elt;
3678 tree ary_ctor = build_constructor (type, NULL);
3680 vec_safe_reserve (CONSTRUCTOR_ELTS (ary_ctor), num_elts);
3681 for (unsigned ix = 0; ix != num_elts; ix++)
3683 constructor_elt elt =
3685 build_int_cst (size_type_node, ix),
3686 extract_string_elt (string, chars_per_elt, ix)
3688 CONSTRUCTOR_ELTS (ary_ctor)->quick_push (elt);
3691 *valp = ary_ctor;
3694 /* If the value of object is already zero-initialized, any new ctors for
3695 subobjects will also be zero-initialized. */
3696 no_zero_init = CONSTRUCTOR_NO_CLEARING (*valp);
3698 vec_safe_push (ctors, *valp);
3700 enum tree_code code = TREE_CODE (type);
3701 type = refs->pop();
3702 tree index = refs->pop();
3704 constructor_elt *cep = NULL;
3705 if (code == ARRAY_TYPE)
3707 HOST_WIDE_INT i
3708 = find_array_ctor_elt (*valp, index, /*insert*/true);
3709 gcc_assert (i >= 0);
3710 cep = CONSTRUCTOR_ELT (*valp, i);
3711 gcc_assert (TREE_CODE (cep->index) != RANGE_EXPR);
3713 else
3715 gcc_assert (TREE_CODE (index) == FIELD_DECL);
3717 /* We must keep the CONSTRUCTOR's ELTS in FIELD order.
3718 Usually we meet initializers in that order, but it is
3719 possible for base types to be placed not in program
3720 order. */
3721 tree fields = TYPE_FIELDS (DECL_CONTEXT (index));
3722 unsigned HOST_WIDE_INT idx;
3724 if (code == UNION_TYPE && CONSTRUCTOR_NELTS (*valp)
3725 && CONSTRUCTOR_ELT (*valp, 0)->index != index)
3726 /* Changing active member. */
3727 vec_safe_truncate (CONSTRUCTOR_ELTS (*valp), 0);
3729 for (idx = 0;
3730 vec_safe_iterate (CONSTRUCTOR_ELTS (*valp), idx, &cep);
3731 idx++, fields = DECL_CHAIN (fields))
3733 if (index == cep->index)
3734 goto found;
3736 /* The field we're initializing must be on the field
3737 list. Look to see if it is present before the
3738 field the current ELT initializes. */
3739 for (; fields != cep->index; fields = DECL_CHAIN (fields))
3740 if (index == fields)
3741 goto insert;
3744 /* We fell off the end of the CONSTRUCTOR, so insert a new
3745 entry at the end. */
3746 insert:
3748 constructor_elt ce = { index, NULL_TREE };
3750 vec_safe_insert (CONSTRUCTOR_ELTS (*valp), idx, ce);
3751 cep = CONSTRUCTOR_ELT (*valp, idx);
3753 found:;
3755 valp = &cep->value;
3757 release_tree_vector (refs);
3759 if (AGGREGATE_TYPE_P (type) || VECTOR_TYPE_P (type))
3761 /* Create a new CONSTRUCTOR in case evaluation of the initializer
3762 wants to modify it. */
3763 if (*valp == NULL_TREE)
3765 *valp = build_constructor (type, NULL);
3766 CONSTRUCTOR_NO_CLEARING (*valp) = no_zero_init;
3768 else if (TREE_CODE (*valp) == PTRMEM_CST)
3769 *valp = cplus_expand_constant (*valp);
3770 new_ctx.ctor = *valp;
3771 new_ctx.object = target;
3774 init = cxx_eval_constant_expression (&new_ctx, init, false,
3775 non_constant_p, overflow_p);
3776 /* Don't share a CONSTRUCTOR that might be changed later. */
3777 init = unshare_constructor (init);
3778 if (target == object)
3779 /* The hash table might have moved since the get earlier. */
3780 valp = ctx->values->get (object);
3782 if (TREE_CODE (init) == CONSTRUCTOR)
3784 /* An outer ctx->ctor might be pointing to *valp, so replace
3785 its contents. */
3786 CONSTRUCTOR_ELTS (*valp) = CONSTRUCTOR_ELTS (init);
3787 TREE_CONSTANT (*valp) = TREE_CONSTANT (init);
3788 TREE_SIDE_EFFECTS (*valp) = TREE_SIDE_EFFECTS (init);
3789 CONSTRUCTOR_NO_CLEARING (*valp)
3790 = CONSTRUCTOR_NO_CLEARING (init);
3792 else
3793 *valp = init;
3795 /* Update TREE_CONSTANT and TREE_SIDE_EFFECTS on enclosing
3796 CONSTRUCTORs, if any. */
3797 tree elt;
3798 unsigned i;
3799 bool c = TREE_CONSTANT (init);
3800 bool s = TREE_SIDE_EFFECTS (init);
3801 if (!c || s)
3802 FOR_EACH_VEC_SAFE_ELT (ctors, i, elt)
3804 if (!c)
3805 TREE_CONSTANT (elt) = false;
3806 if (s)
3807 TREE_SIDE_EFFECTS (elt) = true;
3809 release_tree_vector (ctors);
3811 if (*non_constant_p)
3812 return t;
3813 else if (lval)
3814 return target;
3815 else
3816 return init;
3819 /* Evaluate a ++ or -- expression. */
3821 static tree
3822 cxx_eval_increment_expression (const constexpr_ctx *ctx, tree t,
3823 bool lval,
3824 bool *non_constant_p, bool *overflow_p)
3826 enum tree_code code = TREE_CODE (t);
3827 tree type = TREE_TYPE (t);
3828 tree op = TREE_OPERAND (t, 0);
3829 tree offset = TREE_OPERAND (t, 1);
3830 gcc_assert (TREE_CONSTANT (offset));
3832 /* The operand as an lvalue. */
3833 op = cxx_eval_constant_expression (ctx, op, true,
3834 non_constant_p, overflow_p);
3836 /* The operand as an rvalue. */
3837 tree val
3838 = cxx_eval_constant_expression (ctx, op, false,
3839 non_constant_p, overflow_p);
3840 /* Don't VERIFY_CONSTANT if this might be dealing with a pointer to
3841 a local array in a constexpr function. */
3842 bool ptr = INDIRECT_TYPE_P (TREE_TYPE (val));
3843 if (!ptr)
3844 VERIFY_CONSTANT (val);
3846 /* The modified value. */
3847 bool inc = (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR);
3848 tree mod;
3849 if (INDIRECT_TYPE_P (type))
3851 /* The middle end requires pointers to use POINTER_PLUS_EXPR. */
3852 offset = convert_to_ptrofftype (offset);
3853 if (!inc)
3854 offset = fold_build1 (NEGATE_EXPR, TREE_TYPE (offset), offset);
3855 mod = fold_build2 (POINTER_PLUS_EXPR, type, val, offset);
3857 else
3858 mod = fold_build2 (inc ? PLUS_EXPR : MINUS_EXPR, type, val, offset);
3859 if (!ptr)
3860 VERIFY_CONSTANT (mod);
3862 /* Storing the modified value. */
3863 tree store = build2 (MODIFY_EXPR, type, op, mod);
3864 cxx_eval_constant_expression (ctx, store,
3865 true, non_constant_p, overflow_p);
3867 /* And the value of the expression. */
3868 if (code == PREINCREMENT_EXPR || code == PREDECREMENT_EXPR)
3870 /* Prefix ops are lvalues. */
3871 if (lval)
3872 return op;
3873 else
3874 /* But we optimize when the caller wants an rvalue. */
3875 return mod;
3877 else
3878 /* Postfix ops are rvalues. */
3879 return val;
3882 /* Predicates for the meaning of *jump_target. */
3884 static bool
3885 returns (tree *jump_target)
3887 return *jump_target
3888 && (TREE_CODE (*jump_target) == RETURN_EXPR
3889 || (TREE_CODE (*jump_target) == LABEL_DECL
3890 && LABEL_DECL_CDTOR (*jump_target)));
3893 static bool
3894 breaks (tree *jump_target)
3896 return *jump_target
3897 && ((TREE_CODE (*jump_target) == LABEL_DECL
3898 && LABEL_DECL_BREAK (*jump_target))
3899 || TREE_CODE (*jump_target) == BREAK_STMT
3900 || TREE_CODE (*jump_target) == EXIT_EXPR);
3903 static bool
3904 continues (tree *jump_target)
3906 return *jump_target
3907 && ((TREE_CODE (*jump_target) == LABEL_DECL
3908 && LABEL_DECL_CONTINUE (*jump_target))
3909 || TREE_CODE (*jump_target) == CONTINUE_STMT);
3913 static bool
3914 switches (tree *jump_target)
3916 return *jump_target
3917 && TREE_CODE (*jump_target) == INTEGER_CST;
3920 /* Subroutine of cxx_eval_statement_list. Determine whether the statement
3921 STMT matches *jump_target. If we're looking for a case label and we see
3922 the default label, note it in ctx->css_state. */
3924 static bool
3925 label_matches (const constexpr_ctx *ctx, tree *jump_target, tree stmt)
3927 switch (TREE_CODE (*jump_target))
3929 case LABEL_DECL:
3930 if (TREE_CODE (stmt) == LABEL_EXPR
3931 && LABEL_EXPR_LABEL (stmt) == *jump_target)
3932 return true;
3933 break;
3935 case INTEGER_CST:
3936 if (TREE_CODE (stmt) == CASE_LABEL_EXPR)
3938 gcc_assert (ctx->css_state != NULL);
3939 if (!CASE_LOW (stmt))
3941 /* default: should appear just once in a SWITCH_EXPR
3942 body (excluding nested SWITCH_EXPR). */
3943 gcc_assert (*ctx->css_state != css_default_seen);
3944 /* When evaluating SWITCH_EXPR body for the second time,
3945 return true for the default: label. */
3946 if (*ctx->css_state == css_default_processing)
3947 return true;
3948 *ctx->css_state = css_default_seen;
3950 else if (CASE_HIGH (stmt))
3952 if (tree_int_cst_le (CASE_LOW (stmt), *jump_target)
3953 && tree_int_cst_le (*jump_target, CASE_HIGH (stmt)))
3954 return true;
3956 else if (tree_int_cst_equal (*jump_target, CASE_LOW (stmt)))
3957 return true;
3959 break;
3961 default:
3962 gcc_unreachable ();
3964 return false;
3967 /* Evaluate a STATEMENT_LIST for side-effects. Handles various jump
3968 semantics, for switch, break, continue, and return. */
3970 static tree
3971 cxx_eval_statement_list (const constexpr_ctx *ctx, tree t,
3972 bool *non_constant_p, bool *overflow_p,
3973 tree *jump_target)
3975 tree_stmt_iterator i;
3976 tree local_target;
3977 /* In a statement-expression we want to return the last value.
3978 For empty statement expression return void_node. */
3979 tree r = void_node;
3980 if (!jump_target)
3982 local_target = NULL_TREE;
3983 jump_target = &local_target;
3985 for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
3987 tree stmt = tsi_stmt (i);
3988 /* We've found a continue, so skip everything until we reach
3989 the label its jumping to. */
3990 if (continues (jump_target))
3992 if (label_matches (ctx, jump_target, stmt))
3993 /* Found it. */
3994 *jump_target = NULL_TREE;
3995 else
3996 continue;
3998 if (TREE_CODE (stmt) == DEBUG_BEGIN_STMT)
3999 continue;
4000 r = cxx_eval_constant_expression (ctx, stmt, false,
4001 non_constant_p, overflow_p,
4002 jump_target);
4003 if (*non_constant_p)
4004 break;
4005 if (returns (jump_target) || breaks (jump_target))
4006 break;
4008 return r;
4011 /* Evaluate a LOOP_EXPR for side-effects. Handles break and return
4012 semantics; continue semantics are covered by cxx_eval_statement_list. */
4014 static tree
4015 cxx_eval_loop_expr (const constexpr_ctx *ctx, tree t,
4016 bool *non_constant_p, bool *overflow_p,
4017 tree *jump_target)
4019 constexpr_ctx new_ctx = *ctx;
4021 tree body = TREE_OPERAND (t, 0);
4022 int count = 0;
4025 hash_set<tree> save_exprs;
4026 new_ctx.save_exprs = &save_exprs;
4028 cxx_eval_constant_expression (&new_ctx, body, /*lval*/false,
4029 non_constant_p, overflow_p, jump_target);
4031 /* Forget saved values of SAVE_EXPRs. */
4032 for (hash_set<tree>::iterator iter = save_exprs.begin();
4033 iter != save_exprs.end(); ++iter)
4034 new_ctx.values->remove (*iter);
4035 if (++count >= constexpr_loop_limit)
4037 if (!ctx->quiet)
4038 error_at (cp_expr_loc_or_loc (t, input_location),
4039 "%<constexpr%> loop iteration count exceeds limit of %d "
4040 "(use -fconstexpr-loop-limit= to increase the limit)",
4041 constexpr_loop_limit);
4042 *non_constant_p = true;
4043 break;
4046 while (!returns (jump_target)
4047 && !breaks (jump_target)
4048 && !switches (jump_target)
4049 && !*non_constant_p);
4051 if (breaks (jump_target))
4052 *jump_target = NULL_TREE;
4054 return NULL_TREE;
4057 /* Evaluate a SWITCH_EXPR for side-effects. Handles switch and break jump
4058 semantics. */
4060 static tree
4061 cxx_eval_switch_expr (const constexpr_ctx *ctx, tree t,
4062 bool *non_constant_p, bool *overflow_p,
4063 tree *jump_target)
4065 tree cond = TREE_OPERAND (t, 0);
4066 cond = cxx_eval_constant_expression (ctx, cond, false,
4067 non_constant_p, overflow_p);
4068 VERIFY_CONSTANT (cond);
4069 *jump_target = cond;
4071 tree body = TREE_OPERAND (t, 1);
4072 constexpr_ctx new_ctx = *ctx;
4073 constexpr_switch_state css = css_default_not_seen;
4074 new_ctx.css_state = &css;
4075 cxx_eval_constant_expression (&new_ctx, body, false,
4076 non_constant_p, overflow_p, jump_target);
4077 if (switches (jump_target) && css == css_default_seen)
4079 /* If the SWITCH_EXPR body has default: label, process it once again,
4080 this time instructing label_matches to return true for default:
4081 label on switches (jump_target). */
4082 css = css_default_processing;
4083 cxx_eval_constant_expression (&new_ctx, body, false,
4084 non_constant_p, overflow_p, jump_target);
4086 if (breaks (jump_target) || switches (jump_target))
4087 *jump_target = NULL_TREE;
4088 return NULL_TREE;
4091 /* Find the object of TYPE under initialization in CTX. */
4093 static tree
4094 lookup_placeholder (const constexpr_ctx *ctx, bool lval, tree type)
4096 if (!ctx)
4097 return NULL_TREE;
4099 /* We could use ctx->object unconditionally, but using ctx->ctor when we
4100 can is a minor optimization. */
4101 if (!lval && ctx->ctor && same_type_p (TREE_TYPE (ctx->ctor), type))
4102 return ctx->ctor;
4104 if (!ctx->object)
4105 return NULL_TREE;
4107 /* Since an object cannot have a field of its own type, we can search outward
4108 from ctx->object to find the unique containing object of TYPE. */
4109 tree ob = ctx->object;
4110 while (ob)
4112 if (same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (ob), type))
4113 break;
4114 if (handled_component_p (ob))
4115 ob = TREE_OPERAND (ob, 0);
4116 else
4117 ob = NULL_TREE;
4120 return ob;
4123 /* Attempt to reduce the expression T to a constant value.
4124 On failure, issue diagnostic and return error_mark_node. */
4125 /* FIXME unify with c_fully_fold */
4126 /* FIXME overflow_p is too global */
4128 static tree
4129 cxx_eval_constant_expression (const constexpr_ctx *ctx, tree t,
4130 bool lval,
4131 bool *non_constant_p, bool *overflow_p,
4132 tree *jump_target /* = NULL */)
4134 constexpr_ctx new_ctx;
4135 tree r = t;
4137 if (jump_target && *jump_target)
4139 /* If we are jumping, ignore all statements/expressions except those
4140 that could have LABEL_EXPR or CASE_LABEL_EXPR in their bodies. */
4141 switch (TREE_CODE (t))
4143 case BIND_EXPR:
4144 case STATEMENT_LIST:
4145 case LOOP_EXPR:
4146 case COND_EXPR:
4147 break;
4148 case LABEL_EXPR:
4149 case CASE_LABEL_EXPR:
4150 if (label_matches (ctx, jump_target, t))
4151 /* Found it. */
4152 *jump_target = NULL_TREE;
4153 return NULL_TREE;
4154 default:
4155 return NULL_TREE;
4158 if (error_operand_p (t))
4160 *non_constant_p = true;
4161 return t;
4163 if (CONSTANT_CLASS_P (t))
4165 if (TREE_OVERFLOW (t))
4167 if (!ctx->quiet)
4168 permerror (input_location, "overflow in constant expression");
4169 if (!flag_permissive || ctx->quiet)
4170 *overflow_p = true;
4173 if (TREE_CODE (t) == INTEGER_CST
4174 && TYPE_PTR_P (TREE_TYPE (t))
4175 && !integer_zerop (t))
4177 if (!ctx->quiet)
4178 error ("value %qE of type %qT is not a constant expression",
4179 t, TREE_TYPE (t));
4180 *non_constant_p = true;
4183 return t;
4186 tree_code tcode = TREE_CODE (t);
4187 switch (tcode)
4189 case RESULT_DECL:
4190 if (lval)
4191 return t;
4192 /* We ask for an rvalue for the RESULT_DECL when indirecting
4193 through an invisible reference, or in named return value
4194 optimization. */
4195 if (tree *p = ctx->values->get (t))
4196 return *p;
4197 else
4199 if (!ctx->quiet)
4200 error ("%qE is not a constant expression", t);
4201 *non_constant_p = true;
4203 break;
4205 case VAR_DECL:
4206 if (DECL_HAS_VALUE_EXPR_P (t))
4207 return cxx_eval_constant_expression (ctx, DECL_VALUE_EXPR (t),
4208 lval, non_constant_p, overflow_p);
4209 /* fall through */
4210 case CONST_DECL:
4211 /* We used to not check lval for CONST_DECL, but darwin.c uses
4212 CONST_DECL for aggregate constants. */
4213 if (lval)
4214 return t;
4215 /* is_really_empty_class doesn't take into account _vptr, so initializing
4216 otherwise empty class with { } would overwrite the initializer that
4217 initialize_vtable created for us. */
4218 if (COMPLETE_TYPE_P (TREE_TYPE (t))
4219 && !TYPE_POLYMORPHIC_P (TREE_TYPE (t))
4220 && is_really_empty_class (TREE_TYPE (t)))
4222 /* If the class is empty, we aren't actually loading anything. */
4223 r = build_constructor (TREE_TYPE (t), NULL);
4224 TREE_CONSTANT (r) = true;
4226 else if (ctx->strict)
4227 r = decl_really_constant_value (t);
4228 else
4229 r = decl_constant_value (t);
4230 if (TREE_CODE (r) == TARGET_EXPR
4231 && TREE_CODE (TARGET_EXPR_INITIAL (r)) == CONSTRUCTOR)
4232 r = TARGET_EXPR_INITIAL (r);
4233 if (VAR_P (r))
4234 if (tree *p = ctx->values->get (r))
4235 if (*p != NULL_TREE)
4236 r = *p;
4237 if (DECL_P (r))
4239 if (!ctx->quiet)
4240 non_const_var_error (r);
4241 *non_constant_p = true;
4243 break;
4245 case DEBUG_BEGIN_STMT:
4246 /* ??? It might be nice to retain this information somehow, so
4247 as to be able to step into a constexpr function call. */
4248 /* Fall through. */
4250 case FUNCTION_DECL:
4251 case TEMPLATE_DECL:
4252 case LABEL_DECL:
4253 case LABEL_EXPR:
4254 case CASE_LABEL_EXPR:
4255 case PREDICT_EXPR:
4256 return t;
4258 case PARM_DECL:
4259 if (lval && !TYPE_REF_P (TREE_TYPE (t)))
4260 /* glvalue use. */;
4261 else if (tree *p = ctx->values->get (r))
4262 r = *p;
4263 else if (lval)
4264 /* Defer in case this is only used for its type. */;
4265 else if (TYPE_REF_P (TREE_TYPE (t)))
4266 /* Defer, there's no lvalue->rvalue conversion. */;
4267 else if (COMPLETE_TYPE_P (TREE_TYPE (t))
4268 && is_really_empty_class (TREE_TYPE (t)))
4270 /* If the class is empty, we aren't actually loading anything. */
4271 r = build_constructor (TREE_TYPE (t), NULL);
4272 TREE_CONSTANT (r) = true;
4274 else
4276 if (!ctx->quiet)
4277 error ("%qE is not a constant expression", t);
4278 *non_constant_p = true;
4280 break;
4282 case CALL_EXPR:
4283 case AGGR_INIT_EXPR:
4284 r = cxx_eval_call_expression (ctx, t, lval,
4285 non_constant_p, overflow_p);
4286 break;
4288 case DECL_EXPR:
4290 r = DECL_EXPR_DECL (t);
4291 if (AGGREGATE_TYPE_P (TREE_TYPE (r))
4292 || VECTOR_TYPE_P (TREE_TYPE (r)))
4294 new_ctx = *ctx;
4295 new_ctx.object = r;
4296 new_ctx.ctor = build_constructor (TREE_TYPE (r), NULL);
4297 CONSTRUCTOR_NO_CLEARING (new_ctx.ctor) = true;
4298 new_ctx.values->put (r, new_ctx.ctor);
4299 ctx = &new_ctx;
4302 if (tree init = DECL_INITIAL (r))
4304 init = cxx_eval_constant_expression (ctx, init,
4305 false,
4306 non_constant_p, overflow_p);
4307 /* Don't share a CONSTRUCTOR that might be changed. */
4308 init = unshare_constructor (init);
4309 ctx->values->put (r, init);
4311 else if (ctx == &new_ctx)
4312 /* We gave it a CONSTRUCTOR above. */;
4313 else
4314 ctx->values->put (r, NULL_TREE);
4316 break;
4318 case TARGET_EXPR:
4319 if (!literal_type_p (TREE_TYPE (t)))
4321 if (!ctx->quiet)
4323 auto_diagnostic_group d;
4324 error ("temporary of non-literal type %qT in a "
4325 "constant expression", TREE_TYPE (t));
4326 explain_non_literal_class (TREE_TYPE (t));
4328 *non_constant_p = true;
4329 break;
4331 if ((AGGREGATE_TYPE_P (TREE_TYPE (t)) || VECTOR_TYPE_P (TREE_TYPE (t))))
4333 /* We're being expanded without an explicit target, so start
4334 initializing a new object; expansion with an explicit target
4335 strips the TARGET_EXPR before we get here. */
4336 new_ctx = *ctx;
4337 new_ctx.ctor = build_constructor (TREE_TYPE (t), NULL);
4338 CONSTRUCTOR_NO_CLEARING (new_ctx.ctor) = true;
4339 new_ctx.object = TARGET_EXPR_SLOT (t);
4340 ctx->values->put (new_ctx.object, new_ctx.ctor);
4341 ctx = &new_ctx;
4343 /* Pass false for 'lval' because this indicates
4344 initialization of a temporary. */
4345 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 1),
4346 false,
4347 non_constant_p, overflow_p);
4348 if (!*non_constant_p)
4349 /* Adjust the type of the result to the type of the temporary. */
4350 r = adjust_temp_type (TREE_TYPE (t), r);
4351 if (lval)
4353 tree slot = TARGET_EXPR_SLOT (t);
4354 r = unshare_constructor (r);
4355 ctx->values->put (slot, r);
4356 return slot;
4358 break;
4360 case INIT_EXPR:
4361 case MODIFY_EXPR:
4362 gcc_assert (jump_target == NULL || *jump_target == NULL_TREE);
4363 r = cxx_eval_store_expression (ctx, t, lval,
4364 non_constant_p, overflow_p);
4365 break;
4367 case SCOPE_REF:
4368 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 1),
4369 lval,
4370 non_constant_p, overflow_p);
4371 break;
4373 case RETURN_EXPR:
4374 if (TREE_OPERAND (t, 0) != NULL_TREE)
4375 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0),
4376 lval,
4377 non_constant_p, overflow_p);
4378 if (jump_target)
4379 *jump_target = t;
4380 else
4382 /* Can happen with ({ return true; }) && false; passed to
4383 maybe_constant_value. There is nothing to jump over in this
4384 case, and the bug will be diagnosed later. */
4385 gcc_assert (ctx->quiet);
4386 *non_constant_p = true;
4388 break;
4390 case SAVE_EXPR:
4391 /* Avoid evaluating a SAVE_EXPR more than once. */
4392 if (tree *p = ctx->values->get (t))
4393 r = *p;
4394 else
4396 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0), false,
4397 non_constant_p, overflow_p);
4398 ctx->values->put (t, r);
4399 if (ctx->save_exprs)
4400 ctx->save_exprs->add (t);
4402 break;
4404 case NON_LVALUE_EXPR:
4405 case TRY_CATCH_EXPR:
4406 case TRY_BLOCK:
4407 case CLEANUP_POINT_EXPR:
4408 case MUST_NOT_THROW_EXPR:
4409 case EXPR_STMT:
4410 case EH_SPEC_BLOCK:
4411 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0),
4412 lval,
4413 non_constant_p, overflow_p,
4414 jump_target);
4415 break;
4417 case TRY_FINALLY_EXPR:
4418 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0), lval,
4419 non_constant_p, overflow_p,
4420 jump_target);
4421 if (!*non_constant_p)
4422 /* Also evaluate the cleanup. */
4423 cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 1), true,
4424 non_constant_p, overflow_p,
4425 jump_target);
4426 break;
4428 /* These differ from cxx_eval_unary_expression in that this doesn't
4429 check for a constant operand or result; an address can be
4430 constant without its operand being, and vice versa. */
4431 case MEM_REF:
4432 case INDIRECT_REF:
4433 r = cxx_eval_indirect_ref (ctx, t, lval,
4434 non_constant_p, overflow_p);
4435 break;
4437 case ADDR_EXPR:
4439 tree oldop = TREE_OPERAND (t, 0);
4440 tree op = cxx_eval_constant_expression (ctx, oldop,
4441 /*lval*/true,
4442 non_constant_p, overflow_p);
4443 /* Don't VERIFY_CONSTANT here. */
4444 if (*non_constant_p)
4445 return t;
4446 gcc_checking_assert (TREE_CODE (op) != CONSTRUCTOR);
4447 /* This function does more aggressive folding than fold itself. */
4448 r = build_fold_addr_expr_with_type (op, TREE_TYPE (t));
4449 if (TREE_CODE (r) == ADDR_EXPR && TREE_OPERAND (r, 0) == oldop)
4450 return t;
4451 break;
4454 case REALPART_EXPR:
4455 case IMAGPART_EXPR:
4456 if (lval)
4458 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0), lval,
4459 non_constant_p, overflow_p);
4460 if (r == error_mark_node)
4462 else if (r == TREE_OPERAND (t, 0))
4463 r = t;
4464 else
4465 r = fold_build1 (TREE_CODE (t), TREE_TYPE (t), r);
4466 break;
4468 /* FALLTHRU */
4469 case CONJ_EXPR:
4470 case FIX_TRUNC_EXPR:
4471 case FLOAT_EXPR:
4472 case NEGATE_EXPR:
4473 case ABS_EXPR:
4474 case ABSU_EXPR:
4475 case BIT_NOT_EXPR:
4476 case TRUTH_NOT_EXPR:
4477 case FIXED_CONVERT_EXPR:
4478 r = cxx_eval_unary_expression (ctx, t, lval,
4479 non_constant_p, overflow_p);
4480 break;
4482 case SIZEOF_EXPR:
4483 r = fold_sizeof_expr (t);
4484 VERIFY_CONSTANT (r);
4485 break;
4487 case COMPOUND_EXPR:
4489 /* check_return_expr sometimes wraps a TARGET_EXPR in a
4490 COMPOUND_EXPR; don't get confused. Also handle EMPTY_CLASS_EXPR
4491 introduced by build_call_a. */
4492 tree op0 = TREE_OPERAND (t, 0);
4493 tree op1 = TREE_OPERAND (t, 1);
4494 STRIP_NOPS (op1);
4495 if ((TREE_CODE (op0) == TARGET_EXPR && op1 == TARGET_EXPR_SLOT (op0))
4496 || TREE_CODE (op1) == EMPTY_CLASS_EXPR)
4497 r = cxx_eval_constant_expression (ctx, op0,
4498 lval, non_constant_p, overflow_p,
4499 jump_target);
4500 else
4502 /* Check that the LHS is constant and then discard it. */
4503 cxx_eval_constant_expression (ctx, op0,
4504 true, non_constant_p, overflow_p,
4505 jump_target);
4506 if (*non_constant_p)
4507 return t;
4508 op1 = TREE_OPERAND (t, 1);
4509 r = cxx_eval_constant_expression (ctx, op1,
4510 lval, non_constant_p, overflow_p,
4511 jump_target);
4514 break;
4516 case POINTER_PLUS_EXPR:
4517 case POINTER_DIFF_EXPR:
4518 case PLUS_EXPR:
4519 case MINUS_EXPR:
4520 case MULT_EXPR:
4521 case TRUNC_DIV_EXPR:
4522 case CEIL_DIV_EXPR:
4523 case FLOOR_DIV_EXPR:
4524 case ROUND_DIV_EXPR:
4525 case TRUNC_MOD_EXPR:
4526 case CEIL_MOD_EXPR:
4527 case ROUND_MOD_EXPR:
4528 case RDIV_EXPR:
4529 case EXACT_DIV_EXPR:
4530 case MIN_EXPR:
4531 case MAX_EXPR:
4532 case LSHIFT_EXPR:
4533 case RSHIFT_EXPR:
4534 case LROTATE_EXPR:
4535 case RROTATE_EXPR:
4536 case BIT_IOR_EXPR:
4537 case BIT_XOR_EXPR:
4538 case BIT_AND_EXPR:
4539 case TRUTH_XOR_EXPR:
4540 case LT_EXPR:
4541 case LE_EXPR:
4542 case GT_EXPR:
4543 case GE_EXPR:
4544 case EQ_EXPR:
4545 case NE_EXPR:
4546 case UNORDERED_EXPR:
4547 case ORDERED_EXPR:
4548 case UNLT_EXPR:
4549 case UNLE_EXPR:
4550 case UNGT_EXPR:
4551 case UNGE_EXPR:
4552 case UNEQ_EXPR:
4553 case LTGT_EXPR:
4554 case RANGE_EXPR:
4555 case COMPLEX_EXPR:
4556 r = cxx_eval_binary_expression (ctx, t, lval,
4557 non_constant_p, overflow_p);
4558 break;
4560 /* fold can introduce non-IF versions of these; still treat them as
4561 short-circuiting. */
4562 case TRUTH_AND_EXPR:
4563 case TRUTH_ANDIF_EXPR:
4564 r = cxx_eval_logical_expression (ctx, t, boolean_false_node,
4565 boolean_true_node,
4566 lval,
4567 non_constant_p, overflow_p);
4568 break;
4570 case TRUTH_OR_EXPR:
4571 case TRUTH_ORIF_EXPR:
4572 r = cxx_eval_logical_expression (ctx, t, boolean_true_node,
4573 boolean_false_node,
4574 lval,
4575 non_constant_p, overflow_p);
4576 break;
4578 case ARRAY_REF:
4579 r = cxx_eval_array_reference (ctx, t, lval,
4580 non_constant_p, overflow_p);
4581 break;
4583 case COMPONENT_REF:
4584 if (is_overloaded_fn (t))
4586 /* We can only get here in checking mode via
4587 build_non_dependent_expr, because any expression that
4588 calls or takes the address of the function will have
4589 pulled a FUNCTION_DECL out of the COMPONENT_REF. */
4590 gcc_checking_assert (ctx->quiet || errorcount);
4591 *non_constant_p = true;
4592 return t;
4594 r = cxx_eval_component_reference (ctx, t, lval,
4595 non_constant_p, overflow_p);
4596 break;
4598 case BIT_FIELD_REF:
4599 r = cxx_eval_bit_field_ref (ctx, t, lval,
4600 non_constant_p, overflow_p);
4601 break;
4603 case COND_EXPR:
4604 if (jump_target && *jump_target)
4606 /* When jumping to a label, the label might be either in the
4607 then or else blocks, so process then block first in skipping
4608 mode first, and if we are still in the skipping mode at its end,
4609 process the else block too. */
4610 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 1),
4611 lval, non_constant_p, overflow_p,
4612 jump_target);
4613 if (*jump_target)
4614 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 2),
4615 lval, non_constant_p, overflow_p,
4616 jump_target);
4617 break;
4619 r = cxx_eval_conditional_expression (ctx, t, lval,
4620 non_constant_p, overflow_p,
4621 jump_target);
4622 break;
4623 case VEC_COND_EXPR:
4624 r = cxx_eval_vector_conditional_expression (ctx, t, non_constant_p,
4625 overflow_p);
4626 break;
4628 case CONSTRUCTOR:
4629 if (TREE_CONSTANT (t))
4631 /* Don't re-process a constant CONSTRUCTOR, but do fold it to
4632 VECTOR_CST if applicable. */
4633 verify_constructor_flags (t);
4634 if (TREE_CONSTANT (t))
4635 return fold (t);
4637 r = cxx_eval_bare_aggregate (ctx, t, lval,
4638 non_constant_p, overflow_p);
4639 break;
4641 case VEC_INIT_EXPR:
4642 /* We can get this in a defaulted constructor for a class with a
4643 non-static data member of array type. Either the initializer will
4644 be NULL, meaning default-initialization, or it will be an lvalue
4645 or xvalue of the same type, meaning direct-initialization from the
4646 corresponding member. */
4647 r = cxx_eval_vec_init (ctx, t, lval,
4648 non_constant_p, overflow_p);
4649 break;
4651 case VEC_PERM_EXPR:
4652 r = cxx_eval_trinary_expression (ctx, t, lval,
4653 non_constant_p, overflow_p);
4654 break;
4656 case NOP_EXPR:
4657 if (REINTERPRET_CAST_P (t))
4659 if (!ctx->quiet)
4660 error_at (cp_expr_loc_or_loc (t, input_location),
4661 "a reinterpret_cast is not a constant expression");
4662 *non_constant_p = true;
4663 return t;
4665 /* FALLTHROUGH. */
4666 case CONVERT_EXPR:
4667 case VIEW_CONVERT_EXPR:
4668 case UNARY_PLUS_EXPR:
4670 tree oldop = TREE_OPERAND (t, 0);
4672 tree op = cxx_eval_constant_expression (ctx, oldop,
4673 lval,
4674 non_constant_p, overflow_p);
4675 if (*non_constant_p)
4676 return t;
4677 tree type = TREE_TYPE (t);
4678 if (TREE_CODE (op) == PTRMEM_CST
4679 && !TYPE_PTRMEM_P (type))
4680 op = cplus_expand_constant (op);
4682 if (TREE_CODE (op) == PTRMEM_CST && tcode == NOP_EXPR)
4684 if (!same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (op))
4685 && !can_convert_qual (type, op))
4686 op = cplus_expand_constant (op);
4687 return cp_fold_convert (type, op);
4690 if (INDIRECT_TYPE_P (type) && TREE_CODE (op) == INTEGER_CST)
4692 if (integer_zerop (op))
4694 if (TYPE_REF_P (type))
4696 if (!ctx->quiet)
4697 error_at (cp_expr_loc_or_loc (t, input_location),
4698 "dereferencing a null pointer");
4699 *non_constant_p = true;
4700 return t;
4702 else if (TYPE_PTR_P (TREE_TYPE (op)))
4704 tree from = TREE_TYPE (op);
4706 if (!can_convert (type, from, tf_none))
4708 if (!ctx->quiet)
4709 error_at (cp_expr_loc_or_loc (t, input_location),
4710 "conversion of %qT null pointer to %qT "
4711 "is not a constant expression",
4712 from, type);
4713 *non_constant_p = true;
4714 return t;
4718 else
4720 /* This detects for example:
4721 reinterpret_cast<void*>(sizeof 0)
4723 if (!ctx->quiet)
4724 error_at (cp_expr_loc_or_loc (t, input_location),
4725 "%<reinterpret_cast<%T>(%E)%> is not "
4726 "a constant expression",
4727 type, op);
4728 *non_constant_p = true;
4729 return t;
4733 if (op == oldop && tcode != UNARY_PLUS_EXPR)
4734 /* We didn't fold at the top so we could check for ptr-int
4735 conversion. */
4736 return fold (t);
4738 /* Handle an array's bounds having been deduced after we built
4739 the wrapping expression. */
4740 if (same_type_ignoring_tlq_and_bounds_p (type, TREE_TYPE (op)))
4741 r = op;
4742 else if (tcode == UNARY_PLUS_EXPR)
4743 r = fold_convert (TREE_TYPE (t), op);
4744 else
4745 r = fold_build1 (tcode, type, op);
4747 /* Conversion of an out-of-range value has implementation-defined
4748 behavior; the language considers it different from arithmetic
4749 overflow, which is undefined. */
4750 if (TREE_OVERFLOW_P (r) && !TREE_OVERFLOW_P (op))
4751 TREE_OVERFLOW (r) = false;
4753 break;
4755 case EMPTY_CLASS_EXPR:
4756 /* This is good enough for a function argument that might not get
4757 used, and they can't do anything with it, so just return it. */
4758 return t;
4760 case STATEMENT_LIST:
4761 new_ctx = *ctx;
4762 new_ctx.ctor = new_ctx.object = NULL_TREE;
4763 return cxx_eval_statement_list (&new_ctx, t,
4764 non_constant_p, overflow_p, jump_target);
4766 case BIND_EXPR:
4767 return cxx_eval_constant_expression (ctx, BIND_EXPR_BODY (t),
4768 lval,
4769 non_constant_p, overflow_p,
4770 jump_target);
4772 case PREINCREMENT_EXPR:
4773 case POSTINCREMENT_EXPR:
4774 case PREDECREMENT_EXPR:
4775 case POSTDECREMENT_EXPR:
4776 return cxx_eval_increment_expression (ctx, t,
4777 lval, non_constant_p, overflow_p);
4779 case LAMBDA_EXPR:
4780 case NEW_EXPR:
4781 case VEC_NEW_EXPR:
4782 case DELETE_EXPR:
4783 case VEC_DELETE_EXPR:
4784 case THROW_EXPR:
4785 case MODOP_EXPR:
4786 /* GCC internal stuff. */
4787 case VA_ARG_EXPR:
4788 case NON_DEPENDENT_EXPR:
4789 case BASELINK:
4790 case OFFSET_REF:
4791 if (!ctx->quiet)
4792 error_at (cp_expr_loc_or_loc (t, input_location),
4793 "expression %qE is not a constant expression", t);
4794 *non_constant_p = true;
4795 break;
4797 case OBJ_TYPE_REF:
4799 /* Virtual function call. Let the constexpr machinery figure out
4800 the dynamic type. */
4801 int token = tree_to_shwi (OBJ_TYPE_REF_TOKEN (t));
4802 tree obj = OBJ_TYPE_REF_OBJECT (t);
4803 obj = cxx_eval_constant_expression (ctx, obj, lval, non_constant_p,
4804 overflow_p);
4805 /* We expect something in the form of &x.D.2103.D.2094; get x. */
4806 if (TREE_CODE (obj) != ADDR_EXPR)
4808 if (!ctx->quiet)
4809 error_at (cp_expr_loc_or_loc (t, input_location),
4810 "expression %qE is not a constant expression", t);
4811 *non_constant_p = true;
4812 return t;
4814 obj = TREE_OPERAND (obj, 0);
4815 while (TREE_CODE (obj) == COMPONENT_REF
4816 && DECL_FIELD_IS_BASE (TREE_OPERAND (obj, 1)))
4817 obj = TREE_OPERAND (obj, 0);
4818 tree objtype = TREE_TYPE (obj);
4819 /* Find the function decl in the virtual functions list. TOKEN is
4820 the DECL_VINDEX that says which function we're looking for. */
4821 tree virtuals = BINFO_VIRTUALS (TYPE_BINFO (objtype));
4822 r = TREE_VALUE (chain_index (token, virtuals));
4823 break;
4826 case PLACEHOLDER_EXPR:
4827 /* Use of the value or address of the current object. */
4828 if (tree ctor = lookup_placeholder (ctx, lval, TREE_TYPE (t)))
4829 return cxx_eval_constant_expression (ctx, ctor, lval,
4830 non_constant_p, overflow_p);
4831 /* A placeholder without a referent. We can get here when
4832 checking whether NSDMIs are noexcept, or in massage_init_elt;
4833 just say it's non-constant for now. */
4834 gcc_assert (ctx->quiet);
4835 *non_constant_p = true;
4836 break;
4838 case EXIT_EXPR:
4840 tree cond = TREE_OPERAND (t, 0);
4841 cond = cxx_eval_constant_expression (ctx, cond, /*lval*/false,
4842 non_constant_p, overflow_p);
4843 VERIFY_CONSTANT (cond);
4844 if (integer_nonzerop (cond))
4845 *jump_target = t;
4847 break;
4849 case GOTO_EXPR:
4850 *jump_target = TREE_OPERAND (t, 0);
4851 gcc_assert (breaks (jump_target) || continues (jump_target)
4852 /* Allow for jumping to a cdtor_label. */
4853 || returns (jump_target));
4854 break;
4856 case LOOP_EXPR:
4857 cxx_eval_loop_expr (ctx, t,
4858 non_constant_p, overflow_p, jump_target);
4859 break;
4861 case SWITCH_EXPR:
4862 cxx_eval_switch_expr (ctx, t,
4863 non_constant_p, overflow_p, jump_target);
4864 break;
4866 case REQUIRES_EXPR:
4867 /* It's possible to get a requires-expression in a constant
4868 expression. For example:
4870 template<typename T> concept bool C() {
4871 return requires (T t) { t; };
4874 template<typename T> requires !C<T>() void f(T);
4876 Normalization leaves f with the associated constraint
4877 '!requires (T t) { ... }' which is not transformed into
4878 a constraint. */
4879 if (!processing_template_decl)
4880 return evaluate_constraint_expression (t, NULL_TREE);
4881 else
4882 *non_constant_p = true;
4883 return t;
4885 case ANNOTATE_EXPR:
4886 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0),
4887 lval,
4888 non_constant_p, overflow_p,
4889 jump_target);
4890 break;
4892 case USING_STMT:
4893 r = void_node;
4894 break;
4896 default:
4897 if (STATEMENT_CODE_P (TREE_CODE (t)))
4899 /* This function doesn't know how to deal with pre-genericize
4900 statements; this can only happen with statement-expressions,
4901 so for now just fail. */
4902 if (!ctx->quiet)
4903 error_at (EXPR_LOCATION (t),
4904 "statement is not a constant expression");
4906 else
4907 internal_error ("unexpected expression %qE of kind %s", t,
4908 get_tree_code_name (TREE_CODE (t)));
4909 *non_constant_p = true;
4910 break;
4913 if (r == error_mark_node)
4914 *non_constant_p = true;
4916 if (*non_constant_p)
4917 return t;
4918 else
4919 return r;
4922 /* P0859: A function is needed for constant evaluation if it is a constexpr
4923 function that is named by an expression ([basic.def.odr]) that is
4924 potentially constant evaluated.
4926 So we need to instantiate any constexpr functions mentioned by the
4927 expression even if the definition isn't needed for evaluating the
4928 expression. */
4930 static tree
4931 instantiate_cx_fn_r (tree *tp, int *walk_subtrees, void */*data*/)
4933 if (TREE_CODE (*tp) == FUNCTION_DECL
4934 && DECL_DECLARED_CONSTEXPR_P (*tp)
4935 && !DECL_INITIAL (*tp)
4936 && !trivial_fn_p (*tp)
4937 && DECL_TEMPLOID_INSTANTIATION (*tp))
4939 ++function_depth;
4940 instantiate_decl (*tp, /*defer_ok*/false, /*expl_inst*/false);
4941 --function_depth;
4943 else if (TREE_CODE (*tp) == CALL_EXPR
4944 || TREE_CODE (*tp) == AGGR_INIT_EXPR)
4946 if (EXPR_HAS_LOCATION (*tp))
4947 input_location = EXPR_LOCATION (*tp);
4950 if (!EXPR_P (*tp))
4951 *walk_subtrees = 0;
4953 return NULL_TREE;
4955 static void
4956 instantiate_constexpr_fns (tree t)
4958 location_t loc = input_location;
4959 cp_walk_tree_without_duplicates (&t, instantiate_cx_fn_r, NULL);
4960 input_location = loc;
4963 /* ALLOW_NON_CONSTANT is false if T is required to be a constant expression.
4964 STRICT has the same sense as for constant_value_1: true if we only allow
4965 conforming C++ constant expressions, or false if we want a constant value
4966 even if it doesn't conform.
4967 PRETEND_CONST_REQUIRED is true if T is required to be const-evaluated as
4968 per P0595 even when ALLOW_NON_CONSTANT is true. */
4970 static tree
4971 cxx_eval_outermost_constant_expr (tree t, bool allow_non_constant,
4972 bool strict = true,
4973 bool pretend_const_required = false,
4974 tree object = NULL_TREE)
4976 auto_timevar time (TV_CONSTEXPR);
4978 bool non_constant_p = false;
4979 bool overflow_p = false;
4980 hash_map<tree,tree> map;
4982 constexpr_ctx ctx = { NULL, &map, NULL, NULL, NULL, NULL,
4983 allow_non_constant, strict,
4984 pretend_const_required || !allow_non_constant };
4986 tree type = initialized_type (t);
4987 tree r = t;
4988 if (AGGREGATE_TYPE_P (type) || VECTOR_TYPE_P (type))
4990 /* In C++14 an NSDMI can participate in aggregate initialization,
4991 and can refer to the address of the object being initialized, so
4992 we need to pass in the relevant VAR_DECL if we want to do the
4993 evaluation in a single pass. The evaluation will dynamically
4994 update ctx.values for the VAR_DECL. We use the same strategy
4995 for C++11 constexpr constructors that refer to the object being
4996 initialized. */
4997 ctx.ctor = build_constructor (type, NULL);
4998 CONSTRUCTOR_NO_CLEARING (ctx.ctor) = true;
4999 if (!object)
5001 if (TREE_CODE (t) == TARGET_EXPR)
5002 object = TARGET_EXPR_SLOT (t);
5003 else if (TREE_CODE (t) == AGGR_INIT_EXPR)
5004 object = AGGR_INIT_EXPR_SLOT (t);
5006 ctx.object = object;
5007 if (object)
5008 gcc_assert (same_type_ignoring_top_level_qualifiers_p
5009 (type, TREE_TYPE (object)));
5010 if (object && DECL_P (object))
5011 map.put (object, ctx.ctor);
5012 if (TREE_CODE (r) == TARGET_EXPR)
5013 /* Avoid creating another CONSTRUCTOR when we expand the
5014 TARGET_EXPR. */
5015 r = TARGET_EXPR_INITIAL (r);
5018 instantiate_constexpr_fns (r);
5019 r = cxx_eval_constant_expression (&ctx, r,
5020 false, &non_constant_p, &overflow_p);
5022 verify_constant (r, allow_non_constant, &non_constant_p, &overflow_p);
5024 /* Mutable logic is a bit tricky: we want to allow initialization of
5025 constexpr variables with mutable members, but we can't copy those
5026 members to another constexpr variable. */
5027 if (TREE_CODE (r) == CONSTRUCTOR
5028 && CONSTRUCTOR_MUTABLE_POISON (r))
5030 if (!allow_non_constant)
5031 error ("%qE is not a constant expression because it refers to "
5032 "mutable subobjects of %qT", t, type);
5033 non_constant_p = true;
5036 if (TREE_CODE (r) == CONSTRUCTOR
5037 && CONSTRUCTOR_NO_CLEARING (r))
5039 if (!allow_non_constant)
5040 error ("%qE is not a constant expression because it refers to "
5041 "an incompletely initialized variable", t);
5042 TREE_CONSTANT (r) = false;
5043 non_constant_p = true;
5046 /* Technically we should check this for all subexpressions, but that
5047 runs into problems with our internal representation of pointer
5048 subtraction and the 5.19 rules are still in flux. */
5049 if (CONVERT_EXPR_CODE_P (TREE_CODE (r))
5050 && ARITHMETIC_TYPE_P (TREE_TYPE (r))
5051 && TREE_CODE (TREE_OPERAND (r, 0)) == ADDR_EXPR)
5053 if (!allow_non_constant)
5054 error ("conversion from pointer type %qT "
5055 "to arithmetic type %qT in a constant expression",
5056 TREE_TYPE (TREE_OPERAND (r, 0)), TREE_TYPE (r));
5057 non_constant_p = true;
5060 if (!non_constant_p && overflow_p)
5061 non_constant_p = true;
5063 /* Unshare the result unless it's a CONSTRUCTOR in which case it's already
5064 unshared. */
5065 bool should_unshare = true;
5066 if (r == t || TREE_CODE (r) == CONSTRUCTOR)
5067 should_unshare = false;
5069 if (non_constant_p && !allow_non_constant)
5070 return error_mark_node;
5071 else if (non_constant_p && TREE_CONSTANT (r))
5073 /* If __builtin_is_constant_evaluated () was evaluated to true
5074 and the result is not a valid constant expression, we need to
5075 punt. */
5076 if (pretend_const_required)
5077 return cxx_eval_outermost_constant_expr (t, true, strict,
5078 false, object);
5079 /* This isn't actually constant, so unset TREE_CONSTANT.
5080 Don't clear TREE_CONSTANT on ADDR_EXPR, as the middle-end requires
5081 it to be set if it is invariant address, even when it is not
5082 a valid C++ constant expression. Wrap it with a NOP_EXPR
5083 instead. */
5084 if (EXPR_P (r) && TREE_CODE (r) != ADDR_EXPR)
5085 r = copy_node (r);
5086 else if (TREE_CODE (r) == CONSTRUCTOR)
5087 r = build1 (VIEW_CONVERT_EXPR, TREE_TYPE (r), r);
5088 else
5089 r = build_nop (TREE_TYPE (r), r);
5090 TREE_CONSTANT (r) = false;
5092 else if (non_constant_p || r == t)
5093 return t;
5095 if (should_unshare)
5096 r = unshare_expr (r);
5098 if (TREE_CODE (r) == CONSTRUCTOR && CLASS_TYPE_P (TREE_TYPE (r)))
5100 if (TREE_CODE (t) == TARGET_EXPR
5101 && TARGET_EXPR_INITIAL (t) == r)
5102 return t;
5103 else
5105 r = get_target_expr (r);
5106 TREE_CONSTANT (r) = true;
5107 return r;
5110 else
5111 return r;
5114 /* Returns true if T is a valid subexpression of a constant expression,
5115 even if it isn't itself a constant expression. */
5117 bool
5118 is_sub_constant_expr (tree t)
5120 bool non_constant_p = false;
5121 bool overflow_p = false;
5122 hash_map <tree, tree> map;
5124 constexpr_ctx ctx
5125 = { NULL, &map, NULL, NULL, NULL, NULL, true, true, false };
5127 instantiate_constexpr_fns (t);
5128 cxx_eval_constant_expression (&ctx, t, false, &non_constant_p,
5129 &overflow_p);
5130 return !non_constant_p && !overflow_p;
5133 /* If T represents a constant expression returns its reduced value.
5134 Otherwise return error_mark_node. If T is dependent, then
5135 return NULL. */
5137 tree
5138 cxx_constant_value (tree t, tree decl)
5140 return cxx_eval_outermost_constant_expr (t, false, true, true, decl);
5143 /* Helper routine for fold_simple function. Either return simplified
5144 expression T, otherwise NULL_TREE.
5145 In contrast to cp_fully_fold, and to maybe_constant_value, we try to fold
5146 even if we are within template-declaration. So be careful on call, as in
5147 such case types can be undefined. */
5149 static tree
5150 fold_simple_1 (tree t)
5152 tree op1;
5153 enum tree_code code = TREE_CODE (t);
5155 switch (code)
5157 case INTEGER_CST:
5158 case REAL_CST:
5159 case VECTOR_CST:
5160 case FIXED_CST:
5161 case COMPLEX_CST:
5162 return t;
5164 case SIZEOF_EXPR:
5165 return fold_sizeof_expr (t);
5167 case ABS_EXPR:
5168 case ABSU_EXPR:
5169 case CONJ_EXPR:
5170 case REALPART_EXPR:
5171 case IMAGPART_EXPR:
5172 case NEGATE_EXPR:
5173 case BIT_NOT_EXPR:
5174 case TRUTH_NOT_EXPR:
5175 case NOP_EXPR:
5176 case VIEW_CONVERT_EXPR:
5177 case CONVERT_EXPR:
5178 case FLOAT_EXPR:
5179 case FIX_TRUNC_EXPR:
5180 case FIXED_CONVERT_EXPR:
5181 case ADDR_SPACE_CONVERT_EXPR:
5183 op1 = TREE_OPERAND (t, 0);
5185 t = const_unop (code, TREE_TYPE (t), op1);
5186 if (!t)
5187 return NULL_TREE;
5189 if (CONVERT_EXPR_CODE_P (code)
5190 && TREE_OVERFLOW_P (t) && !TREE_OVERFLOW_P (op1))
5191 TREE_OVERFLOW (t) = false;
5192 return t;
5194 default:
5195 return NULL_TREE;
5199 /* If T is a simple constant expression, returns its simplified value.
5200 Otherwise returns T. In contrast to maybe_constant_value we
5201 simplify only few operations on constant-expressions, and we don't
5202 try to simplify constexpressions. */
5204 tree
5205 fold_simple (tree t)
5207 if (processing_template_decl)
5208 return t;
5210 tree r = fold_simple_1 (t);
5211 if (r)
5212 return r;
5214 return t;
5217 /* If T is a constant expression, returns its reduced value.
5218 Otherwise, if T does not have TREE_CONSTANT set, returns T.
5219 Otherwise, returns a version of T without TREE_CONSTANT. */
5221 static GTY((deletable)) hash_map<tree, tree> *cv_cache;
5223 tree
5224 maybe_constant_value (tree t, tree decl)
5226 tree r;
5228 if (!is_nondependent_constant_expression (t))
5230 if (TREE_OVERFLOW_P (t))
5232 t = build_nop (TREE_TYPE (t), t);
5233 TREE_CONSTANT (t) = false;
5235 return t;
5237 else if (CONSTANT_CLASS_P (t))
5238 /* No caching or evaluation needed. */
5239 return t;
5241 if (cv_cache == NULL)
5242 cv_cache = hash_map<tree, tree>::create_ggc (101);
5243 if (tree *cached = cv_cache->get (t))
5244 return *cached;
5246 r = cxx_eval_outermost_constant_expr (t, true, true, false, decl);
5247 gcc_checking_assert (r == t
5248 || CONVERT_EXPR_P (t)
5249 || TREE_CODE (t) == VIEW_CONVERT_EXPR
5250 || (TREE_CONSTANT (t) && !TREE_CONSTANT (r))
5251 || !cp_tree_equal (r, t));
5252 cv_cache->put (t, r);
5253 return r;
5256 /* Dispose of the whole CV_CACHE. */
5258 static void
5259 clear_cv_cache (void)
5261 if (cv_cache != NULL)
5262 cv_cache->empty ();
5265 /* Dispose of the whole CV_CACHE and FOLD_CACHE. */
5267 void
5268 clear_cv_and_fold_caches (void)
5270 clear_cv_cache ();
5271 clear_fold_cache ();
5274 /* Like maybe_constant_value but first fully instantiate the argument.
5276 Note: this is equivalent to instantiate_non_dependent_expr_sfinae
5277 (t, complain) followed by maybe_constant_value but is more efficient,
5278 because it calls instantiation_dependent_expression_p and
5279 potential_constant_expression at most once.
5281 Callers should generally pass their active complain, or if they are in a
5282 non-template, diagnosing context, they can use the default of
5283 tf_warning_or_error. Callers that might be within a template context, don't
5284 have a complain parameter, and aren't going to remember the result for long
5285 (e.g. null_ptr_cst_p), can pass tf_none and deal with error_mark_node
5286 appropriately. */
5288 tree
5289 fold_non_dependent_expr (tree t,
5290 tsubst_flags_t complain /* = tf_warning_or_error */)
5292 if (t == NULL_TREE)
5293 return NULL_TREE;
5295 /* If we're in a template, but T isn't value dependent, simplify
5296 it. We're supposed to treat:
5298 template <typename T> void f(T[1 + 1]);
5299 template <typename T> void f(T[2]);
5301 as two declarations of the same function, for example. */
5302 if (processing_template_decl)
5304 if (is_nondependent_constant_expression (t))
5306 processing_template_decl_sentinel s;
5307 t = instantiate_non_dependent_expr_internal (t, complain);
5309 if (type_unknown_p (t)
5310 || BRACE_ENCLOSED_INITIALIZER_P (t))
5312 if (TREE_OVERFLOW_P (t))
5314 t = build_nop (TREE_TYPE (t), t);
5315 TREE_CONSTANT (t) = false;
5317 return t;
5320 tree r = cxx_eval_outermost_constant_expr (t, true, true, false,
5321 NULL_TREE);
5322 /* cp_tree_equal looks through NOPs, so allow them. */
5323 gcc_checking_assert (r == t
5324 || CONVERT_EXPR_P (t)
5325 || TREE_CODE (t) == VIEW_CONVERT_EXPR
5326 || (TREE_CONSTANT (t) && !TREE_CONSTANT (r))
5327 || !cp_tree_equal (r, t));
5328 return r;
5330 else if (TREE_OVERFLOW_P (t))
5332 t = build_nop (TREE_TYPE (t), t);
5333 TREE_CONSTANT (t) = false;
5335 return t;
5338 return maybe_constant_value (t);
5341 /* Like maybe_constant_value, but returns a CONSTRUCTOR directly, rather
5342 than wrapped in a TARGET_EXPR.
5343 ALLOW_NON_CONSTANT is false if T is required to be a constant expression.
5344 PRETEND_CONST_REQUIRED is true if T is required to be const-evaluated as
5345 per P0595 even when ALLOW_NON_CONSTANT is true. */
5347 static tree
5348 maybe_constant_init_1 (tree t, tree decl, bool allow_non_constant,
5349 bool pretend_const_required)
5351 if (!t)
5352 return t;
5353 if (TREE_CODE (t) == EXPR_STMT)
5354 t = TREE_OPERAND (t, 0);
5355 if (TREE_CODE (t) == CONVERT_EXPR
5356 && VOID_TYPE_P (TREE_TYPE (t)))
5357 t = TREE_OPERAND (t, 0);
5358 if (TREE_CODE (t) == INIT_EXPR)
5359 t = TREE_OPERAND (t, 1);
5360 if (TREE_CODE (t) == TARGET_EXPR)
5361 t = TARGET_EXPR_INITIAL (t);
5362 if (!is_nondependent_static_init_expression (t))
5363 /* Don't try to evaluate it. */;
5364 else if (CONSTANT_CLASS_P (t) && allow_non_constant)
5365 /* No evaluation needed. */;
5366 else
5367 t = cxx_eval_outermost_constant_expr (t, allow_non_constant,
5368 /*strict*/false,
5369 pretend_const_required, decl);
5370 if (TREE_CODE (t) == TARGET_EXPR)
5372 tree init = TARGET_EXPR_INITIAL (t);
5373 if (TREE_CODE (init) == CONSTRUCTOR)
5374 t = init;
5376 return t;
5379 /* Wrapper for maybe_constant_init_1 which permits non constants. */
5381 tree
5382 maybe_constant_init (tree t, tree decl, bool pretend_const_required)
5384 return maybe_constant_init_1 (t, decl, true, pretend_const_required);
5387 /* Wrapper for maybe_constant_init_1 which does not permit non constants. */
5389 tree
5390 cxx_constant_init (tree t, tree decl)
5392 return maybe_constant_init_1 (t, decl, false, true);
5395 #if 0
5396 /* FIXME see ADDR_EXPR section in potential_constant_expression_1. */
5397 /* Return true if the object referred to by REF has automatic or thread
5398 local storage. */
5400 enum { ck_ok, ck_bad, ck_unknown };
5401 static int
5402 check_automatic_or_tls (tree ref)
5404 machine_mode mode;
5405 poly_int64 bitsize, bitpos;
5406 tree offset;
5407 int volatilep = 0, unsignedp = 0;
5408 tree decl = get_inner_reference (ref, &bitsize, &bitpos, &offset,
5409 &mode, &unsignedp, &volatilep, false);
5410 duration_kind dk;
5412 /* If there isn't a decl in the middle, we don't know the linkage here,
5413 and this isn't a constant expression anyway. */
5414 if (!DECL_P (decl))
5415 return ck_unknown;
5416 dk = decl_storage_duration (decl);
5417 return (dk == dk_auto || dk == dk_thread) ? ck_bad : ck_ok;
5419 #endif
5421 /* Return true if T denotes a potentially constant expression. Issue
5422 diagnostic as appropriate under control of FLAGS. If WANT_RVAL is true,
5423 an lvalue-rvalue conversion is implied. If NOW is true, we want to
5424 consider the expression in the current context, independent of constexpr
5425 substitution.
5427 C++0x [expr.const] used to say
5429 6 An expression is a potential constant expression if it is
5430 a constant expression where all occurrences of function
5431 parameters are replaced by arbitrary constant expressions
5432 of the appropriate type.
5434 2 A conditional expression is a constant expression unless it
5435 involves one of the following as a potentially evaluated
5436 subexpression (3.2), but subexpressions of logical AND (5.14),
5437 logical OR (5.15), and conditional (5.16) operations that are
5438 not evaluated are not considered. */
5440 static bool
5441 potential_constant_expression_1 (tree t, bool want_rval, bool strict, bool now,
5442 tsubst_flags_t flags, tree *jump_target)
5444 #define RECUR(T,RV) \
5445 potential_constant_expression_1 ((T), (RV), strict, now, flags, jump_target)
5447 enum { any = false, rval = true };
5448 int i;
5449 tree tmp;
5451 if (t == error_mark_node)
5452 return false;
5453 if (t == NULL_TREE)
5454 return true;
5455 location_t loc = cp_expr_loc_or_loc (t, input_location);
5457 if (*jump_target)
5458 /* If we are jumping, ignore everything. This is simpler than the
5459 cxx_eval_constant_expression handling because we only need to be
5460 conservatively correct, and we don't necessarily have a constant value
5461 available, so we don't bother with switch tracking. */
5462 return true;
5464 if (TREE_THIS_VOLATILE (t) && !DECL_P (t))
5466 if (flags & tf_error)
5467 error_at (loc, "expression %qE has side-effects", t);
5468 return false;
5470 if (CONSTANT_CLASS_P (t))
5471 return true;
5472 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_TYPED)
5473 && TREE_TYPE (t) == error_mark_node)
5474 return false;
5476 switch (TREE_CODE (t))
5478 case FUNCTION_DECL:
5479 case BASELINK:
5480 case TEMPLATE_DECL:
5481 case OVERLOAD:
5482 case TEMPLATE_ID_EXPR:
5483 case LABEL_DECL:
5484 case LABEL_EXPR:
5485 case CASE_LABEL_EXPR:
5486 case CONST_DECL:
5487 case SIZEOF_EXPR:
5488 case ALIGNOF_EXPR:
5489 case OFFSETOF_EXPR:
5490 case NOEXCEPT_EXPR:
5491 case TEMPLATE_PARM_INDEX:
5492 case TRAIT_EXPR:
5493 case IDENTIFIER_NODE:
5494 case USERDEF_LITERAL:
5495 /* We can see a FIELD_DECL in a pointer-to-member expression. */
5496 case FIELD_DECL:
5497 case RESULT_DECL:
5498 case USING_DECL:
5499 case USING_STMT:
5500 case PLACEHOLDER_EXPR:
5501 case REQUIRES_EXPR:
5502 case STATIC_ASSERT:
5503 case DEBUG_BEGIN_STMT:
5504 return true;
5506 case RETURN_EXPR:
5507 if (!RECUR (TREE_OPERAND (t, 0), any))
5508 return false;
5509 /* FALLTHROUGH */
5511 case BREAK_STMT:
5512 case CONTINUE_STMT:
5513 *jump_target = t;
5514 return true;
5516 case PARM_DECL:
5517 if (now)
5519 if (flags & tf_error)
5520 error ("%qE is not a constant expression", t);
5521 return false;
5523 return true;
5525 case AGGR_INIT_EXPR:
5526 case CALL_EXPR:
5527 /* -- an invocation of a function other than a constexpr function
5528 or a constexpr constructor. */
5530 tree fun = get_function_named_in_call (t);
5531 const int nargs = call_expr_nargs (t);
5532 i = 0;
5534 if (fun == NULL_TREE)
5536 /* Reset to allow the function to continue past the end
5537 of the block below. Otherwise return early. */
5538 bool bail = true;
5540 if (TREE_CODE (t) == CALL_EXPR
5541 && CALL_EXPR_FN (t) == NULL_TREE)
5542 switch (CALL_EXPR_IFN (t))
5544 /* These should be ignored, they are optimized away from
5545 constexpr functions. */
5546 case IFN_UBSAN_NULL:
5547 case IFN_UBSAN_BOUNDS:
5548 case IFN_UBSAN_VPTR:
5549 case IFN_FALLTHROUGH:
5550 return true;
5552 case IFN_ADD_OVERFLOW:
5553 case IFN_SUB_OVERFLOW:
5554 case IFN_MUL_OVERFLOW:
5555 case IFN_LAUNDER:
5556 bail = false;
5558 default:
5559 break;
5562 if (bail)
5564 /* fold_call_expr can't do anything with IFN calls. */
5565 if (flags & tf_error)
5566 error_at (loc, "call to internal function %qE", t);
5567 return false;
5571 if (fun && is_overloaded_fn (fun))
5573 if (TREE_CODE (fun) == FUNCTION_DECL)
5575 if (builtin_valid_in_constant_expr_p (fun))
5576 return true;
5577 if (!DECL_DECLARED_CONSTEXPR_P (fun)
5578 /* Allow any built-in function; if the expansion
5579 isn't constant, we'll deal with that then. */
5580 && !fndecl_built_in_p (fun))
5582 if (flags & tf_error)
5584 error_at (loc, "call to non-%<constexpr%> function %qD",
5585 fun);
5586 explain_invalid_constexpr_fn (fun);
5588 return false;
5590 /* A call to a non-static member function takes the address
5591 of the object as the first argument. But in a constant
5592 expression the address will be folded away, so look
5593 through it now. */
5594 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fun)
5595 && !DECL_CONSTRUCTOR_P (fun))
5597 tree x = get_nth_callarg (t, 0);
5598 if (is_this_parameter (x))
5599 return true;
5600 /* Don't require an immediately constant value, as
5601 constexpr substitution might not use the value. */
5602 bool sub_now = false;
5603 if (!potential_constant_expression_1 (x, rval, strict,
5604 sub_now, flags,
5605 jump_target))
5606 return false;
5607 i = 1;
5610 else
5612 if (!RECUR (fun, true))
5613 return false;
5614 fun = get_first_fn (fun);
5616 /* Skip initial arguments to base constructors. */
5617 if (DECL_BASE_CONSTRUCTOR_P (fun))
5618 i = num_artificial_parms_for (fun);
5619 fun = DECL_ORIGIN (fun);
5621 else if (fun)
5623 if (RECUR (fun, rval))
5624 /* Might end up being a constant function pointer. */;
5625 else
5626 return false;
5628 for (; i < nargs; ++i)
5630 tree x = get_nth_callarg (t, i);
5631 /* In a template, reference arguments haven't been converted to
5632 REFERENCE_TYPE and we might not even know if the parameter
5633 is a reference, so accept lvalue constants too. */
5634 bool rv = processing_template_decl ? any : rval;
5635 /* Don't require an immediately constant value, as constexpr
5636 substitution might not use the value of the argument. */
5637 bool sub_now = false;
5638 if (!potential_constant_expression_1 (x, rv, strict,
5639 sub_now, flags, jump_target))
5640 return false;
5642 return true;
5645 case NON_LVALUE_EXPR:
5646 /* -- an lvalue-to-rvalue conversion (4.1) unless it is applied to
5647 -- an lvalue of integral type that refers to a non-volatile
5648 const variable or static data member initialized with
5649 constant expressions, or
5651 -- an lvalue of literal type that refers to non-volatile
5652 object defined with constexpr, or that refers to a
5653 sub-object of such an object; */
5654 return RECUR (TREE_OPERAND (t, 0), rval);
5656 case VAR_DECL:
5657 if (DECL_HAS_VALUE_EXPR_P (t))
5659 if (now && is_normal_capture_proxy (t))
5661 /* -- in a lambda-expression, a reference to this or to a
5662 variable with automatic storage duration defined outside that
5663 lambda-expression, where the reference would be an
5664 odr-use. */
5665 if (flags & tf_error)
5667 tree cap = DECL_CAPTURED_VARIABLE (t);
5668 error ("lambda capture of %qE is not a constant expression",
5669 cap);
5670 if (!want_rval && decl_constant_var_p (cap))
5671 inform (input_location, "because it is used as a glvalue");
5673 return false;
5675 return RECUR (DECL_VALUE_EXPR (t), rval);
5677 if (want_rval
5678 && !var_in_maybe_constexpr_fn (t)
5679 && !type_dependent_expression_p (t)
5680 && !decl_maybe_constant_var_p (t)
5681 && (strict
5682 || !CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (t))
5683 || (DECL_INITIAL (t)
5684 && !DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t)))
5685 && COMPLETE_TYPE_P (TREE_TYPE (t))
5686 && !is_really_empty_class (TREE_TYPE (t)))
5688 if (flags & tf_error)
5689 non_const_var_error (t);
5690 return false;
5692 return true;
5694 case NOP_EXPR:
5695 case CONVERT_EXPR:
5696 case VIEW_CONVERT_EXPR:
5697 /* -- a reinterpret_cast. FIXME not implemented, and this rule
5698 may change to something more specific to type-punning (DR 1312). */
5700 tree from = TREE_OPERAND (t, 0);
5701 if (INDIRECT_TYPE_P (TREE_TYPE (t))
5702 && TREE_CODE (from) == INTEGER_CST
5703 && !integer_zerop (from))
5705 if (flags & tf_error)
5706 error_at (loc, "reinterpret_cast from integer to pointer");
5707 return false;
5709 return (RECUR (from, TREE_CODE (t) != VIEW_CONVERT_EXPR));
5712 case ADDRESSOF_EXPR:
5713 /* This is like ADDR_EXPR, except it won't form pointer-to-member. */
5714 t = TREE_OPERAND (t, 0);
5715 goto handle_addr_expr;
5717 case ADDR_EXPR:
5718 /* -- a unary operator & that is applied to an lvalue that
5719 designates an object with thread or automatic storage
5720 duration; */
5721 t = TREE_OPERAND (t, 0);
5723 if (TREE_CODE (t) == OFFSET_REF && PTRMEM_OK_P (t))
5724 /* A pointer-to-member constant. */
5725 return true;
5727 handle_addr_expr:
5728 #if 0
5729 /* FIXME adjust when issue 1197 is fully resolved. For now don't do
5730 any checking here, as we might dereference the pointer later. If
5731 we remove this code, also remove check_automatic_or_tls. */
5732 i = check_automatic_or_tls (t);
5733 if (i == ck_ok)
5734 return true;
5735 if (i == ck_bad)
5737 if (flags & tf_error)
5738 error ("address-of an object %qE with thread local or "
5739 "automatic storage is not a constant expression", t);
5740 return false;
5742 #endif
5743 return RECUR (t, any);
5745 case REALPART_EXPR:
5746 case IMAGPART_EXPR:
5747 case COMPONENT_REF:
5748 case BIT_FIELD_REF:
5749 case ARROW_EXPR:
5750 case OFFSET_REF:
5751 /* -- a class member access unless its postfix-expression is
5752 of literal type or of pointer to literal type. */
5753 /* This test would be redundant, as it follows from the
5754 postfix-expression being a potential constant expression. */
5755 if (type_unknown_p (t))
5756 return true;
5757 return RECUR (TREE_OPERAND (t, 0), want_rval);
5759 case EXPR_PACK_EXPANSION:
5760 return RECUR (PACK_EXPANSION_PATTERN (t), want_rval);
5762 case INDIRECT_REF:
5764 tree x = TREE_OPERAND (t, 0);
5765 STRIP_NOPS (x);
5766 if (is_this_parameter (x) && !is_capture_proxy (x))
5768 if (!var_in_maybe_constexpr_fn (x))
5770 if (flags & tf_error)
5771 error_at (loc, "use of %<this%> in a constant expression");
5772 return false;
5774 return true;
5776 return RECUR (x, rval);
5779 case STATEMENT_LIST:
5781 tree_stmt_iterator i;
5782 for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
5784 if (!RECUR (tsi_stmt (i), any))
5785 return false;
5787 return true;
5789 break;
5791 case MODIFY_EXPR:
5792 if (cxx_dialect < cxx14)
5793 goto fail;
5794 if (!RECUR (TREE_OPERAND (t, 0), any))
5795 return false;
5796 if (!RECUR (TREE_OPERAND (t, 1), rval))
5797 return false;
5798 return true;
5800 case MODOP_EXPR:
5801 if (cxx_dialect < cxx14)
5802 goto fail;
5803 if (!RECUR (TREE_OPERAND (t, 0), rval))
5804 return false;
5805 if (!RECUR (TREE_OPERAND (t, 2), rval))
5806 return false;
5807 return true;
5809 case DO_STMT:
5810 if (!RECUR (DO_COND (t), rval))
5811 return false;
5812 if (!RECUR (DO_BODY (t), any))
5813 return false;
5814 if (breaks (jump_target) || continues (jump_target))
5815 *jump_target = NULL_TREE;
5816 return true;
5818 case FOR_STMT:
5819 if (!RECUR (FOR_INIT_STMT (t), any))
5820 return false;
5821 tmp = FOR_COND (t);
5822 if (!RECUR (tmp, rval))
5823 return false;
5824 if (tmp)
5826 if (!processing_template_decl)
5827 tmp = cxx_eval_outermost_constant_expr (tmp, true);
5828 /* If we couldn't evaluate the condition, it might not ever be
5829 true. */
5830 if (!integer_onep (tmp))
5831 return true;
5833 if (!RECUR (FOR_EXPR (t), any))
5834 return false;
5835 if (!RECUR (FOR_BODY (t), any))
5836 return false;
5837 if (breaks (jump_target) || continues (jump_target))
5838 *jump_target = NULL_TREE;
5839 return true;
5841 case RANGE_FOR_STMT:
5842 if (!RECUR (RANGE_FOR_INIT_STMT (t), any))
5843 return false;
5844 if (!RECUR (RANGE_FOR_EXPR (t), any))
5845 return false;
5846 if (!RECUR (RANGE_FOR_BODY (t), any))
5847 return false;
5848 if (breaks (jump_target) || continues (jump_target))
5849 *jump_target = NULL_TREE;
5850 return true;
5852 case WHILE_STMT:
5853 tmp = WHILE_COND (t);
5854 if (!RECUR (tmp, rval))
5855 return false;
5856 if (!processing_template_decl)
5857 tmp = cxx_eval_outermost_constant_expr (tmp, true);
5858 /* If we couldn't evaluate the condition, it might not ever be true. */
5859 if (!integer_onep (tmp))
5860 return true;
5861 if (!RECUR (WHILE_BODY (t), any))
5862 return false;
5863 if (breaks (jump_target) || continues (jump_target))
5864 *jump_target = NULL_TREE;
5865 return true;
5867 case SWITCH_STMT:
5868 if (!RECUR (SWITCH_STMT_COND (t), rval))
5869 return false;
5870 /* FIXME we don't check SWITCH_STMT_BODY currently, because even
5871 unreachable labels would be checked. */
5872 return true;
5874 case STMT_EXPR:
5875 return RECUR (STMT_EXPR_STMT (t), rval);
5877 case LAMBDA_EXPR:
5878 if (cxx_dialect >= cxx17)
5879 /* In C++17 lambdas can be constexpr, don't give up yet. */
5880 return true;
5881 else if (flags & tf_error)
5882 error_at (loc, "lambda-expression is not a constant expression "
5883 "before C++17");
5884 return false;
5886 case DYNAMIC_CAST_EXPR:
5887 case PSEUDO_DTOR_EXPR:
5888 case NEW_EXPR:
5889 case VEC_NEW_EXPR:
5890 case DELETE_EXPR:
5891 case VEC_DELETE_EXPR:
5892 case THROW_EXPR:
5893 case OMP_PARALLEL:
5894 case OMP_TASK:
5895 case OMP_FOR:
5896 case OMP_SIMD:
5897 case OMP_DISTRIBUTE:
5898 case OMP_TASKLOOP:
5899 case OMP_TEAMS:
5900 case OMP_TARGET_DATA:
5901 case OMP_TARGET:
5902 case OMP_SECTIONS:
5903 case OMP_ORDERED:
5904 case OMP_CRITICAL:
5905 case OMP_SINGLE:
5906 case OMP_SECTION:
5907 case OMP_MASTER:
5908 case OMP_TASKGROUP:
5909 case OMP_TARGET_UPDATE:
5910 case OMP_TARGET_ENTER_DATA:
5911 case OMP_TARGET_EXIT_DATA:
5912 case OMP_ATOMIC:
5913 case OMP_ATOMIC_READ:
5914 case OMP_ATOMIC_CAPTURE_OLD:
5915 case OMP_ATOMIC_CAPTURE_NEW:
5916 case OACC_PARALLEL:
5917 case OACC_KERNELS:
5918 case OACC_DATA:
5919 case OACC_HOST_DATA:
5920 case OACC_LOOP:
5921 case OACC_CACHE:
5922 case OACC_DECLARE:
5923 case OACC_ENTER_DATA:
5924 case OACC_EXIT_DATA:
5925 case OACC_UPDATE:
5926 /* GCC internal stuff. */
5927 case VA_ARG_EXPR:
5928 case TRANSACTION_EXPR:
5929 case ASM_EXPR:
5930 case AT_ENCODE_EXPR:
5931 fail:
5932 if (flags & tf_error)
5933 error_at (loc, "expression %qE is not a constant expression", t);
5934 return false;
5936 case OBJ_TYPE_REF:
5937 if (cxx_dialect >= cxx2a)
5938 /* In C++2a virtual calls can be constexpr, don't give up yet. */
5939 return true;
5940 else if (flags & tf_error)
5941 error_at (loc, "virtual functions cannot be constexpr before C++2a");
5942 return false;
5944 case TYPEID_EXPR:
5945 /* -- a typeid expression whose operand is of polymorphic
5946 class type; */
5948 tree e = TREE_OPERAND (t, 0);
5949 if (!TYPE_P (e) && !type_dependent_expression_p (e)
5950 && TYPE_POLYMORPHIC_P (TREE_TYPE (e)))
5952 if (flags & tf_error)
5953 error_at (loc, "typeid-expression is not a constant expression "
5954 "because %qE is of polymorphic type", e);
5955 return false;
5957 return true;
5960 case POINTER_DIFF_EXPR:
5961 case MINUS_EXPR:
5962 want_rval = true;
5963 goto binary;
5965 case LT_EXPR:
5966 case LE_EXPR:
5967 case GT_EXPR:
5968 case GE_EXPR:
5969 case EQ_EXPR:
5970 case NE_EXPR:
5971 want_rval = true;
5972 goto binary;
5974 case PREINCREMENT_EXPR:
5975 case POSTINCREMENT_EXPR:
5976 case PREDECREMENT_EXPR:
5977 case POSTDECREMENT_EXPR:
5978 if (cxx_dialect < cxx14)
5979 goto fail;
5980 goto unary;
5982 case BIT_NOT_EXPR:
5983 /* A destructor. */
5984 if (TYPE_P (TREE_OPERAND (t, 0)))
5985 return true;
5986 /* fall through. */
5988 case CONJ_EXPR:
5989 case SAVE_EXPR:
5990 case FIX_TRUNC_EXPR:
5991 case FLOAT_EXPR:
5992 case NEGATE_EXPR:
5993 case ABS_EXPR:
5994 case ABSU_EXPR:
5995 case TRUTH_NOT_EXPR:
5996 case FIXED_CONVERT_EXPR:
5997 case UNARY_PLUS_EXPR:
5998 case UNARY_LEFT_FOLD_EXPR:
5999 case UNARY_RIGHT_FOLD_EXPR:
6000 unary:
6001 return RECUR (TREE_OPERAND (t, 0), rval);
6003 case CAST_EXPR:
6004 case CONST_CAST_EXPR:
6005 case STATIC_CAST_EXPR:
6006 case REINTERPRET_CAST_EXPR:
6007 case IMPLICIT_CONV_EXPR:
6008 if (cxx_dialect < cxx11
6009 && !dependent_type_p (TREE_TYPE (t))
6010 && !INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t)))
6011 /* In C++98, a conversion to non-integral type can't be part of a
6012 constant expression. */
6014 if (flags & tf_error)
6015 error_at (loc,
6016 "cast to non-integral type %qT in a constant expression",
6017 TREE_TYPE (t));
6018 return false;
6020 /* This might be a conversion from a class to a (potentially) literal
6021 type. Let's consider it potentially constant since the conversion
6022 might be a constexpr user-defined conversion. */
6023 else if (cxx_dialect >= cxx11
6024 && (dependent_type_p (TREE_TYPE (t))
6025 || !COMPLETE_TYPE_P (TREE_TYPE (t))
6026 || literal_type_p (TREE_TYPE (t)))
6027 && TREE_OPERAND (t, 0))
6029 tree type = TREE_TYPE (TREE_OPERAND (t, 0));
6030 /* If this is a dependent type, it could end up being a class
6031 with conversions. */
6032 if (type == NULL_TREE || WILDCARD_TYPE_P (type))
6033 return true;
6034 /* Or a non-dependent class which has conversions. */
6035 else if (CLASS_TYPE_P (type)
6036 && (TYPE_HAS_CONVERSION (type) || dependent_scope_p (type)))
6037 return true;
6040 return (RECUR (TREE_OPERAND (t, 0),
6041 !TYPE_REF_P (TREE_TYPE (t))));
6043 case BIND_EXPR:
6044 return RECUR (BIND_EXPR_BODY (t), want_rval);
6046 case CLEANUP_POINT_EXPR:
6047 case MUST_NOT_THROW_EXPR:
6048 case TRY_CATCH_EXPR:
6049 case TRY_BLOCK:
6050 case EH_SPEC_BLOCK:
6051 case EXPR_STMT:
6052 case PAREN_EXPR:
6053 case NON_DEPENDENT_EXPR:
6054 /* For convenience. */
6055 case LOOP_EXPR:
6056 case EXIT_EXPR:
6057 return RECUR (TREE_OPERAND (t, 0), want_rval);
6059 case DECL_EXPR:
6060 tmp = DECL_EXPR_DECL (t);
6061 if (VAR_P (tmp) && !DECL_ARTIFICIAL (tmp))
6063 if (TREE_STATIC (tmp))
6065 if (flags & tf_error)
6066 error_at (DECL_SOURCE_LOCATION (tmp), "%qD declared "
6067 "%<static%> in %<constexpr%> context", tmp);
6068 return false;
6070 else if (CP_DECL_THREAD_LOCAL_P (tmp))
6072 if (flags & tf_error)
6073 error_at (DECL_SOURCE_LOCATION (tmp), "%qD declared "
6074 "%<thread_local%> in %<constexpr%> context", tmp);
6075 return false;
6077 else if (!check_for_uninitialized_const_var
6078 (tmp, /*constexpr_context_p=*/true, flags))
6079 return false;
6081 return RECUR (tmp, want_rval);
6083 case TRY_FINALLY_EXPR:
6084 return (RECUR (TREE_OPERAND (t, 0), want_rval)
6085 && RECUR (TREE_OPERAND (t, 1), any));
6087 case SCOPE_REF:
6088 return RECUR (TREE_OPERAND (t, 1), want_rval);
6090 case TARGET_EXPR:
6091 if (!TARGET_EXPR_DIRECT_INIT_P (t)
6092 && !literal_type_p (TREE_TYPE (t)))
6094 if (flags & tf_error)
6096 auto_diagnostic_group d;
6097 error_at (loc, "temporary of non-literal type %qT in a "
6098 "constant expression", TREE_TYPE (t));
6099 explain_non_literal_class (TREE_TYPE (t));
6101 return false;
6103 /* FALLTHRU */
6104 case INIT_EXPR:
6105 return RECUR (TREE_OPERAND (t, 1), rval);
6107 case CONSTRUCTOR:
6109 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (t);
6110 constructor_elt *ce;
6111 for (i = 0; vec_safe_iterate (v, i, &ce); ++i)
6112 if (!RECUR (ce->value, want_rval))
6113 return false;
6114 return true;
6117 case TREE_LIST:
6119 gcc_assert (TREE_PURPOSE (t) == NULL_TREE
6120 || DECL_P (TREE_PURPOSE (t)));
6121 if (!RECUR (TREE_VALUE (t), want_rval))
6122 return false;
6123 if (TREE_CHAIN (t) == NULL_TREE)
6124 return true;
6125 return RECUR (TREE_CHAIN (t), want_rval);
6128 case TRUNC_DIV_EXPR:
6129 case CEIL_DIV_EXPR:
6130 case FLOOR_DIV_EXPR:
6131 case ROUND_DIV_EXPR:
6132 case TRUNC_MOD_EXPR:
6133 case CEIL_MOD_EXPR:
6134 case ROUND_MOD_EXPR:
6136 tree denom = TREE_OPERAND (t, 1);
6137 if (!RECUR (denom, rval))
6138 return false;
6139 /* We can't call cxx_eval_outermost_constant_expr on an expression
6140 that hasn't been through instantiate_non_dependent_expr yet. */
6141 if (!processing_template_decl)
6142 denom = cxx_eval_outermost_constant_expr (denom, true);
6143 if (integer_zerop (denom))
6145 if (flags & tf_error)
6146 error ("division by zero is not a constant expression");
6147 return false;
6149 else
6151 want_rval = true;
6152 return RECUR (TREE_OPERAND (t, 0), want_rval);
6156 case COMPOUND_EXPR:
6158 /* check_return_expr sometimes wraps a TARGET_EXPR in a
6159 COMPOUND_EXPR; don't get confused. Also handle EMPTY_CLASS_EXPR
6160 introduced by build_call_a. */
6161 tree op0 = TREE_OPERAND (t, 0);
6162 tree op1 = TREE_OPERAND (t, 1);
6163 STRIP_NOPS (op1);
6164 if ((TREE_CODE (op0) == TARGET_EXPR && op1 == TARGET_EXPR_SLOT (op0))
6165 || TREE_CODE (op1) == EMPTY_CLASS_EXPR)
6166 return RECUR (op0, want_rval);
6167 else
6168 goto binary;
6171 /* If the first operand is the non-short-circuit constant, look at
6172 the second operand; otherwise we only care about the first one for
6173 potentiality. */
6174 case TRUTH_AND_EXPR:
6175 case TRUTH_ANDIF_EXPR:
6176 tmp = boolean_true_node;
6177 goto truth;
6178 case TRUTH_OR_EXPR:
6179 case TRUTH_ORIF_EXPR:
6180 tmp = boolean_false_node;
6181 truth:
6183 tree op = TREE_OPERAND (t, 0);
6184 if (!RECUR (op, rval))
6185 return false;
6186 if (!processing_template_decl)
6187 op = cxx_eval_outermost_constant_expr (op, true);
6188 if (tree_int_cst_equal (op, tmp))
6189 return RECUR (TREE_OPERAND (t, 1), rval);
6190 else
6191 return true;
6194 case PLUS_EXPR:
6195 case MULT_EXPR:
6196 case POINTER_PLUS_EXPR:
6197 case RDIV_EXPR:
6198 case EXACT_DIV_EXPR:
6199 case MIN_EXPR:
6200 case MAX_EXPR:
6201 case LSHIFT_EXPR:
6202 case RSHIFT_EXPR:
6203 case LROTATE_EXPR:
6204 case RROTATE_EXPR:
6205 case BIT_IOR_EXPR:
6206 case BIT_XOR_EXPR:
6207 case BIT_AND_EXPR:
6208 case TRUTH_XOR_EXPR:
6209 case UNORDERED_EXPR:
6210 case ORDERED_EXPR:
6211 case UNLT_EXPR:
6212 case UNLE_EXPR:
6213 case UNGT_EXPR:
6214 case UNGE_EXPR:
6215 case UNEQ_EXPR:
6216 case LTGT_EXPR:
6217 case RANGE_EXPR:
6218 case COMPLEX_EXPR:
6219 want_rval = true;
6220 /* Fall through. */
6221 case ARRAY_REF:
6222 case ARRAY_RANGE_REF:
6223 case MEMBER_REF:
6224 case DOTSTAR_EXPR:
6225 case MEM_REF:
6226 case BINARY_LEFT_FOLD_EXPR:
6227 case BINARY_RIGHT_FOLD_EXPR:
6228 binary:
6229 for (i = 0; i < 2; ++i)
6230 if (!RECUR (TREE_OPERAND (t, i), want_rval))
6231 return false;
6232 return true;
6234 case VEC_PERM_EXPR:
6235 for (i = 0; i < 3; ++i)
6236 if (!RECUR (TREE_OPERAND (t, i), true))
6237 return false;
6238 return true;
6240 case COND_EXPR:
6241 if (COND_EXPR_IS_VEC_DELETE (t))
6243 if (flags & tf_error)
6244 error_at (loc, "%<delete[]%> is not a constant expression");
6245 return false;
6247 /* Fall through. */
6248 case IF_STMT:
6249 case VEC_COND_EXPR:
6250 /* If the condition is a known constant, we know which of the legs we
6251 care about; otherwise we only require that the condition and
6252 either of the legs be potentially constant. */
6253 tmp = TREE_OPERAND (t, 0);
6254 if (!RECUR (tmp, rval))
6255 return false;
6256 if (!processing_template_decl)
6257 tmp = cxx_eval_outermost_constant_expr (tmp, true);
6258 if (integer_zerop (tmp))
6259 return RECUR (TREE_OPERAND (t, 2), want_rval);
6260 else if (TREE_CODE (tmp) == INTEGER_CST)
6261 return RECUR (TREE_OPERAND (t, 1), want_rval);
6262 for (i = 1; i < 3; ++i)
6263 if (potential_constant_expression_1 (TREE_OPERAND (t, i),
6264 want_rval, strict, now,
6265 tf_none, jump_target))
6266 return true;
6267 if (flags & tf_error)
6268 error_at (loc, "expression %qE is not a constant expression", t);
6269 return false;
6271 case VEC_INIT_EXPR:
6272 if (VEC_INIT_EXPR_IS_CONSTEXPR (t))
6273 return true;
6274 if (flags & tf_error)
6276 error_at (loc, "non-constant array initialization");
6277 diagnose_non_constexpr_vec_init (t);
6279 return false;
6281 case TYPE_DECL:
6282 case TAG_DEFN:
6283 /* We can see these in statement-expressions. */
6284 return true;
6286 case CLEANUP_STMT:
6287 case EMPTY_CLASS_EXPR:
6288 case PREDICT_EXPR:
6289 return false;
6291 case GOTO_EXPR:
6293 tree *target = &TREE_OPERAND (t, 0);
6294 /* Gotos representing break and continue are OK. */
6295 if (breaks (target) || continues (target))
6297 *jump_target = *target;
6298 return true;
6300 if (flags & tf_error)
6301 error_at (loc, "%<goto%> is not a constant expression");
6302 return false;
6305 case ANNOTATE_EXPR:
6306 return RECUR (TREE_OPERAND (t, 0), rval);
6308 default:
6309 if (objc_is_property_ref (t))
6310 return false;
6312 sorry ("unexpected AST of kind %s", get_tree_code_name (TREE_CODE (t)));
6313 gcc_unreachable ();
6314 return false;
6316 #undef RECUR
6319 bool
6320 potential_constant_expression_1 (tree t, bool want_rval, bool strict, bool now,
6321 tsubst_flags_t flags)
6323 tree target = NULL_TREE;
6324 return potential_constant_expression_1 (t, want_rval, strict, now,
6325 flags, &target);
6328 /* The main entry point to the above. */
6330 bool
6331 potential_constant_expression (tree t)
6333 return potential_constant_expression_1 (t, false, true, false, tf_none);
6336 /* As above, but require a constant rvalue. */
6338 bool
6339 potential_rvalue_constant_expression (tree t)
6341 return potential_constant_expression_1 (t, true, true, false, tf_none);
6344 /* Like above, but complain about non-constant expressions. */
6346 bool
6347 require_potential_constant_expression (tree t)
6349 return potential_constant_expression_1 (t, false, true, false,
6350 tf_warning_or_error);
6353 /* Cross product of the above. */
6355 bool
6356 require_potential_rvalue_constant_expression (tree t)
6358 return potential_constant_expression_1 (t, true, true, false,
6359 tf_warning_or_error);
6362 /* Like above, but don't consider PARM_DECL a potential_constant_expression. */
6364 bool
6365 require_rvalue_constant_expression (tree t)
6367 return potential_constant_expression_1 (t, true, true, true,
6368 tf_warning_or_error);
6371 /* Like potential_constant_expression, but don't consider possible constexpr
6372 substitution of the current function. That is, PARM_DECL qualifies under
6373 potential_constant_expression, but not here.
6375 This is basically what you can check when any actual constant values might
6376 be value-dependent. */
6378 bool
6379 is_constant_expression (tree t)
6381 return potential_constant_expression_1 (t, false, true, true, tf_none);
6384 /* Like above, but complain about non-constant expressions. */
6386 bool
6387 require_constant_expression (tree t)
6389 return potential_constant_expression_1 (t, false, true, true,
6390 tf_warning_or_error);
6393 /* Like is_constant_expression, but allow const variables that are not allowed
6394 under constexpr rules. */
6396 bool
6397 is_static_init_expression (tree t)
6399 return potential_constant_expression_1 (t, false, false, true, tf_none);
6402 /* Returns true if T is a potential constant expression that is not
6403 instantiation-dependent, and therefore a candidate for constant folding even
6404 in a template. */
6406 bool
6407 is_nondependent_constant_expression (tree t)
6409 return (!type_unknown_p (t)
6410 && !BRACE_ENCLOSED_INITIALIZER_P (t)
6411 && is_constant_expression (t)
6412 && !instantiation_dependent_expression_p (t));
6415 /* Returns true if T is a potential static initializer expression that is not
6416 instantiation-dependent. */
6418 bool
6419 is_nondependent_static_init_expression (tree t)
6421 return (!type_unknown_p (t)
6422 && !BRACE_ENCLOSED_INITIALIZER_P (t)
6423 && is_static_init_expression (t)
6424 && !instantiation_dependent_expression_p (t));
6427 /* Finalize constexpr processing after parsing. */
6429 void
6430 fini_constexpr (void)
6432 /* The contexpr call and fundef copies tables are no longer needed. */
6433 constexpr_call_table = NULL;
6434 fundef_copies_table = NULL;
6437 #include "gt-cp-constexpr.h"