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