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