* tree-scalar-evolution.c (iv_can_overflow_p): New function.
[official-gcc.git] / gcc / cp / constexpr.c
blobba40435ef67d4ae130a83b5d0c5b809723027d9b
1 /* Perform -*- C++ -*- constant expression evaluation, including calls to
2 constexpr functions. These routines are used both during actual parsing
3 and during the instantiation of template functions.
5 Copyright (C) 1998-2016 Free Software Foundation, Inc.
7 This file is part of GCC.
9 GCC is free software; you can redistribute it and/or modify it
10 under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3, or (at your option)
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"
36 static bool verify_constant (tree, bool, bool *, bool *);
37 #define VERIFY_CONSTANT(X) \
38 do { \
39 if (verify_constant ((X), ctx->quiet, non_constant_p, overflow_p)) \
40 return t; \
41 } while (0)
43 /* Returns true iff FUN is an instantiation of a constexpr function
44 template or a defaulted constexpr function. */
46 bool
47 is_instantiation_of_constexpr (tree fun)
49 return ((DECL_TEMPLOID_INSTANTIATION (fun)
50 && DECL_DECLARED_CONSTEXPR_P (DECL_TI_TEMPLATE (fun)))
51 || (DECL_DEFAULTED_FN (fun)
52 && DECL_DECLARED_CONSTEXPR_P (fun)));
55 /* Return true if T is a literal type. */
57 bool
58 literal_type_p (tree t)
60 if (SCALAR_TYPE_P (t)
61 || VECTOR_TYPE_P (t)
62 || TREE_CODE (t) == REFERENCE_TYPE
63 || (VOID_TYPE_P (t) && cxx_dialect >= cxx14))
64 return true;
65 if (CLASS_TYPE_P (t))
67 t = complete_type (t);
68 gcc_assert (COMPLETE_TYPE_P (t) || errorcount);
69 return CLASSTYPE_LITERAL_P (t);
71 if (TREE_CODE (t) == ARRAY_TYPE)
72 return literal_type_p (strip_array_types (t));
73 return false;
76 /* If DECL is a variable declared `constexpr', require its type
77 be literal. Return the DECL if OK, otherwise NULL. */
79 tree
80 ensure_literal_type_for_constexpr_object (tree decl)
82 tree type = TREE_TYPE (decl);
83 if (VAR_P (decl)
84 && (DECL_DECLARED_CONSTEXPR_P (decl)
85 || var_in_constexpr_fn (decl))
86 && !processing_template_decl)
88 tree stype = strip_array_types (type);
89 if (CLASS_TYPE_P (stype) && !COMPLETE_TYPE_P (complete_type (stype)))
90 /* Don't complain here, we'll complain about incompleteness
91 when we try to initialize the variable. */;
92 else if (!literal_type_p (type))
94 if (DECL_DECLARED_CONSTEXPR_P (decl))
96 error ("the type %qT of constexpr variable %qD is not literal",
97 type, decl);
98 explain_non_literal_class (type);
100 else
102 if (!DECL_TEMPLATE_INSTANTIATION (current_function_decl))
104 error ("variable %qD of non-literal type %qT in %<constexpr%> "
105 "function", decl, type);
106 explain_non_literal_class (type);
108 cp_function_chain->invalid_constexpr = true;
110 return NULL;
113 return decl;
116 /* Representation of entries in the constexpr function definition table. */
118 struct GTY((for_user)) constexpr_fundef {
119 tree decl;
120 tree body;
123 struct constexpr_fundef_hasher : ggc_ptr_hash<constexpr_fundef>
125 static hashval_t hash (constexpr_fundef *);
126 static bool equal (constexpr_fundef *, constexpr_fundef *);
129 /* This table holds all constexpr function definitions seen in
130 the current translation unit. */
132 static GTY (()) hash_table<constexpr_fundef_hasher> *constexpr_fundef_table;
134 /* Utility function used for managing the constexpr function table.
135 Return true if the entries pointed to by P and Q are for the
136 same constexpr function. */
138 inline bool
139 constexpr_fundef_hasher::equal (constexpr_fundef *lhs, constexpr_fundef *rhs)
141 return lhs->decl == rhs->decl;
144 /* Utility function used for managing the constexpr function table.
145 Return a hash value for the entry pointed to by Q. */
147 inline hashval_t
148 constexpr_fundef_hasher::hash (constexpr_fundef *fundef)
150 return DECL_UID (fundef->decl);
153 /* Return a previously saved definition of function FUN. */
155 static constexpr_fundef *
156 retrieve_constexpr_fundef (tree fun)
158 constexpr_fundef fundef = { NULL, NULL };
159 if (constexpr_fundef_table == NULL)
160 return NULL;
162 fundef.decl = fun;
163 return constexpr_fundef_table->find (&fundef);
166 /* Check whether the parameter and return types of FUN are valid for a
167 constexpr function, and complain if COMPLAIN. */
169 static bool
170 is_valid_constexpr_fn (tree fun, bool complain)
172 bool ret = true;
174 if (DECL_INHERITED_CTOR_BASE (fun)
175 && TREE_CODE (fun) == TEMPLATE_DECL)
177 ret = false;
178 if (complain)
179 error ("inherited constructor %qD is not constexpr",
180 get_inherited_ctor (fun));
182 else
184 for (tree parm = FUNCTION_FIRST_USER_PARM (fun);
185 parm != NULL_TREE; parm = TREE_CHAIN (parm))
186 if (!literal_type_p (TREE_TYPE (parm)))
188 ret = false;
189 if (complain)
191 error ("invalid type for parameter %d of constexpr "
192 "function %q+#D", DECL_PARM_INDEX (parm), fun);
193 explain_non_literal_class (TREE_TYPE (parm));
198 if (!DECL_CONSTRUCTOR_P (fun))
200 tree rettype = TREE_TYPE (TREE_TYPE (fun));
201 if (!literal_type_p (rettype))
203 ret = false;
204 if (complain)
206 error ("invalid return type %qT of constexpr function %q+D",
207 rettype, fun);
208 explain_non_literal_class (rettype);
212 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fun)
213 && !CLASSTYPE_LITERAL_P (DECL_CONTEXT (fun)))
215 ret = false;
216 if (complain)
218 error ("enclosing class of constexpr non-static member "
219 "function %q+#D is not a literal type", fun);
220 explain_non_literal_class (DECL_CONTEXT (fun));
224 else if (CLASSTYPE_VBASECLASSES (DECL_CONTEXT (fun)))
226 ret = false;
227 if (complain)
228 error ("%q#T has virtual base classes", DECL_CONTEXT (fun));
231 return ret;
234 /* Subroutine of build_data_member_initialization. MEMBER is a COMPONENT_REF
235 for a member of an anonymous aggregate, INIT is the initializer for that
236 member, and VEC_OUTER is the vector of constructor elements for the class
237 whose constructor we are processing. Add the initializer to the vector
238 and return true to indicate success. */
240 static bool
241 build_anon_member_initialization (tree member, tree init,
242 vec<constructor_elt, va_gc> **vec_outer)
244 /* MEMBER presents the relevant fields from the inside out, but we need
245 to build up the initializer from the outside in so that we can reuse
246 previously built CONSTRUCTORs if this is, say, the second field in an
247 anonymous struct. So we use a vec as a stack. */
248 auto_vec<tree, 2> fields;
251 fields.safe_push (TREE_OPERAND (member, 1));
252 member = TREE_OPERAND (member, 0);
254 while (ANON_AGGR_TYPE_P (TREE_TYPE (member))
255 && TREE_CODE (member) == COMPONENT_REF);
257 /* VEC has the constructor elements vector for the context of FIELD.
258 If FIELD is an anonymous aggregate, we will push inside it. */
259 vec<constructor_elt, va_gc> **vec = vec_outer;
260 tree field;
261 while (field = fields.pop(),
262 ANON_AGGR_TYPE_P (TREE_TYPE (field)))
264 tree ctor;
265 /* If there is already an outer constructor entry for the anonymous
266 aggregate FIELD, use it; otherwise, insert one. */
267 if (vec_safe_is_empty (*vec)
268 || (*vec)->last().index != field)
270 ctor = build_constructor (TREE_TYPE (field), NULL);
271 CONSTRUCTOR_APPEND_ELT (*vec, field, ctor);
273 else
274 ctor = (*vec)->last().value;
275 vec = &CONSTRUCTOR_ELTS (ctor);
278 /* Now we're at the innermost field, the one that isn't an anonymous
279 aggregate. Add its initializer to the CONSTRUCTOR and we're done. */
280 gcc_assert (fields.is_empty());
281 CONSTRUCTOR_APPEND_ELT (*vec, field, init);
283 return true;
286 /* Subroutine of build_constexpr_constructor_member_initializers.
287 The expression tree T represents a data member initialization
288 in a (constexpr) constructor definition. Build a pairing of
289 the data member with its initializer, and prepend that pair
290 to the existing initialization pair INITS. */
292 static bool
293 build_data_member_initialization (tree t, vec<constructor_elt, va_gc> **vec)
295 tree member, init;
296 if (TREE_CODE (t) == CLEANUP_POINT_EXPR)
297 t = TREE_OPERAND (t, 0);
298 if (TREE_CODE (t) == EXPR_STMT)
299 t = TREE_OPERAND (t, 0);
300 if (t == error_mark_node)
301 return false;
302 if (TREE_CODE (t) == STATEMENT_LIST)
304 tree_stmt_iterator i;
305 for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
307 if (! build_data_member_initialization (tsi_stmt (i), vec))
308 return false;
310 return true;
312 if (TREE_CODE (t) == CLEANUP_STMT)
314 /* We can't see a CLEANUP_STMT in a constructor for a literal class,
315 but we can in a constexpr constructor for a non-literal class. Just
316 ignore it; either all the initialization will be constant, in which
317 case the cleanup can't run, or it can't be constexpr.
318 Still recurse into CLEANUP_BODY. */
319 return build_data_member_initialization (CLEANUP_BODY (t), vec);
321 if (TREE_CODE (t) == CONVERT_EXPR)
322 t = TREE_OPERAND (t, 0);
323 if (TREE_CODE (t) == INIT_EXPR
324 /* vptr initialization shows up as a MODIFY_EXPR. In C++14 we only
325 use what this function builds for cx_check_missing_mem_inits, and
326 assignment in the ctor body doesn't count. */
327 || (cxx_dialect < cxx14 && TREE_CODE (t) == MODIFY_EXPR))
329 member = TREE_OPERAND (t, 0);
330 init = break_out_target_exprs (TREE_OPERAND (t, 1));
332 else if (TREE_CODE (t) == CALL_EXPR)
334 tree fn = get_callee_fndecl (t);
335 if (!fn || !DECL_CONSTRUCTOR_P (fn))
336 /* We're only interested in calls to subobject constructors. */
337 return true;
338 member = CALL_EXPR_ARG (t, 0);
339 /* We don't use build_cplus_new here because it complains about
340 abstract bases. Leaving the call unwrapped means that it has the
341 wrong type, but cxx_eval_constant_expression doesn't care. */
342 init = break_out_target_exprs (t);
344 else if (TREE_CODE (t) == BIND_EXPR)
345 return build_data_member_initialization (BIND_EXPR_BODY (t), vec);
346 else
347 /* Don't add anything else to the CONSTRUCTOR. */
348 return true;
349 if (INDIRECT_REF_P (member))
350 member = TREE_OPERAND (member, 0);
351 if (TREE_CODE (member) == NOP_EXPR)
353 tree op = member;
354 STRIP_NOPS (op);
355 if (TREE_CODE (op) == ADDR_EXPR)
357 gcc_assert (same_type_ignoring_top_level_qualifiers_p
358 (TREE_TYPE (TREE_TYPE (op)),
359 TREE_TYPE (TREE_TYPE (member))));
360 /* Initializing a cv-qualified member; we need to look through
361 the const_cast. */
362 member = op;
364 else if (op == current_class_ptr
365 && (same_type_ignoring_top_level_qualifiers_p
366 (TREE_TYPE (TREE_TYPE (member)),
367 current_class_type)))
368 /* Delegating constructor. */
369 member = op;
370 else
372 /* This is an initializer for an empty base; keep it for now so
373 we can check it in cxx_eval_bare_aggregate. */
374 gcc_assert (is_empty_class (TREE_TYPE (TREE_TYPE (member))));
377 if (TREE_CODE (member) == ADDR_EXPR)
378 member = TREE_OPERAND (member, 0);
379 if (TREE_CODE (member) == COMPONENT_REF)
381 tree aggr = TREE_OPERAND (member, 0);
382 if (TREE_CODE (aggr) != COMPONENT_REF)
383 /* Normal member initialization. */
384 member = TREE_OPERAND (member, 1);
385 else if (ANON_AGGR_TYPE_P (TREE_TYPE (aggr)))
386 /* Initializing a member of an anonymous union. */
387 return build_anon_member_initialization (member, init, vec);
388 else
389 /* We're initializing a vtable pointer in a base. Leave it as
390 COMPONENT_REF so we remember the path to get to the vfield. */
391 gcc_assert (TREE_TYPE (member) == vtbl_ptr_type_node);
394 CONSTRUCTOR_APPEND_ELT (*vec, member, init);
395 return true;
398 /* Subroutine of check_constexpr_ctor_body_1 and constexpr_fn_retval.
399 In C++11 mode checks that the TYPE_DECLs in the BIND_EXPR_VARS of a
400 BIND_EXPR conform to 7.1.5/3/4 on typedef and alias declarations. */
402 static bool
403 check_constexpr_bind_expr_vars (tree t)
405 gcc_assert (TREE_CODE (t) == BIND_EXPR);
407 for (tree var = BIND_EXPR_VARS (t); var; var = DECL_CHAIN (var))
408 if (TREE_CODE (var) == TYPE_DECL
409 && DECL_IMPLICIT_TYPEDEF_P (var)
410 && !LAMBDA_TYPE_P (TREE_TYPE (var)))
411 return false;
412 return true;
415 /* Subroutine of check_constexpr_ctor_body. */
417 static bool
418 check_constexpr_ctor_body_1 (tree last, tree list)
420 switch (TREE_CODE (list))
422 case DECL_EXPR:
423 if (TREE_CODE (DECL_EXPR_DECL (list)) == USING_DECL)
424 return true;
425 return false;
427 case CLEANUP_POINT_EXPR:
428 return check_constexpr_ctor_body (last, TREE_OPERAND (list, 0),
429 /*complain=*/false);
431 case BIND_EXPR:
432 if (!check_constexpr_bind_expr_vars (list)
433 || !check_constexpr_ctor_body (last, BIND_EXPR_BODY (list),
434 /*complain=*/false))
435 return false;
436 return true;
438 case USING_STMT:
439 case STATIC_ASSERT:
440 return true;
442 default:
443 return false;
447 /* Make sure that there are no statements after LAST in the constructor
448 body represented by LIST. */
450 bool
451 check_constexpr_ctor_body (tree last, tree list, bool complain)
453 /* C++14 doesn't require a constexpr ctor to have an empty body. */
454 if (cxx_dialect >= cxx14)
455 return true;
457 bool ok = true;
458 if (TREE_CODE (list) == STATEMENT_LIST)
460 tree_stmt_iterator i = tsi_last (list);
461 for (; !tsi_end_p (i); tsi_prev (&i))
463 tree t = tsi_stmt (i);
464 if (t == last)
465 break;
466 if (!check_constexpr_ctor_body_1 (last, t))
468 ok = false;
469 break;
473 else if (list != last
474 && !check_constexpr_ctor_body_1 (last, list))
475 ok = false;
476 if (!ok)
478 if (complain)
479 error ("constexpr constructor does not have empty body");
480 DECL_DECLARED_CONSTEXPR_P (current_function_decl) = false;
482 return ok;
485 /* V is a vector of constructor elements built up for the base and member
486 initializers of a constructor for TYPE. They need to be in increasing
487 offset order, which they might not be yet if TYPE has a primary base
488 which is not first in the base-clause or a vptr and at least one base
489 all of which are non-primary. */
491 static vec<constructor_elt, va_gc> *
492 sort_constexpr_mem_initializers (tree type, vec<constructor_elt, va_gc> *v)
494 tree pri = CLASSTYPE_PRIMARY_BINFO (type);
495 tree field_type;
496 unsigned i;
497 constructor_elt *ce;
499 if (pri)
500 field_type = BINFO_TYPE (pri);
501 else if (TYPE_CONTAINS_VPTR_P (type))
502 field_type = vtbl_ptr_type_node;
503 else
504 return v;
506 /* Find the element for the primary base or vptr and move it to the
507 beginning of the vec. */
508 for (i = 0; vec_safe_iterate (v, i, &ce); ++i)
509 if (TREE_TYPE (ce->index) == field_type)
510 break;
512 if (i > 0 && i < vec_safe_length (v))
514 vec<constructor_elt, va_gc> &vref = *v;
515 constructor_elt elt = vref[i];
516 for (; i > 0; --i)
517 vref[i] = vref[i-1];
518 vref[0] = elt;
521 return v;
524 /* Build compile-time evalable representations of member-initializer list
525 for a constexpr constructor. */
527 static tree
528 build_constexpr_constructor_member_initializers (tree type, tree body)
530 vec<constructor_elt, va_gc> *vec = NULL;
531 bool ok = true;
532 while (true)
533 switch (TREE_CODE (body))
535 case MUST_NOT_THROW_EXPR:
536 case EH_SPEC_BLOCK:
537 body = TREE_OPERAND (body, 0);
538 break;
540 case STATEMENT_LIST:
541 for (tree_stmt_iterator i = tsi_start (body);
542 !tsi_end_p (i); tsi_next (&i))
544 body = tsi_stmt (i);
545 if (TREE_CODE (body) == BIND_EXPR)
546 break;
548 break;
550 case BIND_EXPR:
551 body = BIND_EXPR_BODY (body);
552 goto found;
554 default:
555 gcc_unreachable ();
557 found:
558 if (TREE_CODE (body) == CLEANUP_POINT_EXPR)
560 body = TREE_OPERAND (body, 0);
561 if (TREE_CODE (body) == EXPR_STMT)
562 body = TREE_OPERAND (body, 0);
563 if (TREE_CODE (body) == INIT_EXPR
564 && (same_type_ignoring_top_level_qualifiers_p
565 (TREE_TYPE (TREE_OPERAND (body, 0)),
566 current_class_type)))
568 /* Trivial copy. */
569 return TREE_OPERAND (body, 1);
571 ok = build_data_member_initialization (body, &vec);
573 else if (TREE_CODE (body) == STATEMENT_LIST)
575 tree_stmt_iterator i;
576 for (i = tsi_start (body); !tsi_end_p (i); tsi_next (&i))
578 ok = build_data_member_initialization (tsi_stmt (i), &vec);
579 if (!ok)
580 break;
583 else if (TREE_CODE (body) == TRY_BLOCK)
585 error ("body of %<constexpr%> constructor cannot be "
586 "a function-try-block");
587 return error_mark_node;
589 else if (EXPR_P (body))
590 ok = build_data_member_initialization (body, &vec);
591 else
592 gcc_assert (errorcount > 0);
593 if (ok)
595 if (vec_safe_length (vec) > 0)
597 /* In a delegating constructor, return the target. */
598 constructor_elt *ce = &(*vec)[0];
599 if (ce->index == current_class_ptr)
601 body = ce->value;
602 vec_free (vec);
603 return body;
606 vec = sort_constexpr_mem_initializers (type, vec);
607 return build_constructor (type, vec);
609 else
610 return error_mark_node;
613 /* Subroutine of register_constexpr_fundef. BODY is the body of a function
614 declared to be constexpr, or a sub-statement thereof. Returns the
615 return value if suitable, error_mark_node for a statement not allowed in
616 a constexpr function, or NULL_TREE if no return value was found. */
618 static tree
619 constexpr_fn_retval (tree body)
621 switch (TREE_CODE (body))
623 case STATEMENT_LIST:
625 tree_stmt_iterator i;
626 tree expr = NULL_TREE;
627 for (i = tsi_start (body); !tsi_end_p (i); tsi_next (&i))
629 tree s = constexpr_fn_retval (tsi_stmt (i));
630 if (s == error_mark_node)
631 return error_mark_node;
632 else if (s == NULL_TREE)
633 /* Keep iterating. */;
634 else if (expr)
635 /* Multiple return statements. */
636 return error_mark_node;
637 else
638 expr = s;
640 return expr;
643 case RETURN_EXPR:
644 return break_out_target_exprs (TREE_OPERAND (body, 0));
646 case DECL_EXPR:
648 tree decl = DECL_EXPR_DECL (body);
649 if (TREE_CODE (decl) == USING_DECL
650 /* Accept __func__, __FUNCTION__, and __PRETTY_FUNCTION__. */
651 || DECL_ARTIFICIAL (decl))
652 return NULL_TREE;
653 return error_mark_node;
656 case CLEANUP_POINT_EXPR:
657 return constexpr_fn_retval (TREE_OPERAND (body, 0));
659 case BIND_EXPR:
660 if (!check_constexpr_bind_expr_vars (body))
661 return error_mark_node;
662 return constexpr_fn_retval (BIND_EXPR_BODY (body));
664 case USING_STMT:
665 return NULL_TREE;
667 default:
668 return error_mark_node;
672 /* Subroutine of register_constexpr_fundef. BODY is the DECL_SAVED_TREE of
673 FUN; do the necessary transformations to turn it into a single expression
674 that we can store in the hash table. */
676 static tree
677 massage_constexpr_body (tree fun, tree body)
679 if (DECL_CONSTRUCTOR_P (fun))
680 body = build_constexpr_constructor_member_initializers
681 (DECL_CONTEXT (fun), body);
682 else if (cxx_dialect < cxx14)
684 if (TREE_CODE (body) == EH_SPEC_BLOCK)
685 body = EH_SPEC_STMTS (body);
686 if (TREE_CODE (body) == MUST_NOT_THROW_EXPR)
687 body = TREE_OPERAND (body, 0);
688 body = constexpr_fn_retval (body);
690 return body;
693 /* FUN is a constexpr constructor with massaged body BODY. Return true
694 if some bases/fields are uninitialized, and complain if COMPLAIN. */
696 static bool
697 cx_check_missing_mem_inits (tree fun, tree body, bool complain)
699 bool bad;
700 tree field;
701 unsigned i, nelts;
702 tree ctype;
704 if (TREE_CODE (body) != CONSTRUCTOR)
705 return false;
707 nelts = CONSTRUCTOR_NELTS (body);
708 ctype = DECL_CONTEXT (fun);
709 field = TYPE_FIELDS (ctype);
711 if (TREE_CODE (ctype) == UNION_TYPE)
713 if (nelts == 0 && next_initializable_field (field))
715 if (complain)
716 error ("%<constexpr%> constructor for union %qT must "
717 "initialize exactly one non-static data member", ctype);
718 return true;
720 return false;
723 bad = false;
724 for (i = 0; i <= nelts; ++i)
726 tree index;
727 if (i == nelts)
728 index = NULL_TREE;
729 else
731 index = CONSTRUCTOR_ELT (body, i)->index;
732 /* Skip base and vtable inits. */
733 if (TREE_CODE (index) != FIELD_DECL
734 || DECL_ARTIFICIAL (index))
735 continue;
737 for (; field != index; field = DECL_CHAIN (field))
739 tree ftype;
740 if (TREE_CODE (field) != FIELD_DECL
741 || (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
742 || DECL_ARTIFICIAL (field))
743 continue;
744 ftype = strip_array_types (TREE_TYPE (field));
745 if (type_has_constexpr_default_constructor (ftype))
747 /* It's OK to skip a member with a trivial constexpr ctor.
748 A constexpr ctor that isn't trivial should have been
749 added in by now. */
750 gcc_checking_assert (!TYPE_HAS_COMPLEX_DFLT (ftype)
751 || errorcount != 0);
752 continue;
754 if (!complain)
755 return true;
756 error ("member %qD must be initialized by mem-initializer "
757 "in %<constexpr%> constructor", field);
758 inform (DECL_SOURCE_LOCATION (field), "declared here");
759 bad = true;
761 if (field == NULL_TREE)
762 break;
763 field = DECL_CHAIN (field);
766 return bad;
769 /* We are processing the definition of the constexpr function FUN.
770 Check that its BODY fulfills the propriate requirements and
771 enter it in the constexpr function definition table.
772 For constructor BODY is actually the TREE_LIST of the
773 member-initializer list. */
775 tree
776 register_constexpr_fundef (tree fun, tree body)
778 constexpr_fundef entry;
779 constexpr_fundef **slot;
781 if (!is_valid_constexpr_fn (fun, !DECL_GENERATED_P (fun)))
782 return NULL;
784 tree massaged = massage_constexpr_body (fun, body);
785 if (massaged == NULL_TREE || massaged == error_mark_node)
787 if (!DECL_CONSTRUCTOR_P (fun))
788 error ("body of constexpr function %qD not a return-statement", fun);
789 return NULL;
792 if (!potential_rvalue_constant_expression (massaged))
794 if (!DECL_GENERATED_P (fun))
795 require_potential_rvalue_constant_expression (massaged);
796 return NULL;
799 if (DECL_CONSTRUCTOR_P (fun)
800 && cx_check_missing_mem_inits (fun, massaged, !DECL_GENERATED_P (fun)))
801 return NULL;
803 /* Create the constexpr function table if necessary. */
804 if (constexpr_fundef_table == NULL)
805 constexpr_fundef_table
806 = hash_table<constexpr_fundef_hasher>::create_ggc (101);
808 entry.decl = fun;
809 entry.body = body;
810 slot = constexpr_fundef_table->find_slot (&entry, INSERT);
812 gcc_assert (*slot == NULL);
813 *slot = ggc_alloc<constexpr_fundef> ();
814 **slot = entry;
816 return fun;
819 /* FUN is a non-constexpr function called in a context that requires a
820 constant expression. If it comes from a constexpr template, explain why
821 the instantiation isn't constexpr. */
823 void
824 explain_invalid_constexpr_fn (tree fun)
826 static hash_set<tree> *diagnosed;
827 tree body;
828 location_t save_loc;
829 /* Only diagnose defaulted functions or instantiations. */
830 if (!DECL_DEFAULTED_FN (fun)
831 && !is_instantiation_of_constexpr (fun))
832 return;
833 if (diagnosed == NULL)
834 diagnosed = new hash_set<tree>;
835 if (diagnosed->add (fun))
836 /* Already explained. */
837 return;
839 save_loc = input_location;
840 input_location = DECL_SOURCE_LOCATION (fun);
841 inform (input_location,
842 "%qD is not usable as a constexpr function because:", fun);
843 /* First check the declaration. */
844 if (is_valid_constexpr_fn (fun, true))
846 /* Then if it's OK, the body. */
847 if (!DECL_DECLARED_CONSTEXPR_P (fun))
848 explain_implicit_non_constexpr (fun);
849 else
851 body = massage_constexpr_body (fun, DECL_SAVED_TREE (fun));
852 require_potential_rvalue_constant_expression (body);
853 if (DECL_CONSTRUCTOR_P (fun))
854 cx_check_missing_mem_inits (fun, body, true);
857 input_location = save_loc;
860 /* Objects of this type represent calls to constexpr functions
861 along with the bindings of parameters to their arguments, for
862 the purpose of compile time evaluation. */
864 struct GTY((for_user)) constexpr_call {
865 /* Description of the constexpr function definition. */
866 constexpr_fundef *fundef;
867 /* Parameter bindings environment. A TREE_LIST where each TREE_PURPOSE
868 is a parameter _DECL and the TREE_VALUE is the value of the parameter.
869 Note: This arrangement is made to accommodate the use of
870 iterative_hash_template_arg (see pt.c). If you change this
871 representation, also change the hash calculation in
872 cxx_eval_call_expression. */
873 tree bindings;
874 /* Result of the call.
875 NULL means the call is being evaluated.
876 error_mark_node means that the evaluation was erroneous;
877 otherwise, the actuall value of the call. */
878 tree result;
879 /* The hash of this call; we remember it here to avoid having to
880 recalculate it when expanding the hash table. */
881 hashval_t hash;
884 struct constexpr_call_hasher : ggc_ptr_hash<constexpr_call>
886 static hashval_t hash (constexpr_call *);
887 static bool equal (constexpr_call *, constexpr_call *);
890 /* The constexpr expansion context. CALL is the current function
891 expansion, CTOR is the current aggregate initializer, OBJECT is the
892 object being initialized by CTOR, either a VAR_DECL or a _REF. VALUES
893 is a map of values of variables initialized within the expression. */
895 struct constexpr_ctx {
896 /* The innermost call we're evaluating. */
897 constexpr_call *call;
898 /* Values for any temporaries or local variables within the
899 constant-expression. */
900 hash_map<tree,tree> *values;
901 /* SAVE_EXPRs that we've seen within the current LOOP_EXPR. NULL if we
902 aren't inside a loop. */
903 hash_set<tree> *save_exprs;
904 /* The CONSTRUCTOR we're currently building up for an aggregate
905 initializer. */
906 tree ctor;
907 /* The object we're building the CONSTRUCTOR for. */
908 tree object;
909 /* Whether we should error on a non-constant expression or fail quietly. */
910 bool quiet;
911 /* Whether we are strictly conforming to constant expression rules or
912 trying harder to get a constant value. */
913 bool strict;
916 /* A table of all constexpr calls that have been evaluated by the
917 compiler in this translation unit. */
919 static GTY (()) hash_table<constexpr_call_hasher> *constexpr_call_table;
921 static tree cxx_eval_constant_expression (const constexpr_ctx *, tree,
922 bool, bool *, bool *, tree * = NULL);
924 /* Compute a hash value for a constexpr call representation. */
926 inline hashval_t
927 constexpr_call_hasher::hash (constexpr_call *info)
929 return info->hash;
932 /* Return true if the objects pointed to by P and Q represent calls
933 to the same constexpr function with the same arguments.
934 Otherwise, return false. */
936 bool
937 constexpr_call_hasher::equal (constexpr_call *lhs, constexpr_call *rhs)
939 tree lhs_bindings;
940 tree rhs_bindings;
941 if (lhs == rhs)
942 return 1;
943 if (!constexpr_fundef_hasher::equal (lhs->fundef, rhs->fundef))
944 return 0;
945 lhs_bindings = lhs->bindings;
946 rhs_bindings = rhs->bindings;
947 while (lhs_bindings != NULL && rhs_bindings != NULL)
949 tree lhs_arg = TREE_VALUE (lhs_bindings);
950 tree rhs_arg = TREE_VALUE (rhs_bindings);
951 gcc_assert (TREE_TYPE (lhs_arg) == TREE_TYPE (rhs_arg));
952 if (!cp_tree_equal (lhs_arg, rhs_arg))
953 return 0;
954 lhs_bindings = TREE_CHAIN (lhs_bindings);
955 rhs_bindings = TREE_CHAIN (rhs_bindings);
957 return lhs_bindings == rhs_bindings;
960 /* Initialize the constexpr call table, if needed. */
962 static void
963 maybe_initialize_constexpr_call_table (void)
965 if (constexpr_call_table == NULL)
966 constexpr_call_table = hash_table<constexpr_call_hasher>::create_ggc (101);
969 /* During constexpr CALL_EXPR evaluation, to avoid issues with sharing when
970 a function happens to get called recursively, we unshare the callee
971 function's body and evaluate this unshared copy instead of evaluating the
972 original body.
974 FUNDEF_COPIES_TABLE is a per-function freelist of these unshared function
975 copies. The underlying data structure of FUNDEF_COPIES_TABLE is a hash_map
976 that's keyed off of the original FUNCTION_DECL and whose value is a
977 TREE_LIST of this function's unused copies awaiting reuse.
979 This is not GC-deletable to avoid GC affecting UID generation. */
981 static GTY(()) hash_map<tree, tree> *fundef_copies_table;
983 /* Initialize FUNDEF_COPIES_TABLE if it's not initialized. */
985 static void
986 maybe_initialize_fundef_copies_table ()
988 if (fundef_copies_table == NULL)
989 fundef_copies_table = hash_map<tree,tree>::create_ggc (101);
992 /* Reuse a copy or create a new unshared copy of the function FUN.
993 Return this copy. We use a TREE_LIST whose PURPOSE is body, VALUE
994 is parms, TYPE is result. */
996 static tree
997 get_fundef_copy (tree fun)
999 maybe_initialize_fundef_copies_table ();
1001 tree copy;
1002 bool existed;
1003 tree *slot = &fundef_copies_table->get_or_insert (fun, &existed);
1005 if (!existed)
1007 /* There is no cached function available, or in use. We can use
1008 the function directly. That the slot is now created records
1009 that this function is now in use. */
1010 copy = build_tree_list (DECL_SAVED_TREE (fun), DECL_ARGUMENTS (fun));
1011 TREE_TYPE (copy) = DECL_RESULT (fun);
1013 else if (*slot == NULL_TREE)
1015 /* We've already used the function itself, so make a copy. */
1016 copy = build_tree_list (NULL, NULL);
1017 TREE_PURPOSE (copy) = copy_fn (fun, TREE_VALUE (copy), TREE_TYPE (copy));
1019 else
1021 /* We have a cached function available. */
1022 copy = *slot;
1023 *slot = TREE_CHAIN (copy);
1026 return copy;
1029 /* Save the copy COPY of function FUN for later reuse by
1030 get_fundef_copy(). By construction, there will always be an entry
1031 to find. */
1033 static void
1034 save_fundef_copy (tree fun, tree copy)
1036 tree *slot = fundef_copies_table->get (fun);
1037 TREE_CHAIN (copy) = *slot;
1038 *slot = copy;
1041 /* We have an expression tree T that represents a call, either CALL_EXPR
1042 or AGGR_INIT_EXPR. If the call is lexically to a named function,
1043 retrun the _DECL for that function. */
1045 static tree
1046 get_function_named_in_call (tree t)
1048 tree fun = cp_get_callee (t);
1049 if (fun && TREE_CODE (fun) == ADDR_EXPR
1050 && TREE_CODE (TREE_OPERAND (fun, 0)) == FUNCTION_DECL)
1051 fun = TREE_OPERAND (fun, 0);
1052 return fun;
1055 /* We have an expression tree T that represents a call, either CALL_EXPR
1056 or AGGR_INIT_EXPR. Return the Nth argument. */
1058 static inline tree
1059 get_nth_callarg (tree t, int n)
1061 switch (TREE_CODE (t))
1063 case CALL_EXPR:
1064 return CALL_EXPR_ARG (t, n);
1066 case AGGR_INIT_EXPR:
1067 return AGGR_INIT_EXPR_ARG (t, n);
1069 default:
1070 gcc_unreachable ();
1071 return NULL;
1075 /* Attempt to evaluate T which represents a call to a builtin function.
1076 We assume here that all builtin functions evaluate to scalar types
1077 represented by _CST nodes. */
1079 static tree
1080 cxx_eval_builtin_function_call (const constexpr_ctx *ctx, tree t, tree fun,
1081 bool lval,
1082 bool *non_constant_p, bool *overflow_p)
1084 const int nargs = call_expr_nargs (t);
1085 tree *args = (tree *) alloca (nargs * sizeof (tree));
1086 tree new_call;
1087 int i;
1089 /* Don't fold __builtin_constant_p within a constexpr function. */
1090 bool bi_const_p = (DECL_FUNCTION_CODE (fun) == BUILT_IN_CONSTANT_P);
1092 if (bi_const_p
1093 && current_function_decl
1094 && DECL_DECLARED_CONSTEXPR_P (current_function_decl))
1096 *non_constant_p = true;
1097 return t;
1100 /* Be permissive for arguments to built-ins; __builtin_constant_p should
1101 return constant false for a non-constant argument. */
1102 constexpr_ctx new_ctx = *ctx;
1103 new_ctx.quiet = true;
1104 bool dummy1 = false, dummy2 = false;
1105 for (i = 0; i < nargs; ++i)
1107 args[i] = cxx_eval_constant_expression (&new_ctx, CALL_EXPR_ARG (t, i),
1108 lval, &dummy1, &dummy2);
1109 if (bi_const_p)
1110 /* For __built_in_constant_p, fold all expressions with constant values
1111 even if they aren't C++ constant-expressions. */
1112 args[i] = cp_fully_fold (args[i]);
1115 bool save_ffbcp = force_folding_builtin_constant_p;
1116 force_folding_builtin_constant_p = true;
1117 new_call = fold_build_call_array_loc (EXPR_LOCATION (t), TREE_TYPE (t),
1118 CALL_EXPR_FN (t), nargs, args);
1119 /* Fold away the NOP_EXPR from fold_builtin_n. */
1120 new_call = fold (new_call);
1121 force_folding_builtin_constant_p = save_ffbcp;
1122 VERIFY_CONSTANT (new_call);
1123 return new_call;
1126 /* TEMP is the constant value of a temporary object of type TYPE. Adjust
1127 the type of the value to match. */
1129 static tree
1130 adjust_temp_type (tree type, tree temp)
1132 if (TREE_TYPE (temp) == type)
1133 return temp;
1134 /* Avoid wrapping an aggregate value in a NOP_EXPR. */
1135 if (TREE_CODE (temp) == CONSTRUCTOR)
1136 return build_constructor (type, CONSTRUCTOR_ELTS (temp));
1137 gcc_assert (scalarish_type_p (type));
1138 return cp_fold_convert (type, temp);
1141 /* Callback for walk_tree used by unshare_constructor. */
1143 static tree
1144 find_constructor (tree *tp, int *walk_subtrees, void *)
1146 if (TYPE_P (*tp))
1147 *walk_subtrees = 0;
1148 if (TREE_CODE (*tp) == CONSTRUCTOR)
1149 return *tp;
1150 return NULL_TREE;
1153 /* If T is a CONSTRUCTOR or an expression that has a CONSTRUCTOR node as a
1154 subexpression, return an unshared copy of T. Otherwise return T. */
1156 static tree
1157 unshare_constructor (tree t)
1159 tree ctor = walk_tree (&t, find_constructor, NULL, NULL);
1160 if (ctor != NULL_TREE)
1161 return unshare_expr (t);
1162 return t;
1165 /* Subroutine of cxx_eval_call_expression.
1166 We are processing a call expression (either CALL_EXPR or
1167 AGGR_INIT_EXPR) in the context of CTX. Evaluate
1168 all arguments and bind their values to correspondings
1169 parameters, making up the NEW_CALL context. */
1171 static void
1172 cxx_bind_parameters_in_call (const constexpr_ctx *ctx, tree t,
1173 constexpr_call *new_call,
1174 bool *non_constant_p, bool *overflow_p,
1175 bool *non_constant_args)
1177 const int nargs = call_expr_nargs (t);
1178 tree fun = new_call->fundef->decl;
1179 tree parms = DECL_ARGUMENTS (fun);
1180 int i;
1181 tree *p = &new_call->bindings;
1182 for (i = 0; i < nargs; ++i)
1184 tree x, arg;
1185 tree type = parms ? TREE_TYPE (parms) : void_type_node;
1186 x = get_nth_callarg (t, i);
1187 /* For member function, the first argument is a pointer to the implied
1188 object. For a constructor, it might still be a dummy object, in
1189 which case we get the real argument from ctx. */
1190 if (i == 0 && DECL_CONSTRUCTOR_P (fun)
1191 && is_dummy_object (x))
1193 x = ctx->object;
1194 x = cp_build_addr_expr (x, tf_warning_or_error);
1196 bool lval = false;
1197 arg = cxx_eval_constant_expression (ctx, x, lval,
1198 non_constant_p, overflow_p);
1199 /* Don't VERIFY_CONSTANT here. */
1200 if (*non_constant_p && ctx->quiet)
1201 return;
1202 /* Just discard ellipsis args after checking their constantitude. */
1203 if (!parms)
1204 continue;
1206 if (!*non_constant_p)
1208 /* Make sure the binding has the same type as the parm. But
1209 only for constant args. */
1210 if (TREE_CODE (type) != REFERENCE_TYPE)
1211 arg = adjust_temp_type (type, arg);
1212 if (!TREE_CONSTANT (arg))
1213 *non_constant_args = true;
1214 *p = build_tree_list (parms, arg);
1215 p = &TREE_CHAIN (*p);
1217 parms = TREE_CHAIN (parms);
1221 /* Variables and functions to manage constexpr call expansion context.
1222 These do not need to be marked for PCH or GC. */
1224 /* FIXME remember and print actual constant arguments. */
1225 static vec<tree> call_stack = vNULL;
1226 static int call_stack_tick;
1227 static int last_cx_error_tick;
1229 static bool
1230 push_cx_call_context (tree call)
1232 ++call_stack_tick;
1233 if (!EXPR_HAS_LOCATION (call))
1234 SET_EXPR_LOCATION (call, input_location);
1235 call_stack.safe_push (call);
1236 if (call_stack.length () > (unsigned) max_constexpr_depth)
1237 return false;
1238 return true;
1241 static void
1242 pop_cx_call_context (void)
1244 ++call_stack_tick;
1245 call_stack.pop ();
1248 vec<tree>
1249 cx_error_context (void)
1251 vec<tree> r = vNULL;
1252 if (call_stack_tick != last_cx_error_tick
1253 && !call_stack.is_empty ())
1254 r = call_stack;
1255 last_cx_error_tick = call_stack_tick;
1256 return r;
1259 /* Evaluate a call T to a GCC internal function when possible and return
1260 the evaluated result or, under the control of CTX, give an error, set
1261 NON_CONSTANT_P, and return the unevaluated call T otherwise. */
1263 static tree
1264 cxx_eval_internal_function (const constexpr_ctx *ctx, tree t,
1265 bool lval,
1266 bool *non_constant_p, bool *overflow_p)
1268 enum tree_code opcode = ERROR_MARK;
1270 switch (CALL_EXPR_IFN (t))
1272 case IFN_UBSAN_NULL:
1273 case IFN_UBSAN_BOUNDS:
1274 case IFN_UBSAN_VPTR:
1275 return void_node;
1277 case IFN_ADD_OVERFLOW:
1278 opcode = PLUS_EXPR;
1279 break;
1280 case IFN_SUB_OVERFLOW:
1281 opcode = MINUS_EXPR;
1282 break;
1283 case IFN_MUL_OVERFLOW:
1284 opcode = MULT_EXPR;
1285 break;
1287 default:
1288 if (!ctx->quiet)
1289 error_at (EXPR_LOC_OR_LOC (t, input_location),
1290 "call to internal function %qE", t);
1291 *non_constant_p = true;
1292 return t;
1295 /* Evaluate constant arguments using OPCODE and return a complex
1296 number containing the result and the overflow bit. */
1297 tree arg0 = cxx_eval_constant_expression (ctx, CALL_EXPR_ARG (t, 0), lval,
1298 non_constant_p, overflow_p);
1299 tree arg1 = cxx_eval_constant_expression (ctx, CALL_EXPR_ARG (t, 1), lval,
1300 non_constant_p, overflow_p);
1302 if (TREE_CODE (arg0) == INTEGER_CST && TREE_CODE (arg1) == INTEGER_CST)
1304 location_t loc = EXPR_LOC_OR_LOC (t, input_location);
1305 tree type = TREE_TYPE (TREE_TYPE (t));
1306 tree result = fold_binary_loc (loc, opcode, type,
1307 fold_convert_loc (loc, type, arg0),
1308 fold_convert_loc (loc, type, arg1));
1309 tree ovf
1310 = build_int_cst (type, arith_overflowed_p (opcode, type, arg0, arg1));
1311 /* Reset TREE_OVERFLOW to avoid warnings for the overflow. */
1312 if (TREE_OVERFLOW (result))
1313 TREE_OVERFLOW (result) = 0;
1315 return build_complex (TREE_TYPE (t), result, ovf);
1318 *non_constant_p = true;
1319 return t;
1322 /* Subroutine of cxx_eval_constant_expression.
1323 Evaluate the call expression tree T in the context of OLD_CALL expression
1324 evaluation. */
1326 static tree
1327 cxx_eval_call_expression (const constexpr_ctx *ctx, tree t,
1328 bool lval,
1329 bool *non_constant_p, bool *overflow_p)
1331 location_t loc = EXPR_LOC_OR_LOC (t, input_location);
1332 tree fun = get_function_named_in_call (t);
1333 constexpr_call new_call = { NULL, NULL, NULL, 0 };
1334 bool depth_ok;
1336 if (fun == NULL_TREE)
1337 return cxx_eval_internal_function (ctx, t, lval,
1338 non_constant_p, overflow_p);
1340 if (TREE_CODE (fun) != FUNCTION_DECL)
1342 /* Might be a constexpr function pointer. */
1343 fun = cxx_eval_constant_expression (ctx, fun,
1344 /*lval*/false, non_constant_p,
1345 overflow_p);
1346 STRIP_NOPS (fun);
1347 if (TREE_CODE (fun) == ADDR_EXPR)
1348 fun = TREE_OPERAND (fun, 0);
1350 if (TREE_CODE (fun) != FUNCTION_DECL)
1352 if (!ctx->quiet && !*non_constant_p)
1353 error_at (loc, "expression %qE does not designate a constexpr "
1354 "function", fun);
1355 *non_constant_p = true;
1356 return t;
1358 if (DECL_CLONED_FUNCTION_P (fun))
1359 fun = DECL_CLONED_FUNCTION (fun);
1361 if (is_ubsan_builtin_p (fun))
1362 return void_node;
1364 if (is_builtin_fn (fun))
1365 return cxx_eval_builtin_function_call (ctx, t, fun,
1366 lval, non_constant_p, overflow_p);
1367 if (!DECL_DECLARED_CONSTEXPR_P (fun))
1369 if (!ctx->quiet)
1371 error_at (loc, "call to non-constexpr function %qD", fun);
1372 explain_invalid_constexpr_fn (fun);
1374 *non_constant_p = true;
1375 return t;
1378 constexpr_ctx new_ctx = *ctx;
1379 if (DECL_CONSTRUCTOR_P (fun) && !ctx->object
1380 && TREE_CODE (t) == AGGR_INIT_EXPR)
1382 /* We want to have an initialization target for an AGGR_INIT_EXPR.
1383 If we don't already have one in CTX, use the AGGR_INIT_EXPR_SLOT. */
1384 new_ctx.object = AGGR_INIT_EXPR_SLOT (t);
1385 tree ctor = new_ctx.ctor = build_constructor (DECL_CONTEXT (fun), NULL);
1386 CONSTRUCTOR_NO_IMPLICIT_ZERO (ctor) = true;
1387 ctx->values->put (new_ctx.object, ctor);
1388 ctx = &new_ctx;
1391 /* Shortcut trivial constructor/op=. */
1392 if (trivial_fn_p (fun))
1394 tree init = NULL_TREE;
1395 if (call_expr_nargs (t) == 2)
1396 init = convert_from_reference (get_nth_callarg (t, 1));
1397 else if (TREE_CODE (t) == AGGR_INIT_EXPR
1398 && AGGR_INIT_ZERO_FIRST (t))
1399 init = build_zero_init (DECL_CONTEXT (fun), NULL_TREE, false);
1400 if (init)
1402 tree op = get_nth_callarg (t, 0);
1403 if (is_dummy_object (op))
1404 op = ctx->object;
1405 else
1406 op = build1 (INDIRECT_REF, TREE_TYPE (TREE_TYPE (op)), op);
1407 tree set = build2 (MODIFY_EXPR, TREE_TYPE (op), op, init);
1408 return cxx_eval_constant_expression (ctx, set, lval,
1409 non_constant_p, overflow_p);
1413 /* We can't defer instantiating the function any longer. */
1414 if (!DECL_INITIAL (fun)
1415 && DECL_TEMPLOID_INSTANTIATION (fun))
1417 ++function_depth;
1418 instantiate_decl (fun, /*defer_ok*/false, /*expl_inst*/false);
1419 --function_depth;
1422 /* If in direct recursive call, optimize definition search. */
1423 if (ctx && ctx->call && ctx->call->fundef->decl == fun)
1424 new_call.fundef = ctx->call->fundef;
1425 else
1427 new_call.fundef = retrieve_constexpr_fundef (fun);
1428 if (new_call.fundef == NULL || new_call.fundef->body == NULL
1429 || fun == current_function_decl)
1431 if (!ctx->quiet)
1433 /* We need to check for current_function_decl here in case we're
1434 being called during cp_fold_function, because at that point
1435 DECL_INITIAL is set properly and we have a fundef but we
1436 haven't lowered invisirefs yet (c++/70344). */
1437 if (DECL_INITIAL (fun) == error_mark_node
1438 || fun == current_function_decl)
1439 error_at (loc, "%qD called in a constant expression before its "
1440 "definition is complete", fun);
1441 else if (DECL_INITIAL (fun))
1443 /* The definition of fun was somehow unsuitable. */
1444 error_at (loc, "%qD called in a constant expression", fun);
1445 explain_invalid_constexpr_fn (fun);
1447 else
1448 error_at (loc, "%qD used before its definition", fun);
1450 *non_constant_p = true;
1451 return t;
1455 bool non_constant_args = false;
1456 cxx_bind_parameters_in_call (ctx, t, &new_call,
1457 non_constant_p, overflow_p, &non_constant_args);
1458 if (*non_constant_p)
1459 return t;
1461 depth_ok = push_cx_call_context (t);
1463 tree result = NULL_TREE;
1465 constexpr_call *entry = NULL;
1466 if (depth_ok && !non_constant_args)
1468 new_call.hash = iterative_hash_template_arg
1469 (new_call.bindings, constexpr_fundef_hasher::hash (new_call.fundef));
1471 /* If we have seen this call before, we are done. */
1472 maybe_initialize_constexpr_call_table ();
1473 constexpr_call **slot
1474 = constexpr_call_table->find_slot (&new_call, INSERT);
1475 entry = *slot;
1476 if (entry == NULL)
1478 /* We need to keep a pointer to the entry, not just the slot, as the
1479 slot can move in the call to cxx_eval_builtin_function_call. */
1480 *slot = entry = ggc_alloc<constexpr_call> ();
1481 *entry = new_call;
1483 /* Calls that are in progress have their result set to NULL,
1484 so that we can detect circular dependencies. */
1485 else if (entry->result == NULL)
1487 if (!ctx->quiet)
1488 error ("call has circular dependency");
1489 *non_constant_p = true;
1490 entry->result = result = error_mark_node;
1492 else
1493 result = entry->result;
1496 if (!depth_ok)
1498 if (!ctx->quiet)
1499 error ("constexpr evaluation depth exceeds maximum of %d (use "
1500 "-fconstexpr-depth= to increase the maximum)",
1501 max_constexpr_depth);
1502 *non_constant_p = true;
1503 result = error_mark_node;
1505 else
1507 if (!result || result == error_mark_node)
1509 gcc_assert (DECL_SAVED_TREE (fun));
1510 tree body, parms, res;
1512 /* Reuse or create a new unshared copy of this function's body. */
1513 tree copy = get_fundef_copy (fun);
1514 body = TREE_PURPOSE (copy);
1515 parms = TREE_VALUE (copy);
1516 res = TREE_TYPE (copy);
1518 /* Associate the bindings with the remapped parms. */
1519 tree bound = new_call.bindings;
1520 tree remapped = parms;
1521 while (bound)
1523 tree oparm = TREE_PURPOSE (bound);
1524 tree arg = TREE_VALUE (bound);
1525 gcc_assert (DECL_NAME (remapped) == DECL_NAME (oparm));
1526 /* Don't share a CONSTRUCTOR that might be changed. */
1527 arg = unshare_constructor (arg);
1528 ctx->values->put (remapped, arg);
1529 bound = TREE_CHAIN (bound);
1530 remapped = DECL_CHAIN (remapped);
1532 /* Add the RESULT_DECL to the values map, too. */
1533 tree slot = NULL_TREE;
1534 if (DECL_BY_REFERENCE (res))
1536 slot = AGGR_INIT_EXPR_SLOT (t);
1537 tree addr = build_address (slot);
1538 addr = build_nop (TREE_TYPE (res), addr);
1539 ctx->values->put (res, addr);
1540 ctx->values->put (slot, NULL_TREE);
1542 else
1543 ctx->values->put (res, NULL_TREE);
1545 /* Track the callee's evaluated SAVE_EXPRs so that we can forget
1546 their values after the call. */
1547 constexpr_ctx ctx_with_save_exprs = *ctx;
1548 hash_set<tree> save_exprs;
1549 ctx_with_save_exprs.save_exprs = &save_exprs;
1551 tree jump_target = NULL_TREE;
1552 cxx_eval_constant_expression (&ctx_with_save_exprs, body,
1553 lval, non_constant_p, overflow_p,
1554 &jump_target);
1556 if (DECL_CONSTRUCTOR_P (fun))
1557 /* This can be null for a subobject constructor call, in
1558 which case what we care about is the initialization
1559 side-effects rather than the value. We could get at the
1560 value by evaluating *this, but we don't bother; there's
1561 no need to put such a call in the hash table. */
1562 result = lval ? ctx->object : ctx->ctor;
1563 else if (VOID_TYPE_P (TREE_TYPE (res)))
1564 result = void_node;
1565 else
1567 result = *ctx->values->get (slot ? slot : res);
1568 if (result == NULL_TREE && !*non_constant_p)
1570 if (!ctx->quiet)
1571 error ("constexpr call flows off the end "
1572 "of the function");
1573 *non_constant_p = true;
1577 /* Forget the saved values of the callee's SAVE_EXPRs. */
1578 for (hash_set<tree>::iterator iter = save_exprs.begin();
1579 iter != save_exprs.end(); ++iter)
1580 ctx_with_save_exprs.values->remove (*iter);
1582 /* Remove the parms/result from the values map. Is it worth
1583 bothering to do this when the map itself is only live for
1584 one constexpr evaluation? If so, maybe also clear out
1585 other vars from call, maybe in BIND_EXPR handling? */
1586 ctx->values->remove (res);
1587 if (slot)
1588 ctx->values->remove (slot);
1589 for (tree parm = parms; parm; parm = TREE_CHAIN (parm))
1590 ctx->values->remove (parm);
1592 /* Make the unshared function copy we used available for re-use. */
1593 save_fundef_copy (fun, copy);
1596 if (result == error_mark_node)
1597 *non_constant_p = true;
1598 if (*non_constant_p || *overflow_p)
1599 result = error_mark_node;
1600 else if (!result)
1601 result = void_node;
1602 if (entry)
1603 entry->result = result;
1606 pop_cx_call_context ();
1607 return unshare_constructor (result);
1610 /* FIXME speed this up, it's taking 16% of compile time on sieve testcase. */
1612 bool
1613 reduced_constant_expression_p (tree t)
1615 switch (TREE_CODE (t))
1617 case PTRMEM_CST:
1618 /* Even if we can't lower this yet, it's constant. */
1619 return true;
1621 case CONSTRUCTOR:
1622 /* And we need to handle PTRMEM_CST wrapped in a CONSTRUCTOR. */
1623 tree elt; unsigned HOST_WIDE_INT idx;
1624 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (t), idx, elt)
1625 if (!reduced_constant_expression_p (elt))
1626 return false;
1627 return true;
1629 default:
1630 /* FIXME are we calling this too much? */
1631 return initializer_constant_valid_p (t, TREE_TYPE (t)) != NULL_TREE;
1635 /* Some expressions may have constant operands but are not constant
1636 themselves, such as 1/0. Call this function (or rather, the macro
1637 following it) to check for that condition.
1639 We only call this in places that require an arithmetic constant, not in
1640 places where we might have a non-constant expression that can be a
1641 component of a constant expression, such as the address of a constexpr
1642 variable that might be dereferenced later. */
1644 static bool
1645 verify_constant (tree t, bool allow_non_constant, bool *non_constant_p,
1646 bool *overflow_p)
1648 if (!*non_constant_p && !reduced_constant_expression_p (t))
1650 if (!allow_non_constant)
1651 error ("%q+E is not a constant expression", t);
1652 *non_constant_p = true;
1654 if (TREE_OVERFLOW_P (t))
1656 if (!allow_non_constant)
1658 permerror (input_location, "overflow in constant expression");
1659 /* If we're being permissive (and are in an enforcing
1660 context), ignore the overflow. */
1661 if (flag_permissive)
1662 return *non_constant_p;
1664 *overflow_p = true;
1666 return *non_constant_p;
1669 /* Check whether the shift operation with code CODE and type TYPE on LHS
1670 and RHS is undefined. If it is, give an error with an explanation,
1671 and return true; return false otherwise. */
1673 static bool
1674 cxx_eval_check_shift_p (location_t loc, const constexpr_ctx *ctx,
1675 enum tree_code code, tree type, tree lhs, tree rhs)
1677 if ((code != LSHIFT_EXPR && code != RSHIFT_EXPR)
1678 || TREE_CODE (lhs) != INTEGER_CST
1679 || TREE_CODE (rhs) != INTEGER_CST)
1680 return false;
1682 tree lhstype = TREE_TYPE (lhs);
1683 unsigned HOST_WIDE_INT uprec = TYPE_PRECISION (TREE_TYPE (lhs));
1685 /* [expr.shift] The behavior is undefined if the right operand
1686 is negative, or greater than or equal to the length in bits
1687 of the promoted left operand. */
1688 if (tree_int_cst_sgn (rhs) == -1)
1690 if (!ctx->quiet)
1691 permerror (loc, "right operand of shift expression %q+E is negative",
1692 build2_loc (loc, code, type, lhs, rhs));
1693 return (!flag_permissive || ctx->quiet);
1695 if (compare_tree_int (rhs, uprec) >= 0)
1697 if (!ctx->quiet)
1698 permerror (loc, "right operand of shift expression %q+E is >= than "
1699 "the precision of the left operand",
1700 build2_loc (loc, code, type, lhs, rhs));
1701 return (!flag_permissive || ctx->quiet);
1704 /* The value of E1 << E2 is E1 left-shifted E2 bit positions; [...]
1705 if E1 has a signed type and non-negative value, and E1x2^E2 is
1706 representable in the corresponding unsigned type of the result type,
1707 then that value, converted to the result type, is the resulting value;
1708 otherwise, the behavior is undefined. */
1709 if (code == LSHIFT_EXPR && !TYPE_UNSIGNED (lhstype)
1710 && (cxx_dialect >= cxx11))
1712 if (tree_int_cst_sgn (lhs) == -1)
1714 if (!ctx->quiet)
1715 permerror (loc,
1716 "left operand of shift expression %q+E is negative",
1717 build2_loc (loc, code, type, lhs, rhs));
1718 return (!flag_permissive || ctx->quiet);
1720 /* For signed x << y the following:
1721 (unsigned) x >> ((prec (lhs) - 1) - y)
1722 if > 1, is undefined. The right-hand side of this formula
1723 is the highest bit of the LHS that can be set (starting from 0),
1724 so that the shift doesn't overflow. We then right-shift the LHS
1725 to see whether any other bit is set making the original shift
1726 undefined -- the result is not representable in the corresponding
1727 unsigned type. */
1728 tree t = build_int_cst (unsigned_type_node, uprec - 1);
1729 t = fold_build2 (MINUS_EXPR, unsigned_type_node, t, rhs);
1730 tree ulhs = fold_convert (unsigned_type_for (lhstype), lhs);
1731 t = fold_build2 (RSHIFT_EXPR, TREE_TYPE (ulhs), ulhs, t);
1732 if (tree_int_cst_lt (integer_one_node, t))
1734 if (!ctx->quiet)
1735 permerror (loc, "shift expression %q+E overflows",
1736 build2_loc (loc, code, type, lhs, rhs));
1737 return (!flag_permissive || ctx->quiet);
1740 return false;
1743 /* Subroutine of cxx_eval_constant_expression.
1744 Attempt to reduce the unary expression tree T to a compile time value.
1745 If successful, return the value. Otherwise issue a diagnostic
1746 and return error_mark_node. */
1748 static tree
1749 cxx_eval_unary_expression (const constexpr_ctx *ctx, tree t,
1750 bool /*lval*/,
1751 bool *non_constant_p, bool *overflow_p)
1753 tree r;
1754 tree orig_arg = TREE_OPERAND (t, 0);
1755 tree arg = cxx_eval_constant_expression (ctx, orig_arg, /*lval*/false,
1756 non_constant_p, overflow_p);
1757 VERIFY_CONSTANT (arg);
1758 location_t loc = EXPR_LOCATION (t);
1759 enum tree_code code = TREE_CODE (t);
1760 tree type = TREE_TYPE (t);
1761 r = fold_unary_loc (loc, code, type, arg);
1762 if (r == NULL_TREE)
1764 if (arg == orig_arg)
1765 r = t;
1766 else
1767 r = build1_loc (loc, code, type, arg);
1769 VERIFY_CONSTANT (r);
1770 return r;
1773 /* Subroutine of cxx_eval_constant_expression.
1774 Like cxx_eval_unary_expression, except for binary expressions. */
1776 static tree
1777 cxx_eval_binary_expression (const constexpr_ctx *ctx, tree t,
1778 bool /*lval*/,
1779 bool *non_constant_p, bool *overflow_p)
1781 tree r = NULL_TREE;
1782 tree orig_lhs = TREE_OPERAND (t, 0);
1783 tree orig_rhs = TREE_OPERAND (t, 1);
1784 tree lhs, rhs;
1785 lhs = cxx_eval_constant_expression (ctx, orig_lhs, /*lval*/false,
1786 non_constant_p, overflow_p);
1787 /* Don't VERIFY_CONSTANT here, it's unnecessary and will break pointer
1788 subtraction. */
1789 if (*non_constant_p)
1790 return t;
1791 rhs = cxx_eval_constant_expression (ctx, orig_rhs, /*lval*/false,
1792 non_constant_p, overflow_p);
1793 if (*non_constant_p)
1794 return t;
1796 location_t loc = EXPR_LOCATION (t);
1797 enum tree_code code = TREE_CODE (t);
1798 tree type = TREE_TYPE (t);
1800 if (code == EQ_EXPR || code == NE_EXPR)
1802 bool is_code_eq = (code == EQ_EXPR);
1804 if (TREE_CODE (lhs) == PTRMEM_CST
1805 && TREE_CODE (rhs) == PTRMEM_CST)
1806 r = constant_boolean_node (cp_tree_equal (lhs, rhs) == is_code_eq,
1807 type);
1808 else if ((TREE_CODE (lhs) == PTRMEM_CST
1809 || TREE_CODE (rhs) == PTRMEM_CST)
1810 && (null_member_pointer_value_p (lhs)
1811 || null_member_pointer_value_p (rhs)))
1812 r = constant_boolean_node (!is_code_eq, type);
1815 if (r == NULL_TREE)
1816 r = fold_binary_loc (loc, code, type, lhs, rhs);
1818 if (r == NULL_TREE)
1820 if (lhs == orig_lhs && rhs == orig_rhs)
1821 r = t;
1822 else
1823 r = build2_loc (loc, code, type, lhs, rhs);
1825 else if (cxx_eval_check_shift_p (loc, ctx, code, type, lhs, rhs))
1826 *non_constant_p = true;
1827 /* Don't VERIFY_CONSTANT if this might be dealing with a pointer to
1828 a local array in a constexpr function. */
1829 bool ptr = POINTER_TYPE_P (TREE_TYPE (lhs));
1830 if (!ptr)
1831 VERIFY_CONSTANT (r);
1832 return r;
1835 /* Subroutine of cxx_eval_constant_expression.
1836 Attempt to evaluate condition expressions. Dead branches are not
1837 looked into. */
1839 static tree
1840 cxx_eval_conditional_expression (const constexpr_ctx *ctx, tree t,
1841 bool lval,
1842 bool *non_constant_p, bool *overflow_p,
1843 tree *jump_target)
1845 tree val = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0),
1846 /*lval*/false,
1847 non_constant_p, overflow_p);
1848 VERIFY_CONSTANT (val);
1849 /* Don't VERIFY_CONSTANT the other operands. */
1850 if (integer_zerop (val))
1851 return cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 2),
1852 lval,
1853 non_constant_p, overflow_p,
1854 jump_target);
1855 return cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 1),
1856 lval,
1857 non_constant_p, overflow_p,
1858 jump_target);
1861 /* Returns less than, equal to, or greater than zero if KEY is found to be
1862 less than, to match, or to be greater than the constructor_elt's INDEX. */
1864 static int
1865 array_index_cmp (tree key, tree index)
1867 gcc_assert (TREE_CODE (key) == INTEGER_CST);
1869 switch (TREE_CODE (index))
1871 case INTEGER_CST:
1872 return tree_int_cst_compare (key, index);
1873 case RANGE_EXPR:
1875 tree lo = TREE_OPERAND (index, 0);
1876 tree hi = TREE_OPERAND (index, 1);
1877 if (tree_int_cst_lt (key, lo))
1878 return -1;
1879 else if (tree_int_cst_lt (hi, key))
1880 return 1;
1881 else
1882 return 0;
1884 default:
1885 gcc_unreachable ();
1889 /* Returns the index of the constructor_elt of ARY which matches DINDEX, or -1
1890 if none. If INSERT is true, insert a matching element rather than fail. */
1892 static HOST_WIDE_INT
1893 find_array_ctor_elt (tree ary, tree dindex, bool insert = false)
1895 if (tree_int_cst_sgn (dindex) < 0)
1896 return -1;
1898 unsigned HOST_WIDE_INT i = tree_to_uhwi (dindex);
1899 vec<constructor_elt, va_gc> *elts = CONSTRUCTOR_ELTS (ary);
1900 unsigned HOST_WIDE_INT len = vec_safe_length (elts);
1902 unsigned HOST_WIDE_INT end = len;
1903 unsigned HOST_WIDE_INT begin = 0;
1905 /* If the last element of the CONSTRUCTOR has its own index, we can assume
1906 that the same is true of the other elements and index directly. */
1907 if (end > 0)
1909 tree cindex = (*elts)[end-1].index;
1910 if (TREE_CODE (cindex) == INTEGER_CST
1911 && compare_tree_int (cindex, end-1) == 0)
1913 if (i < end)
1914 return i;
1915 else
1916 begin = end;
1920 /* Otherwise, find a matching index by means of a binary search. */
1921 while (begin != end)
1923 unsigned HOST_WIDE_INT middle = (begin + end) / 2;
1924 constructor_elt &elt = (*elts)[middle];
1925 tree idx = elt.index;
1927 int cmp = array_index_cmp (dindex, idx);
1928 if (cmp < 0)
1929 end = middle;
1930 else if (cmp > 0)
1931 begin = middle + 1;
1932 else
1934 if (insert && TREE_CODE (idx) == RANGE_EXPR)
1936 /* We need to split the range. */
1937 constructor_elt e;
1938 tree lo = TREE_OPERAND (idx, 0);
1939 tree hi = TREE_OPERAND (idx, 1);
1940 if (tree_int_cst_lt (lo, dindex))
1942 /* There are still some lower elts; shorten the range. */
1943 tree new_hi = int_const_binop (MINUS_EXPR, dindex,
1944 size_one_node);
1945 if (tree_int_cst_equal (lo, new_hi))
1946 /* Only one element left, no longer a range. */
1947 elt.index = lo;
1948 else
1949 TREE_OPERAND (idx, 1) = new_hi;
1950 /* Append the element we want to insert. */
1951 ++middle;
1952 e.index = dindex;
1953 e.value = unshare_constructor (elt.value);
1954 vec_safe_insert (CONSTRUCTOR_ELTS (ary), middle, e);
1956 else
1957 /* No lower elts, the range elt is now ours. */
1958 elt.index = dindex;
1960 if (tree_int_cst_lt (dindex, hi))
1962 /* There are still some higher elts; append a range. */
1963 tree new_lo = int_const_binop (PLUS_EXPR, dindex,
1964 size_one_node);
1965 if (tree_int_cst_equal (new_lo, hi))
1966 e.index = hi;
1967 else
1968 e.index = build2 (RANGE_EXPR, sizetype, new_lo, hi);
1969 e.value = unshare_constructor (elt.value);
1970 vec_safe_insert (CONSTRUCTOR_ELTS (ary), middle+1, e);
1973 return middle;
1977 if (insert)
1979 constructor_elt e = { dindex, NULL_TREE };
1980 vec_safe_insert (CONSTRUCTOR_ELTS (ary), end, e);
1981 return end;
1984 return -1;
1987 /* Under the control of CTX, issue a detailed diagnostic for
1988 an out-of-bounds subscript INDEX into the expression ARRAY. */
1990 static void
1991 diag_array_subscript (const constexpr_ctx *ctx, tree array, tree index)
1993 if (!ctx->quiet)
1995 tree arraytype = TREE_TYPE (array);
1997 /* Convert the unsigned array subscript to a signed integer to avoid
1998 printing huge numbers for small negative values. */
1999 tree sidx = fold_convert (ssizetype, index);
2000 if (DECL_P (array))
2002 error ("array subscript value %qE is outside the bounds "
2003 "of array %qD of type %qT", sidx, array, arraytype);
2004 inform (DECL_SOURCE_LOCATION (array), "declared here");
2006 else
2007 error ("array subscript value %qE is outside the bounds "
2008 "of array type %qT", sidx, arraytype);
2012 /* Subroutine of cxx_eval_constant_expression.
2013 Attempt to reduce a reference to an array slot. */
2015 static tree
2016 cxx_eval_array_reference (const constexpr_ctx *ctx, tree t,
2017 bool lval,
2018 bool *non_constant_p, bool *overflow_p)
2020 tree oldary = TREE_OPERAND (t, 0);
2021 tree ary = cxx_eval_constant_expression (ctx, oldary,
2022 lval,
2023 non_constant_p, overflow_p);
2024 tree index, oldidx;
2025 HOST_WIDE_INT i;
2026 tree elem_type;
2027 unsigned len, elem_nchars = 1;
2028 if (*non_constant_p)
2029 return t;
2030 oldidx = TREE_OPERAND (t, 1);
2031 index = cxx_eval_constant_expression (ctx, oldidx,
2032 false,
2033 non_constant_p, overflow_p);
2034 VERIFY_CONSTANT (index);
2035 if (lval && ary == oldary && index == oldidx)
2036 return t;
2037 else if (lval)
2038 return build4 (ARRAY_REF, TREE_TYPE (t), ary, index, NULL, NULL);
2039 elem_type = TREE_TYPE (TREE_TYPE (ary));
2040 if (TREE_CODE (ary) == VIEW_CONVERT_EXPR
2041 && VECTOR_TYPE_P (TREE_TYPE (TREE_OPERAND (ary, 0)))
2042 && TREE_TYPE (t) == TREE_TYPE (TREE_TYPE (TREE_OPERAND (ary, 0))))
2043 ary = TREE_OPERAND (ary, 0);
2044 if (TREE_CODE (ary) == CONSTRUCTOR)
2045 len = CONSTRUCTOR_NELTS (ary);
2046 else if (TREE_CODE (ary) == STRING_CST)
2048 elem_nchars = (TYPE_PRECISION (elem_type)
2049 / TYPE_PRECISION (char_type_node));
2050 len = (unsigned) TREE_STRING_LENGTH (ary) / elem_nchars;
2052 else if (TREE_CODE (ary) == VECTOR_CST)
2053 len = VECTOR_CST_NELTS (ary);
2054 else
2056 /* We can't do anything with other tree codes, so use
2057 VERIFY_CONSTANT to complain and fail. */
2058 VERIFY_CONSTANT (ary);
2059 gcc_unreachable ();
2062 if (!tree_fits_shwi_p (index)
2063 || (i = tree_to_shwi (index)) < 0)
2065 diag_array_subscript (ctx, ary, index);
2066 *non_constant_p = true;
2067 return t;
2070 tree nelts;
2071 if (TREE_CODE (TREE_TYPE (ary)) == ARRAY_TYPE)
2072 nelts = array_type_nelts_top (TREE_TYPE (ary));
2073 else if (VECTOR_TYPE_P (TREE_TYPE (ary)))
2074 nelts = size_int (TYPE_VECTOR_SUBPARTS (TREE_TYPE (ary)));
2075 else
2076 gcc_unreachable ();
2078 /* For VLAs, the number of elements won't be an integer constant. */
2079 nelts = cxx_eval_constant_expression (ctx, nelts, false, non_constant_p,
2080 overflow_p);
2081 VERIFY_CONSTANT (nelts);
2082 if (!tree_int_cst_lt (index, nelts))
2084 diag_array_subscript (ctx, ary, index);
2085 *non_constant_p = true;
2086 return t;
2089 bool found;
2090 if (TREE_CODE (ary) == CONSTRUCTOR)
2092 HOST_WIDE_INT ix = find_array_ctor_elt (ary, index);
2093 found = (ix >= 0);
2094 if (found)
2095 i = ix;
2097 else
2098 found = (i < len);
2100 if (!found)
2102 if (TREE_CODE (ary) == CONSTRUCTOR
2103 && CONSTRUCTOR_NO_IMPLICIT_ZERO (ary))
2105 /* 'ary' is part of the aggregate initializer we're currently
2106 building; if there's no initializer for this element yet,
2107 that's an error. */
2108 if (!ctx->quiet)
2109 error ("accessing uninitialized array element");
2110 *non_constant_p = true;
2111 return t;
2114 /* If it's within the array bounds but doesn't have an explicit
2115 initializer, it's value-initialized. */
2116 tree val = build_value_init (elem_type, tf_warning_or_error);
2117 return cxx_eval_constant_expression (ctx, val, lval, non_constant_p,
2118 overflow_p);
2121 if (TREE_CODE (ary) == CONSTRUCTOR)
2122 return (*CONSTRUCTOR_ELTS (ary))[i].value;
2123 else if (TREE_CODE (ary) == VECTOR_CST)
2124 return VECTOR_CST_ELT (ary, i);
2125 else if (elem_nchars == 1)
2126 return build_int_cst (cv_unqualified (TREE_TYPE (TREE_TYPE (ary))),
2127 TREE_STRING_POINTER (ary)[i]);
2128 else
2130 tree type = cv_unqualified (TREE_TYPE (TREE_TYPE (ary)));
2131 return native_interpret_expr (type, (const unsigned char *)
2132 TREE_STRING_POINTER (ary)
2133 + i * elem_nchars, elem_nchars);
2135 /* Don't VERIFY_CONSTANT here. */
2138 /* Subroutine of cxx_eval_constant_expression.
2139 Attempt to reduce a field access of a value of class type. */
2141 static tree
2142 cxx_eval_component_reference (const constexpr_ctx *ctx, tree t,
2143 bool lval,
2144 bool *non_constant_p, bool *overflow_p)
2146 unsigned HOST_WIDE_INT i;
2147 tree field;
2148 tree value;
2149 tree part = TREE_OPERAND (t, 1);
2150 tree orig_whole = TREE_OPERAND (t, 0);
2151 tree whole = cxx_eval_constant_expression (ctx, orig_whole,
2152 lval,
2153 non_constant_p, overflow_p);
2154 if (TREE_CODE (whole) == PTRMEM_CST)
2155 whole = cplus_expand_constant (whole);
2156 if (whole == orig_whole)
2157 return t;
2158 if (lval)
2159 return fold_build3 (COMPONENT_REF, TREE_TYPE (t),
2160 whole, part, NULL_TREE);
2161 /* Don't VERIFY_CONSTANT here; we only want to check that we got a
2162 CONSTRUCTOR. */
2163 if (!*non_constant_p && TREE_CODE (whole) != CONSTRUCTOR)
2165 if (!ctx->quiet)
2166 error ("%qE is not a constant expression", orig_whole);
2167 *non_constant_p = true;
2169 if (DECL_MUTABLE_P (part))
2171 if (!ctx->quiet)
2172 error ("mutable %qD is not usable in a constant expression", part);
2173 *non_constant_p = true;
2175 if (*non_constant_p)
2176 return t;
2177 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (whole), i, field, value)
2179 if (field == part)
2181 if (value)
2182 return value;
2183 else
2184 /* We're in the middle of initializing it. */
2185 break;
2188 if (TREE_CODE (TREE_TYPE (whole)) == UNION_TYPE
2189 && CONSTRUCTOR_NELTS (whole) > 0)
2191 /* DR 1188 says we don't have to deal with this. */
2192 if (!ctx->quiet)
2193 error ("accessing %qD member instead of initialized %qD member in "
2194 "constant expression", part, CONSTRUCTOR_ELT (whole, 0)->index);
2195 *non_constant_p = true;
2196 return t;
2199 /* We only create a CONSTRUCTOR for a subobject when we modify it, so empty
2200 classes never get represented; throw together a value now. */
2201 if (is_really_empty_class (TREE_TYPE (t)))
2202 return build_constructor (TREE_TYPE (t), NULL);
2204 if (CONSTRUCTOR_NO_IMPLICIT_ZERO (whole))
2206 /* 'whole' is part of the aggregate initializer we're currently
2207 building; if there's no initializer for this member yet, that's an
2208 error. */
2209 if (!ctx->quiet)
2210 error ("accessing uninitialized member %qD", part);
2211 *non_constant_p = true;
2212 return t;
2215 /* If there's no explicit init for this field, it's value-initialized. */
2216 value = build_value_init (TREE_TYPE (t), tf_warning_or_error);
2217 return cxx_eval_constant_expression (ctx, value,
2218 lval,
2219 non_constant_p, overflow_p);
2222 /* Subroutine of cxx_eval_constant_expression.
2223 Attempt to reduce a field access of a value of class type that is
2224 expressed as a BIT_FIELD_REF. */
2226 static tree
2227 cxx_eval_bit_field_ref (const constexpr_ctx *ctx, tree t,
2228 bool lval,
2229 bool *non_constant_p, bool *overflow_p)
2231 tree orig_whole = TREE_OPERAND (t, 0);
2232 tree retval, fldval, utype, mask;
2233 bool fld_seen = false;
2234 HOST_WIDE_INT istart, isize;
2235 tree whole = cxx_eval_constant_expression (ctx, orig_whole,
2236 lval,
2237 non_constant_p, overflow_p);
2238 tree start, field, value;
2239 unsigned HOST_WIDE_INT i;
2241 if (whole == orig_whole)
2242 return t;
2243 /* Don't VERIFY_CONSTANT here; we only want to check that we got a
2244 CONSTRUCTOR. */
2245 if (!*non_constant_p
2246 && TREE_CODE (whole) != VECTOR_CST
2247 && TREE_CODE (whole) != CONSTRUCTOR)
2249 if (!ctx->quiet)
2250 error ("%qE is not a constant expression", orig_whole);
2251 *non_constant_p = true;
2253 if (*non_constant_p)
2254 return t;
2256 if (TREE_CODE (whole) == VECTOR_CST)
2257 return fold_ternary (BIT_FIELD_REF, TREE_TYPE (t), whole,
2258 TREE_OPERAND (t, 1), TREE_OPERAND (t, 2));
2260 start = TREE_OPERAND (t, 2);
2261 istart = tree_to_shwi (start);
2262 isize = tree_to_shwi (TREE_OPERAND (t, 1));
2263 utype = TREE_TYPE (t);
2264 if (!TYPE_UNSIGNED (utype))
2265 utype = build_nonstandard_integer_type (TYPE_PRECISION (utype), 1);
2266 retval = build_int_cst (utype, 0);
2267 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (whole), i, field, value)
2269 tree bitpos = bit_position (field);
2270 if (bitpos == start && DECL_SIZE (field) == TREE_OPERAND (t, 1))
2271 return value;
2272 if (TREE_CODE (TREE_TYPE (field)) == INTEGER_TYPE
2273 && TREE_CODE (value) == INTEGER_CST
2274 && tree_fits_shwi_p (bitpos)
2275 && tree_fits_shwi_p (DECL_SIZE (field)))
2277 HOST_WIDE_INT bit = tree_to_shwi (bitpos);
2278 HOST_WIDE_INT sz = tree_to_shwi (DECL_SIZE (field));
2279 HOST_WIDE_INT shift;
2280 if (bit >= istart && bit + sz <= istart + isize)
2282 fldval = fold_convert (utype, value);
2283 mask = build_int_cst_type (utype, -1);
2284 mask = fold_build2 (LSHIFT_EXPR, utype, mask,
2285 size_int (TYPE_PRECISION (utype) - sz));
2286 mask = fold_build2 (RSHIFT_EXPR, utype, mask,
2287 size_int (TYPE_PRECISION (utype) - sz));
2288 fldval = fold_build2 (BIT_AND_EXPR, utype, fldval, mask);
2289 shift = bit - istart;
2290 if (BYTES_BIG_ENDIAN)
2291 shift = TYPE_PRECISION (utype) - shift - sz;
2292 fldval = fold_build2 (LSHIFT_EXPR, utype, fldval,
2293 size_int (shift));
2294 retval = fold_build2 (BIT_IOR_EXPR, utype, retval, fldval);
2295 fld_seen = true;
2299 if (fld_seen)
2300 return fold_convert (TREE_TYPE (t), retval);
2301 gcc_unreachable ();
2302 return error_mark_node;
2305 /* Subroutine of cxx_eval_constant_expression.
2306 Evaluate a short-circuited logical expression T in the context
2307 of a given constexpr CALL. BAILOUT_VALUE is the value for
2308 early return. CONTINUE_VALUE is used here purely for
2309 sanity check purposes. */
2311 static tree
2312 cxx_eval_logical_expression (const constexpr_ctx *ctx, tree t,
2313 tree bailout_value, tree continue_value,
2314 bool lval,
2315 bool *non_constant_p, bool *overflow_p)
2317 tree r;
2318 tree lhs = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0),
2319 lval,
2320 non_constant_p, overflow_p);
2321 VERIFY_CONSTANT (lhs);
2322 if (tree_int_cst_equal (lhs, bailout_value))
2323 return lhs;
2324 gcc_assert (tree_int_cst_equal (lhs, continue_value));
2325 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 1),
2326 lval, non_constant_p,
2327 overflow_p);
2328 VERIFY_CONSTANT (r);
2329 return r;
2332 /* REF is a COMPONENT_REF designating a particular field. V is a vector of
2333 CONSTRUCTOR elements to initialize (part of) an object containing that
2334 field. Return a pointer to the constructor_elt corresponding to the
2335 initialization of the field. */
2337 static constructor_elt *
2338 base_field_constructor_elt (vec<constructor_elt, va_gc> *v, tree ref)
2340 tree aggr = TREE_OPERAND (ref, 0);
2341 tree field = TREE_OPERAND (ref, 1);
2342 HOST_WIDE_INT i;
2343 constructor_elt *ce;
2345 gcc_assert (TREE_CODE (ref) == COMPONENT_REF);
2347 if (TREE_CODE (aggr) == COMPONENT_REF)
2349 constructor_elt *base_ce
2350 = base_field_constructor_elt (v, aggr);
2351 v = CONSTRUCTOR_ELTS (base_ce->value);
2354 for (i = 0; vec_safe_iterate (v, i, &ce); ++i)
2355 if (ce->index == field)
2356 return ce;
2358 gcc_unreachable ();
2359 return NULL;
2362 /* Some of the expressions fed to the constexpr mechanism are calls to
2363 constructors, which have type void. In that case, return the type being
2364 initialized by the constructor. */
2366 static tree
2367 initialized_type (tree t)
2369 if (TYPE_P (t))
2370 return t;
2371 tree type = cv_unqualified (TREE_TYPE (t));
2372 if (TREE_CODE (t) == CALL_EXPR || TREE_CODE (t) == AGGR_INIT_EXPR)
2374 /* A constructor call has void type, so we need to look deeper. */
2375 tree fn = get_function_named_in_call (t);
2376 if (fn && TREE_CODE (fn) == FUNCTION_DECL
2377 && DECL_CXX_CONSTRUCTOR_P (fn))
2378 type = DECL_CONTEXT (fn);
2380 return type;
2383 /* We're about to initialize element INDEX of an array or class from VALUE.
2384 Set up NEW_CTX appropriately by adjusting .object to refer to the
2385 subobject and creating a new CONSTRUCTOR if the element is itself
2386 a class or array. */
2388 static void
2389 init_subob_ctx (const constexpr_ctx *ctx, constexpr_ctx &new_ctx,
2390 tree index, tree &value)
2392 new_ctx = *ctx;
2394 if (index && TREE_CODE (index) != INTEGER_CST
2395 && TREE_CODE (index) != FIELD_DECL)
2396 /* This won't have an element in the new CONSTRUCTOR. */
2397 return;
2399 tree type = initialized_type (value);
2400 if (!AGGREGATE_TYPE_P (type) && !VECTOR_TYPE_P (type))
2401 /* A non-aggregate member doesn't get its own CONSTRUCTOR. */
2402 return;
2404 /* The sub-aggregate initializer might contain a placeholder;
2405 update object to refer to the subobject and ctor to refer to
2406 the (newly created) sub-initializer. */
2407 if (ctx->object)
2408 new_ctx.object = build_ctor_subob_ref (index, type, ctx->object);
2409 tree elt = build_constructor (type, NULL);
2410 CONSTRUCTOR_NO_IMPLICIT_ZERO (elt) = true;
2411 new_ctx.ctor = elt;
2413 if (TREE_CODE (value) == TARGET_EXPR)
2414 /* Avoid creating another CONSTRUCTOR when we expand the TARGET_EXPR. */
2415 value = TARGET_EXPR_INITIAL (value);
2418 /* We're about to process an initializer for a class or array TYPE. Make
2419 sure that CTX is set up appropriately. */
2421 static void
2422 verify_ctor_sanity (const constexpr_ctx *ctx, tree type)
2424 /* We don't bother building a ctor for an empty base subobject. */
2425 if (is_empty_class (type))
2426 return;
2428 /* We're in the middle of an initializer that might involve placeholders;
2429 our caller should have created a CONSTRUCTOR for us to put the
2430 initializer into. We will either return that constructor or T. */
2431 gcc_assert (ctx->ctor);
2432 gcc_assert (same_type_ignoring_top_level_qualifiers_p
2433 (type, TREE_TYPE (ctx->ctor)));
2434 /* We used to check that ctx->ctor was empty, but that isn't the case when
2435 the object is zero-initialized before calling the constructor. */
2436 if (ctx->object)
2437 gcc_assert (same_type_ignoring_top_level_qualifiers_p
2438 (type, TREE_TYPE (ctx->object)));
2439 gcc_assert (!ctx->object || !DECL_P (ctx->object)
2440 || *(ctx->values->get (ctx->object)) == ctx->ctor);
2443 /* Subroutine of cxx_eval_constant_expression.
2444 The expression tree T denotes a C-style array or a C-style
2445 aggregate. Reduce it to a constant expression. */
2447 static tree
2448 cxx_eval_bare_aggregate (const constexpr_ctx *ctx, tree t,
2449 bool lval,
2450 bool *non_constant_p, bool *overflow_p)
2452 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (t);
2453 bool changed = false;
2454 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (t));
2455 tree type = TREE_TYPE (t);
2457 constexpr_ctx new_ctx;
2458 if (TYPE_PTRMEMFUNC_P (type) || VECTOR_TYPE_P (type))
2460 /* We don't really need the ctx->ctor business for a PMF or
2461 vector, but it's simpler to use the same code. */
2462 new_ctx = *ctx;
2463 new_ctx.ctor = build_constructor (type, NULL);
2464 new_ctx.object = NULL_TREE;
2465 ctx = &new_ctx;
2467 verify_ctor_sanity (ctx, type);
2468 vec<constructor_elt, va_gc> **p = &CONSTRUCTOR_ELTS (ctx->ctor);
2469 vec_alloc (*p, vec_safe_length (v));
2471 unsigned i;
2472 tree index, value;
2473 bool constant_p = true;
2474 bool side_effects_p = false;
2475 FOR_EACH_CONSTRUCTOR_ELT (v, i, index, value)
2477 tree orig_value = value;
2478 init_subob_ctx (ctx, new_ctx, index, value);
2479 if (new_ctx.ctor != ctx->ctor)
2480 /* If we built a new CONSTRUCTOR, attach it now so that other
2481 initializers can refer to it. */
2482 CONSTRUCTOR_APPEND_ELT (*p, index, new_ctx.ctor);
2483 tree elt = cxx_eval_constant_expression (&new_ctx, value,
2484 lval,
2485 non_constant_p, overflow_p);
2486 /* Don't VERIFY_CONSTANT here. */
2487 if (ctx->quiet && *non_constant_p)
2488 break;
2489 if (elt != orig_value)
2490 changed = true;
2492 if (!TREE_CONSTANT (elt))
2493 constant_p = false;
2494 if (TREE_SIDE_EFFECTS (elt))
2495 side_effects_p = true;
2496 if (index && TREE_CODE (index) == COMPONENT_REF)
2498 /* This is an initialization of a vfield inside a base
2499 subaggregate that we already initialized; push this
2500 initialization into the previous initialization. */
2501 constructor_elt *inner = base_field_constructor_elt (*p, index);
2502 inner->value = elt;
2503 changed = true;
2505 else if (index
2506 && (TREE_CODE (index) == NOP_EXPR
2507 || TREE_CODE (index) == POINTER_PLUS_EXPR))
2509 /* This is an initializer for an empty base; now that we've
2510 checked that it's constant, we can ignore it. */
2511 gcc_assert (is_empty_class (TREE_TYPE (TREE_TYPE (index))));
2512 changed = true;
2514 else if (new_ctx.ctor != ctx->ctor)
2516 /* We appended this element above; update the value. */
2517 gcc_assert ((*p)->last().index == index);
2518 (*p)->last().value = elt;
2520 else
2521 CONSTRUCTOR_APPEND_ELT (*p, index, elt);
2523 if (*non_constant_p || !changed)
2524 return t;
2525 t = ctx->ctor;
2526 /* We're done building this CONSTRUCTOR, so now we can interpret an
2527 element without an explicit initializer as value-initialized. */
2528 CONSTRUCTOR_NO_IMPLICIT_ZERO (t) = false;
2529 TREE_CONSTANT (t) = constant_p;
2530 TREE_SIDE_EFFECTS (t) = side_effects_p;
2531 if (VECTOR_TYPE_P (type))
2532 t = fold (t);
2533 return t;
2536 /* Subroutine of cxx_eval_constant_expression.
2537 The expression tree T is a VEC_INIT_EXPR which denotes the desired
2538 initialization of a non-static data member of array type. Reduce it to a
2539 CONSTRUCTOR.
2541 Note that apart from value-initialization (when VALUE_INIT is true),
2542 this is only intended to support value-initialization and the
2543 initializations done by defaulted constructors for classes with
2544 non-static data members of array type. In this case, VEC_INIT_EXPR_INIT
2545 will either be NULL_TREE for the default constructor, or a COMPONENT_REF
2546 for the copy/move constructor. */
2548 static tree
2549 cxx_eval_vec_init_1 (const constexpr_ctx *ctx, tree atype, tree init,
2550 bool value_init, bool lval,
2551 bool *non_constant_p, bool *overflow_p)
2553 tree elttype = TREE_TYPE (atype);
2554 unsigned HOST_WIDE_INT max = tree_to_uhwi (array_type_nelts_top (atype));
2555 verify_ctor_sanity (ctx, atype);
2556 vec<constructor_elt, va_gc> **p = &CONSTRUCTOR_ELTS (ctx->ctor);
2557 vec_alloc (*p, max + 1);
2558 bool pre_init = false;
2559 unsigned HOST_WIDE_INT i;
2561 /* For the default constructor, build up a call to the default
2562 constructor of the element type. We only need to handle class types
2563 here, as for a constructor to be constexpr, all members must be
2564 initialized, which for a defaulted default constructor means they must
2565 be of a class type with a constexpr default constructor. */
2566 if (TREE_CODE (elttype) == ARRAY_TYPE)
2567 /* We only do this at the lowest level. */;
2568 else if (value_init)
2570 init = build_value_init (elttype, tf_warning_or_error);
2571 pre_init = true;
2573 else if (!init)
2575 vec<tree, va_gc> *argvec = make_tree_vector ();
2576 init = build_special_member_call (NULL_TREE, complete_ctor_identifier,
2577 &argvec, elttype, LOOKUP_NORMAL,
2578 tf_warning_or_error);
2579 release_tree_vector (argvec);
2580 init = build_aggr_init_expr (TREE_TYPE (init), init);
2581 pre_init = true;
2584 for (i = 0; i < max; ++i)
2586 tree idx = build_int_cst (size_type_node, i);
2587 tree eltinit;
2588 bool reuse = false;
2589 constexpr_ctx new_ctx;
2590 init_subob_ctx (ctx, new_ctx, idx, pre_init ? init : elttype);
2591 if (new_ctx.ctor != ctx->ctor)
2592 CONSTRUCTOR_APPEND_ELT (*p, idx, new_ctx.ctor);
2593 if (TREE_CODE (elttype) == ARRAY_TYPE)
2595 /* A multidimensional array; recurse. */
2596 if (value_init || init == NULL_TREE)
2598 eltinit = NULL_TREE;
2599 reuse = i == 0;
2601 else
2602 eltinit = cp_build_array_ref (input_location, init, idx,
2603 tf_warning_or_error);
2604 eltinit = cxx_eval_vec_init_1 (&new_ctx, elttype, eltinit, value_init,
2605 lval,
2606 non_constant_p, overflow_p);
2608 else if (pre_init)
2610 /* Initializing an element using value or default initialization
2611 we just pre-built above. */
2612 eltinit = cxx_eval_constant_expression (&new_ctx, init, lval,
2613 non_constant_p, overflow_p);
2614 reuse = i == 0;
2616 else
2618 /* Copying an element. */
2619 gcc_assert (same_type_ignoring_top_level_qualifiers_p
2620 (atype, TREE_TYPE (init)));
2621 eltinit = cp_build_array_ref (input_location, init, idx,
2622 tf_warning_or_error);
2623 if (!real_lvalue_p (init))
2624 eltinit = move (eltinit);
2625 eltinit = force_rvalue (eltinit, tf_warning_or_error);
2626 eltinit = (cxx_eval_constant_expression
2627 (&new_ctx, eltinit, lval,
2628 non_constant_p, overflow_p));
2630 if (*non_constant_p && !ctx->quiet)
2631 break;
2632 if (new_ctx.ctor != ctx->ctor)
2634 /* We appended this element above; update the value. */
2635 gcc_assert ((*p)->last().index == idx);
2636 (*p)->last().value = eltinit;
2638 else
2639 CONSTRUCTOR_APPEND_ELT (*p, idx, eltinit);
2640 /* Reuse the result of cxx_eval_constant_expression call
2641 from the first iteration to all others if it is a constant
2642 initializer that doesn't require relocations. */
2643 if (reuse
2644 && max > 1
2645 && (initializer_constant_valid_p (eltinit, TREE_TYPE (eltinit))
2646 == null_pointer_node))
2648 if (new_ctx.ctor != ctx->ctor)
2649 eltinit = new_ctx.ctor;
2650 for (i = 1; i < max; ++i)
2652 idx = build_int_cst (size_type_node, i);
2653 CONSTRUCTOR_APPEND_ELT (*p, idx, unshare_constructor (eltinit));
2655 break;
2659 if (!*non_constant_p)
2661 init = ctx->ctor;
2662 CONSTRUCTOR_NO_IMPLICIT_ZERO (init) = false;
2664 return init;
2667 static tree
2668 cxx_eval_vec_init (const constexpr_ctx *ctx, tree t,
2669 bool lval,
2670 bool *non_constant_p, bool *overflow_p)
2672 tree atype = TREE_TYPE (t);
2673 tree init = VEC_INIT_EXPR_INIT (t);
2674 tree r = cxx_eval_vec_init_1 (ctx, atype, init,
2675 VEC_INIT_EXPR_VALUE_INIT (t),
2676 lval, non_constant_p, overflow_p);
2677 if (*non_constant_p)
2678 return t;
2679 else
2680 return r;
2683 /* A less strict version of fold_indirect_ref_1, which requires cv-quals to
2684 match. We want to be less strict for simple *& folding; if we have a
2685 non-const temporary that we access through a const pointer, that should
2686 work. We handle this here rather than change fold_indirect_ref_1
2687 because we're dealing with things like ADDR_EXPR of INTEGER_CST which
2688 don't really make sense outside of constant expression evaluation. Also
2689 we want to allow folding to COMPONENT_REF, which could cause trouble
2690 with TBAA in fold_indirect_ref_1.
2692 Try to keep this function synced with fold_indirect_ref_1. */
2694 static tree
2695 cxx_fold_indirect_ref (location_t loc, tree type, tree op0, bool *empty_base)
2697 tree sub, subtype;
2699 sub = op0;
2700 STRIP_NOPS (sub);
2701 subtype = TREE_TYPE (sub);
2702 if (!POINTER_TYPE_P (subtype))
2703 return NULL_TREE;
2705 if (TREE_CODE (sub) == ADDR_EXPR)
2707 tree op = TREE_OPERAND (sub, 0);
2708 tree optype = TREE_TYPE (op);
2710 /* *&CONST_DECL -> to the value of the const decl. */
2711 if (TREE_CODE (op) == CONST_DECL)
2712 return DECL_INITIAL (op);
2713 /* *&p => p; make sure to handle *&"str"[cst] here. */
2714 if (same_type_ignoring_top_level_qualifiers_p (optype, type)
2715 /* Also handle the case where the desired type is an array of unknown
2716 bounds because the variable has had its bounds deduced since the
2717 ADDR_EXPR was created. */
2718 || (TREE_CODE (type) == ARRAY_TYPE
2719 && TREE_CODE (optype) == ARRAY_TYPE
2720 && TYPE_DOMAIN (type) == NULL_TREE
2721 && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (optype),
2722 TREE_TYPE (type))))
2724 tree fop = fold_read_from_constant_string (op);
2725 if (fop)
2726 return fop;
2727 else
2728 return op;
2730 /* *(foo *)&fooarray => fooarray[0] */
2731 else if (TREE_CODE (optype) == ARRAY_TYPE
2732 && (same_type_ignoring_top_level_qualifiers_p
2733 (type, TREE_TYPE (optype))))
2735 tree type_domain = TYPE_DOMAIN (optype);
2736 tree min_val = size_zero_node;
2737 if (type_domain && TYPE_MIN_VALUE (type_domain))
2738 min_val = TYPE_MIN_VALUE (type_domain);
2739 return build4_loc (loc, ARRAY_REF, type, op, min_val,
2740 NULL_TREE, NULL_TREE);
2742 /* *(foo *)&complexfoo => __real__ complexfoo */
2743 else if (TREE_CODE (optype) == COMPLEX_TYPE
2744 && (same_type_ignoring_top_level_qualifiers_p
2745 (type, TREE_TYPE (optype))))
2746 return fold_build1_loc (loc, REALPART_EXPR, type, op);
2747 /* *(foo *)&vectorfoo => BIT_FIELD_REF<vectorfoo,...> */
2748 else if (VECTOR_TYPE_P (optype)
2749 && (same_type_ignoring_top_level_qualifiers_p
2750 (type, TREE_TYPE (optype))))
2752 tree part_width = TYPE_SIZE (type);
2753 tree index = bitsize_int (0);
2754 return fold_build3_loc (loc, BIT_FIELD_REF, type, op, part_width, index);
2756 /* Also handle conversion to an empty base class, which
2757 is represented with a NOP_EXPR. */
2758 else if (is_empty_class (type)
2759 && CLASS_TYPE_P (optype)
2760 && DERIVED_FROM_P (type, optype))
2762 *empty_base = true;
2763 return op;
2765 /* *(foo *)&struct_with_foo_field => COMPONENT_REF */
2766 else if (RECORD_OR_UNION_TYPE_P (optype))
2768 tree field = TYPE_FIELDS (optype);
2769 for (; field; field = DECL_CHAIN (field))
2770 if (TREE_CODE (field) == FIELD_DECL
2771 && integer_zerop (byte_position (field))
2772 && (same_type_ignoring_top_level_qualifiers_p
2773 (TREE_TYPE (field), type)))
2775 return fold_build3 (COMPONENT_REF, type, op, field, NULL_TREE);
2776 break;
2780 else if (TREE_CODE (sub) == POINTER_PLUS_EXPR
2781 && TREE_CODE (TREE_OPERAND (sub, 1)) == INTEGER_CST)
2783 tree op00 = TREE_OPERAND (sub, 0);
2784 tree op01 = TREE_OPERAND (sub, 1);
2786 STRIP_NOPS (op00);
2787 if (TREE_CODE (op00) == ADDR_EXPR)
2789 tree op00type;
2790 op00 = TREE_OPERAND (op00, 0);
2791 op00type = TREE_TYPE (op00);
2793 /* ((foo*)&vectorfoo)[1] => BIT_FIELD_REF<vectorfoo,...> */
2794 if (VECTOR_TYPE_P (op00type)
2795 && (same_type_ignoring_top_level_qualifiers_p
2796 (type, TREE_TYPE (op00type))))
2798 HOST_WIDE_INT offset = tree_to_shwi (op01);
2799 tree part_width = TYPE_SIZE (type);
2800 unsigned HOST_WIDE_INT part_widthi = tree_to_shwi (part_width)/BITS_PER_UNIT;
2801 unsigned HOST_WIDE_INT indexi = offset * BITS_PER_UNIT;
2802 tree index = bitsize_int (indexi);
2804 if (offset / part_widthi < TYPE_VECTOR_SUBPARTS (op00type))
2805 return fold_build3_loc (loc,
2806 BIT_FIELD_REF, type, op00,
2807 part_width, index);
2810 /* ((foo*)&complexfoo)[1] => __imag__ complexfoo */
2811 else if (TREE_CODE (op00type) == COMPLEX_TYPE
2812 && (same_type_ignoring_top_level_qualifiers_p
2813 (type, TREE_TYPE (op00type))))
2815 tree size = TYPE_SIZE_UNIT (type);
2816 if (tree_int_cst_equal (size, op01))
2817 return fold_build1_loc (loc, IMAGPART_EXPR, type, op00);
2819 /* ((foo *)&fooarray)[1] => fooarray[1] */
2820 else if (TREE_CODE (op00type) == ARRAY_TYPE
2821 && (same_type_ignoring_top_level_qualifiers_p
2822 (type, TREE_TYPE (op00type))))
2824 tree type_domain = TYPE_DOMAIN (op00type);
2825 tree min_val = size_zero_node;
2826 if (type_domain && TYPE_MIN_VALUE (type_domain))
2827 min_val = TYPE_MIN_VALUE (type_domain);
2828 op01 = size_binop_loc (loc, EXACT_DIV_EXPR, op01,
2829 TYPE_SIZE_UNIT (type));
2830 op01 = size_binop_loc (loc, PLUS_EXPR, op01, min_val);
2831 return build4_loc (loc, ARRAY_REF, type, op00, op01,
2832 NULL_TREE, NULL_TREE);
2834 /* Also handle conversion to an empty base class, which
2835 is represented with a NOP_EXPR. */
2836 else if (is_empty_class (type)
2837 && CLASS_TYPE_P (op00type)
2838 && DERIVED_FROM_P (type, op00type))
2840 *empty_base = true;
2841 return op00;
2843 /* ((foo *)&struct_with_foo_field)[1] => COMPONENT_REF */
2844 else if (RECORD_OR_UNION_TYPE_P (op00type))
2846 tree field = TYPE_FIELDS (op00type);
2847 for (; field; field = DECL_CHAIN (field))
2848 if (TREE_CODE (field) == FIELD_DECL
2849 && tree_int_cst_equal (byte_position (field), op01)
2850 && (same_type_ignoring_top_level_qualifiers_p
2851 (TREE_TYPE (field), type)))
2853 return fold_build3 (COMPONENT_REF, type, op00,
2854 field, NULL_TREE);
2855 break;
2860 /* *(foo *)fooarrptr => (*fooarrptr)[0] */
2861 else if (TREE_CODE (TREE_TYPE (subtype)) == ARRAY_TYPE
2862 && (same_type_ignoring_top_level_qualifiers_p
2863 (type, TREE_TYPE (TREE_TYPE (subtype)))))
2865 tree type_domain;
2866 tree min_val = size_zero_node;
2867 tree newsub = cxx_fold_indirect_ref (loc, TREE_TYPE (subtype), sub, NULL);
2868 if (newsub)
2869 sub = newsub;
2870 else
2871 sub = build1_loc (loc, INDIRECT_REF, TREE_TYPE (subtype), sub);
2872 type_domain = TYPE_DOMAIN (TREE_TYPE (sub));
2873 if (type_domain && TYPE_MIN_VALUE (type_domain))
2874 min_val = TYPE_MIN_VALUE (type_domain);
2875 return build4_loc (loc, ARRAY_REF, type, sub, min_val, NULL_TREE,
2876 NULL_TREE);
2879 return NULL_TREE;
2882 static tree
2883 cxx_eval_indirect_ref (const constexpr_ctx *ctx, tree t,
2884 bool lval,
2885 bool *non_constant_p, bool *overflow_p)
2887 tree orig_op0 = TREE_OPERAND (t, 0);
2888 bool empty_base = false;
2890 /* We can handle a MEM_REF like an INDIRECT_REF, if MEM_REF's second
2891 operand is an integer-zero. Otherwise reject the MEM_REF for now. */
2893 if (TREE_CODE (t) == MEM_REF
2894 && (!TREE_OPERAND (t, 1) || !integer_zerop (TREE_OPERAND (t, 1))))
2896 gcc_assert (ctx->quiet);
2897 *non_constant_p = true;
2898 return t;
2901 /* First try to simplify it directly. */
2902 tree r = cxx_fold_indirect_ref (EXPR_LOCATION (t), TREE_TYPE (t), orig_op0,
2903 &empty_base);
2904 if (!r)
2906 /* If that didn't work, evaluate the operand first. */
2907 tree op0 = cxx_eval_constant_expression (ctx, orig_op0,
2908 /*lval*/false, non_constant_p,
2909 overflow_p);
2910 /* Don't VERIFY_CONSTANT here. */
2911 if (*non_constant_p)
2912 return t;
2914 r = cxx_fold_indirect_ref (EXPR_LOCATION (t), TREE_TYPE (t), op0,
2915 &empty_base);
2916 if (r == NULL_TREE)
2918 /* We couldn't fold to a constant value. Make sure it's not
2919 something we should have been able to fold. */
2920 tree sub = op0;
2921 STRIP_NOPS (sub);
2922 if (TREE_CODE (sub) == ADDR_EXPR)
2924 gcc_assert (!same_type_ignoring_top_level_qualifiers_p
2925 (TREE_TYPE (TREE_TYPE (sub)), TREE_TYPE (t)));
2926 /* DR 1188 says we don't have to deal with this. */
2927 if (!ctx->quiet)
2928 error ("accessing value of %qE through a %qT glvalue in a "
2929 "constant expression", build_fold_indirect_ref (sub),
2930 TREE_TYPE (t));
2931 *non_constant_p = true;
2932 return t;
2935 if (lval && op0 != orig_op0)
2936 return build1 (INDIRECT_REF, TREE_TYPE (t), op0);
2937 if (!lval)
2938 VERIFY_CONSTANT (t);
2939 return t;
2943 r = cxx_eval_constant_expression (ctx, r,
2944 lval, non_constant_p, overflow_p);
2945 if (*non_constant_p)
2946 return t;
2948 /* If we're pulling out the value of an empty base, make sure
2949 that the whole object is constant and then return an empty
2950 CONSTRUCTOR. */
2951 if (empty_base && !lval)
2953 VERIFY_CONSTANT (r);
2954 r = build_constructor (TREE_TYPE (t), NULL);
2955 TREE_CONSTANT (r) = true;
2958 return r;
2961 /* Complain about R, a VAR_DECL, not being usable in a constant expression.
2962 Shared between potential_constant_expression and
2963 cxx_eval_constant_expression. */
2965 static void
2966 non_const_var_error (tree r)
2968 tree type = TREE_TYPE (r);
2969 error ("the value of %qD is not usable in a constant "
2970 "expression", r);
2971 /* Avoid error cascade. */
2972 if (DECL_INITIAL (r) == error_mark_node)
2973 return;
2974 if (DECL_DECLARED_CONSTEXPR_P (r))
2975 inform (DECL_SOURCE_LOCATION (r),
2976 "%qD used in its own initializer", r);
2977 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
2979 if (!CP_TYPE_CONST_P (type))
2980 inform (DECL_SOURCE_LOCATION (r),
2981 "%q#D is not const", r);
2982 else if (CP_TYPE_VOLATILE_P (type))
2983 inform (DECL_SOURCE_LOCATION (r),
2984 "%q#D is volatile", r);
2985 else if (!DECL_INITIAL (r)
2986 || !TREE_CONSTANT (DECL_INITIAL (r))
2987 || !DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r))
2988 inform (DECL_SOURCE_LOCATION (r),
2989 "%qD was not initialized with a constant "
2990 "expression", r);
2991 else
2992 gcc_unreachable ();
2994 else
2996 if (cxx_dialect >= cxx11 && !DECL_DECLARED_CONSTEXPR_P (r))
2997 inform (DECL_SOURCE_LOCATION (r),
2998 "%qD was not declared %<constexpr%>", r);
2999 else
3000 inform (DECL_SOURCE_LOCATION (r),
3001 "%qD does not have integral or enumeration type",
3006 /* Subroutine of cxx_eval_constant_expression.
3007 Like cxx_eval_unary_expression, except for trinary expressions. */
3009 static tree
3010 cxx_eval_trinary_expression (const constexpr_ctx *ctx, tree t,
3011 bool lval,
3012 bool *non_constant_p, bool *overflow_p)
3014 int i;
3015 tree args[3];
3016 tree val;
3018 for (i = 0; i < 3; i++)
3020 args[i] = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, i),
3021 lval,
3022 non_constant_p, overflow_p);
3023 VERIFY_CONSTANT (args[i]);
3026 val = fold_ternary_loc (EXPR_LOCATION (t), TREE_CODE (t), TREE_TYPE (t),
3027 args[0], args[1], args[2]);
3028 if (val == NULL_TREE)
3029 return t;
3030 VERIFY_CONSTANT (val);
3031 return val;
3034 bool
3035 var_in_constexpr_fn (tree t)
3037 tree ctx = DECL_CONTEXT (t);
3038 return (cxx_dialect >= cxx14 && ctx && TREE_CODE (ctx) == FUNCTION_DECL
3039 && DECL_DECLARED_CONSTEXPR_P (ctx));
3042 /* Evaluate an INIT_EXPR or MODIFY_EXPR. */
3044 static tree
3045 cxx_eval_store_expression (const constexpr_ctx *ctx, tree t,
3046 bool lval,
3047 bool *non_constant_p, bool *overflow_p)
3049 constexpr_ctx new_ctx = *ctx;
3051 tree init = TREE_OPERAND (t, 1);
3052 if (TREE_CLOBBER_P (init))
3053 /* Just ignore clobbers. */
3054 return void_node;
3056 /* First we figure out where we're storing to. */
3057 tree target = TREE_OPERAND (t, 0);
3058 tree type = TREE_TYPE (target);
3059 target = cxx_eval_constant_expression (ctx, target,
3060 true,
3061 non_constant_p, overflow_p);
3062 if (*non_constant_p)
3063 return t;
3065 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (target), type))
3067 /* For initialization of an empty base, the original target will be
3068 *(base*)this, which the above evaluation resolves to the object
3069 argument, which has the derived type rather than the base type. In
3070 this situation, just evaluate the initializer and return, since
3071 there's no actual data to store. */
3072 gcc_assert (is_empty_class (type));
3073 return cxx_eval_constant_expression (ctx, init, false,
3074 non_constant_p, overflow_p);
3077 /* And then find the underlying variable. */
3078 vec<tree,va_gc> *refs = make_tree_vector();
3079 tree object = NULL_TREE;
3080 for (tree probe = target; object == NULL_TREE; )
3082 switch (TREE_CODE (probe))
3084 case BIT_FIELD_REF:
3085 case COMPONENT_REF:
3086 case ARRAY_REF:
3087 vec_safe_push (refs, TREE_OPERAND (probe, 1));
3088 vec_safe_push (refs, TREE_TYPE (probe));
3089 probe = TREE_OPERAND (probe, 0);
3090 break;
3092 default:
3093 object = probe;
3097 /* And then find/build up our initializer for the path to the subobject
3098 we're initializing. */
3099 tree *valp;
3100 if (DECL_P (object))
3101 valp = ctx->values->get (object);
3102 else
3103 valp = NULL;
3104 if (!valp)
3106 /* A constant-expression cannot modify objects from outside the
3107 constant-expression. */
3108 if (!ctx->quiet)
3109 error ("modification of %qE is not a constant-expression", object);
3110 *non_constant_p = true;
3111 return t;
3113 type = TREE_TYPE (object);
3114 bool no_zero_init = true;
3116 vec<tree,va_gc> *ctors = make_tree_vector ();
3117 while (!refs->is_empty())
3119 if (*valp == NULL_TREE)
3121 *valp = build_constructor (type, NULL);
3122 CONSTRUCTOR_NO_IMPLICIT_ZERO (*valp) = no_zero_init;
3124 /* If the value of object is already zero-initialized, any new ctors for
3125 subobjects will also be zero-initialized. */
3126 no_zero_init = CONSTRUCTOR_NO_IMPLICIT_ZERO (*valp);
3128 vec_safe_push (ctors, *valp);
3130 enum tree_code code = TREE_CODE (type);
3131 type = refs->pop();
3132 tree index = refs->pop();
3134 constructor_elt *cep = NULL;
3135 if (code == ARRAY_TYPE)
3137 HOST_WIDE_INT i
3138 = find_array_ctor_elt (*valp, index, /*insert*/true);
3139 gcc_assert (i >= 0);
3140 cep = CONSTRUCTOR_ELT (*valp, i);
3141 gcc_assert (TREE_CODE (cep->index) != RANGE_EXPR);
3143 else
3145 gcc_assert (TREE_CODE (index) == FIELD_DECL);
3147 /* We must keep the CONSTRUCTOR's ELTS in FIELD order.
3148 Usually we meet initializers in that order, but it is
3149 possible for base types to be placed not in program
3150 order. */
3151 tree fields = TYPE_FIELDS (DECL_CONTEXT (index));
3152 unsigned HOST_WIDE_INT idx;
3154 for (idx = 0;
3155 vec_safe_iterate (CONSTRUCTOR_ELTS (*valp), idx, &cep);
3156 idx++, fields = DECL_CHAIN (fields))
3158 if (index == cep->index)
3159 goto found;
3161 /* The field we're initializing must be on the field
3162 list. Look to see if it is present before the
3163 field the current ELT initializes. */
3164 for (; fields != cep->index; fields = DECL_CHAIN (fields))
3165 if (index == fields)
3166 goto insert;
3169 /* We fell off the end of the CONSTRUCTOR, so insert a new
3170 entry at the end. */
3171 insert:
3173 constructor_elt ce = { index, NULL_TREE };
3175 vec_safe_insert (CONSTRUCTOR_ELTS (*valp), idx, ce);
3176 cep = CONSTRUCTOR_ELT (*valp, idx);
3178 found:;
3180 valp = &cep->value;
3182 release_tree_vector (refs);
3184 if (AGGREGATE_TYPE_P (type) || VECTOR_TYPE_P (type))
3186 /* Create a new CONSTRUCTOR in case evaluation of the initializer
3187 wants to modify it. */
3188 if (*valp == NULL_TREE)
3190 *valp = new_ctx.ctor = build_constructor (type, NULL);
3191 CONSTRUCTOR_NO_IMPLICIT_ZERO (new_ctx.ctor) = no_zero_init;
3193 else
3194 new_ctx.ctor = *valp;
3195 new_ctx.object = target;
3198 init = cxx_eval_constant_expression (&new_ctx, init, false,
3199 non_constant_p, overflow_p);
3200 /* Don't share a CONSTRUCTOR that might be changed later. */
3201 init = unshare_constructor (init);
3202 if (target == object)
3203 /* The hash table might have moved since the get earlier. */
3204 valp = ctx->values->get (object);
3206 if (TREE_CODE (init) == CONSTRUCTOR)
3208 /* An outer ctx->ctor might be pointing to *valp, so replace
3209 its contents. */
3210 CONSTRUCTOR_ELTS (*valp) = CONSTRUCTOR_ELTS (init);
3211 TREE_CONSTANT (*valp) = TREE_CONSTANT (init);
3212 TREE_SIDE_EFFECTS (*valp) = TREE_SIDE_EFFECTS (init);
3213 CONSTRUCTOR_NO_IMPLICIT_ZERO (*valp)
3214 = CONSTRUCTOR_NO_IMPLICIT_ZERO (init);
3216 else
3217 *valp = init;
3219 /* Update TREE_CONSTANT and TREE_SIDE_EFFECTS on enclosing
3220 CONSTRUCTORs, if any. */
3221 tree elt;
3222 unsigned i;
3223 bool c = TREE_CONSTANT (init);
3224 bool s = TREE_SIDE_EFFECTS (init);
3225 if (!c || s)
3226 FOR_EACH_VEC_SAFE_ELT (ctors, i, elt)
3228 if (!c)
3229 TREE_CONSTANT (elt) = false;
3230 if (s)
3231 TREE_SIDE_EFFECTS (elt) = true;
3233 release_tree_vector (ctors);
3235 if (*non_constant_p)
3236 return t;
3237 else if (lval)
3238 return target;
3239 else
3240 return init;
3243 /* Evaluate a ++ or -- expression. */
3245 static tree
3246 cxx_eval_increment_expression (const constexpr_ctx *ctx, tree t,
3247 bool lval,
3248 bool *non_constant_p, bool *overflow_p)
3250 enum tree_code code = TREE_CODE (t);
3251 tree type = TREE_TYPE (t);
3252 tree op = TREE_OPERAND (t, 0);
3253 tree offset = TREE_OPERAND (t, 1);
3254 gcc_assert (TREE_CONSTANT (offset));
3256 /* The operand as an lvalue. */
3257 op = cxx_eval_constant_expression (ctx, op, true,
3258 non_constant_p, overflow_p);
3260 /* The operand as an rvalue. */
3261 tree val = rvalue (op);
3262 val = cxx_eval_constant_expression (ctx, val, false,
3263 non_constant_p, overflow_p);
3264 /* Don't VERIFY_CONSTANT if this might be dealing with a pointer to
3265 a local array in a constexpr function. */
3266 bool ptr = POINTER_TYPE_P (TREE_TYPE (val));
3267 if (!ptr)
3268 VERIFY_CONSTANT (val);
3270 /* The modified value. */
3271 bool inc = (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR);
3272 tree mod;
3273 if (POINTER_TYPE_P (type))
3275 /* The middle end requires pointers to use POINTER_PLUS_EXPR. */
3276 offset = convert_to_ptrofftype (offset);
3277 if (!inc)
3278 offset = fold_build1 (NEGATE_EXPR, TREE_TYPE (offset), offset);
3279 mod = fold_build2 (POINTER_PLUS_EXPR, type, val, offset);
3281 else
3282 mod = fold_build2 (inc ? PLUS_EXPR : MINUS_EXPR, type, val, offset);
3283 if (!ptr)
3284 VERIFY_CONSTANT (mod);
3286 /* Storing the modified value. */
3287 tree store = build2 (MODIFY_EXPR, type, op, mod);
3288 cxx_eval_constant_expression (ctx, store,
3289 true, non_constant_p, overflow_p);
3291 /* And the value of the expression. */
3292 if (code == PREINCREMENT_EXPR || code == PREDECREMENT_EXPR)
3294 /* Prefix ops are lvalues. */
3295 if (lval)
3296 return op;
3297 else
3298 /* But we optimize when the caller wants an rvalue. */
3299 return mod;
3301 else
3302 /* Postfix ops are rvalues. */
3303 return val;
3306 /* Predicates for the meaning of *jump_target. */
3308 static bool
3309 returns (tree *jump_target)
3311 return *jump_target
3312 && TREE_CODE (*jump_target) == RETURN_EXPR;
3315 static bool
3316 breaks (tree *jump_target)
3318 return *jump_target
3319 && ((TREE_CODE (*jump_target) == LABEL_DECL
3320 && LABEL_DECL_BREAK (*jump_target))
3321 || TREE_CODE (*jump_target) == EXIT_EXPR);
3324 static bool
3325 continues (tree *jump_target)
3327 return *jump_target
3328 && TREE_CODE (*jump_target) == LABEL_DECL
3329 && LABEL_DECL_CONTINUE (*jump_target);
3332 static bool
3333 switches (tree *jump_target)
3335 return *jump_target
3336 && TREE_CODE (*jump_target) == INTEGER_CST;
3339 /* Subroutine of cxx_eval_statement_list. Determine whether the statement
3340 at I matches *jump_target. If we're looking for a case label and we see
3341 the default label, copy I into DEFAULT_LABEL. */
3343 static bool
3344 label_matches (tree *jump_target, tree_stmt_iterator i,
3345 tree_stmt_iterator& default_label)
3347 tree stmt = tsi_stmt (i);
3348 switch (TREE_CODE (*jump_target))
3350 case LABEL_DECL:
3351 if (TREE_CODE (stmt) == LABEL_EXPR
3352 && LABEL_EXPR_LABEL (stmt) == *jump_target)
3353 return true;
3354 break;
3356 case INTEGER_CST:
3357 if (TREE_CODE (stmt) == CASE_LABEL_EXPR)
3359 if (!CASE_LOW (stmt))
3360 default_label = i;
3361 else if (tree_int_cst_equal (*jump_target, CASE_LOW (stmt)))
3362 return true;
3364 break;
3366 default:
3367 gcc_unreachable ();
3369 return false;
3372 /* Evaluate a STATEMENT_LIST for side-effects. Handles various jump
3373 semantics, for switch, break, continue, and return. */
3375 static tree
3376 cxx_eval_statement_list (const constexpr_ctx *ctx, tree t,
3377 bool *non_constant_p, bool *overflow_p,
3378 tree *jump_target)
3380 tree_stmt_iterator i;
3381 tree_stmt_iterator default_label = tree_stmt_iterator();
3382 tree local_target;
3383 /* In a statement-expression we want to return the last value. */
3384 tree r = NULL_TREE;
3385 if (!jump_target)
3387 local_target = NULL_TREE;
3388 jump_target = &local_target;
3390 for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
3392 reenter:
3393 tree stmt = tsi_stmt (i);
3394 if (*jump_target)
3396 if (TREE_CODE (stmt) == STATEMENT_LIST)
3397 /* The label we want might be inside. */;
3398 else if (label_matches (jump_target, i, default_label))
3399 /* Found it. */
3400 *jump_target = NULL_TREE;
3401 else
3402 continue;
3404 r = cxx_eval_constant_expression (ctx, stmt, false,
3405 non_constant_p, overflow_p,
3406 jump_target);
3407 if (*non_constant_p)
3408 break;
3409 if (returns (jump_target) || breaks (jump_target))
3410 break;
3412 if (switches (jump_target) && !tsi_end_p (default_label))
3414 i = default_label;
3415 *jump_target = NULL_TREE;
3416 goto reenter;
3418 return r;
3421 /* Evaluate a LOOP_EXPR for side-effects. Handles break and return
3422 semantics; continue semantics are covered by cxx_eval_statement_list. */
3424 static tree
3425 cxx_eval_loop_expr (const constexpr_ctx *ctx, tree t,
3426 bool *non_constant_p, bool *overflow_p,
3427 tree *jump_target)
3429 constexpr_ctx new_ctx = *ctx;
3431 tree body = TREE_OPERAND (t, 0);
3434 hash_set<tree> save_exprs;
3435 new_ctx.save_exprs = &save_exprs;
3437 cxx_eval_constant_expression (&new_ctx, body, /*lval*/false,
3438 non_constant_p, overflow_p, jump_target);
3440 /* Forget saved values of SAVE_EXPRs. */
3441 for (hash_set<tree>::iterator iter = save_exprs.begin();
3442 iter != save_exprs.end(); ++iter)
3443 new_ctx.values->remove (*iter);
3445 while (!returns (jump_target) && !breaks (jump_target) && !*non_constant_p);
3447 if (breaks (jump_target))
3448 *jump_target = NULL_TREE;
3450 return NULL_TREE;
3453 /* Evaluate a SWITCH_EXPR for side-effects. Handles switch and break jump
3454 semantics. */
3456 static tree
3457 cxx_eval_switch_expr (const constexpr_ctx *ctx, tree t,
3458 bool *non_constant_p, bool *overflow_p,
3459 tree *jump_target)
3461 tree cond = TREE_OPERAND (t, 0);
3462 cond = cxx_eval_constant_expression (ctx, cond, false,
3463 non_constant_p, overflow_p);
3464 VERIFY_CONSTANT (cond);
3465 *jump_target = cond;
3467 tree body = TREE_OPERAND (t, 1);
3468 cxx_eval_statement_list (ctx, body,
3469 non_constant_p, overflow_p, jump_target);
3470 if (breaks (jump_target) || switches (jump_target))
3471 *jump_target = NULL_TREE;
3472 return NULL_TREE;
3475 /* Subroutine of cxx_eval_constant_expression.
3476 Attempt to reduce a POINTER_PLUS_EXPR expression T. */
3478 static tree
3479 cxx_eval_pointer_plus_expression (const constexpr_ctx *ctx, tree t,
3480 bool lval, bool *non_constant_p,
3481 bool *overflow_p)
3483 tree orig_type = TREE_TYPE (t);
3484 tree op00 = TREE_OPERAND (t, 0);
3485 tree op01 = TREE_OPERAND (t, 1);
3486 location_t loc = EXPR_LOCATION (t);
3488 op00 = cxx_eval_constant_expression (ctx, op00, lval,
3489 non_constant_p, overflow_p);
3491 STRIP_NOPS (op00);
3492 if (TREE_CODE (op00) != ADDR_EXPR)
3493 return NULL_TREE;
3495 op01 = cxx_eval_constant_expression (ctx, op01, lval,
3496 non_constant_p, overflow_p);
3497 op00 = TREE_OPERAND (op00, 0);
3499 /* &A[i] p+ j => &A[i + j] */
3500 if (TREE_CODE (op00) == ARRAY_REF
3501 && TREE_CODE (TREE_OPERAND (op00, 1)) == INTEGER_CST
3502 && TREE_CODE (op01) == INTEGER_CST
3503 && TYPE_SIZE_UNIT (TREE_TYPE (op00))
3504 && TREE_CODE (TYPE_SIZE_UNIT (TREE_TYPE (op00))) == INTEGER_CST)
3506 tree type = TREE_TYPE (op00);
3507 t = fold_convert_loc (loc, ssizetype, TREE_OPERAND (op00, 1));
3508 tree nelts = array_type_nelts_top (TREE_TYPE (TREE_OPERAND (op00, 0)));
3509 /* Don't fold an out-of-bound access. */
3510 if (!tree_int_cst_le (t, nelts))
3511 return NULL_TREE;
3512 op01 = cp_fold_convert (ssizetype, op01);
3513 /* Don't fold if op01 can't be divided exactly by TYPE_SIZE_UNIT.
3514 constexpr int A[1]; ... (char *)&A[0] + 1 */
3515 if (!integer_zerop (fold_build2_loc (loc, TRUNC_MOD_EXPR, sizetype,
3516 op01, TYPE_SIZE_UNIT (type))))
3517 return NULL_TREE;
3518 /* Make sure to treat the second operand of POINTER_PLUS_EXPR
3519 as signed. */
3520 op01 = fold_build2_loc (loc, EXACT_DIV_EXPR, ssizetype, op01,
3521 TYPE_SIZE_UNIT (type));
3522 t = size_binop_loc (loc, PLUS_EXPR, op01, t);
3523 t = build4_loc (loc, ARRAY_REF, type, TREE_OPERAND (op00, 0),
3524 t, NULL_TREE, NULL_TREE);
3525 t = cp_build_addr_expr (t, tf_warning_or_error);
3526 t = cp_fold_convert (orig_type, t);
3527 return cxx_eval_constant_expression (ctx, t, lval, non_constant_p,
3528 overflow_p);
3531 return NULL_TREE;
3534 /* Attempt to reduce the expression T to a constant value.
3535 On failure, issue diagnostic and return error_mark_node. */
3536 /* FIXME unify with c_fully_fold */
3537 /* FIXME overflow_p is too global */
3539 static tree
3540 cxx_eval_constant_expression (const constexpr_ctx *ctx, tree t,
3541 bool lval,
3542 bool *non_constant_p, bool *overflow_p,
3543 tree *jump_target)
3545 constexpr_ctx new_ctx;
3546 tree r = t;
3548 if (t == error_mark_node)
3550 *non_constant_p = true;
3551 return t;
3553 if (CONSTANT_CLASS_P (t))
3555 if (TREE_OVERFLOW (t))
3557 if (!ctx->quiet)
3558 permerror (input_location, "overflow in constant expression");
3559 if (!flag_permissive || ctx->quiet)
3560 *overflow_p = true;
3562 return t;
3565 switch (TREE_CODE (t))
3567 case RESULT_DECL:
3568 if (lval)
3569 return t;
3570 /* We ask for an rvalue for the RESULT_DECL when indirecting
3571 through an invisible reference, or in named return value
3572 optimization. */
3573 return (*ctx->values->get (t));
3575 case VAR_DECL:
3576 case CONST_DECL:
3577 /* We used to not check lval for CONST_DECL, but darwin.c uses
3578 CONST_DECL for aggregate constants. */
3579 if (lval)
3580 return t;
3581 if (ctx->strict)
3582 r = decl_really_constant_value (t);
3583 else
3584 r = decl_constant_value (t);
3585 if (TREE_CODE (r) == TARGET_EXPR
3586 && TREE_CODE (TARGET_EXPR_INITIAL (r)) == CONSTRUCTOR)
3587 r = TARGET_EXPR_INITIAL (r);
3588 if (VAR_P (r))
3589 if (tree *p = ctx->values->get (r))
3590 if (*p != NULL_TREE)
3591 r = *p;
3592 if (DECL_P (r))
3594 if (!ctx->quiet)
3595 non_const_var_error (r);
3596 *non_constant_p = true;
3598 break;
3600 case FUNCTION_DECL:
3601 case TEMPLATE_DECL:
3602 case LABEL_DECL:
3603 case LABEL_EXPR:
3604 case CASE_LABEL_EXPR:
3605 return t;
3607 case PARM_DECL:
3608 if (lval && TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
3609 /* glvalue use. */;
3610 else if (tree *p = ctx->values->get (r))
3611 r = *p;
3612 else if (lval)
3613 /* Defer in case this is only used for its type. */;
3614 else if (TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE)
3615 /* Defer, there's no lvalue->rvalue conversion. */;
3616 else if (is_empty_class (TREE_TYPE (t)))
3618 /* If the class is empty, we aren't actually loading anything. */
3619 r = build_constructor (TREE_TYPE (t), NULL);
3620 TREE_CONSTANT (r) = true;
3622 else
3624 if (!ctx->quiet)
3625 error ("%qE is not a constant expression", t);
3626 *non_constant_p = true;
3628 break;
3630 case CALL_EXPR:
3631 case AGGR_INIT_EXPR:
3632 r = cxx_eval_call_expression (ctx, t, lval,
3633 non_constant_p, overflow_p);
3634 break;
3636 case DECL_EXPR:
3638 r = DECL_EXPR_DECL (t);
3639 if (AGGREGATE_TYPE_P (TREE_TYPE (r))
3640 || VECTOR_TYPE_P (TREE_TYPE (r)))
3642 new_ctx = *ctx;
3643 new_ctx.object = r;
3644 new_ctx.ctor = build_constructor (TREE_TYPE (r), NULL);
3645 CONSTRUCTOR_NO_IMPLICIT_ZERO (new_ctx.ctor) = true;
3646 new_ctx.values->put (r, new_ctx.ctor);
3647 ctx = &new_ctx;
3650 if (tree init = DECL_INITIAL (r))
3652 init = cxx_eval_constant_expression (ctx, init,
3653 false,
3654 non_constant_p, overflow_p);
3655 /* Don't share a CONSTRUCTOR that might be changed. */
3656 init = unshare_constructor (init);
3657 ctx->values->put (r, init);
3659 else if (ctx == &new_ctx)
3660 /* We gave it a CONSTRUCTOR above. */;
3661 else
3662 ctx->values->put (r, NULL_TREE);
3664 break;
3666 case TARGET_EXPR:
3667 if (!literal_type_p (TREE_TYPE (t)))
3669 if (!ctx->quiet)
3671 error ("temporary of non-literal type %qT in a "
3672 "constant expression", TREE_TYPE (t));
3673 explain_non_literal_class (TREE_TYPE (t));
3675 *non_constant_p = true;
3676 break;
3678 if ((AGGREGATE_TYPE_P (TREE_TYPE (t)) || VECTOR_TYPE_P (TREE_TYPE (t))))
3680 /* We're being expanded without an explicit target, so start
3681 initializing a new object; expansion with an explicit target
3682 strips the TARGET_EXPR before we get here. */
3683 new_ctx = *ctx;
3684 new_ctx.ctor = build_constructor (TREE_TYPE (t), NULL);
3685 CONSTRUCTOR_NO_IMPLICIT_ZERO (new_ctx.ctor) = true;
3686 new_ctx.object = TARGET_EXPR_SLOT (t);
3687 ctx->values->put (new_ctx.object, new_ctx.ctor);
3688 ctx = &new_ctx;
3690 /* Pass false for 'lval' because this indicates
3691 initialization of a temporary. */
3692 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 1),
3693 false,
3694 non_constant_p, overflow_p);
3695 if (!*non_constant_p)
3696 /* Adjust the type of the result to the type of the temporary. */
3697 r = adjust_temp_type (TREE_TYPE (t), r);
3698 if (lval)
3700 tree slot = TARGET_EXPR_SLOT (t);
3701 r = unshare_constructor (r);
3702 ctx->values->put (slot, r);
3703 return slot;
3705 break;
3707 case INIT_EXPR:
3708 case MODIFY_EXPR:
3709 r = cxx_eval_store_expression (ctx, t, lval,
3710 non_constant_p, overflow_p);
3711 break;
3713 case SCOPE_REF:
3714 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 1),
3715 lval,
3716 non_constant_p, overflow_p);
3717 break;
3719 case RETURN_EXPR:
3720 if (TREE_OPERAND (t, 0) != NULL_TREE)
3721 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0),
3722 lval,
3723 non_constant_p, overflow_p);
3724 *jump_target = t;
3725 break;
3727 case SAVE_EXPR:
3728 /* Avoid evaluating a SAVE_EXPR more than once. */
3729 if (tree *p = ctx->values->get (t))
3730 r = *p;
3731 else
3733 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0), false,
3734 non_constant_p, overflow_p);
3735 ctx->values->put (t, r);
3736 if (ctx->save_exprs)
3737 ctx->save_exprs->add (t);
3739 break;
3741 case NON_LVALUE_EXPR:
3742 case TRY_CATCH_EXPR:
3743 case TRY_BLOCK:
3744 case CLEANUP_POINT_EXPR:
3745 case MUST_NOT_THROW_EXPR:
3746 case EXPR_STMT:
3747 case EH_SPEC_BLOCK:
3748 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0),
3749 lval,
3750 non_constant_p, overflow_p,
3751 jump_target);
3752 break;
3754 case TRY_FINALLY_EXPR:
3755 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0), lval,
3756 non_constant_p, overflow_p,
3757 jump_target);
3758 if (!*non_constant_p)
3759 /* Also evaluate the cleanup. */
3760 cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 1), true,
3761 non_constant_p, overflow_p,
3762 jump_target);
3763 break;
3765 /* These differ from cxx_eval_unary_expression in that this doesn't
3766 check for a constant operand or result; an address can be
3767 constant without its operand being, and vice versa. */
3768 case MEM_REF:
3769 case INDIRECT_REF:
3770 r = cxx_eval_indirect_ref (ctx, t, lval,
3771 non_constant_p, overflow_p);
3772 break;
3774 case ADDR_EXPR:
3776 tree oldop = TREE_OPERAND (t, 0);
3777 tree op = cxx_eval_constant_expression (ctx, oldop,
3778 /*lval*/true,
3779 non_constant_p, overflow_p);
3780 /* Don't VERIFY_CONSTANT here. */
3781 if (*non_constant_p)
3782 return t;
3783 gcc_checking_assert (TREE_CODE (op) != CONSTRUCTOR);
3784 /* This function does more aggressive folding than fold itself. */
3785 r = build_fold_addr_expr_with_type (op, TREE_TYPE (t));
3786 if (TREE_CODE (r) == ADDR_EXPR && TREE_OPERAND (r, 0) == oldop)
3787 return t;
3788 break;
3791 case REALPART_EXPR:
3792 case IMAGPART_EXPR:
3793 case CONJ_EXPR:
3794 case FIX_TRUNC_EXPR:
3795 case FLOAT_EXPR:
3796 case NEGATE_EXPR:
3797 case ABS_EXPR:
3798 case BIT_NOT_EXPR:
3799 case TRUTH_NOT_EXPR:
3800 case FIXED_CONVERT_EXPR:
3801 r = cxx_eval_unary_expression (ctx, t, lval,
3802 non_constant_p, overflow_p);
3803 break;
3805 case SIZEOF_EXPR:
3806 r = fold_sizeof_expr (t);
3807 VERIFY_CONSTANT (r);
3808 break;
3810 case COMPOUND_EXPR:
3812 /* check_return_expr sometimes wraps a TARGET_EXPR in a
3813 COMPOUND_EXPR; don't get confused. Also handle EMPTY_CLASS_EXPR
3814 introduced by build_call_a. */
3815 tree op0 = TREE_OPERAND (t, 0);
3816 tree op1 = TREE_OPERAND (t, 1);
3817 STRIP_NOPS (op1);
3818 if ((TREE_CODE (op0) == TARGET_EXPR && op1 == TARGET_EXPR_SLOT (op0))
3819 || TREE_CODE (op1) == EMPTY_CLASS_EXPR)
3820 r = cxx_eval_constant_expression (ctx, op0,
3821 lval, non_constant_p, overflow_p,
3822 jump_target);
3823 else
3825 /* Check that the LHS is constant and then discard it. */
3826 cxx_eval_constant_expression (ctx, op0,
3827 true, non_constant_p, overflow_p,
3828 jump_target);
3829 if (*non_constant_p)
3830 return t;
3831 op1 = TREE_OPERAND (t, 1);
3832 r = cxx_eval_constant_expression (ctx, op1,
3833 lval, non_constant_p, overflow_p,
3834 jump_target);
3837 break;
3839 case POINTER_PLUS_EXPR:
3840 r = cxx_eval_pointer_plus_expression (ctx, t, lval, non_constant_p,
3841 overflow_p);
3842 if (r)
3843 break;
3844 /* else fall through */
3846 case PLUS_EXPR:
3847 case MINUS_EXPR:
3848 case MULT_EXPR:
3849 case TRUNC_DIV_EXPR:
3850 case CEIL_DIV_EXPR:
3851 case FLOOR_DIV_EXPR:
3852 case ROUND_DIV_EXPR:
3853 case TRUNC_MOD_EXPR:
3854 case CEIL_MOD_EXPR:
3855 case ROUND_MOD_EXPR:
3856 case RDIV_EXPR:
3857 case EXACT_DIV_EXPR:
3858 case MIN_EXPR:
3859 case MAX_EXPR:
3860 case LSHIFT_EXPR:
3861 case RSHIFT_EXPR:
3862 case LROTATE_EXPR:
3863 case RROTATE_EXPR:
3864 case BIT_IOR_EXPR:
3865 case BIT_XOR_EXPR:
3866 case BIT_AND_EXPR:
3867 case TRUTH_XOR_EXPR:
3868 case LT_EXPR:
3869 case LE_EXPR:
3870 case GT_EXPR:
3871 case GE_EXPR:
3872 case EQ_EXPR:
3873 case NE_EXPR:
3874 case UNORDERED_EXPR:
3875 case ORDERED_EXPR:
3876 case UNLT_EXPR:
3877 case UNLE_EXPR:
3878 case UNGT_EXPR:
3879 case UNGE_EXPR:
3880 case UNEQ_EXPR:
3881 case LTGT_EXPR:
3882 case RANGE_EXPR:
3883 case COMPLEX_EXPR:
3884 r = cxx_eval_binary_expression (ctx, t, lval,
3885 non_constant_p, overflow_p);
3886 break;
3888 /* fold can introduce non-IF versions of these; still treat them as
3889 short-circuiting. */
3890 case TRUTH_AND_EXPR:
3891 case TRUTH_ANDIF_EXPR:
3892 r = cxx_eval_logical_expression (ctx, t, boolean_false_node,
3893 boolean_true_node,
3894 lval,
3895 non_constant_p, overflow_p);
3896 break;
3898 case TRUTH_OR_EXPR:
3899 case TRUTH_ORIF_EXPR:
3900 r = cxx_eval_logical_expression (ctx, t, boolean_true_node,
3901 boolean_false_node,
3902 lval,
3903 non_constant_p, overflow_p);
3904 break;
3906 case ARRAY_REF:
3907 r = cxx_eval_array_reference (ctx, t, lval,
3908 non_constant_p, overflow_p);
3909 break;
3911 case COMPONENT_REF:
3912 if (is_overloaded_fn (t))
3914 /* We can only get here in checking mode via
3915 build_non_dependent_expr, because any expression that
3916 calls or takes the address of the function will have
3917 pulled a FUNCTION_DECL out of the COMPONENT_REF. */
3918 gcc_checking_assert (ctx->quiet || errorcount);
3919 *non_constant_p = true;
3920 return t;
3922 r = cxx_eval_component_reference (ctx, t, lval,
3923 non_constant_p, overflow_p);
3924 break;
3926 case BIT_FIELD_REF:
3927 r = cxx_eval_bit_field_ref (ctx, t, lval,
3928 non_constant_p, overflow_p);
3929 break;
3931 case COND_EXPR:
3932 case VEC_COND_EXPR:
3933 r = cxx_eval_conditional_expression (ctx, t, lval,
3934 non_constant_p, overflow_p,
3935 jump_target);
3936 break;
3938 case CONSTRUCTOR:
3939 if (TREE_CONSTANT (t))
3941 /* Don't re-process a constant CONSTRUCTOR, but do fold it to
3942 VECTOR_CST if applicable. */
3943 /* FIXME after GCC 6 branches, make the verify unconditional. */
3944 if (CHECKING_P)
3945 verify_constructor_flags (t);
3946 else
3947 recompute_constructor_flags (t);
3948 if (TREE_CONSTANT (t))
3949 return fold (t);
3951 r = cxx_eval_bare_aggregate (ctx, t, lval,
3952 non_constant_p, overflow_p);
3953 break;
3955 case VEC_INIT_EXPR:
3956 /* We can get this in a defaulted constructor for a class with a
3957 non-static data member of array type. Either the initializer will
3958 be NULL, meaning default-initialization, or it will be an lvalue
3959 or xvalue of the same type, meaning direct-initialization from the
3960 corresponding member. */
3961 r = cxx_eval_vec_init (ctx, t, lval,
3962 non_constant_p, overflow_p);
3963 break;
3965 case FMA_EXPR:
3966 case VEC_PERM_EXPR:
3967 r = cxx_eval_trinary_expression (ctx, t, lval,
3968 non_constant_p, overflow_p);
3969 break;
3971 case CONVERT_EXPR:
3972 case VIEW_CONVERT_EXPR:
3973 case NOP_EXPR:
3974 case UNARY_PLUS_EXPR:
3976 enum tree_code tcode = TREE_CODE (t);
3977 tree oldop = TREE_OPERAND (t, 0);
3979 tree op = cxx_eval_constant_expression (ctx, oldop,
3980 lval,
3981 non_constant_p, overflow_p);
3982 if (*non_constant_p)
3983 return t;
3984 tree type = TREE_TYPE (t);
3985 if (TREE_CODE (op) == PTRMEM_CST
3986 && !TYPE_PTRMEM_P (type))
3987 op = cplus_expand_constant (op);
3988 if (TREE_CODE (op) == PTRMEM_CST && tcode == NOP_EXPR)
3990 if (same_type_ignoring_top_level_qualifiers_p (type,
3991 TREE_TYPE (op)))
3992 STRIP_NOPS (t);
3993 else
3995 if (!ctx->quiet)
3996 error_at (EXPR_LOC_OR_LOC (t, input_location),
3997 "a reinterpret_cast is not a constant-expression");
3998 *non_constant_p = true;
3999 return t;
4002 if (POINTER_TYPE_P (type)
4003 && TREE_CODE (op) == INTEGER_CST
4004 && !integer_zerop (op))
4006 if (!ctx->quiet)
4007 error_at (EXPR_LOC_OR_LOC (t, input_location),
4008 "reinterpret_cast from integer to pointer");
4009 *non_constant_p = true;
4010 return t;
4012 if (op == oldop && tcode != UNARY_PLUS_EXPR)
4013 /* We didn't fold at the top so we could check for ptr-int
4014 conversion. */
4015 return fold (t);
4016 if (tcode == UNARY_PLUS_EXPR)
4017 r = fold_convert (TREE_TYPE (t), op);
4018 else
4019 r = fold_build1 (tcode, type, op);
4020 /* Conversion of an out-of-range value has implementation-defined
4021 behavior; the language considers it different from arithmetic
4022 overflow, which is undefined. */
4023 if (TREE_OVERFLOW_P (r) && !TREE_OVERFLOW_P (op))
4024 TREE_OVERFLOW (r) = false;
4026 break;
4028 case EMPTY_CLASS_EXPR:
4029 /* This is good enough for a function argument that might not get
4030 used, and they can't do anything with it, so just return it. */
4031 return t;
4033 case STATEMENT_LIST:
4034 new_ctx = *ctx;
4035 new_ctx.ctor = new_ctx.object = NULL_TREE;
4036 return cxx_eval_statement_list (&new_ctx, t,
4037 non_constant_p, overflow_p, jump_target);
4039 case BIND_EXPR:
4040 return cxx_eval_constant_expression (ctx, BIND_EXPR_BODY (t),
4041 lval,
4042 non_constant_p, overflow_p,
4043 jump_target);
4045 case PREINCREMENT_EXPR:
4046 case POSTINCREMENT_EXPR:
4047 case PREDECREMENT_EXPR:
4048 case POSTDECREMENT_EXPR:
4049 return cxx_eval_increment_expression (ctx, t,
4050 lval, non_constant_p, overflow_p);
4052 case LAMBDA_EXPR:
4053 case NEW_EXPR:
4054 case VEC_NEW_EXPR:
4055 case DELETE_EXPR:
4056 case VEC_DELETE_EXPR:
4057 case THROW_EXPR:
4058 case MODOP_EXPR:
4059 /* GCC internal stuff. */
4060 case VA_ARG_EXPR:
4061 case OBJ_TYPE_REF:
4062 case WITH_CLEANUP_EXPR:
4063 case NON_DEPENDENT_EXPR:
4064 case BASELINK:
4065 case OFFSET_REF:
4066 if (!ctx->quiet)
4067 error_at (EXPR_LOC_OR_LOC (t, input_location),
4068 "expression %qE is not a constant-expression", t);
4069 *non_constant_p = true;
4070 break;
4072 case PLACEHOLDER_EXPR:
4073 if (!ctx || !ctx->ctor || (lval && !ctx->object)
4074 || !(same_type_ignoring_top_level_qualifiers_p
4075 (TREE_TYPE (t), TREE_TYPE (ctx->ctor))))
4077 /* A placeholder without a referent. We can get here when
4078 checking whether NSDMIs are noexcept, or in massage_init_elt;
4079 just say it's non-constant for now. */
4080 gcc_assert (ctx->quiet);
4081 *non_constant_p = true;
4082 break;
4084 else
4086 /* Use of the value or address of the current object. We could
4087 use ctx->object unconditionally, but using ctx->ctor when we
4088 can is a minor optimization. */
4089 tree ctor = lval ? ctx->object : ctx->ctor;
4090 return cxx_eval_constant_expression
4091 (ctx, ctor, lval,
4092 non_constant_p, overflow_p);
4094 break;
4096 case EXIT_EXPR:
4098 tree cond = TREE_OPERAND (t, 0);
4099 cond = cxx_eval_constant_expression (ctx, cond, /*lval*/false,
4100 non_constant_p, overflow_p);
4101 VERIFY_CONSTANT (cond);
4102 if (integer_nonzerop (cond))
4103 *jump_target = t;
4105 break;
4107 case GOTO_EXPR:
4108 *jump_target = TREE_OPERAND (t, 0);
4109 gcc_assert (breaks (jump_target) || continues (jump_target));
4110 break;
4112 case LOOP_EXPR:
4113 cxx_eval_loop_expr (ctx, t,
4114 non_constant_p, overflow_p, jump_target);
4115 break;
4117 case SWITCH_EXPR:
4118 cxx_eval_switch_expr (ctx, t,
4119 non_constant_p, overflow_p, jump_target);
4120 break;
4122 case REQUIRES_EXPR:
4123 /* It's possible to get a requires-expression in a constant
4124 expression. For example:
4126 template<typename T> concept bool C() {
4127 return requires (T t) { t; };
4130 template<typename T> requires !C<T>() void f(T);
4132 Normalization leaves f with the associated constraint
4133 '!requires (T t) { ... }' which is not transformed into
4134 a constraint. */
4135 if (!processing_template_decl)
4136 return evaluate_constraint_expression (t, NULL_TREE);
4137 else
4138 *non_constant_p = true;
4139 return t;
4141 default:
4142 if (STATEMENT_CODE_P (TREE_CODE (t)))
4144 /* This function doesn't know how to deal with pre-genericize
4145 statements; this can only happen with statement-expressions,
4146 so for now just fail. */
4147 if (!ctx->quiet)
4148 error_at (EXPR_LOCATION (t),
4149 "statement is not a constant-expression");
4151 else
4152 internal_error ("unexpected expression %qE of kind %s", t,
4153 get_tree_code_name (TREE_CODE (t)));
4154 *non_constant_p = true;
4155 break;
4158 if (r == error_mark_node)
4159 *non_constant_p = true;
4161 if (*non_constant_p)
4162 return t;
4163 else
4164 return r;
4167 static tree
4168 cxx_eval_outermost_constant_expr (tree t, bool allow_non_constant,
4169 bool strict = true, tree object = NULL_TREE)
4171 bool non_constant_p = false;
4172 bool overflow_p = false;
4173 hash_map<tree,tree> map;
4175 constexpr_ctx ctx = { NULL, &map, NULL, NULL, NULL,
4176 allow_non_constant, strict };
4178 tree type = initialized_type (t);
4179 tree r = t;
4180 if (AGGREGATE_TYPE_P (type) || VECTOR_TYPE_P (type))
4182 /* In C++14 an NSDMI can participate in aggregate initialization,
4183 and can refer to the address of the object being initialized, so
4184 we need to pass in the relevant VAR_DECL if we want to do the
4185 evaluation in a single pass. The evaluation will dynamically
4186 update ctx.values for the VAR_DECL. We use the same strategy
4187 for C++11 constexpr constructors that refer to the object being
4188 initialized. */
4189 ctx.ctor = build_constructor (type, NULL);
4190 CONSTRUCTOR_NO_IMPLICIT_ZERO (ctx.ctor) = true;
4191 if (!object)
4193 if (TREE_CODE (t) == TARGET_EXPR)
4194 object = TARGET_EXPR_SLOT (t);
4195 else if (TREE_CODE (t) == AGGR_INIT_EXPR)
4196 object = AGGR_INIT_EXPR_SLOT (t);
4198 ctx.object = object;
4199 if (object)
4200 gcc_assert (same_type_ignoring_top_level_qualifiers_p
4201 (type, TREE_TYPE (object)));
4202 if (object && DECL_P (object))
4203 map.put (object, ctx.ctor);
4204 if (TREE_CODE (r) == TARGET_EXPR)
4205 /* Avoid creating another CONSTRUCTOR when we expand the
4206 TARGET_EXPR. */
4207 r = TARGET_EXPR_INITIAL (r);
4210 r = cxx_eval_constant_expression (&ctx, r,
4211 false, &non_constant_p, &overflow_p);
4213 verify_constant (r, allow_non_constant, &non_constant_p, &overflow_p);
4215 /* Mutable logic is a bit tricky: we want to allow initialization of
4216 constexpr variables with mutable members, but we can't copy those
4217 members to another constexpr variable. */
4218 if (TREE_CODE (r) == CONSTRUCTOR
4219 && CONSTRUCTOR_MUTABLE_POISON (r))
4221 if (!allow_non_constant)
4222 error ("%qE is not a constant expression because it refers to "
4223 "mutable subobjects of %qT", t, type);
4224 non_constant_p = true;
4227 /* Technically we should check this for all subexpressions, but that
4228 runs into problems with our internal representation of pointer
4229 subtraction and the 5.19 rules are still in flux. */
4230 if (CONVERT_EXPR_CODE_P (TREE_CODE (r))
4231 && ARITHMETIC_TYPE_P (TREE_TYPE (r))
4232 && TREE_CODE (TREE_OPERAND (r, 0)) == ADDR_EXPR)
4234 if (!allow_non_constant)
4235 error ("conversion from pointer type %qT "
4236 "to arithmetic type %qT in a constant-expression",
4237 TREE_TYPE (TREE_OPERAND (r, 0)), TREE_TYPE (r));
4238 non_constant_p = true;
4241 if (!non_constant_p && overflow_p)
4242 non_constant_p = true;
4244 /* Unshare the result unless it's a CONSTRUCTOR in which case it's already
4245 unshared. */
4246 bool should_unshare = true;
4247 if (r == t || TREE_CODE (r) == CONSTRUCTOR)
4248 should_unshare = false;
4250 if (non_constant_p && !allow_non_constant)
4251 return error_mark_node;
4252 else if (non_constant_p && TREE_CONSTANT (r))
4254 /* This isn't actually constant, so unset TREE_CONSTANT. */
4255 if (EXPR_P (r))
4256 r = copy_node (r);
4257 else if (TREE_CODE (r) == CONSTRUCTOR)
4258 r = build1 (VIEW_CONVERT_EXPR, TREE_TYPE (r), r);
4259 else
4260 r = build_nop (TREE_TYPE (r), r);
4261 TREE_CONSTANT (r) = false;
4263 else if (non_constant_p || r == t)
4264 return t;
4266 if (should_unshare)
4267 r = unshare_expr (r);
4269 if (TREE_CODE (r) == CONSTRUCTOR && CLASS_TYPE_P (TREE_TYPE (r)))
4271 if (TREE_CODE (t) == TARGET_EXPR
4272 && TARGET_EXPR_INITIAL (t) == r)
4273 return t;
4274 else
4276 r = get_target_expr (r);
4277 TREE_CONSTANT (r) = true;
4278 return r;
4281 else
4282 return r;
4285 /* Returns true if T is a valid subexpression of a constant expression,
4286 even if it isn't itself a constant expression. */
4288 bool
4289 is_sub_constant_expr (tree t)
4291 bool non_constant_p = false;
4292 bool overflow_p = false;
4293 hash_map <tree, tree> map;
4295 constexpr_ctx ctx = { NULL, &map, NULL, NULL, NULL, true, true };
4297 cxx_eval_constant_expression (&ctx, t, false, &non_constant_p,
4298 &overflow_p);
4299 return !non_constant_p && !overflow_p;
4302 /* If T represents a constant expression returns its reduced value.
4303 Otherwise return error_mark_node. If T is dependent, then
4304 return NULL. */
4306 tree
4307 cxx_constant_value (tree t, tree decl)
4309 return cxx_eval_outermost_constant_expr (t, false, true, decl);
4312 /* Helper routine for fold_simple function. Either return simplified
4313 expression T, otherwise NULL_TREE.
4314 In contrast to cp_fully_fold, and to maybe_constant_value, we try to fold
4315 even if we are within template-declaration. So be careful on call, as in
4316 such case types can be undefined. */
4318 static tree
4319 fold_simple_1 (tree t)
4321 tree op1;
4322 enum tree_code code = TREE_CODE (t);
4324 switch (code)
4326 case INTEGER_CST:
4327 case REAL_CST:
4328 case VECTOR_CST:
4329 case FIXED_CST:
4330 case COMPLEX_CST:
4331 return t;
4333 case SIZEOF_EXPR:
4334 return fold_sizeof_expr (t);
4336 case ABS_EXPR:
4337 case CONJ_EXPR:
4338 case REALPART_EXPR:
4339 case IMAGPART_EXPR:
4340 case NEGATE_EXPR:
4341 case BIT_NOT_EXPR:
4342 case TRUTH_NOT_EXPR:
4343 case NOP_EXPR:
4344 case VIEW_CONVERT_EXPR:
4345 case CONVERT_EXPR:
4346 case FLOAT_EXPR:
4347 case FIX_TRUNC_EXPR:
4348 case FIXED_CONVERT_EXPR:
4349 case ADDR_SPACE_CONVERT_EXPR:
4351 op1 = TREE_OPERAND (t, 0);
4353 t = const_unop (code, TREE_TYPE (t), op1);
4354 if (!t)
4355 return NULL_TREE;
4357 if (CONVERT_EXPR_CODE_P (code)
4358 && TREE_OVERFLOW_P (t) && !TREE_OVERFLOW_P (op1))
4359 TREE_OVERFLOW (t) = false;
4360 return t;
4362 default:
4363 return NULL_TREE;
4367 /* If T is a simple constant expression, returns its simplified value.
4368 Otherwise returns T. In contrast to maybe_constant_value do we
4369 simplify only few operations on constant-expressions, and we don't
4370 try to simplify constexpressions. */
4372 tree
4373 fold_simple (tree t)
4375 tree r = NULL_TREE;
4376 if (processing_template_decl)
4377 return t;
4379 r = fold_simple_1 (t);
4380 if (!r)
4381 r = t;
4383 return r;
4386 /* If T is a constant expression, returns its reduced value.
4387 Otherwise, if T does not have TREE_CONSTANT set, returns T.
4388 Otherwise, returns a version of T without TREE_CONSTANT. */
4390 static tree
4391 maybe_constant_value_1 (tree t, tree decl)
4393 tree r;
4395 if (!potential_nondependent_constant_expression (t))
4397 if (TREE_OVERFLOW_P (t))
4399 t = build_nop (TREE_TYPE (t), t);
4400 TREE_CONSTANT (t) = false;
4402 return t;
4405 r = cxx_eval_outermost_constant_expr (t, true, true, decl);
4406 gcc_checking_assert (r == t
4407 || CONVERT_EXPR_P (t)
4408 || TREE_CODE (t) == VIEW_CONVERT_EXPR
4409 || (TREE_CONSTANT (t) && !TREE_CONSTANT (r))
4410 || !cp_tree_equal (r, t));
4411 return r;
4414 static GTY((deletable)) hash_map<tree, tree> *cv_cache;
4416 /* If T is a constant expression, returns its reduced value.
4417 Otherwise, if T does not have TREE_CONSTANT set, returns T.
4418 Otherwise, returns a version of T without TREE_CONSTANT. */
4420 tree
4421 maybe_constant_value (tree t, tree decl)
4423 if (cv_cache == NULL)
4424 cv_cache = hash_map<tree, tree>::create_ggc (101);
4426 if (tree *cached = cv_cache->get (t))
4427 return *cached;
4429 tree ret = maybe_constant_value_1 (t, decl);
4430 cv_cache->put (t, ret);
4431 return ret;
4434 /* Dispose of the whole CV_CACHE. */
4436 static void
4437 clear_cv_cache (void)
4439 if (cv_cache != NULL)
4440 cv_cache->empty ();
4443 /* Dispose of the whole CV_CACHE and FOLD_CACHE. */
4445 void
4446 clear_cv_and_fold_caches (void)
4448 clear_cv_cache ();
4449 clear_fold_cache ();
4452 /* Like maybe_constant_value but first fully instantiate the argument.
4454 Note: this is equivalent to instantiate_non_dependent_expr_sfinae
4455 (t, tf_none) followed by maybe_constant_value but is more efficient,
4456 because calls instantiation_dependent_expression_p and
4457 potential_constant_expression at most once. */
4459 tree
4460 fold_non_dependent_expr (tree t)
4462 if (t == NULL_TREE)
4463 return NULL_TREE;
4465 /* If we're in a template, but T isn't value dependent, simplify
4466 it. We're supposed to treat:
4468 template <typename T> void f(T[1 + 1]);
4469 template <typename T> void f(T[2]);
4471 as two declarations of the same function, for example. */
4472 if (processing_template_decl)
4474 if (potential_nondependent_constant_expression (t))
4476 processing_template_decl_sentinel s;
4477 t = instantiate_non_dependent_expr_internal (t, tf_none);
4479 if (type_unknown_p (t)
4480 || BRACE_ENCLOSED_INITIALIZER_P (t))
4482 if (TREE_OVERFLOW_P (t))
4484 t = build_nop (TREE_TYPE (t), t);
4485 TREE_CONSTANT (t) = false;
4487 return t;
4490 tree r = cxx_eval_outermost_constant_expr (t, true, true, NULL_TREE);
4491 /* cp_tree_equal looks through NOPs, so allow them. */
4492 gcc_checking_assert (r == t
4493 || CONVERT_EXPR_P (t)
4494 || TREE_CODE (t) == VIEW_CONVERT_EXPR
4495 || (TREE_CONSTANT (t) && !TREE_CONSTANT (r))
4496 || !cp_tree_equal (r, t));
4497 return r;
4499 else if (TREE_OVERFLOW_P (t))
4501 t = build_nop (TREE_TYPE (t), t);
4502 TREE_CONSTANT (t) = false;
4504 return t;
4507 return maybe_constant_value (t);
4510 /* Like maybe_constant_value, but returns a CONSTRUCTOR directly, rather
4511 than wrapped in a TARGET_EXPR. */
4513 tree
4514 maybe_constant_init (tree t, tree decl)
4516 if (!t)
4517 return t;
4518 if (TREE_CODE (t) == EXPR_STMT)
4519 t = TREE_OPERAND (t, 0);
4520 if (TREE_CODE (t) == CONVERT_EXPR
4521 && VOID_TYPE_P (TREE_TYPE (t)))
4522 t = TREE_OPERAND (t, 0);
4523 if (TREE_CODE (t) == INIT_EXPR)
4524 t = TREE_OPERAND (t, 1);
4525 if (!potential_nondependent_static_init_expression (t))
4526 /* Don't try to evaluate it. */;
4527 else
4528 t = cxx_eval_outermost_constant_expr (t, true, false, decl);
4529 if (TREE_CODE (t) == TARGET_EXPR)
4531 tree init = TARGET_EXPR_INITIAL (t);
4532 if (TREE_CODE (init) == CONSTRUCTOR)
4533 t = init;
4535 return t;
4538 #if 0
4539 /* FIXME see ADDR_EXPR section in potential_constant_expression_1. */
4540 /* Return true if the object referred to by REF has automatic or thread
4541 local storage. */
4543 enum { ck_ok, ck_bad, ck_unknown };
4544 static int
4545 check_automatic_or_tls (tree ref)
4547 machine_mode mode;
4548 HOST_WIDE_INT bitsize, bitpos;
4549 tree offset;
4550 int volatilep = 0, unsignedp = 0;
4551 tree decl = get_inner_reference (ref, &bitsize, &bitpos, &offset,
4552 &mode, &unsignedp, &volatilep, false);
4553 duration_kind dk;
4555 /* If there isn't a decl in the middle, we don't know the linkage here,
4556 and this isn't a constant expression anyway. */
4557 if (!DECL_P (decl))
4558 return ck_unknown;
4559 dk = decl_storage_duration (decl);
4560 return (dk == dk_auto || dk == dk_thread) ? ck_bad : ck_ok;
4562 #endif
4564 /* Return true if T denotes a potentially constant expression. Issue
4565 diagnostic as appropriate under control of FLAGS. If WANT_RVAL is true,
4566 an lvalue-rvalue conversion is implied.
4568 C++0x [expr.const] used to say
4570 6 An expression is a potential constant expression if it is
4571 a constant expression where all occurrences of function
4572 parameters are replaced by arbitrary constant expressions
4573 of the appropriate type.
4575 2 A conditional expression is a constant expression unless it
4576 involves one of the following as a potentially evaluated
4577 subexpression (3.2), but subexpressions of logical AND (5.14),
4578 logical OR (5.15), and conditional (5.16) operations that are
4579 not evaluated are not considered. */
4581 static bool
4582 potential_constant_expression_1 (tree t, bool want_rval, bool strict,
4583 tsubst_flags_t flags)
4585 #define RECUR(T,RV) potential_constant_expression_1 ((T), (RV), strict, flags)
4586 enum { any = false, rval = true };
4587 int i;
4588 tree tmp;
4590 if (t == error_mark_node)
4591 return false;
4592 if (t == NULL_TREE)
4593 return true;
4594 if (TREE_THIS_VOLATILE (t) && !DECL_P (t))
4596 if (flags & tf_error)
4597 error ("expression %qE has side-effects", t);
4598 return false;
4600 if (CONSTANT_CLASS_P (t))
4601 return true;
4603 switch (TREE_CODE (t))
4605 case FUNCTION_DECL:
4606 case BASELINK:
4607 case TEMPLATE_DECL:
4608 case OVERLOAD:
4609 case TEMPLATE_ID_EXPR:
4610 case LABEL_DECL:
4611 case LABEL_EXPR:
4612 case CASE_LABEL_EXPR:
4613 case CONST_DECL:
4614 case SIZEOF_EXPR:
4615 case ALIGNOF_EXPR:
4616 case OFFSETOF_EXPR:
4617 case NOEXCEPT_EXPR:
4618 case TEMPLATE_PARM_INDEX:
4619 case TRAIT_EXPR:
4620 case IDENTIFIER_NODE:
4621 case USERDEF_LITERAL:
4622 /* We can see a FIELD_DECL in a pointer-to-member expression. */
4623 case FIELD_DECL:
4624 case PARM_DECL:
4625 case RESULT_DECL:
4626 case USING_DECL:
4627 case USING_STMT:
4628 case PLACEHOLDER_EXPR:
4629 case BREAK_STMT:
4630 case CONTINUE_STMT:
4631 case REQUIRES_EXPR:
4632 return true;
4634 case AGGR_INIT_EXPR:
4635 case CALL_EXPR:
4636 /* -- an invocation of a function other than a constexpr function
4637 or a constexpr constructor. */
4639 tree fun = get_function_named_in_call (t);
4640 const int nargs = call_expr_nargs (t);
4641 i = 0;
4643 if (fun == NULL_TREE)
4645 /* Reset to allow the function to continue past the end
4646 of the block below. Otherwise return early. */
4647 bool bail = true;
4649 if (TREE_CODE (t) == CALL_EXPR
4650 && CALL_EXPR_FN (t) == NULL_TREE)
4651 switch (CALL_EXPR_IFN (t))
4653 /* These should be ignored, they are optimized away from
4654 constexpr functions. */
4655 case IFN_UBSAN_NULL:
4656 case IFN_UBSAN_BOUNDS:
4657 case IFN_UBSAN_VPTR:
4658 return true;
4660 case IFN_ADD_OVERFLOW:
4661 case IFN_SUB_OVERFLOW:
4662 case IFN_MUL_OVERFLOW:
4663 bail = false;
4665 default:
4666 break;
4669 if (bail)
4671 /* fold_call_expr can't do anything with IFN calls. */
4672 if (flags & tf_error)
4673 error_at (EXPR_LOC_OR_LOC (t, input_location),
4674 "call to internal function %qE", t);
4675 return false;
4679 if (fun && is_overloaded_fn (fun))
4681 if (TREE_CODE (fun) == FUNCTION_DECL)
4683 if (builtin_valid_in_constant_expr_p (fun))
4684 return true;
4685 if (!DECL_DECLARED_CONSTEXPR_P (fun)
4686 /* Allow any built-in function; if the expansion
4687 isn't constant, we'll deal with that then. */
4688 && !is_builtin_fn (fun))
4690 if (flags & tf_error)
4692 error_at (EXPR_LOC_OR_LOC (t, input_location),
4693 "call to non-constexpr function %qD", fun);
4694 explain_invalid_constexpr_fn (fun);
4696 return false;
4698 /* A call to a non-static member function takes the address
4699 of the object as the first argument. But in a constant
4700 expression the address will be folded away, so look
4701 through it now. */
4702 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fun)
4703 && !DECL_CONSTRUCTOR_P (fun))
4705 tree x = get_nth_callarg (t, 0);
4706 if (is_this_parameter (x))
4707 return true;
4708 else if (!RECUR (x, rval))
4709 return false;
4710 i = 1;
4713 else
4715 if (!RECUR (fun, true))
4716 return false;
4717 fun = get_first_fn (fun);
4719 /* Skip initial arguments to base constructors. */
4720 if (DECL_BASE_CONSTRUCTOR_P (fun))
4721 i = num_artificial_parms_for (fun);
4722 fun = DECL_ORIGIN (fun);
4724 else if (fun)
4726 if (RECUR (fun, rval))
4727 /* Might end up being a constant function pointer. */;
4728 else
4729 return false;
4731 for (; i < nargs; ++i)
4733 tree x = get_nth_callarg (t, i);
4734 /* In a template, reference arguments haven't been converted to
4735 REFERENCE_TYPE and we might not even know if the parameter
4736 is a reference, so accept lvalue constants too. */
4737 bool rv = processing_template_decl ? any : rval;
4738 if (!RECUR (x, rv))
4739 return false;
4741 return true;
4744 case NON_LVALUE_EXPR:
4745 /* -- an lvalue-to-rvalue conversion (4.1) unless it is applied to
4746 -- an lvalue of integral type that refers to a non-volatile
4747 const variable or static data member initialized with
4748 constant expressions, or
4750 -- an lvalue of literal type that refers to non-volatile
4751 object defined with constexpr, or that refers to a
4752 sub-object of such an object; */
4753 return RECUR (TREE_OPERAND (t, 0), rval);
4755 case VAR_DECL:
4756 if (want_rval
4757 && !decl_constant_var_p (t)
4758 && (strict
4759 || !CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (t))
4760 || !DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t))
4761 && !var_in_constexpr_fn (t)
4762 && !type_dependent_expression_p (t))
4764 if (flags & tf_error)
4765 non_const_var_error (t);
4766 return false;
4768 return true;
4770 case NOP_EXPR:
4771 case CONVERT_EXPR:
4772 case VIEW_CONVERT_EXPR:
4773 /* -- a reinterpret_cast. FIXME not implemented, and this rule
4774 may change to something more specific to type-punning (DR 1312). */
4776 tree from = TREE_OPERAND (t, 0);
4777 if (POINTER_TYPE_P (TREE_TYPE (t))
4778 && TREE_CODE (from) == INTEGER_CST
4779 && !integer_zerop (from))
4781 if (flags & tf_error)
4782 error_at (EXPR_LOC_OR_LOC (t, input_location),
4783 "reinterpret_cast from integer to pointer");
4784 return false;
4786 return (RECUR (from, TREE_CODE (t) != VIEW_CONVERT_EXPR));
4789 case ADDR_EXPR:
4790 /* -- a unary operator & that is applied to an lvalue that
4791 designates an object with thread or automatic storage
4792 duration; */
4793 t = TREE_OPERAND (t, 0);
4795 if (TREE_CODE (t) == OFFSET_REF && PTRMEM_OK_P (t))
4796 /* A pointer-to-member constant. */
4797 return true;
4799 #if 0
4800 /* FIXME adjust when issue 1197 is fully resolved. For now don't do
4801 any checking here, as we might dereference the pointer later. If
4802 we remove this code, also remove check_automatic_or_tls. */
4803 i = check_automatic_or_tls (t);
4804 if (i == ck_ok)
4805 return true;
4806 if (i == ck_bad)
4808 if (flags & tf_error)
4809 error ("address-of an object %qE with thread local or "
4810 "automatic storage is not a constant expression", t);
4811 return false;
4813 #endif
4814 return RECUR (t, any);
4816 case COMPONENT_REF:
4817 case BIT_FIELD_REF:
4818 case ARROW_EXPR:
4819 case OFFSET_REF:
4820 /* -- a class member access unless its postfix-expression is
4821 of literal type or of pointer to literal type. */
4822 /* This test would be redundant, as it follows from the
4823 postfix-expression being a potential constant expression. */
4824 if (type_unknown_p (t))
4825 return true;
4826 return RECUR (TREE_OPERAND (t, 0), want_rval);
4828 case EXPR_PACK_EXPANSION:
4829 return RECUR (PACK_EXPANSION_PATTERN (t), want_rval);
4831 case INDIRECT_REF:
4833 tree x = TREE_OPERAND (t, 0);
4834 STRIP_NOPS (x);
4835 if (is_this_parameter (x))
4837 if (DECL_CONTEXT (x)
4838 && !DECL_DECLARED_CONSTEXPR_P (DECL_CONTEXT (x)))
4840 if (flags & tf_error)
4841 error ("use of %<this%> in a constant expression");
4842 return false;
4844 return true;
4846 return RECUR (x, rval);
4849 case STATEMENT_LIST:
4851 tree_stmt_iterator i;
4852 for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
4854 if (!RECUR (tsi_stmt (i), any))
4855 return false;
4857 return true;
4859 break;
4861 case MODIFY_EXPR:
4862 if (cxx_dialect < cxx14)
4863 goto fail;
4864 if (!RECUR (TREE_OPERAND (t, 0), any))
4865 return false;
4866 if (!RECUR (TREE_OPERAND (t, 1), rval))
4867 return false;
4868 return true;
4870 case MODOP_EXPR:
4871 if (cxx_dialect < cxx14)
4872 goto fail;
4873 if (!RECUR (TREE_OPERAND (t, 0), rval))
4874 return false;
4875 if (!RECUR (TREE_OPERAND (t, 2), rval))
4876 return false;
4877 return true;
4879 case DO_STMT:
4880 if (!RECUR (DO_COND (t), rval))
4881 return false;
4882 if (!RECUR (DO_BODY (t), any))
4883 return false;
4884 return true;
4886 case FOR_STMT:
4887 if (!RECUR (FOR_INIT_STMT (t), any))
4888 return false;
4889 if (!RECUR (FOR_COND (t), rval))
4890 return false;
4891 if (!RECUR (FOR_EXPR (t), any))
4892 return false;
4893 if (!RECUR (FOR_BODY (t), any))
4894 return false;
4895 return true;
4897 case WHILE_STMT:
4898 if (!RECUR (WHILE_COND (t), rval))
4899 return false;
4900 if (!RECUR (WHILE_BODY (t), any))
4901 return false;
4902 return true;
4904 case SWITCH_STMT:
4905 if (!RECUR (SWITCH_STMT_COND (t), rval))
4906 return false;
4907 /* FIXME we don't check SWITCH_STMT_BODY currently, because even
4908 unreachable labels would be checked. */
4909 return true;
4911 case STMT_EXPR:
4912 return RECUR (STMT_EXPR_STMT (t), rval);
4914 case LAMBDA_EXPR:
4915 case DYNAMIC_CAST_EXPR:
4916 case PSEUDO_DTOR_EXPR:
4917 case NEW_EXPR:
4918 case VEC_NEW_EXPR:
4919 case DELETE_EXPR:
4920 case VEC_DELETE_EXPR:
4921 case THROW_EXPR:
4922 case OMP_ATOMIC:
4923 case OMP_ATOMIC_READ:
4924 case OMP_ATOMIC_CAPTURE_OLD:
4925 case OMP_ATOMIC_CAPTURE_NEW:
4926 /* GCC internal stuff. */
4927 case VA_ARG_EXPR:
4928 case OBJ_TYPE_REF:
4929 case TRANSACTION_EXPR:
4930 case ASM_EXPR:
4931 case AT_ENCODE_EXPR:
4932 fail:
4933 if (flags & tf_error)
4934 error ("expression %qE is not a constant-expression", t);
4935 return false;
4937 case TYPEID_EXPR:
4938 /* -- a typeid expression whose operand is of polymorphic
4939 class type; */
4941 tree e = TREE_OPERAND (t, 0);
4942 if (!TYPE_P (e) && !type_dependent_expression_p (e)
4943 && TYPE_POLYMORPHIC_P (TREE_TYPE (e)))
4945 if (flags & tf_error)
4946 error ("typeid-expression is not a constant expression "
4947 "because %qE is of polymorphic type", e);
4948 return false;
4950 return true;
4953 case MINUS_EXPR:
4954 want_rval = true;
4955 goto binary;
4957 case LT_EXPR:
4958 case LE_EXPR:
4959 case GT_EXPR:
4960 case GE_EXPR:
4961 case EQ_EXPR:
4962 case NE_EXPR:
4963 want_rval = true;
4964 goto binary;
4966 case PREINCREMENT_EXPR:
4967 case POSTINCREMENT_EXPR:
4968 case PREDECREMENT_EXPR:
4969 case POSTDECREMENT_EXPR:
4970 if (cxx_dialect < cxx14)
4971 goto fail;
4972 goto unary;
4974 case BIT_NOT_EXPR:
4975 /* A destructor. */
4976 if (TYPE_P (TREE_OPERAND (t, 0)))
4977 return true;
4978 /* else fall through. */
4980 case REALPART_EXPR:
4981 case IMAGPART_EXPR:
4982 case CONJ_EXPR:
4983 case SAVE_EXPR:
4984 case FIX_TRUNC_EXPR:
4985 case FLOAT_EXPR:
4986 case NEGATE_EXPR:
4987 case ABS_EXPR:
4988 case TRUTH_NOT_EXPR:
4989 case FIXED_CONVERT_EXPR:
4990 case UNARY_PLUS_EXPR:
4991 case UNARY_LEFT_FOLD_EXPR:
4992 case UNARY_RIGHT_FOLD_EXPR:
4993 unary:
4994 return RECUR (TREE_OPERAND (t, 0), rval);
4996 case CAST_EXPR:
4997 case CONST_CAST_EXPR:
4998 case STATIC_CAST_EXPR:
4999 case REINTERPRET_CAST_EXPR:
5000 case IMPLICIT_CONV_EXPR:
5001 if (cxx_dialect < cxx11
5002 && !dependent_type_p (TREE_TYPE (t))
5003 && !INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t)))
5004 /* In C++98, a conversion to non-integral type can't be part of a
5005 constant expression. */
5007 if (flags & tf_error)
5008 error ("cast to non-integral type %qT in a constant expression",
5009 TREE_TYPE (t));
5010 return false;
5013 return (RECUR (TREE_OPERAND (t, 0),
5014 TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE));
5016 case BIND_EXPR:
5017 return RECUR (BIND_EXPR_BODY (t), want_rval);
5019 case WITH_CLEANUP_EXPR:
5020 case CLEANUP_POINT_EXPR:
5021 case MUST_NOT_THROW_EXPR:
5022 case TRY_CATCH_EXPR:
5023 case TRY_BLOCK:
5024 case EH_SPEC_BLOCK:
5025 case EXPR_STMT:
5026 case PAREN_EXPR:
5027 case DECL_EXPR:
5028 case NON_DEPENDENT_EXPR:
5029 /* For convenience. */
5030 case RETURN_EXPR:
5031 case LOOP_EXPR:
5032 case EXIT_EXPR:
5033 return RECUR (TREE_OPERAND (t, 0), want_rval);
5035 case TRY_FINALLY_EXPR:
5036 return (RECUR (TREE_OPERAND (t, 0), want_rval)
5037 && RECUR (TREE_OPERAND (t, 1), any));
5039 case SCOPE_REF:
5040 return RECUR (TREE_OPERAND (t, 1), want_rval);
5042 case TARGET_EXPR:
5043 if (!literal_type_p (TREE_TYPE (t)))
5045 if (flags & tf_error)
5047 error ("temporary of non-literal type %qT in a "
5048 "constant expression", TREE_TYPE (t));
5049 explain_non_literal_class (TREE_TYPE (t));
5051 return false;
5053 case INIT_EXPR:
5054 return RECUR (TREE_OPERAND (t, 1), rval);
5056 case CONSTRUCTOR:
5058 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (t);
5059 constructor_elt *ce;
5060 for (i = 0; vec_safe_iterate (v, i, &ce); ++i)
5061 if (!RECUR (ce->value, want_rval))
5062 return false;
5063 return true;
5066 case TREE_LIST:
5068 gcc_assert (TREE_PURPOSE (t) == NULL_TREE
5069 || DECL_P (TREE_PURPOSE (t)));
5070 if (!RECUR (TREE_VALUE (t), want_rval))
5071 return false;
5072 if (TREE_CHAIN (t) == NULL_TREE)
5073 return true;
5074 return RECUR (TREE_CHAIN (t), want_rval);
5077 case TRUNC_DIV_EXPR:
5078 case CEIL_DIV_EXPR:
5079 case FLOOR_DIV_EXPR:
5080 case ROUND_DIV_EXPR:
5081 case TRUNC_MOD_EXPR:
5082 case CEIL_MOD_EXPR:
5083 case ROUND_MOD_EXPR:
5085 tree denom = TREE_OPERAND (t, 1);
5086 if (!RECUR (denom, rval))
5087 return false;
5088 /* We can't call cxx_eval_outermost_constant_expr on an expression
5089 that hasn't been through instantiate_non_dependent_expr yet. */
5090 if (!processing_template_decl)
5091 denom = cxx_eval_outermost_constant_expr (denom, true);
5092 if (integer_zerop (denom))
5094 if (flags & tf_error)
5095 error ("division by zero is not a constant-expression");
5096 return false;
5098 else
5100 want_rval = true;
5101 return RECUR (TREE_OPERAND (t, 0), want_rval);
5105 case COMPOUND_EXPR:
5107 /* check_return_expr sometimes wraps a TARGET_EXPR in a
5108 COMPOUND_EXPR; don't get confused. Also handle EMPTY_CLASS_EXPR
5109 introduced by build_call_a. */
5110 tree op0 = TREE_OPERAND (t, 0);
5111 tree op1 = TREE_OPERAND (t, 1);
5112 STRIP_NOPS (op1);
5113 if ((TREE_CODE (op0) == TARGET_EXPR && op1 == TARGET_EXPR_SLOT (op0))
5114 || TREE_CODE (op1) == EMPTY_CLASS_EXPR)
5115 return RECUR (op0, want_rval);
5116 else
5117 goto binary;
5120 /* If the first operand is the non-short-circuit constant, look at
5121 the second operand; otherwise we only care about the first one for
5122 potentiality. */
5123 case TRUTH_AND_EXPR:
5124 case TRUTH_ANDIF_EXPR:
5125 tmp = boolean_true_node;
5126 goto truth;
5127 case TRUTH_OR_EXPR:
5128 case TRUTH_ORIF_EXPR:
5129 tmp = boolean_false_node;
5130 truth:
5132 tree op = TREE_OPERAND (t, 0);
5133 if (!RECUR (op, rval))
5134 return false;
5135 if (!processing_template_decl)
5136 op = cxx_eval_outermost_constant_expr (op, true);
5137 if (tree_int_cst_equal (op, tmp))
5138 return RECUR (TREE_OPERAND (t, 1), rval);
5139 else
5140 return true;
5143 case PLUS_EXPR:
5144 case MULT_EXPR:
5145 case POINTER_PLUS_EXPR:
5146 case RDIV_EXPR:
5147 case EXACT_DIV_EXPR:
5148 case MIN_EXPR:
5149 case MAX_EXPR:
5150 case LSHIFT_EXPR:
5151 case RSHIFT_EXPR:
5152 case LROTATE_EXPR:
5153 case RROTATE_EXPR:
5154 case BIT_IOR_EXPR:
5155 case BIT_XOR_EXPR:
5156 case BIT_AND_EXPR:
5157 case TRUTH_XOR_EXPR:
5158 case UNORDERED_EXPR:
5159 case ORDERED_EXPR:
5160 case UNLT_EXPR:
5161 case UNLE_EXPR:
5162 case UNGT_EXPR:
5163 case UNGE_EXPR:
5164 case UNEQ_EXPR:
5165 case LTGT_EXPR:
5166 case RANGE_EXPR:
5167 case COMPLEX_EXPR:
5168 want_rval = true;
5169 /* Fall through. */
5170 case ARRAY_REF:
5171 case ARRAY_RANGE_REF:
5172 case MEMBER_REF:
5173 case DOTSTAR_EXPR:
5174 case MEM_REF:
5175 case BINARY_LEFT_FOLD_EXPR:
5176 case BINARY_RIGHT_FOLD_EXPR:
5177 binary:
5178 for (i = 0; i < 2; ++i)
5179 if (!RECUR (TREE_OPERAND (t, i), want_rval))
5180 return false;
5181 return true;
5183 case CILK_SYNC_STMT:
5184 case CILK_SPAWN_STMT:
5185 case ARRAY_NOTATION_REF:
5186 return false;
5188 case FMA_EXPR:
5189 case VEC_PERM_EXPR:
5190 for (i = 0; i < 3; ++i)
5191 if (!RECUR (TREE_OPERAND (t, i), true))
5192 return false;
5193 return true;
5195 case COND_EXPR:
5196 if (COND_EXPR_IS_VEC_DELETE (t))
5198 if (flags & tf_error)
5199 error_at (location_of (t),
5200 "%<delete[]%> is not a constant-expression");
5201 return false;
5203 /* Fall through. */
5204 case IF_STMT:
5205 case VEC_COND_EXPR:
5206 /* If the condition is a known constant, we know which of the legs we
5207 care about; otherwise we only require that the condition and
5208 either of the legs be potentially constant. */
5209 tmp = TREE_OPERAND (t, 0);
5210 if (!RECUR (tmp, rval))
5211 return false;
5212 if (!processing_template_decl)
5213 tmp = cxx_eval_outermost_constant_expr (tmp, true);
5214 if (integer_zerop (tmp))
5215 return RECUR (TREE_OPERAND (t, 2), want_rval);
5216 else if (TREE_CODE (tmp) == INTEGER_CST)
5217 return RECUR (TREE_OPERAND (t, 1), want_rval);
5218 for (i = 1; i < 3; ++i)
5219 if (potential_constant_expression_1 (TREE_OPERAND (t, i),
5220 want_rval, strict, tf_none))
5221 return true;
5222 if (flags & tf_error)
5223 error ("expression %qE is not a constant-expression", t);
5224 return false;
5226 case VEC_INIT_EXPR:
5227 if (VEC_INIT_EXPR_IS_CONSTEXPR (t))
5228 return true;
5229 if (flags & tf_error)
5231 error ("non-constant array initialization");
5232 diagnose_non_constexpr_vec_init (t);
5234 return false;
5236 case TYPE_DECL:
5237 case TAG_DEFN:
5238 /* We can see these in statement-expressions. */
5239 return true;
5241 case EMPTY_CLASS_EXPR:
5242 return false;
5244 case GOTO_EXPR:
5246 tree *target = &TREE_OPERAND (t, 0);
5247 /* Gotos representing break and continue are OK; we should have
5248 rejected other gotos in parsing. */
5249 gcc_assert (breaks (target) || continues (target));
5250 return true;
5253 default:
5254 if (objc_is_property_ref (t))
5255 return false;
5257 sorry ("unexpected AST of kind %s", get_tree_code_name (TREE_CODE (t)));
5258 gcc_unreachable();
5259 return false;
5261 #undef RECUR
5264 /* The main entry point to the above. */
5266 bool
5267 potential_constant_expression (tree t)
5269 return potential_constant_expression_1 (t, false, true, tf_none);
5272 bool
5273 potential_static_init_expression (tree t)
5275 return potential_constant_expression_1 (t, false, false, tf_none);
5278 /* As above, but require a constant rvalue. */
5280 bool
5281 potential_rvalue_constant_expression (tree t)
5283 return potential_constant_expression_1 (t, true, true, tf_none);
5286 /* Like above, but complain about non-constant expressions. */
5288 bool
5289 require_potential_constant_expression (tree t)
5291 return potential_constant_expression_1 (t, false, true, tf_warning_or_error);
5294 /* Cross product of the above. */
5296 bool
5297 require_potential_rvalue_constant_expression (tree t)
5299 return potential_constant_expression_1 (t, true, true, tf_warning_or_error);
5302 /* Returns true if T is a potential constant expression that is not
5303 instantiation-dependent, and therefore a candidate for constant folding even
5304 in a template. */
5306 bool
5307 potential_nondependent_constant_expression (tree t)
5309 return (!type_unknown_p (t)
5310 && !BRACE_ENCLOSED_INITIALIZER_P (t)
5311 && potential_constant_expression (t)
5312 && !instantiation_dependent_expression_p (t));
5315 /* Returns true if T is a potential static initializer expression that is not
5316 instantiation-dependent. */
5318 bool
5319 potential_nondependent_static_init_expression (tree t)
5321 return (!type_unknown_p (t)
5322 && !BRACE_ENCLOSED_INITIALIZER_P (t)
5323 && potential_static_init_expression (t)
5324 && !instantiation_dependent_expression_p (t));
5327 /* Finalize constexpr processing after parsing. */
5329 void
5330 fini_constexpr (void)
5332 /* The contexpr call and fundef copies tables are no longer needed. */
5333 constexpr_call_table = NULL;
5334 fundef_copies_table = NULL;
5337 #include "gt-cp-constexpr.h"