libgo: add misc/cgo files
[official-gcc.git] / gcc / cp / constexpr.c
blob5a57452486641254448a29e0a689a349e07e1cb8
1 /* Perform -*- C++ -*- constant expression evaluation, including calls to
2 constexpr functions. These routines are used both during actual parsing
3 and during the instantiation of template functions.
5 Copyright (C) 1998-2017 Free Software Foundation, Inc.
7 This file is part of GCC.
9 GCC is free software; you can redistribute it and/or modify it
10 under the terms of the GNU General Public License as published by
11 the Free Software Foundation; either version 3, or (at your option)
12 any later version.
14 GCC is distributed in the hope that it will be useful, but
15 WITHOUT ANY WARRANTY; without even the implied warranty of
16 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
17 General Public License for more details.
19 You should have received a copy of the GNU General Public License
20 along with GCC; see the file COPYING3. If not see
21 <http://www.gnu.org/licenses/>. */
23 #include "config.h"
24 #include "system.h"
25 #include "coretypes.h"
26 #include "cp-tree.h"
27 #include "varasm.h"
28 #include "c-family/c-objc.h"
29 #include "tree-iterator.h"
30 #include "gimplify.h"
31 #include "builtins.h"
32 #include "tree-inline.h"
33 #include "ubsan.h"
34 #include "gimple-fold.h"
35 #include "timevar.h"
37 static bool verify_constant (tree, bool, bool *, bool *);
38 #define VERIFY_CONSTANT(X) \
39 do { \
40 if (verify_constant ((X), ctx->quiet, non_constant_p, overflow_p)) \
41 return t; \
42 } while (0)
44 /* Returns true iff FUN is an instantiation of a constexpr function
45 template or a defaulted constexpr function. */
47 bool
48 is_instantiation_of_constexpr (tree fun)
50 return ((DECL_TEMPLOID_INSTANTIATION (fun)
51 && DECL_DECLARED_CONSTEXPR_P (DECL_TI_TEMPLATE (fun)))
52 || (DECL_DEFAULTED_FN (fun)
53 && DECL_DECLARED_CONSTEXPR_P (fun)));
56 /* Return true if T is a literal type. */
58 bool
59 literal_type_p (tree t)
61 if (SCALAR_TYPE_P (t)
62 || VECTOR_TYPE_P (t)
63 || TREE_CODE (t) == REFERENCE_TYPE
64 || (VOID_TYPE_P (t) && cxx_dialect >= cxx14))
65 return true;
66 if (CLASS_TYPE_P (t))
68 t = complete_type (t);
69 gcc_assert (COMPLETE_TYPE_P (t) || errorcount);
70 return CLASSTYPE_LITERAL_P (t);
72 if (TREE_CODE (t) == ARRAY_TYPE)
73 return literal_type_p (strip_array_types (t));
74 return false;
77 /* If DECL is a variable declared `constexpr', require its type
78 be literal. Return the DECL if OK, otherwise NULL. */
80 tree
81 ensure_literal_type_for_constexpr_object (tree decl)
83 tree type = TREE_TYPE (decl);
84 if (VAR_P (decl)
85 && (DECL_DECLARED_CONSTEXPR_P (decl)
86 || var_in_constexpr_fn (decl))
87 && !processing_template_decl)
89 tree stype = strip_array_types (type);
90 if (CLASS_TYPE_P (stype) && !COMPLETE_TYPE_P (complete_type (stype)))
91 /* Don't complain here, we'll complain about incompleteness
92 when we try to initialize the variable. */;
93 else if (!literal_type_p (type))
95 if (DECL_DECLARED_CONSTEXPR_P (decl))
97 error ("the type %qT of constexpr variable %qD is not literal",
98 type, decl);
99 explain_non_literal_class (type);
101 else
103 if (!DECL_TEMPLATE_INSTANTIATION (current_function_decl))
105 error ("variable %qD of non-literal type %qT in %<constexpr%> "
106 "function", decl, type);
107 explain_non_literal_class (type);
109 cp_function_chain->invalid_constexpr = true;
111 return NULL;
114 return decl;
117 /* Representation of entries in the constexpr function definition table. */
119 struct GTY((for_user)) constexpr_fundef {
120 tree decl;
121 tree body;
124 struct constexpr_fundef_hasher : ggc_ptr_hash<constexpr_fundef>
126 static hashval_t hash (constexpr_fundef *);
127 static bool equal (constexpr_fundef *, constexpr_fundef *);
130 /* This table holds all constexpr function definitions seen in
131 the current translation unit. */
133 static GTY (()) hash_table<constexpr_fundef_hasher> *constexpr_fundef_table;
135 /* Utility function used for managing the constexpr function table.
136 Return true if the entries pointed to by P and Q are for the
137 same constexpr function. */
139 inline bool
140 constexpr_fundef_hasher::equal (constexpr_fundef *lhs, constexpr_fundef *rhs)
142 return lhs->decl == rhs->decl;
145 /* Utility function used for managing the constexpr function table.
146 Return a hash value for the entry pointed to by Q. */
148 inline hashval_t
149 constexpr_fundef_hasher::hash (constexpr_fundef *fundef)
151 return DECL_UID (fundef->decl);
154 /* Return a previously saved definition of function FUN. */
156 static constexpr_fundef *
157 retrieve_constexpr_fundef (tree fun)
159 constexpr_fundef fundef = { NULL, NULL };
160 if (constexpr_fundef_table == NULL)
161 return NULL;
163 fundef.decl = fun;
164 return constexpr_fundef_table->find (&fundef);
167 /* Check whether the parameter and return types of FUN are valid for a
168 constexpr function, and complain if COMPLAIN. */
170 bool
171 is_valid_constexpr_fn (tree fun, bool complain)
173 bool ret = true;
175 if (DECL_INHERITED_CTOR (fun)
176 && TREE_CODE (fun) == TEMPLATE_DECL)
178 ret = false;
179 if (complain)
180 error ("inherited constructor %qD is not constexpr",
181 DECL_INHERITED_CTOR (fun));
183 else
185 for (tree parm = FUNCTION_FIRST_USER_PARM (fun);
186 parm != NULL_TREE; parm = TREE_CHAIN (parm))
187 if (!literal_type_p (TREE_TYPE (parm)))
189 ret = false;
190 if (complain)
192 error ("invalid type for parameter %d of constexpr "
193 "function %q+#D", DECL_PARM_INDEX (parm), fun);
194 explain_non_literal_class (TREE_TYPE (parm));
199 if (!DECL_CONSTRUCTOR_P (fun))
201 tree rettype = TREE_TYPE (TREE_TYPE (fun));
202 if (!literal_type_p (rettype))
204 ret = false;
205 if (complain)
207 error ("invalid return type %qT of constexpr function %q+D",
208 rettype, fun);
209 explain_non_literal_class (rettype);
213 /* C++14 DR 1684 removed this restriction. */
214 if (cxx_dialect < cxx14
215 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fun)
216 && !CLASSTYPE_LITERAL_P (DECL_CONTEXT (fun)))
218 ret = false;
219 if (complain
220 && pedwarn (DECL_SOURCE_LOCATION (fun), OPT_Wpedantic,
221 "enclosing class of constexpr non-static member "
222 "function %q+#D is not a literal type", fun))
223 explain_non_literal_class (DECL_CONTEXT (fun));
226 else if (CLASSTYPE_VBASECLASSES (DECL_CONTEXT (fun)))
228 ret = false;
229 if (complain)
230 error ("%q#T has virtual base classes", DECL_CONTEXT (fun));
233 return ret;
236 /* Subroutine of build_data_member_initialization. MEMBER is a COMPONENT_REF
237 for a member of an anonymous aggregate, INIT is the initializer for that
238 member, and VEC_OUTER is the vector of constructor elements for the class
239 whose constructor we are processing. Add the initializer to the vector
240 and return true to indicate success. */
242 static bool
243 build_anon_member_initialization (tree member, tree init,
244 vec<constructor_elt, va_gc> **vec_outer)
246 /* MEMBER presents the relevant fields from the inside out, but we need
247 to build up the initializer from the outside in so that we can reuse
248 previously built CONSTRUCTORs if this is, say, the second field in an
249 anonymous struct. So we use a vec as a stack. */
250 auto_vec<tree, 2> fields;
253 fields.safe_push (TREE_OPERAND (member, 1));
254 member = TREE_OPERAND (member, 0);
256 while (ANON_AGGR_TYPE_P (TREE_TYPE (member))
257 && TREE_CODE (member) == COMPONENT_REF);
259 /* VEC has the constructor elements vector for the context of FIELD.
260 If FIELD is an anonymous aggregate, we will push inside it. */
261 vec<constructor_elt, va_gc> **vec = vec_outer;
262 tree field;
263 while (field = fields.pop(),
264 ANON_AGGR_TYPE_P (TREE_TYPE (field)))
266 tree ctor;
267 /* If there is already an outer constructor entry for the anonymous
268 aggregate FIELD, use it; otherwise, insert one. */
269 if (vec_safe_is_empty (*vec)
270 || (*vec)->last().index != field)
272 ctor = build_constructor (TREE_TYPE (field), NULL);
273 CONSTRUCTOR_APPEND_ELT (*vec, field, ctor);
275 else
276 ctor = (*vec)->last().value;
277 vec = &CONSTRUCTOR_ELTS (ctor);
280 /* Now we're at the innermost field, the one that isn't an anonymous
281 aggregate. Add its initializer to the CONSTRUCTOR and we're done. */
282 gcc_assert (fields.is_empty());
283 CONSTRUCTOR_APPEND_ELT (*vec, field, init);
285 return true;
288 /* Subroutine of build_constexpr_constructor_member_initializers.
289 The expression tree T represents a data member initialization
290 in a (constexpr) constructor definition. Build a pairing of
291 the data member with its initializer, and prepend that pair
292 to the existing initialization pair INITS. */
294 static bool
295 build_data_member_initialization (tree t, vec<constructor_elt, va_gc> **vec)
297 tree member, init;
298 if (TREE_CODE (t) == CLEANUP_POINT_EXPR)
299 t = TREE_OPERAND (t, 0);
300 if (TREE_CODE (t) == EXPR_STMT)
301 t = TREE_OPERAND (t, 0);
302 if (t == error_mark_node)
303 return false;
304 if (TREE_CODE (t) == STATEMENT_LIST)
306 tree_stmt_iterator i;
307 for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
309 if (! build_data_member_initialization (tsi_stmt (i), vec))
310 return false;
312 return true;
314 if (TREE_CODE (t) == CLEANUP_STMT)
316 /* We can't see a CLEANUP_STMT in a constructor for a literal class,
317 but we can in a constexpr constructor for a non-literal class. Just
318 ignore it; either all the initialization will be constant, in which
319 case the cleanup can't run, or it can't be constexpr.
320 Still recurse into CLEANUP_BODY. */
321 return build_data_member_initialization (CLEANUP_BODY (t), vec);
323 if (TREE_CODE (t) == CONVERT_EXPR)
324 t = TREE_OPERAND (t, 0);
325 if (TREE_CODE (t) == INIT_EXPR
326 /* vptr initialization shows up as a MODIFY_EXPR. In C++14 we only
327 use what this function builds for cx_check_missing_mem_inits, and
328 assignment in the ctor body doesn't count. */
329 || (cxx_dialect < cxx14 && TREE_CODE (t) == MODIFY_EXPR))
331 member = TREE_OPERAND (t, 0);
332 init = break_out_target_exprs (TREE_OPERAND (t, 1));
334 else if (TREE_CODE (t) == CALL_EXPR)
336 tree fn = get_callee_fndecl (t);
337 if (!fn || !DECL_CONSTRUCTOR_P (fn))
338 /* We're only interested in calls to subobject constructors. */
339 return true;
340 member = CALL_EXPR_ARG (t, 0);
341 /* We don't use build_cplus_new here because it complains about
342 abstract bases. Leaving the call unwrapped means that it has the
343 wrong type, but cxx_eval_constant_expression doesn't care. */
344 init = break_out_target_exprs (t);
346 else if (TREE_CODE (t) == BIND_EXPR)
347 return build_data_member_initialization (BIND_EXPR_BODY (t), vec);
348 else
349 /* Don't add anything else to the CONSTRUCTOR. */
350 return true;
351 if (INDIRECT_REF_P (member))
352 member = TREE_OPERAND (member, 0);
353 if (TREE_CODE (member) == NOP_EXPR)
355 tree op = member;
356 STRIP_NOPS (op);
357 if (TREE_CODE (op) == ADDR_EXPR)
359 gcc_assert (same_type_ignoring_top_level_qualifiers_p
360 (TREE_TYPE (TREE_TYPE (op)),
361 TREE_TYPE (TREE_TYPE (member))));
362 /* Initializing a cv-qualified member; we need to look through
363 the const_cast. */
364 member = op;
366 else if (op == current_class_ptr
367 && (same_type_ignoring_top_level_qualifiers_p
368 (TREE_TYPE (TREE_TYPE (member)),
369 current_class_type)))
370 /* Delegating constructor. */
371 member = op;
372 else
374 /* This is an initializer for an empty base; keep it for now so
375 we can check it in cxx_eval_bare_aggregate. */
376 gcc_assert (is_empty_class (TREE_TYPE (TREE_TYPE (member))));
379 if (TREE_CODE (member) == ADDR_EXPR)
380 member = TREE_OPERAND (member, 0);
381 if (TREE_CODE (member) == COMPONENT_REF)
383 tree aggr = TREE_OPERAND (member, 0);
384 if (TREE_CODE (aggr) == VAR_DECL)
385 /* Initializing a local variable, don't add anything. */
386 return true;
387 if (TREE_CODE (aggr) != COMPONENT_REF)
388 /* Normal member initialization. */
389 member = TREE_OPERAND (member, 1);
390 else if (ANON_AGGR_TYPE_P (TREE_TYPE (aggr)))
391 /* Initializing a member of an anonymous union. */
392 return build_anon_member_initialization (member, init, vec);
393 else
394 /* We're initializing a vtable pointer in a base. Leave it as
395 COMPONENT_REF so we remember the path to get to the vfield. */
396 gcc_assert (TREE_TYPE (member) == vtbl_ptr_type_node);
399 /* Value-initialization can produce multiple initializers for the
400 same field; use the last one. */
401 if (!vec_safe_is_empty (*vec) && (*vec)->last().index == member)
402 (*vec)->last().value = init;
403 else
404 CONSTRUCTOR_APPEND_ELT (*vec, member, init);
405 return true;
408 /* Subroutine of check_constexpr_ctor_body_1 and constexpr_fn_retval.
409 In C++11 mode checks that the TYPE_DECLs in the BIND_EXPR_VARS of a
410 BIND_EXPR conform to 7.1.5/3/4 on typedef and alias declarations. */
412 static bool
413 check_constexpr_bind_expr_vars (tree t)
415 gcc_assert (TREE_CODE (t) == BIND_EXPR);
417 for (tree var = BIND_EXPR_VARS (t); var; var = DECL_CHAIN (var))
418 if (TREE_CODE (var) == TYPE_DECL
419 && DECL_IMPLICIT_TYPEDEF_P (var)
420 && !LAMBDA_TYPE_P (TREE_TYPE (var)))
421 return false;
422 return true;
425 /* Subroutine of check_constexpr_ctor_body. */
427 static bool
428 check_constexpr_ctor_body_1 (tree last, tree list)
430 switch (TREE_CODE (list))
432 case DECL_EXPR:
433 if (TREE_CODE (DECL_EXPR_DECL (list)) == USING_DECL
434 || TREE_CODE (DECL_EXPR_DECL (list)) == TYPE_DECL)
435 return true;
436 return false;
438 case CLEANUP_POINT_EXPR:
439 return check_constexpr_ctor_body (last, TREE_OPERAND (list, 0),
440 /*complain=*/false);
442 case BIND_EXPR:
443 if (!check_constexpr_bind_expr_vars (list)
444 || !check_constexpr_ctor_body (last, BIND_EXPR_BODY (list),
445 /*complain=*/false))
446 return false;
447 return true;
449 case USING_STMT:
450 case STATIC_ASSERT:
451 return true;
453 default:
454 return false;
458 /* Make sure that there are no statements after LAST in the constructor
459 body represented by LIST. */
461 bool
462 check_constexpr_ctor_body (tree last, tree list, bool complain)
464 /* C++14 doesn't require a constexpr ctor to have an empty body. */
465 if (cxx_dialect >= cxx14)
466 return true;
468 bool ok = true;
469 if (TREE_CODE (list) == STATEMENT_LIST)
471 tree_stmt_iterator i = tsi_last (list);
472 for (; !tsi_end_p (i); tsi_prev (&i))
474 tree t = tsi_stmt (i);
475 if (t == last)
476 break;
477 if (!check_constexpr_ctor_body_1 (last, t))
479 ok = false;
480 break;
484 else if (list != last
485 && !check_constexpr_ctor_body_1 (last, list))
486 ok = false;
487 if (!ok)
489 if (complain)
490 error ("constexpr constructor does not have empty body");
491 DECL_DECLARED_CONSTEXPR_P (current_function_decl) = false;
493 return ok;
496 /* V is a vector of constructor elements built up for the base and member
497 initializers of a constructor for TYPE. They need to be in increasing
498 offset order, which they might not be yet if TYPE has a primary base
499 which is not first in the base-clause or a vptr and at least one base
500 all of which are non-primary. */
502 static vec<constructor_elt, va_gc> *
503 sort_constexpr_mem_initializers (tree type, vec<constructor_elt, va_gc> *v)
505 tree pri = CLASSTYPE_PRIMARY_BINFO (type);
506 tree field_type;
507 unsigned i;
508 constructor_elt *ce;
510 if (pri)
511 field_type = BINFO_TYPE (pri);
512 else if (TYPE_CONTAINS_VPTR_P (type))
513 field_type = vtbl_ptr_type_node;
514 else
515 return v;
517 /* Find the element for the primary base or vptr and move it to the
518 beginning of the vec. */
519 for (i = 0; vec_safe_iterate (v, i, &ce); ++i)
520 if (TREE_TYPE (ce->index) == field_type)
521 break;
523 if (i > 0 && i < vec_safe_length (v))
525 vec<constructor_elt, va_gc> &vref = *v;
526 constructor_elt elt = vref[i];
527 for (; i > 0; --i)
528 vref[i] = vref[i-1];
529 vref[0] = elt;
532 return v;
535 /* Build compile-time evalable representations of member-initializer list
536 for a constexpr constructor. */
538 static tree
539 build_constexpr_constructor_member_initializers (tree type, tree body)
541 vec<constructor_elt, va_gc> *vec = NULL;
542 bool ok = true;
543 while (true)
544 switch (TREE_CODE (body))
546 case MUST_NOT_THROW_EXPR:
547 case EH_SPEC_BLOCK:
548 body = TREE_OPERAND (body, 0);
549 break;
551 case STATEMENT_LIST:
552 for (tree_stmt_iterator i = tsi_start (body);
553 !tsi_end_p (i); tsi_next (&i))
555 body = tsi_stmt (i);
556 if (TREE_CODE (body) == BIND_EXPR)
557 break;
559 break;
561 case BIND_EXPR:
562 body = BIND_EXPR_BODY (body);
563 goto found;
565 default:
566 gcc_unreachable ();
568 found:
569 if (TREE_CODE (body) == CLEANUP_POINT_EXPR)
571 body = TREE_OPERAND (body, 0);
572 if (TREE_CODE (body) == EXPR_STMT)
573 body = TREE_OPERAND (body, 0);
574 if (TREE_CODE (body) == INIT_EXPR
575 && (same_type_ignoring_top_level_qualifiers_p
576 (TREE_TYPE (TREE_OPERAND (body, 0)),
577 current_class_type)))
579 /* Trivial copy. */
580 return TREE_OPERAND (body, 1);
582 ok = build_data_member_initialization (body, &vec);
584 else if (TREE_CODE (body) == STATEMENT_LIST)
586 tree_stmt_iterator i;
587 for (i = tsi_start (body); !tsi_end_p (i); tsi_next (&i))
589 ok = build_data_member_initialization (tsi_stmt (i), &vec);
590 if (!ok)
591 break;
594 else if (TREE_CODE (body) == TRY_BLOCK)
596 error ("body of %<constexpr%> constructor cannot be "
597 "a function-try-block");
598 return error_mark_node;
600 else if (EXPR_P (body))
601 ok = build_data_member_initialization (body, &vec);
602 else
603 gcc_assert (errorcount > 0);
604 if (ok)
606 if (vec_safe_length (vec) > 0)
608 /* In a delegating constructor, return the target. */
609 constructor_elt *ce = &(*vec)[0];
610 if (ce->index == current_class_ptr)
612 body = ce->value;
613 vec_free (vec);
614 return body;
617 vec = sort_constexpr_mem_initializers (type, vec);
618 return build_constructor (type, vec);
620 else
621 return error_mark_node;
624 /* Subroutine of register_constexpr_fundef. BODY is the body of a function
625 declared to be constexpr, or a sub-statement thereof. Returns the
626 return value if suitable, error_mark_node for a statement not allowed in
627 a constexpr function, or NULL_TREE if no return value was found. */
629 static tree
630 constexpr_fn_retval (tree body)
632 switch (TREE_CODE (body))
634 case STATEMENT_LIST:
636 tree_stmt_iterator i;
637 tree expr = NULL_TREE;
638 for (i = tsi_start (body); !tsi_end_p (i); tsi_next (&i))
640 tree s = constexpr_fn_retval (tsi_stmt (i));
641 if (s == error_mark_node)
642 return error_mark_node;
643 else if (s == NULL_TREE)
644 /* Keep iterating. */;
645 else if (expr)
646 /* Multiple return statements. */
647 return error_mark_node;
648 else
649 expr = s;
651 return expr;
654 case RETURN_EXPR:
655 return break_out_target_exprs (TREE_OPERAND (body, 0));
657 case DECL_EXPR:
659 tree decl = DECL_EXPR_DECL (body);
660 if (TREE_CODE (decl) == USING_DECL
661 /* Accept __func__, __FUNCTION__, and __PRETTY_FUNCTION__. */
662 || DECL_ARTIFICIAL (decl))
663 return NULL_TREE;
664 return error_mark_node;
667 case CLEANUP_POINT_EXPR:
668 return constexpr_fn_retval (TREE_OPERAND (body, 0));
670 case BIND_EXPR:
671 if (!check_constexpr_bind_expr_vars (body))
672 return error_mark_node;
673 return constexpr_fn_retval (BIND_EXPR_BODY (body));
675 case USING_STMT:
676 return NULL_TREE;
678 default:
679 return error_mark_node;
683 /* Subroutine of register_constexpr_fundef. BODY is the DECL_SAVED_TREE of
684 FUN; do the necessary transformations to turn it into a single expression
685 that we can store in the hash table. */
687 static tree
688 massage_constexpr_body (tree fun, tree body)
690 if (DECL_CONSTRUCTOR_P (fun))
691 body = build_constexpr_constructor_member_initializers
692 (DECL_CONTEXT (fun), body);
693 else if (cxx_dialect < cxx14)
695 if (TREE_CODE (body) == EH_SPEC_BLOCK)
696 body = EH_SPEC_STMTS (body);
697 if (TREE_CODE (body) == MUST_NOT_THROW_EXPR)
698 body = TREE_OPERAND (body, 0);
699 body = constexpr_fn_retval (body);
701 return body;
704 /* CTYPE is a type constructed from BODY. Return true if some
705 bases/fields are uninitialized, and complain if COMPLAIN. */
707 static bool
708 cx_check_missing_mem_inits (tree ctype, tree body, bool complain)
710 unsigned nelts = 0;
712 if (body)
714 if (TREE_CODE (body) != CONSTRUCTOR)
715 return false;
716 nelts = CONSTRUCTOR_NELTS (body);
718 tree field = TYPE_FIELDS (ctype);
720 if (TREE_CODE (ctype) == UNION_TYPE)
722 if (nelts == 0 && next_initializable_field (field))
724 if (complain)
725 error ("%<constexpr%> constructor for union %qT must "
726 "initialize exactly one non-static data member", ctype);
727 return true;
729 return false;
732 /* Iterate over the CONSTRUCTOR, checking any missing fields don't
733 need an explicit initialization. */
734 bool bad = false;
735 for (unsigned i = 0; i <= nelts; ++i)
737 tree index = NULL_TREE;
738 if (i < nelts)
740 index = CONSTRUCTOR_ELT (body, i)->index;
741 /* Skip base and vtable inits. */
742 if (TREE_CODE (index) != FIELD_DECL
743 || DECL_ARTIFICIAL (index))
744 continue;
747 for (; field != index; field = DECL_CHAIN (field))
749 tree ftype;
750 if (TREE_CODE (field) != FIELD_DECL)
751 continue;
752 if (DECL_C_BIT_FIELD (field) && !DECL_NAME (field))
753 continue;
754 if (DECL_ARTIFICIAL (field))
755 continue;
756 if (ANON_AGGR_TYPE_P (TREE_TYPE (field)))
758 /* Recurse to check the anonummous aggregate member. */
759 bad |= cx_check_missing_mem_inits
760 (TREE_TYPE (field), NULL_TREE, complain);
761 if (bad && !complain)
762 return true;
763 continue;
765 ftype = strip_array_types (TREE_TYPE (field));
766 if (type_has_constexpr_default_constructor (ftype))
768 /* It's OK to skip a member with a trivial constexpr ctor.
769 A constexpr ctor that isn't trivial should have been
770 added in by now. */
771 gcc_checking_assert (!TYPE_HAS_COMPLEX_DFLT (ftype)
772 || errorcount != 0);
773 continue;
775 if (!complain)
776 return true;
777 error ("member %qD must be initialized by mem-initializer "
778 "in %<constexpr%> constructor", field);
779 inform (DECL_SOURCE_LOCATION (field), "declared here");
780 bad = true;
782 if (field == NULL_TREE)
783 break;
785 if (ANON_AGGR_TYPE_P (TREE_TYPE (index)))
787 /* Check the anonymous aggregate initializer is valid. */
788 bad |= cx_check_missing_mem_inits
789 (TREE_TYPE (index), CONSTRUCTOR_ELT (body, i)->value, complain);
790 if (bad && !complain)
791 return true;
793 field = DECL_CHAIN (field);
796 return bad;
799 /* We are processing the definition of the constexpr function FUN.
800 Check that its BODY fulfills the propriate requirements and
801 enter it in the constexpr function definition table.
802 For constructor BODY is actually the TREE_LIST of the
803 member-initializer list. */
805 tree
806 register_constexpr_fundef (tree fun, tree body)
808 constexpr_fundef entry;
809 constexpr_fundef **slot;
811 if (!is_valid_constexpr_fn (fun, !DECL_GENERATED_P (fun)))
812 return NULL;
814 tree massaged = massage_constexpr_body (fun, body);
815 if (massaged == NULL_TREE || massaged == error_mark_node)
817 if (!DECL_CONSTRUCTOR_P (fun))
818 error ("body of constexpr function %qD not a return-statement", fun);
819 return NULL;
822 if (!potential_rvalue_constant_expression (massaged))
824 if (!DECL_GENERATED_P (fun))
825 require_potential_rvalue_constant_expression (massaged);
826 return NULL;
829 if (DECL_CONSTRUCTOR_P (fun)
830 && cx_check_missing_mem_inits (DECL_CONTEXT (fun),
831 massaged, !DECL_GENERATED_P (fun)))
832 return NULL;
834 /* Create the constexpr function table if necessary. */
835 if (constexpr_fundef_table == NULL)
836 constexpr_fundef_table
837 = hash_table<constexpr_fundef_hasher>::create_ggc (101);
839 entry.decl = fun;
840 entry.body = body;
841 slot = constexpr_fundef_table->find_slot (&entry, INSERT);
843 gcc_assert (*slot == NULL);
844 *slot = ggc_alloc<constexpr_fundef> ();
845 **slot = entry;
847 return fun;
850 /* FUN is a non-constexpr function called in a context that requires a
851 constant expression. If it comes from a constexpr template, explain why
852 the instantiation isn't constexpr. */
854 void
855 explain_invalid_constexpr_fn (tree fun)
857 static hash_set<tree> *diagnosed;
858 tree body;
859 location_t save_loc;
860 /* Only diagnose defaulted functions, lambdas, or instantiations. */
861 if (!DECL_DEFAULTED_FN (fun)
862 && !LAMBDA_TYPE_P (CP_DECL_CONTEXT (fun))
863 && !is_instantiation_of_constexpr (fun))
864 return;
865 if (diagnosed == NULL)
866 diagnosed = new hash_set<tree>;
867 if (diagnosed->add (fun))
868 /* Already explained. */
869 return;
871 save_loc = input_location;
872 if (!lambda_static_thunk_p (fun))
874 /* Diagnostics should completely ignore the static thunk, so leave
875 input_location set to our caller's location. */
876 input_location = DECL_SOURCE_LOCATION (fun);
877 inform (input_location,
878 "%qD is not usable as a constexpr function because:", fun);
880 /* First check the declaration. */
881 if (is_valid_constexpr_fn (fun, true))
883 /* Then if it's OK, the body. */
884 if (!DECL_DECLARED_CONSTEXPR_P (fun)
885 && !LAMBDA_TYPE_P (CP_DECL_CONTEXT (fun)))
886 explain_implicit_non_constexpr (fun);
887 else
889 body = massage_constexpr_body (fun, DECL_SAVED_TREE (fun));
890 require_potential_rvalue_constant_expression (body);
891 if (DECL_CONSTRUCTOR_P (fun))
892 cx_check_missing_mem_inits (DECL_CONTEXT (fun), body, true);
895 input_location = save_loc;
898 /* Objects of this type represent calls to constexpr functions
899 along with the bindings of parameters to their arguments, for
900 the purpose of compile time evaluation. */
902 struct GTY((for_user)) constexpr_call {
903 /* Description of the constexpr function definition. */
904 constexpr_fundef *fundef;
905 /* Parameter bindings environment. A TREE_LIST where each TREE_PURPOSE
906 is a parameter _DECL and the TREE_VALUE is the value of the parameter.
907 Note: This arrangement is made to accommodate the use of
908 iterative_hash_template_arg (see pt.c). If you change this
909 representation, also change the hash calculation in
910 cxx_eval_call_expression. */
911 tree bindings;
912 /* Result of the call.
913 NULL means the call is being evaluated.
914 error_mark_node means that the evaluation was erroneous;
915 otherwise, the actuall value of the call. */
916 tree result;
917 /* The hash of this call; we remember it here to avoid having to
918 recalculate it when expanding the hash table. */
919 hashval_t hash;
922 struct constexpr_call_hasher : ggc_ptr_hash<constexpr_call>
924 static hashval_t hash (constexpr_call *);
925 static bool equal (constexpr_call *, constexpr_call *);
928 enum constexpr_switch_state {
929 /* Used when processing a switch for the first time by cxx_eval_switch_expr
930 and default: label for that switch has not been seen yet. */
931 css_default_not_seen,
932 /* Used when processing a switch for the first time by cxx_eval_switch_expr
933 and default: label for that switch has been seen already. */
934 css_default_seen,
935 /* Used when processing a switch for the second time by
936 cxx_eval_switch_expr, where default: label should match. */
937 css_default_processing
940 /* The constexpr expansion context. CALL is the current function
941 expansion, CTOR is the current aggregate initializer, OBJECT is the
942 object being initialized by CTOR, either a VAR_DECL or a _REF. VALUES
943 is a map of values of variables initialized within the expression. */
945 struct constexpr_ctx {
946 /* The innermost call we're evaluating. */
947 constexpr_call *call;
948 /* Values for any temporaries or local variables within the
949 constant-expression. */
950 hash_map<tree,tree> *values;
951 /* SAVE_EXPRs that we've seen within the current LOOP_EXPR. NULL if we
952 aren't inside a loop. */
953 hash_set<tree> *save_exprs;
954 /* The CONSTRUCTOR we're currently building up for an aggregate
955 initializer. */
956 tree ctor;
957 /* The object we're building the CONSTRUCTOR for. */
958 tree object;
959 /* If inside SWITCH_EXPR. */
960 constexpr_switch_state *css_state;
961 /* Whether we should error on a non-constant expression or fail quietly. */
962 bool quiet;
963 /* Whether we are strictly conforming to constant expression rules or
964 trying harder to get a constant value. */
965 bool strict;
968 /* A table of all constexpr calls that have been evaluated by the
969 compiler in this translation unit. */
971 static GTY (()) hash_table<constexpr_call_hasher> *constexpr_call_table;
973 static tree cxx_eval_constant_expression (const constexpr_ctx *, tree,
974 bool, bool *, bool *, tree * = NULL);
976 /* Compute a hash value for a constexpr call representation. */
978 inline hashval_t
979 constexpr_call_hasher::hash (constexpr_call *info)
981 return info->hash;
984 /* Return true if the objects pointed to by P and Q represent calls
985 to the same constexpr function with the same arguments.
986 Otherwise, return false. */
988 bool
989 constexpr_call_hasher::equal (constexpr_call *lhs, constexpr_call *rhs)
991 tree lhs_bindings;
992 tree rhs_bindings;
993 if (lhs == rhs)
994 return 1;
995 if (!constexpr_fundef_hasher::equal (lhs->fundef, rhs->fundef))
996 return 0;
997 lhs_bindings = lhs->bindings;
998 rhs_bindings = rhs->bindings;
999 while (lhs_bindings != NULL && rhs_bindings != NULL)
1001 tree lhs_arg = TREE_VALUE (lhs_bindings);
1002 tree rhs_arg = TREE_VALUE (rhs_bindings);
1003 gcc_assert (TREE_TYPE (lhs_arg) == TREE_TYPE (rhs_arg));
1004 if (!cp_tree_equal (lhs_arg, rhs_arg))
1005 return 0;
1006 lhs_bindings = TREE_CHAIN (lhs_bindings);
1007 rhs_bindings = TREE_CHAIN (rhs_bindings);
1009 return lhs_bindings == rhs_bindings;
1012 /* Initialize the constexpr call table, if needed. */
1014 static void
1015 maybe_initialize_constexpr_call_table (void)
1017 if (constexpr_call_table == NULL)
1018 constexpr_call_table = hash_table<constexpr_call_hasher>::create_ggc (101);
1021 /* During constexpr CALL_EXPR evaluation, to avoid issues with sharing when
1022 a function happens to get called recursively, we unshare the callee
1023 function's body and evaluate this unshared copy instead of evaluating the
1024 original body.
1026 FUNDEF_COPIES_TABLE is a per-function freelist of these unshared function
1027 copies. The underlying data structure of FUNDEF_COPIES_TABLE is a hash_map
1028 that's keyed off of the original FUNCTION_DECL and whose value is a
1029 TREE_LIST of this function's unused copies awaiting reuse.
1031 This is not GC-deletable to avoid GC affecting UID generation. */
1033 static GTY(()) hash_map<tree, tree> *fundef_copies_table;
1035 /* Initialize FUNDEF_COPIES_TABLE if it's not initialized. */
1037 static void
1038 maybe_initialize_fundef_copies_table ()
1040 if (fundef_copies_table == NULL)
1041 fundef_copies_table = hash_map<tree,tree>::create_ggc (101);
1044 /* Reuse a copy or create a new unshared copy of the function FUN.
1045 Return this copy. We use a TREE_LIST whose PURPOSE is body, VALUE
1046 is parms, TYPE is result. */
1048 static tree
1049 get_fundef_copy (tree fun)
1051 maybe_initialize_fundef_copies_table ();
1053 tree copy;
1054 bool existed;
1055 tree *slot = &fundef_copies_table->get_or_insert (fun, &existed);
1057 if (!existed)
1059 /* There is no cached function available, or in use. We can use
1060 the function directly. That the slot is now created records
1061 that this function is now in use. */
1062 copy = build_tree_list (DECL_SAVED_TREE (fun), DECL_ARGUMENTS (fun));
1063 TREE_TYPE (copy) = DECL_RESULT (fun);
1065 else if (*slot == NULL_TREE)
1067 /* We've already used the function itself, so make a copy. */
1068 copy = build_tree_list (NULL, NULL);
1069 TREE_PURPOSE (copy) = copy_fn (fun, TREE_VALUE (copy), TREE_TYPE (copy));
1071 else
1073 /* We have a cached function available. */
1074 copy = *slot;
1075 *slot = TREE_CHAIN (copy);
1078 return copy;
1081 /* Save the copy COPY of function FUN for later reuse by
1082 get_fundef_copy(). By construction, there will always be an entry
1083 to find. */
1085 static void
1086 save_fundef_copy (tree fun, tree copy)
1088 tree *slot = fundef_copies_table->get (fun);
1089 TREE_CHAIN (copy) = *slot;
1090 *slot = copy;
1093 /* We have an expression tree T that represents a call, either CALL_EXPR
1094 or AGGR_INIT_EXPR. If the call is lexically to a named function,
1095 retrun the _DECL for that function. */
1097 static tree
1098 get_function_named_in_call (tree t)
1100 tree fun = cp_get_callee (t);
1101 if (fun && TREE_CODE (fun) == ADDR_EXPR
1102 && TREE_CODE (TREE_OPERAND (fun, 0)) == FUNCTION_DECL)
1103 fun = TREE_OPERAND (fun, 0);
1104 return fun;
1107 /* We have an expression tree T that represents a call, either CALL_EXPR
1108 or AGGR_INIT_EXPR. Return the Nth argument. */
1110 static inline tree
1111 get_nth_callarg (tree t, int n)
1113 switch (TREE_CODE (t))
1115 case CALL_EXPR:
1116 return CALL_EXPR_ARG (t, n);
1118 case AGGR_INIT_EXPR:
1119 return AGGR_INIT_EXPR_ARG (t, n);
1121 default:
1122 gcc_unreachable ();
1123 return NULL;
1127 /* Attempt to evaluate T which represents a call to a builtin function.
1128 We assume here that all builtin functions evaluate to scalar types
1129 represented by _CST nodes. */
1131 static tree
1132 cxx_eval_builtin_function_call (const constexpr_ctx *ctx, tree t, tree fun,
1133 bool lval,
1134 bool *non_constant_p, bool *overflow_p)
1136 const int nargs = call_expr_nargs (t);
1137 tree *args = (tree *) alloca (nargs * sizeof (tree));
1138 tree new_call;
1139 int i;
1141 /* Don't fold __builtin_constant_p within a constexpr function. */
1142 bool bi_const_p = (DECL_FUNCTION_CODE (fun) == BUILT_IN_CONSTANT_P);
1144 if (bi_const_p
1145 && current_function_decl
1146 && DECL_DECLARED_CONSTEXPR_P (current_function_decl))
1148 *non_constant_p = true;
1149 return t;
1152 /* Be permissive for arguments to built-ins; __builtin_constant_p should
1153 return constant false for a non-constant argument. */
1154 constexpr_ctx new_ctx = *ctx;
1155 new_ctx.quiet = true;
1156 bool dummy1 = false, dummy2 = false;
1157 for (i = 0; i < nargs; ++i)
1159 args[i] = cxx_eval_constant_expression (&new_ctx, CALL_EXPR_ARG (t, i),
1160 false, &dummy1, &dummy2);
1161 if (bi_const_p)
1162 /* For __built_in_constant_p, fold all expressions with constant values
1163 even if they aren't C++ constant-expressions. */
1164 args[i] = cp_fully_fold (args[i]);
1167 bool save_ffbcp = force_folding_builtin_constant_p;
1168 force_folding_builtin_constant_p = true;
1169 new_call = fold_builtin_call_array (EXPR_LOCATION (t), TREE_TYPE (t),
1170 CALL_EXPR_FN (t), nargs, args);
1171 force_folding_builtin_constant_p = save_ffbcp;
1172 if (new_call == NULL)
1174 if (!*non_constant_p && !ctx->quiet)
1176 new_call = build_call_array_loc (EXPR_LOCATION (t), TREE_TYPE (t),
1177 CALL_EXPR_FN (t), nargs, args);
1178 error ("%q+E is not a constant expression", new_call);
1180 *non_constant_p = true;
1181 return t;
1184 if (!potential_constant_expression (new_call))
1186 if (!*non_constant_p && !ctx->quiet)
1187 error ("%q+E is not a constant expression", new_call);
1188 *non_constant_p = true;
1189 return t;
1192 return cxx_eval_constant_expression (&new_ctx, new_call, lval,
1193 non_constant_p, overflow_p);
1196 /* TEMP is the constant value of a temporary object of type TYPE. Adjust
1197 the type of the value to match. */
1199 static tree
1200 adjust_temp_type (tree type, tree temp)
1202 if (TREE_TYPE (temp) == type)
1203 return temp;
1204 /* Avoid wrapping an aggregate value in a NOP_EXPR. */
1205 if (TREE_CODE (temp) == CONSTRUCTOR)
1206 return build_constructor (type, CONSTRUCTOR_ELTS (temp));
1207 gcc_assert (scalarish_type_p (type));
1208 return cp_fold_convert (type, temp);
1211 /* Callback for walk_tree used by unshare_constructor. */
1213 static tree
1214 find_constructor (tree *tp, int *walk_subtrees, void *)
1216 if (TYPE_P (*tp))
1217 *walk_subtrees = 0;
1218 if (TREE_CODE (*tp) == CONSTRUCTOR)
1219 return *tp;
1220 return NULL_TREE;
1223 /* If T is a CONSTRUCTOR or an expression that has a CONSTRUCTOR node as a
1224 subexpression, return an unshared copy of T. Otherwise return T. */
1226 static tree
1227 unshare_constructor (tree t)
1229 tree ctor = walk_tree (&t, find_constructor, NULL, NULL);
1230 if (ctor != NULL_TREE)
1231 return unshare_expr (t);
1232 return t;
1235 /* Subroutine of cxx_eval_call_expression.
1236 We are processing a call expression (either CALL_EXPR or
1237 AGGR_INIT_EXPR) in the context of CTX. Evaluate
1238 all arguments and bind their values to correspondings
1239 parameters, making up the NEW_CALL context. */
1241 static void
1242 cxx_bind_parameters_in_call (const constexpr_ctx *ctx, tree t,
1243 constexpr_call *new_call,
1244 bool *non_constant_p, bool *overflow_p,
1245 bool *non_constant_args)
1247 const int nargs = call_expr_nargs (t);
1248 tree fun = new_call->fundef->decl;
1249 tree parms = DECL_ARGUMENTS (fun);
1250 int i;
1251 tree *p = &new_call->bindings;
1252 for (i = 0; i < nargs; ++i)
1254 tree x, arg;
1255 tree type = parms ? TREE_TYPE (parms) : void_type_node;
1256 x = get_nth_callarg (t, i);
1257 /* For member function, the first argument is a pointer to the implied
1258 object. For a constructor, it might still be a dummy object, in
1259 which case we get the real argument from ctx. */
1260 if (i == 0 && DECL_CONSTRUCTOR_P (fun)
1261 && is_dummy_object (x))
1263 x = ctx->object;
1264 x = cp_build_addr_expr (x, tf_warning_or_error);
1266 bool lval = false;
1267 arg = cxx_eval_constant_expression (ctx, x, lval,
1268 non_constant_p, overflow_p);
1269 /* Don't VERIFY_CONSTANT here. */
1270 if (*non_constant_p && ctx->quiet)
1271 return;
1272 /* Just discard ellipsis args after checking their constantitude. */
1273 if (!parms)
1274 continue;
1276 if (!*non_constant_p)
1278 /* Make sure the binding has the same type as the parm. But
1279 only for constant args. */
1280 if (TREE_CODE (type) != REFERENCE_TYPE)
1281 arg = adjust_temp_type (type, arg);
1282 if (!TREE_CONSTANT (arg))
1283 *non_constant_args = true;
1284 *p = build_tree_list (parms, arg);
1285 p = &TREE_CHAIN (*p);
1287 parms = TREE_CHAIN (parms);
1291 /* Variables and functions to manage constexpr call expansion context.
1292 These do not need to be marked for PCH or GC. */
1294 /* FIXME remember and print actual constant arguments. */
1295 static vec<tree> call_stack;
1296 static int call_stack_tick;
1297 static int last_cx_error_tick;
1299 static bool
1300 push_cx_call_context (tree call)
1302 ++call_stack_tick;
1303 if (!EXPR_HAS_LOCATION (call))
1304 SET_EXPR_LOCATION (call, input_location);
1305 call_stack.safe_push (call);
1306 if (call_stack.length () > (unsigned) max_constexpr_depth)
1307 return false;
1308 return true;
1311 static void
1312 pop_cx_call_context (void)
1314 ++call_stack_tick;
1315 call_stack.pop ();
1318 vec<tree>
1319 cx_error_context (void)
1321 vec<tree> r = vNULL;
1322 if (call_stack_tick != last_cx_error_tick
1323 && !call_stack.is_empty ())
1324 r = call_stack;
1325 last_cx_error_tick = call_stack_tick;
1326 return r;
1329 /* Evaluate a call T to a GCC internal function when possible and return
1330 the evaluated result or, under the control of CTX, give an error, set
1331 NON_CONSTANT_P, and return the unevaluated call T otherwise. */
1333 static tree
1334 cxx_eval_internal_function (const constexpr_ctx *ctx, tree t,
1335 bool lval,
1336 bool *non_constant_p, bool *overflow_p)
1338 enum tree_code opcode = ERROR_MARK;
1340 switch (CALL_EXPR_IFN (t))
1342 case IFN_UBSAN_NULL:
1343 case IFN_UBSAN_BOUNDS:
1344 case IFN_UBSAN_VPTR:
1345 case IFN_FALLTHROUGH:
1346 return void_node;
1348 case IFN_ADD_OVERFLOW:
1349 opcode = PLUS_EXPR;
1350 break;
1351 case IFN_SUB_OVERFLOW:
1352 opcode = MINUS_EXPR;
1353 break;
1354 case IFN_MUL_OVERFLOW:
1355 opcode = MULT_EXPR;
1356 break;
1358 case IFN_LAUNDER:
1359 return cxx_eval_constant_expression (ctx, CALL_EXPR_ARG (t, 0),
1360 false, non_constant_p, overflow_p);
1362 default:
1363 if (!ctx->quiet)
1364 error_at (EXPR_LOC_OR_LOC (t, input_location),
1365 "call to internal function %qE", t);
1366 *non_constant_p = true;
1367 return t;
1370 /* Evaluate constant arguments using OPCODE and return a complex
1371 number containing the result and the overflow bit. */
1372 tree arg0 = cxx_eval_constant_expression (ctx, CALL_EXPR_ARG (t, 0), lval,
1373 non_constant_p, overflow_p);
1374 tree arg1 = cxx_eval_constant_expression (ctx, CALL_EXPR_ARG (t, 1), lval,
1375 non_constant_p, overflow_p);
1377 if (TREE_CODE (arg0) == INTEGER_CST && TREE_CODE (arg1) == INTEGER_CST)
1379 location_t loc = EXPR_LOC_OR_LOC (t, input_location);
1380 tree type = TREE_TYPE (TREE_TYPE (t));
1381 tree result = fold_binary_loc (loc, opcode, type,
1382 fold_convert_loc (loc, type, arg0),
1383 fold_convert_loc (loc, type, arg1));
1384 tree ovf
1385 = build_int_cst (type, arith_overflowed_p (opcode, type, arg0, arg1));
1386 /* Reset TREE_OVERFLOW to avoid warnings for the overflow. */
1387 if (TREE_OVERFLOW (result))
1388 TREE_OVERFLOW (result) = 0;
1390 return build_complex (TREE_TYPE (t), result, ovf);
1393 *non_constant_p = true;
1394 return t;
1397 /* Clean CONSTRUCTOR_NO_IMPLICIT_ZERO from CTOR and its sub-aggregates. */
1399 static void
1400 clear_no_implicit_zero (tree ctor)
1402 if (CONSTRUCTOR_NO_IMPLICIT_ZERO (ctor))
1404 CONSTRUCTOR_NO_IMPLICIT_ZERO (ctor) = false;
1405 tree elt; unsigned HOST_WIDE_INT idx;
1406 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (ctor), idx, elt)
1407 if (TREE_CODE (elt) == CONSTRUCTOR)
1408 clear_no_implicit_zero (elt);
1412 /* Subroutine of cxx_eval_constant_expression.
1413 Evaluate the call expression tree T in the context of OLD_CALL expression
1414 evaluation. */
1416 static tree
1417 cxx_eval_call_expression (const constexpr_ctx *ctx, tree t,
1418 bool lval,
1419 bool *non_constant_p, bool *overflow_p)
1421 location_t loc = EXPR_LOC_OR_LOC (t, input_location);
1422 tree fun = get_function_named_in_call (t);
1423 constexpr_call new_call = { NULL, NULL, NULL, 0 };
1424 bool depth_ok;
1426 if (fun == NULL_TREE)
1427 return cxx_eval_internal_function (ctx, t, lval,
1428 non_constant_p, overflow_p);
1430 if (TREE_CODE (fun) != FUNCTION_DECL)
1432 /* Might be a constexpr function pointer. */
1433 fun = cxx_eval_constant_expression (ctx, fun,
1434 /*lval*/false, non_constant_p,
1435 overflow_p);
1436 STRIP_NOPS (fun);
1437 if (TREE_CODE (fun) == ADDR_EXPR)
1438 fun = TREE_OPERAND (fun, 0);
1440 if (TREE_CODE (fun) != FUNCTION_DECL)
1442 if (!ctx->quiet && !*non_constant_p)
1443 error_at (loc, "expression %qE does not designate a constexpr "
1444 "function", fun);
1445 *non_constant_p = true;
1446 return t;
1448 if (DECL_CLONED_FUNCTION_P (fun))
1449 fun = DECL_CLONED_FUNCTION (fun);
1451 if (is_ubsan_builtin_p (fun))
1452 return void_node;
1454 if (is_builtin_fn (fun))
1455 return cxx_eval_builtin_function_call (ctx, t, fun,
1456 lval, non_constant_p, overflow_p);
1457 if (!DECL_DECLARED_CONSTEXPR_P (fun))
1459 if (!ctx->quiet)
1461 error_at (loc, "call to non-constexpr function %qD", fun);
1462 explain_invalid_constexpr_fn (fun);
1464 *non_constant_p = true;
1465 return t;
1468 constexpr_ctx new_ctx = *ctx;
1469 if (DECL_CONSTRUCTOR_P (fun) && !ctx->object
1470 && TREE_CODE (t) == AGGR_INIT_EXPR)
1472 /* We want to have an initialization target for an AGGR_INIT_EXPR.
1473 If we don't already have one in CTX, use the AGGR_INIT_EXPR_SLOT. */
1474 new_ctx.object = AGGR_INIT_EXPR_SLOT (t);
1475 tree ctor = new_ctx.ctor = build_constructor (DECL_CONTEXT (fun), NULL);
1476 CONSTRUCTOR_NO_IMPLICIT_ZERO (ctor) = true;
1477 ctx->values->put (new_ctx.object, ctor);
1478 ctx = &new_ctx;
1481 /* Shortcut trivial constructor/op=. */
1482 if (trivial_fn_p (fun))
1484 tree init = NULL_TREE;
1485 if (call_expr_nargs (t) == 2)
1486 init = convert_from_reference (get_nth_callarg (t, 1));
1487 else if (TREE_CODE (t) == AGGR_INIT_EXPR
1488 && AGGR_INIT_ZERO_FIRST (t))
1489 init = build_zero_init (DECL_CONTEXT (fun), NULL_TREE, false);
1490 if (init)
1492 tree op = get_nth_callarg (t, 0);
1493 if (is_dummy_object (op))
1494 op = ctx->object;
1495 else
1496 op = build1 (INDIRECT_REF, TREE_TYPE (TREE_TYPE (op)), op);
1497 tree set = build2 (MODIFY_EXPR, TREE_TYPE (op), op, init);
1498 new_ctx.call = &new_call;
1499 return cxx_eval_constant_expression (&new_ctx, set, lval,
1500 non_constant_p, overflow_p);
1504 /* We can't defer instantiating the function any longer. */
1505 if (!DECL_INITIAL (fun)
1506 && DECL_TEMPLOID_INSTANTIATION (fun))
1508 location_t save_loc = input_location;
1509 input_location = loc;
1510 ++function_depth;
1511 instantiate_decl (fun, /*defer_ok*/false, /*expl_inst*/false);
1512 --function_depth;
1513 input_location = save_loc;
1516 /* If in direct recursive call, optimize definition search. */
1517 if (ctx && ctx->call && ctx->call->fundef && ctx->call->fundef->decl == fun)
1518 new_call.fundef = ctx->call->fundef;
1519 else
1521 new_call.fundef = retrieve_constexpr_fundef (fun);
1522 if (new_call.fundef == NULL || new_call.fundef->body == NULL
1523 || fun == current_function_decl)
1525 if (!ctx->quiet)
1527 /* We need to check for current_function_decl here in case we're
1528 being called during cp_fold_function, because at that point
1529 DECL_INITIAL is set properly and we have a fundef but we
1530 haven't lowered invisirefs yet (c++/70344). */
1531 if (DECL_INITIAL (fun) == error_mark_node
1532 || fun == current_function_decl)
1533 error_at (loc, "%qD called in a constant expression before its "
1534 "definition is complete", fun);
1535 else if (DECL_INITIAL (fun))
1537 /* The definition of fun was somehow unsuitable. But pretend
1538 that lambda static thunks don't exist. */
1539 if (!lambda_static_thunk_p (fun))
1540 error_at (loc, "%qD called in a constant expression", fun);
1541 explain_invalid_constexpr_fn (fun);
1543 else
1544 error_at (loc, "%qD used before its definition", fun);
1546 *non_constant_p = true;
1547 return t;
1551 bool non_constant_args = false;
1552 cxx_bind_parameters_in_call (ctx, t, &new_call,
1553 non_constant_p, overflow_p, &non_constant_args);
1554 if (*non_constant_p)
1555 return t;
1557 depth_ok = push_cx_call_context (t);
1559 tree result = NULL_TREE;
1561 constexpr_call *entry = NULL;
1562 if (depth_ok && !non_constant_args)
1564 new_call.hash = iterative_hash_template_arg
1565 (new_call.bindings, constexpr_fundef_hasher::hash (new_call.fundef));
1567 /* If we have seen this call before, we are done. */
1568 maybe_initialize_constexpr_call_table ();
1569 constexpr_call **slot
1570 = constexpr_call_table->find_slot (&new_call, INSERT);
1571 entry = *slot;
1572 if (entry == NULL)
1574 /* We need to keep a pointer to the entry, not just the slot, as the
1575 slot can move in the call to cxx_eval_builtin_function_call. */
1576 *slot = entry = ggc_alloc<constexpr_call> ();
1577 *entry = new_call;
1579 /* Calls that are in progress have their result set to NULL,
1580 so that we can detect circular dependencies. */
1581 else if (entry->result == NULL)
1583 if (!ctx->quiet)
1584 error ("call has circular dependency");
1585 *non_constant_p = true;
1586 entry->result = result = error_mark_node;
1588 else
1589 result = entry->result;
1592 if (!depth_ok)
1594 if (!ctx->quiet)
1595 error ("constexpr evaluation depth exceeds maximum of %d (use "
1596 "-fconstexpr-depth= to increase the maximum)",
1597 max_constexpr_depth);
1598 *non_constant_p = true;
1599 result = error_mark_node;
1601 else
1603 if (result && result != error_mark_node)
1604 /* OK */;
1605 else if (!DECL_SAVED_TREE (fun))
1607 /* When at_eof >= 2, cgraph has started throwing away
1608 DECL_SAVED_TREE, so fail quietly. FIXME we get here because of
1609 late code generation for VEC_INIT_EXPR, which needs to be
1610 completely reconsidered. */
1611 gcc_assert (at_eof >= 2 && ctx->quiet);
1612 *non_constant_p = true;
1614 else
1616 tree body, parms, res;
1618 /* Reuse or create a new unshared copy of this function's body. */
1619 tree copy = get_fundef_copy (fun);
1620 body = TREE_PURPOSE (copy);
1621 parms = TREE_VALUE (copy);
1622 res = TREE_TYPE (copy);
1624 /* Associate the bindings with the remapped parms. */
1625 tree bound = new_call.bindings;
1626 tree remapped = parms;
1627 while (bound)
1629 tree oparm = TREE_PURPOSE (bound);
1630 tree arg = TREE_VALUE (bound);
1631 gcc_assert (DECL_NAME (remapped) == DECL_NAME (oparm));
1632 /* Don't share a CONSTRUCTOR that might be changed. */
1633 arg = unshare_constructor (arg);
1634 ctx->values->put (remapped, arg);
1635 bound = TREE_CHAIN (bound);
1636 remapped = DECL_CHAIN (remapped);
1638 /* Add the RESULT_DECL to the values map, too. */
1639 tree slot = NULL_TREE;
1640 if (DECL_BY_REFERENCE (res))
1642 slot = AGGR_INIT_EXPR_SLOT (t);
1643 tree addr = build_address (slot);
1644 addr = build_nop (TREE_TYPE (res), addr);
1645 ctx->values->put (res, addr);
1646 ctx->values->put (slot, NULL_TREE);
1648 else
1649 ctx->values->put (res, NULL_TREE);
1651 /* Track the callee's evaluated SAVE_EXPRs so that we can forget
1652 their values after the call. */
1653 constexpr_ctx ctx_with_save_exprs = *ctx;
1654 hash_set<tree> save_exprs;
1655 ctx_with_save_exprs.save_exprs = &save_exprs;
1656 ctx_with_save_exprs.call = &new_call;
1658 tree jump_target = NULL_TREE;
1659 cxx_eval_constant_expression (&ctx_with_save_exprs, body,
1660 lval, non_constant_p, overflow_p,
1661 &jump_target);
1663 if (DECL_CONSTRUCTOR_P (fun))
1664 /* This can be null for a subobject constructor call, in
1665 which case what we care about is the initialization
1666 side-effects rather than the value. We could get at the
1667 value by evaluating *this, but we don't bother; there's
1668 no need to put such a call in the hash table. */
1669 result = lval ? ctx->object : ctx->ctor;
1670 else if (VOID_TYPE_P (TREE_TYPE (res)))
1671 result = void_node;
1672 else
1674 result = *ctx->values->get (slot ? slot : res);
1675 if (result == NULL_TREE && !*non_constant_p)
1677 if (!ctx->quiet)
1678 error ("constexpr call flows off the end "
1679 "of the function");
1680 *non_constant_p = true;
1684 /* Forget the saved values of the callee's SAVE_EXPRs. */
1685 for (hash_set<tree>::iterator iter = save_exprs.begin();
1686 iter != save_exprs.end(); ++iter)
1687 ctx_with_save_exprs.values->remove (*iter);
1689 /* Remove the parms/result from the values map. Is it worth
1690 bothering to do this when the map itself is only live for
1691 one constexpr evaluation? If so, maybe also clear out
1692 other vars from call, maybe in BIND_EXPR handling? */
1693 ctx->values->remove (res);
1694 if (slot)
1695 ctx->values->remove (slot);
1696 for (tree parm = parms; parm; parm = TREE_CHAIN (parm))
1697 ctx->values->remove (parm);
1699 /* Make the unshared function copy we used available for re-use. */
1700 save_fundef_copy (fun, copy);
1703 if (result == error_mark_node)
1704 *non_constant_p = true;
1705 if (*non_constant_p || *overflow_p)
1706 result = error_mark_node;
1707 else if (!result)
1708 result = void_node;
1709 if (entry)
1710 entry->result = result;
1713 /* The result of a constexpr function must be completely initialized. */
1714 if (TREE_CODE (result) == CONSTRUCTOR)
1715 clear_no_implicit_zero (result);
1717 pop_cx_call_context ();
1718 return unshare_constructor (result);
1721 /* FIXME speed this up, it's taking 16% of compile time on sieve testcase. */
1723 bool
1724 reduced_constant_expression_p (tree t)
1726 switch (TREE_CODE (t))
1728 case PTRMEM_CST:
1729 /* Even if we can't lower this yet, it's constant. */
1730 return true;
1732 case CONSTRUCTOR:
1733 /* And we need to handle PTRMEM_CST wrapped in a CONSTRUCTOR. */
1734 tree elt; unsigned HOST_WIDE_INT idx;
1735 FOR_EACH_CONSTRUCTOR_VALUE (CONSTRUCTOR_ELTS (t), idx, elt)
1737 if (!elt)
1738 /* We're in the middle of initializing this element. */
1739 return false;
1740 if (!reduced_constant_expression_p (elt))
1741 return false;
1743 return true;
1745 default:
1746 /* FIXME are we calling this too much? */
1747 return initializer_constant_valid_p (t, TREE_TYPE (t)) != NULL_TREE;
1751 /* Some expressions may have constant operands but are not constant
1752 themselves, such as 1/0. Call this function (or rather, the macro
1753 following it) to check for that condition.
1755 We only call this in places that require an arithmetic constant, not in
1756 places where we might have a non-constant expression that can be a
1757 component of a constant expression, such as the address of a constexpr
1758 variable that might be dereferenced later. */
1760 static bool
1761 verify_constant (tree t, bool allow_non_constant, bool *non_constant_p,
1762 bool *overflow_p)
1764 if (!*non_constant_p && !reduced_constant_expression_p (t))
1766 if (!allow_non_constant)
1767 error ("%q+E is not a constant expression", t);
1768 *non_constant_p = true;
1770 if (TREE_OVERFLOW_P (t))
1772 if (!allow_non_constant)
1774 permerror (input_location, "overflow in constant expression");
1775 /* If we're being permissive (and are in an enforcing
1776 context), ignore the overflow. */
1777 if (flag_permissive)
1778 return *non_constant_p;
1780 *overflow_p = true;
1782 return *non_constant_p;
1785 /* Check whether the shift operation with code CODE and type TYPE on LHS
1786 and RHS is undefined. If it is, give an error with an explanation,
1787 and return true; return false otherwise. */
1789 static bool
1790 cxx_eval_check_shift_p (location_t loc, const constexpr_ctx *ctx,
1791 enum tree_code code, tree type, tree lhs, tree rhs)
1793 if ((code != LSHIFT_EXPR && code != RSHIFT_EXPR)
1794 || TREE_CODE (lhs) != INTEGER_CST
1795 || TREE_CODE (rhs) != INTEGER_CST)
1796 return false;
1798 tree lhstype = TREE_TYPE (lhs);
1799 unsigned HOST_WIDE_INT uprec = TYPE_PRECISION (TREE_TYPE (lhs));
1801 /* [expr.shift] The behavior is undefined if the right operand
1802 is negative, or greater than or equal to the length in bits
1803 of the promoted left operand. */
1804 if (tree_int_cst_sgn (rhs) == -1)
1806 if (!ctx->quiet)
1807 permerror (loc, "right operand of shift expression %q+E is negative",
1808 build2_loc (loc, code, type, lhs, rhs));
1809 return (!flag_permissive || ctx->quiet);
1811 if (compare_tree_int (rhs, uprec) >= 0)
1813 if (!ctx->quiet)
1814 permerror (loc, "right operand of shift expression %q+E is >= than "
1815 "the precision of the left operand",
1816 build2_loc (loc, code, type, lhs, rhs));
1817 return (!flag_permissive || ctx->quiet);
1820 /* The value of E1 << E2 is E1 left-shifted E2 bit positions; [...]
1821 if E1 has a signed type and non-negative value, and E1x2^E2 is
1822 representable in the corresponding unsigned type of the result type,
1823 then that value, converted to the result type, is the resulting value;
1824 otherwise, the behavior is undefined. */
1825 if (code == LSHIFT_EXPR && !TYPE_UNSIGNED (lhstype)
1826 && (cxx_dialect >= cxx11))
1828 if (tree_int_cst_sgn (lhs) == -1)
1830 if (!ctx->quiet)
1831 permerror (loc,
1832 "left operand of shift expression %q+E is negative",
1833 build2_loc (loc, code, type, lhs, rhs));
1834 return (!flag_permissive || ctx->quiet);
1836 /* For signed x << y the following:
1837 (unsigned) x >> ((prec (lhs) - 1) - y)
1838 if > 1, is undefined. The right-hand side of this formula
1839 is the highest bit of the LHS that can be set (starting from 0),
1840 so that the shift doesn't overflow. We then right-shift the LHS
1841 to see whether any other bit is set making the original shift
1842 undefined -- the result is not representable in the corresponding
1843 unsigned type. */
1844 tree t = build_int_cst (unsigned_type_node, uprec - 1);
1845 t = fold_build2 (MINUS_EXPR, unsigned_type_node, t, rhs);
1846 tree ulhs = fold_convert (unsigned_type_for (lhstype), lhs);
1847 t = fold_build2 (RSHIFT_EXPR, TREE_TYPE (ulhs), ulhs, t);
1848 if (tree_int_cst_lt (integer_one_node, t))
1850 if (!ctx->quiet)
1851 permerror (loc, "shift expression %q+E overflows",
1852 build2_loc (loc, code, type, lhs, rhs));
1853 return (!flag_permissive || ctx->quiet);
1856 return false;
1859 /* Subroutine of cxx_eval_constant_expression.
1860 Attempt to reduce the unary expression tree T to a compile time value.
1861 If successful, return the value. Otherwise issue a diagnostic
1862 and return error_mark_node. */
1864 static tree
1865 cxx_eval_unary_expression (const constexpr_ctx *ctx, tree t,
1866 bool /*lval*/,
1867 bool *non_constant_p, bool *overflow_p)
1869 tree r;
1870 tree orig_arg = TREE_OPERAND (t, 0);
1871 tree arg = cxx_eval_constant_expression (ctx, orig_arg, /*lval*/false,
1872 non_constant_p, overflow_p);
1873 VERIFY_CONSTANT (arg);
1874 location_t loc = EXPR_LOCATION (t);
1875 enum tree_code code = TREE_CODE (t);
1876 tree type = TREE_TYPE (t);
1877 r = fold_unary_loc (loc, code, type, arg);
1878 if (r == NULL_TREE)
1880 if (arg == orig_arg)
1881 r = t;
1882 else
1883 r = build1_loc (loc, code, type, arg);
1885 VERIFY_CONSTANT (r);
1886 return r;
1889 /* Helper function for cxx_eval_binary_expression. Try to optimize
1890 original POINTER_PLUS_EXPR T, LHS p+ RHS, return NULL_TREE if the
1891 generic folding should be used. */
1893 static tree
1894 cxx_fold_pointer_plus_expression (const constexpr_ctx *ctx, tree t,
1895 tree lhs, tree rhs, bool *non_constant_p,
1896 bool *overflow_p)
1898 STRIP_NOPS (lhs);
1899 if (TREE_CODE (lhs) != ADDR_EXPR)
1900 return NULL_TREE;
1902 lhs = TREE_OPERAND (lhs, 0);
1904 /* &A[i] p+ j => &A[i + j] */
1905 if (TREE_CODE (lhs) == ARRAY_REF
1906 && TREE_CODE (TREE_OPERAND (lhs, 1)) == INTEGER_CST
1907 && TREE_CODE (rhs) == INTEGER_CST
1908 && TYPE_SIZE_UNIT (TREE_TYPE (lhs))
1909 && TREE_CODE (TYPE_SIZE_UNIT (TREE_TYPE (lhs))) == INTEGER_CST)
1911 tree orig_type = TREE_TYPE (t);
1912 location_t loc = EXPR_LOCATION (t);
1913 tree type = TREE_TYPE (lhs);
1915 t = fold_convert_loc (loc, ssizetype, TREE_OPERAND (lhs, 1));
1916 tree nelts = array_type_nelts_top (TREE_TYPE (TREE_OPERAND (lhs, 0)));
1917 nelts = cxx_eval_constant_expression (ctx, nelts, false, non_constant_p,
1918 overflow_p);
1919 if (*non_constant_p)
1920 return NULL_TREE;
1921 /* Don't fold an out-of-bound access. */
1922 if (!tree_int_cst_le (t, nelts))
1923 return NULL_TREE;
1924 rhs = cp_fold_convert (ssizetype, rhs);
1925 /* Don't fold if rhs can't be divided exactly by TYPE_SIZE_UNIT.
1926 constexpr int A[1]; ... (char *)&A[0] + 1 */
1927 if (!integer_zerop (fold_build2_loc (loc, TRUNC_MOD_EXPR, sizetype,
1928 rhs, TYPE_SIZE_UNIT (type))))
1929 return NULL_TREE;
1930 /* Make sure to treat the second operand of POINTER_PLUS_EXPR
1931 as signed. */
1932 rhs = fold_build2_loc (loc, EXACT_DIV_EXPR, ssizetype, rhs,
1933 TYPE_SIZE_UNIT (type));
1934 t = size_binop_loc (loc, PLUS_EXPR, rhs, t);
1935 t = build4_loc (loc, ARRAY_REF, type, TREE_OPERAND (lhs, 0),
1936 t, NULL_TREE, NULL_TREE);
1937 t = cp_build_addr_expr (t, tf_warning_or_error);
1938 t = cp_fold_convert (orig_type, t);
1939 return cxx_eval_constant_expression (ctx, t, /*lval*/false,
1940 non_constant_p, overflow_p);
1943 return NULL_TREE;
1946 /* Subroutine of cxx_eval_constant_expression.
1947 Like cxx_eval_unary_expression, except for binary expressions. */
1949 static tree
1950 cxx_eval_binary_expression (const constexpr_ctx *ctx, tree t,
1951 bool /*lval*/,
1952 bool *non_constant_p, bool *overflow_p)
1954 tree r = NULL_TREE;
1955 tree orig_lhs = TREE_OPERAND (t, 0);
1956 tree orig_rhs = TREE_OPERAND (t, 1);
1957 tree lhs, rhs;
1958 lhs = cxx_eval_constant_expression (ctx, orig_lhs, /*lval*/false,
1959 non_constant_p, overflow_p);
1960 /* Don't VERIFY_CONSTANT here, it's unnecessary and will break pointer
1961 subtraction. */
1962 if (*non_constant_p)
1963 return t;
1964 rhs = cxx_eval_constant_expression (ctx, orig_rhs, /*lval*/false,
1965 non_constant_p, overflow_p);
1966 if (*non_constant_p)
1967 return t;
1969 location_t loc = EXPR_LOCATION (t);
1970 enum tree_code code = TREE_CODE (t);
1971 tree type = TREE_TYPE (t);
1973 if (code == EQ_EXPR || code == NE_EXPR)
1975 bool is_code_eq = (code == EQ_EXPR);
1977 if (TREE_CODE (lhs) == PTRMEM_CST
1978 && TREE_CODE (rhs) == PTRMEM_CST)
1979 r = constant_boolean_node (cp_tree_equal (lhs, rhs) == is_code_eq,
1980 type);
1981 else if ((TREE_CODE (lhs) == PTRMEM_CST
1982 || TREE_CODE (rhs) == PTRMEM_CST)
1983 && (null_member_pointer_value_p (lhs)
1984 || null_member_pointer_value_p (rhs)))
1985 r = constant_boolean_node (!is_code_eq, type);
1986 else if (TREE_CODE (lhs) == PTRMEM_CST)
1987 lhs = cplus_expand_constant (lhs);
1988 else if (TREE_CODE (rhs) == PTRMEM_CST)
1989 rhs = cplus_expand_constant (rhs);
1991 if (code == POINTER_PLUS_EXPR && !*non_constant_p
1992 && integer_zerop (lhs) && !integer_zerop (rhs))
1994 if (!ctx->quiet)
1995 error ("arithmetic involving a null pointer in %qE", lhs);
1996 return t;
1998 else if (code == POINTER_PLUS_EXPR)
1999 r = cxx_fold_pointer_plus_expression (ctx, t, lhs, rhs, non_constant_p,
2000 overflow_p);
2002 if (r == NULL_TREE)
2003 r = fold_binary_loc (loc, code, type, lhs, rhs);
2005 if (r == NULL_TREE)
2007 if (lhs == orig_lhs && rhs == orig_rhs)
2008 r = t;
2009 else
2010 r = build2_loc (loc, code, type, lhs, rhs);
2012 else if (cxx_eval_check_shift_p (loc, ctx, code, type, lhs, rhs))
2013 *non_constant_p = true;
2014 /* Don't VERIFY_CONSTANT if this might be dealing with a pointer to
2015 a local array in a constexpr function. */
2016 bool ptr = POINTER_TYPE_P (TREE_TYPE (lhs));
2017 if (!ptr)
2018 VERIFY_CONSTANT (r);
2019 return r;
2022 /* Subroutine of cxx_eval_constant_expression.
2023 Attempt to evaluate condition expressions. Dead branches are not
2024 looked into. */
2026 static tree
2027 cxx_eval_conditional_expression (const constexpr_ctx *ctx, tree t,
2028 bool lval,
2029 bool *non_constant_p, bool *overflow_p,
2030 tree *jump_target)
2032 tree val = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0),
2033 /*lval*/false,
2034 non_constant_p, overflow_p);
2035 VERIFY_CONSTANT (val);
2036 /* Don't VERIFY_CONSTANT the other operands. */
2037 if (integer_zerop (val))
2038 return cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 2),
2039 lval,
2040 non_constant_p, overflow_p,
2041 jump_target);
2042 return cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 1),
2043 lval,
2044 non_constant_p, overflow_p,
2045 jump_target);
2048 /* Returns less than, equal to, or greater than zero if KEY is found to be
2049 less than, to match, or to be greater than the constructor_elt's INDEX. */
2051 static int
2052 array_index_cmp (tree key, tree index)
2054 gcc_assert (TREE_CODE (key) == INTEGER_CST);
2056 switch (TREE_CODE (index))
2058 case INTEGER_CST:
2059 return tree_int_cst_compare (key, index);
2060 case RANGE_EXPR:
2062 tree lo = TREE_OPERAND (index, 0);
2063 tree hi = TREE_OPERAND (index, 1);
2064 if (tree_int_cst_lt (key, lo))
2065 return -1;
2066 else if (tree_int_cst_lt (hi, key))
2067 return 1;
2068 else
2069 return 0;
2071 default:
2072 gcc_unreachable ();
2076 /* Returns the index of the constructor_elt of ARY which matches DINDEX, or -1
2077 if none. If INSERT is true, insert a matching element rather than fail. */
2079 static HOST_WIDE_INT
2080 find_array_ctor_elt (tree ary, tree dindex, bool insert = false)
2082 if (tree_int_cst_sgn (dindex) < 0)
2083 return -1;
2085 unsigned HOST_WIDE_INT i = tree_to_uhwi (dindex);
2086 vec<constructor_elt, va_gc> *elts = CONSTRUCTOR_ELTS (ary);
2087 unsigned HOST_WIDE_INT len = vec_safe_length (elts);
2089 unsigned HOST_WIDE_INT end = len;
2090 unsigned HOST_WIDE_INT begin = 0;
2092 /* If the last element of the CONSTRUCTOR has its own index, we can assume
2093 that the same is true of the other elements and index directly. */
2094 if (end > 0)
2096 tree cindex = (*elts)[end-1].index;
2097 if (TREE_CODE (cindex) == INTEGER_CST
2098 && compare_tree_int (cindex, end-1) == 0)
2100 if (i < end)
2101 return i;
2102 else
2103 begin = end;
2107 /* Otherwise, find a matching index by means of a binary search. */
2108 while (begin != end)
2110 unsigned HOST_WIDE_INT middle = (begin + end) / 2;
2111 constructor_elt &elt = (*elts)[middle];
2112 tree idx = elt.index;
2114 int cmp = array_index_cmp (dindex, idx);
2115 if (cmp < 0)
2116 end = middle;
2117 else if (cmp > 0)
2118 begin = middle + 1;
2119 else
2121 if (insert && TREE_CODE (idx) == RANGE_EXPR)
2123 /* We need to split the range. */
2124 constructor_elt e;
2125 tree lo = TREE_OPERAND (idx, 0);
2126 tree hi = TREE_OPERAND (idx, 1);
2127 if (tree_int_cst_lt (lo, dindex))
2129 /* There are still some lower elts; shorten the range. */
2130 tree new_hi = int_const_binop (MINUS_EXPR, dindex,
2131 size_one_node);
2132 if (tree_int_cst_equal (lo, new_hi))
2133 /* Only one element left, no longer a range. */
2134 elt.index = lo;
2135 else
2136 TREE_OPERAND (idx, 1) = new_hi;
2137 /* Append the element we want to insert. */
2138 ++middle;
2139 e.index = dindex;
2140 e.value = unshare_constructor (elt.value);
2141 vec_safe_insert (CONSTRUCTOR_ELTS (ary), middle, e);
2143 else
2144 /* No lower elts, the range elt is now ours. */
2145 elt.index = dindex;
2147 if (tree_int_cst_lt (dindex, hi))
2149 /* There are still some higher elts; append a range. */
2150 tree new_lo = int_const_binop (PLUS_EXPR, dindex,
2151 size_one_node);
2152 if (tree_int_cst_equal (new_lo, hi))
2153 e.index = hi;
2154 else
2155 e.index = build2 (RANGE_EXPR, sizetype, new_lo, hi);
2156 e.value = unshare_constructor (elt.value);
2157 vec_safe_insert (CONSTRUCTOR_ELTS (ary), middle+1, e);
2160 return middle;
2164 if (insert)
2166 constructor_elt e = { dindex, NULL_TREE };
2167 vec_safe_insert (CONSTRUCTOR_ELTS (ary), end, e);
2168 return end;
2171 return -1;
2174 /* Under the control of CTX, issue a detailed diagnostic for
2175 an out-of-bounds subscript INDEX into the expression ARRAY. */
2177 static void
2178 diag_array_subscript (const constexpr_ctx *ctx, tree array, tree index)
2180 if (!ctx->quiet)
2182 tree arraytype = TREE_TYPE (array);
2184 /* Convert the unsigned array subscript to a signed integer to avoid
2185 printing huge numbers for small negative values. */
2186 tree sidx = fold_convert (ssizetype, index);
2187 if (DECL_P (array))
2189 error ("array subscript value %qE is outside the bounds "
2190 "of array %qD of type %qT", sidx, array, arraytype);
2191 inform (DECL_SOURCE_LOCATION (array), "declared here");
2193 else
2194 error ("array subscript value %qE is outside the bounds "
2195 "of array type %qT", sidx, arraytype);
2199 /* Extract element INDEX consisting of CHARS_PER_ELT chars from
2200 STRING_CST STRING. */
2202 static tree
2203 extract_string_elt (tree string, unsigned chars_per_elt, unsigned index)
2205 tree type = cv_unqualified (TREE_TYPE (TREE_TYPE (string)));
2206 tree r;
2208 if (chars_per_elt == 1)
2209 r = build_int_cst (type, TREE_STRING_POINTER (string)[index]);
2210 else
2212 const unsigned char *ptr
2213 = ((const unsigned char *)TREE_STRING_POINTER (string)
2214 + index * chars_per_elt);
2215 r = native_interpret_expr (type, ptr, chars_per_elt);
2217 return r;
2220 /* Subroutine of cxx_eval_constant_expression.
2221 Attempt to reduce a reference to an array slot. */
2223 static tree
2224 cxx_eval_array_reference (const constexpr_ctx *ctx, tree t,
2225 bool lval,
2226 bool *non_constant_p, bool *overflow_p)
2228 tree oldary = TREE_OPERAND (t, 0);
2229 tree ary = cxx_eval_constant_expression (ctx, oldary,
2230 lval,
2231 non_constant_p, overflow_p);
2232 tree index, oldidx;
2233 HOST_WIDE_INT i = 0;
2234 tree elem_type = NULL_TREE;
2235 unsigned len = 0, elem_nchars = 1;
2236 if (*non_constant_p)
2237 return t;
2238 oldidx = TREE_OPERAND (t, 1);
2239 index = cxx_eval_constant_expression (ctx, oldidx,
2240 false,
2241 non_constant_p, overflow_p);
2242 VERIFY_CONSTANT (index);
2243 if (!lval)
2245 elem_type = TREE_TYPE (TREE_TYPE (ary));
2246 if (TREE_CODE (ary) == VIEW_CONVERT_EXPR
2247 && VECTOR_TYPE_P (TREE_TYPE (TREE_OPERAND (ary, 0)))
2248 && TREE_TYPE (t) == TREE_TYPE (TREE_TYPE (TREE_OPERAND (ary, 0))))
2249 ary = TREE_OPERAND (ary, 0);
2250 if (TREE_CODE (ary) == CONSTRUCTOR)
2251 len = CONSTRUCTOR_NELTS (ary);
2252 else if (TREE_CODE (ary) == STRING_CST)
2254 elem_nchars = (TYPE_PRECISION (elem_type)
2255 / TYPE_PRECISION (char_type_node));
2256 len = (unsigned) TREE_STRING_LENGTH (ary) / elem_nchars;
2258 else if (TREE_CODE (ary) == VECTOR_CST)
2259 len = VECTOR_CST_NELTS (ary);
2260 else
2262 /* We can't do anything with other tree codes, so use
2263 VERIFY_CONSTANT to complain and fail. */
2264 VERIFY_CONSTANT (ary);
2265 gcc_unreachable ();
2268 if (!tree_fits_shwi_p (index)
2269 || (i = tree_to_shwi (index)) < 0)
2271 diag_array_subscript (ctx, ary, index);
2272 *non_constant_p = true;
2273 return t;
2277 tree nelts;
2278 if (TREE_CODE (TREE_TYPE (ary)) == ARRAY_TYPE)
2279 nelts = array_type_nelts_top (TREE_TYPE (ary));
2280 else if (VECTOR_TYPE_P (TREE_TYPE (ary)))
2281 nelts = size_int (TYPE_VECTOR_SUBPARTS (TREE_TYPE (ary)));
2282 else
2283 gcc_unreachable ();
2285 /* For VLAs, the number of elements won't be an integer constant. */
2286 nelts = cxx_eval_constant_expression (ctx, nelts, false, non_constant_p,
2287 overflow_p);
2288 VERIFY_CONSTANT (nelts);
2289 if ((lval
2290 ? !tree_int_cst_le (index, nelts)
2291 : !tree_int_cst_lt (index, nelts))
2292 || tree_int_cst_sgn (index) < 0)
2294 diag_array_subscript (ctx, ary, index);
2295 *non_constant_p = true;
2296 return t;
2299 if (lval && ary == oldary && index == oldidx)
2300 return t;
2301 else if (lval)
2302 return build4 (ARRAY_REF, TREE_TYPE (t), ary, index, NULL, NULL);
2304 bool found;
2305 if (TREE_CODE (ary) == CONSTRUCTOR)
2307 HOST_WIDE_INT ix = find_array_ctor_elt (ary, index);
2308 found = (ix >= 0);
2309 if (found)
2310 i = ix;
2312 else
2313 found = (i < len);
2315 if (found)
2317 tree r;
2318 if (TREE_CODE (ary) == CONSTRUCTOR)
2319 r = (*CONSTRUCTOR_ELTS (ary))[i].value;
2320 else if (TREE_CODE (ary) == VECTOR_CST)
2321 r = VECTOR_CST_ELT (ary, i);
2322 else
2323 r = extract_string_elt (ary, elem_nchars, i);
2325 if (r)
2326 /* Don't VERIFY_CONSTANT here. */
2327 return r;
2329 /* Otherwise the element doesn't have a value yet. */
2332 /* Not found. */
2334 if (TREE_CODE (ary) == CONSTRUCTOR
2335 && CONSTRUCTOR_NO_IMPLICIT_ZERO (ary))
2337 /* 'ary' is part of the aggregate initializer we're currently
2338 building; if there's no initializer for this element yet,
2339 that's an error. */
2340 if (!ctx->quiet)
2341 error ("accessing uninitialized array element");
2342 *non_constant_p = true;
2343 return t;
2346 /* If it's within the array bounds but doesn't have an explicit
2347 initializer, it's value-initialized. */
2348 tree val = build_value_init (elem_type, tf_warning_or_error);
2349 return cxx_eval_constant_expression (ctx, val, lval, non_constant_p,
2350 overflow_p);
2353 /* Subroutine of cxx_eval_constant_expression.
2354 Attempt to reduce a field access of a value of class type. */
2356 static tree
2357 cxx_eval_component_reference (const constexpr_ctx *ctx, tree t,
2358 bool lval,
2359 bool *non_constant_p, bool *overflow_p)
2361 unsigned HOST_WIDE_INT i;
2362 tree field;
2363 tree value;
2364 tree part = TREE_OPERAND (t, 1);
2365 tree orig_whole = TREE_OPERAND (t, 0);
2366 tree whole = cxx_eval_constant_expression (ctx, orig_whole,
2367 lval,
2368 non_constant_p, overflow_p);
2369 if (TREE_CODE (whole) == INDIRECT_REF
2370 && integer_zerop (TREE_OPERAND (whole, 0))
2371 && !ctx->quiet)
2372 error ("dereferencing a null pointer in %qE", orig_whole);
2374 if (TREE_CODE (whole) == PTRMEM_CST)
2375 whole = cplus_expand_constant (whole);
2376 if (whole == orig_whole)
2377 return t;
2378 if (lval)
2379 return fold_build3 (COMPONENT_REF, TREE_TYPE (t),
2380 whole, part, NULL_TREE);
2381 /* Don't VERIFY_CONSTANT here; we only want to check that we got a
2382 CONSTRUCTOR. */
2383 if (!*non_constant_p && TREE_CODE (whole) != CONSTRUCTOR)
2385 if (!ctx->quiet)
2386 error ("%qE is not a constant expression", orig_whole);
2387 *non_constant_p = true;
2389 if (DECL_MUTABLE_P (part))
2391 if (!ctx->quiet)
2392 error ("mutable %qD is not usable in a constant expression", part);
2393 *non_constant_p = true;
2395 if (*non_constant_p)
2396 return t;
2397 bool pmf = TYPE_PTRMEMFUNC_P (TREE_TYPE (whole));
2398 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (whole), i, field, value)
2400 /* Use name match for PMF fields, as a variant will have a
2401 different FIELD_DECL with a different type. */
2402 if (pmf ? DECL_NAME (field) == DECL_NAME (part)
2403 : field == part)
2405 if (value)
2406 return value;
2407 else
2408 /* We're in the middle of initializing it. */
2409 break;
2412 if (TREE_CODE (TREE_TYPE (whole)) == UNION_TYPE
2413 && CONSTRUCTOR_NELTS (whole) > 0)
2415 /* DR 1188 says we don't have to deal with this. */
2416 if (!ctx->quiet)
2417 error ("accessing %qD member instead of initialized %qD member in "
2418 "constant expression", part, CONSTRUCTOR_ELT (whole, 0)->index);
2419 *non_constant_p = true;
2420 return t;
2423 /* We only create a CONSTRUCTOR for a subobject when we modify it, so empty
2424 classes never get represented; throw together a value now. */
2425 if (is_really_empty_class (TREE_TYPE (t)))
2426 return build_constructor (TREE_TYPE (t), NULL);
2428 gcc_assert (DECL_CONTEXT (part) == TYPE_MAIN_VARIANT (TREE_TYPE (whole)));
2430 if (CONSTRUCTOR_NO_IMPLICIT_ZERO (whole))
2432 /* 'whole' is part of the aggregate initializer we're currently
2433 building; if there's no initializer for this member yet, that's an
2434 error. */
2435 if (!ctx->quiet)
2436 error ("accessing uninitialized member %qD", part);
2437 *non_constant_p = true;
2438 return t;
2441 /* If there's no explicit init for this field, it's value-initialized. */
2442 value = build_value_init (TREE_TYPE (t), tf_warning_or_error);
2443 return cxx_eval_constant_expression (ctx, value,
2444 lval,
2445 non_constant_p, overflow_p);
2448 /* Subroutine of cxx_eval_constant_expression.
2449 Attempt to reduce a field access of a value of class type that is
2450 expressed as a BIT_FIELD_REF. */
2452 static tree
2453 cxx_eval_bit_field_ref (const constexpr_ctx *ctx, tree t,
2454 bool lval,
2455 bool *non_constant_p, bool *overflow_p)
2457 tree orig_whole = TREE_OPERAND (t, 0);
2458 tree retval, fldval, utype, mask;
2459 bool fld_seen = false;
2460 HOST_WIDE_INT istart, isize;
2461 tree whole = cxx_eval_constant_expression (ctx, orig_whole,
2462 lval,
2463 non_constant_p, overflow_p);
2464 tree start, field, value;
2465 unsigned HOST_WIDE_INT i;
2467 if (whole == orig_whole)
2468 return t;
2469 /* Don't VERIFY_CONSTANT here; we only want to check that we got a
2470 CONSTRUCTOR. */
2471 if (!*non_constant_p
2472 && TREE_CODE (whole) != VECTOR_CST
2473 && TREE_CODE (whole) != CONSTRUCTOR)
2475 if (!ctx->quiet)
2476 error ("%qE is not a constant expression", orig_whole);
2477 *non_constant_p = true;
2479 if (*non_constant_p)
2480 return t;
2482 if (TREE_CODE (whole) == VECTOR_CST)
2483 return fold_ternary (BIT_FIELD_REF, TREE_TYPE (t), whole,
2484 TREE_OPERAND (t, 1), TREE_OPERAND (t, 2));
2486 start = TREE_OPERAND (t, 2);
2487 istart = tree_to_shwi (start);
2488 isize = tree_to_shwi (TREE_OPERAND (t, 1));
2489 utype = TREE_TYPE (t);
2490 if (!TYPE_UNSIGNED (utype))
2491 utype = build_nonstandard_integer_type (TYPE_PRECISION (utype), 1);
2492 retval = build_int_cst (utype, 0);
2493 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (whole), i, field, value)
2495 tree bitpos = bit_position (field);
2496 if (bitpos == start && DECL_SIZE (field) == TREE_OPERAND (t, 1))
2497 return value;
2498 if (TREE_CODE (TREE_TYPE (field)) == INTEGER_TYPE
2499 && TREE_CODE (value) == INTEGER_CST
2500 && tree_fits_shwi_p (bitpos)
2501 && tree_fits_shwi_p (DECL_SIZE (field)))
2503 HOST_WIDE_INT bit = tree_to_shwi (bitpos);
2504 HOST_WIDE_INT sz = tree_to_shwi (DECL_SIZE (field));
2505 HOST_WIDE_INT shift;
2506 if (bit >= istart && bit + sz <= istart + isize)
2508 fldval = fold_convert (utype, value);
2509 mask = build_int_cst_type (utype, -1);
2510 mask = fold_build2 (LSHIFT_EXPR, utype, mask,
2511 size_int (TYPE_PRECISION (utype) - sz));
2512 mask = fold_build2 (RSHIFT_EXPR, utype, mask,
2513 size_int (TYPE_PRECISION (utype) - sz));
2514 fldval = fold_build2 (BIT_AND_EXPR, utype, fldval, mask);
2515 shift = bit - istart;
2516 if (BYTES_BIG_ENDIAN)
2517 shift = TYPE_PRECISION (utype) - shift - sz;
2518 fldval = fold_build2 (LSHIFT_EXPR, utype, fldval,
2519 size_int (shift));
2520 retval = fold_build2 (BIT_IOR_EXPR, utype, retval, fldval);
2521 fld_seen = true;
2525 if (fld_seen)
2526 return fold_convert (TREE_TYPE (t), retval);
2527 gcc_unreachable ();
2528 return error_mark_node;
2531 /* Subroutine of cxx_eval_constant_expression.
2532 Evaluate a short-circuited logical expression T in the context
2533 of a given constexpr CALL. BAILOUT_VALUE is the value for
2534 early return. CONTINUE_VALUE is used here purely for
2535 sanity check purposes. */
2537 static tree
2538 cxx_eval_logical_expression (const constexpr_ctx *ctx, tree t,
2539 tree bailout_value, tree continue_value,
2540 bool lval,
2541 bool *non_constant_p, bool *overflow_p)
2543 tree r;
2544 tree lhs = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0),
2545 lval,
2546 non_constant_p, overflow_p);
2547 VERIFY_CONSTANT (lhs);
2548 if (tree_int_cst_equal (lhs, bailout_value))
2549 return lhs;
2550 gcc_assert (tree_int_cst_equal (lhs, continue_value));
2551 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 1),
2552 lval, non_constant_p,
2553 overflow_p);
2554 VERIFY_CONSTANT (r);
2555 return r;
2558 /* REF is a COMPONENT_REF designating a particular field. V is a vector of
2559 CONSTRUCTOR elements to initialize (part of) an object containing that
2560 field. Return a pointer to the constructor_elt corresponding to the
2561 initialization of the field. */
2563 static constructor_elt *
2564 base_field_constructor_elt (vec<constructor_elt, va_gc> *v, tree ref)
2566 tree aggr = TREE_OPERAND (ref, 0);
2567 tree field = TREE_OPERAND (ref, 1);
2568 HOST_WIDE_INT i;
2569 constructor_elt *ce;
2571 gcc_assert (TREE_CODE (ref) == COMPONENT_REF);
2573 if (TREE_CODE (aggr) == COMPONENT_REF)
2575 constructor_elt *base_ce
2576 = base_field_constructor_elt (v, aggr);
2577 v = CONSTRUCTOR_ELTS (base_ce->value);
2580 for (i = 0; vec_safe_iterate (v, i, &ce); ++i)
2581 if (ce->index == field)
2582 return ce;
2584 gcc_unreachable ();
2585 return NULL;
2588 /* Some of the expressions fed to the constexpr mechanism are calls to
2589 constructors, which have type void. In that case, return the type being
2590 initialized by the constructor. */
2592 static tree
2593 initialized_type (tree t)
2595 if (TYPE_P (t))
2596 return t;
2597 tree type = cv_unqualified (TREE_TYPE (t));
2598 if (TREE_CODE (t) == CALL_EXPR || TREE_CODE (t) == AGGR_INIT_EXPR)
2600 /* A constructor call has void type, so we need to look deeper. */
2601 tree fn = get_function_named_in_call (t);
2602 if (fn && TREE_CODE (fn) == FUNCTION_DECL
2603 && DECL_CXX_CONSTRUCTOR_P (fn))
2604 type = DECL_CONTEXT (fn);
2606 return type;
2609 /* We're about to initialize element INDEX of an array or class from VALUE.
2610 Set up NEW_CTX appropriately by adjusting .object to refer to the
2611 subobject and creating a new CONSTRUCTOR if the element is itself
2612 a class or array. */
2614 static void
2615 init_subob_ctx (const constexpr_ctx *ctx, constexpr_ctx &new_ctx,
2616 tree index, tree &value)
2618 new_ctx = *ctx;
2620 if (index && TREE_CODE (index) != INTEGER_CST
2621 && TREE_CODE (index) != FIELD_DECL)
2622 /* This won't have an element in the new CONSTRUCTOR. */
2623 return;
2625 tree type = initialized_type (value);
2626 if (!AGGREGATE_TYPE_P (type) && !VECTOR_TYPE_P (type))
2627 /* A non-aggregate member doesn't get its own CONSTRUCTOR. */
2628 return;
2630 /* The sub-aggregate initializer might contain a placeholder;
2631 update object to refer to the subobject and ctor to refer to
2632 the (newly created) sub-initializer. */
2633 if (ctx->object)
2634 new_ctx.object = build_ctor_subob_ref (index, type, ctx->object);
2635 tree elt = build_constructor (type, NULL);
2636 CONSTRUCTOR_NO_IMPLICIT_ZERO (elt) = true;
2637 new_ctx.ctor = elt;
2639 if (TREE_CODE (value) == TARGET_EXPR)
2640 /* Avoid creating another CONSTRUCTOR when we expand the TARGET_EXPR. */
2641 value = TARGET_EXPR_INITIAL (value);
2644 /* We're about to process an initializer for a class or array TYPE. Make
2645 sure that CTX is set up appropriately. */
2647 static void
2648 verify_ctor_sanity (const constexpr_ctx *ctx, tree type)
2650 /* We don't bother building a ctor for an empty base subobject. */
2651 if (is_empty_class (type))
2652 return;
2654 /* We're in the middle of an initializer that might involve placeholders;
2655 our caller should have created a CONSTRUCTOR for us to put the
2656 initializer into. We will either return that constructor or T. */
2657 gcc_assert (ctx->ctor);
2658 gcc_assert (same_type_ignoring_top_level_qualifiers_p
2659 (type, TREE_TYPE (ctx->ctor)));
2660 /* We used to check that ctx->ctor was empty, but that isn't the case when
2661 the object is zero-initialized before calling the constructor. */
2662 if (ctx->object)
2664 tree otype = TREE_TYPE (ctx->object);
2665 gcc_assert (same_type_ignoring_top_level_qualifiers_p (type, otype)
2666 /* Handle flexible array members. */
2667 || (TREE_CODE (otype) == ARRAY_TYPE
2668 && TYPE_DOMAIN (otype) == NULL_TREE
2669 && TREE_CODE (type) == ARRAY_TYPE
2670 && (same_type_ignoring_top_level_qualifiers_p
2671 (TREE_TYPE (type), TREE_TYPE (otype)))));
2673 gcc_assert (!ctx->object || !DECL_P (ctx->object)
2674 || *(ctx->values->get (ctx->object)) == ctx->ctor);
2677 /* Subroutine of cxx_eval_constant_expression.
2678 The expression tree T denotes a C-style array or a C-style
2679 aggregate. Reduce it to a constant expression. */
2681 static tree
2682 cxx_eval_bare_aggregate (const constexpr_ctx *ctx, tree t,
2683 bool lval,
2684 bool *non_constant_p, bool *overflow_p)
2686 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (t);
2687 bool changed = false;
2688 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (t));
2689 tree type = TREE_TYPE (t);
2691 constexpr_ctx new_ctx;
2692 if (TYPE_PTRMEMFUNC_P (type) || VECTOR_TYPE_P (type))
2694 /* We don't really need the ctx->ctor business for a PMF or
2695 vector, but it's simpler to use the same code. */
2696 new_ctx = *ctx;
2697 new_ctx.ctor = build_constructor (type, NULL);
2698 new_ctx.object = NULL_TREE;
2699 ctx = &new_ctx;
2701 verify_ctor_sanity (ctx, type);
2702 vec<constructor_elt, va_gc> **p = &CONSTRUCTOR_ELTS (ctx->ctor);
2703 vec_alloc (*p, vec_safe_length (v));
2705 unsigned i;
2706 tree index, value;
2707 bool constant_p = true;
2708 bool side_effects_p = false;
2709 FOR_EACH_CONSTRUCTOR_ELT (v, i, index, value)
2711 tree orig_value = value;
2712 init_subob_ctx (ctx, new_ctx, index, value);
2713 if (new_ctx.ctor != ctx->ctor)
2714 /* If we built a new CONSTRUCTOR, attach it now so that other
2715 initializers can refer to it. */
2716 CONSTRUCTOR_APPEND_ELT (*p, index, new_ctx.ctor);
2717 tree elt = cxx_eval_constant_expression (&new_ctx, value,
2718 lval,
2719 non_constant_p, overflow_p);
2720 /* Don't VERIFY_CONSTANT here. */
2721 if (ctx->quiet && *non_constant_p)
2722 break;
2723 if (elt != orig_value)
2724 changed = true;
2726 if (!TREE_CONSTANT (elt))
2727 constant_p = false;
2728 if (TREE_SIDE_EFFECTS (elt))
2729 side_effects_p = true;
2730 if (index && TREE_CODE (index) == COMPONENT_REF)
2732 /* This is an initialization of a vfield inside a base
2733 subaggregate that we already initialized; push this
2734 initialization into the previous initialization. */
2735 constructor_elt *inner = base_field_constructor_elt (*p, index);
2736 inner->value = elt;
2737 changed = true;
2739 else if (index
2740 && (TREE_CODE (index) == NOP_EXPR
2741 || TREE_CODE (index) == POINTER_PLUS_EXPR))
2743 /* This is an initializer for an empty base; now that we've
2744 checked that it's constant, we can ignore it. */
2745 gcc_assert (is_empty_class (TREE_TYPE (TREE_TYPE (index))));
2746 changed = true;
2748 else if (new_ctx.ctor != ctx->ctor)
2750 /* We appended this element above; update the value. */
2751 gcc_assert ((*p)->last().index == index);
2752 (*p)->last().value = elt;
2754 else
2755 CONSTRUCTOR_APPEND_ELT (*p, index, elt);
2757 if (*non_constant_p || !changed)
2758 return t;
2759 t = ctx->ctor;
2760 /* We're done building this CONSTRUCTOR, so now we can interpret an
2761 element without an explicit initializer as value-initialized. */
2762 CONSTRUCTOR_NO_IMPLICIT_ZERO (t) = false;
2763 TREE_CONSTANT (t) = constant_p;
2764 TREE_SIDE_EFFECTS (t) = side_effects_p;
2765 if (VECTOR_TYPE_P (type))
2766 t = fold (t);
2767 return t;
2770 /* Subroutine of cxx_eval_constant_expression.
2771 The expression tree T is a VEC_INIT_EXPR which denotes the desired
2772 initialization of a non-static data member of array type. Reduce it to a
2773 CONSTRUCTOR.
2775 Note that apart from value-initialization (when VALUE_INIT is true),
2776 this is only intended to support value-initialization and the
2777 initializations done by defaulted constructors for classes with
2778 non-static data members of array type. In this case, VEC_INIT_EXPR_INIT
2779 will either be NULL_TREE for the default constructor, or a COMPONENT_REF
2780 for the copy/move constructor. */
2782 static tree
2783 cxx_eval_vec_init_1 (const constexpr_ctx *ctx, tree atype, tree init,
2784 bool value_init, bool lval,
2785 bool *non_constant_p, bool *overflow_p)
2787 tree elttype = TREE_TYPE (atype);
2788 unsigned HOST_WIDE_INT max = tree_to_uhwi (array_type_nelts_top (atype));
2789 verify_ctor_sanity (ctx, atype);
2790 vec<constructor_elt, va_gc> **p = &CONSTRUCTOR_ELTS (ctx->ctor);
2791 vec_alloc (*p, max + 1);
2792 bool pre_init = false;
2793 unsigned HOST_WIDE_INT i;
2795 /* For the default constructor, build up a call to the default
2796 constructor of the element type. We only need to handle class types
2797 here, as for a constructor to be constexpr, all members must be
2798 initialized, which for a defaulted default constructor means they must
2799 be of a class type with a constexpr default constructor. */
2800 if (TREE_CODE (elttype) == ARRAY_TYPE)
2801 /* We only do this at the lowest level. */;
2802 else if (value_init)
2804 init = build_value_init (elttype, tf_warning_or_error);
2805 pre_init = true;
2807 else if (!init)
2809 vec<tree, va_gc> *argvec = make_tree_vector ();
2810 init = build_special_member_call (NULL_TREE, complete_ctor_identifier,
2811 &argvec, elttype, LOOKUP_NORMAL,
2812 tf_warning_or_error);
2813 release_tree_vector (argvec);
2814 init = build_aggr_init_expr (TREE_TYPE (init), init);
2815 pre_init = true;
2818 for (i = 0; i < max; ++i)
2820 tree idx = build_int_cst (size_type_node, i);
2821 tree eltinit;
2822 bool reuse = false;
2823 constexpr_ctx new_ctx;
2824 init_subob_ctx (ctx, new_ctx, idx, pre_init ? init : elttype);
2825 if (new_ctx.ctor != ctx->ctor)
2826 CONSTRUCTOR_APPEND_ELT (*p, idx, new_ctx.ctor);
2827 if (TREE_CODE (elttype) == ARRAY_TYPE)
2829 /* A multidimensional array; recurse. */
2830 if (value_init || init == NULL_TREE)
2832 eltinit = NULL_TREE;
2833 reuse = i == 0;
2835 else
2836 eltinit = cp_build_array_ref (input_location, init, idx,
2837 tf_warning_or_error);
2838 eltinit = cxx_eval_vec_init_1 (&new_ctx, elttype, eltinit, value_init,
2839 lval,
2840 non_constant_p, overflow_p);
2842 else if (pre_init)
2844 /* Initializing an element using value or default initialization
2845 we just pre-built above. */
2846 eltinit = cxx_eval_constant_expression (&new_ctx, init, lval,
2847 non_constant_p, overflow_p);
2848 reuse = i == 0;
2850 else
2852 /* Copying an element. */
2853 gcc_assert (same_type_ignoring_top_level_qualifiers_p
2854 (atype, TREE_TYPE (init)));
2855 eltinit = cp_build_array_ref (input_location, init, idx,
2856 tf_warning_or_error);
2857 if (!lvalue_p (init))
2858 eltinit = move (eltinit);
2859 eltinit = force_rvalue (eltinit, tf_warning_or_error);
2860 eltinit = (cxx_eval_constant_expression
2861 (&new_ctx, eltinit, lval,
2862 non_constant_p, overflow_p));
2864 if (*non_constant_p && !ctx->quiet)
2865 break;
2866 if (new_ctx.ctor != ctx->ctor)
2868 /* We appended this element above; update the value. */
2869 gcc_assert ((*p)->last().index == idx);
2870 (*p)->last().value = eltinit;
2872 else
2873 CONSTRUCTOR_APPEND_ELT (*p, idx, eltinit);
2874 /* Reuse the result of cxx_eval_constant_expression call
2875 from the first iteration to all others if it is a constant
2876 initializer that doesn't require relocations. */
2877 if (reuse
2878 && max > 1
2879 && (initializer_constant_valid_p (eltinit, TREE_TYPE (eltinit))
2880 == null_pointer_node))
2882 if (new_ctx.ctor != ctx->ctor)
2883 eltinit = new_ctx.ctor;
2884 for (i = 1; i < max; ++i)
2886 idx = build_int_cst (size_type_node, i);
2887 CONSTRUCTOR_APPEND_ELT (*p, idx, unshare_constructor (eltinit));
2889 break;
2893 if (!*non_constant_p)
2895 init = ctx->ctor;
2896 CONSTRUCTOR_NO_IMPLICIT_ZERO (init) = false;
2898 return init;
2901 static tree
2902 cxx_eval_vec_init (const constexpr_ctx *ctx, tree t,
2903 bool lval,
2904 bool *non_constant_p, bool *overflow_p)
2906 tree atype = TREE_TYPE (t);
2907 tree init = VEC_INIT_EXPR_INIT (t);
2908 tree r = cxx_eval_vec_init_1 (ctx, atype, init,
2909 VEC_INIT_EXPR_VALUE_INIT (t),
2910 lval, non_constant_p, overflow_p);
2911 if (*non_constant_p)
2912 return t;
2913 else
2914 return r;
2917 /* A less strict version of fold_indirect_ref_1, which requires cv-quals to
2918 match. We want to be less strict for simple *& folding; if we have a
2919 non-const temporary that we access through a const pointer, that should
2920 work. We handle this here rather than change fold_indirect_ref_1
2921 because we're dealing with things like ADDR_EXPR of INTEGER_CST which
2922 don't really make sense outside of constant expression evaluation. Also
2923 we want to allow folding to COMPONENT_REF, which could cause trouble
2924 with TBAA in fold_indirect_ref_1.
2926 Try to keep this function synced with fold_indirect_ref_1. */
2928 static tree
2929 cxx_fold_indirect_ref (location_t loc, tree type, tree op0, bool *empty_base)
2931 tree sub, subtype;
2933 sub = op0;
2934 STRIP_NOPS (sub);
2935 subtype = TREE_TYPE (sub);
2936 if (!POINTER_TYPE_P (subtype))
2937 return NULL_TREE;
2939 if (TREE_CODE (sub) == ADDR_EXPR)
2941 tree op = TREE_OPERAND (sub, 0);
2942 tree optype = TREE_TYPE (op);
2944 /* *&CONST_DECL -> to the value of the const decl. */
2945 if (TREE_CODE (op) == CONST_DECL)
2946 return DECL_INITIAL (op);
2947 /* *&p => p; make sure to handle *&"str"[cst] here. */
2948 if (same_type_ignoring_top_level_qualifiers_p (optype, type)
2949 /* Also handle the case where the desired type is an array of unknown
2950 bounds because the variable has had its bounds deduced since the
2951 ADDR_EXPR was created. */
2952 || (TREE_CODE (type) == ARRAY_TYPE
2953 && TREE_CODE (optype) == ARRAY_TYPE
2954 && TYPE_DOMAIN (type) == NULL_TREE
2955 && same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (optype),
2956 TREE_TYPE (type))))
2958 tree fop = fold_read_from_constant_string (op);
2959 if (fop)
2960 return fop;
2961 else
2962 return op;
2964 /* *(foo *)&fooarray => fooarray[0] */
2965 else if (TREE_CODE (optype) == ARRAY_TYPE
2966 && (same_type_ignoring_top_level_qualifiers_p
2967 (type, TREE_TYPE (optype))))
2969 tree type_domain = TYPE_DOMAIN (optype);
2970 tree min_val = size_zero_node;
2971 if (type_domain && TYPE_MIN_VALUE (type_domain))
2972 min_val = TYPE_MIN_VALUE (type_domain);
2973 return build4_loc (loc, ARRAY_REF, type, op, min_val,
2974 NULL_TREE, NULL_TREE);
2976 /* *(foo *)&complexfoo => __real__ complexfoo */
2977 else if (TREE_CODE (optype) == COMPLEX_TYPE
2978 && (same_type_ignoring_top_level_qualifiers_p
2979 (type, TREE_TYPE (optype))))
2980 return fold_build1_loc (loc, REALPART_EXPR, type, op);
2981 /* *(foo *)&vectorfoo => BIT_FIELD_REF<vectorfoo,...> */
2982 else if (VECTOR_TYPE_P (optype)
2983 && (same_type_ignoring_top_level_qualifiers_p
2984 (type, TREE_TYPE (optype))))
2986 tree part_width = TYPE_SIZE (type);
2987 tree index = bitsize_int (0);
2988 return fold_build3_loc (loc, BIT_FIELD_REF, type, op, part_width, index);
2990 /* Also handle conversion to an empty base class, which
2991 is represented with a NOP_EXPR. */
2992 else if (is_empty_class (type)
2993 && CLASS_TYPE_P (optype)
2994 && DERIVED_FROM_P (type, optype))
2996 *empty_base = true;
2997 return op;
2999 /* *(foo *)&struct_with_foo_field => COMPONENT_REF */
3000 else if (RECORD_OR_UNION_TYPE_P (optype))
3002 tree field = TYPE_FIELDS (optype);
3003 for (; field; field = DECL_CHAIN (field))
3004 if (TREE_CODE (field) == FIELD_DECL
3005 && TREE_TYPE (field) != error_mark_node
3006 && integer_zerop (byte_position (field))
3007 && (same_type_ignoring_top_level_qualifiers_p
3008 (TREE_TYPE (field), type)))
3009 return fold_build3 (COMPONENT_REF, type, op, field, NULL_TREE);
3012 else if (TREE_CODE (sub) == POINTER_PLUS_EXPR
3013 && TREE_CODE (TREE_OPERAND (sub, 1)) == INTEGER_CST)
3015 tree op00 = TREE_OPERAND (sub, 0);
3016 tree op01 = TREE_OPERAND (sub, 1);
3018 STRIP_NOPS (op00);
3019 if (TREE_CODE (op00) == ADDR_EXPR)
3021 tree op00type;
3022 op00 = TREE_OPERAND (op00, 0);
3023 op00type = TREE_TYPE (op00);
3025 /* ((foo*)&vectorfoo)[1] => BIT_FIELD_REF<vectorfoo,...> */
3026 if (VECTOR_TYPE_P (op00type)
3027 && (same_type_ignoring_top_level_qualifiers_p
3028 (type, TREE_TYPE (op00type))))
3030 HOST_WIDE_INT offset = tree_to_shwi (op01);
3031 tree part_width = TYPE_SIZE (type);
3032 unsigned HOST_WIDE_INT part_widthi = tree_to_shwi (part_width)/BITS_PER_UNIT;
3033 unsigned HOST_WIDE_INT indexi = offset * BITS_PER_UNIT;
3034 tree index = bitsize_int (indexi);
3036 if (offset / part_widthi < TYPE_VECTOR_SUBPARTS (op00type))
3037 return fold_build3_loc (loc,
3038 BIT_FIELD_REF, type, op00,
3039 part_width, index);
3042 /* ((foo*)&complexfoo)[1] => __imag__ complexfoo */
3043 else if (TREE_CODE (op00type) == COMPLEX_TYPE
3044 && (same_type_ignoring_top_level_qualifiers_p
3045 (type, TREE_TYPE (op00type))))
3047 tree size = TYPE_SIZE_UNIT (type);
3048 if (tree_int_cst_equal (size, op01))
3049 return fold_build1_loc (loc, IMAGPART_EXPR, type, op00);
3051 /* ((foo *)&fooarray)[1] => fooarray[1] */
3052 else if (TREE_CODE (op00type) == ARRAY_TYPE
3053 && (same_type_ignoring_top_level_qualifiers_p
3054 (type, TREE_TYPE (op00type))))
3056 tree type_domain = TYPE_DOMAIN (op00type);
3057 tree min_val = size_zero_node;
3058 if (type_domain && TYPE_MIN_VALUE (type_domain))
3059 min_val = TYPE_MIN_VALUE (type_domain);
3060 op01 = size_binop_loc (loc, EXACT_DIV_EXPR, op01,
3061 TYPE_SIZE_UNIT (type));
3062 op01 = size_binop_loc (loc, PLUS_EXPR, op01, min_val);
3063 return build4_loc (loc, ARRAY_REF, type, op00, op01,
3064 NULL_TREE, NULL_TREE);
3066 /* Also handle conversion to an empty base class, which
3067 is represented with a NOP_EXPR. */
3068 else if (is_empty_class (type)
3069 && CLASS_TYPE_P (op00type)
3070 && DERIVED_FROM_P (type, op00type))
3072 *empty_base = true;
3073 return op00;
3075 /* ((foo *)&struct_with_foo_field)[1] => COMPONENT_REF */
3076 else if (RECORD_OR_UNION_TYPE_P (op00type))
3078 tree field = TYPE_FIELDS (op00type);
3079 for (; field; field = DECL_CHAIN (field))
3080 if (TREE_CODE (field) == FIELD_DECL
3081 && TREE_TYPE (field) != error_mark_node
3082 && tree_int_cst_equal (byte_position (field), op01)
3083 && (same_type_ignoring_top_level_qualifiers_p
3084 (TREE_TYPE (field), type)))
3085 return fold_build3 (COMPONENT_REF, type, op00,
3086 field, NULL_TREE);
3090 /* *(foo *)fooarrptr => (*fooarrptr)[0] */
3091 else if (TREE_CODE (TREE_TYPE (subtype)) == ARRAY_TYPE
3092 && (same_type_ignoring_top_level_qualifiers_p
3093 (type, TREE_TYPE (TREE_TYPE (subtype)))))
3095 tree type_domain;
3096 tree min_val = size_zero_node;
3097 tree newsub = cxx_fold_indirect_ref (loc, TREE_TYPE (subtype), sub, NULL);
3098 if (newsub)
3099 sub = newsub;
3100 else
3101 sub = build1_loc (loc, INDIRECT_REF, TREE_TYPE (subtype), sub);
3102 type_domain = TYPE_DOMAIN (TREE_TYPE (sub));
3103 if (type_domain && TYPE_MIN_VALUE (type_domain))
3104 min_val = TYPE_MIN_VALUE (type_domain);
3105 return build4_loc (loc, ARRAY_REF, type, sub, min_val, NULL_TREE,
3106 NULL_TREE);
3109 return NULL_TREE;
3112 static tree
3113 cxx_eval_indirect_ref (const constexpr_ctx *ctx, tree t,
3114 bool lval,
3115 bool *non_constant_p, bool *overflow_p)
3117 tree orig_op0 = TREE_OPERAND (t, 0);
3118 bool empty_base = false;
3120 /* We can handle a MEM_REF like an INDIRECT_REF, if MEM_REF's second
3121 operand is an integer-zero. Otherwise reject the MEM_REF for now. */
3123 if (TREE_CODE (t) == MEM_REF
3124 && (!TREE_OPERAND (t, 1) || !integer_zerop (TREE_OPERAND (t, 1))))
3126 gcc_assert (ctx->quiet);
3127 *non_constant_p = true;
3128 return t;
3131 /* First try to simplify it directly. */
3132 tree r = cxx_fold_indirect_ref (EXPR_LOCATION (t), TREE_TYPE (t), orig_op0,
3133 &empty_base);
3134 if (!r)
3136 /* If that didn't work, evaluate the operand first. */
3137 tree op0 = cxx_eval_constant_expression (ctx, orig_op0,
3138 /*lval*/false, non_constant_p,
3139 overflow_p);
3140 /* Don't VERIFY_CONSTANT here. */
3141 if (*non_constant_p)
3142 return t;
3144 if (!lval && integer_zerop (op0))
3146 if (!ctx->quiet)
3147 error ("dereferencing a null pointer");
3148 *non_constant_p = true;
3149 return t;
3152 r = cxx_fold_indirect_ref (EXPR_LOCATION (t), TREE_TYPE (t), op0,
3153 &empty_base);
3154 if (r == NULL_TREE)
3156 /* We couldn't fold to a constant value. Make sure it's not
3157 something we should have been able to fold. */
3158 tree sub = op0;
3159 STRIP_NOPS (sub);
3160 if (TREE_CODE (sub) == ADDR_EXPR)
3162 gcc_assert (!same_type_ignoring_top_level_qualifiers_p
3163 (TREE_TYPE (TREE_TYPE (sub)), TREE_TYPE (t)));
3164 /* DR 1188 says we don't have to deal with this. */
3165 if (!ctx->quiet)
3166 error ("accessing value of %qE through a %qT glvalue in a "
3167 "constant expression", build_fold_indirect_ref (sub),
3168 TREE_TYPE (t));
3169 *non_constant_p = true;
3170 return t;
3173 if (lval && op0 != orig_op0)
3174 return build1 (INDIRECT_REF, TREE_TYPE (t), op0);
3175 if (!lval)
3176 VERIFY_CONSTANT (t);
3177 return t;
3181 r = cxx_eval_constant_expression (ctx, r,
3182 lval, non_constant_p, overflow_p);
3183 if (*non_constant_p)
3184 return t;
3186 /* If we're pulling out the value of an empty base, just return an empty
3187 CONSTRUCTOR. */
3188 if (empty_base && !lval)
3190 r = build_constructor (TREE_TYPE (t), NULL);
3191 TREE_CONSTANT (r) = true;
3194 return r;
3197 /* Complain about R, a VAR_DECL, not being usable in a constant expression.
3198 Shared between potential_constant_expression and
3199 cxx_eval_constant_expression. */
3201 static void
3202 non_const_var_error (tree r)
3204 tree type = TREE_TYPE (r);
3205 error ("the value of %qD is not usable in a constant "
3206 "expression", r);
3207 /* Avoid error cascade. */
3208 if (DECL_INITIAL (r) == error_mark_node)
3209 return;
3210 if (DECL_DECLARED_CONSTEXPR_P (r))
3211 inform (DECL_SOURCE_LOCATION (r),
3212 "%qD used in its own initializer", r);
3213 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
3215 if (!CP_TYPE_CONST_P (type))
3216 inform (DECL_SOURCE_LOCATION (r),
3217 "%q#D is not const", r);
3218 else if (CP_TYPE_VOLATILE_P (type))
3219 inform (DECL_SOURCE_LOCATION (r),
3220 "%q#D is volatile", r);
3221 else if (!DECL_INITIAL (r)
3222 || !TREE_CONSTANT (DECL_INITIAL (r))
3223 || !DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r))
3224 inform (DECL_SOURCE_LOCATION (r),
3225 "%qD was not initialized with a constant "
3226 "expression", r);
3227 else
3228 gcc_unreachable ();
3230 else if (TREE_CODE (type) == REFERENCE_TYPE)
3231 inform (DECL_SOURCE_LOCATION (r),
3232 "%qD was not initialized with a constant "
3233 "expression", r);
3234 else
3236 if (cxx_dialect >= cxx11 && !DECL_DECLARED_CONSTEXPR_P (r))
3237 inform (DECL_SOURCE_LOCATION (r),
3238 "%qD was not declared %<constexpr%>", r);
3239 else
3240 inform (DECL_SOURCE_LOCATION (r),
3241 "%qD does not have integral or enumeration type",
3246 /* Subroutine of cxx_eval_constant_expression.
3247 Like cxx_eval_unary_expression, except for trinary expressions. */
3249 static tree
3250 cxx_eval_trinary_expression (const constexpr_ctx *ctx, tree t,
3251 bool lval,
3252 bool *non_constant_p, bool *overflow_p)
3254 int i;
3255 tree args[3];
3256 tree val;
3258 for (i = 0; i < 3; i++)
3260 args[i] = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, i),
3261 lval,
3262 non_constant_p, overflow_p);
3263 VERIFY_CONSTANT (args[i]);
3266 val = fold_ternary_loc (EXPR_LOCATION (t), TREE_CODE (t), TREE_TYPE (t),
3267 args[0], args[1], args[2]);
3268 if (val == NULL_TREE)
3269 return t;
3270 VERIFY_CONSTANT (val);
3271 return val;
3274 /* True if T was declared in a function declared to be constexpr, and
3275 therefore potentially constant in C++14. */
3277 bool
3278 var_in_constexpr_fn (tree t)
3280 tree ctx = DECL_CONTEXT (t);
3281 return (ctx && TREE_CODE (ctx) == FUNCTION_DECL
3282 && DECL_DECLARED_CONSTEXPR_P (ctx));
3285 /* True if T was declared in a function that might be constexpr: either a
3286 function that was declared constexpr, or a C++17 lambda op(). */
3288 bool
3289 var_in_maybe_constexpr_fn (tree t)
3291 if (cxx_dialect >= cxx1z
3292 && DECL_FUNCTION_SCOPE_P (t)
3293 && LAMBDA_FUNCTION_P (DECL_CONTEXT (t)))
3294 return true;
3295 return var_in_constexpr_fn (t);
3298 /* We're assigning INIT to TARGET. In do_build_copy_constructor and
3299 build_over_call we implement trivial copy of a class with tail padding using
3300 assignment of character arrays, which is valid in normal code, but not in
3301 constexpr evaluation. We don't need to worry about clobbering tail padding
3302 in constexpr evaluation, so strip the type punning. */
3304 static void
3305 maybe_simplify_trivial_copy (tree &target, tree &init)
3307 if (TREE_CODE (target) == MEM_REF
3308 && TREE_CODE (init) == MEM_REF
3309 && TREE_TYPE (target) == TREE_TYPE (init)
3310 && TREE_CODE (TREE_TYPE (target)) == ARRAY_TYPE
3311 && TREE_TYPE (TREE_TYPE (target)) == unsigned_char_type_node)
3313 target = build_fold_indirect_ref (TREE_OPERAND (target, 0));
3314 init = build_fold_indirect_ref (TREE_OPERAND (init, 0));
3318 /* Evaluate an INIT_EXPR or MODIFY_EXPR. */
3320 static tree
3321 cxx_eval_store_expression (const constexpr_ctx *ctx, tree t,
3322 bool lval,
3323 bool *non_constant_p, bool *overflow_p)
3325 constexpr_ctx new_ctx = *ctx;
3327 tree init = TREE_OPERAND (t, 1);
3328 if (TREE_CLOBBER_P (init))
3329 /* Just ignore clobbers. */
3330 return void_node;
3332 /* First we figure out where we're storing to. */
3333 tree target = TREE_OPERAND (t, 0);
3335 maybe_simplify_trivial_copy (target, init);
3337 tree type = TREE_TYPE (target);
3338 target = cxx_eval_constant_expression (ctx, target,
3339 true,
3340 non_constant_p, overflow_p);
3341 if (*non_constant_p)
3342 return t;
3344 /* cxx_eval_array_reference for lval = true allows references one past
3345 end of array, because it does not know if it is just taking address
3346 (which is valid), or actual dereference. Here we know it is
3347 a dereference, so diagnose it here. */
3348 for (tree probe = target; probe; )
3350 switch (TREE_CODE (probe))
3352 case ARRAY_REF:
3353 tree nelts, ary;
3354 ary = TREE_OPERAND (probe, 0);
3355 if (TREE_CODE (TREE_TYPE (ary)) == ARRAY_TYPE)
3356 nelts = array_type_nelts_top (TREE_TYPE (ary));
3357 else if (VECTOR_TYPE_P (TREE_TYPE (ary)))
3358 nelts = size_int (TYPE_VECTOR_SUBPARTS (TREE_TYPE (ary)));
3359 else
3360 gcc_unreachable ();
3361 nelts = cxx_eval_constant_expression (ctx, nelts, false,
3362 non_constant_p, overflow_p);
3363 VERIFY_CONSTANT (nelts);
3364 gcc_assert (TREE_CODE (nelts) == INTEGER_CST
3365 && TREE_CODE (TREE_OPERAND (probe, 1)) == INTEGER_CST);
3366 if (wi::eq_p (TREE_OPERAND (probe, 1), nelts))
3368 diag_array_subscript (ctx, ary, TREE_OPERAND (probe, 1));
3369 *non_constant_p = true;
3370 return t;
3372 /* FALLTHRU */
3374 case BIT_FIELD_REF:
3375 case COMPONENT_REF:
3376 probe = TREE_OPERAND (probe, 0);
3377 continue;
3379 default:
3380 probe = NULL_TREE;
3381 continue;
3385 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (target), type))
3387 /* For initialization of an empty base, the original target will be
3388 *(base*)this, which the above evaluation resolves to the object
3389 argument, which has the derived type rather than the base type. In
3390 this situation, just evaluate the initializer and return, since
3391 there's no actual data to store. */
3392 gcc_assert (is_empty_class (type));
3393 return cxx_eval_constant_expression (ctx, init, false,
3394 non_constant_p, overflow_p);
3397 /* And then find the underlying variable. */
3398 vec<tree,va_gc> *refs = make_tree_vector();
3399 tree object = NULL_TREE;
3400 for (tree probe = target; object == NULL_TREE; )
3402 switch (TREE_CODE (probe))
3404 case BIT_FIELD_REF:
3405 case COMPONENT_REF:
3406 case ARRAY_REF:
3407 vec_safe_push (refs, TREE_OPERAND (probe, 1));
3408 vec_safe_push (refs, TREE_TYPE (probe));
3409 probe = TREE_OPERAND (probe, 0);
3410 break;
3412 default:
3413 object = probe;
3417 /* And then find/build up our initializer for the path to the subobject
3418 we're initializing. */
3419 tree *valp;
3420 if (object == ctx->object && VAR_P (object)
3421 && DECL_NAME (object) && ctx->call == NULL)
3422 /* The variable we're building up an aggregate initializer for is outside
3423 the constant-expression, so don't evaluate the store. We check
3424 DECL_NAME to handle TARGET_EXPR temporaries, which are fair game. */
3425 valp = NULL;
3426 else if (DECL_P (object))
3427 valp = ctx->values->get (object);
3428 else
3429 valp = NULL;
3430 if (!valp)
3432 /* A constant-expression cannot modify objects from outside the
3433 constant-expression. */
3434 if (!ctx->quiet)
3435 error ("modification of %qE is not a constant expression", object);
3436 *non_constant_p = true;
3437 return t;
3439 type = TREE_TYPE (object);
3440 bool no_zero_init = true;
3442 vec<tree,va_gc> *ctors = make_tree_vector ();
3443 while (!refs->is_empty())
3445 if (*valp == NULL_TREE)
3447 *valp = build_constructor (type, NULL);
3448 CONSTRUCTOR_NO_IMPLICIT_ZERO (*valp) = no_zero_init;
3450 else if (TREE_CODE (*valp) == STRING_CST)
3452 /* An array was initialized with a string constant, and now
3453 we're writing into one of its elements. Explode the
3454 single initialization into a set of element
3455 initializations. */
3456 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
3458 tree string = *valp;
3459 tree elt_type = TREE_TYPE (type);
3460 unsigned chars_per_elt = (TYPE_PRECISION (elt_type)
3461 / TYPE_PRECISION (char_type_node));
3462 unsigned num_elts = TREE_STRING_LENGTH (string) / chars_per_elt;
3463 tree ary_ctor = build_constructor (type, NULL);
3465 vec_safe_reserve (CONSTRUCTOR_ELTS (ary_ctor), num_elts);
3466 for (unsigned ix = 0; ix != num_elts; ix++)
3468 constructor_elt elt =
3470 build_int_cst (size_type_node, ix),
3471 extract_string_elt (string, chars_per_elt, ix)
3473 CONSTRUCTOR_ELTS (ary_ctor)->quick_push (elt);
3476 *valp = ary_ctor;
3479 /* If the value of object is already zero-initialized, any new ctors for
3480 subobjects will also be zero-initialized. */
3481 no_zero_init = CONSTRUCTOR_NO_IMPLICIT_ZERO (*valp);
3483 vec_safe_push (ctors, *valp);
3485 enum tree_code code = TREE_CODE (type);
3486 type = refs->pop();
3487 tree index = refs->pop();
3489 constructor_elt *cep = NULL;
3490 if (code == ARRAY_TYPE)
3492 HOST_WIDE_INT i
3493 = find_array_ctor_elt (*valp, index, /*insert*/true);
3494 gcc_assert (i >= 0);
3495 cep = CONSTRUCTOR_ELT (*valp, i);
3496 gcc_assert (TREE_CODE (cep->index) != RANGE_EXPR);
3498 else
3500 gcc_assert (TREE_CODE (index) == FIELD_DECL);
3502 /* We must keep the CONSTRUCTOR's ELTS in FIELD order.
3503 Usually we meet initializers in that order, but it is
3504 possible for base types to be placed not in program
3505 order. */
3506 tree fields = TYPE_FIELDS (DECL_CONTEXT (index));
3507 unsigned HOST_WIDE_INT idx;
3509 if (code == UNION_TYPE && CONSTRUCTOR_NELTS (*valp)
3510 && CONSTRUCTOR_ELT (*valp, 0)->index != index)
3511 /* Changing active member. */
3512 vec_safe_truncate (CONSTRUCTOR_ELTS (*valp), 0);
3514 for (idx = 0;
3515 vec_safe_iterate (CONSTRUCTOR_ELTS (*valp), idx, &cep);
3516 idx++, fields = DECL_CHAIN (fields))
3518 if (index == cep->index)
3519 goto found;
3521 /* The field we're initializing must be on the field
3522 list. Look to see if it is present before the
3523 field the current ELT initializes. */
3524 for (; fields != cep->index; fields = DECL_CHAIN (fields))
3525 if (index == fields)
3526 goto insert;
3529 /* We fell off the end of the CONSTRUCTOR, so insert a new
3530 entry at the end. */
3531 insert:
3533 constructor_elt ce = { index, NULL_TREE };
3535 vec_safe_insert (CONSTRUCTOR_ELTS (*valp), idx, ce);
3536 cep = CONSTRUCTOR_ELT (*valp, idx);
3538 found:;
3540 valp = &cep->value;
3542 release_tree_vector (refs);
3544 if (AGGREGATE_TYPE_P (type) || VECTOR_TYPE_P (type))
3546 /* Create a new CONSTRUCTOR in case evaluation of the initializer
3547 wants to modify it. */
3548 if (*valp == NULL_TREE)
3550 *valp = build_constructor (type, NULL);
3551 CONSTRUCTOR_NO_IMPLICIT_ZERO (*valp) = no_zero_init;
3553 else if (TREE_CODE (*valp) == PTRMEM_CST)
3554 *valp = cplus_expand_constant (*valp);
3555 new_ctx.ctor = *valp;
3556 new_ctx.object = target;
3559 init = cxx_eval_constant_expression (&new_ctx, init, false,
3560 non_constant_p, overflow_p);
3561 /* Don't share a CONSTRUCTOR that might be changed later. */
3562 init = unshare_constructor (init);
3563 if (target == object)
3564 /* The hash table might have moved since the get earlier. */
3565 valp = ctx->values->get (object);
3567 if (TREE_CODE (init) == CONSTRUCTOR)
3569 /* An outer ctx->ctor might be pointing to *valp, so replace
3570 its contents. */
3571 CONSTRUCTOR_ELTS (*valp) = CONSTRUCTOR_ELTS (init);
3572 TREE_CONSTANT (*valp) = TREE_CONSTANT (init);
3573 TREE_SIDE_EFFECTS (*valp) = TREE_SIDE_EFFECTS (init);
3574 CONSTRUCTOR_NO_IMPLICIT_ZERO (*valp)
3575 = CONSTRUCTOR_NO_IMPLICIT_ZERO (init);
3577 else
3578 *valp = init;
3580 /* Update TREE_CONSTANT and TREE_SIDE_EFFECTS on enclosing
3581 CONSTRUCTORs, if any. */
3582 tree elt;
3583 unsigned i;
3584 bool c = TREE_CONSTANT (init);
3585 bool s = TREE_SIDE_EFFECTS (init);
3586 if (!c || s)
3587 FOR_EACH_VEC_SAFE_ELT (ctors, i, elt)
3589 if (!c)
3590 TREE_CONSTANT (elt) = false;
3591 if (s)
3592 TREE_SIDE_EFFECTS (elt) = true;
3594 release_tree_vector (ctors);
3596 if (*non_constant_p)
3597 return t;
3598 else if (lval)
3599 return target;
3600 else
3601 return init;
3604 /* Evaluate a ++ or -- expression. */
3606 static tree
3607 cxx_eval_increment_expression (const constexpr_ctx *ctx, tree t,
3608 bool lval,
3609 bool *non_constant_p, bool *overflow_p)
3611 enum tree_code code = TREE_CODE (t);
3612 tree type = TREE_TYPE (t);
3613 tree op = TREE_OPERAND (t, 0);
3614 tree offset = TREE_OPERAND (t, 1);
3615 gcc_assert (TREE_CONSTANT (offset));
3617 /* The operand as an lvalue. */
3618 op = cxx_eval_constant_expression (ctx, op, true,
3619 non_constant_p, overflow_p);
3621 /* The operand as an rvalue. */
3622 tree val = rvalue (op);
3623 val = cxx_eval_constant_expression (ctx, val, false,
3624 non_constant_p, overflow_p);
3625 /* Don't VERIFY_CONSTANT if this might be dealing with a pointer to
3626 a local array in a constexpr function. */
3627 bool ptr = POINTER_TYPE_P (TREE_TYPE (val));
3628 if (!ptr)
3629 VERIFY_CONSTANT (val);
3631 /* The modified value. */
3632 bool inc = (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR);
3633 tree mod;
3634 if (POINTER_TYPE_P (type))
3636 /* The middle end requires pointers to use POINTER_PLUS_EXPR. */
3637 offset = convert_to_ptrofftype (offset);
3638 if (!inc)
3639 offset = fold_build1 (NEGATE_EXPR, TREE_TYPE (offset), offset);
3640 mod = fold_build2 (POINTER_PLUS_EXPR, type, val, offset);
3642 else
3643 mod = fold_build2 (inc ? PLUS_EXPR : MINUS_EXPR, type, val, offset);
3644 if (!ptr)
3645 VERIFY_CONSTANT (mod);
3647 /* Storing the modified value. */
3648 tree store = build2 (MODIFY_EXPR, type, op, mod);
3649 cxx_eval_constant_expression (ctx, store,
3650 true, non_constant_p, overflow_p);
3652 /* And the value of the expression. */
3653 if (code == PREINCREMENT_EXPR || code == PREDECREMENT_EXPR)
3655 /* Prefix ops are lvalues. */
3656 if (lval)
3657 return op;
3658 else
3659 /* But we optimize when the caller wants an rvalue. */
3660 return mod;
3662 else
3663 /* Postfix ops are rvalues. */
3664 return val;
3667 /* Predicates for the meaning of *jump_target. */
3669 static bool
3670 returns (tree *jump_target)
3672 return *jump_target
3673 && TREE_CODE (*jump_target) == RETURN_EXPR;
3676 static bool
3677 breaks (tree *jump_target)
3679 return *jump_target
3680 && ((TREE_CODE (*jump_target) == LABEL_DECL
3681 && LABEL_DECL_BREAK (*jump_target))
3682 || TREE_CODE (*jump_target) == EXIT_EXPR);
3685 static bool
3686 continues (tree *jump_target)
3688 return *jump_target
3689 && TREE_CODE (*jump_target) == LABEL_DECL
3690 && LABEL_DECL_CONTINUE (*jump_target);
3693 static bool
3694 switches (tree *jump_target)
3696 return *jump_target
3697 && TREE_CODE (*jump_target) == INTEGER_CST;
3700 /* Subroutine of cxx_eval_statement_list. Determine whether the statement
3701 STMT matches *jump_target. If we're looking for a case label and we see
3702 the default label, note it in ctx->css_state. */
3704 static bool
3705 label_matches (const constexpr_ctx *ctx, tree *jump_target, tree stmt)
3707 switch (TREE_CODE (*jump_target))
3709 case LABEL_DECL:
3710 if (TREE_CODE (stmt) == LABEL_EXPR
3711 && LABEL_EXPR_LABEL (stmt) == *jump_target)
3712 return true;
3713 break;
3715 case INTEGER_CST:
3716 if (TREE_CODE (stmt) == CASE_LABEL_EXPR)
3718 gcc_assert (ctx->css_state != NULL);
3719 if (!CASE_LOW (stmt))
3721 /* default: should appear just once in a SWITCH_EXPR
3722 body (excluding nested SWITCH_EXPR). */
3723 gcc_assert (*ctx->css_state != css_default_seen);
3724 /* When evaluating SWITCH_EXPR body for the second time,
3725 return true for the default: label. */
3726 if (*ctx->css_state == css_default_processing)
3727 return true;
3728 *ctx->css_state = css_default_seen;
3730 else if (CASE_HIGH (stmt))
3732 if (tree_int_cst_le (CASE_LOW (stmt), *jump_target)
3733 && tree_int_cst_le (*jump_target, CASE_HIGH (stmt)))
3734 return true;
3736 else if (tree_int_cst_equal (*jump_target, CASE_LOW (stmt)))
3737 return true;
3739 break;
3741 default:
3742 gcc_unreachable ();
3744 return false;
3747 /* Evaluate a STATEMENT_LIST for side-effects. Handles various jump
3748 semantics, for switch, break, continue, and return. */
3750 static tree
3751 cxx_eval_statement_list (const constexpr_ctx *ctx, tree t,
3752 bool *non_constant_p, bool *overflow_p,
3753 tree *jump_target)
3755 tree_stmt_iterator i;
3756 tree local_target;
3757 /* In a statement-expression we want to return the last value.
3758 For empty statement expression return void_node. */
3759 tree r = void_node;
3760 if (!jump_target)
3762 local_target = NULL_TREE;
3763 jump_target = &local_target;
3765 for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
3767 tree stmt = tsi_stmt (i);
3768 r = cxx_eval_constant_expression (ctx, stmt, false,
3769 non_constant_p, overflow_p,
3770 jump_target);
3771 if (*non_constant_p)
3772 break;
3773 if (returns (jump_target) || breaks (jump_target))
3774 break;
3776 return r;
3779 /* Evaluate a LOOP_EXPR for side-effects. Handles break and return
3780 semantics; continue semantics are covered by cxx_eval_statement_list. */
3782 static tree
3783 cxx_eval_loop_expr (const constexpr_ctx *ctx, tree t,
3784 bool *non_constant_p, bool *overflow_p,
3785 tree *jump_target)
3787 constexpr_ctx new_ctx = *ctx;
3789 tree body = TREE_OPERAND (t, 0);
3790 int count = 0;
3793 hash_set<tree> save_exprs;
3794 new_ctx.save_exprs = &save_exprs;
3796 cxx_eval_constant_expression (&new_ctx, body, /*lval*/false,
3797 non_constant_p, overflow_p, jump_target);
3799 /* Forget saved values of SAVE_EXPRs. */
3800 for (hash_set<tree>::iterator iter = save_exprs.begin();
3801 iter != save_exprs.end(); ++iter)
3802 new_ctx.values->remove (*iter);
3803 if (++count >= constexpr_loop_limit)
3805 if (!ctx->quiet)
3806 error_at (EXPR_LOC_OR_LOC (t, input_location),
3807 "constexpr loop iteration count exceeds limit of %d "
3808 "(use -fconstexpr-loop-limit= to increase the limit)",
3809 constexpr_loop_limit);
3810 *non_constant_p = true;
3811 break;
3814 while (!returns (jump_target)
3815 && !breaks (jump_target)
3816 && !switches (jump_target)
3817 && !*non_constant_p);
3819 if (breaks (jump_target))
3820 *jump_target = NULL_TREE;
3822 return NULL_TREE;
3825 /* Evaluate a SWITCH_EXPR for side-effects. Handles switch and break jump
3826 semantics. */
3828 static tree
3829 cxx_eval_switch_expr (const constexpr_ctx *ctx, tree t,
3830 bool *non_constant_p, bool *overflow_p,
3831 tree *jump_target)
3833 tree cond = TREE_OPERAND (t, 0);
3834 cond = cxx_eval_constant_expression (ctx, cond, false,
3835 non_constant_p, overflow_p);
3836 VERIFY_CONSTANT (cond);
3837 *jump_target = cond;
3839 tree body = TREE_OPERAND (t, 1);
3840 constexpr_ctx new_ctx = *ctx;
3841 constexpr_switch_state css = css_default_not_seen;
3842 new_ctx.css_state = &css;
3843 cxx_eval_constant_expression (&new_ctx, body, false,
3844 non_constant_p, overflow_p, jump_target);
3845 if (switches (jump_target) && css == css_default_seen)
3847 /* If the SWITCH_EXPR body has default: label, process it once again,
3848 this time instructing label_matches to return true for default:
3849 label on switches (jump_target). */
3850 css = css_default_processing;
3851 cxx_eval_constant_expression (&new_ctx, body, false,
3852 non_constant_p, overflow_p, jump_target);
3854 if (breaks (jump_target) || switches (jump_target))
3855 *jump_target = NULL_TREE;
3856 return NULL_TREE;
3859 /* Find the object of TYPE under initialization in CTX. */
3861 static tree
3862 lookup_placeholder (const constexpr_ctx *ctx, bool lval, tree type)
3864 if (!ctx)
3865 return NULL_TREE;
3867 /* We could use ctx->object unconditionally, but using ctx->ctor when we
3868 can is a minor optimization. */
3869 if (!lval && ctx->ctor && same_type_p (TREE_TYPE (ctx->ctor), type))
3870 return ctx->ctor;
3872 if (!ctx->object)
3873 return NULL_TREE;
3875 /* Since an object cannot have a field of its own type, we can search outward
3876 from ctx->object to find the unique containing object of TYPE. */
3877 tree ob = ctx->object;
3878 while (ob)
3880 if (same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (ob), type))
3881 break;
3882 if (handled_component_p (ob))
3883 ob = TREE_OPERAND (ob, 0);
3884 else
3885 ob = NULL_TREE;
3888 return ob;
3891 /* Attempt to reduce the expression T to a constant value.
3892 On failure, issue diagnostic and return error_mark_node. */
3893 /* FIXME unify with c_fully_fold */
3894 /* FIXME overflow_p is too global */
3896 static tree
3897 cxx_eval_constant_expression (const constexpr_ctx *ctx, tree t,
3898 bool lval,
3899 bool *non_constant_p, bool *overflow_p,
3900 tree *jump_target)
3902 constexpr_ctx new_ctx;
3903 tree r = t;
3905 if (jump_target && *jump_target)
3907 /* If we are jumping, ignore all statements/expressions except those
3908 that could have LABEL_EXPR or CASE_LABEL_EXPR in their bodies. */
3909 switch (TREE_CODE (t))
3911 case BIND_EXPR:
3912 case STATEMENT_LIST:
3913 case LOOP_EXPR:
3914 case COND_EXPR:
3915 break;
3916 case LABEL_EXPR:
3917 case CASE_LABEL_EXPR:
3918 if (label_matches (ctx, jump_target, t))
3919 /* Found it. */
3920 *jump_target = NULL_TREE;
3921 return NULL_TREE;
3922 default:
3923 return NULL_TREE;
3926 if (t == error_mark_node)
3928 *non_constant_p = true;
3929 return t;
3931 if (CONSTANT_CLASS_P (t))
3933 if (TREE_OVERFLOW (t))
3935 if (!ctx->quiet)
3936 permerror (input_location, "overflow in constant expression");
3937 if (!flag_permissive || ctx->quiet)
3938 *overflow_p = true;
3941 if (TREE_CODE (t) == INTEGER_CST
3942 && TREE_CODE (TREE_TYPE (t)) == POINTER_TYPE
3943 && !integer_zerop (t))
3945 if (!ctx->quiet)
3946 error ("value %qE of type %qT is not a constant expression",
3947 t, TREE_TYPE (t));
3948 *non_constant_p = true;
3951 return t;
3954 tree_code tcode = TREE_CODE (t);
3955 switch (tcode)
3957 case RESULT_DECL:
3958 if (lval)
3959 return t;
3960 /* We ask for an rvalue for the RESULT_DECL when indirecting
3961 through an invisible reference, or in named return value
3962 optimization. */
3963 return (*ctx->values->get (t));
3965 case VAR_DECL:
3966 if (DECL_HAS_VALUE_EXPR_P (t))
3967 return cxx_eval_constant_expression (ctx, DECL_VALUE_EXPR (t),
3968 lval, non_constant_p, overflow_p);
3969 /* fall through */
3970 case CONST_DECL:
3971 /* We used to not check lval for CONST_DECL, but darwin.c uses
3972 CONST_DECL for aggregate constants. */
3973 if (lval)
3974 return t;
3975 if (COMPLETE_TYPE_P (TREE_TYPE (t))
3976 && is_really_empty_class (TREE_TYPE (t)))
3978 /* If the class is empty, we aren't actually loading anything. */
3979 r = build_constructor (TREE_TYPE (t), NULL);
3980 TREE_CONSTANT (r) = true;
3982 else if (ctx->strict)
3983 r = decl_really_constant_value (t);
3984 else
3985 r = decl_constant_value (t);
3986 if (TREE_CODE (r) == TARGET_EXPR
3987 && TREE_CODE (TARGET_EXPR_INITIAL (r)) == CONSTRUCTOR)
3988 r = TARGET_EXPR_INITIAL (r);
3989 if (VAR_P (r))
3990 if (tree *p = ctx->values->get (r))
3991 if (*p != NULL_TREE)
3992 r = *p;
3993 if (DECL_P (r))
3995 if (!ctx->quiet)
3996 non_const_var_error (r);
3997 *non_constant_p = true;
3999 break;
4001 case FUNCTION_DECL:
4002 case TEMPLATE_DECL:
4003 case LABEL_DECL:
4004 case LABEL_EXPR:
4005 case CASE_LABEL_EXPR:
4006 case PREDICT_EXPR:
4007 return t;
4009 case PARM_DECL:
4010 if (lval && TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE)
4011 /* glvalue use. */;
4012 else if (tree *p = ctx->values->get (r))
4013 r = *p;
4014 else if (lval)
4015 /* Defer in case this is only used for its type. */;
4016 else if (TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE)
4017 /* Defer, there's no lvalue->rvalue conversion. */;
4018 else if (COMPLETE_TYPE_P (TREE_TYPE (t))
4019 && is_really_empty_class (TREE_TYPE (t)))
4021 /* If the class is empty, we aren't actually loading anything. */
4022 r = build_constructor (TREE_TYPE (t), NULL);
4023 TREE_CONSTANT (r) = true;
4025 else
4027 if (!ctx->quiet)
4028 error ("%qE is not a constant expression", t);
4029 *non_constant_p = true;
4031 break;
4033 case CALL_EXPR:
4034 case AGGR_INIT_EXPR:
4035 r = cxx_eval_call_expression (ctx, t, lval,
4036 non_constant_p, overflow_p);
4037 break;
4039 case DECL_EXPR:
4041 r = DECL_EXPR_DECL (t);
4042 if (AGGREGATE_TYPE_P (TREE_TYPE (r))
4043 || VECTOR_TYPE_P (TREE_TYPE (r)))
4045 new_ctx = *ctx;
4046 new_ctx.object = r;
4047 new_ctx.ctor = build_constructor (TREE_TYPE (r), NULL);
4048 CONSTRUCTOR_NO_IMPLICIT_ZERO (new_ctx.ctor) = true;
4049 new_ctx.values->put (r, new_ctx.ctor);
4050 ctx = &new_ctx;
4053 if (tree init = DECL_INITIAL (r))
4055 init = cxx_eval_constant_expression (ctx, init,
4056 false,
4057 non_constant_p, overflow_p);
4058 /* Don't share a CONSTRUCTOR that might be changed. */
4059 init = unshare_constructor (init);
4060 ctx->values->put (r, init);
4062 else if (ctx == &new_ctx)
4063 /* We gave it a CONSTRUCTOR above. */;
4064 else
4065 ctx->values->put (r, NULL_TREE);
4067 break;
4069 case TARGET_EXPR:
4070 if (!literal_type_p (TREE_TYPE (t)))
4072 if (!ctx->quiet)
4074 error ("temporary of non-literal type %qT in a "
4075 "constant expression", TREE_TYPE (t));
4076 explain_non_literal_class (TREE_TYPE (t));
4078 *non_constant_p = true;
4079 break;
4081 if ((AGGREGATE_TYPE_P (TREE_TYPE (t)) || VECTOR_TYPE_P (TREE_TYPE (t))))
4083 /* We're being expanded without an explicit target, so start
4084 initializing a new object; expansion with an explicit target
4085 strips the TARGET_EXPR before we get here. */
4086 new_ctx = *ctx;
4087 new_ctx.ctor = build_constructor (TREE_TYPE (t), NULL);
4088 CONSTRUCTOR_NO_IMPLICIT_ZERO (new_ctx.ctor) = true;
4089 new_ctx.object = TARGET_EXPR_SLOT (t);
4090 ctx->values->put (new_ctx.object, new_ctx.ctor);
4091 ctx = &new_ctx;
4093 /* Pass false for 'lval' because this indicates
4094 initialization of a temporary. */
4095 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 1),
4096 false,
4097 non_constant_p, overflow_p);
4098 if (!*non_constant_p)
4099 /* Adjust the type of the result to the type of the temporary. */
4100 r = adjust_temp_type (TREE_TYPE (t), r);
4101 if (lval)
4103 tree slot = TARGET_EXPR_SLOT (t);
4104 r = unshare_constructor (r);
4105 ctx->values->put (slot, r);
4106 return slot;
4108 break;
4110 case INIT_EXPR:
4111 case MODIFY_EXPR:
4112 gcc_assert (jump_target == NULL || *jump_target == NULL_TREE);
4113 r = cxx_eval_store_expression (ctx, t, lval,
4114 non_constant_p, overflow_p);
4115 break;
4117 case SCOPE_REF:
4118 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 1),
4119 lval,
4120 non_constant_p, overflow_p);
4121 break;
4123 case RETURN_EXPR:
4124 if (TREE_OPERAND (t, 0) != NULL_TREE)
4125 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0),
4126 lval,
4127 non_constant_p, overflow_p);
4128 *jump_target = t;
4129 break;
4131 case SAVE_EXPR:
4132 /* Avoid evaluating a SAVE_EXPR more than once. */
4133 if (tree *p = ctx->values->get (t))
4134 r = *p;
4135 else
4137 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0), false,
4138 non_constant_p, overflow_p);
4139 ctx->values->put (t, r);
4140 if (ctx->save_exprs)
4141 ctx->save_exprs->add (t);
4143 break;
4145 case NON_LVALUE_EXPR:
4146 case TRY_CATCH_EXPR:
4147 case TRY_BLOCK:
4148 case CLEANUP_POINT_EXPR:
4149 case MUST_NOT_THROW_EXPR:
4150 case EXPR_STMT:
4151 case EH_SPEC_BLOCK:
4152 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0),
4153 lval,
4154 non_constant_p, overflow_p,
4155 jump_target);
4156 break;
4158 case TRY_FINALLY_EXPR:
4159 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0), lval,
4160 non_constant_p, overflow_p,
4161 jump_target);
4162 if (!*non_constant_p)
4163 /* Also evaluate the cleanup. */
4164 cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 1), true,
4165 non_constant_p, overflow_p,
4166 jump_target);
4167 break;
4169 /* These differ from cxx_eval_unary_expression in that this doesn't
4170 check for a constant operand or result; an address can be
4171 constant without its operand being, and vice versa. */
4172 case MEM_REF:
4173 case INDIRECT_REF:
4174 r = cxx_eval_indirect_ref (ctx, t, lval,
4175 non_constant_p, overflow_p);
4176 break;
4178 case ADDR_EXPR:
4180 tree oldop = TREE_OPERAND (t, 0);
4181 tree op = cxx_eval_constant_expression (ctx, oldop,
4182 /*lval*/true,
4183 non_constant_p, overflow_p);
4184 /* Don't VERIFY_CONSTANT here. */
4185 if (*non_constant_p)
4186 return t;
4187 gcc_checking_assert (TREE_CODE (op) != CONSTRUCTOR);
4188 /* This function does more aggressive folding than fold itself. */
4189 r = build_fold_addr_expr_with_type (op, TREE_TYPE (t));
4190 if (TREE_CODE (r) == ADDR_EXPR && TREE_OPERAND (r, 0) == oldop)
4191 return t;
4192 break;
4195 case REALPART_EXPR:
4196 case IMAGPART_EXPR:
4197 if (lval)
4199 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0), lval,
4200 non_constant_p, overflow_p);
4201 if (r == error_mark_node)
4203 else if (r == TREE_OPERAND (t, 0))
4204 r = t;
4205 else
4206 r = fold_build1 (TREE_CODE (t), TREE_TYPE (t), r);
4207 break;
4209 /* FALLTHRU */
4210 case CONJ_EXPR:
4211 case FIX_TRUNC_EXPR:
4212 case FLOAT_EXPR:
4213 case NEGATE_EXPR:
4214 case ABS_EXPR:
4215 case BIT_NOT_EXPR:
4216 case TRUTH_NOT_EXPR:
4217 case FIXED_CONVERT_EXPR:
4218 r = cxx_eval_unary_expression (ctx, t, lval,
4219 non_constant_p, overflow_p);
4220 break;
4222 case SIZEOF_EXPR:
4223 r = fold_sizeof_expr (t);
4224 VERIFY_CONSTANT (r);
4225 break;
4227 case COMPOUND_EXPR:
4229 /* check_return_expr sometimes wraps a TARGET_EXPR in a
4230 COMPOUND_EXPR; don't get confused. Also handle EMPTY_CLASS_EXPR
4231 introduced by build_call_a. */
4232 tree op0 = TREE_OPERAND (t, 0);
4233 tree op1 = TREE_OPERAND (t, 1);
4234 STRIP_NOPS (op1);
4235 if ((TREE_CODE (op0) == TARGET_EXPR && op1 == TARGET_EXPR_SLOT (op0))
4236 || TREE_CODE (op1) == EMPTY_CLASS_EXPR)
4237 r = cxx_eval_constant_expression (ctx, op0,
4238 lval, non_constant_p, overflow_p,
4239 jump_target);
4240 else
4242 /* Check that the LHS is constant and then discard it. */
4243 cxx_eval_constant_expression (ctx, op0,
4244 true, non_constant_p, overflow_p,
4245 jump_target);
4246 if (*non_constant_p)
4247 return t;
4248 op1 = TREE_OPERAND (t, 1);
4249 r = cxx_eval_constant_expression (ctx, op1,
4250 lval, non_constant_p, overflow_p,
4251 jump_target);
4254 break;
4256 case POINTER_PLUS_EXPR:
4257 case PLUS_EXPR:
4258 case MINUS_EXPR:
4259 case MULT_EXPR:
4260 case TRUNC_DIV_EXPR:
4261 case CEIL_DIV_EXPR:
4262 case FLOOR_DIV_EXPR:
4263 case ROUND_DIV_EXPR:
4264 case TRUNC_MOD_EXPR:
4265 case CEIL_MOD_EXPR:
4266 case ROUND_MOD_EXPR:
4267 case RDIV_EXPR:
4268 case EXACT_DIV_EXPR:
4269 case MIN_EXPR:
4270 case MAX_EXPR:
4271 case LSHIFT_EXPR:
4272 case RSHIFT_EXPR:
4273 case LROTATE_EXPR:
4274 case RROTATE_EXPR:
4275 case BIT_IOR_EXPR:
4276 case BIT_XOR_EXPR:
4277 case BIT_AND_EXPR:
4278 case TRUTH_XOR_EXPR:
4279 case LT_EXPR:
4280 case LE_EXPR:
4281 case GT_EXPR:
4282 case GE_EXPR:
4283 case EQ_EXPR:
4284 case NE_EXPR:
4285 case UNORDERED_EXPR:
4286 case ORDERED_EXPR:
4287 case UNLT_EXPR:
4288 case UNLE_EXPR:
4289 case UNGT_EXPR:
4290 case UNGE_EXPR:
4291 case UNEQ_EXPR:
4292 case LTGT_EXPR:
4293 case RANGE_EXPR:
4294 case COMPLEX_EXPR:
4295 r = cxx_eval_binary_expression (ctx, t, lval,
4296 non_constant_p, overflow_p);
4297 break;
4299 /* fold can introduce non-IF versions of these; still treat them as
4300 short-circuiting. */
4301 case TRUTH_AND_EXPR:
4302 case TRUTH_ANDIF_EXPR:
4303 r = cxx_eval_logical_expression (ctx, t, boolean_false_node,
4304 boolean_true_node,
4305 lval,
4306 non_constant_p, overflow_p);
4307 break;
4309 case TRUTH_OR_EXPR:
4310 case TRUTH_ORIF_EXPR:
4311 r = cxx_eval_logical_expression (ctx, t, boolean_true_node,
4312 boolean_false_node,
4313 lval,
4314 non_constant_p, overflow_p);
4315 break;
4317 case ARRAY_REF:
4318 r = cxx_eval_array_reference (ctx, t, lval,
4319 non_constant_p, overflow_p);
4320 break;
4322 case COMPONENT_REF:
4323 if (is_overloaded_fn (t))
4325 /* We can only get here in checking mode via
4326 build_non_dependent_expr, because any expression that
4327 calls or takes the address of the function will have
4328 pulled a FUNCTION_DECL out of the COMPONENT_REF. */
4329 gcc_checking_assert (ctx->quiet || errorcount);
4330 *non_constant_p = true;
4331 return t;
4333 r = cxx_eval_component_reference (ctx, t, lval,
4334 non_constant_p, overflow_p);
4335 break;
4337 case BIT_FIELD_REF:
4338 r = cxx_eval_bit_field_ref (ctx, t, lval,
4339 non_constant_p, overflow_p);
4340 break;
4342 case COND_EXPR:
4343 if (jump_target && *jump_target)
4345 /* When jumping to a label, the label might be either in the
4346 then or else blocks, so process then block first in skipping
4347 mode first, and if we are still in the skipping mode at its end,
4348 process the else block too. */
4349 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 1),
4350 lval, non_constant_p, overflow_p,
4351 jump_target);
4352 if (*jump_target)
4353 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 2),
4354 lval, non_constant_p, overflow_p,
4355 jump_target);
4356 break;
4358 /* FALLTHRU */
4359 case VEC_COND_EXPR:
4360 r = cxx_eval_conditional_expression (ctx, t, lval,
4361 non_constant_p, overflow_p,
4362 jump_target);
4363 break;
4365 case CONSTRUCTOR:
4366 if (TREE_CONSTANT (t))
4368 /* Don't re-process a constant CONSTRUCTOR, but do fold it to
4369 VECTOR_CST if applicable. */
4370 /* FIXME after GCC 6 branches, make the verify unconditional. */
4371 if (CHECKING_P)
4372 verify_constructor_flags (t);
4373 else
4374 recompute_constructor_flags (t);
4375 if (TREE_CONSTANT (t))
4376 return fold (t);
4378 r = cxx_eval_bare_aggregate (ctx, t, lval,
4379 non_constant_p, overflow_p);
4380 break;
4382 case VEC_INIT_EXPR:
4383 /* We can get this in a defaulted constructor for a class with a
4384 non-static data member of array type. Either the initializer will
4385 be NULL, meaning default-initialization, or it will be an lvalue
4386 or xvalue of the same type, meaning direct-initialization from the
4387 corresponding member. */
4388 r = cxx_eval_vec_init (ctx, t, lval,
4389 non_constant_p, overflow_p);
4390 break;
4392 case FMA_EXPR:
4393 case VEC_PERM_EXPR:
4394 r = cxx_eval_trinary_expression (ctx, t, lval,
4395 non_constant_p, overflow_p);
4396 break;
4398 case CONVERT_EXPR:
4399 case VIEW_CONVERT_EXPR:
4400 case NOP_EXPR:
4401 case UNARY_PLUS_EXPR:
4403 tree oldop = TREE_OPERAND (t, 0);
4405 tree op = cxx_eval_constant_expression (ctx, oldop,
4406 lval,
4407 non_constant_p, overflow_p);
4408 if (*non_constant_p)
4409 return t;
4410 tree type = TREE_TYPE (t);
4411 if (TREE_CODE (op) == PTRMEM_CST
4412 && !TYPE_PTRMEM_P (type))
4413 op = cplus_expand_constant (op);
4414 if (TREE_CODE (op) == PTRMEM_CST && tcode == NOP_EXPR)
4416 if (same_type_ignoring_top_level_qualifiers_p (type,
4417 TREE_TYPE (op))
4418 || can_convert_qual (type, op))
4419 return cp_fold_convert (type, op);
4420 else
4422 if (!ctx->quiet)
4423 error_at (EXPR_LOC_OR_LOC (t, input_location),
4424 "a reinterpret_cast is not a constant expression");
4425 *non_constant_p = true;
4426 return t;
4430 if (POINTER_TYPE_P (type) && TREE_CODE (op) == INTEGER_CST)
4432 if (integer_zerop (op))
4434 if (TREE_CODE (type) == REFERENCE_TYPE)
4436 if (!ctx->quiet)
4437 error_at (EXPR_LOC_OR_LOC (t, input_location),
4438 "dereferencing a null pointer");
4439 *non_constant_p = true;
4440 return t;
4442 else if (TREE_CODE (TREE_TYPE (op)) == POINTER_TYPE)
4444 tree from = TREE_TYPE (op);
4446 if (!can_convert (type, from, tf_none))
4448 if (!ctx->quiet)
4449 error_at (EXPR_LOC_OR_LOC (t, input_location),
4450 "conversion of %qT null pointer to %qT "
4451 "is not a constant expression",
4452 from, type);
4453 *non_constant_p = true;
4454 return t;
4458 else
4460 /* This detects for example:
4461 reinterpret_cast<void*>(sizeof 0)
4463 if (!ctx->quiet)
4464 error_at (EXPR_LOC_OR_LOC (t, input_location),
4465 "%<reinterpret_cast<%T>(%E)%> is not "
4466 "a constant expression",
4467 type, op);
4468 *non_constant_p = true;
4469 return t;
4472 if (op == oldop && tcode != UNARY_PLUS_EXPR)
4473 /* We didn't fold at the top so we could check for ptr-int
4474 conversion. */
4475 return fold (t);
4476 if (tcode == UNARY_PLUS_EXPR)
4477 r = fold_convert (TREE_TYPE (t), op);
4478 else
4479 r = fold_build1 (tcode, type, op);
4480 /* Conversion of an out-of-range value has implementation-defined
4481 behavior; the language considers it different from arithmetic
4482 overflow, which is undefined. */
4483 if (TREE_OVERFLOW_P (r) && !TREE_OVERFLOW_P (op))
4484 TREE_OVERFLOW (r) = false;
4486 break;
4488 case EMPTY_CLASS_EXPR:
4489 /* This is good enough for a function argument that might not get
4490 used, and they can't do anything with it, so just return it. */
4491 return t;
4493 case STATEMENT_LIST:
4494 new_ctx = *ctx;
4495 new_ctx.ctor = new_ctx.object = NULL_TREE;
4496 return cxx_eval_statement_list (&new_ctx, t,
4497 non_constant_p, overflow_p, jump_target);
4499 case BIND_EXPR:
4500 return cxx_eval_constant_expression (ctx, BIND_EXPR_BODY (t),
4501 lval,
4502 non_constant_p, overflow_p,
4503 jump_target);
4505 case PREINCREMENT_EXPR:
4506 case POSTINCREMENT_EXPR:
4507 case PREDECREMENT_EXPR:
4508 case POSTDECREMENT_EXPR:
4509 return cxx_eval_increment_expression (ctx, t,
4510 lval, non_constant_p, overflow_p);
4512 case LAMBDA_EXPR:
4513 case NEW_EXPR:
4514 case VEC_NEW_EXPR:
4515 case DELETE_EXPR:
4516 case VEC_DELETE_EXPR:
4517 case THROW_EXPR:
4518 case MODOP_EXPR:
4519 /* GCC internal stuff. */
4520 case VA_ARG_EXPR:
4521 case OBJ_TYPE_REF:
4522 case WITH_CLEANUP_EXPR:
4523 case NON_DEPENDENT_EXPR:
4524 case BASELINK:
4525 case OFFSET_REF:
4526 if (!ctx->quiet)
4527 error_at (EXPR_LOC_OR_LOC (t, input_location),
4528 "expression %qE is not a constant expression", t);
4529 *non_constant_p = true;
4530 break;
4532 case PLACEHOLDER_EXPR:
4533 /* Use of the value or address of the current object. */
4534 if (tree ctor = lookup_placeholder (ctx, lval, TREE_TYPE (t)))
4535 return cxx_eval_constant_expression (ctx, ctor, lval,
4536 non_constant_p, overflow_p);
4537 /* A placeholder without a referent. We can get here when
4538 checking whether NSDMIs are noexcept, or in massage_init_elt;
4539 just say it's non-constant for now. */
4540 gcc_assert (ctx->quiet);
4541 *non_constant_p = true;
4542 break;
4544 case EXIT_EXPR:
4546 tree cond = TREE_OPERAND (t, 0);
4547 cond = cxx_eval_constant_expression (ctx, cond, /*lval*/false,
4548 non_constant_p, overflow_p);
4549 VERIFY_CONSTANT (cond);
4550 if (integer_nonzerop (cond))
4551 *jump_target = t;
4553 break;
4555 case GOTO_EXPR:
4556 *jump_target = TREE_OPERAND (t, 0);
4557 gcc_assert (breaks (jump_target) || continues (jump_target));
4558 break;
4560 case LOOP_EXPR:
4561 cxx_eval_loop_expr (ctx, t,
4562 non_constant_p, overflow_p, jump_target);
4563 break;
4565 case SWITCH_EXPR:
4566 cxx_eval_switch_expr (ctx, t,
4567 non_constant_p, overflow_p, jump_target);
4568 break;
4570 case REQUIRES_EXPR:
4571 /* It's possible to get a requires-expression in a constant
4572 expression. For example:
4574 template<typename T> concept bool C() {
4575 return requires (T t) { t; };
4578 template<typename T> requires !C<T>() void f(T);
4580 Normalization leaves f with the associated constraint
4581 '!requires (T t) { ... }' which is not transformed into
4582 a constraint. */
4583 if (!processing_template_decl)
4584 return evaluate_constraint_expression (t, NULL_TREE);
4585 else
4586 *non_constant_p = true;
4587 return t;
4589 case ANNOTATE_EXPR:
4590 gcc_assert (tree_to_uhwi (TREE_OPERAND (t, 1)) == annot_expr_ivdep_kind);
4591 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0),
4592 lval,
4593 non_constant_p, overflow_p,
4594 jump_target);
4595 break;
4597 default:
4598 if (STATEMENT_CODE_P (TREE_CODE (t)))
4600 /* This function doesn't know how to deal with pre-genericize
4601 statements; this can only happen with statement-expressions,
4602 so for now just fail. */
4603 if (!ctx->quiet)
4604 error_at (EXPR_LOCATION (t),
4605 "statement is not a constant expression");
4607 else
4608 internal_error ("unexpected expression %qE of kind %s", t,
4609 get_tree_code_name (TREE_CODE (t)));
4610 *non_constant_p = true;
4611 break;
4614 if (r == error_mark_node)
4615 *non_constant_p = true;
4617 if (*non_constant_p)
4618 return t;
4619 else
4620 return r;
4623 static tree
4624 cxx_eval_outermost_constant_expr (tree t, bool allow_non_constant,
4625 bool strict = true, tree object = NULL_TREE)
4627 auto_timevar time (TV_CONSTEXPR);
4629 bool non_constant_p = false;
4630 bool overflow_p = false;
4631 hash_map<tree,tree> map;
4633 constexpr_ctx ctx = { NULL, &map, NULL, NULL, NULL, NULL,
4634 allow_non_constant, strict };
4636 tree type = initialized_type (t);
4637 tree r = t;
4638 if (AGGREGATE_TYPE_P (type) || VECTOR_TYPE_P (type))
4640 /* In C++14 an NSDMI can participate in aggregate initialization,
4641 and can refer to the address of the object being initialized, so
4642 we need to pass in the relevant VAR_DECL if we want to do the
4643 evaluation in a single pass. The evaluation will dynamically
4644 update ctx.values for the VAR_DECL. We use the same strategy
4645 for C++11 constexpr constructors that refer to the object being
4646 initialized. */
4647 ctx.ctor = build_constructor (type, NULL);
4648 CONSTRUCTOR_NO_IMPLICIT_ZERO (ctx.ctor) = true;
4649 if (!object)
4651 if (TREE_CODE (t) == TARGET_EXPR)
4652 object = TARGET_EXPR_SLOT (t);
4653 else if (TREE_CODE (t) == AGGR_INIT_EXPR)
4654 object = AGGR_INIT_EXPR_SLOT (t);
4656 ctx.object = object;
4657 if (object)
4658 gcc_assert (same_type_ignoring_top_level_qualifiers_p
4659 (type, TREE_TYPE (object)));
4660 if (object && DECL_P (object))
4661 map.put (object, ctx.ctor);
4662 if (TREE_CODE (r) == TARGET_EXPR)
4663 /* Avoid creating another CONSTRUCTOR when we expand the
4664 TARGET_EXPR. */
4665 r = TARGET_EXPR_INITIAL (r);
4668 r = cxx_eval_constant_expression (&ctx, r,
4669 false, &non_constant_p, &overflow_p);
4671 verify_constant (r, allow_non_constant, &non_constant_p, &overflow_p);
4673 /* Mutable logic is a bit tricky: we want to allow initialization of
4674 constexpr variables with mutable members, but we can't copy those
4675 members to another constexpr variable. */
4676 if (TREE_CODE (r) == CONSTRUCTOR
4677 && CONSTRUCTOR_MUTABLE_POISON (r))
4679 if (!allow_non_constant)
4680 error ("%qE is not a constant expression because it refers to "
4681 "mutable subobjects of %qT", t, type);
4682 non_constant_p = true;
4685 if (TREE_CODE (r) == CONSTRUCTOR
4686 && CONSTRUCTOR_NO_IMPLICIT_ZERO (r))
4688 if (!allow_non_constant)
4689 error ("%qE is not a constant expression because it refers to "
4690 "an incompletely initialized variable", t);
4691 TREE_CONSTANT (r) = false;
4692 non_constant_p = true;
4695 /* Technically we should check this for all subexpressions, but that
4696 runs into problems with our internal representation of pointer
4697 subtraction and the 5.19 rules are still in flux. */
4698 if (CONVERT_EXPR_CODE_P (TREE_CODE (r))
4699 && ARITHMETIC_TYPE_P (TREE_TYPE (r))
4700 && TREE_CODE (TREE_OPERAND (r, 0)) == ADDR_EXPR)
4702 if (!allow_non_constant)
4703 error ("conversion from pointer type %qT "
4704 "to arithmetic type %qT in a constant expression",
4705 TREE_TYPE (TREE_OPERAND (r, 0)), TREE_TYPE (r));
4706 non_constant_p = true;
4709 if (!non_constant_p && overflow_p)
4710 non_constant_p = true;
4712 /* Unshare the result unless it's a CONSTRUCTOR in which case it's already
4713 unshared. */
4714 bool should_unshare = true;
4715 if (r == t || TREE_CODE (r) == CONSTRUCTOR)
4716 should_unshare = false;
4718 if (non_constant_p && !allow_non_constant)
4719 return error_mark_node;
4720 else if (non_constant_p && TREE_CONSTANT (r))
4722 /* This isn't actually constant, so unset TREE_CONSTANT. */
4723 if (EXPR_P (r))
4724 r = copy_node (r);
4725 else if (TREE_CODE (r) == CONSTRUCTOR)
4726 r = build1 (VIEW_CONVERT_EXPR, TREE_TYPE (r), r);
4727 else
4728 r = build_nop (TREE_TYPE (r), r);
4729 TREE_CONSTANT (r) = false;
4731 else if (non_constant_p || r == t)
4732 return t;
4734 if (should_unshare)
4735 r = unshare_expr (r);
4737 if (TREE_CODE (r) == CONSTRUCTOR && CLASS_TYPE_P (TREE_TYPE (r)))
4739 if (TREE_CODE (t) == TARGET_EXPR
4740 && TARGET_EXPR_INITIAL (t) == r)
4741 return t;
4742 else
4744 r = get_target_expr (r);
4745 TREE_CONSTANT (r) = true;
4746 return r;
4749 else
4750 return r;
4753 /* Returns true if T is a valid subexpression of a constant expression,
4754 even if it isn't itself a constant expression. */
4756 bool
4757 is_sub_constant_expr (tree t)
4759 bool non_constant_p = false;
4760 bool overflow_p = false;
4761 hash_map <tree, tree> map;
4763 constexpr_ctx ctx = { NULL, &map, NULL, NULL, NULL, NULL, true, true };
4765 cxx_eval_constant_expression (&ctx, t, false, &non_constant_p,
4766 &overflow_p);
4767 return !non_constant_p && !overflow_p;
4770 /* If T represents a constant expression returns its reduced value.
4771 Otherwise return error_mark_node. If T is dependent, then
4772 return NULL. */
4774 tree
4775 cxx_constant_value (tree t, tree decl)
4777 return cxx_eval_outermost_constant_expr (t, false, true, decl);
4780 /* Helper routine for fold_simple function. Either return simplified
4781 expression T, otherwise NULL_TREE.
4782 In contrast to cp_fully_fold, and to maybe_constant_value, we try to fold
4783 even if we are within template-declaration. So be careful on call, as in
4784 such case types can be undefined. */
4786 static tree
4787 fold_simple_1 (tree t)
4789 tree op1;
4790 enum tree_code code = TREE_CODE (t);
4792 switch (code)
4794 case INTEGER_CST:
4795 case REAL_CST:
4796 case VECTOR_CST:
4797 case FIXED_CST:
4798 case COMPLEX_CST:
4799 return t;
4801 case SIZEOF_EXPR:
4802 return fold_sizeof_expr (t);
4804 case ABS_EXPR:
4805 case CONJ_EXPR:
4806 case REALPART_EXPR:
4807 case IMAGPART_EXPR:
4808 case NEGATE_EXPR:
4809 case BIT_NOT_EXPR:
4810 case TRUTH_NOT_EXPR:
4811 case NOP_EXPR:
4812 case VIEW_CONVERT_EXPR:
4813 case CONVERT_EXPR:
4814 case FLOAT_EXPR:
4815 case FIX_TRUNC_EXPR:
4816 case FIXED_CONVERT_EXPR:
4817 case ADDR_SPACE_CONVERT_EXPR:
4819 op1 = TREE_OPERAND (t, 0);
4821 t = const_unop (code, TREE_TYPE (t), op1);
4822 if (!t)
4823 return NULL_TREE;
4825 if (CONVERT_EXPR_CODE_P (code)
4826 && TREE_OVERFLOW_P (t) && !TREE_OVERFLOW_P (op1))
4827 TREE_OVERFLOW (t) = false;
4828 return t;
4830 default:
4831 return NULL_TREE;
4835 /* If T is a simple constant expression, returns its simplified value.
4836 Otherwise returns T. In contrast to maybe_constant_value do we
4837 simplify only few operations on constant-expressions, and we don't
4838 try to simplify constexpressions. */
4840 tree
4841 fold_simple (tree t)
4843 tree r = NULL_TREE;
4844 if (processing_template_decl)
4845 return t;
4847 r = fold_simple_1 (t);
4848 if (!r)
4849 r = t;
4851 return r;
4854 /* If T is a constant expression, returns its reduced value.
4855 Otherwise, if T does not have TREE_CONSTANT set, returns T.
4856 Otherwise, returns a version of T without TREE_CONSTANT. */
4858 static GTY((deletable)) hash_map<tree, tree> *cv_cache;
4860 tree
4861 maybe_constant_value (tree t, tree decl)
4863 tree r;
4865 if (!potential_nondependent_constant_expression (t))
4867 if (TREE_OVERFLOW_P (t))
4869 t = build_nop (TREE_TYPE (t), t);
4870 TREE_CONSTANT (t) = false;
4872 return t;
4874 else if (CONSTANT_CLASS_P (t))
4875 /* No caching or evaluation needed. */
4876 return t;
4878 if (cv_cache == NULL)
4879 cv_cache = hash_map<tree, tree>::create_ggc (101);
4880 if (tree *cached = cv_cache->get (t))
4881 return *cached;
4883 r = cxx_eval_outermost_constant_expr (t, true, true, decl);
4884 gcc_checking_assert (r == t
4885 || CONVERT_EXPR_P (t)
4886 || TREE_CODE (t) == VIEW_CONVERT_EXPR
4887 || (TREE_CONSTANT (t) && !TREE_CONSTANT (r))
4888 || !cp_tree_equal (r, t));
4889 cv_cache->put (t, r);
4890 return r;
4893 /* Dispose of the whole CV_CACHE. */
4895 static void
4896 clear_cv_cache (void)
4898 if (cv_cache != NULL)
4899 cv_cache->empty ();
4902 /* Dispose of the whole CV_CACHE and FOLD_CACHE. */
4904 void
4905 clear_cv_and_fold_caches (void)
4907 clear_cv_cache ();
4908 clear_fold_cache ();
4911 /* Like maybe_constant_value but first fully instantiate the argument.
4913 Note: this is equivalent to instantiate_non_dependent_expr_sfinae
4914 (t, tf_none) followed by maybe_constant_value but is more efficient,
4915 because calls instantiation_dependent_expression_p and
4916 potential_constant_expression at most once. */
4918 tree
4919 fold_non_dependent_expr (tree t)
4921 if (t == NULL_TREE)
4922 return NULL_TREE;
4924 /* If we're in a template, but T isn't value dependent, simplify
4925 it. We're supposed to treat:
4927 template <typename T> void f(T[1 + 1]);
4928 template <typename T> void f(T[2]);
4930 as two declarations of the same function, for example. */
4931 if (processing_template_decl)
4933 if (potential_nondependent_constant_expression (t))
4935 processing_template_decl_sentinel s;
4936 t = instantiate_non_dependent_expr_internal (t, tf_none);
4938 if (type_unknown_p (t)
4939 || BRACE_ENCLOSED_INITIALIZER_P (t))
4941 if (TREE_OVERFLOW_P (t))
4943 t = build_nop (TREE_TYPE (t), t);
4944 TREE_CONSTANT (t) = false;
4946 return t;
4949 tree r = cxx_eval_outermost_constant_expr (t, true, true, NULL_TREE);
4950 /* cp_tree_equal looks through NOPs, so allow them. */
4951 gcc_checking_assert (r == t
4952 || CONVERT_EXPR_P (t)
4953 || TREE_CODE (t) == VIEW_CONVERT_EXPR
4954 || (TREE_CONSTANT (t) && !TREE_CONSTANT (r))
4955 || !cp_tree_equal (r, t));
4956 return r;
4958 else if (TREE_OVERFLOW_P (t))
4960 t = build_nop (TREE_TYPE (t), t);
4961 TREE_CONSTANT (t) = false;
4963 return t;
4966 return maybe_constant_value (t);
4969 /* Like maybe_constant_value, but returns a CONSTRUCTOR directly, rather
4970 than wrapped in a TARGET_EXPR. */
4972 tree
4973 maybe_constant_init (tree t, tree decl)
4975 if (!t)
4976 return t;
4977 if (TREE_CODE (t) == EXPR_STMT)
4978 t = TREE_OPERAND (t, 0);
4979 if (TREE_CODE (t) == CONVERT_EXPR
4980 && VOID_TYPE_P (TREE_TYPE (t)))
4981 t = TREE_OPERAND (t, 0);
4982 if (TREE_CODE (t) == INIT_EXPR)
4983 t = TREE_OPERAND (t, 1);
4984 if (TREE_CODE (t) == TARGET_EXPR)
4985 t = TARGET_EXPR_INITIAL (t);
4986 if (!potential_nondependent_static_init_expression (t))
4987 /* Don't try to evaluate it. */;
4988 else if (CONSTANT_CLASS_P (t))
4989 /* No evaluation needed. */;
4990 else
4991 t = cxx_eval_outermost_constant_expr (t, true, false, decl);
4992 if (TREE_CODE (t) == TARGET_EXPR)
4994 tree init = TARGET_EXPR_INITIAL (t);
4995 if (TREE_CODE (init) == CONSTRUCTOR)
4996 t = init;
4998 return t;
5001 #if 0
5002 /* FIXME see ADDR_EXPR section in potential_constant_expression_1. */
5003 /* Return true if the object referred to by REF has automatic or thread
5004 local storage. */
5006 enum { ck_ok, ck_bad, ck_unknown };
5007 static int
5008 check_automatic_or_tls (tree ref)
5010 machine_mode mode;
5011 HOST_WIDE_INT bitsize, bitpos;
5012 tree offset;
5013 int volatilep = 0, unsignedp = 0;
5014 tree decl = get_inner_reference (ref, &bitsize, &bitpos, &offset,
5015 &mode, &unsignedp, &volatilep, false);
5016 duration_kind dk;
5018 /* If there isn't a decl in the middle, we don't know the linkage here,
5019 and this isn't a constant expression anyway. */
5020 if (!DECL_P (decl))
5021 return ck_unknown;
5022 dk = decl_storage_duration (decl);
5023 return (dk == dk_auto || dk == dk_thread) ? ck_bad : ck_ok;
5025 #endif
5027 /* Return true if T denotes a potentially constant expression. Issue
5028 diagnostic as appropriate under control of FLAGS. If WANT_RVAL is true,
5029 an lvalue-rvalue conversion is implied.
5031 C++0x [expr.const] used to say
5033 6 An expression is a potential constant expression if it is
5034 a constant expression where all occurrences of function
5035 parameters are replaced by arbitrary constant expressions
5036 of the appropriate type.
5038 2 A conditional expression is a constant expression unless it
5039 involves one of the following as a potentially evaluated
5040 subexpression (3.2), but subexpressions of logical AND (5.14),
5041 logical OR (5.15), and conditional (5.16) operations that are
5042 not evaluated are not considered. */
5044 static bool
5045 potential_constant_expression_1 (tree t, bool want_rval, bool strict,
5046 tsubst_flags_t flags)
5048 #define RECUR(T,RV) potential_constant_expression_1 ((T), (RV), strict, flags)
5049 enum { any = false, rval = true };
5050 int i;
5051 tree tmp;
5053 if (t == error_mark_node)
5054 return false;
5055 if (t == NULL_TREE)
5056 return true;
5057 location_t loc = EXPR_LOC_OR_LOC (t, input_location);
5058 if (TREE_THIS_VOLATILE (t) && !DECL_P (t))
5060 if (flags & tf_error)
5061 error_at (loc, "expression %qE has side-effects", t);
5062 return false;
5064 if (CONSTANT_CLASS_P (t))
5065 return true;
5066 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_TYPED)
5067 && TREE_TYPE (t) == error_mark_node)
5068 return false;
5070 switch (TREE_CODE (t))
5072 case FUNCTION_DECL:
5073 case BASELINK:
5074 case TEMPLATE_DECL:
5075 case OVERLOAD:
5076 case TEMPLATE_ID_EXPR:
5077 case LABEL_DECL:
5078 case LABEL_EXPR:
5079 case CASE_LABEL_EXPR:
5080 case CONST_DECL:
5081 case SIZEOF_EXPR:
5082 case ALIGNOF_EXPR:
5083 case OFFSETOF_EXPR:
5084 case NOEXCEPT_EXPR:
5085 case TEMPLATE_PARM_INDEX:
5086 case TRAIT_EXPR:
5087 case IDENTIFIER_NODE:
5088 case USERDEF_LITERAL:
5089 /* We can see a FIELD_DECL in a pointer-to-member expression. */
5090 case FIELD_DECL:
5091 case PARM_DECL:
5092 case RESULT_DECL:
5093 case USING_DECL:
5094 case USING_STMT:
5095 case PLACEHOLDER_EXPR:
5096 case BREAK_STMT:
5097 case CONTINUE_STMT:
5098 case REQUIRES_EXPR:
5099 case STATIC_ASSERT:
5100 return true;
5102 case AGGR_INIT_EXPR:
5103 case CALL_EXPR:
5104 /* -- an invocation of a function other than a constexpr function
5105 or a constexpr constructor. */
5107 tree fun = get_function_named_in_call (t);
5108 const int nargs = call_expr_nargs (t);
5109 i = 0;
5111 if (fun == NULL_TREE)
5113 /* Reset to allow the function to continue past the end
5114 of the block below. Otherwise return early. */
5115 bool bail = true;
5117 if (TREE_CODE (t) == CALL_EXPR
5118 && CALL_EXPR_FN (t) == NULL_TREE)
5119 switch (CALL_EXPR_IFN (t))
5121 /* These should be ignored, they are optimized away from
5122 constexpr functions. */
5123 case IFN_UBSAN_NULL:
5124 case IFN_UBSAN_BOUNDS:
5125 case IFN_UBSAN_VPTR:
5126 case IFN_FALLTHROUGH:
5127 return true;
5129 case IFN_ADD_OVERFLOW:
5130 case IFN_SUB_OVERFLOW:
5131 case IFN_MUL_OVERFLOW:
5132 case IFN_LAUNDER:
5133 bail = false;
5135 default:
5136 break;
5139 if (bail)
5141 /* fold_call_expr can't do anything with IFN calls. */
5142 if (flags & tf_error)
5143 error_at (loc, "call to internal function %qE", t);
5144 return false;
5148 if (fun && is_overloaded_fn (fun))
5150 if (TREE_CODE (fun) == FUNCTION_DECL)
5152 if (builtin_valid_in_constant_expr_p (fun))
5153 return true;
5154 if (!DECL_DECLARED_CONSTEXPR_P (fun)
5155 /* Allow any built-in function; if the expansion
5156 isn't constant, we'll deal with that then. */
5157 && !is_builtin_fn (fun))
5159 if (flags & tf_error)
5161 error_at (loc, "call to non-constexpr function %qD",
5162 fun);
5163 explain_invalid_constexpr_fn (fun);
5165 return false;
5167 /* A call to a non-static member function takes the address
5168 of the object as the first argument. But in a constant
5169 expression the address will be folded away, so look
5170 through it now. */
5171 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fun)
5172 && !DECL_CONSTRUCTOR_P (fun))
5174 tree x = get_nth_callarg (t, 0);
5175 if (is_this_parameter (x))
5176 return true;
5177 else if (!RECUR (x, rval))
5178 return false;
5179 i = 1;
5182 else
5184 if (!RECUR (fun, true))
5185 return false;
5186 fun = get_first_fn (fun);
5188 /* Skip initial arguments to base constructors. */
5189 if (DECL_BASE_CONSTRUCTOR_P (fun))
5190 i = num_artificial_parms_for (fun);
5191 fun = DECL_ORIGIN (fun);
5193 else if (fun)
5195 if (RECUR (fun, rval))
5196 /* Might end up being a constant function pointer. */;
5197 else
5198 return false;
5200 for (; i < nargs; ++i)
5202 tree x = get_nth_callarg (t, i);
5203 /* In a template, reference arguments haven't been converted to
5204 REFERENCE_TYPE and we might not even know if the parameter
5205 is a reference, so accept lvalue constants too. */
5206 bool rv = processing_template_decl ? any : rval;
5207 if (!RECUR (x, rv))
5208 return false;
5210 return true;
5213 case NON_LVALUE_EXPR:
5214 /* -- an lvalue-to-rvalue conversion (4.1) unless it is applied to
5215 -- an lvalue of integral type that refers to a non-volatile
5216 const variable or static data member initialized with
5217 constant expressions, or
5219 -- an lvalue of literal type that refers to non-volatile
5220 object defined with constexpr, or that refers to a
5221 sub-object of such an object; */
5222 return RECUR (TREE_OPERAND (t, 0), rval);
5224 case VAR_DECL:
5225 if (DECL_HAS_VALUE_EXPR_P (t))
5226 return RECUR (DECL_VALUE_EXPR (t), rval);
5227 if (want_rval
5228 && !var_in_maybe_constexpr_fn (t)
5229 && !type_dependent_expression_p (t)
5230 && !decl_maybe_constant_var_p (t)
5231 && (strict
5232 || !CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (t))
5233 || (DECL_INITIAL (t)
5234 && !DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t)))
5235 && COMPLETE_TYPE_P (TREE_TYPE (t))
5236 && !is_really_empty_class (TREE_TYPE (t)))
5238 if (flags & tf_error)
5239 non_const_var_error (t);
5240 return false;
5242 return true;
5244 case NOP_EXPR:
5245 case CONVERT_EXPR:
5246 case VIEW_CONVERT_EXPR:
5247 /* -- a reinterpret_cast. FIXME not implemented, and this rule
5248 may change to something more specific to type-punning (DR 1312). */
5250 tree from = TREE_OPERAND (t, 0);
5251 if (POINTER_TYPE_P (TREE_TYPE (t))
5252 && TREE_CODE (from) == INTEGER_CST
5253 && !integer_zerop (from))
5255 if (flags & tf_error)
5256 error_at (loc, "reinterpret_cast from integer to pointer");
5257 return false;
5259 return (RECUR (from, TREE_CODE (t) != VIEW_CONVERT_EXPR));
5262 case ADDRESSOF_EXPR:
5263 /* This is like ADDR_EXPR, except it won't form pointer-to-member. */
5264 t = TREE_OPERAND (t, 0);
5265 goto handle_addr_expr;
5267 case ADDR_EXPR:
5268 /* -- a unary operator & that is applied to an lvalue that
5269 designates an object with thread or automatic storage
5270 duration; */
5271 t = TREE_OPERAND (t, 0);
5273 if (TREE_CODE (t) == OFFSET_REF && PTRMEM_OK_P (t))
5274 /* A pointer-to-member constant. */
5275 return true;
5277 handle_addr_expr:
5278 #if 0
5279 /* FIXME adjust when issue 1197 is fully resolved. For now don't do
5280 any checking here, as we might dereference the pointer later. If
5281 we remove this code, also remove check_automatic_or_tls. */
5282 i = check_automatic_or_tls (t);
5283 if (i == ck_ok)
5284 return true;
5285 if (i == ck_bad)
5287 if (flags & tf_error)
5288 error ("address-of an object %qE with thread local or "
5289 "automatic storage is not a constant expression", t);
5290 return false;
5292 #endif
5293 return RECUR (t, any);
5295 case REALPART_EXPR:
5296 case IMAGPART_EXPR:
5297 case COMPONENT_REF:
5298 case BIT_FIELD_REF:
5299 case ARROW_EXPR:
5300 case OFFSET_REF:
5301 /* -- a class member access unless its postfix-expression is
5302 of literal type or of pointer to literal type. */
5303 /* This test would be redundant, as it follows from the
5304 postfix-expression being a potential constant expression. */
5305 if (type_unknown_p (t))
5306 return true;
5307 return RECUR (TREE_OPERAND (t, 0), want_rval);
5309 case EXPR_PACK_EXPANSION:
5310 return RECUR (PACK_EXPANSION_PATTERN (t), want_rval);
5312 case INDIRECT_REF:
5314 tree x = TREE_OPERAND (t, 0);
5315 STRIP_NOPS (x);
5316 if (is_this_parameter (x) && !is_capture_proxy (x))
5318 if (DECL_CONTEXT (x)
5319 && !DECL_DECLARED_CONSTEXPR_P (DECL_CONTEXT (x)))
5321 if (flags & tf_error)
5322 error_at (loc, "use of %<this%> in a constant expression");
5323 return false;
5325 return true;
5327 return RECUR (x, rval);
5330 case STATEMENT_LIST:
5332 tree_stmt_iterator i;
5333 for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
5335 if (!RECUR (tsi_stmt (i), any))
5336 return false;
5338 return true;
5340 break;
5342 case MODIFY_EXPR:
5343 if (cxx_dialect < cxx14)
5344 goto fail;
5345 if (!RECUR (TREE_OPERAND (t, 0), any))
5346 return false;
5347 if (!RECUR (TREE_OPERAND (t, 1), rval))
5348 return false;
5349 return true;
5351 case MODOP_EXPR:
5352 if (cxx_dialect < cxx14)
5353 goto fail;
5354 if (!RECUR (TREE_OPERAND (t, 0), rval))
5355 return false;
5356 if (!RECUR (TREE_OPERAND (t, 2), rval))
5357 return false;
5358 return true;
5360 case DO_STMT:
5361 if (!RECUR (DO_COND (t), rval))
5362 return false;
5363 if (!RECUR (DO_BODY (t), any))
5364 return false;
5365 return true;
5367 case FOR_STMT:
5368 if (!RECUR (FOR_INIT_STMT (t), any))
5369 return false;
5370 if (!RECUR (FOR_COND (t), rval))
5371 return false;
5372 if (!RECUR (FOR_EXPR (t), any))
5373 return false;
5374 if (!RECUR (FOR_BODY (t), any))
5375 return false;
5376 return true;
5378 case RANGE_FOR_STMT:
5379 if (!RECUR (RANGE_FOR_EXPR (t), any))
5380 return false;
5381 if (!RECUR (RANGE_FOR_BODY (t), any))
5382 return false;
5383 return true;
5385 case WHILE_STMT:
5386 if (!RECUR (WHILE_COND (t), rval))
5387 return false;
5388 if (!RECUR (WHILE_BODY (t), any))
5389 return false;
5390 return true;
5392 case SWITCH_STMT:
5393 if (!RECUR (SWITCH_STMT_COND (t), rval))
5394 return false;
5395 /* FIXME we don't check SWITCH_STMT_BODY currently, because even
5396 unreachable labels would be checked. */
5397 return true;
5399 case STMT_EXPR:
5400 return RECUR (STMT_EXPR_STMT (t), rval);
5402 case LAMBDA_EXPR:
5403 case DYNAMIC_CAST_EXPR:
5404 case PSEUDO_DTOR_EXPR:
5405 case NEW_EXPR:
5406 case VEC_NEW_EXPR:
5407 case DELETE_EXPR:
5408 case VEC_DELETE_EXPR:
5409 case THROW_EXPR:
5410 case OMP_PARALLEL:
5411 case OMP_TASK:
5412 case OMP_FOR:
5413 case OMP_DISTRIBUTE:
5414 case OMP_TASKLOOP:
5415 case OMP_TEAMS:
5416 case OMP_TARGET_DATA:
5417 case OMP_TARGET:
5418 case OMP_SECTIONS:
5419 case OMP_ORDERED:
5420 case OMP_CRITICAL:
5421 case OMP_SINGLE:
5422 case OMP_SECTION:
5423 case OMP_MASTER:
5424 case OMP_TASKGROUP:
5425 case OMP_TARGET_UPDATE:
5426 case OMP_TARGET_ENTER_DATA:
5427 case OMP_TARGET_EXIT_DATA:
5428 case OMP_ATOMIC:
5429 case OMP_ATOMIC_READ:
5430 case OMP_ATOMIC_CAPTURE_OLD:
5431 case OMP_ATOMIC_CAPTURE_NEW:
5432 case OACC_PARALLEL:
5433 case OACC_KERNELS:
5434 case OACC_DATA:
5435 case OACC_HOST_DATA:
5436 case OACC_LOOP:
5437 case OACC_CACHE:
5438 case OACC_DECLARE:
5439 case OACC_ENTER_DATA:
5440 case OACC_EXIT_DATA:
5441 case OACC_UPDATE:
5442 case CILK_SIMD:
5443 case CILK_FOR:
5444 /* GCC internal stuff. */
5445 case VA_ARG_EXPR:
5446 case OBJ_TYPE_REF:
5447 case TRANSACTION_EXPR:
5448 case ASM_EXPR:
5449 case AT_ENCODE_EXPR:
5450 fail:
5451 if (flags & tf_error)
5452 error_at (loc, "expression %qE is not a constant expression", t);
5453 return false;
5455 case TYPEID_EXPR:
5456 /* -- a typeid expression whose operand is of polymorphic
5457 class type; */
5459 tree e = TREE_OPERAND (t, 0);
5460 if (!TYPE_P (e) && !type_dependent_expression_p (e)
5461 && TYPE_POLYMORPHIC_P (TREE_TYPE (e)))
5463 if (flags & tf_error)
5464 error_at (loc, "typeid-expression is not a constant expression "
5465 "because %qE is of polymorphic type", e);
5466 return false;
5468 return true;
5471 case MINUS_EXPR:
5472 want_rval = true;
5473 goto binary;
5475 case LT_EXPR:
5476 case LE_EXPR:
5477 case GT_EXPR:
5478 case GE_EXPR:
5479 case EQ_EXPR:
5480 case NE_EXPR:
5481 want_rval = true;
5482 goto binary;
5484 case PREINCREMENT_EXPR:
5485 case POSTINCREMENT_EXPR:
5486 case PREDECREMENT_EXPR:
5487 case POSTDECREMENT_EXPR:
5488 if (cxx_dialect < cxx14)
5489 goto fail;
5490 goto unary;
5492 case BIT_NOT_EXPR:
5493 /* A destructor. */
5494 if (TYPE_P (TREE_OPERAND (t, 0)))
5495 return true;
5496 /* fall through. */
5498 case CONJ_EXPR:
5499 case SAVE_EXPR:
5500 case FIX_TRUNC_EXPR:
5501 case FLOAT_EXPR:
5502 case NEGATE_EXPR:
5503 case ABS_EXPR:
5504 case TRUTH_NOT_EXPR:
5505 case FIXED_CONVERT_EXPR:
5506 case UNARY_PLUS_EXPR:
5507 case UNARY_LEFT_FOLD_EXPR:
5508 case UNARY_RIGHT_FOLD_EXPR:
5509 unary:
5510 return RECUR (TREE_OPERAND (t, 0), rval);
5512 case CAST_EXPR:
5513 case CONST_CAST_EXPR:
5514 case STATIC_CAST_EXPR:
5515 case REINTERPRET_CAST_EXPR:
5516 case IMPLICIT_CONV_EXPR:
5517 if (cxx_dialect < cxx11
5518 && !dependent_type_p (TREE_TYPE (t))
5519 && !INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t)))
5520 /* In C++98, a conversion to non-integral type can't be part of a
5521 constant expression. */
5523 if (flags & tf_error)
5524 error_at (loc,
5525 "cast to non-integral type %qT in a constant expression",
5526 TREE_TYPE (t));
5527 return false;
5530 return (RECUR (TREE_OPERAND (t, 0),
5531 TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE));
5533 case BIND_EXPR:
5534 return RECUR (BIND_EXPR_BODY (t), want_rval);
5536 case WITH_CLEANUP_EXPR:
5537 case CLEANUP_POINT_EXPR:
5538 case MUST_NOT_THROW_EXPR:
5539 case TRY_CATCH_EXPR:
5540 case TRY_BLOCK:
5541 case EH_SPEC_BLOCK:
5542 case EXPR_STMT:
5543 case PAREN_EXPR:
5544 case NON_DEPENDENT_EXPR:
5545 /* For convenience. */
5546 case RETURN_EXPR:
5547 case LOOP_EXPR:
5548 case EXIT_EXPR:
5549 return RECUR (TREE_OPERAND (t, 0), want_rval);
5551 case DECL_EXPR:
5552 tmp = DECL_EXPR_DECL (t);
5553 if (VAR_P (tmp) && !DECL_ARTIFICIAL (tmp))
5555 if (TREE_STATIC (tmp))
5557 if (flags & tf_error)
5558 error_at (DECL_SOURCE_LOCATION (tmp), "%qD declared "
5559 "%<static%> in %<constexpr%> context", tmp);
5560 return false;
5562 else if (CP_DECL_THREAD_LOCAL_P (tmp))
5564 if (flags & tf_error)
5565 error_at (DECL_SOURCE_LOCATION (tmp), "%qD declared "
5566 "%<thread_local%> in %<constexpr%> context", tmp);
5567 return false;
5569 else if (!DECL_NONTRIVIALLY_INITIALIZED_P (tmp))
5571 if (flags & tf_error)
5572 error_at (DECL_SOURCE_LOCATION (tmp), "uninitialized "
5573 "variable %qD in %<constexpr%> context", tmp);
5574 return false;
5577 return RECUR (tmp, want_rval);
5579 case TRY_FINALLY_EXPR:
5580 return (RECUR (TREE_OPERAND (t, 0), want_rval)
5581 && RECUR (TREE_OPERAND (t, 1), any));
5583 case SCOPE_REF:
5584 return RECUR (TREE_OPERAND (t, 1), want_rval);
5586 case TARGET_EXPR:
5587 if (!literal_type_p (TREE_TYPE (t)))
5589 if (flags & tf_error)
5591 error_at (loc, "temporary of non-literal type %qT in a "
5592 "constant expression", TREE_TYPE (t));
5593 explain_non_literal_class (TREE_TYPE (t));
5595 return false;
5597 /* FALLTHRU */
5598 case INIT_EXPR:
5599 return RECUR (TREE_OPERAND (t, 1), rval);
5601 case CONSTRUCTOR:
5603 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (t);
5604 constructor_elt *ce;
5605 for (i = 0; vec_safe_iterate (v, i, &ce); ++i)
5606 if (!RECUR (ce->value, want_rval))
5607 return false;
5608 return true;
5611 case TREE_LIST:
5613 gcc_assert (TREE_PURPOSE (t) == NULL_TREE
5614 || DECL_P (TREE_PURPOSE (t)));
5615 if (!RECUR (TREE_VALUE (t), want_rval))
5616 return false;
5617 if (TREE_CHAIN (t) == NULL_TREE)
5618 return true;
5619 return RECUR (TREE_CHAIN (t), want_rval);
5622 case TRUNC_DIV_EXPR:
5623 case CEIL_DIV_EXPR:
5624 case FLOOR_DIV_EXPR:
5625 case ROUND_DIV_EXPR:
5626 case TRUNC_MOD_EXPR:
5627 case CEIL_MOD_EXPR:
5628 case ROUND_MOD_EXPR:
5630 tree denom = TREE_OPERAND (t, 1);
5631 if (!RECUR (denom, rval))
5632 return false;
5633 /* We can't call cxx_eval_outermost_constant_expr on an expression
5634 that hasn't been through instantiate_non_dependent_expr yet. */
5635 if (!processing_template_decl)
5636 denom = cxx_eval_outermost_constant_expr (denom, true);
5637 if (integer_zerop (denom))
5639 if (flags & tf_error)
5640 error ("division by zero is not a constant expression");
5641 return false;
5643 else
5645 want_rval = true;
5646 return RECUR (TREE_OPERAND (t, 0), want_rval);
5650 case COMPOUND_EXPR:
5652 /* check_return_expr sometimes wraps a TARGET_EXPR in a
5653 COMPOUND_EXPR; don't get confused. Also handle EMPTY_CLASS_EXPR
5654 introduced by build_call_a. */
5655 tree op0 = TREE_OPERAND (t, 0);
5656 tree op1 = TREE_OPERAND (t, 1);
5657 STRIP_NOPS (op1);
5658 if ((TREE_CODE (op0) == TARGET_EXPR && op1 == TARGET_EXPR_SLOT (op0))
5659 || TREE_CODE (op1) == EMPTY_CLASS_EXPR)
5660 return RECUR (op0, want_rval);
5661 else
5662 goto binary;
5665 /* If the first operand is the non-short-circuit constant, look at
5666 the second operand; otherwise we only care about the first one for
5667 potentiality. */
5668 case TRUTH_AND_EXPR:
5669 case TRUTH_ANDIF_EXPR:
5670 tmp = boolean_true_node;
5671 goto truth;
5672 case TRUTH_OR_EXPR:
5673 case TRUTH_ORIF_EXPR:
5674 tmp = boolean_false_node;
5675 truth:
5677 tree op = TREE_OPERAND (t, 0);
5678 if (!RECUR (op, rval))
5679 return false;
5680 if (!processing_template_decl)
5681 op = cxx_eval_outermost_constant_expr (op, true);
5682 if (tree_int_cst_equal (op, tmp))
5683 return RECUR (TREE_OPERAND (t, 1), rval);
5684 else
5685 return true;
5688 case PLUS_EXPR:
5689 case MULT_EXPR:
5690 case POINTER_PLUS_EXPR:
5691 case RDIV_EXPR:
5692 case EXACT_DIV_EXPR:
5693 case MIN_EXPR:
5694 case MAX_EXPR:
5695 case LSHIFT_EXPR:
5696 case RSHIFT_EXPR:
5697 case LROTATE_EXPR:
5698 case RROTATE_EXPR:
5699 case BIT_IOR_EXPR:
5700 case BIT_XOR_EXPR:
5701 case BIT_AND_EXPR:
5702 case TRUTH_XOR_EXPR:
5703 case UNORDERED_EXPR:
5704 case ORDERED_EXPR:
5705 case UNLT_EXPR:
5706 case UNLE_EXPR:
5707 case UNGT_EXPR:
5708 case UNGE_EXPR:
5709 case UNEQ_EXPR:
5710 case LTGT_EXPR:
5711 case RANGE_EXPR:
5712 case COMPLEX_EXPR:
5713 want_rval = true;
5714 /* Fall through. */
5715 case ARRAY_REF:
5716 case ARRAY_RANGE_REF:
5717 case MEMBER_REF:
5718 case DOTSTAR_EXPR:
5719 case MEM_REF:
5720 case BINARY_LEFT_FOLD_EXPR:
5721 case BINARY_RIGHT_FOLD_EXPR:
5722 binary:
5723 for (i = 0; i < 2; ++i)
5724 if (!RECUR (TREE_OPERAND (t, i), want_rval))
5725 return false;
5726 return true;
5728 case CILK_SYNC_STMT:
5729 case CILK_SPAWN_STMT:
5730 case ARRAY_NOTATION_REF:
5731 return false;
5733 case FMA_EXPR:
5734 case VEC_PERM_EXPR:
5735 for (i = 0; i < 3; ++i)
5736 if (!RECUR (TREE_OPERAND (t, i), true))
5737 return false;
5738 return true;
5740 case COND_EXPR:
5741 if (COND_EXPR_IS_VEC_DELETE (t))
5743 if (flags & tf_error)
5744 error_at (loc, "%<delete[]%> is not a constant expression");
5745 return false;
5747 /* Fall through. */
5748 case IF_STMT:
5749 case VEC_COND_EXPR:
5750 /* If the condition is a known constant, we know which of the legs we
5751 care about; otherwise we only require that the condition and
5752 either of the legs be potentially constant. */
5753 tmp = TREE_OPERAND (t, 0);
5754 if (!RECUR (tmp, rval))
5755 return false;
5756 if (!processing_template_decl)
5757 tmp = cxx_eval_outermost_constant_expr (tmp, true);
5758 if (integer_zerop (tmp))
5759 return RECUR (TREE_OPERAND (t, 2), want_rval);
5760 else if (TREE_CODE (tmp) == INTEGER_CST)
5761 return RECUR (TREE_OPERAND (t, 1), want_rval);
5762 for (i = 1; i < 3; ++i)
5763 if (potential_constant_expression_1 (TREE_OPERAND (t, i),
5764 want_rval, strict, tf_none))
5765 return true;
5766 if (flags & tf_error)
5767 error_at (loc, "expression %qE is not a constant expression", t);
5768 return false;
5770 case VEC_INIT_EXPR:
5771 if (VEC_INIT_EXPR_IS_CONSTEXPR (t))
5772 return true;
5773 if (flags & tf_error)
5775 error_at (loc, "non-constant array initialization");
5776 diagnose_non_constexpr_vec_init (t);
5778 return false;
5780 case TYPE_DECL:
5781 case TAG_DEFN:
5782 /* We can see these in statement-expressions. */
5783 return true;
5785 case CLEANUP_STMT:
5786 case EMPTY_CLASS_EXPR:
5787 return false;
5789 case GOTO_EXPR:
5791 tree *target = &TREE_OPERAND (t, 0);
5792 /* Gotos representing break and continue are OK. */
5793 if (breaks (target) || continues (target))
5794 return true;
5795 if (flags & tf_error)
5796 error_at (loc, "%<goto%> is not a constant expression");
5797 return false;
5800 case ANNOTATE_EXPR:
5801 gcc_assert (tree_to_uhwi (TREE_OPERAND (t, 1)) == annot_expr_ivdep_kind);
5802 return RECUR (TREE_OPERAND (t, 0), rval);
5804 default:
5805 if (objc_is_property_ref (t))
5806 return false;
5808 sorry ("unexpected AST of kind %s", get_tree_code_name (TREE_CODE (t)));
5809 gcc_unreachable ();
5810 return false;
5812 #undef RECUR
5815 /* The main entry point to the above. */
5817 bool
5818 potential_constant_expression (tree t)
5820 return potential_constant_expression_1 (t, false, true, tf_none);
5823 bool
5824 potential_static_init_expression (tree t)
5826 return potential_constant_expression_1 (t, false, false, tf_none);
5829 /* As above, but require a constant rvalue. */
5831 bool
5832 potential_rvalue_constant_expression (tree t)
5834 return potential_constant_expression_1 (t, true, true, tf_none);
5837 /* Like above, but complain about non-constant expressions. */
5839 bool
5840 require_potential_constant_expression (tree t)
5842 return potential_constant_expression_1 (t, false, true, tf_warning_or_error);
5845 /* Cross product of the above. */
5847 bool
5848 require_potential_rvalue_constant_expression (tree t)
5850 return potential_constant_expression_1 (t, true, true, tf_warning_or_error);
5853 /* Returns true if T is a potential constant expression that is not
5854 instantiation-dependent, and therefore a candidate for constant folding even
5855 in a template. */
5857 bool
5858 potential_nondependent_constant_expression (tree t)
5860 return (!type_unknown_p (t)
5861 && !BRACE_ENCLOSED_INITIALIZER_P (t)
5862 && potential_constant_expression (t)
5863 && !instantiation_dependent_expression_p (t));
5866 /* Returns true if T is a potential static initializer expression that is not
5867 instantiation-dependent. */
5869 bool
5870 potential_nondependent_static_init_expression (tree t)
5872 return (!type_unknown_p (t)
5873 && !BRACE_ENCLOSED_INITIALIZER_P (t)
5874 && potential_static_init_expression (t)
5875 && !instantiation_dependent_expression_p (t));
5878 /* Finalize constexpr processing after parsing. */
5880 void
5881 fini_constexpr (void)
5883 /* The contexpr call and fundef copies tables are no longer needed. */
5884 constexpr_call_table = NULL;
5885 fundef_copies_table = NULL;
5888 #include "gt-cp-constexpr.h"