]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/cp/constexpr.c
* doc/invoke.texi: Add -Wno-init-list-lifetime to C++ Language Options.
[thirdparty/gcc.git] / gcc / cp / constexpr.c
CommitLineData
f9885b8a 1/* Perform -*- C++ -*- constant expression evaluation, including calls to
2 constexpr functions. These routines are used both during actual parsing
09b42213 3 and during the instantiation of template functions.
4
8e8f6434 5 Copyright (C) 1998-2018 Free Software Foundation, Inc.
09b42213 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
19You should have received a copy of the GNU General Public License
20along 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"
09b42213 26#include "cp-tree.h"
4cba6f60 27#include "varasm.h"
09b42213 28#include "c-family/c-objc.h"
29#include "tree-iterator.h"
30#include "gimplify.h"
31#include "builtins.h"
9c96033c 32#include "tree-inline.h"
6b71bdb4 33#include "ubsan.h"
732905bb 34#include "gimple-fold.h"
c300fe28 35#include "timevar.h"
09b42213 36
37static bool verify_constant (tree, bool, bool *, bool *);
38#define VERIFY_CONSTANT(X) \
39do { \
f83e6885 40 if (verify_constant ((X), ctx->quiet, non_constant_p, overflow_p)) \
09b42213 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
47bool
48is_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
58bool
59literal_type_p (tree t)
60{
61 if (SCALAR_TYPE_P (t)
76249021 62 || VECTOR_TYPE_P (t)
90ad495b 63 || TYPE_REF_P (t)
dd418b39 64 || (VOID_TYPE_P (t) && cxx_dialect >= cxx14))
09b42213 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
e89257db 78 be literal. Return error_mark_node if we give an error, the
79 DECL otherwise. */
09b42213 80
81tree
82ensure_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. */;
03dbe51b 94 else if (type_uses_auto (type))
95 /* We don't know the actual type yet. */;
09b42213 96 else if (!literal_type_p (type))
97 {
98 if (DECL_DECLARED_CONSTEXPR_P (decl))
e45408ff 99 {
bc35ef65 100 auto_diagnostic_group d;
5967b28b 101 error ("the type %qT of %<constexpr%> variable %qD "
102 "is not literal", type, decl);
e45408ff 103 explain_non_literal_class (type);
e89257db 104 decl = error_mark_node;
e45408ff 105 }
09b42213 106 else
9c96033c 107 {
b7e4a558 108 if (!is_instantiation_of_constexpr (current_function_decl))
e45408ff 109 {
bc35ef65 110 auto_diagnostic_group d;
e45408ff 111 error ("variable %qD of non-literal type %qT in %<constexpr%> "
112 "function", decl, type);
113 explain_non_literal_class (type);
e89257db 114 decl = error_mark_node;
e45408ff 115 }
9c96033c 116 cp_function_chain->invalid_constexpr = true;
117 }
09b42213 118 }
fdafeeb7 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 }
09b42213 126 }
127 return decl;
128}
129
130/* Representation of entries in the constexpr function definition table. */
131
132struct GTY((for_user)) constexpr_fundef {
133 tree decl;
134 tree body;
135};
136
b594087e 137struct constexpr_fundef_hasher : ggc_ptr_hash<constexpr_fundef>
09b42213 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
146static 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
152inline bool
153constexpr_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
161inline hashval_t
162constexpr_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
169static constexpr_fundef *
170retrieve_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
33603066 183bool
09b42213 184is_valid_constexpr_fn (tree fun, bool complain)
185{
186 bool ret = true;
187
7896267d 188 if (DECL_INHERITED_CTOR (fun)
09b42213 189 && TREE_CODE (fun) == TEMPLATE_DECL)
190 {
191 ret = false;
192 if (complain)
5967b28b 193 error ("inherited constructor %qD is not %<constexpr%>",
7896267d 194 DECL_INHERITED_CTOR (fun));
09b42213 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 {
bc35ef65 205 auto_diagnostic_group d;
5967b28b 206 error ("invalid type for parameter %d of %<constexpr%> "
09b42213 207 "function %q+#D", DECL_PARM_INDEX (parm), fun);
208 explain_non_literal_class (TREE_TYPE (parm));
209 }
210 }
211 }
212
672871ce 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),
5967b28b 218 "lambdas are implicitly %<constexpr%> only in C++17 and later");
672871ce 219 }
220 else if (!DECL_CONSTRUCTOR_P (fun))
09b42213 221 {
222 tree rettype = TREE_TYPE (TREE_TYPE (fun));
223 if (!literal_type_p (rettype))
224 {
225 ret = false;
226 if (complain)
227 {
bc35ef65 228 auto_diagnostic_group d;
5967b28b 229 error ("invalid return type %qT of %<constexpr%> function %q+D",
09b42213 230 rettype, fun);
231 explain_non_literal_class (rettype);
232 }
233 }
234
d66f34cf 235 /* C++14 DR 1684 removed this restriction. */
236 if (cxx_dialect < cxx14
237 && DECL_NONSTATIC_MEMBER_FUNCTION_P (fun)
09b42213 238 && !CLASSTYPE_LITERAL_P (DECL_CONTEXT (fun)))
239 {
240 ret = false;
bc35ef65 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 }
09b42213 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
268static bool
269build_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
320static bool
321build_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
9c96033c 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))
09b42213 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 {
9c96033c 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;
09b42213 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);
09b42213 374 else
9c96033c 375 /* Don't add anything else to the CONSTRUCTOR. */
376 return true;
09b42213 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);
4952bc85 410 if (TREE_CODE (aggr) == VAR_DECL)
411 /* Initializing a local variable, don't add anything. */
412 return true;
09b42213 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
c678e23e 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);
09b42213 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
438static bool
439check_constexpr_bind_expr_vars (tree t)
440{
441 gcc_assert (TREE_CODE (t) == BIND_EXPR);
442
09b42213 443 for (tree var = BIND_EXPR_VARS (t); var; var = DECL_CHAIN (var))
444 if (TREE_CODE (var) == TYPE_DECL
04103c39 445 && DECL_IMPLICIT_TYPEDEF_P (var)
446 && !LAMBDA_TYPE_P (TREE_TYPE (var)))
09b42213 447 return false;
448 return true;
449}
450
451/* Subroutine of check_constexpr_ctor_body. */
452
453static bool
454check_constexpr_ctor_body_1 (tree last, tree list)
455{
456 switch (TREE_CODE (list))
457 {
458 case DECL_EXPR:
810702a2 459 if (TREE_CODE (DECL_EXPR_DECL (list)) == USING_DECL
460 || TREE_CODE (DECL_EXPR_DECL (list)) == TYPE_DECL)
09b42213 461 return true;
09b42213 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:
90567983 477 case DEBUG_BEGIN_STMT:
09b42213 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
488bool
489check_constexpr_ctor_body (tree last, tree list, bool complain)
490{
9c96033c 491 /* C++14 doesn't require a constexpr ctor to have an empty body. */
492 if (cxx_dialect >= cxx14)
493 return true;
494
09b42213 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)
5967b28b 517 error ("%<constexpr%> constructor does not have empty body");
09b42213 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
529static vec<constructor_elt, va_gc> *
530sort_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
565static tree
566build_constexpr_constructor_member_initializers (tree type, tree body)
567{
568 vec<constructor_elt, va_gc> *vec = NULL;
569 bool ok = true;
816919e1 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 ();
8a36d0ec 594 }
816919e1 595 found:
09b42213 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
2fb20ba2 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
655static tree
656get_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
09b42213 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
c49bd35e 670tree
09b42213 671constexpr_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:
394aed6a 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 }
09b42213 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:
90567983 717 case DEBUG_BEGIN_STMT:
09b42213 718 return NULL_TREE;
719
2fb20ba2 720 case CALL_EXPR:
721 {
722 tree fun = get_function_named_in_call (body);
723 if (fun != NULL_TREE
a0e9bfbb 724 && fndecl_built_in_p (fun, BUILT_IN_UNREACHABLE))
2fb20ba2 725 return NULL_TREE;
726 }
727 /* Fallthru. */
728
09b42213 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
738static tree
739massage_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);
9c96033c 744 else if (cxx_dialect < cxx14)
09b42213 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
2f4cab3c 755/* CTYPE is a type constructed from BODY. Return true if some
756 bases/fields are uninitialized, and complain if COMPLAIN. */
09b42213 757
758static bool
2f4cab3c 759cx_check_missing_mem_inits (tree ctype, tree body, bool complain)
09b42213 760{
2f4cab3c 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);
09b42213 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
2f4cab3c 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)
09b42213 787 {
2f4cab3c 788 tree index = NULL_TREE;
789 if (i < nelts)
09b42213 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 }
2f4cab3c 797
09b42213 798 for (; field != index; field = DECL_CHAIN (field))
799 {
800 tree ftype;
2f4cab3c 801 if (TREE_CODE (field) != FIELD_DECL)
802 continue;
3cde3c29 803 if (DECL_UNNAMED_BIT_FIELD (field))
09b42213 804 continue;
2f4cab3c 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 }
09b42213 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;
bc35ef65 828 auto_diagnostic_group d;
859e2c29 829 error ("member %qD must be initialized by mem-initializer "
830 "in %<constexpr%> constructor", field);
831 inform (DECL_SOURCE_LOCATION (field), "declared here");
09b42213 832 bad = true;
833 }
834 if (field == NULL_TREE)
835 break;
2f4cab3c 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 }
09b42213 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
857tree
858register_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
6a385150 866 tree massaged = massage_constexpr_body (fun, body);
867 if (massaged == NULL_TREE || massaged == error_mark_node)
09b42213 868 {
869 if (!DECL_CONSTRUCTOR_P (fun))
5967b28b 870 error ("body of %<constexpr%> function %qD not a return-statement",
871 fun);
09b42213 872 return NULL;
873 }
874
6a385150 875 if (!potential_rvalue_constant_expression (massaged))
09b42213 876 {
877 if (!DECL_GENERATED_P (fun))
6a385150 878 require_potential_rvalue_constant_expression (massaged);
09b42213 879 return NULL;
880 }
881
882 if (DECL_CONSTRUCTOR_P (fun)
2f4cab3c 883 && cx_check_missing_mem_inits (DECL_CONTEXT (fun),
884 massaged, !DECL_GENERATED_P (fun)))
09b42213 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
907void
908explain_invalid_constexpr_fn (tree fun)
909{
910 static hash_set<tree> *diagnosed;
911 tree body;
912 location_t save_loc;
33603066 913 /* Only diagnose defaulted functions, lambdas, or instantiations. */
09b42213 914 if (!DECL_DEFAULTED_FN (fun)
33603066 915 && !LAMBDA_TYPE_P (CP_DECL_CONTEXT (fun))
09b42213 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;
33603066 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,
5967b28b 931 "%qD is not usable as a %<constexpr%> function because:", fun);
33603066 932 }
09b42213 933 /* First check the declaration. */
934 if (is_valid_constexpr_fn (fun, true))
935 {
936 /* Then if it's OK, the body. */
33603066 937 if (!DECL_DECLARED_CONSTEXPR_P (fun)
938 && !LAMBDA_TYPE_P (CP_DECL_CONTEXT (fun)))
09b42213 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))
2f4cab3c 945 cx_check_missing_mem_inits (DECL_CONTEXT (fun), body, true);
09b42213 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
955struct 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
b594087e 975struct constexpr_call_hasher : ggc_ptr_hash<constexpr_call>
09b42213 976{
977 static hashval_t hash (constexpr_call *);
978 static bool equal (constexpr_call *, constexpr_call *);
cf72f34d 979};
980
2a2770c6 981enum 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
cf72f34d 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
998struct constexpr_ctx {
f9885b8a 999 /* The innermost call we're evaluating. */
cf72f34d 1000 constexpr_call *call;
f9885b8a 1001 /* Values for any temporaries or local variables within the
1002 constant-expression. */
cf72f34d 1003 hash_map<tree,tree> *values;
2631cb67 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;
f9885b8a 1007 /* The CONSTRUCTOR we're currently building up for an aggregate
1008 initializer. */
cf72f34d 1009 tree ctor;
f9885b8a 1010 /* The object we're building the CONSTRUCTOR for. */
cf72f34d 1011 tree object;
2a2770c6 1012 /* If inside SWITCH_EXPR. */
1013 constexpr_switch_state *css_state;
f9885b8a 1014 /* Whether we should error on a non-constant expression or fail quietly. */
f83e6885 1015 bool quiet;
f9885b8a 1016 /* Whether we are strictly conforming to constant expression rules or
1017 trying harder to get a constant value. */
2055d27a 1018 bool strict;
18d371d3 1019 /* Whether __builtin_is_constant_evaluated () should be true. */
1020 bool pretend_const_required;
cf72f34d 1021};
09b42213 1022
1023/* A table of all constexpr calls that have been evaluated by the
1024 compiler in this translation unit. */
1025
a050099a 1026static GTY (()) hash_table<constexpr_call_hasher> *constexpr_call_table;
09b42213 1027
cf72f34d 1028static tree cxx_eval_constant_expression (const constexpr_ctx *, tree,
b2a43197 1029 bool, bool *, bool *, tree * = NULL);
09b42213 1030
1031/* Compute a hash value for a constexpr call representation. */
1032
1033inline hashval_t
1034constexpr_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
1043bool
1044constexpr_call_hasher::equal (constexpr_call *lhs, constexpr_call *rhs)
1045{
1046 tree lhs_bindings;
1047 tree rhs_bindings;
1048 if (lhs == rhs)
c751e2cd 1049 return true;
1050 if (lhs->hash != rhs->hash)
1051 return false;
09b42213 1052 if (!constexpr_fundef_hasher::equal (lhs->fundef, rhs->fundef))
c751e2cd 1053 return false;
09b42213 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))
c751e2cd 1062 return false;
09b42213 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
1071static void
1072maybe_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
4f7ebe46 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
a050099a 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.
4f7ebe46 1087
a050099a 1088 This is not GC-deletable to avoid GC affecting UID generation. */
4f7ebe46 1089
a050099a 1090static GTY(()) hash_map<tree, tree> *fundef_copies_table;
4f7ebe46 1091
1092/* Initialize FUNDEF_COPIES_TABLE if it's not initialized. */
1093
1094static void
1095maybe_initialize_fundef_copies_table ()
1096{
a050099a 1097 if (fundef_copies_table == NULL)
1098 fundef_copies_table = hash_map<tree,tree>::create_ggc (101);
4f7ebe46 1099}
1100
1101/* Reuse a copy or create a new unshared copy of the function FUN.
886d5463 1102 Return this copy. We use a TREE_LIST whose PURPOSE is body, VALUE
1103 is parms, TYPE is result. */
4f7ebe46 1104
a050099a 1105static tree
4f7ebe46 1106get_fundef_copy (tree fun)
1107{
1108 maybe_initialize_fundef_copies_table ();
1109
a050099a 1110 tree copy;
886d5463 1111 bool existed;
1112 tree *slot = &fundef_copies_table->get_or_insert (fun, &existed);
1113
1114 if (!existed)
4f7ebe46 1115 {
886d5463 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. */
a050099a 1125 copy = build_tree_list (NULL, NULL);
a050099a 1126 TREE_PURPOSE (copy) = copy_fn (fun, TREE_VALUE (copy), TREE_TYPE (copy));
4f7ebe46 1127 }
1128 else
1129 {
886d5463 1130 /* We have a cached function available. */
4f7ebe46 1131 copy = *slot;
a050099a 1132 *slot = TREE_CHAIN (copy);
4f7ebe46 1133 }
1134
1135 return copy;
1136}
1137
886d5463 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. */
4f7ebe46 1141
1142static void
a050099a 1143save_fundef_copy (tree fun, tree copy)
4f7ebe46 1144{
886d5463 1145 tree *slot = fundef_copies_table->get (fun);
a050099a 1146 TREE_CHAIN (copy) = *slot;
4f7ebe46 1147 *slot = copy;
1148}
1149
09b42213 1150/* We have an expression tree T that represents a call, either CALL_EXPR
1151 or AGGR_INIT_EXPR. Return the Nth argument. */
1152
1153static inline tree
1154get_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
09b42213 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
1174static tree
f1c6af10 1175cxx_eval_builtin_function_call (const constexpr_ctx *ctx, tree t, tree fun,
1227ba74 1176 bool lval,
09b42213 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;
f1c6af10 1183
1184 /* Don't fold __builtin_constant_p within a constexpr function. */
18d371d3 1185 bool bi_const_p = DECL_IS_BUILTIN_CONSTANT_P (fun);
efe6a40a 1186
0f5cec54 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. */
efe6a40a 1189 if (bi_const_p
0f5cec54 1190 && ctx->quiet
f1c6af10 1191 && current_function_decl
1192 && DECL_DECLARED_CONSTEXPR_P (current_function_decl))
09b42213 1193 {
f1c6af10 1194 *non_constant_p = true;
1195 return t;
09b42213 1196 }
f1c6af10 1197
18d371d3 1198 /* For __builtin_is_constant_evaluated, defer it if not
1199 ctx->pretend_const_required, otherwise fold it to true. */
a0e9bfbb 1200 if (fndecl_built_in_p (fun, CP_BUILT_IN_IS_CONSTANT_EVALUATED,
1201 BUILT_IN_FRONTEND))
18d371d3 1202 {
1203 if (!ctx->pretend_const_required)
1204 {
1205 *non_constant_p = true;
1206 return t;
1207 }
1208 return boolean_true_node;
1209 }
1210
f1c6af10 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)
efe6a40a 1217 {
91b66c3c 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);
efe6a40a 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 }
f1c6af10 1231
1232 bool save_ffbcp = force_folding_builtin_constant_p;
1233 force_folding_builtin_constant_p = true;
051eb924 1234 new_call = fold_builtin_call_array (EXPR_LOCATION (t), TREE_TYPE (t),
1235 CALL_EXPR_FN (t), nargs, args);
f1c6af10 1236 force_folding_builtin_constant_p = save_ffbcp;
051eb924 1237 if (new_call == NULL)
1238 {
1239 if (!*non_constant_p && !ctx->quiet)
1240 {
2fb20ba2 1241 /* Do not allow__builtin_unreachable in constexpr function.
1242 The __builtin_unreachable call with BUILTINS_LOCATION
1243 comes from cp_maybe_instrument_return. */
a0e9bfbb 1244 if (fndecl_built_in_p (fun, BUILT_IN_UNREACHABLE)
2fb20ba2 1245 && EXPR_LOCATION (t) == BUILTINS_LOCATION)
5967b28b 1246 error ("%<constexpr%> call flows off the end of the function");
2fb20ba2 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 }
051eb924 1253 }
1254 *non_constant_p = true;
1255 return t;
1256 }
1257
7e1f8be4 1258 if (!is_constant_expression (new_call))
051eb924 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);
09b42213 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
1273static tree
1274adjust_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
e283bb4f 1285/* Callback for walk_tree used by unshare_constructor. */
1286
1287static tree
1288find_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
1300static tree
1301unshare_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
09b42213 1309/* Subroutine of cxx_eval_call_expression.
1310 We are processing a call expression (either CALL_EXPR or
cf72f34d 1311 AGGR_INIT_EXPR) in the context of CTX. Evaluate
09b42213 1312 all arguments and bind their values to correspondings
1313 parameters, making up the NEW_CALL context. */
1314
1315static void
cf72f34d 1316cxx_bind_parameters_in_call (const constexpr_ctx *ctx, tree t,
09b42213 1317 constexpr_call *new_call,
c8f6aeb1 1318 bool *non_constant_p, bool *overflow_p,
1319 bool *non_constant_args)
09b42213 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;
9c96033c 1325 tree *p = &new_call->bindings;
09b42213 1326 for (i = 0; i < nargs; ++i)
1327 {
1328 tree x, arg;
1329 tree type = parms ? TREE_TYPE (parms) : void_type_node;
09b42213 1330 x = get_nth_callarg (t, i);
cf72f34d 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
9c96033c 1333 which case we get the real argument from ctx. */
cf72f34d 1334 if (i == 0 && DECL_CONSTRUCTOR_P (fun)
1335 && is_dummy_object (x))
1336 {
1337 x = ctx->object;
c017458d 1338 x = build_address (x);
cf72f34d 1339 }
2e1c71c2 1340 arg = cxx_eval_constant_expression (ctx, x, /*lval=*/false,
b2a43197 1341 non_constant_p, overflow_p);
09b42213 1342 /* Don't VERIFY_CONSTANT here. */
f83e6885 1343 if (*non_constant_p && ctx->quiet)
09b42213 1344 return;
1345 /* Just discard ellipsis args after checking their constantitude. */
1346 if (!parms)
1347 continue;
2ba934c7 1348
1349 if (!*non_constant_p)
1350 {
24d5b4f0 1351 /* Don't share a CONSTRUCTOR that might be changed. */
1352 arg = unshare_constructor (arg);
2ba934c7 1353 /* Make sure the binding has the same type as the parm. But
1354 only for constant args. */
90ad495b 1355 if (!TYPE_REF_P (type))
2ba934c7 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 }
09b42213 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. */
16fb756f 1370static vec<tree> call_stack;
09b42213 1371static int call_stack_tick;
1372static int last_cx_error_tick;
1373
1374static bool
1375push_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
1386static void
1387pop_cx_call_context (void)
1388{
1389 ++call_stack_tick;
1390 call_stack.pop ();
1391}
1392
1393vec<tree>
1394cx_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
732905bb 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
1408static tree
1409cxx_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:
3c77f69c 1420 case IFN_FALLTHROUGH:
732905bb 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
6e1b2ffb 1433 case IFN_LAUNDER:
1434 return cxx_eval_constant_expression (ctx, CALL_EXPR_ARG (t, 0),
1435 false, non_constant_p, overflow_p);
1436
732905bb 1437 default:
1438 if (!ctx->quiet)
d3a3cfb8 1439 error_at (cp_expr_loc_or_loc (t, input_location),
732905bb 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 {
d3a3cfb8 1454 location_t loc = cp_expr_loc_or_loc (t, input_location);
732905bb 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
165d0d5b 1472/* Clean CONSTRUCTOR_NO_CLEARING from CTOR and its sub-aggregates. */
79cdb4f5 1473
1474static void
1475clear_no_implicit_zero (tree ctor)
1476{
165d0d5b 1477 if (CONSTRUCTOR_NO_CLEARING (ctor))
79cdb4f5 1478 {
165d0d5b 1479 CONSTRUCTOR_NO_CLEARING (ctor) = false;
79cdb4f5 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
09b42213 1487/* Subroutine of cxx_eval_constant_expression.
1488 Evaluate the call expression tree T in the context of OLD_CALL expression
1489 evaluation. */
1490
1491static tree
cf72f34d 1492cxx_eval_call_expression (const constexpr_ctx *ctx, tree t,
1227ba74 1493 bool lval,
09b42213 1494 bool *non_constant_p, bool *overflow_p)
1495{
d3a3cfb8 1496 location_t loc = cp_expr_loc_or_loc (t, input_location);
09b42213 1497 tree fun = get_function_named_in_call (t);
09b42213 1498 constexpr_call new_call = { NULL, NULL, NULL, 0 };
09b42213 1499 bool depth_ok;
1500
6b71bdb4 1501 if (fun == NULL_TREE)
732905bb 1502 return cxx_eval_internal_function (ctx, t, lval,
1503 non_constant_p, overflow_p);
6b71bdb4 1504
09b42213 1505 if (TREE_CODE (fun) != FUNCTION_DECL)
1506 {
1507 /* Might be a constexpr function pointer. */
f83e6885 1508 fun = cxx_eval_constant_expression (ctx, fun,
1227ba74 1509 /*lval*/false, non_constant_p,
b2a43197 1510 overflow_p);
09b42213 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 {
f83e6885 1517 if (!ctx->quiet && !*non_constant_p)
5967b28b 1518 error_at (loc, "expression %qE does not designate a %<constexpr%> "
09b42213 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);
6b71bdb4 1525
1526 if (is_ubsan_builtin_p (fun))
1527 return void_node;
1528
a0e9bfbb 1529 if (fndecl_built_in_p (fun))
f1c6af10 1530 return cxx_eval_builtin_function_call (ctx, t, fun,
1227ba74 1531 lval, non_constant_p, overflow_p);
09b42213 1532 if (!DECL_DECLARED_CONSTEXPR_P (fun))
1533 {
f83e6885 1534 if (!ctx->quiet)
09b42213 1535 {
1dcd84cf 1536 if (!lambda_static_thunk_p (fun))
5967b28b 1537 error_at (loc, "call to non-%<constexpr%> function %qD", fun);
09b42213 1538 explain_invalid_constexpr_fn (fun);
1539 }
1540 *non_constant_p = true;
1541 return t;
1542 }
1543
9ebe2ea3 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);
165d0d5b 1552 CONSTRUCTOR_NO_CLEARING (ctor) = true;
9ebe2ea3 1553 ctx->values->put (new_ctx.object, ctor);
1554 ctx = &new_ctx;
1555 }
1556
09b42213 1557 /* Shortcut trivial constructor/op=. */
1558 if (trivial_fn_p (fun))
1559 {
9ebe2ea3 1560 tree init = NULL_TREE;
09b42213 1561 if (call_expr_nargs (t) == 2)
9ebe2ea3 1562 init = convert_from_reference (get_nth_callarg (t, 1));
09b42213 1563 else if (TREE_CODE (t) == AGGR_INIT_EXPR
1564 && AGGR_INIT_ZERO_FIRST (t))
9ebe2ea3 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);
0ce12360 1574 new_ctx.call = &new_call;
1575 return cxx_eval_constant_expression (&new_ctx, set, lval,
9ebe2ea3 1576 non_constant_p, overflow_p);
1577 }
09b42213 1578 }
1579
8afcf831 1580 /* We can't defer instantiating the function any longer. */
1581 if (!DECL_INITIAL (fun)
1582 && DECL_TEMPLOID_INSTANTIATION (fun))
1583 {
31db86df 1584 location_t save_loc = input_location;
1585 input_location = loc;
8afcf831 1586 ++function_depth;
1587 instantiate_decl (fun, /*defer_ok*/false, /*expl_inst*/false);
1588 --function_depth;
31db86df 1589 input_location = save_loc;
8afcf831 1590 }
1591
09b42213 1592 /* If in direct recursive call, optimize definition search. */
0ce12360 1593 if (ctx && ctx->call && ctx->call->fundef && ctx->call->fundef->decl == fun)
cf72f34d 1594 new_call.fundef = ctx->call->fundef;
09b42213 1595 else
1596 {
1597 new_call.fundef = retrieve_constexpr_fundef (fun);
d2a9b1c1 1598 if (new_call.fundef == NULL || new_call.fundef->body == NULL
1599 || fun == current_function_decl)
09b42213 1600 {
f83e6885 1601 if (!ctx->quiet)
09b42213 1602 {
d2a9b1c1 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)
a0efa758 1609 error_at (loc, "%qD called in a constant expression before its "
1610 "definition is complete", fun);
1611 else if (DECL_INITIAL (fun))
09b42213 1612 {
33603066 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);
09b42213 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 }
9c96033c 1626
c8f6aeb1 1627 bool non_constant_args = false;
cf72f34d 1628 cxx_bind_parameters_in_call (ctx, t, &new_call,
c8f6aeb1 1629 non_constant_p, overflow_p, &non_constant_args);
09b42213 1630 if (*non_constant_p)
1631 return t;
1632
1633 depth_ok = push_cx_call_context (t);
1634
c8f6aeb1 1635 tree result = NULL_TREE;
09b42213 1636
c8f6aeb1 1637 constexpr_call *entry = NULL;
167a09fb 1638 if (depth_ok && !non_constant_args && ctx->strict)
09b42213 1639 {
c8f6aeb1 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 }
2ba934c7 1655 /* Calls that are in progress have their result set to NULL,
c8f6aeb1 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;
09b42213 1666 }
1667
1668 if (!depth_ok)
1669 {
f83e6885 1670 if (!ctx->quiet)
5967b28b 1671 error ("%<constexpr%> evaluation depth exceeds maximum of %d (use "
f91d3a9d 1672 "%<-fconstexpr-depth=%> to increase the maximum)",
09b42213 1673 max_constexpr_depth);
1674 *non_constant_p = true;
c8f6aeb1 1675 result = error_mark_node;
09b42213 1676 }
1677 else
1678 {
ab099088 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
cf72f34d 1691 {
4f7ebe46 1692 tree body, parms, res;
88a59139 1693
4f7ebe46 1694 /* Reuse or create a new unshared copy of this function's body. */
a050099a 1695 tree copy = get_fundef_copy (fun);
1696 body = TREE_PURPOSE (copy);
1697 parms = TREE_VALUE (copy);
1698 res = TREE_TYPE (copy);
88a59139 1699
1700 /* Associate the bindings with the remapped parms. */
1701 tree bound = new_call.bindings;
1702 tree remapped = parms;
1703 while (bound)
9c96033c 1704 {
88a59139 1705 tree oparm = TREE_PURPOSE (bound);
1706 tree arg = TREE_VALUE (bound);
1707 gcc_assert (DECL_NAME (remapped) == DECL_NAME (oparm));
5898f0d7 1708 /* Don't share a CONSTRUCTOR that might be changed. */
e283bb4f 1709 arg = unshare_constructor (arg);
88a59139 1710 ctx->values->put (remapped, arg);
1711 bound = TREE_CHAIN (bound);
1712 remapped = DECL_CHAIN (remapped);
9c96033c 1713 }
88a59139 1714 /* Add the RESULT_DECL to the values map, too. */
1715 tree slot = NULL_TREE;
1716 if (DECL_BY_REFERENCE (res))
9c96033c 1717 {
88a59139 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);
9c96033c 1726
4f7ebe46 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;
43b7271d 1732 ctx_with_save_exprs.call = &new_call;
4f7ebe46 1733
88a59139 1734 tree jump_target = NULL_TREE;
4f7ebe46 1735 cxx_eval_constant_expression (&ctx_with_save_exprs, body,
88a59139 1736 lval, non_constant_p, overflow_p,
1737 &jump_target);
9c96033c 1738
88a59139 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)
9c96033c 1752 {
88a59139 1753 if (!ctx->quiet)
5967b28b 1754 error ("%<constexpr%> call flows off the end "
88a59139 1755 "of the function");
1756 *non_constant_p = true;
9c96033c 1757 }
9c96033c 1758 }
88a59139 1759
4f7ebe46 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
88a59139 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);
4f7ebe46 1774
1775 /* Make the unshared function copy we used available for re-use. */
1776 save_fundef_copy (fun, copy);
cf72f34d 1777 }
9c96033c 1778
09b42213 1779 if (result == error_mark_node)
1780 *non_constant_p = true;
c3f376bf 1781 if (*non_constant_p || *overflow_p)
c8f6aeb1 1782 result = error_mark_node;
88a59139 1783 else if (!result)
9c96033c 1784 result = void_node;
c8f6aeb1 1785 if (entry)
1786 entry->result = result;
09b42213 1787 }
1788
c6d97004 1789 /* The result of a constexpr function must be completely initialized. */
1790 if (TREE_CODE (result) == CONSTRUCTOR)
79cdb4f5 1791 clear_no_implicit_zero (result);
c6d97004 1792
09b42213 1793 pop_cx_call_context ();
e283bb4f 1794 return unshare_constructor (result);
09b42213 1795}
1796
1797/* FIXME speed this up, it's taking 16% of compile time on sieve testcase. */
1798
1799bool
1800reduced_constant_expression_p (tree t)
1801{
a34934c2 1802 if (t == NULL_TREE)
1803 return false;
1804
09b42213 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. */
56da7fe6 1813 tree idx, val, field; unsigned HOST_WIDE_INT i;
165d0d5b 1814 if (CONSTRUCTOR_NO_CLEARING (t))
c4210852 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 }
56da7fe6 1822 else
1823 field = NULL_TREE;
1824 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (t), i, idx, val)
ce4ffd9e 1825 {
a34934c2 1826 /* If VAL is null, we're in the middle of initializing this
1827 element. */
56da7fe6 1828 if (!reduced_constant_expression_p (val))
ce4ffd9e 1829 return false;
56da7fe6 1830 if (field)
1831 {
1832 if (idx != field)
1833 return false;
1834 field = next_initializable_field (DECL_CHAIN (field));
1835 }
ce4ffd9e 1836 }
56da7fe6 1837 if (field)
1838 return false;
165d0d5b 1839 else if (CONSTRUCTOR_NO_CLEARING (t))
56da7fe6 1840 /* All the fields are initialized. */
165d0d5b 1841 CONSTRUCTOR_NO_CLEARING (t) = false;
09b42213 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
941fafa5 1851 themselves, such as 1/0. Call this function to check for that
1852 condition.
09b42213 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
1859static bool
1860verify_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
2b035ffe 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
1888static bool
1889cxx_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)
91d87e22 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);
2b035ffe 1909 }
1910 if (compare_tree_int (rhs, uprec) >= 0)
1911 {
1912 if (!ctx->quiet)
91d87e22 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);
2b035ffe 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)
91d87e22 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);
2b035ffe 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)
91d87e22 1950 permerror (loc, "shift expression %q+E overflows",
1951 build2_loc (loc, code, type, lhs, rhs));
1952 return (!flag_permissive || ctx->quiet);
2b035ffe 1953 }
1954 }
1955 return false;
1956}
1957
09b42213 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
1963static tree
cf72f34d 1964cxx_eval_unary_expression (const constexpr_ctx *ctx, tree t,
c8f6aeb1 1965 bool /*lval*/,
09b42213 1966 bool *non_constant_p, bool *overflow_p)
1967{
1968 tree r;
1969 tree orig_arg = TREE_OPERAND (t, 0);
c8f6aeb1 1970 tree arg = cxx_eval_constant_expression (ctx, orig_arg, /*lval*/false,
1971 non_constant_p, overflow_p);
09b42213 1972 VERIFY_CONSTANT (arg);
93add516 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 }
09b42213 1984 VERIFY_CONSTANT (r);
1985 return r;
1986}
1987
46fad8d5 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
1992static tree
1993cxx_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
09b42213 2045/* Subroutine of cxx_eval_constant_expression.
2046 Like cxx_eval_unary_expression, except for binary expressions. */
2047
2048static tree
cf72f34d 2049cxx_eval_binary_expression (const constexpr_ctx *ctx, tree t,
c8f6aeb1 2050 bool /*lval*/,
09b42213 2051 bool *non_constant_p, bool *overflow_p)
2052{
f7ef5392 2053 tree r = NULL_TREE;
09b42213 2054 tree orig_lhs = TREE_OPERAND (t, 0);
2055 tree orig_rhs = TREE_OPERAND (t, 1);
2056 tree lhs, rhs;
c8f6aeb1 2057 lhs = cxx_eval_constant_expression (ctx, orig_lhs, /*lval*/false,
b2a43197 2058 non_constant_p, overflow_p);
6d6737d9 2059 /* Don't VERIFY_CONSTANT here, it's unnecessary and will break pointer
2060 subtraction. */
2061 if (*non_constant_p)
2062 return t;
c8f6aeb1 2063 rhs = cxx_eval_constant_expression (ctx, orig_rhs, /*lval*/false,
b2a43197 2064 non_constant_p, overflow_p);
6d6737d9 2065 if (*non_constant_p)
2066 return t;
93add516 2067
2068 location_t loc = EXPR_LOCATION (t);
2069 enum tree_code code = TREE_CODE (t);
2070 tree type = TREE_TYPE (t);
f7ef5392 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)
e9f29fe5 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 }
f7ef5392 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);
f31f4e9c 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);
f7ef5392 2103 }
cb768824 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);
2b1749c4 2109 *non_constant_p = true;
cb768824 2110 return t;
2111 }
46fad8d5 2112 else if (code == POINTER_PLUS_EXPR)
2113 r = cxx_fold_pointer_plus_expression (ctx, t, lhs, rhs, non_constant_p,
2114 overflow_p);
f7ef5392 2115
2116 if (r == NULL_TREE)
2117 r = fold_binary_loc (loc, code, type, lhs, rhs);
2118
93add516 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 }
2b035ffe 2126 else if (cxx_eval_check_shift_p (loc, ctx, code, type, lhs, rhs))
2127 *non_constant_p = true;
6d6737d9 2128 /* Don't VERIFY_CONSTANT if this might be dealing with a pointer to
2129 a local array in a constexpr function. */
d03fa520 2130 bool ptr = INDIRECT_TYPE_P (TREE_TYPE (lhs));
35f2c28f 2131 if (!ptr)
aae7465c 2132 VERIFY_CONSTANT (r);
09b42213 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
2140static tree
cf72f34d 2141cxx_eval_conditional_expression (const constexpr_ctx *ctx, tree t,
1227ba74 2142 bool lval,
00f21715 2143 bool *non_constant_p, bool *overflow_p,
2144 tree *jump_target)
09b42213 2145{
cf72f34d 2146 tree val = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0),
c8f6aeb1 2147 /*lval*/false,
b2a43197 2148 non_constant_p, overflow_p);
09b42213 2149 VERIFY_CONSTANT (val);
2150 /* Don't VERIFY_CONSTANT the other operands. */
2151 if (integer_zerop (val))
cf72f34d 2152 return cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 2),
1227ba74 2153 lval,
00f21715 2154 non_constant_p, overflow_p,
2155 jump_target);
cf72f34d 2156 return cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 1),
1227ba74 2157 lval,
00f21715 2158 non_constant_p, overflow_p,
2159 jump_target);
09b42213 2160}
2161
31595caf 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
2169static tree
2170cxx_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
7963b19d 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
2204static int
2205array_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
2232static HOST_WIDE_INT
2233find_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 {
e99466d6 2249 tree cindex = (*elts)[end - 1].index;
7963b19d 2250 if (TREE_CODE (cindex) == INTEGER_CST
e99466d6 2251 && compare_tree_int (cindex, end - 1) == 0)
7963b19d 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;
f0b916c7 2264 constructor_elt &elt = (*elts)[middle];
2265 tree idx = elt.index;
7963b19d 2266
f0b916c7 2267 int cmp = array_index_cmp (dindex, idx);
7963b19d 2268 if (cmp < 0)
2269 end = middle;
2270 else if (cmp > 0)
2271 begin = middle + 1;
2272 else
f0b916c7 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);
e99466d6 2280 tree value = elt.value;
2281 dindex = fold_convert (sizetype, dindex);
f0b916c7 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;
e99466d6 2295 e.value = unshare_constructor (value);
f0b916c7 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);
e99466d6 2311 e.value = unshare_constructor (value);
2312 vec_safe_insert (CONSTRUCTOR_ELTS (ary), middle + 1, e);
f0b916c7 2313 }
2314 }
2315 return middle;
2316 }
7963b19d 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
40df9099 2329/* Under the control of CTX, issue a detailed diagnostic for
2330 an out-of-bounds subscript INDEX into the expression ARRAY. */
2331
2332static void
2333diag_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 {
d7d265db 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);
40df9099 2350 inform (DECL_SOURCE_LOCATION (array), "declared here");
2351 }
d7d265db 2352 else if (TYPE_DOMAIN (arraytype))
40df9099 2353 error ("array subscript value %qE is outside the bounds "
2354 "of array type %qT", sidx, arraytype);
d7d265db 2355 else
2356 error ("non-zero array subscript %qE is used with array of type %qT "
2357 "with unknown bounds", sidx, arraytype);
40df9099 2358 }
2359}
7963b19d 2360
51f0c7e2 2361/* Return the number of elements for TYPE (which is an ARRAY_TYPE or
2362 a VECTOR_TYPE). */
2363
2364static tree
2365get_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
92fe8840 2387/* Extract element INDEX consisting of CHARS_PER_ELT chars from
2388 STRING_CST STRING. */
2389
2390static tree
2391extract_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
09b42213 2408/* Subroutine of cxx_eval_constant_expression.
2409 Attempt to reduce a reference to an array slot. */
2410
2411static tree
cf72f34d 2412cxx_eval_array_reference (const constexpr_ctx *ctx, tree t,
1227ba74 2413 bool lval,
09b42213 2414 bool *non_constant_p, bool *overflow_p)
2415{
2416 tree oldary = TREE_OPERAND (t, 0);
cf72f34d 2417 tree ary = cxx_eval_constant_expression (ctx, oldary,
1227ba74 2418 lval,
b2a43197 2419 non_constant_p, overflow_p);
09b42213 2420 tree index, oldidx;
cf3cefc9 2421 HOST_WIDE_INT i = 0;
2422 tree elem_type = NULL_TREE;
2423 unsigned len = 0, elem_nchars = 1;
09b42213 2424 if (*non_constant_p)
2425 return t;
2426 oldidx = TREE_OPERAND (t, 1);
cf72f34d 2427 index = cxx_eval_constant_expression (ctx, oldidx,
f83e6885 2428 false,
b2a43197 2429 non_constant_p, overflow_p);
09b42213 2430 VERIFY_CONSTANT (index);
cf3cefc9 2431 if (!lval)
09b42213 2432 {
cf3cefc9 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)
f08ee65f 2447 /* We don't create variable-length VECTOR_CSTs. */
2448 len = VECTOR_CST_NELTS (ary).to_constant ();
cf3cefc9 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 }
aed8dc7f 2456
cf3cefc9 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 }
7963b19d 2464 }
2465
51f0c7e2 2466 tree nelts = get_array_or_vector_nelts (ctx, TREE_TYPE (ary), non_constant_p,
2467 overflow_p);
ce6a6978 2468 VERIFY_CONSTANT (nelts);
0acc6340 2469 if ((lval
2470 ? !tree_int_cst_le (index, nelts)
2471 : !tree_int_cst_lt (index, nelts))
2472 || tree_int_cst_sgn (index) < 0)
ce6a6978 2473 {
40df9099 2474 diag_array_subscript (ctx, ary, index);
ce6a6978 2475 *non_constant_p = true;
2476 return t;
2477 }
2478
cf3cefc9 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
7963b19d 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;
aed8dc7f 2491 }
7963b19d 2492 else
2493 found = (i < len);
aed8dc7f 2494
14869f28 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);
14869f28 2502 else
92fe8840 2503 r = extract_string_elt (ary, elem_nchars, i);
2504
14869f28 2505 if (r)
2506 /* Don't VERIFY_CONSTANT here. */
2507 return r;
09b42213 2508
14869f28 2509 /* Otherwise the element doesn't have a value yet. */
09b42213 2510 }
aed8dc7f 2511
14869f28 2512 /* Not found. */
2513
2514 if (TREE_CODE (ary) == CONSTRUCTOR
165d0d5b 2515 && CONSTRUCTOR_NO_CLEARING (ary))
09b42213 2516 {
14869f28 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;
09b42213 2524 }
14869f28 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);
09b42213 2531}
2532
2533/* Subroutine of cxx_eval_constant_expression.
2534 Attempt to reduce a field access of a value of class type. */
2535
2536static tree
cf72f34d 2537cxx_eval_component_reference (const constexpr_ctx *ctx, tree t,
1227ba74 2538 bool lval,
09b42213 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);
cf72f34d 2546 tree whole = cxx_eval_constant_expression (ctx, orig_whole,
1227ba74 2547 lval,
b2a43197 2548 non_constant_p, overflow_p);
7ab20d7c 2549 if (INDIRECT_REF_P (whole)
2b1749c4 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 }
cb768824 2557
f16ed232 2558 if (TREE_CODE (whole) == PTRMEM_CST)
2559 whole = cplus_expand_constant (whole);
09b42213 2560 if (whole == orig_whole)
2561 return t;
1227ba74 2562 if (lval)
09b42213 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 {
f83e6885 2569 if (!ctx->quiet)
09b42213 2570 error ("%qE is not a constant expression", orig_whole);
2571 *non_constant_p = true;
2572 }
2573 if (DECL_MUTABLE_P (part))
2574 {
f83e6885 2575 if (!ctx->quiet)
09b42213 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;
a4360e57 2581 bool pmf = TYPE_PTRMEMFUNC_P (TREE_TYPE (whole));
09b42213 2582 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (whole), i, field, value)
2583 {
a4360e57 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)
9c96033c 2588 {
2589 if (value)
2590 return value;
2591 else
2592 /* We're in the middle of initializing it. */
2593 break;
2594 }
09b42213 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. */
f83e6885 2600 if (!ctx->quiet)
09b42213 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
f894a056 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
a4360e57 2612 gcc_assert (DECL_CONTEXT (part) == TYPE_MAIN_VARIANT (TREE_TYPE (whole)));
2613
165d0d5b 2614 if (CONSTRUCTOR_NO_CLEARING (whole))
cf72f34d 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
f894a056 2618 error. */
f83e6885 2619 if (!ctx->quiet)
cf72f34d 2620 error ("accessing uninitialized member %qD", part);
2621 *non_constant_p = true;
2622 return t;
2623 }
2624
09b42213 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);
cf72f34d 2627 return cxx_eval_constant_expression (ctx, value,
1227ba74 2628 lval,
b2a43197 2629 non_constant_p, overflow_p);
09b42213 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
2636static tree
cf72f34d 2637cxx_eval_bit_field_ref (const constexpr_ctx *ctx, tree t,
1227ba74 2638 bool lval,
09b42213 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;
cf72f34d 2645 tree whole = cxx_eval_constant_expression (ctx, orig_whole,
1227ba74 2646 lval,
b2a43197 2647 non_constant_p, overflow_p);
09b42213 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 {
f83e6885 2659 if (!ctx->quiet)
09b42213 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
2721static tree
cf72f34d 2722cxx_eval_logical_expression (const constexpr_ctx *ctx, tree t,
09b42213 2723 tree bailout_value, tree continue_value,
1227ba74 2724 bool lval,
09b42213 2725 bool *non_constant_p, bool *overflow_p)
2726{
2727 tree r;
cf72f34d 2728 tree lhs = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0),
1227ba74 2729 lval,
b2a43197 2730 non_constant_p, overflow_p);
09b42213 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));
cf72f34d 2735 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 1),
1227ba74 2736 lval, non_constant_p,
b2a43197 2737 overflow_p);
09b42213 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
2747static constructor_elt *
2748base_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
cf72f34d 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
2776static tree
2777initialized_type (tree t)
2778{
2779 if (TYPE_P (t))
2780 return t;
2781 tree type = cv_unqualified (TREE_TYPE (t));
2782 if (TREE_CODE (t) == CALL_EXPR || TREE_CODE (t) == AGGR_INIT_EXPR)
2783 {
2784 /* A constructor call has void type, so we need to look deeper. */
2785 tree fn = get_function_named_in_call (t);
2786 if (fn && TREE_CODE (fn) == FUNCTION_DECL
2787 && DECL_CXX_CONSTRUCTOR_P (fn))
2788 type = DECL_CONTEXT (fn);
2789 }
2790 return type;
2791}
2792
2793/* We're about to initialize element INDEX of an array or class from VALUE.
2794 Set up NEW_CTX appropriately by adjusting .object to refer to the
2795 subobject and creating a new CONSTRUCTOR if the element is itself
2796 a class or array. */
2797
2798static void
2799init_subob_ctx (const constexpr_ctx *ctx, constexpr_ctx &new_ctx,
2800 tree index, tree &value)
2801{
2802 new_ctx = *ctx;
2803
2804 if (index && TREE_CODE (index) != INTEGER_CST
2805 && TREE_CODE (index) != FIELD_DECL)
2806 /* This won't have an element in the new CONSTRUCTOR. */
2807 return;
2808
2809 tree type = initialized_type (value);
2810 if (!AGGREGATE_TYPE_P (type) && !VECTOR_TYPE_P (type))
2811 /* A non-aggregate member doesn't get its own CONSTRUCTOR. */
2812 return;
2813
2814 /* The sub-aggregate initializer might contain a placeholder;
2815 update object to refer to the subobject and ctor to refer to
2816 the (newly created) sub-initializer. */
2817 if (ctx->object)
2818 new_ctx.object = build_ctor_subob_ref (index, type, ctx->object);
2819 tree elt = build_constructor (type, NULL);
165d0d5b 2820 CONSTRUCTOR_NO_CLEARING (elt) = true;
cf72f34d 2821 new_ctx.ctor = elt;
2822
2823 if (TREE_CODE (value) == TARGET_EXPR)
2824 /* Avoid creating another CONSTRUCTOR when we expand the TARGET_EXPR. */
2825 value = TARGET_EXPR_INITIAL (value);
2826}
2827
2828/* We're about to process an initializer for a class or array TYPE. Make
2829 sure that CTX is set up appropriately. */
2830
2831static void
2832verify_ctor_sanity (const constexpr_ctx *ctx, tree type)
2833{
2834 /* We don't bother building a ctor for an empty base subobject. */
2835 if (is_empty_class (type))
2836 return;
2837
2838 /* We're in the middle of an initializer that might involve placeholders;
2839 our caller should have created a CONSTRUCTOR for us to put the
2840 initializer into. We will either return that constructor or T. */
2841 gcc_assert (ctx->ctor);
2842 gcc_assert (same_type_ignoring_top_level_qualifiers_p
2843 (type, TREE_TYPE (ctx->ctor)));
bbf58224 2844 /* We used to check that ctx->ctor was empty, but that isn't the case when
2845 the object is zero-initialized before calling the constructor. */
cf72f34d 2846 if (ctx->object)
d9751a3c 2847 {
2848 tree otype = TREE_TYPE (ctx->object);
2849 gcc_assert (same_type_ignoring_top_level_qualifiers_p (type, otype)
2850 /* Handle flexible array members. */
2851 || (TREE_CODE (otype) == ARRAY_TYPE
2852 && TYPE_DOMAIN (otype) == NULL_TREE
2853 && TREE_CODE (type) == ARRAY_TYPE
2854 && (same_type_ignoring_top_level_qualifiers_p
2855 (TREE_TYPE (type), TREE_TYPE (otype)))));
2856 }
cf72f34d 2857 gcc_assert (!ctx->object || !DECL_P (ctx->object)
2858 || *(ctx->values->get (ctx->object)) == ctx->ctor);
2859}
2860
09b42213 2861/* Subroutine of cxx_eval_constant_expression.
2862 The expression tree T denotes a C-style array or a C-style
2863 aggregate. Reduce it to a constant expression. */
2864
2865static tree
cf72f34d 2866cxx_eval_bare_aggregate (const constexpr_ctx *ctx, tree t,
1227ba74 2867 bool lval,
09b42213 2868 bool *non_constant_p, bool *overflow_p)
2869{
2870 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (t);
09b42213 2871 bool changed = false;
2872 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (t));
68464393 2873 tree type = TREE_TYPE (t);
cf72f34d 2874
68464393 2875 constexpr_ctx new_ctx;
d2dd85e3 2876 if (TYPE_PTRMEMFUNC_P (type) || VECTOR_TYPE_P (type))
68464393 2877 {
d2dd85e3 2878 /* We don't really need the ctx->ctor business for a PMF or
2879 vector, but it's simpler to use the same code. */
68464393 2880 new_ctx = *ctx;
2881 new_ctx.ctor = build_constructor (type, NULL);
2882 new_ctx.object = NULL_TREE;
2883 ctx = &new_ctx;
2884 };
2885 verify_ctor_sanity (ctx, type);
cf72f34d 2886 vec<constructor_elt, va_gc> **p = &CONSTRUCTOR_ELTS (ctx->ctor);
2887 vec_alloc (*p, vec_safe_length (v));
2888
58b0f9ce 2889 unsigned i;
2890 tree index, value;
2891 bool constant_p = true;
2892 bool side_effects_p = false;
cf72f34d 2893 FOR_EACH_CONSTRUCTOR_ELT (v, i, index, value)
09b42213 2894 {
5ae773e4 2895 tree orig_value = value;
cf72f34d 2896 init_subob_ctx (ctx, new_ctx, index, value);
2897 if (new_ctx.ctor != ctx->ctor)
2898 /* If we built a new CONSTRUCTOR, attach it now so that other
2899 initializers can refer to it. */
2900 CONSTRUCTOR_APPEND_ELT (*p, index, new_ctx.ctor);
2901 tree elt = cxx_eval_constant_expression (&new_ctx, value,
1227ba74 2902 lval,
b2a43197 2903 non_constant_p, overflow_p);
09b42213 2904 /* Don't VERIFY_CONSTANT here. */
f83e6885 2905 if (ctx->quiet && *non_constant_p)
cf72f34d 2906 break;
5ae773e4 2907 if (elt != orig_value)
09b42213 2908 changed = true;
58b0f9ce 2909
2910 if (!TREE_CONSTANT (elt))
2911 constant_p = false;
2912 if (TREE_SIDE_EFFECTS (elt))
2913 side_effects_p = true;
cf72f34d 2914 if (index && TREE_CODE (index) == COMPONENT_REF)
09b42213 2915 {
2916 /* This is an initialization of a vfield inside a base
2917 subaggregate that we already initialized; push this
2918 initialization into the previous initialization. */
cf72f34d 2919 constructor_elt *inner = base_field_constructor_elt (*p, index);
09b42213 2920 inner->value = elt;
cf72f34d 2921 changed = true;
09b42213 2922 }
cf72f34d 2923 else if (index
2924 && (TREE_CODE (index) == NOP_EXPR
2925 || TREE_CODE (index) == POINTER_PLUS_EXPR))
09b42213 2926 {
2927 /* This is an initializer for an empty base; now that we've
2928 checked that it's constant, we can ignore it. */
cf72f34d 2929 gcc_assert (is_empty_class (TREE_TYPE (TREE_TYPE (index))));
2930 changed = true;
2931 }
09b42213 2932 else
79e65a6b 2933 {
0dd49b5a 2934 if (new_ctx.ctor != ctx->ctor)
2935 {
2936 /* We appended this element above; update the value. */
2937 gcc_assert ((*p)->last().index == index);
2938 (*p)->last().value = elt;
2939 }
2940 else
2941 CONSTRUCTOR_APPEND_ELT (*p, index, elt);
2942 /* Adding or replacing an element might change the ctor's flags. */
79e65a6b 2943 TREE_CONSTANT (ctx->ctor) = constant_p;
2944 TREE_SIDE_EFFECTS (ctx->ctor) = side_effects_p;
2945 }
09b42213 2946 }
2947 if (*non_constant_p || !changed)
cf72f34d 2948 return t;
2949 t = ctx->ctor;
2950 /* We're done building this CONSTRUCTOR, so now we can interpret an
2951 element without an explicit initializer as value-initialized. */
165d0d5b 2952 CONSTRUCTOR_NO_CLEARING (t) = false;
58b0f9ce 2953 TREE_CONSTANT (t) = constant_p;
2954 TREE_SIDE_EFFECTS (t) = side_effects_p;
68464393 2955 if (VECTOR_TYPE_P (type))
09b42213 2956 t = fold (t);
2957 return t;
2958}
2959
2960/* Subroutine of cxx_eval_constant_expression.
2961 The expression tree T is a VEC_INIT_EXPR which denotes the desired
2962 initialization of a non-static data member of array type. Reduce it to a
2963 CONSTRUCTOR.
2964
2965 Note that apart from value-initialization (when VALUE_INIT is true),
2966 this is only intended to support value-initialization and the
2967 initializations done by defaulted constructors for classes with
2968 non-static data members of array type. In this case, VEC_INIT_EXPR_INIT
2969 will either be NULL_TREE for the default constructor, or a COMPONENT_REF
2970 for the copy/move constructor. */
2971
2972static tree
cf72f34d 2973cxx_eval_vec_init_1 (const constexpr_ctx *ctx, tree atype, tree init,
1227ba74 2974 bool value_init, bool lval,
09b42213 2975 bool *non_constant_p, bool *overflow_p)
2976{
2977 tree elttype = TREE_TYPE (atype);
cf72f34d 2978 verify_ctor_sanity (ctx, atype);
2979 vec<constructor_elt, va_gc> **p = &CONSTRUCTOR_ELTS (ctx->ctor);
09b42213 2980 bool pre_init = false;
3e520b97 2981 unsigned HOST_WIDE_INT i;
c4970310 2982 tsubst_flags_t complain = ctx->quiet ? tf_none : tf_warning_or_error;
09b42213 2983
2984 /* For the default constructor, build up a call to the default
2985 constructor of the element type. We only need to handle class types
2986 here, as for a constructor to be constexpr, all members must be
2987 initialized, which for a defaulted default constructor means they must
2988 be of a class type with a constexpr default constructor. */
2989 if (TREE_CODE (elttype) == ARRAY_TYPE)
2990 /* We only do this at the lowest level. */;
2991 else if (value_init)
2992 {
c4970310 2993 init = build_value_init (elttype, complain);
09b42213 2994 pre_init = true;
2995 }
2996 else if (!init)
2997 {
2998 vec<tree, va_gc> *argvec = make_tree_vector ();
2999 init = build_special_member_call (NULL_TREE, complete_ctor_identifier,
3000 &argvec, elttype, LOOKUP_NORMAL,
c4970310 3001 complain);
09b42213 3002 release_tree_vector (argvec);
9c96033c 3003 init = build_aggr_init_expr (TREE_TYPE (init), init);
09b42213 3004 pre_init = true;
3005 }
3006
51f0c7e2 3007 tree nelts = get_array_or_vector_nelts (ctx, atype, non_constant_p,
3008 overflow_p);
3009 unsigned HOST_WIDE_INT max = tree_to_uhwi (nelts);
3e520b97 3010 for (i = 0; i < max; ++i)
09b42213 3011 {
3012 tree idx = build_int_cst (size_type_node, i);
3013 tree eltinit;
d9377ad5 3014 bool reuse = false;
cf72f34d 3015 constexpr_ctx new_ctx;
3016 init_subob_ctx (ctx, new_ctx, idx, pre_init ? init : elttype);
3017 if (new_ctx.ctor != ctx->ctor)
3018 CONSTRUCTOR_APPEND_ELT (*p, idx, new_ctx.ctor);
09b42213 3019 if (TREE_CODE (elttype) == ARRAY_TYPE)
3020 {
3021 /* A multidimensional array; recurse. */
3022 if (value_init || init == NULL_TREE)
d9377ad5 3023 {
3024 eltinit = NULL_TREE;
3025 reuse = i == 0;
3026 }
09b42213 3027 else
c4970310 3028 eltinit = cp_build_array_ref (input_location, init, idx, complain);
cf72f34d 3029 eltinit = cxx_eval_vec_init_1 (&new_ctx, elttype, eltinit, value_init,
1227ba74 3030 lval,
09b42213 3031 non_constant_p, overflow_p);
3032 }
3033 else if (pre_init)
3034 {
3035 /* Initializing an element using value or default initialization
3036 we just pre-built above. */
d9377ad5 3037 eltinit = cxx_eval_constant_expression (&new_ctx, init, lval,
3038 non_constant_p, overflow_p);
3039 reuse = i == 0;
09b42213 3040 }
3041 else
3042 {
3043 /* Copying an element. */
3044 gcc_assert (same_type_ignoring_top_level_qualifiers_p
3045 (atype, TREE_TYPE (init)));
c4970310 3046 eltinit = cp_build_array_ref (input_location, init, idx, complain);
18bede74 3047 if (!lvalue_p (init))
09b42213 3048 eltinit = move (eltinit);
c4970310 3049 eltinit = force_rvalue (eltinit, complain);
eb7c25cc 3050 eltinit = cxx_eval_constant_expression (&new_ctx, eltinit, lval,
3051 non_constant_p, overflow_p);
09b42213 3052 }
f83e6885 3053 if (*non_constant_p && !ctx->quiet)
cf72f34d 3054 break;
3055 if (new_ctx.ctor != ctx->ctor)
3056 {
3057 /* We appended this element above; update the value. */
3058 gcc_assert ((*p)->last().index == idx);
3059 (*p)->last().value = eltinit;
3060 }
3061 else
3062 CONSTRUCTOR_APPEND_ELT (*p, idx, eltinit);
d9377ad5 3063 /* Reuse the result of cxx_eval_constant_expression call
eb7c25cc 3064 from the first iteration to all others if it is a constant
3065 initializer that doesn't require relocations. */
d9377ad5 3066 if (reuse
3067 && max > 1
eb7c25cc 3068 && (eltinit == NULL_TREE
3069 || (initializer_constant_valid_p (eltinit, TREE_TYPE (eltinit))
3070 == null_pointer_node)))
d9377ad5 3071 {
3072 if (new_ctx.ctor != ctx->ctor)
3073 eltinit = new_ctx.ctor;
228a2cd8 3074 tree range = build2 (RANGE_EXPR, size_type_node,
3075 build_int_cst (size_type_node, 1),
3076 build_int_cst (size_type_node, max - 1));
3077 CONSTRUCTOR_APPEND_ELT (*p, range, unshare_constructor (eltinit));
d9377ad5 3078 break;
3079 }
228a2cd8 3080 else if (i == 0)
3081 vec_safe_reserve (*p, max);
09b42213 3082 }
3083
3084 if (!*non_constant_p)
3085 {
cf72f34d 3086 init = ctx->ctor;
165d0d5b 3087 CONSTRUCTOR_NO_CLEARING (init) = false;
09b42213 3088 }
09b42213 3089 return init;
3090}
3091
3092static tree
cf72f34d 3093cxx_eval_vec_init (const constexpr_ctx *ctx, tree t,
1227ba74 3094 bool lval,
09b42213 3095 bool *non_constant_p, bool *overflow_p)
3096{
3097 tree atype = TREE_TYPE (t);
3098 tree init = VEC_INIT_EXPR_INIT (t);
cf72f34d 3099 tree r = cxx_eval_vec_init_1 (ctx, atype, init,
09b42213 3100 VEC_INIT_EXPR_VALUE_INIT (t),
1227ba74 3101 lval, non_constant_p, overflow_p);
09b42213 3102 if (*non_constant_p)
3103 return t;
3104 else
3105 return r;
3106}
3107
6b53d686 3108/* Like same_type_ignoring_top_level_qualifiers_p, but also handle the case
3109 where the desired type is an array of unknown bounds because the variable
3110 has had its bounds deduced since the wrapping expression was created. */
3111
3112static bool
3113same_type_ignoring_tlq_and_bounds_p (tree type1, tree type2)
3114{
3115 while (TREE_CODE (type1) == ARRAY_TYPE
3116 && TREE_CODE (type2) == ARRAY_TYPE
3117 && (!TYPE_DOMAIN (type1) || !TYPE_DOMAIN (type2)))
3118 {
3119 type1 = TREE_TYPE (type1);
3120 type2 = TREE_TYPE (type2);
3121 }
3122 return same_type_ignoring_top_level_qualifiers_p (type1, type2);
3123}
3124
09b42213 3125/* A less strict version of fold_indirect_ref_1, which requires cv-quals to
3126 match. We want to be less strict for simple *& folding; if we have a
3127 non-const temporary that we access through a const pointer, that should
3128 work. We handle this here rather than change fold_indirect_ref_1
3129 because we're dealing with things like ADDR_EXPR of INTEGER_CST which
3130 don't really make sense outside of constant expression evaluation. Also
3131 we want to allow folding to COMPONENT_REF, which could cause trouble
3132 with TBAA in fold_indirect_ref_1.
3133
3134 Try to keep this function synced with fold_indirect_ref_1. */
3135
3136static tree
3137cxx_fold_indirect_ref (location_t loc, tree type, tree op0, bool *empty_base)
3138{
7d8e655d 3139 tree sub = op0;
3140 tree subtype;
3141 poly_uint64 const_op01;
09b42213 3142
09b42213 3143 STRIP_NOPS (sub);
3144 subtype = TREE_TYPE (sub);
d03fa520 3145 if (!INDIRECT_TYPE_P (subtype))
09b42213 3146 return NULL_TREE;
3147
3148 if (TREE_CODE (sub) == ADDR_EXPR)
3149 {
3150 tree op = TREE_OPERAND (sub, 0);
3151 tree optype = TREE_TYPE (op);
3152
3153 /* *&CONST_DECL -> to the value of the const decl. */
3154 if (TREE_CODE (op) == CONST_DECL)
3155 return DECL_INITIAL (op);
3156 /* *&p => p; make sure to handle *&"str"[cst] here. */
6b53d686 3157 if (same_type_ignoring_tlq_and_bounds_p (optype, type))
09b42213 3158 {
3159 tree fop = fold_read_from_constant_string (op);
3160 if (fop)
3161 return fop;
3162 else
3163 return op;
3164 }
3165 /* *(foo *)&fooarray => fooarray[0] */
3166 else if (TREE_CODE (optype) == ARRAY_TYPE
3167 && (same_type_ignoring_top_level_qualifiers_p
3168 (type, TREE_TYPE (optype))))
3169 {
3170 tree type_domain = TYPE_DOMAIN (optype);
3171 tree min_val = size_zero_node;
3172 if (type_domain && TYPE_MIN_VALUE (type_domain))
3173 min_val = TYPE_MIN_VALUE (type_domain);
3174 return build4_loc (loc, ARRAY_REF, type, op, min_val,
3175 NULL_TREE, NULL_TREE);
3176 }
3177 /* *(foo *)&complexfoo => __real__ complexfoo */
3178 else if (TREE_CODE (optype) == COMPLEX_TYPE
3179 && (same_type_ignoring_top_level_qualifiers_p
3180 (type, TREE_TYPE (optype))))
3181 return fold_build1_loc (loc, REALPART_EXPR, type, op);
3182 /* *(foo *)&vectorfoo => BIT_FIELD_REF<vectorfoo,...> */
76249021 3183 else if (VECTOR_TYPE_P (optype)
09b42213 3184 && (same_type_ignoring_top_level_qualifiers_p
3185 (type, TREE_TYPE (optype))))
3186 {
3187 tree part_width = TYPE_SIZE (type);
3188 tree index = bitsize_int (0);
7d8e655d 3189 return fold_build3_loc (loc, BIT_FIELD_REF, type, op, part_width,
3190 index);
09b42213 3191 }
3192 /* Also handle conversion to an empty base class, which
3193 is represented with a NOP_EXPR. */
3194 else if (is_empty_class (type)
3195 && CLASS_TYPE_P (optype)
3196 && DERIVED_FROM_P (type, optype))
3197 {
3198 *empty_base = true;
3199 return op;
3200 }
3201 /* *(foo *)&struct_with_foo_field => COMPONENT_REF */
3202 else if (RECORD_OR_UNION_TYPE_P (optype))
3203 {
3204 tree field = TYPE_FIELDS (optype);
3205 for (; field; field = DECL_CHAIN (field))
3206 if (TREE_CODE (field) == FIELD_DECL
a48667ee 3207 && TREE_TYPE (field) != error_mark_node
09b42213 3208 && integer_zerop (byte_position (field))
3209 && (same_type_ignoring_top_level_qualifiers_p
3210 (TREE_TYPE (field), type)))
a48667ee 3211 return fold_build3 (COMPONENT_REF, type, op, field, NULL_TREE);
09b42213 3212 }
3213 }
3214 else if (TREE_CODE (sub) == POINTER_PLUS_EXPR
7d8e655d 3215 && poly_int_tree_p (TREE_OPERAND (sub, 1), &const_op01))
09b42213 3216 {
3217 tree op00 = TREE_OPERAND (sub, 0);
3218 tree op01 = TREE_OPERAND (sub, 1);
3219
3220 STRIP_NOPS (op00);
3221 if (TREE_CODE (op00) == ADDR_EXPR)
3222 {
3223 tree op00type;
3224 op00 = TREE_OPERAND (op00, 0);
3225 op00type = TREE_TYPE (op00);
3226
3227 /* ((foo*)&vectorfoo)[1] => BIT_FIELD_REF<vectorfoo,...> */
76249021 3228 if (VECTOR_TYPE_P (op00type)
7d8e655d 3229 && same_type_ignoring_top_level_qualifiers_p
3230 (type, TREE_TYPE (op00type))
3231 /* POINTER_PLUS_EXPR second operand is sizetype, unsigned,
3232 but we want to treat offsets with MSB set as negative.
3233 For the code below negative offsets are invalid and
3234 TYPE_SIZE of the element is something unsigned, so
3235 check whether op01 fits into poly_int64, which implies
3236 it is from 0 to INTTYPE_MAXIMUM (HOST_WIDE_INT), and
3237 then just use poly_uint64 because we want to treat the
3238 value as unsigned. */
3239 && tree_fits_poly_int64_p (op01))
09b42213 3240 {
09b42213 3241 tree part_width = TYPE_SIZE (type);
7d8e655d 3242 poly_uint64 max_offset
3243 = (tree_to_uhwi (part_width) / BITS_PER_UNIT
3244 * TYPE_VECTOR_SUBPARTS (op00type));
3245 if (known_lt (const_op01, max_offset))
3246 {
3247 tree index = bitsize_int (const_op01 * BITS_PER_UNIT);
3248 return fold_build3_loc (loc,
3249 BIT_FIELD_REF, type, op00,
3250 part_width, index);
3251 }
09b42213 3252 }
3253 /* ((foo*)&complexfoo)[1] => __imag__ complexfoo */
3254 else if (TREE_CODE (op00type) == COMPLEX_TYPE
3255 && (same_type_ignoring_top_level_qualifiers_p
3256 (type, TREE_TYPE (op00type))))
3257 {
7d8e655d 3258 if (known_eq (wi::to_poly_offset (TYPE_SIZE_UNIT (type)),
3259 const_op01))
09b42213 3260 return fold_build1_loc (loc, IMAGPART_EXPR, type, op00);
3261 }
3262 /* ((foo *)&fooarray)[1] => fooarray[1] */
3263 else if (TREE_CODE (op00type) == ARRAY_TYPE
3264 && (same_type_ignoring_top_level_qualifiers_p
3265 (type, TREE_TYPE (op00type))))
3266 {
3267 tree type_domain = TYPE_DOMAIN (op00type);
3268 tree min_val = size_zero_node;
3269 if (type_domain && TYPE_MIN_VALUE (type_domain))
3270 min_val = TYPE_MIN_VALUE (type_domain);
53fa96c0 3271 offset_int off = wi::to_offset (op01);
3272 offset_int el_sz = wi::to_offset (TYPE_SIZE_UNIT (type));
3273 offset_int remainder;
3274 off = wi::divmod_trunc (off, el_sz, SIGNED, &remainder);
3275 if (remainder == 0 && TREE_CODE (min_val) == INTEGER_CST)
3276 {
3277 off = off + wi::to_offset (min_val);
3278 op01 = wide_int_to_tree (sizetype, off);
3279 return build4_loc (loc, ARRAY_REF, type, op00, op01,
3280 NULL_TREE, NULL_TREE);
3281 }
09b42213 3282 }
3283 /* Also handle conversion to an empty base class, which
3284 is represented with a NOP_EXPR. */
3285 else if (is_empty_class (type)
3286 && CLASS_TYPE_P (op00type)
3287 && DERIVED_FROM_P (type, op00type))
3288 {
3289 *empty_base = true;
3290 return op00;
3291 }
3292 /* ((foo *)&struct_with_foo_field)[1] => COMPONENT_REF */
3293 else if (RECORD_OR_UNION_TYPE_P (op00type))
3294 {
3295 tree field = TYPE_FIELDS (op00type);
3296 for (; field; field = DECL_CHAIN (field))
3297 if (TREE_CODE (field) == FIELD_DECL
a48667ee 3298 && TREE_TYPE (field) != error_mark_node
09b42213 3299 && tree_int_cst_equal (byte_position (field), op01)
3300 && (same_type_ignoring_top_level_qualifiers_p
3301 (TREE_TYPE (field), type)))
a48667ee 3302 return fold_build3 (COMPONENT_REF, type, op00,
3303 field, NULL_TREE);
09b42213 3304 }
3305 }
3306 }
3307 /* *(foo *)fooarrptr => (*fooarrptr)[0] */
3308 else if (TREE_CODE (TREE_TYPE (subtype)) == ARRAY_TYPE
3309 && (same_type_ignoring_top_level_qualifiers_p
3310 (type, TREE_TYPE (TREE_TYPE (subtype)))))
3311 {
3312 tree type_domain;
3313 tree min_val = size_zero_node;
7d8e655d 3314 tree newsub
3315 = cxx_fold_indirect_ref (loc, TREE_TYPE (subtype), sub, NULL);
09b42213 3316 if (newsub)
3317 sub = newsub;
3318 else
3319 sub = build1_loc (loc, INDIRECT_REF, TREE_TYPE (subtype), sub);
3320 type_domain = TYPE_DOMAIN (TREE_TYPE (sub));
3321 if (type_domain && TYPE_MIN_VALUE (type_domain))
3322 min_val = TYPE_MIN_VALUE (type_domain);
3323 return build4_loc (loc, ARRAY_REF, type, sub, min_val, NULL_TREE,
3324 NULL_TREE);
3325 }
3326
3327 return NULL_TREE;
3328}
3329
3330static tree
cf72f34d 3331cxx_eval_indirect_ref (const constexpr_ctx *ctx, tree t,
1227ba74 3332 bool lval,
09b42213 3333 bool *non_constant_p, bool *overflow_p)
3334{
3335 tree orig_op0 = TREE_OPERAND (t, 0);
09b42213 3336 bool empty_base = false;
09b42213 3337
d2c63826 3338 /* We can handle a MEM_REF like an INDIRECT_REF, if MEM_REF's second
3339 operand is an integer-zero. Otherwise reject the MEM_REF for now. */
3340
3341 if (TREE_CODE (t) == MEM_REF
3342 && (!TREE_OPERAND (t, 1) || !integer_zerop (TREE_OPERAND (t, 1))))
3343 {
3344 gcc_assert (ctx->quiet);
3345 *non_constant_p = true;
3346 return t;
3347 }
3348
7e0f3388 3349 /* First try to simplify it directly. */
3350 tree r = cxx_fold_indirect_ref (EXPR_LOCATION (t), TREE_TYPE (t), orig_op0,
3351 &empty_base);
3352 if (!r)
09b42213 3353 {
7e0f3388 3354 /* If that didn't work, evaluate the operand first. */
3355 tree op0 = cxx_eval_constant_expression (ctx, orig_op0,
3356 /*lval*/false, non_constant_p,
3357 overflow_p);
3358 /* Don't VERIFY_CONSTANT here. */
3359 if (*non_constant_p)
3360 return t;
3361
cb768824 3362 if (!lval && integer_zerop (op0))
3363 {
3364 if (!ctx->quiet)
3365 error ("dereferencing a null pointer");
3366 *non_constant_p = true;
3367 return t;
3368 }
3369
7e0f3388 3370 r = cxx_fold_indirect_ref (EXPR_LOCATION (t), TREE_TYPE (t), op0,
3371 &empty_base);
3372 if (r == NULL_TREE)
09b42213 3373 {
3374 /* We couldn't fold to a constant value. Make sure it's not
3375 something we should have been able to fold. */
7e0f3388 3376 tree sub = op0;
3377 STRIP_NOPS (sub);
3378 if (TREE_CODE (sub) == ADDR_EXPR)
3379 {
3380 gcc_assert (!same_type_ignoring_top_level_qualifiers_p
3381 (TREE_TYPE (TREE_TYPE (sub)), TREE_TYPE (t)));
3382 /* DR 1188 says we don't have to deal with this. */
3383 if (!ctx->quiet)
3384 error ("accessing value of %qE through a %qT glvalue in a "
3385 "constant expression", build_fold_indirect_ref (sub),
3386 TREE_TYPE (t));
3387 *non_constant_p = true;
3388 return t;
3389 }
3390
3391 if (lval && op0 != orig_op0)
3392 return build1 (INDIRECT_REF, TREE_TYPE (t), op0);
3393 if (!lval)
3394 VERIFY_CONSTANT (t);
09b42213 3395 return t;
3396 }
3397 }
3398
7e0f3388 3399 r = cxx_eval_constant_expression (ctx, r,
3400 lval, non_constant_p, overflow_p);
3401 if (*non_constant_p)
3402 return t;
3403
ce4ffd9e 3404 /* If we're pulling out the value of an empty base, just return an empty
09b42213 3405 CONSTRUCTOR. */
1227ba74 3406 if (empty_base && !lval)
09b42213 3407 {
09b42213 3408 r = build_constructor (TREE_TYPE (t), NULL);
3409 TREE_CONSTANT (r) = true;
3410 }
3411
09b42213 3412 return r;
3413}
3414
3415/* Complain about R, a VAR_DECL, not being usable in a constant expression.
3416 Shared between potential_constant_expression and
3417 cxx_eval_constant_expression. */
3418
3419static void
3420non_const_var_error (tree r)
3421{
3422 tree type = TREE_TYPE (r);
3423 error ("the value of %qD is not usable in a constant "
3424 "expression", r);
3425 /* Avoid error cascade. */
3426 if (DECL_INITIAL (r) == error_mark_node)
3427 return;
3428 if (DECL_DECLARED_CONSTEXPR_P (r))
3429 inform (DECL_SOURCE_LOCATION (r),
3430 "%qD used in its own initializer", r);
3431 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
3432 {
3433 if (!CP_TYPE_CONST_P (type))
3434 inform (DECL_SOURCE_LOCATION (r),
3435 "%q#D is not const", r);
3436 else if (CP_TYPE_VOLATILE_P (type))
3437 inform (DECL_SOURCE_LOCATION (r),
3438 "%q#D is volatile", r);
3439 else if (!DECL_INITIAL (r)
c8e3e744 3440 || !TREE_CONSTANT (DECL_INITIAL (r))
3441 || !DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (r))
09b42213 3442 inform (DECL_SOURCE_LOCATION (r),
3443 "%qD was not initialized with a constant "
3444 "expression", r);
3445 else
3446 gcc_unreachable ();
3447 }
90ad495b 3448 else if (TYPE_REF_P (type))
ac6641ca 3449 inform (DECL_SOURCE_LOCATION (r),
3450 "%qD was not initialized with a constant "
3451 "expression", r);
09b42213 3452 else
3453 {
3454 if (cxx_dialect >= cxx11 && !DECL_DECLARED_CONSTEXPR_P (r))
3455 inform (DECL_SOURCE_LOCATION (r),
3456 "%qD was not declared %<constexpr%>", r);
3457 else
3458 inform (DECL_SOURCE_LOCATION (r),
3459 "%qD does not have integral or enumeration type",
3460 r);
3461 }
3462}
3463
3464/* Subroutine of cxx_eval_constant_expression.
3465 Like cxx_eval_unary_expression, except for trinary expressions. */
3466
3467static tree
cf72f34d 3468cxx_eval_trinary_expression (const constexpr_ctx *ctx, tree t,
1227ba74 3469 bool lval,
09b42213 3470 bool *non_constant_p, bool *overflow_p)
3471{
3472 int i;
3473 tree args[3];
3474 tree val;
3475
3476 for (i = 0; i < 3; i++)
3477 {
cf72f34d 3478 args[i] = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, i),
1227ba74 3479 lval,
b2a43197 3480 non_constant_p, overflow_p);
09b42213 3481 VERIFY_CONSTANT (args[i]);
3482 }
3483
3484 val = fold_ternary_loc (EXPR_LOCATION (t), TREE_CODE (t), TREE_TYPE (t),
3485 args[0], args[1], args[2]);
3486 if (val == NULL_TREE)
3487 return t;
3488 VERIFY_CONSTANT (val);
3489 return val;
3490}
3491
33603066 3492/* True if T was declared in a function declared to be constexpr, and
3493 therefore potentially constant in C++14. */
3494
09b42213 3495bool
3496var_in_constexpr_fn (tree t)
3497{
3498 tree ctx = DECL_CONTEXT (t);
33603066 3499 return (ctx && TREE_CODE (ctx) == FUNCTION_DECL
09b42213 3500 && DECL_DECLARED_CONSTEXPR_P (ctx));
3501}
3502
33603066 3503/* True if T was declared in a function that might be constexpr: either a
3504 function that was declared constexpr, or a C++17 lambda op(). */
3505
3506bool
3507var_in_maybe_constexpr_fn (tree t)
3508{
40e2decb 3509 if (cxx_dialect >= cxx17
33603066 3510 && DECL_FUNCTION_SCOPE_P (t)
3511 && LAMBDA_FUNCTION_P (DECL_CONTEXT (t)))
3512 return true;
3513 return var_in_constexpr_fn (t);
3514}
3515
93312944 3516/* We're assigning INIT to TARGET. In do_build_copy_constructor and
3517 build_over_call we implement trivial copy of a class with tail padding using
3518 assignment of character arrays, which is valid in normal code, but not in
3519 constexpr evaluation. We don't need to worry about clobbering tail padding
3520 in constexpr evaluation, so strip the type punning. */
3521
3522static void
3523maybe_simplify_trivial_copy (tree &target, tree &init)
3524{
3525 if (TREE_CODE (target) == MEM_REF
3526 && TREE_CODE (init) == MEM_REF
3527 && TREE_TYPE (target) == TREE_TYPE (init)
3528 && TREE_CODE (TREE_TYPE (target)) == ARRAY_TYPE
3529 && TREE_TYPE (TREE_TYPE (target)) == unsigned_char_type_node)
3530 {
3531 target = build_fold_indirect_ref (TREE_OPERAND (target, 0));
3532 init = build_fold_indirect_ref (TREE_OPERAND (init, 0));
3533 }
3534}
3535
9c96033c 3536/* Evaluate an INIT_EXPR or MODIFY_EXPR. */
3537
3538static tree
3539cxx_eval_store_expression (const constexpr_ctx *ctx, tree t,
1227ba74 3540 bool lval,
9c96033c 3541 bool *non_constant_p, bool *overflow_p)
3542{
3543 constexpr_ctx new_ctx = *ctx;
3544
8a36d0ec 3545 tree init = TREE_OPERAND (t, 1);
3546 if (TREE_CLOBBER_P (init))
3547 /* Just ignore clobbers. */
3548 return void_node;
3549
9c96033c 3550 /* First we figure out where we're storing to. */
3551 tree target = TREE_OPERAND (t, 0);
93312944 3552
3553 maybe_simplify_trivial_copy (target, init);
3554
9db9fc38 3555 tree type = TREE_TYPE (target);
9c96033c 3556 target = cxx_eval_constant_expression (ctx, target,
f83e6885 3557 true,
b2a43197 3558 non_constant_p, overflow_p);
9c96033c 3559 if (*non_constant_p)
3560 return t;
3561
cf3cefc9 3562 /* cxx_eval_array_reference for lval = true allows references one past
3563 end of array, because it does not know if it is just taking address
3564 (which is valid), or actual dereference. Here we know it is
3565 a dereference, so diagnose it here. */
3566 for (tree probe = target; probe; )
3567 {
3568 switch (TREE_CODE (probe))
3569 {
3570 case ARRAY_REF:
3571 tree nelts, ary;
3572 ary = TREE_OPERAND (probe, 0);
51f0c7e2 3573 nelts = get_array_or_vector_nelts (ctx, TREE_TYPE (ary),
3574 non_constant_p, overflow_p);
cf3cefc9 3575 VERIFY_CONSTANT (nelts);
3576 gcc_assert (TREE_CODE (nelts) == INTEGER_CST
3577 && TREE_CODE (TREE_OPERAND (probe, 1)) == INTEGER_CST);
cb7bca5f 3578 if (wi::to_widest (TREE_OPERAND (probe, 1)) == wi::to_widest (nelts))
cf3cefc9 3579 {
3580 diag_array_subscript (ctx, ary, TREE_OPERAND (probe, 1));
3581 *non_constant_p = true;
3582 return t;
3583 }
3584 /* FALLTHRU */
3585
3586 case BIT_FIELD_REF:
3587 case COMPONENT_REF:
3588 probe = TREE_OPERAND (probe, 0);
3589 continue;
3590
3591 default:
3592 probe = NULL_TREE;
3593 continue;
3594 }
3595 }
3596
9db9fc38 3597 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (target), type))
3598 {
3599 /* For initialization of an empty base, the original target will be
3600 *(base*)this, which the above evaluation resolves to the object
3601 argument, which has the derived type rather than the base type. In
3602 this situation, just evaluate the initializer and return, since
3603 there's no actual data to store. */
3604 gcc_assert (is_empty_class (type));
3605 return cxx_eval_constant_expression (ctx, init, false,
3606 non_constant_p, overflow_p);
3607 }
3608
9c96033c 3609 /* And then find the underlying variable. */
3610 vec<tree,va_gc> *refs = make_tree_vector();
3611 tree object = NULL_TREE;
3612 for (tree probe = target; object == NULL_TREE; )
3613 {
3614 switch (TREE_CODE (probe))
3615 {
3616 case BIT_FIELD_REF:
3617 case COMPONENT_REF:
3618 case ARRAY_REF:
3619 vec_safe_push (refs, TREE_OPERAND (probe, 1));
3620 vec_safe_push (refs, TREE_TYPE (probe));
3621 probe = TREE_OPERAND (probe, 0);
3622 break;
3623
3624 default:
3625 object = probe;
9c96033c 3626 }
3627 }
3628
3629 /* And then find/build up our initializer for the path to the subobject
3630 we're initializing. */
6fe83e54 3631 tree *valp;
43b7271d 3632 if (object == ctx->object && VAR_P (object)
3633 && DECL_NAME (object) && ctx->call == NULL)
3634 /* The variable we're building up an aggregate initializer for is outside
3635 the constant-expression, so don't evaluate the store. We check
3636 DECL_NAME to handle TARGET_EXPR temporaries, which are fair game. */
3637 valp = NULL;
3638 else if (DECL_P (object))
6fe83e54 3639 valp = ctx->values->get (object);
3640 else
3641 valp = NULL;
9c96033c 3642 if (!valp)
3643 {
3644 /* A constant-expression cannot modify objects from outside the
3645 constant-expression. */
f83e6885 3646 if (!ctx->quiet)
ea034e2c 3647 error ("modification of %qE is not a constant expression", object);
9c96033c 3648 *non_constant_p = true;
3649 return t;
3650 }
9db9fc38 3651 type = TREE_TYPE (object);
a02b42fe 3652 bool no_zero_init = true;
58b0f9ce 3653
3654 vec<tree,va_gc> *ctors = make_tree_vector ();
9c96033c 3655 while (!refs->is_empty())
3656 {
3657 if (*valp == NULL_TREE)
3658 {
3659 *valp = build_constructor (type, NULL);
165d0d5b 3660 CONSTRUCTOR_NO_CLEARING (*valp) = no_zero_init;
9c96033c 3661 }
92fe8840 3662 else if (TREE_CODE (*valp) == STRING_CST)
3663 {
3664 /* An array was initialized with a string constant, and now
3665 we're writing into one of its elements. Explode the
3666 single initialization into a set of element
3667 initializations. */
3668 gcc_assert (TREE_CODE (type) == ARRAY_TYPE);
3669
3670 tree string = *valp;
3671 tree elt_type = TREE_TYPE (type);
3672 unsigned chars_per_elt = (TYPE_PRECISION (elt_type)
3673 / TYPE_PRECISION (char_type_node));
3674 unsigned num_elts = TREE_STRING_LENGTH (string) / chars_per_elt;
3675 tree ary_ctor = build_constructor (type, NULL);
3676
3677 vec_safe_reserve (CONSTRUCTOR_ELTS (ary_ctor), num_elts);
3678 for (unsigned ix = 0; ix != num_elts; ix++)
3679 {
3680 constructor_elt elt =
3681 {
3682 build_int_cst (size_type_node, ix),
3683 extract_string_elt (string, chars_per_elt, ix)
3684 };
3685 CONSTRUCTOR_ELTS (ary_ctor)->quick_push (elt);
3686 }
3687
3688 *valp = ary_ctor;
3689 }
3690
a02b42fe 3691 /* If the value of object is already zero-initialized, any new ctors for
3692 subobjects will also be zero-initialized. */
165d0d5b 3693 no_zero_init = CONSTRUCTOR_NO_CLEARING (*valp);
9c96033c 3694
58b0f9ce 3695 vec_safe_push (ctors, *valp);
3696
7963b19d 3697 enum tree_code code = TREE_CODE (type);
9c96033c 3698 type = refs->pop();
7963b19d 3699 tree index = refs->pop();
9c96033c 3700
9c96033c 3701 constructor_elt *cep = NULL;
7963b19d 3702 if (code == ARRAY_TYPE)
3703 {
3704 HOST_WIDE_INT i
3705 = find_array_ctor_elt (*valp, index, /*insert*/true);
3706 gcc_assert (i >= 0);
3707 cep = CONSTRUCTOR_ELT (*valp, i);
3708 gcc_assert (TREE_CODE (cep->index) != RANGE_EXPR);
3709 }
3710 else
3711 {
3712 gcc_assert (TREE_CODE (index) == FIELD_DECL);
13ee2de7 3713
3714 /* We must keep the CONSTRUCTOR's ELTS in FIELD order.
3715 Usually we meet initializers in that order, but it is
3716 possible for base types to be placed not in program
3717 order. */
3718 tree fields = TYPE_FIELDS (DECL_CONTEXT (index));
3719 unsigned HOST_WIDE_INT idx;
3720
ef782365 3721 if (code == UNION_TYPE && CONSTRUCTOR_NELTS (*valp)
3722 && CONSTRUCTOR_ELT (*valp, 0)->index != index)
3723 /* Changing active member. */
3724 vec_safe_truncate (CONSTRUCTOR_ELTS (*valp), 0);
3725
13ee2de7 3726 for (idx = 0;
7963b19d 3727 vec_safe_iterate (CONSTRUCTOR_ELTS (*valp), idx, &cep);
13ee2de7 3728 idx++, fields = DECL_CHAIN (fields))
7963b19d 3729 {
13ee2de7 3730 if (index == cep->index)
3731 goto found;
3732
3733 /* The field we're initializing must be on the field
3734 list. Look to see if it is present before the
3735 field the current ELT initializes. */
3736 for (; fields != cep->index; fields = DECL_CHAIN (fields))
3737 if (index == fields)
3738 goto insert;
7963b19d 3739 }
13ee2de7 3740
3741 /* We fell off the end of the CONSTRUCTOR, so insert a new
3742 entry at the end. */
3743 insert:
3744 {
3745 constructor_elt ce = { index, NULL_TREE };
3746
3747 vec_safe_insert (CONSTRUCTOR_ELTS (*valp), idx, ce);
3748 cep = CONSTRUCTOR_ELT (*valp, idx);
3749 }
3750 found:;
7963b19d 3751 }
9c96033c 3752 valp = &cep->value;
3753 }
3754 release_tree_vector (refs);
3755
469dc5a6 3756 if (AGGREGATE_TYPE_P (type) || VECTOR_TYPE_P (type))
9c96033c 3757 {
3758 /* Create a new CONSTRUCTOR in case evaluation of the initializer
3759 wants to modify it. */
469dc5a6 3760 if (*valp == NULL_TREE)
6cded085 3761 {
6993e708 3762 *valp = build_constructor (type, NULL);
165d0d5b 3763 CONSTRUCTOR_NO_CLEARING (*valp) = no_zero_init;
6cded085 3764 }
6993e708 3765 else if (TREE_CODE (*valp) == PTRMEM_CST)
3766 *valp = cplus_expand_constant (*valp);
3767 new_ctx.ctor = *valp;
9c96033c 3768 new_ctx.object = target;
3769 }
3770
8a36d0ec 3771 init = cxx_eval_constant_expression (&new_ctx, init, false,
3772 non_constant_p, overflow_p);
7b9f713d 3773 /* Don't share a CONSTRUCTOR that might be changed later. */
e283bb4f 3774 init = unshare_constructor (init);
9c96033c 3775 if (target == object)
5579a199 3776 /* The hash table might have moved since the get earlier. */
3777 valp = ctx->values->get (object);
3778
3779 if (TREE_CODE (init) == CONSTRUCTOR)
469dc5a6 3780 {
5579a199 3781 /* An outer ctx->ctor might be pointing to *valp, so replace
3782 its contents. */
3783 CONSTRUCTOR_ELTS (*valp) = CONSTRUCTOR_ELTS (init);
3784 TREE_CONSTANT (*valp) = TREE_CONSTANT (init);
3785 TREE_SIDE_EFFECTS (*valp) = TREE_SIDE_EFFECTS (init);
165d0d5b 3786 CONSTRUCTOR_NO_CLEARING (*valp)
3787 = CONSTRUCTOR_NO_CLEARING (init);
469dc5a6 3788 }
9c96033c 3789 else
5579a199 3790 *valp = init;
58b0f9ce 3791
5579a199 3792 /* Update TREE_CONSTANT and TREE_SIDE_EFFECTS on enclosing
3793 CONSTRUCTORs, if any. */
3794 tree elt;
3795 unsigned i;
3796 bool c = TREE_CONSTANT (init);
3797 bool s = TREE_SIDE_EFFECTS (init);
3798 if (!c || s)
3799 FOR_EACH_VEC_SAFE_ELT (ctors, i, elt)
3800 {
3801 if (!c)
3802 TREE_CONSTANT (elt) = false;
3803 if (s)
3804 TREE_SIDE_EFFECTS (elt) = true;
3805 }
58b0f9ce 3806 release_tree_vector (ctors);
9c96033c 3807
3808 if (*non_constant_p)
3809 return t;
1227ba74 3810 else if (lval)
9c96033c 3811 return target;
3812 else
dfac7dd2 3813 return init;
9c96033c 3814}
3815
3816/* Evaluate a ++ or -- expression. */
3817
3818static tree
3819cxx_eval_increment_expression (const constexpr_ctx *ctx, tree t,
1227ba74 3820 bool lval,
9c96033c 3821 bool *non_constant_p, bool *overflow_p)
3822{
3823 enum tree_code code = TREE_CODE (t);
3824 tree type = TREE_TYPE (t);
3825 tree op = TREE_OPERAND (t, 0);
3826 tree offset = TREE_OPERAND (t, 1);
3827 gcc_assert (TREE_CONSTANT (offset));
3828
3829 /* The operand as an lvalue. */
f83e6885 3830 op = cxx_eval_constant_expression (ctx, op, true,
b2a43197 3831 non_constant_p, overflow_p);
9c96033c 3832
3833 /* The operand as an rvalue. */
c017458d 3834 tree val
3835 = cxx_eval_constant_expression (ctx, op, false,
3836 non_constant_p, overflow_p);
35f2c28f 3837 /* Don't VERIFY_CONSTANT if this might be dealing with a pointer to
3838 a local array in a constexpr function. */
d03fa520 3839 bool ptr = INDIRECT_TYPE_P (TREE_TYPE (val));
35f2c28f 3840 if (!ptr)
3841 VERIFY_CONSTANT (val);
9c96033c 3842
3843 /* The modified value. */
3844 bool inc = (code == PREINCREMENT_EXPR || code == POSTINCREMENT_EXPR);
c8a8f7ad 3845 tree mod;
d03fa520 3846 if (INDIRECT_TYPE_P (type))
c8a8f7ad 3847 {
3848 /* The middle end requires pointers to use POINTER_PLUS_EXPR. */
3849 offset = convert_to_ptrofftype (offset);
3850 if (!inc)
3851 offset = fold_build1 (NEGATE_EXPR, TREE_TYPE (offset), offset);
3852 mod = fold_build2 (POINTER_PLUS_EXPR, type, val, offset);
3853 }
3854 else
3855 mod = fold_build2 (inc ? PLUS_EXPR : MINUS_EXPR, type, val, offset);
35f2c28f 3856 if (!ptr)
3857 VERIFY_CONSTANT (mod);
9c96033c 3858
3859 /* Storing the modified value. */
3860 tree store = build2 (MODIFY_EXPR, type, op, mod);
f83e6885 3861 cxx_eval_constant_expression (ctx, store,
b2a43197 3862 true, non_constant_p, overflow_p);
9c96033c 3863
3864 /* And the value of the expression. */
3865 if (code == PREINCREMENT_EXPR || code == PREDECREMENT_EXPR)
3866 {
3867 /* Prefix ops are lvalues. */
1227ba74 3868 if (lval)
9c96033c 3869 return op;
3870 else
3871 /* But we optimize when the caller wants an rvalue. */
3872 return mod;
3873 }
3874 else
3875 /* Postfix ops are rvalues. */
3876 return val;
3877}
3878
00f21715 3879/* Predicates for the meaning of *jump_target. */
3880
3881static bool
3882returns (tree *jump_target)
3883{
3884 return *jump_target
d29e4e8c 3885 && (TREE_CODE (*jump_target) == RETURN_EXPR
3886 || (TREE_CODE (*jump_target) == LABEL_DECL
3887 && LABEL_DECL_CDTOR (*jump_target)));
00f21715 3888}
3889
3890static bool
3891breaks (tree *jump_target)
3892{
3893 return *jump_target
cf03ba19 3894 && ((TREE_CODE (*jump_target) == LABEL_DECL
3895 && LABEL_DECL_BREAK (*jump_target))
32fee334 3896 || TREE_CODE (*jump_target) == BREAK_STMT
cf03ba19 3897 || TREE_CODE (*jump_target) == EXIT_EXPR);
00f21715 3898}
3899
3900static bool
3901continues (tree *jump_target)
3902{
3903 return *jump_target
32fee334 3904 && ((TREE_CODE (*jump_target) == LABEL_DECL
3905 && LABEL_DECL_CONTINUE (*jump_target))
3906 || TREE_CODE (*jump_target) == CONTINUE_STMT);
3907
00f21715 3908}
3909
3910static bool
3911switches (tree *jump_target)
3912{
3913 return *jump_target
3914 && TREE_CODE (*jump_target) == INTEGER_CST;
3915}
3916
3917/* Subroutine of cxx_eval_statement_list. Determine whether the statement
2a2770c6 3918 STMT matches *jump_target. If we're looking for a case label and we see
3919 the default label, note it in ctx->css_state. */
00f21715 3920
3921static bool
2a2770c6 3922label_matches (const constexpr_ctx *ctx, tree *jump_target, tree stmt)
00f21715 3923{
00f21715 3924 switch (TREE_CODE (*jump_target))
3925 {
3926 case LABEL_DECL:
3927 if (TREE_CODE (stmt) == LABEL_EXPR
3928 && LABEL_EXPR_LABEL (stmt) == *jump_target)
3929 return true;
3930 break;
3931
3932 case INTEGER_CST:
3933 if (TREE_CODE (stmt) == CASE_LABEL_EXPR)
3934 {
2a2770c6 3935 gcc_assert (ctx->css_state != NULL);
00f21715 3936 if (!CASE_LOW (stmt))
2a2770c6 3937 {
3938 /* default: should appear just once in a SWITCH_EXPR
3939 body (excluding nested SWITCH_EXPR). */
3940 gcc_assert (*ctx->css_state != css_default_seen);
3941 /* When evaluating SWITCH_EXPR body for the second time,
3942 return true for the default: label. */
3943 if (*ctx->css_state == css_default_processing)
3944 return true;
3945 *ctx->css_state = css_default_seen;
3946 }
83c375ba 3947 else if (CASE_HIGH (stmt))
3948 {
3949 if (tree_int_cst_le (CASE_LOW (stmt), *jump_target)
3950 && tree_int_cst_le (*jump_target, CASE_HIGH (stmt)))
3951 return true;
3952 }
00f21715 3953 else if (tree_int_cst_equal (*jump_target, CASE_LOW (stmt)))
3954 return true;
3955 }
3956 break;
3957
3958 default:
3959 gcc_unreachable ();
3960 }
3961 return false;
3962}
3963
3964/* Evaluate a STATEMENT_LIST for side-effects. Handles various jump
3965 semantics, for switch, break, continue, and return. */
3966
3967static tree
3968cxx_eval_statement_list (const constexpr_ctx *ctx, tree t,
00f21715 3969 bool *non_constant_p, bool *overflow_p,
3970 tree *jump_target)
3971{
3972 tree_stmt_iterator i;
da7981e0 3973 tree local_target;
efea7c64 3974 /* In a statement-expression we want to return the last value.
3975 For empty statement expression return void_node. */
3976 tree r = void_node;
da7981e0 3977 if (!jump_target)
3978 {
3979 local_target = NULL_TREE;
3980 jump_target = &local_target;
3981 }
00f21715 3982 for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
3983 {
00f21715 3984 tree stmt = tsi_stmt (i);
ba0f90e4 3985 /* We've found a continue, so skip everything until we reach
3986 the label its jumping to. */
3987 if (continues (jump_target))
3988 {
3989 if (label_matches (ctx, jump_target, stmt))
3990 /* Found it. */
3991 *jump_target = NULL_TREE;
3992 else
3993 continue;
3994 }
442c4003 3995 if (TREE_CODE (stmt) == DEBUG_BEGIN_STMT)
3996 continue;
da7981e0 3997 r = cxx_eval_constant_expression (ctx, stmt, false,
3998 non_constant_p, overflow_p,
3999 jump_target);
00f21715 4000 if (*non_constant_p)
4001 break;
4002 if (returns (jump_target) || breaks (jump_target))
4003 break;
4004 }
da7981e0 4005 return r;
00f21715 4006}
4007
4008/* Evaluate a LOOP_EXPR for side-effects. Handles break and return
4009 semantics; continue semantics are covered by cxx_eval_statement_list. */
4010
4011static tree
4012cxx_eval_loop_expr (const constexpr_ctx *ctx, tree t,
00f21715 4013 bool *non_constant_p, bool *overflow_p,
4014 tree *jump_target)
4015{
2631cb67 4016 constexpr_ctx new_ctx = *ctx;
4017
00f21715 4018 tree body = TREE_OPERAND (t, 0);
21483ab7 4019 int count = 0;
5370eb8d 4020 do
00f21715 4021 {
2631cb67 4022 hash_set<tree> save_exprs;
4023 new_ctx.save_exprs = &save_exprs;
4024
cf03ba19 4025 cxx_eval_constant_expression (&new_ctx, body, /*lval*/false,
4026 non_constant_p, overflow_p, jump_target);
2631cb67 4027
4028 /* Forget saved values of SAVE_EXPRs. */
4029 for (hash_set<tree>::iterator iter = save_exprs.begin();
4030 iter != save_exprs.end(); ++iter)
4031 new_ctx.values->remove (*iter);
21483ab7 4032 if (++count >= constexpr_loop_limit)
4033 {
4034 if (!ctx->quiet)
d3a3cfb8 4035 error_at (cp_expr_loc_or_loc (t, input_location),
5967b28b 4036 "%<constexpr%> loop iteration count exceeds limit of %d "
21483ab7 4037 "(use -fconstexpr-loop-limit= to increase the limit)",
4038 constexpr_loop_limit);
4039 *non_constant_p = true;
4040 break;
4041 }
00f21715 4042 }
2a2770c6 4043 while (!returns (jump_target)
4044 && !breaks (jump_target)
4045 && !switches (jump_target)
4046 && !*non_constant_p);
5370eb8d 4047
00f21715 4048 if (breaks (jump_target))
4049 *jump_target = NULL_TREE;
2631cb67 4050
00f21715 4051 return NULL_TREE;
4052}
4053
4054/* Evaluate a SWITCH_EXPR for side-effects. Handles switch and break jump
4055 semantics. */
4056
4057static tree
4058cxx_eval_switch_expr (const constexpr_ctx *ctx, tree t,
00f21715 4059 bool *non_constant_p, bool *overflow_p,
4060 tree *jump_target)
4061{
4062 tree cond = TREE_OPERAND (t, 0);
f83e6885 4063 cond = cxx_eval_constant_expression (ctx, cond, false,
b2a43197 4064 non_constant_p, overflow_p);
00f21715 4065 VERIFY_CONSTANT (cond);
4066 *jump_target = cond;
4067
4068 tree body = TREE_OPERAND (t, 1);
2a2770c6 4069 constexpr_ctx new_ctx = *ctx;
4070 constexpr_switch_state css = css_default_not_seen;
4071 new_ctx.css_state = &css;
4072 cxx_eval_constant_expression (&new_ctx, body, false,
4073 non_constant_p, overflow_p, jump_target);
4074 if (switches (jump_target) && css == css_default_seen)
4075 {
4076 /* If the SWITCH_EXPR body has default: label, process it once again,
4077 this time instructing label_matches to return true for default:
4078 label on switches (jump_target). */
4079 css = css_default_processing;
4080 cxx_eval_constant_expression (&new_ctx, body, false,
4081 non_constant_p, overflow_p, jump_target);
4082 }
00f21715 4083 if (breaks (jump_target) || switches (jump_target))
4084 *jump_target = NULL_TREE;
4085 return NULL_TREE;
4086}
4087
85de9604 4088/* Find the object of TYPE under initialization in CTX. */
4089
4090static tree
4091lookup_placeholder (const constexpr_ctx *ctx, bool lval, tree type)
4092{
def8e41f 4093 if (!ctx)
85de9604 4094 return NULL_TREE;
4095
4096 /* We could use ctx->object unconditionally, but using ctx->ctor when we
4097 can is a minor optimization. */
def8e41f 4098 if (!lval && ctx->ctor && same_type_p (TREE_TYPE (ctx->ctor), type))
85de9604 4099 return ctx->ctor;
4100
def8e41f 4101 if (!ctx->object)
4102 return NULL_TREE;
4103
85de9604 4104 /* Since an object cannot have a field of its own type, we can search outward
4105 from ctx->object to find the unique containing object of TYPE. */
4106 tree ob = ctx->object;
4107 while (ob)
4108 {
4109 if (same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (ob), type))
4110 break;
4111 if (handled_component_p (ob))
4112 ob = TREE_OPERAND (ob, 0);
4113 else
4114 ob = NULL_TREE;
4115 }
4116
4117 return ob;
4118}
4119
09b42213 4120/* Attempt to reduce the expression T to a constant value.
4121 On failure, issue diagnostic and return error_mark_node. */
4122/* FIXME unify with c_fully_fold */
9c96033c 4123/* FIXME overflow_p is too global */
09b42213 4124
4125static tree
cf72f34d 4126cxx_eval_constant_expression (const constexpr_ctx *ctx, tree t,
1227ba74 4127 bool lval,
00f21715 4128 bool *non_constant_p, bool *overflow_p,
32fee334 4129 tree *jump_target /* = NULL */)
09b42213 4130{
cf72f34d 4131 constexpr_ctx new_ctx;
09b42213 4132 tree r = t;
4133
2a2770c6 4134 if (jump_target && *jump_target)
4135 {
4136 /* If we are jumping, ignore all statements/expressions except those
4137 that could have LABEL_EXPR or CASE_LABEL_EXPR in their bodies. */
4138 switch (TREE_CODE (t))
4139 {
4140 case BIND_EXPR:
4141 case STATEMENT_LIST:
4142 case LOOP_EXPR:
4143 case COND_EXPR:
4144 break;
4145 case LABEL_EXPR:
4146 case CASE_LABEL_EXPR:
4147 if (label_matches (ctx, jump_target, t))
4148 /* Found it. */
4149 *jump_target = NULL_TREE;
4150 return NULL_TREE;
4151 default:
4152 return NULL_TREE;
4153 }
4154 }
32fee334 4155 if (error_operand_p (t))
09b42213 4156 {
4157 *non_constant_p = true;
4158 return t;
4159 }
4160 if (CONSTANT_CLASS_P (t))
4161 {
c4fa85c9 4162 if (TREE_OVERFLOW (t))
4163 {
4164 if (!ctx->quiet)
4165 permerror (input_location, "overflow in constant expression");
4166 if (!flag_permissive || ctx->quiet)
4167 *overflow_p = true;
4168 }
cb768824 4169
4170 if (TREE_CODE (t) == INTEGER_CST
90ad495b 4171 && TYPE_PTR_P (TREE_TYPE (t))
cb768824 4172 && !integer_zerop (t))
4173 {
4174 if (!ctx->quiet)
4175 error ("value %qE of type %qT is not a constant expression",
4176 t, TREE_TYPE (t));
4177 *non_constant_p = true;
4178 }
4179
09b42213 4180 return t;
4181 }
09b42213 4182
cb768824 4183 tree_code tcode = TREE_CODE (t);
4184 switch (tcode)
09b42213 4185 {
9c96033c 4186 case RESULT_DECL:
1227ba74 4187 if (lval)
9c96033c 4188 return t;
4189 /* We ask for an rvalue for the RESULT_DECL when indirecting
92a9c89e 4190 through an invisible reference, or in named return value
4191 optimization. */
8ea8d065 4192 if (tree *p = ctx->values->get (t))
4193 return *p;
4194 else
4195 {
4196 if (!ctx->quiet)
4197 error ("%qE is not a constant expression", t);
4198 *non_constant_p = true;
4199 }
4200 break;
9c96033c 4201
09b42213 4202 case VAR_DECL:
9c8aeb66 4203 if (DECL_HAS_VALUE_EXPR_P (t))
33603066 4204 return cxx_eval_constant_expression (ctx, DECL_VALUE_EXPR (t),
4205 lval, non_constant_p, overflow_p);
e3533433 4206 /* fall through */
8b2b2f24 4207 case CONST_DECL:
4208 /* We used to not check lval for CONST_DECL, but darwin.c uses
4209 CONST_DECL for aggregate constants. */
1227ba74 4210 if (lval)
09b42213 4211 return t;
bb6e576c 4212 /* is_really_empty_class doesn't take into account _vptr, so initializing
4213 otherwise empty class with { } would overwrite the initializer that
4214 initialize_vtable created for us. */
594cc00c 4215 if (COMPLETE_TYPE_P (TREE_TYPE (t))
bb6e576c 4216 && !TYPE_POLYMORPHIC_P (TREE_TYPE (t))
594cc00c 4217 && is_really_empty_class (TREE_TYPE (t)))
c7282bf2 4218 {
4219 /* If the class is empty, we aren't actually loading anything. */
4220 r = build_constructor (TREE_TYPE (t), NULL);
4221 TREE_CONSTANT (r) = true;
4222 }
4223 else if (ctx->strict)
2055d27a 4224 r = decl_really_constant_value (t);
4225 else
4226 r = decl_constant_value (t);
09b42213 4227 if (TREE_CODE (r) == TARGET_EXPR
4228 && TREE_CODE (TARGET_EXPR_INITIAL (r)) == CONSTRUCTOR)
4229 r = TARGET_EXPR_INITIAL (r);
f4ae4202 4230 if (VAR_P (r))
cf72f34d 4231 if (tree *p = ctx->values->get (r))
a143e277 4232 if (*p != NULL_TREE)
4233 r = *p;
09b42213 4234 if (DECL_P (r))
4235 {
f83e6885 4236 if (!ctx->quiet)
09b42213 4237 non_const_var_error (r);
4238 *non_constant_p = true;
4239 }
4240 break;
4241
90567983 4242 case DEBUG_BEGIN_STMT:
4243 /* ??? It might be nice to retain this information somehow, so
4244 as to be able to step into a constexpr function call. */
4245 /* Fall through. */
4246
09b42213 4247 case FUNCTION_DECL:
4248 case TEMPLATE_DECL:
4249 case LABEL_DECL:
00f21715 4250 case LABEL_EXPR:
4251 case CASE_LABEL_EXPR:
2a2770c6 4252 case PREDICT_EXPR:
09b42213 4253 return t;
4254
4255 case PARM_DECL:
90ad495b 4256 if (lval && !TYPE_REF_P (TREE_TYPE (t)))
9c96033c 4257 /* glvalue use. */;
4258 else if (tree *p = ctx->values->get (r))
4259 r = *p;
1227ba74 4260 else if (lval)
09b42213 4261 /* Defer in case this is only used for its type. */;
90ad495b 4262 else if (TYPE_REF_P (TREE_TYPE (t)))
1eb418cc 4263 /* Defer, there's no lvalue->rvalue conversion. */;
53d2f3de 4264 else if (COMPLETE_TYPE_P (TREE_TYPE (t))
4265 && is_really_empty_class (TREE_TYPE (t)))
a6613de7 4266 {
4267 /* If the class is empty, we aren't actually loading anything. */
4268 r = build_constructor (TREE_TYPE (t), NULL);
4269 TREE_CONSTANT (r) = true;
4270 }
09b42213 4271 else
4272 {
f83e6885 4273 if (!ctx->quiet)
09b42213 4274 error ("%qE is not a constant expression", t);
4275 *non_constant_p = true;
4276 }
4277 break;
4278
4279 case CALL_EXPR:
4280 case AGGR_INIT_EXPR:
1227ba74 4281 r = cxx_eval_call_expression (ctx, t, lval,
09b42213 4282 non_constant_p, overflow_p);
4283 break;
4284
9c96033c 4285 case DECL_EXPR:
4286 {
4287 r = DECL_EXPR_DECL (t);
4288 if (AGGREGATE_TYPE_P (TREE_TYPE (r))
4289 || VECTOR_TYPE_P (TREE_TYPE (r)))
4290 {
4291 new_ctx = *ctx;
4292 new_ctx.object = r;
4293 new_ctx.ctor = build_constructor (TREE_TYPE (r), NULL);
165d0d5b 4294 CONSTRUCTOR_NO_CLEARING (new_ctx.ctor) = true;
9c96033c 4295 new_ctx.values->put (r, new_ctx.ctor);
4296 ctx = &new_ctx;
4297 }
4298
4299 if (tree init = DECL_INITIAL (r))
4300 {
4301 init = cxx_eval_constant_expression (ctx, init,
f83e6885 4302 false,
b2a43197 4303 non_constant_p, overflow_p);
5898f0d7 4304 /* Don't share a CONSTRUCTOR that might be changed. */
e283bb4f 4305 init = unshare_constructor (init);
9c96033c 4306 ctx->values->put (r, init);
4307 }
4308 else if (ctx == &new_ctx)
4309 /* We gave it a CONSTRUCTOR above. */;
4310 else
4311 ctx->values->put (r, NULL_TREE);
4312 }
4313 break;
4314
09b42213 4315 case TARGET_EXPR:
4316 if (!literal_type_p (TREE_TYPE (t)))
4317 {
f83e6885 4318 if (!ctx->quiet)
09b42213 4319 {
bc35ef65 4320 auto_diagnostic_group d;
09b42213 4321 error ("temporary of non-literal type %qT in a "
4322 "constant expression", TREE_TYPE (t));
4323 explain_non_literal_class (TREE_TYPE (t));
4324 }
4325 *non_constant_p = true;
4326 break;
4327 }
cf72f34d 4328 if ((AGGREGATE_TYPE_P (TREE_TYPE (t)) || VECTOR_TYPE_P (TREE_TYPE (t))))
4329 {
4330 /* We're being expanded without an explicit target, so start
4331 initializing a new object; expansion with an explicit target
4332 strips the TARGET_EXPR before we get here. */
4333 new_ctx = *ctx;
4334 new_ctx.ctor = build_constructor (TREE_TYPE (t), NULL);
165d0d5b 4335 CONSTRUCTOR_NO_CLEARING (new_ctx.ctor) = true;
cf72f34d 4336 new_ctx.object = TARGET_EXPR_SLOT (t);
4337 ctx->values->put (new_ctx.object, new_ctx.ctor);
4338 ctx = &new_ctx;
4339 }
1227ba74 4340 /* Pass false for 'lval' because this indicates
09b42213 4341 initialization of a temporary. */
cf72f34d 4342 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 1),
f83e6885 4343 false,
b2a43197 4344 non_constant_p, overflow_p);
09b42213 4345 if (!*non_constant_p)
4346 /* Adjust the type of the result to the type of the temporary. */
4347 r = adjust_temp_type (TREE_TYPE (t), r);
1227ba74 4348 if (lval)
1eb418cc 4349 {
4350 tree slot = TARGET_EXPR_SLOT (t);
e283bb4f 4351 r = unshare_constructor (r);
1eb418cc 4352 ctx->values->put (slot, r);
4353 return slot;
4354 }
09b42213 4355 break;
4356
9c96033c 4357 case INIT_EXPR:
9c96033c 4358 case MODIFY_EXPR:
2a2770c6 4359 gcc_assert (jump_target == NULL || *jump_target == NULL_TREE);
1227ba74 4360 r = cxx_eval_store_expression (ctx, t, lval,
9c96033c 4361 non_constant_p, overflow_p);
4362 break;
4363
09b42213 4364 case SCOPE_REF:
cf72f34d 4365 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 1),
1227ba74 4366 lval,
b2a43197 4367 non_constant_p, overflow_p);
09b42213 4368 break;
4369
4370 case RETURN_EXPR:
10fb495c 4371 if (TREE_OPERAND (t, 0) != NULL_TREE)
4372 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0),
4373 lval,
4374 non_constant_p, overflow_p);
2c572f5f 4375 if (jump_target)
4376 *jump_target = t;
4377 else
4378 {
4379 /* Can happen with ({ return true; }) && false; passed to
4380 maybe_constant_value. There is nothing to jump over in this
4381 case, and the bug will be diagnosed later. */
4382 gcc_assert (ctx->quiet);
4383 *non_constant_p = true;
4384 }
00f21715 4385 break;
4386
e0e672a0 4387 case SAVE_EXPR:
4388 /* Avoid evaluating a SAVE_EXPR more than once. */
4389 if (tree *p = ctx->values->get (t))
4390 r = *p;
4391 else
4392 {
c8f6aeb1 4393 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0), false,
e0e672a0 4394 non_constant_p, overflow_p);
4395 ctx->values->put (t, r);
2631cb67 4396 if (ctx->save_exprs)
4397 ctx->save_exprs->add (t);
e0e672a0 4398 }
4399 break;
4400
09b42213 4401 case NON_LVALUE_EXPR:
4402 case TRY_CATCH_EXPR:
7f67d68c 4403 case TRY_BLOCK:
09b42213 4404 case CLEANUP_POINT_EXPR:
4405 case MUST_NOT_THROW_EXPR:
9c96033c 4406 case EXPR_STMT:
4407 case EH_SPEC_BLOCK:
cf72f34d 4408 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0),
1227ba74 4409 lval,
00f21715 4410 non_constant_p, overflow_p,
4411 jump_target);
09b42213 4412 break;
4413
7f67d68c 4414 case TRY_FINALLY_EXPR:
4415 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0), lval,
4416 non_constant_p, overflow_p,
4417 jump_target);
4418 if (!*non_constant_p)
4419 /* Also evaluate the cleanup. */
4420 cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 1), true,
4421 non_constant_p, overflow_p,
4422 jump_target);
4423 break;
4424
09b42213 4425 /* These differ from cxx_eval_unary_expression in that this doesn't
4426 check for a constant operand or result; an address can be
4427 constant without its operand being, and vice versa. */
d2c63826 4428 case MEM_REF:
09b42213 4429 case INDIRECT_REF:
1227ba74 4430 r = cxx_eval_indirect_ref (ctx, t, lval,
09b42213 4431 non_constant_p, overflow_p);
4432 break;
4433
4434 case ADDR_EXPR:
4435 {
4436 tree oldop = TREE_OPERAND (t, 0);
cf72f34d 4437 tree op = cxx_eval_constant_expression (ctx, oldop,
1227ba74 4438 /*lval*/true,
b2a43197 4439 non_constant_p, overflow_p);
09b42213 4440 /* Don't VERIFY_CONSTANT here. */
4441 if (*non_constant_p)
4442 return t;
1eb418cc 4443 gcc_checking_assert (TREE_CODE (op) != CONSTRUCTOR);
09b42213 4444 /* This function does more aggressive folding than fold itself. */
4445 r = build_fold_addr_expr_with_type (op, TREE_TYPE (t));
4446 if (TREE_CODE (r) == ADDR_EXPR && TREE_OPERAND (r, 0) == oldop)
4447 return t;
4448 break;
4449 }
4450
4451 case REALPART_EXPR:
4452 case IMAGPART_EXPR:
6fe424c2 4453 if (lval)
4454 {
4455 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0), lval,
4456 non_constant_p, overflow_p);
4457 if (r == error_mark_node)
4458 ;
4459 else if (r == TREE_OPERAND (t, 0))
4460 r = t;
4461 else
4462 r = fold_build1 (TREE_CODE (t), TREE_TYPE (t), r);
4463 break;
4464 }
4465 /* FALLTHRU */
09b42213 4466 case CONJ_EXPR:
4467 case FIX_TRUNC_EXPR:
4468 case FLOAT_EXPR:
4469 case NEGATE_EXPR:
4470 case ABS_EXPR:
19b4138e 4471 case ABSU_EXPR:
09b42213 4472 case BIT_NOT_EXPR:
4473 case TRUTH_NOT_EXPR:
4474 case FIXED_CONVERT_EXPR:
1227ba74 4475 r = cxx_eval_unary_expression (ctx, t, lval,
09b42213 4476 non_constant_p, overflow_p);
4477 break;
4478
4479 case SIZEOF_EXPR:
d2c63826 4480 r = fold_sizeof_expr (t);
09b42213 4481 VERIFY_CONSTANT (r);
4482 break;
4483
4484 case COMPOUND_EXPR:
4485 {
4486 /* check_return_expr sometimes wraps a TARGET_EXPR in a
4487 COMPOUND_EXPR; don't get confused. Also handle EMPTY_CLASS_EXPR
4488 introduced by build_call_a. */
4489 tree op0 = TREE_OPERAND (t, 0);
4490 tree op1 = TREE_OPERAND (t, 1);
4491 STRIP_NOPS (op1);
4492 if ((TREE_CODE (op0) == TARGET_EXPR && op1 == TARGET_EXPR_SLOT (op0))
4493 || TREE_CODE (op1) == EMPTY_CLASS_EXPR)
f83e6885 4494 r = cxx_eval_constant_expression (ctx, op0,
1227ba74 4495 lval, non_constant_p, overflow_p,
00f21715 4496 jump_target);
09b42213 4497 else
4498 {
4499 /* Check that the LHS is constant and then discard it. */
f83e6885 4500 cxx_eval_constant_expression (ctx, op0,
c8f6aeb1 4501 true, non_constant_p, overflow_p,
00f21715 4502 jump_target);
cf03ba19 4503 if (*non_constant_p)
4504 return t;
09b42213 4505 op1 = TREE_OPERAND (t, 1);
f83e6885 4506 r = cxx_eval_constant_expression (ctx, op1,
1227ba74 4507 lval, non_constant_p, overflow_p,
00f21715 4508 jump_target);
09b42213 4509 }
4510 }
4511 break;
4512
4513 case POINTER_PLUS_EXPR:
57e83b58 4514 case POINTER_DIFF_EXPR:
09b42213 4515 case PLUS_EXPR:
4516 case MINUS_EXPR:
4517 case MULT_EXPR:
4518 case TRUNC_DIV_EXPR:
4519 case CEIL_DIV_EXPR:
4520 case FLOOR_DIV_EXPR:
4521 case ROUND_DIV_EXPR:
4522 case TRUNC_MOD_EXPR:
4523 case CEIL_MOD_EXPR:
4524 case ROUND_MOD_EXPR:
4525 case RDIV_EXPR:
4526 case EXACT_DIV_EXPR:
4527 case MIN_EXPR:
4528 case MAX_EXPR:
4529 case LSHIFT_EXPR:
4530 case RSHIFT_EXPR:
4531 case LROTATE_EXPR:
4532 case RROTATE_EXPR:
4533 case BIT_IOR_EXPR:
4534 case BIT_XOR_EXPR:
4535 case BIT_AND_EXPR:
4536 case TRUTH_XOR_EXPR:
4537 case LT_EXPR:
4538 case LE_EXPR:
4539 case GT_EXPR:
4540 case GE_EXPR:
4541 case EQ_EXPR:
4542 case NE_EXPR:
4543 case UNORDERED_EXPR:
4544 case ORDERED_EXPR:
4545 case UNLT_EXPR:
4546 case UNLE_EXPR:
4547 case UNGT_EXPR:
4548 case UNGE_EXPR:
4549 case UNEQ_EXPR:
4550 case LTGT_EXPR:
4551 case RANGE_EXPR:
4552 case COMPLEX_EXPR:
1227ba74 4553 r = cxx_eval_binary_expression (ctx, t, lval,
09b42213 4554 non_constant_p, overflow_p);
4555 break;
4556
4557 /* fold can introduce non-IF versions of these; still treat them as
4558 short-circuiting. */
4559 case TRUTH_AND_EXPR:
4560 case TRUTH_ANDIF_EXPR:
cf72f34d 4561 r = cxx_eval_logical_expression (ctx, t, boolean_false_node,
09b42213 4562 boolean_true_node,
1227ba74 4563 lval,
09b42213 4564 non_constant_p, overflow_p);
4565 break;
4566
4567 case TRUTH_OR_EXPR:
4568 case TRUTH_ORIF_EXPR:
cf72f34d 4569 r = cxx_eval_logical_expression (ctx, t, boolean_true_node,
09b42213 4570 boolean_false_node,
1227ba74 4571 lval,
09b42213 4572 non_constant_p, overflow_p);
4573 break;
4574
4575 case ARRAY_REF:
1227ba74 4576 r = cxx_eval_array_reference (ctx, t, lval,
09b42213 4577 non_constant_p, overflow_p);
4578 break;
4579
4580 case COMPONENT_REF:
4581 if (is_overloaded_fn (t))
4582 {
4583 /* We can only get here in checking mode via
4584 build_non_dependent_expr, because any expression that
4585 calls or takes the address of the function will have
4586 pulled a FUNCTION_DECL out of the COMPONENT_REF. */
f83e6885 4587 gcc_checking_assert (ctx->quiet || errorcount);
09b42213 4588 *non_constant_p = true;
4589 return t;
4590 }
1227ba74 4591 r = cxx_eval_component_reference (ctx, t, lval,
09b42213 4592 non_constant_p, overflow_p);
4593 break;
4594
4595 case BIT_FIELD_REF:
1227ba74 4596 r = cxx_eval_bit_field_ref (ctx, t, lval,
09b42213 4597 non_constant_p, overflow_p);
4598 break;
4599
4600 case COND_EXPR:
2a2770c6 4601 if (jump_target && *jump_target)
4602 {
4603 /* When jumping to a label, the label might be either in the
4604 then or else blocks, so process then block first in skipping
4605 mode first, and if we are still in the skipping mode at its end,
4606 process the else block too. */
4607 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 1),
4608 lval, non_constant_p, overflow_p,
4609 jump_target);
4610 if (*jump_target)
4611 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 2),
4612 lval, non_constant_p, overflow_p,
4613 jump_target);
4614 break;
4615 }
1227ba74 4616 r = cxx_eval_conditional_expression (ctx, t, lval,
00f21715 4617 non_constant_p, overflow_p,
4618 jump_target);
09b42213 4619 break;
31595caf 4620 case VEC_COND_EXPR:
4621 r = cxx_eval_vector_conditional_expression (ctx, t, non_constant_p,
4622 overflow_p);
4623 break;
09b42213 4624
4625 case CONSTRUCTOR:
1a3631bc 4626 if (TREE_CONSTANT (t))
58b0f9ce 4627 {
4628 /* Don't re-process a constant CONSTRUCTOR, but do fold it to
4629 VECTOR_CST if applicable. */
79e65a6b 4630 verify_constructor_flags (t);
58b0f9ce 4631 if (TREE_CONSTANT (t))
4632 return fold (t);
4633 }
1227ba74 4634 r = cxx_eval_bare_aggregate (ctx, t, lval,
09b42213 4635 non_constant_p, overflow_p);
4636 break;
4637
4638 case VEC_INIT_EXPR:
4639 /* We can get this in a defaulted constructor for a class with a
4640 non-static data member of array type. Either the initializer will
4641 be NULL, meaning default-initialization, or it will be an lvalue
4642 or xvalue of the same type, meaning direct-initialization from the
4643 corresponding member. */
1227ba74 4644 r = cxx_eval_vec_init (ctx, t, lval,
09b42213 4645 non_constant_p, overflow_p);
4646 break;
4647
09b42213 4648 case VEC_PERM_EXPR:
1227ba74 4649 r = cxx_eval_trinary_expression (ctx, t, lval,
09b42213 4650 non_constant_p, overflow_p);
4651 break;
4652
941fafa5 4653 case NOP_EXPR:
4654 if (REINTERPRET_CAST_P (t))
4655 {
4656 if (!ctx->quiet)
d3a3cfb8 4657 error_at (cp_expr_loc_or_loc (t, input_location),
941fafa5 4658 "a reinterpret_cast is not a constant expression");
4659 *non_constant_p = true;
4660 return t;
4661 }
4662 /* FALLTHROUGH. */
09b42213 4663 case CONVERT_EXPR:
4664 case VIEW_CONVERT_EXPR:
d2c63826 4665 case UNARY_PLUS_EXPR:
09b42213 4666 {
4667 tree oldop = TREE_OPERAND (t, 0);
d2c63826 4668
cf72f34d 4669 tree op = cxx_eval_constant_expression (ctx, oldop,
1227ba74 4670 lval,
b2a43197 4671 non_constant_p, overflow_p);
09b42213 4672 if (*non_constant_p)
4673 return t;
f16ed232 4674 tree type = TREE_TYPE (t);
4675 if (TREE_CODE (op) == PTRMEM_CST
4676 && !TYPE_PTRMEM_P (type))
4677 op = cplus_expand_constant (op);
941fafa5 4678
6a9b35ef 4679 if (TREE_CODE (op) == PTRMEM_CST && tcode == NOP_EXPR)
4680 {
941fafa5 4681 if (!same_type_ignoring_top_level_qualifiers_p (type, TREE_TYPE (op))
4682 && !can_convert_qual (type, op))
4683 op = cplus_expand_constant (op);
4684 return cp_fold_convert (type, op);
6a9b35ef 4685 }
cb768824 4686
d03fa520 4687 if (INDIRECT_TYPE_P (type) && TREE_CODE (op) == INTEGER_CST)
09b42213 4688 {
cb768824 4689 if (integer_zerop (op))
4690 {
90ad495b 4691 if (TYPE_REF_P (type))
cb768824 4692 {
4693 if (!ctx->quiet)
d3a3cfb8 4694 error_at (cp_expr_loc_or_loc (t, input_location),
cb768824 4695 "dereferencing a null pointer");
4696 *non_constant_p = true;
4697 return t;
4698 }
90ad495b 4699 else if (TYPE_PTR_P (TREE_TYPE (op)))
cb768824 4700 {
4701 tree from = TREE_TYPE (op);
4702
4703 if (!can_convert (type, from, tf_none))
4704 {
4705 if (!ctx->quiet)
d3a3cfb8 4706 error_at (cp_expr_loc_or_loc (t, input_location),
cb768824 4707 "conversion of %qT null pointer to %qT "
4708 "is not a constant expression",
4709 from, type);
4710 *non_constant_p = true;
4711 return t;
4712 }
4713 }
4714 }
4715 else
4716 {
4717 /* This detects for example:
4718 reinterpret_cast<void*>(sizeof 0)
4719 */
4720 if (!ctx->quiet)
d3a3cfb8 4721 error_at (cp_expr_loc_or_loc (t, input_location),
cb768824 4722 "%<reinterpret_cast<%T>(%E)%> is not "
ea034e2c 4723 "a constant expression",
cb768824 4724 type, op);
4725 *non_constant_p = true;
4726 return t;
4727 }
09b42213 4728 }
941fafa5 4729
d2c63826 4730 if (op == oldop && tcode != UNARY_PLUS_EXPR)
09b42213 4731 /* We didn't fold at the top so we could check for ptr-int
4732 conversion. */
4733 return fold (t);
941fafa5 4734
6b53d686 4735 /* Handle an array's bounds having been deduced after we built
4736 the wrapping expression. */
4737 if (same_type_ignoring_tlq_and_bounds_p (type, TREE_TYPE (op)))
4738 r = op;
4739 else if (tcode == UNARY_PLUS_EXPR)
d2c63826 4740 r = fold_convert (TREE_TYPE (t), op);
4741 else
4742 r = fold_build1 (tcode, type, op);
941fafa5 4743
09b42213 4744 /* Conversion of an out-of-range value has implementation-defined
4745 behavior; the language considers it different from arithmetic
4746 overflow, which is undefined. */
4747 if (TREE_OVERFLOW_P (r) && !TREE_OVERFLOW_P (op))
4748 TREE_OVERFLOW (r) = false;
4749 }
4750 break;
4751
4752 case EMPTY_CLASS_EXPR:
4753 /* This is good enough for a function argument that might not get
4754 used, and they can't do anything with it, so just return it. */
4755 return t;
4756
9c96033c 4757 case STATEMENT_LIST:
00f21715 4758 new_ctx = *ctx;
4759 new_ctx.ctor = new_ctx.object = NULL_TREE;
f83e6885 4760 return cxx_eval_statement_list (&new_ctx, t,
00f21715 4761 non_constant_p, overflow_p, jump_target);
9c96033c 4762
4763 case BIND_EXPR:
4764 return cxx_eval_constant_expression (ctx, BIND_EXPR_BODY (t),
1227ba74 4765 lval,
00f21715 4766 non_constant_p, overflow_p,
4767 jump_target);
9c96033c 4768
09b42213 4769 case PREINCREMENT_EXPR:
4770 case POSTINCREMENT_EXPR:
4771 case PREDECREMENT_EXPR:
4772 case POSTDECREMENT_EXPR:
f83e6885 4773 return cxx_eval_increment_expression (ctx, t,
1227ba74 4774 lval, non_constant_p, overflow_p);
9c96033c 4775
4776 case LAMBDA_EXPR:
09b42213 4777 case NEW_EXPR:
4778 case VEC_NEW_EXPR:
4779 case DELETE_EXPR:
4780 case VEC_DELETE_EXPR:
4781 case THROW_EXPR:
09b42213 4782 case MODOP_EXPR:
4783 /* GCC internal stuff. */
4784 case VA_ARG_EXPR:
09b42213 4785 case NON_DEPENDENT_EXPR:
4786 case BASELINK:
09b42213 4787 case OFFSET_REF:
f83e6885 4788 if (!ctx->quiet)
d3a3cfb8 4789 error_at (cp_expr_loc_or_loc (t, input_location),
ea034e2c 4790 "expression %qE is not a constant expression", t);
09b42213 4791 *non_constant_p = true;
4792 break;
4793
bb6e576c 4794 case OBJ_TYPE_REF:
4795 {
4796 /* Virtual function call. Let the constexpr machinery figure out
4797 the dynamic type. */
4798 int token = tree_to_shwi (OBJ_TYPE_REF_TOKEN (t));
4799 tree obj = OBJ_TYPE_REF_OBJECT (t);
4800 obj = cxx_eval_constant_expression (ctx, obj, lval, non_constant_p,
4801 overflow_p);
4802 /* We expect something in the form of &x.D.2103.D.2094; get x. */
4803 if (TREE_CODE (obj) != ADDR_EXPR)
4804 {
4805 if (!ctx->quiet)
4806 error_at (cp_expr_loc_or_loc (t, input_location),
4807 "expression %qE is not a constant expression", t);
4808 *non_constant_p = true;
4809 return t;
4810 }
4811 obj = TREE_OPERAND (obj, 0);
4812 while (handled_component_p (obj))
4813 obj = TREE_OPERAND (obj, 0);
4814 tree objtype = TREE_TYPE (obj);
4815 /* Find the function decl in the virtual functions list. TOKEN is
4816 the DECL_VINDEX that says which function we're looking for. */
4817 tree virtuals = BINFO_VIRTUALS (TYPE_BINFO (objtype));
4818 r = TREE_VALUE (chain_index (token, virtuals));
4819 break;
4820 }
4821
cf72f34d 4822 case PLACEHOLDER_EXPR:
85de9604 4823 /* Use of the value or address of the current object. */
4824 if (tree ctor = lookup_placeholder (ctx, lval, TREE_TYPE (t)))
4825 return cxx_eval_constant_expression (ctx, ctor, lval,
4826 non_constant_p, overflow_p);
4827 /* A placeholder without a referent. We can get here when
4828 checking whether NSDMIs are noexcept, or in massage_init_elt;
4829 just say it's non-constant for now. */
4830 gcc_assert (ctx->quiet);
4831 *non_constant_p = true;
cf72f34d 4832 break;
4833
cf03ba19 4834 case EXIT_EXPR:
4835 {
4836 tree cond = TREE_OPERAND (t, 0);
4837 cond = cxx_eval_constant_expression (ctx, cond, /*lval*/false,
4838 non_constant_p, overflow_p);
4839 VERIFY_CONSTANT (cond);
4840 if (integer_nonzerop (cond))
4841 *jump_target = t;
4842 }
4843 break;
4844
9c96033c 4845 case GOTO_EXPR:
00f21715 4846 *jump_target = TREE_OPERAND (t, 0);
d29e4e8c 4847 gcc_assert (breaks (jump_target) || continues (jump_target)
4848 /* Allow for jumping to a cdtor_label. */
4849 || returns (jump_target));
00f21715 4850 break;
4851
9c96033c 4852 case LOOP_EXPR:
f83e6885 4853 cxx_eval_loop_expr (ctx, t,
00f21715 4854 non_constant_p, overflow_p, jump_target);
4855 break;
4856
9c96033c 4857 case SWITCH_EXPR:
f83e6885 4858 cxx_eval_switch_expr (ctx, t,
00f21715 4859 non_constant_p, overflow_p, jump_target);
9c96033c 4860 break;
4861
56c12fd4 4862 case REQUIRES_EXPR:
4863 /* It's possible to get a requires-expression in a constant
4864 expression. For example:
4865
4866 template<typename T> concept bool C() {
4867 return requires (T t) { t; };
4868 }
4869
4870 template<typename T> requires !C<T>() void f(T);
4871
4872 Normalization leaves f with the associated constraint
4873 '!requires (T t) { ... }' which is not transformed into
4874 a constraint. */
4875 if (!processing_template_decl)
4876 return evaluate_constraint_expression (t, NULL_TREE);
4877 else
4878 *non_constant_p = true;
4879 return t;
4880
24c6ee98 4881 case ANNOTATE_EXPR:
24c6ee98 4882 r = cxx_eval_constant_expression (ctx, TREE_OPERAND (t, 0),
4883 lval,
4884 non_constant_p, overflow_p,
4885 jump_target);
4886 break;
4887
7285637a 4888 case USING_STMT:
4889 r = void_node;
4890 break;
4891
09b42213 4892 default:
b9a3af23 4893 if (STATEMENT_CODE_P (TREE_CODE (t)))
4894 {
4895 /* This function doesn't know how to deal with pre-genericize
4896 statements; this can only happen with statement-expressions,
4897 so for now just fail. */
4898 if (!ctx->quiet)
4899 error_at (EXPR_LOCATION (t),
ea034e2c 4900 "statement is not a constant expression");
b9a3af23 4901 }
4902 else
4903 internal_error ("unexpected expression %qE of kind %s", t,
4904 get_tree_code_name (TREE_CODE (t)));
09b42213 4905 *non_constant_p = true;
4906 break;
4907 }
4908
4909 if (r == error_mark_node)
4910 *non_constant_p = true;
4911
4912 if (*non_constant_p)
4913 return t;
4914 else
4915 return r;
4916}
4917
6e1bbaae 4918/* P0859: A function is needed for constant evaluation if it is a constexpr
4919 function that is named by an expression ([basic.def.odr]) that is
4920 potentially constant evaluated.
4921
4922 So we need to instantiate any constexpr functions mentioned by the
4923 expression even if the definition isn't needed for evaluating the
4924 expression. */
4925
4926static tree
4927instantiate_cx_fn_r (tree *tp, int *walk_subtrees, void */*data*/)
4928{
4929 if (TREE_CODE (*tp) == FUNCTION_DECL
4930 && DECL_DECLARED_CONSTEXPR_P (*tp)
4931 && !DECL_INITIAL (*tp)
eed138cf 4932 && !trivial_fn_p (*tp)
6e1bbaae 4933 && DECL_TEMPLOID_INSTANTIATION (*tp))
4934 {
4935 ++function_depth;
4936 instantiate_decl (*tp, /*defer_ok*/false, /*expl_inst*/false);
4937 --function_depth;
4938 }
4939 else if (TREE_CODE (*tp) == CALL_EXPR
4940 || TREE_CODE (*tp) == AGGR_INIT_EXPR)
4941 {
4942 if (EXPR_HAS_LOCATION (*tp))
4943 input_location = EXPR_LOCATION (*tp);
4944 }
4945
4946 if (!EXPR_P (*tp))
4947 *walk_subtrees = 0;
4948
4949 return NULL_TREE;
4950}
4951static void
4952instantiate_constexpr_fns (tree t)
4953{
4954 location_t loc = input_location;
4955 cp_walk_tree_without_duplicates (&t, instantiate_cx_fn_r, NULL);
4956 input_location = loc;
4957}
4958
18d371d3 4959/* ALLOW_NON_CONSTANT is false if T is required to be a constant expression.
4960 PRETEND_CONST_REQUIRED is true if T is required to be const-evaluated as
4961 per P0595 even when ALLOW_NON_CONSTANT is true. */
4962
09b42213 4963static tree
cf72f34d 4964cxx_eval_outermost_constant_expr (tree t, bool allow_non_constant,
18d371d3 4965 bool strict = true,
4966 bool pretend_const_required = false,
4967 tree object = NULL_TREE)
09b42213 4968{
c300fe28 4969 auto_timevar time (TV_CONSTEXPR);
4970
09b42213 4971 bool non_constant_p = false;
4972 bool overflow_p = false;
cf72f34d 4973 hash_map<tree,tree> map;
2631cb67 4974
2a2770c6 4975 constexpr_ctx ctx = { NULL, &map, NULL, NULL, NULL, NULL,
18d371d3 4976 allow_non_constant, strict,
4977 pretend_const_required || !allow_non_constant };
2631cb67 4978
cf72f34d 4979 tree type = initialized_type (t);
cf72f34d 4980 tree r = t;
4981 if (AGGREGATE_TYPE_P (type) || VECTOR_TYPE_P (type))
4982 {
4983 /* In C++14 an NSDMI can participate in aggregate initialization,
4984 and can refer to the address of the object being initialized, so
4985 we need to pass in the relevant VAR_DECL if we want to do the
4986 evaluation in a single pass. The evaluation will dynamically
4987 update ctx.values for the VAR_DECL. We use the same strategy
4988 for C++11 constexpr constructors that refer to the object being
4989 initialized. */
4990 ctx.ctor = build_constructor (type, NULL);
165d0d5b 4991 CONSTRUCTOR_NO_CLEARING (ctx.ctor) = true;
9c96033c 4992 if (!object)
4993 {
4994 if (TREE_CODE (t) == TARGET_EXPR)
4995 object = TARGET_EXPR_SLOT (t);
4996 else if (TREE_CODE (t) == AGGR_INIT_EXPR)
4997 object = AGGR_INIT_EXPR_SLOT (t);
4998 }
cf72f34d 4999 ctx.object = object;
5000 if (object)
5001 gcc_assert (same_type_ignoring_top_level_qualifiers_p
5002 (type, TREE_TYPE (object)));
5003 if (object && DECL_P (object))
5004 map.put (object, ctx.ctor);
5005 if (TREE_CODE (r) == TARGET_EXPR)
5006 /* Avoid creating another CONSTRUCTOR when we expand the
5007 TARGET_EXPR. */
5008 r = TARGET_EXPR_INITIAL (r);
5009 }
5010
6e1bbaae 5011 instantiate_constexpr_fns (r);
f83e6885 5012 r = cxx_eval_constant_expression (&ctx, r,
b2a43197 5013 false, &non_constant_p, &overflow_p);
09b42213 5014
5015 verify_constant (r, allow_non_constant, &non_constant_p, &overflow_p);
5016
bbcc9042 5017 /* Mutable logic is a bit tricky: we want to allow initialization of
5018 constexpr variables with mutable members, but we can't copy those
5019 members to another constexpr variable. */
5020 if (TREE_CODE (r) == CONSTRUCTOR
5021 && CONSTRUCTOR_MUTABLE_POISON (r))
09b42213 5022 {
09b42213 5023 if (!allow_non_constant)
bbcc9042 5024 error ("%qE is not a constant expression because it refers to "
5025 "mutable subobjects of %qT", t, type);
09b42213 5026 non_constant_p = true;
5027 }
5028
c6d97004 5029 if (TREE_CODE (r) == CONSTRUCTOR
165d0d5b 5030 && CONSTRUCTOR_NO_CLEARING (r))
c6d97004 5031 {
5032 if (!allow_non_constant)
5033 error ("%qE is not a constant expression because it refers to "
5034 "an incompletely initialized variable", t);
5035 TREE_CONSTANT (r) = false;
5036 non_constant_p = true;
5037 }
5038
09b42213 5039 /* Technically we should check this for all subexpressions, but that
5040 runs into problems with our internal representation of pointer
5041 subtraction and the 5.19 rules are still in flux. */
5042 if (CONVERT_EXPR_CODE_P (TREE_CODE (r))
5043 && ARITHMETIC_TYPE_P (TREE_TYPE (r))
5044 && TREE_CODE (TREE_OPERAND (r, 0)) == ADDR_EXPR)
5045 {
5046 if (!allow_non_constant)
5047 error ("conversion from pointer type %qT "
ea034e2c 5048 "to arithmetic type %qT in a constant expression",
09b42213 5049 TREE_TYPE (TREE_OPERAND (r, 0)), TREE_TYPE (r));
5050 non_constant_p = true;
5051 }
5052
5053 if (!non_constant_p && overflow_p)
5054 non_constant_p = true;
5055
c6c0523b 5056 /* Unshare the result unless it's a CONSTRUCTOR in which case it's already
5057 unshared. */
5058 bool should_unshare = true;
5059 if (r == t || TREE_CODE (r) == CONSTRUCTOR)
5060 should_unshare = false;
5061
09b42213 5062 if (non_constant_p && !allow_non_constant)
5063 return error_mark_node;
5064 else if (non_constant_p && TREE_CONSTANT (r))
5065 {
18d371d3 5066 /* If __builtin_is_constant_evaluated () was evaluated to true
5067 and the result is not a valid constant expression, we need to
5068 punt. */
5069 if (pretend_const_required)
5070 return cxx_eval_outermost_constant_expr (t, true, strict,
5071 false, object);
1d29f4ea 5072 /* This isn't actually constant, so unset TREE_CONSTANT.
5073 Don't clear TREE_CONSTANT on ADDR_EXPR, as the middle-end requires
5074 it to be set if it is invariant address, even when it is not
5075 a valid C++ constant expression. Wrap it with a NOP_EXPR
5076 instead. */
5077 if (EXPR_P (r) && TREE_CODE (r) != ADDR_EXPR)
09b42213 5078 r = copy_node (r);
5079 else if (TREE_CODE (r) == CONSTRUCTOR)
5080 r = build1 (VIEW_CONVERT_EXPR, TREE_TYPE (r), r);
5081 else
5082 r = build_nop (TREE_TYPE (r), r);
5083 TREE_CONSTANT (r) = false;
5084 }
5085 else if (non_constant_p || r == t)
5086 return t;
5087
c6c0523b 5088 if (should_unshare)
5089 r = unshare_expr (r);
5090
09b42213 5091 if (TREE_CODE (r) == CONSTRUCTOR && CLASS_TYPE_P (TREE_TYPE (r)))
5092 {
5093 if (TREE_CODE (t) == TARGET_EXPR
5094 && TARGET_EXPR_INITIAL (t) == r)
5095 return t;
5096 else
5097 {
5098 r = get_target_expr (r);
5099 TREE_CONSTANT (r) = true;
5100 return r;
5101 }
5102 }
5103 else
5104 return r;
5105}
5106
5107/* Returns true if T is a valid subexpression of a constant expression,
5108 even if it isn't itself a constant expression. */
5109
5110bool
5111is_sub_constant_expr (tree t)
5112{
5113 bool non_constant_p = false;
5114 bool overflow_p = false;
cf72f34d 5115 hash_map <tree, tree> map;
2631cb67 5116
18d371d3 5117 constexpr_ctx ctx
5118 = { NULL, &map, NULL, NULL, NULL, NULL, true, true, false };
2631cb67 5119
6e1bbaae 5120 instantiate_constexpr_fns (t);
f83e6885 5121 cxx_eval_constant_expression (&ctx, t, false, &non_constant_p,
b2a43197 5122 &overflow_p);
09b42213 5123 return !non_constant_p && !overflow_p;
5124}
5125
5126/* If T represents a constant expression returns its reduced value.
5127 Otherwise return error_mark_node. If T is dependent, then
5128 return NULL. */
5129
5130tree
cf72f34d 5131cxx_constant_value (tree t, tree decl)
09b42213 5132{
18d371d3 5133 return cxx_eval_outermost_constant_expr (t, false, true, true, decl);
09b42213 5134}
5135
d2c63826 5136/* Helper routine for fold_simple function. Either return simplified
5137 expression T, otherwise NULL_TREE.
5138 In contrast to cp_fully_fold, and to maybe_constant_value, we try to fold
5139 even if we are within template-declaration. So be careful on call, as in
5140 such case types can be undefined. */
5141
5142static tree
5143fold_simple_1 (tree t)
5144{
5145 tree op1;
5146 enum tree_code code = TREE_CODE (t);
5147
5148 switch (code)
5149 {
5150 case INTEGER_CST:
5151 case REAL_CST:
5152 case VECTOR_CST:
5153 case FIXED_CST:
5154 case COMPLEX_CST:
5155 return t;
5156
5157 case SIZEOF_EXPR:
5158 return fold_sizeof_expr (t);
5159
5160 case ABS_EXPR:
19b4138e 5161 case ABSU_EXPR:
d2c63826 5162 case CONJ_EXPR:
5163 case REALPART_EXPR:
5164 case IMAGPART_EXPR:
5165 case NEGATE_EXPR:
5166 case BIT_NOT_EXPR:
5167 case TRUTH_NOT_EXPR:
5168 case NOP_EXPR:
5169 case VIEW_CONVERT_EXPR:
5170 case CONVERT_EXPR:
5171 case FLOAT_EXPR:
5172 case FIX_TRUNC_EXPR:
5173 case FIXED_CONVERT_EXPR:
5174 case ADDR_SPACE_CONVERT_EXPR:
5175
5176 op1 = TREE_OPERAND (t, 0);
5177
5178 t = const_unop (code, TREE_TYPE (t), op1);
5179 if (!t)
5180 return NULL_TREE;
5181
5182 if (CONVERT_EXPR_CODE_P (code)
5183 && TREE_OVERFLOW_P (t) && !TREE_OVERFLOW_P (op1))
5184 TREE_OVERFLOW (t) = false;
5185 return t;
5186
5187 default:
5188 return NULL_TREE;
5189 }
5190}
5191
5192/* If T is a simple constant expression, returns its simplified value.
6fe5fea9 5193 Otherwise returns T. In contrast to maybe_constant_value we
d2c63826 5194 simplify only few operations on constant-expressions, and we don't
5195 try to simplify constexpressions. */
5196
5197tree
5198fold_simple (tree t)
5199{
d2c63826 5200 if (processing_template_decl)
5201 return t;
5202
6fe5fea9 5203 tree r = fold_simple_1 (t);
5204 if (r)
5205 return r;
d2c63826 5206
6fe5fea9 5207 return t;
d2c63826 5208}
5209
09b42213 5210/* If T is a constant expression, returns its reduced value.
5211 Otherwise, if T does not have TREE_CONSTANT set, returns T.
5212 Otherwise, returns a version of T without TREE_CONSTANT. */
5213
b601ad30 5214static GTY((deletable)) hash_map<tree, tree> *cv_cache;
5215
5216tree
5217maybe_constant_value (tree t, tree decl)
09b42213 5218{
5219 tree r;
5220
7e1f8be4 5221 if (!is_nondependent_constant_expression (t))
09b42213 5222 {
5223 if (TREE_OVERFLOW_P (t))
5224 {
5225 t = build_nop (TREE_TYPE (t), t);
5226 TREE_CONSTANT (t) = false;
5227 }
5228 return t;
5229 }
b601ad30 5230 else if (CONSTANT_CLASS_P (t))
5231 /* No caching or evaluation needed. */
5232 return t;
5233
5234 if (cv_cache == NULL)
5235 cv_cache = hash_map<tree, tree>::create_ggc (101);
5236 if (tree *cached = cv_cache->get (t))
5237 return *cached;
09b42213 5238
18d371d3 5239 r = cxx_eval_outermost_constant_expr (t, true, true, false, decl);
5e8689fb 5240 gcc_checking_assert (r == t
5241 || CONVERT_EXPR_P (t)
5242 || TREE_CODE (t) == VIEW_CONVERT_EXPR
5243 || (TREE_CONSTANT (t) && !TREE_CONSTANT (r))
5244 || !cp_tree_equal (r, t));
b601ad30 5245 cv_cache->put (t, r);
09b42213 5246 return r;
5247}
5248
2a655a4c 5249/* Dispose of the whole CV_CACHE. */
5250
5251static void
5252clear_cv_cache (void)
5253{
5254 if (cv_cache != NULL)
5255 cv_cache->empty ();
5256}
5257
f553d9f8 5258/* Dispose of the whole CV_CACHE and FOLD_CACHE. */
a0c919f7 5259
5260void
f553d9f8 5261clear_cv_and_fold_caches (void)
a0c919f7 5262{
2a655a4c 5263 clear_cv_cache ();
f553d9f8 5264 clear_fold_cache ();
a0c919f7 5265}
5266
21131a05 5267/* Like maybe_constant_value but first fully instantiate the argument.
5268
5269 Note: this is equivalent to instantiate_non_dependent_expr_sfinae
006b503a 5270 (t, complain) followed by maybe_constant_value but is more efficient,
5271 because it calls instantiation_dependent_expression_p and
5272 potential_constant_expression at most once.
5273
5274 Callers should generally pass their active complain, or if they are in a
5275 non-template, diagnosing context, they can use the default of
5276 tf_warning_or_error. Callers that might be within a template context, don't
5277 have a complain parameter, and aren't going to remember the result for long
5278 (e.g. null_ptr_cst_p), can pass tf_none and deal with error_mark_node
5279 appropriately. */
21131a05 5280
5281tree
006b503a 5282fold_non_dependent_expr (tree t,
5283 tsubst_flags_t complain /* = tf_warning_or_error */)
21131a05 5284{
5285 if (t == NULL_TREE)
5286 return NULL_TREE;
5287
5288 /* If we're in a template, but T isn't value dependent, simplify
5289 it. We're supposed to treat:
5290
5291 template <typename T> void f(T[1 + 1]);
5292 template <typename T> void f(T[2]);
5293
5294 as two declarations of the same function, for example. */
5295 if (processing_template_decl)
5296 {
7e1f8be4 5297 if (is_nondependent_constant_expression (t))
21131a05 5298 {
c8a9f04c 5299 processing_template_decl_sentinel s;
006b503a 5300 t = instantiate_non_dependent_expr_internal (t, complain);
21131a05 5301
5302 if (type_unknown_p (t)
5303 || BRACE_ENCLOSED_INITIALIZER_P (t))
5304 {
5305 if (TREE_OVERFLOW_P (t))
5306 {
5307 t = build_nop (TREE_TYPE (t), t);
5308 TREE_CONSTANT (t) = false;
5309 }
5310 return t;
5311 }
5312
18d371d3 5313 tree r = cxx_eval_outermost_constant_expr (t, true, true, false,
5314 NULL_TREE);
21131a05 5315 /* cp_tree_equal looks through NOPs, so allow them. */
5e8689fb 5316 gcc_checking_assert (r == t
5317 || CONVERT_EXPR_P (t)
5318 || TREE_CODE (t) == VIEW_CONVERT_EXPR
5319 || (TREE_CONSTANT (t) && !TREE_CONSTANT (r))
5320 || !cp_tree_equal (r, t));
21131a05 5321 return r;
5322 }
5323 else if (TREE_OVERFLOW_P (t))
5324 {
5325 t = build_nop (TREE_TYPE (t), t);
5326 TREE_CONSTANT (t) = false;
5327 }
5328 return t;
5329 }
5330
5331 return maybe_constant_value (t);
5332}
5333
09b42213 5334/* Like maybe_constant_value, but returns a CONSTRUCTOR directly, rather
18d371d3 5335 than wrapped in a TARGET_EXPR.
5336 ALLOW_NON_CONSTANT is false if T is required to be a constant expression.
5337 PRETEND_CONST_REQUIRED is true if T is required to be const-evaluated as
5338 per P0595 even when ALLOW_NON_CONSTANT is true. */
09b42213 5339
0c703e14 5340static tree
18d371d3 5341maybe_constant_init_1 (tree t, tree decl, bool allow_non_constant,
5342 bool pretend_const_required)
09b42213 5343{
d2c63826 5344 if (!t)
5345 return t;
09b42213 5346 if (TREE_CODE (t) == EXPR_STMT)
5347 t = TREE_OPERAND (t, 0);
5348 if (TREE_CODE (t) == CONVERT_EXPR
5349 && VOID_TYPE_P (TREE_TYPE (t)))
5350 t = TREE_OPERAND (t, 0);
9c96033c 5351 if (TREE_CODE (t) == INIT_EXPR)
5352 t = TREE_OPERAND (t, 1);
c6d97004 5353 if (TREE_CODE (t) == TARGET_EXPR)
5354 t = TARGET_EXPR_INITIAL (t);
7e1f8be4 5355 if (!is_nondependent_static_init_expression (t))
2055d27a 5356 /* Don't try to evaluate it. */;
0c703e14 5357 else if (CONSTANT_CLASS_P (t) && allow_non_constant)
b601ad30 5358 /* No evaluation needed. */;
2055d27a 5359 else
18d371d3 5360 t = cxx_eval_outermost_constant_expr (t, allow_non_constant,
5361 !allow_non_constant,
5362 pretend_const_required, decl);
09b42213 5363 if (TREE_CODE (t) == TARGET_EXPR)
5364 {
5365 tree init = TARGET_EXPR_INITIAL (t);
5366 if (TREE_CODE (init) == CONSTRUCTOR)
5367 t = init;
5368 }
5369 return t;
5370}
5371
0c703e14 5372/* Wrapper for maybe_constant_init_1 which permits non constants. */
5373
5374tree
18d371d3 5375maybe_constant_init (tree t, tree decl, bool pretend_const_required)
0c703e14 5376{
18d371d3 5377 return maybe_constant_init_1 (t, decl, true, pretend_const_required);
0c703e14 5378}
5379
5380/* Wrapper for maybe_constant_init_1 which does not permit non constants. */
5381
5382tree
5383cxx_constant_init (tree t, tree decl)
5384{
18d371d3 5385 return maybe_constant_init_1 (t, decl, false, true);
0c703e14 5386}
5387
09b42213 5388#if 0
5389/* FIXME see ADDR_EXPR section in potential_constant_expression_1. */
5390/* Return true if the object referred to by REF has automatic or thread
5391 local storage. */
5392
5393enum { ck_ok, ck_bad, ck_unknown };
5394static int
5395check_automatic_or_tls (tree ref)
5396{
3754d046 5397 machine_mode mode;
81bc0f0f 5398 poly_int64 bitsize, bitpos;
09b42213 5399 tree offset;
5400 int volatilep = 0, unsignedp = 0;
5401 tree decl = get_inner_reference (ref, &bitsize, &bitpos, &offset,
5402 &mode, &unsignedp, &volatilep, false);
5403 duration_kind dk;
5404
5405 /* If there isn't a decl in the middle, we don't know the linkage here,
5406 and this isn't a constant expression anyway. */
5407 if (!DECL_P (decl))
5408 return ck_unknown;
5409 dk = decl_storage_duration (decl);
5410 return (dk == dk_auto || dk == dk_thread) ? ck_bad : ck_ok;
5411}
5412#endif
5413
5414/* Return true if T denotes a potentially constant expression. Issue
5415 diagnostic as appropriate under control of FLAGS. If WANT_RVAL is true,
7e1f8be4 5416 an lvalue-rvalue conversion is implied. If NOW is true, we want to
5417 consider the expression in the current context, independent of constexpr
5418 substitution.
09b42213 5419
5420 C++0x [expr.const] used to say
5421
5422 6 An expression is a potential constant expression if it is
5423 a constant expression where all occurrences of function
5424 parameters are replaced by arbitrary constant expressions
5425 of the appropriate type.
5426
5427 2 A conditional expression is a constant expression unless it
5428 involves one of the following as a potentially evaluated
5429 subexpression (3.2), but subexpressions of logical AND (5.14),
5430 logical OR (5.15), and conditional (5.16) operations that are
5431 not evaluated are not considered. */
5432
5433static bool
7e1f8be4 5434potential_constant_expression_1 (tree t, bool want_rval, bool strict, bool now,
32fee334 5435 tsubst_flags_t flags, tree *jump_target)
09b42213 5436{
7e1f8be4 5437#define RECUR(T,RV) \
32fee334 5438 potential_constant_expression_1 ((T), (RV), strict, now, flags, jump_target)
7e1f8be4 5439
09b42213 5440 enum { any = false, rval = true };
5441 int i;
5442 tree tmp;
5443
5444 if (t == error_mark_node)
5445 return false;
5446 if (t == NULL_TREE)
5447 return true;
d3a3cfb8 5448 location_t loc = cp_expr_loc_or_loc (t, input_location);
32fee334 5449
5450 if (*jump_target)
5451 /* If we are jumping, ignore everything. This is simpler than the
5452 cxx_eval_constant_expression handling because we only need to be
5453 conservatively correct, and we don't necessarily have a constant value
5454 available, so we don't bother with switch tracking. */
5455 return true;
5456
eade0940 5457 if (TREE_THIS_VOLATILE (t) && !DECL_P (t))
09b42213 5458 {
5459 if (flags & tf_error)
d6a08f5c 5460 error_at (loc, "expression %qE has side-effects", t);
09b42213 5461 return false;
5462 }
5463 if (CONSTANT_CLASS_P (t))
5464 return true;
c7282bf2 5465 if (CODE_CONTAINS_STRUCT (TREE_CODE (t), TS_TYPED)
5466 && TREE_TYPE (t) == error_mark_node)
5467 return false;
09b42213 5468
5469 switch (TREE_CODE (t))
5470 {
5471 case FUNCTION_DECL:
5472 case BASELINK:
5473 case TEMPLATE_DECL:
5474 case OVERLOAD:
5475 case TEMPLATE_ID_EXPR:
5476 case LABEL_DECL:
5477 case LABEL_EXPR:
9c96033c 5478 case CASE_LABEL_EXPR:
09b42213 5479 case CONST_DECL:
5480 case SIZEOF_EXPR:
5481 case ALIGNOF_EXPR:
5482 case OFFSETOF_EXPR:
5483 case NOEXCEPT_EXPR:
5484 case TEMPLATE_PARM_INDEX:
5485 case TRAIT_EXPR:
5486 case IDENTIFIER_NODE:
5487 case USERDEF_LITERAL:
5488 /* We can see a FIELD_DECL in a pointer-to-member expression. */
5489 case FIELD_DECL:
d2c63826 5490 case RESULT_DECL:
09b42213 5491 case USING_DECL:
9c96033c 5492 case USING_STMT:
cf72f34d 5493 case PLACEHOLDER_EXPR:
56c12fd4 5494 case REQUIRES_EXPR:
33603066 5495 case STATIC_ASSERT:
90567983 5496 case DEBUG_BEGIN_STMT:
09b42213 5497 return true;
5498
32fee334 5499 case RETURN_EXPR:
5500 if (!RECUR (TREE_OPERAND (t, 0), any))
5501 return false;
5502 /* FALLTHROUGH */
5503
5504 case BREAK_STMT:
5505 case CONTINUE_STMT:
5506 *jump_target = t;
5507 return true;
5508
7e1f8be4 5509 case PARM_DECL:
5510 if (now)
5511 {
5512 if (flags & tf_error)
5513 error ("%qE is not a constant expression", t);
5514 return false;
5515 }
5516 return true;
5517
09b42213 5518 case AGGR_INIT_EXPR:
5519 case CALL_EXPR:
5520 /* -- an invocation of a function other than a constexpr function
5521 or a constexpr constructor. */
5522 {
5523 tree fun = get_function_named_in_call (t);
5524 const int nargs = call_expr_nargs (t);
5525 i = 0;
5526
9c96033c 5527 if (fun == NULL_TREE)
5528 {
732905bb 5529 /* Reset to allow the function to continue past the end
5530 of the block below. Otherwise return early. */
5531 bool bail = true;
5532
32cf7025 5533 if (TREE_CODE (t) == CALL_EXPR
5534 && CALL_EXPR_FN (t) == NULL_TREE)
5535 switch (CALL_EXPR_IFN (t))
5536 {
5537 /* These should be ignored, they are optimized away from
5538 constexpr functions. */
5539 case IFN_UBSAN_NULL:
5540 case IFN_UBSAN_BOUNDS:
5541 case IFN_UBSAN_VPTR:
3c77f69c 5542 case IFN_FALLTHROUGH:
32cf7025 5543 return true;
732905bb 5544
5545 case IFN_ADD_OVERFLOW:
5546 case IFN_SUB_OVERFLOW:
5547 case IFN_MUL_OVERFLOW:
6e1b2ffb 5548 case IFN_LAUNDER:
732905bb 5549 bail = false;
5550
32cf7025 5551 default:
5552 break;
5553 }
732905bb 5554
5555 if (bail)
5556 {
5557 /* fold_call_expr can't do anything with IFN calls. */
5558 if (flags & tf_error)
d6a08f5c 5559 error_at (loc, "call to internal function %qE", t);
732905bb 5560 return false;
5561 }
9c96033c 5562 }
732905bb 5563
5564 if (fun && is_overloaded_fn (fun))
09b42213 5565 {
5566 if (TREE_CODE (fun) == FUNCTION_DECL)
5567 {
5568 if (builtin_valid_in_constant_expr_p (fun))
5569 return true;
5570 if (!DECL_DECLARED_CONSTEXPR_P (fun)
5571 /* Allow any built-in function; if the expansion
5572 isn't constant, we'll deal with that then. */
a0e9bfbb 5573 && !fndecl_built_in_p (fun))
09b42213 5574 {
5575 if (flags & tf_error)
5576 {
5967b28b 5577 error_at (loc, "call to non-%<constexpr%> function %qD",
d6a08f5c 5578 fun);
09b42213 5579 explain_invalid_constexpr_fn (fun);
5580 }
5581 return false;
5582 }
5583 /* A call to a non-static member function takes the address
5584 of the object as the first argument. But in a constant
5585 expression the address will be folded away, so look
5586 through it now. */
5587 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fun)
5588 && !DECL_CONSTRUCTOR_P (fun))
5589 {
5590 tree x = get_nth_callarg (t, 0);
5591 if (is_this_parameter (x))
cf72f34d 5592 return true;
7e1f8be4 5593 /* Don't require an immediately constant value, as
5594 constexpr substitution might not use the value. */
5595 bool sub_now = false;
5596 if (!potential_constant_expression_1 (x, rval, strict,
32fee334 5597 sub_now, flags,
5598 jump_target))
09b42213 5599 return false;
5600 i = 1;
5601 }
5602 }
5603 else
5604 {
2055d27a 5605 if (!RECUR (fun, true))
09b42213 5606 return false;
5607 fun = get_first_fn (fun);
5608 }
5609 /* Skip initial arguments to base constructors. */
5610 if (DECL_BASE_CONSTRUCTOR_P (fun))
5611 i = num_artificial_parms_for (fun);
5612 fun = DECL_ORIGIN (fun);
5613 }
732905bb 5614 else if (fun)
09b42213 5615 {
2055d27a 5616 if (RECUR (fun, rval))
09b42213 5617 /* Might end up being a constant function pointer. */;
5618 else
5619 return false;
5620 }
5621 for (; i < nargs; ++i)
5622 {
5623 tree x = get_nth_callarg (t, i);
b2742b58 5624 /* In a template, reference arguments haven't been converted to
5625 REFERENCE_TYPE and we might not even know if the parameter
5626 is a reference, so accept lvalue constants too. */
5627 bool rv = processing_template_decl ? any : rval;
7e1f8be4 5628 /* Don't require an immediately constant value, as constexpr
5629 substitution might not use the value of the argument. */
5630 bool sub_now = false;
5631 if (!potential_constant_expression_1 (x, rv, strict,
32fee334 5632 sub_now, flags, jump_target))
09b42213 5633 return false;
5634 }
5635 return true;
5636 }
5637
5638 case NON_LVALUE_EXPR:
5639 /* -- an lvalue-to-rvalue conversion (4.1) unless it is applied to
5640 -- an lvalue of integral type that refers to a non-volatile
5641 const variable or static data member initialized with
5642 constant expressions, or
5643
5644 -- an lvalue of literal type that refers to non-volatile
5645 object defined with constexpr, or that refers to a
5646 sub-object of such an object; */
2055d27a 5647 return RECUR (TREE_OPERAND (t, 0), rval);
09b42213 5648
5649 case VAR_DECL:
9c8aeb66 5650 if (DECL_HAS_VALUE_EXPR_P (t))
297de7bc 5651 {
d0e2b7e7 5652 if (now && is_normal_capture_proxy (t))
297de7bc 5653 {
5654 /* -- in a lambda-expression, a reference to this or to a
5655 variable with automatic storage duration defined outside that
5656 lambda-expression, where the reference would be an
5657 odr-use. */
5658 if (flags & tf_error)
5659 {
5660 tree cap = DECL_CAPTURED_VARIABLE (t);
5661 error ("lambda capture of %qE is not a constant expression",
5662 cap);
5663 if (!want_rval && decl_constant_var_p (cap))
5664 inform (input_location, "because it is used as a glvalue");
5665 }
5666 return false;
5667 }
5668 return RECUR (DECL_VALUE_EXPR (t), rval);
5669 }
2055d27a 5670 if (want_rval
33603066 5671 && !var_in_maybe_constexpr_fn (t)
c7282bf2 5672 && !type_dependent_expression_p (t)
8d6486e1 5673 && !decl_maybe_constant_var_p (t)
2055d27a 5674 && (strict
5675 || !CP_TYPE_CONST_NON_VOLATILE_P (TREE_TYPE (t))
8d6486e1 5676 || (DECL_INITIAL (t)
5677 && !DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (t)))
c7282bf2 5678 && COMPLETE_TYPE_P (TREE_TYPE (t))
5679 && !is_really_empty_class (TREE_TYPE (t)))
09b42213 5680 {
5681 if (flags & tf_error)
5682 non_const_var_error (t);
5683 return false;
5684 }
5685 return true;
5686
5687 case NOP_EXPR:
5688 case CONVERT_EXPR:
5689 case VIEW_CONVERT_EXPR:
5690 /* -- a reinterpret_cast. FIXME not implemented, and this rule
5691 may change to something more specific to type-punning (DR 1312). */
5692 {
5693 tree from = TREE_OPERAND (t, 0);
d03fa520 5694 if (INDIRECT_TYPE_P (TREE_TYPE (t))
09b42213 5695 && TREE_CODE (from) == INTEGER_CST
5696 && !integer_zerop (from))
5697 {
5698 if (flags & tf_error)
d6a08f5c 5699 error_at (loc, "reinterpret_cast from integer to pointer");
09b42213 5700 return false;
5701 }
2055d27a 5702 return (RECUR (from, TREE_CODE (t) != VIEW_CONVERT_EXPR));
09b42213 5703 }
5704
cd45162d 5705 case ADDRESSOF_EXPR:
5706 /* This is like ADDR_EXPR, except it won't form pointer-to-member. */
5707 t = TREE_OPERAND (t, 0);
5708 goto handle_addr_expr;
5709
09b42213 5710 case ADDR_EXPR:
5711 /* -- a unary operator & that is applied to an lvalue that
5712 designates an object with thread or automatic storage
5713 duration; */
5714 t = TREE_OPERAND (t, 0);
5715
5716 if (TREE_CODE (t) == OFFSET_REF && PTRMEM_OK_P (t))
5717 /* A pointer-to-member constant. */
5718 return true;
5719
cd45162d 5720 handle_addr_expr:
09b42213 5721#if 0
5722 /* FIXME adjust when issue 1197 is fully resolved. For now don't do
5723 any checking here, as we might dereference the pointer later. If
5724 we remove this code, also remove check_automatic_or_tls. */
5725 i = check_automatic_or_tls (t);
5726 if (i == ck_ok)
5727 return true;
5728 if (i == ck_bad)
5729 {
5730 if (flags & tf_error)
5731 error ("address-of an object %qE with thread local or "
5732 "automatic storage is not a constant expression", t);
5733 return false;
5734 }
5735#endif
2055d27a 5736 return RECUR (t, any);
09b42213 5737
20b34a56 5738 case REALPART_EXPR:
5739 case IMAGPART_EXPR:
09b42213 5740 case COMPONENT_REF:
5741 case BIT_FIELD_REF:
5742 case ARROW_EXPR:
5743 case OFFSET_REF:
5744 /* -- a class member access unless its postfix-expression is
5745 of literal type or of pointer to literal type. */
5746 /* This test would be redundant, as it follows from the
5747 postfix-expression being a potential constant expression. */
eade0940 5748 if (type_unknown_p (t))
5749 return true;
2055d27a 5750 return RECUR (TREE_OPERAND (t, 0), want_rval);
09b42213 5751
5752 case EXPR_PACK_EXPANSION:
2055d27a 5753 return RECUR (PACK_EXPANSION_PATTERN (t), want_rval);
09b42213 5754
5755 case INDIRECT_REF:
5756 {
5757 tree x = TREE_OPERAND (t, 0);
5758 STRIP_NOPS (x);
997bbf70 5759 if (is_this_parameter (x) && !is_capture_proxy (x))
09b42213 5760 {
b7e4a558 5761 if (!var_in_maybe_constexpr_fn (x))
09b42213 5762 {
5763 if (flags & tf_error)
d6a08f5c 5764 error_at (loc, "use of %<this%> in a constant expression");
09b42213 5765 return false;
5766 }
09b42213 5767 return true;
5768 }
2055d27a 5769 return RECUR (x, rval);
09b42213 5770 }
5771
9c96033c 5772 case STATEMENT_LIST:
5773 {
5774 tree_stmt_iterator i;
5775 for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
5776 {
2055d27a 5777 if (!RECUR (tsi_stmt (i), any))
9c96033c 5778 return false;
5779 }
5780 return true;
5781 }
5782 break;
5783
5784 case MODIFY_EXPR:
5785 if (cxx_dialect < cxx14)
5786 goto fail;
2055d27a 5787 if (!RECUR (TREE_OPERAND (t, 0), any))
9c96033c 5788 return false;
2055d27a 5789 if (!RECUR (TREE_OPERAND (t, 1), rval))
9c96033c 5790 return false;
5791 return true;
5792
5793 case MODOP_EXPR:
5794 if (cxx_dialect < cxx14)
5795 goto fail;
2055d27a 5796 if (!RECUR (TREE_OPERAND (t, 0), rval))
9c96033c 5797 return false;
2055d27a 5798 if (!RECUR (TREE_OPERAND (t, 2), rval))
9c96033c 5799 return false;
5800 return true;
5801
9c96033c 5802 case DO_STMT:
2055d27a 5803 if (!RECUR (DO_COND (t), rval))
9c96033c 5804 return false;
2055d27a 5805 if (!RECUR (DO_BODY (t), any))
9c96033c 5806 return false;
32fee334 5807 if (breaks (jump_target) || continues (jump_target))
5808 *jump_target = NULL_TREE;
9c96033c 5809 return true;
5810
5811 case FOR_STMT:
2055d27a 5812 if (!RECUR (FOR_INIT_STMT (t), any))
9c96033c 5813 return false;
2055d27a 5814 if (!RECUR (FOR_COND (t), rval))
9c96033c 5815 return false;
2055d27a 5816 if (!RECUR (FOR_EXPR (t), any))
9c96033c 5817 return false;
2055d27a 5818 if (!RECUR (FOR_BODY (t), any))
9c96033c 5819 return false;
32fee334 5820 if (breaks (jump_target) || continues (jump_target))
5821 *jump_target = NULL_TREE;
9c96033c 5822 return true;
5823
33603066 5824 case RANGE_FOR_STMT:
f4416678 5825 if (!RECUR (RANGE_FOR_INIT_STMT (t), any))
5826 return false;
33603066 5827 if (!RECUR (RANGE_FOR_EXPR (t), any))
5828 return false;
5829 if (!RECUR (RANGE_FOR_BODY (t), any))
5830 return false;
32fee334 5831 if (breaks (jump_target) || continues (jump_target))
5832 *jump_target = NULL_TREE;
33603066 5833 return true;
5834
9c96033c 5835 case WHILE_STMT:
2055d27a 5836 if (!RECUR (WHILE_COND (t), rval))
9c96033c 5837 return false;
2055d27a 5838 if (!RECUR (WHILE_BODY (t), any))
9c96033c 5839 return false;
32fee334 5840 if (breaks (jump_target) || continues (jump_target))
5841 *jump_target = NULL_TREE;
9c96033c 5842 return true;
5843
5844 case SWITCH_STMT:
2055d27a 5845 if (!RECUR (SWITCH_STMT_COND (t), rval))
9c96033c 5846 return false;
748c426a 5847 /* FIXME we don't check SWITCH_STMT_BODY currently, because even
5848 unreachable labels would be checked. */
9c96033c 5849 return true;
5850
da7981e0 5851 case STMT_EXPR:
2055d27a 5852 return RECUR (STMT_EXPR_STMT (t), rval);
da7981e0 5853
09b42213 5854 case LAMBDA_EXPR:
27db1f50 5855 if (cxx_dialect >= cxx17)
5856 /* In C++17 lambdas can be constexpr, don't give up yet. */
5857 return true;
5858 else if (flags & tf_error)
5859 error_at (loc, "lambda-expression is not a constant expression "
5860 "before C++17");
5861 return false;
5862
09b42213 5863 case DYNAMIC_CAST_EXPR:
5864 case PSEUDO_DTOR_EXPR:
09b42213 5865 case NEW_EXPR:
5866 case VEC_NEW_EXPR:
5867 case DELETE_EXPR:
5868 case VEC_DELETE_EXPR:
5869 case THROW_EXPR:
d6a08f5c 5870 case OMP_PARALLEL:
5871 case OMP_TASK:
5872 case OMP_FOR:
83728168 5873 case OMP_SIMD:
d6a08f5c 5874 case OMP_DISTRIBUTE:
5875 case OMP_TASKLOOP:
5876 case OMP_TEAMS:
5877 case OMP_TARGET_DATA:
5878 case OMP_TARGET:
5879 case OMP_SECTIONS:
5880 case OMP_ORDERED:
5881 case OMP_CRITICAL:
5882 case OMP_SINGLE:
5883 case OMP_SECTION:
5884 case OMP_MASTER:
5885 case OMP_TASKGROUP:
5886 case OMP_TARGET_UPDATE:
5887 case OMP_TARGET_ENTER_DATA:
5888 case OMP_TARGET_EXIT_DATA:
09b42213 5889 case OMP_ATOMIC:
5890 case OMP_ATOMIC_READ:
5891 case OMP_ATOMIC_CAPTURE_OLD:
5892 case OMP_ATOMIC_CAPTURE_NEW:
d6a08f5c 5893 case OACC_PARALLEL:
5894 case OACC_KERNELS:
5895 case OACC_DATA:
5896 case OACC_HOST_DATA:
5897 case OACC_LOOP:
5898 case OACC_CACHE:
5899 case OACC_DECLARE:
5900 case OACC_ENTER_DATA:
5901 case OACC_EXIT_DATA:
5902 case OACC_UPDATE:
09b42213 5903 /* GCC internal stuff. */
5904 case VA_ARG_EXPR:
09b42213 5905 case TRANSACTION_EXPR:
9c96033c 5906 case ASM_EXPR:
9abecca2 5907 case AT_ENCODE_EXPR:
9c96033c 5908 fail:
09b42213 5909 if (flags & tf_error)
d6a08f5c 5910 error_at (loc, "expression %qE is not a constant expression", t);
09b42213 5911 return false;
5912
bb6e576c 5913 case OBJ_TYPE_REF:
5914 if (cxx_dialect >= cxx2a)
5915 /* In C++2a virtual calls can be constexpr, don't give up yet. */
5916 return true;
5917 else if (flags & tf_error)
5918 error_at (loc, "virtual functions cannot be constexpr before C++2a");
5919 return false;
5920
09b42213 5921 case TYPEID_EXPR:
5922 /* -- a typeid expression whose operand is of polymorphic
5923 class type; */
5924 {
5925 tree e = TREE_OPERAND (t, 0);
5926 if (!TYPE_P (e) && !type_dependent_expression_p (e)
5927 && TYPE_POLYMORPHIC_P (TREE_TYPE (e)))
5928 {
5929 if (flags & tf_error)
d6a08f5c 5930 error_at (loc, "typeid-expression is not a constant expression "
5931 "because %qE is of polymorphic type", e);
09b42213 5932 return false;
5933 }
5934 return true;
5935 }
5936
57e83b58 5937 case POINTER_DIFF_EXPR:
09b42213 5938 case MINUS_EXPR:
09b42213 5939 want_rval = true;
5940 goto binary;
5941
5942 case LT_EXPR:
5943 case LE_EXPR:
5944 case GT_EXPR:
5945 case GE_EXPR:
5946 case EQ_EXPR:
5947 case NE_EXPR:
09b42213 5948 want_rval = true;
5949 goto binary;
5950
9c96033c 5951 case PREINCREMENT_EXPR:
5952 case POSTINCREMENT_EXPR:
5953 case PREDECREMENT_EXPR:
5954 case POSTDECREMENT_EXPR:
5955 if (cxx_dialect < cxx14)
5956 goto fail;
5957 goto unary;
5958
09b42213 5959 case BIT_NOT_EXPR:
5960 /* A destructor. */
5961 if (TYPE_P (TREE_OPERAND (t, 0)))
5962 return true;
e3533433 5963 /* fall through. */
09b42213 5964
09b42213 5965 case CONJ_EXPR:
5966 case SAVE_EXPR:
5967 case FIX_TRUNC_EXPR:
5968 case FLOAT_EXPR:
5969 case NEGATE_EXPR:
5970 case ABS_EXPR:
1c67942e 5971 case ABSU_EXPR:
09b42213 5972 case TRUTH_NOT_EXPR:
5973 case FIXED_CONVERT_EXPR:
5974 case UNARY_PLUS_EXPR:
6fdf70f5 5975 case UNARY_LEFT_FOLD_EXPR:
5976 case UNARY_RIGHT_FOLD_EXPR:
9c96033c 5977 unary:
2055d27a 5978 return RECUR (TREE_OPERAND (t, 0), rval);
09b42213 5979
5980 case CAST_EXPR:
5981 case CONST_CAST_EXPR:
5982 case STATIC_CAST_EXPR:
5983 case REINTERPRET_CAST_EXPR:
5984 case IMPLICIT_CONV_EXPR:
5985 if (cxx_dialect < cxx11
5986 && !dependent_type_p (TREE_TYPE (t))
5987 && !INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (t)))
5988 /* In C++98, a conversion to non-integral type can't be part of a
5989 constant expression. */
5990 {
5991 if (flags & tf_error)
d6a08f5c 5992 error_at (loc,
5993 "cast to non-integral type %qT in a constant expression",
5994 TREE_TYPE (t));
09b42213 5995 return false;
5996 }
e0ccd480 5997 /* This might be a conversion from a class to a (potentially) literal
5998 type. Let's consider it potentially constant since the conversion
5999 might be a constexpr user-defined conversion. */
6000 else if (cxx_dialect >= cxx11
6001 && (dependent_type_p (TREE_TYPE (t))
6002 || !COMPLETE_TYPE_P (TREE_TYPE (t))
6003 || literal_type_p (TREE_TYPE (t)))
6004 && TREE_OPERAND (t, 0))
6005 {
6006 tree type = TREE_TYPE (TREE_OPERAND (t, 0));
6007 /* If this is a dependent type, it could end up being a class
6008 with conversions. */
6009 if (type == NULL_TREE || WILDCARD_TYPE_P (type))
6010 return true;
6011 /* Or a non-dependent class which has conversions. */
6012 else if (CLASS_TYPE_P (type)
6013 && (TYPE_HAS_CONVERSION (type) || dependent_scope_p (type)))
6014 return true;
6015 }
09b42213 6016
2055d27a 6017 return (RECUR (TREE_OPERAND (t, 0),
90ad495b 6018 !TYPE_REF_P (TREE_TYPE (t))));
09b42213 6019
9c96033c 6020 case BIND_EXPR:
2055d27a 6021 return RECUR (BIND_EXPR_BODY (t), want_rval);
9c96033c 6022
9c96033c 6023 case CLEANUP_POINT_EXPR:
6024 case MUST_NOT_THROW_EXPR:
6025 case TRY_CATCH_EXPR:
7f67d68c 6026 case TRY_BLOCK:
9c96033c 6027 case EH_SPEC_BLOCK:
6028 case EXPR_STMT:
09b42213 6029 case PAREN_EXPR:
6030 case NON_DEPENDENT_EXPR:
6031 /* For convenience. */
d1980671 6032 case LOOP_EXPR:
6033 case EXIT_EXPR:
2055d27a 6034 return RECUR (TREE_OPERAND (t, 0), want_rval);
09b42213 6035
33603066 6036 case DECL_EXPR:
6037 tmp = DECL_EXPR_DECL (t);
6038 if (VAR_P (tmp) && !DECL_ARTIFICIAL (tmp))
6039 {
6040 if (TREE_STATIC (tmp))
6041 {
6042 if (flags & tf_error)
6043 error_at (DECL_SOURCE_LOCATION (tmp), "%qD declared "
8d6486e1 6044 "%<static%> in %<constexpr%> context", tmp);
33603066 6045 return false;
6046 }
6047 else if (CP_DECL_THREAD_LOCAL_P (tmp))
6048 {
6049 if (flags & tf_error)
6050 error_at (DECL_SOURCE_LOCATION (tmp), "%qD declared "
8d6486e1 6051 "%<thread_local%> in %<constexpr%> context", tmp);
33603066 6052 return false;
6053 }
282ea908 6054 else if (!check_for_uninitialized_const_var
6055 (tmp, /*constexpr_context_p=*/true, flags))
6056 return false;
33603066 6057 }
6058 return RECUR (tmp, want_rval);
6059
7f67d68c 6060 case TRY_FINALLY_EXPR:
6061 return (RECUR (TREE_OPERAND (t, 0), want_rval)
6062 && RECUR (TREE_OPERAND (t, 1), any));
6063
09b42213 6064 case SCOPE_REF:
2055d27a 6065 return RECUR (TREE_OPERAND (t, 1), want_rval);
09b42213 6066
6067 case TARGET_EXPR:
07d8961c 6068 if (!TARGET_EXPR_DIRECT_INIT_P (t)
6069 && !literal_type_p (TREE_TYPE (t)))
09b42213 6070 {
6071 if (flags & tf_error)
6072 {
bc35ef65 6073 auto_diagnostic_group d;
d6a08f5c 6074 error_at (loc, "temporary of non-literal type %qT in a "
6075 "constant expression", TREE_TYPE (t));
09b42213 6076 explain_non_literal_class (TREE_TYPE (t));
6077 }
6078 return false;
6079 }
e3533433 6080 /* FALLTHRU */
09b42213 6081 case INIT_EXPR:
2055d27a 6082 return RECUR (TREE_OPERAND (t, 1), rval);
09b42213 6083
6084 case CONSTRUCTOR:
6085 {
6086 vec<constructor_elt, va_gc> *v = CONSTRUCTOR_ELTS (t);
6087 constructor_elt *ce;
6088 for (i = 0; vec_safe_iterate (v, i, &ce); ++i)
2055d27a 6089 if (!RECUR (ce->value, want_rval))
09b42213 6090 return false;
6091 return true;
6092 }
6093
6094 case TREE_LIST:
6095 {
6096 gcc_assert (TREE_PURPOSE (t) == NULL_TREE
6097 || DECL_P (TREE_PURPOSE (t)));
2055d27a 6098 if (!RECUR (TREE_VALUE (t), want_rval))
09b42213 6099 return false;
6100 if (TREE_CHAIN (t) == NULL_TREE)
6101 return true;
2055d27a 6102 return RECUR (TREE_CHAIN (t), want_rval);
09b42213 6103 }
6104
6105 case TRUNC_DIV_EXPR:
6106 case CEIL_DIV_EXPR:
6107 case FLOOR_DIV_EXPR:
6108 case ROUND_DIV_EXPR:
6109 case TRUNC_MOD_EXPR:
6110 case CEIL_MOD_EXPR:
6111 case ROUND_MOD_EXPR:
6112 {
6113 tree denom = TREE_OPERAND (t, 1);
2055d27a 6114 if (!RECUR (denom, rval))
09b42213 6115 return false;
6116 /* We can't call cxx_eval_outermost_constant_expr on an expression
21131a05 6117 that hasn't been through instantiate_non_dependent_expr yet. */
09b42213 6118 if (!processing_template_decl)
6119 denom = cxx_eval_outermost_constant_expr (denom, true);
6120 if (integer_zerop (denom))
6121 {
6122 if (flags & tf_error)
ea034e2c 6123 error ("division by zero is not a constant expression");
09b42213 6124 return false;
6125 }
6126 else
6127 {
6128 want_rval = true;
2055d27a 6129 return RECUR (TREE_OPERAND (t, 0), want_rval);
09b42213 6130 }
6131 }
6132
6133 case COMPOUND_EXPR:
6134 {
6135 /* check_return_expr sometimes wraps a TARGET_EXPR in a
6136 COMPOUND_EXPR; don't get confused. Also handle EMPTY_CLASS_EXPR
6137 introduced by build_call_a. */
6138 tree op0 = TREE_OPERAND (t, 0);
6139 tree op1 = TREE_OPERAND (t, 1);
6140 STRIP_NOPS (op1);
6141 if ((TREE_CODE (op0) == TARGET_EXPR && op1 == TARGET_EXPR_SLOT (op0))
6142 || TREE_CODE (op1) == EMPTY_CLASS_EXPR)
2055d27a 6143 return RECUR (op0, want_rval);
09b42213 6144 else
6145 goto binary;
6146 }
6147
6148 /* If the first operand is the non-short-circuit constant, look at
6149 the second operand; otherwise we only care about the first one for
6150 potentiality. */
6151 case TRUTH_AND_EXPR:
6152 case TRUTH_ANDIF_EXPR:
6153 tmp = boolean_true_node;
6154 goto truth;
6155 case TRUTH_OR_EXPR:
6156 case TRUTH_ORIF_EXPR:
6157 tmp = boolean_false_node;
6158 truth:
6159 {
6160 tree op = TREE_OPERAND (t, 0);
2055d27a 6161 if (!RECUR (op, rval))
09b42213 6162 return false;
6163 if (!processing_template_decl)
6164 op = cxx_eval_outermost_constant_expr (op, true);
6165 if (tree_int_cst_equal (op, tmp))
2055d27a 6166 return RECUR (TREE_OPERAND (t, 1), rval);
09b42213 6167 else
6168 return true;
6169 }
6170
6171 case PLUS_EXPR:
6172 case MULT_EXPR:
6173 case POINTER_PLUS_EXPR:
6174 case RDIV_EXPR:
6175 case EXACT_DIV_EXPR:
6176 case MIN_EXPR:
6177 case MAX_EXPR:
6178 case LSHIFT_EXPR:
6179 case RSHIFT_EXPR:
6180 case LROTATE_EXPR:
6181 case RROTATE_EXPR:
6182 case BIT_IOR_EXPR:
6183 case BIT_XOR_EXPR:
6184 case BIT_AND_EXPR:
6185 case TRUTH_XOR_EXPR:
6186 case UNORDERED_EXPR:
6187 case ORDERED_EXPR:
6188 case UNLT_EXPR:
6189 case UNLE_EXPR:
6190 case UNGT_EXPR:
6191 case UNGE_EXPR:
6192 case UNEQ_EXPR:
6193 case LTGT_EXPR:
6194 case RANGE_EXPR:
6195 case COMPLEX_EXPR:
6196 want_rval = true;
6197 /* Fall through. */
6198 case ARRAY_REF:
6199 case ARRAY_RANGE_REF:
6200 case MEMBER_REF:
6201 case DOTSTAR_EXPR:
f0abe78f 6202 case MEM_REF:
6fdf70f5 6203 case BINARY_LEFT_FOLD_EXPR:
6204 case BINARY_RIGHT_FOLD_EXPR:
09b42213 6205 binary:
6206 for (i = 0; i < 2; ++i)
2055d27a 6207 if (!RECUR (TREE_OPERAND (t, i), want_rval))
09b42213 6208 return false;
6209 return true;
6210
09b42213 6211 case VEC_PERM_EXPR:
6212 for (i = 0; i < 3; ++i)
2055d27a 6213 if (!RECUR (TREE_OPERAND (t, i), true))
09b42213 6214 return false;
6215 return true;
6216
6217 case COND_EXPR:
b0fe8b95 6218 if (COND_EXPR_IS_VEC_DELETE (t))
6219 {
6220 if (flags & tf_error)
d6a08f5c 6221 error_at (loc, "%<delete[]%> is not a constant expression");
b0fe8b95 6222 return false;
6223 }
6224 /* Fall through. */
6225 case IF_STMT:
09b42213 6226 case VEC_COND_EXPR:
6227 /* If the condition is a known constant, we know which of the legs we
6228 care about; otherwise we only require that the condition and
6229 either of the legs be potentially constant. */
6230 tmp = TREE_OPERAND (t, 0);
2055d27a 6231 if (!RECUR (tmp, rval))
09b42213 6232 return false;
6233 if (!processing_template_decl)
6234 tmp = cxx_eval_outermost_constant_expr (tmp, true);
6235 if (integer_zerop (tmp))
2055d27a 6236 return RECUR (TREE_OPERAND (t, 2), want_rval);
09b42213 6237 else if (TREE_CODE (tmp) == INTEGER_CST)
2055d27a 6238 return RECUR (TREE_OPERAND (t, 1), want_rval);
09b42213 6239 for (i = 1; i < 3; ++i)
6240 if (potential_constant_expression_1 (TREE_OPERAND (t, i),
32fee334 6241 want_rval, strict, now,
6242 tf_none, jump_target))
09b42213 6243 return true;
6244 if (flags & tf_error)
d6a08f5c 6245 error_at (loc, "expression %qE is not a constant expression", t);
09b42213 6246 return false;
6247
6248 case VEC_INIT_EXPR:
6249 if (VEC_INIT_EXPR_IS_CONSTEXPR (t))
6250 return true;
6251 if (flags & tf_error)
6252 {
d6a08f5c 6253 error_at (loc, "non-constant array initialization");
09b42213 6254 diagnose_non_constexpr_vec_init (t);
6255 }
6256 return false;
6257
db1ae94f 6258 case TYPE_DECL:
6259 case TAG_DEFN:
6260 /* We can see these in statement-expressions. */
6261 return true;
6262
fd130325 6263 case CLEANUP_STMT:
d2c63826 6264 case EMPTY_CLASS_EXPR:
38ef3642 6265 case PREDICT_EXPR:
d2c63826 6266 return false;
6267
d1980671 6268 case GOTO_EXPR:
6269 {
6270 tree *target = &TREE_OPERAND (t, 0);
d40a1eac 6271 /* Gotos representing break and continue are OK. */
6272 if (breaks (target) || continues (target))
32fee334 6273 {
6274 *jump_target = *target;
6275 return true;
6276 }
d40a1eac 6277 if (flags & tf_error)
d6a08f5c 6278 error_at (loc, "%<goto%> is not a constant expression");
d40a1eac 6279 return false;
d1980671 6280 }
6281
24c6ee98 6282 case ANNOTATE_EXPR:
24c6ee98 6283 return RECUR (TREE_OPERAND (t, 0), rval);
6284
09b42213 6285 default:
6286 if (objc_is_property_ref (t))
6287 return false;
6288
6289 sorry ("unexpected AST of kind %s", get_tree_code_name (TREE_CODE (t)));
d40a1eac 6290 gcc_unreachable ();
09b42213 6291 return false;
6292 }
2055d27a 6293#undef RECUR
09b42213 6294}
6295
32fee334 6296bool
6297potential_constant_expression_1 (tree t, bool want_rval, bool strict, bool now,
6298 tsubst_flags_t flags)
6299{
6300 tree target = NULL_TREE;
6301 return potential_constant_expression_1 (t, want_rval, strict, now,
6302 flags, &target);
6303}
6304
09b42213 6305/* The main entry point to the above. */
6306
6307bool
6308potential_constant_expression (tree t)
6309{
7e1f8be4 6310 return potential_constant_expression_1 (t, false, true, false, tf_none);
09b42213 6311}
6312
6313/* As above, but require a constant rvalue. */
6314
6315bool
6316potential_rvalue_constant_expression (tree t)
6317{
7e1f8be4 6318 return potential_constant_expression_1 (t, true, true, false, tf_none);
09b42213 6319}
6320
6321/* Like above, but complain about non-constant expressions. */
6322
6323bool
6324require_potential_constant_expression (tree t)
6325{
786721dc 6326 return potential_constant_expression_1 (t, false, true, false,
6327 tf_warning_or_error);
09b42213 6328}
6329
6330/* Cross product of the above. */
6331
6332bool
6333require_potential_rvalue_constant_expression (tree t)
6334{
786721dc 6335 return potential_constant_expression_1 (t, true, true, false,
6336 tf_warning_or_error);
6337}
6338
6339/* Like above, but don't consider PARM_DECL a potential_constant_expression. */
6340
6341bool
6342require_rvalue_constant_expression (tree t)
6343{
6344 return potential_constant_expression_1 (t, true, true, true,
6345 tf_warning_or_error);
7e1f8be4 6346}
6347
6348/* Like potential_constant_expression, but don't consider possible constexpr
6349 substitution of the current function. That is, PARM_DECL qualifies under
6350 potential_constant_expression, but not here.
6351
6352 This is basically what you can check when any actual constant values might
6353 be value-dependent. */
6354
6355bool
6356is_constant_expression (tree t)
6357{
6358 return potential_constant_expression_1 (t, false, true, true, tf_none);
6359}
6360
6361/* Like above, but complain about non-constant expressions. */
6362
6363bool
6364require_constant_expression (tree t)
6365{
6366 return potential_constant_expression_1 (t, false, true, true,
6367 tf_warning_or_error);
6368}
6369
6370/* Like is_constant_expression, but allow const variables that are not allowed
6371 under constexpr rules. */
6372
6373bool
6374is_static_init_expression (tree t)
6375{
6376 return potential_constant_expression_1 (t, false, false, true, tf_none);
09b42213 6377}
6378
29cf24ec 6379/* Returns true if T is a potential constant expression that is not
6380 instantiation-dependent, and therefore a candidate for constant folding even
6381 in a template. */
6382
6383bool
7e1f8be4 6384is_nondependent_constant_expression (tree t)
29cf24ec 6385{
6386 return (!type_unknown_p (t)
6387 && !BRACE_ENCLOSED_INITIALIZER_P (t)
7e1f8be4 6388 && is_constant_expression (t)
29cf24ec 6389 && !instantiation_dependent_expression_p (t));
6390}
6391
6392/* Returns true if T is a potential static initializer expression that is not
6393 instantiation-dependent. */
6394
6395bool
7e1f8be4 6396is_nondependent_static_init_expression (tree t)
29cf24ec 6397{
6398 return (!type_unknown_p (t)
6399 && !BRACE_ENCLOSED_INITIALIZER_P (t)
7e1f8be4 6400 && is_static_init_expression (t)
29cf24ec 6401 && !instantiation_dependent_expression_p (t));
6402}
6403
a050099a 6404/* Finalize constexpr processing after parsing. */
6405
6406void
6407fini_constexpr (void)
6408{
6409 /* The contexpr call and fundef copies tables are no longer needed. */
6410 constexpr_call_table = NULL;
6411 fundef_copies_table = NULL;
6412}
6413
09b42213 6414#include "gt-cp-constexpr.h"