]> gcc.gnu.org Git - gcc.git/blame - gcc/cp/semantics.c
re PR debug/48163 (ICEs for cris-elf, like gcc.c-torture/compile/calls.c gcc.c-tortur...
[gcc.git] / gcc / cp / semantics.c
CommitLineData
ad321293
MM
1/* Perform the semantic phase of parsing, i.e., the process of
2 building tree structure, checking semantic consistency, and
3 building RTL. These routines are used both during actual parsing
c8094d83 4 and during the instantiation of template functions.
ad321293 5
b2ebd268 6 Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
95cc031f 7 2008, 2009, 2010, 2011 Free Software Foundation, Inc.
ad321293 8 Written by Mark Mitchell (mmitchell@usa.net) based on code found
c8094d83 9 formerly in parse.y and pt.c.
ad321293 10
f5adbb8d 11 This file is part of GCC.
ad321293 12
f5adbb8d 13 GCC is free software; you can redistribute it and/or modify it
ad321293 14 under the terms of the GNU General Public License as published by
e77f031d 15 the Free Software Foundation; either version 3, or (at your option)
ad321293 16 any later version.
c8094d83 17
f5adbb8d 18 GCC is distributed in the hope that it will be useful, but
ad321293
MM
19 WITHOUT ANY WARRANTY; without even the implied warranty of
20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21 General Public License for more details.
c8094d83 22
e77f031d
NC
23You should have received a copy of the GNU General Public License
24along with GCC; see the file COPYING3. If not see
25<http://www.gnu.org/licenses/>. */
ad321293
MM
26
27#include "config.h"
8d052bc7 28#include "system.h"
4977bab6
ZW
29#include "coretypes.h"
30#include "tm.h"
ad321293
MM
31#include "tree.h"
32#include "cp-tree.h"
39dabefd 33#include "c-family/c-common.h"
61d3ce20 34#include "c-family/c-objc.h"
25af8512 35#include "tree-inline.h"
6de9cd9a 36#include "tree-mudflap.h"
12027a89 37#include "toplev.h"
84df082b 38#include "flags.h"
225ff119 39#include "output.h"
ea11ca7e 40#include "timevar.h"
6de9cd9a 41#include "diagnostic.h"
8cd2462c 42#include "cgraph.h"
325c3691 43#include "tree-iterator.h"
3e1f1ba5 44#include "vec.h"
44d10c10 45#include "target.h"
726a989a 46#include "gimple.h"
7a8cba34 47#include "bitmap.h"
ad321293
MM
48
49/* There routines provide a modular interface to perform many parsing
50 operations. They may therefore be used during actual parsing, or
51 during template instantiation, which may be regarded as a
0b4d5576 52 degenerate form of parsing. */
ad321293 53
3a978d72 54static tree maybe_convert_cond (tree);
6de9cd9a 55static tree finalize_nrv_r (tree *, int *, void *);
d5f4eddd 56static tree capture_decltype (tree);
9660afe0 57static tree thisify_lambda_field (tree);
4985cde3 58
558475f0 59
8d241e0b
KL
60/* Deferred Access Checking Overview
61 ---------------------------------
62
63 Most C++ expressions and declarations require access checking
64 to be performed during parsing. However, in several cases,
65 this has to be treated differently.
66
67 For member declarations, access checking has to be deferred
68 until more information about the declaration is known. For
69 example:
70
71 class A {
0cbd7506 72 typedef int X;
8d241e0b 73 public:
0cbd7506 74 X f();
8d241e0b
KL
75 };
76
77 A::X A::f();
78 A::X g();
79
80 When we are parsing the function return type `A::X', we don't
81 really know if this is allowed until we parse the function name.
82
83 Furthermore, some contexts require that access checking is
84 never performed at all. These include class heads, and template
85 instantiations.
86
87 Typical use of access checking functions is described here:
c8094d83 88
8d241e0b
KL
89 1. When we enter a context that requires certain access checking
90 mode, the function `push_deferring_access_checks' is called with
91 DEFERRING argument specifying the desired mode. Access checking
92 may be performed immediately (dk_no_deferred), deferred
93 (dk_deferred), or not performed (dk_no_check).
94
95 2. When a declaration such as a type, or a variable, is encountered,
96 the function `perform_or_defer_access_check' is called. It
d6b418fa 97 maintains a VEC of all deferred checks.
8d241e0b
KL
98
99 3. The global `current_class_type' or `current_function_decl' is then
100 setup by the parser. `enforce_access' relies on these information
101 to check access.
102
103 4. Upon exiting the context mentioned in step 1,
104 `perform_deferred_access_checks' is called to check all declaration
d6b418fa 105 stored in the VEC. `pop_deferring_access_checks' is then
8d241e0b
KL
106 called to restore the previous access checking mode.
107
108 In case of parsing error, we simply call `pop_deferring_access_checks'
109 without `perform_deferred_access_checks'. */
110
d1b38208 111typedef struct GTY(()) deferred_access {
d6b418fa 112 /* A VEC representing name-lookups for which we have deferred
3e1f1ba5
NS
113 checking access controls. We cannot check the accessibility of
114 names used in a decl-specifier-seq until we know what is being
115 declared because code like:
116
c8094d83 117 class A {
0cbd7506
MS
118 class B {};
119 B* f();
3e1f1ba5
NS
120 }
121
122 A::B* A::f() { return 0; }
123
d6b418fa
SM
124 is valid, even though `A::B' is not generally accessible. */
125 VEC (deferred_access_check,gc)* GTY(()) deferred_access_checks;
c8094d83 126
3e1f1ba5
NS
127 /* The current mode of access checks. */
128 enum deferring_kind deferring_access_checks_kind;
c8094d83 129
3e1f1ba5 130} deferred_access;
d4e6fecb
NS
131DEF_VEC_O (deferred_access);
132DEF_VEC_ALLOC_O (deferred_access,gc);
3e1f1ba5 133
cf22909c 134/* Data for deferred access checking. */
d4e6fecb 135static GTY(()) VEC(deferred_access,gc) *deferred_access_stack;
3e1f1ba5 136static GTY(()) unsigned deferred_access_no_check;
cf22909c
KL
137
138/* Save the current deferred access states and start deferred
139 access checking iff DEFER_P is true. */
140
572c2b17
AP
141void
142push_deferring_access_checks (deferring_kind deferring)
cf22909c 143{
78757caa
KL
144 /* For context like template instantiation, access checking
145 disabling applies to all nested context. */
3e1f1ba5
NS
146 if (deferred_access_no_check || deferring == dk_no_check)
147 deferred_access_no_check++;
cf22909c 148 else
3e1f1ba5
NS
149 {
150 deferred_access *ptr;
cf22909c 151
d4e6fecb 152 ptr = VEC_safe_push (deferred_access, gc, deferred_access_stack, NULL);
d6b418fa 153 ptr->deferred_access_checks = NULL;
3e1f1ba5
NS
154 ptr->deferring_access_checks_kind = deferring;
155 }
cf22909c
KL
156}
157
158/* Resume deferring access checks again after we stopped doing
159 this previously. */
160
572c2b17
AP
161void
162resume_deferring_access_checks (void)
cf22909c 163{
3e1f1ba5
NS
164 if (!deferred_access_no_check)
165 VEC_last (deferred_access, deferred_access_stack)
166 ->deferring_access_checks_kind = dk_deferred;
cf22909c
KL
167}
168
169/* Stop deferring access checks. */
170
572c2b17
AP
171void
172stop_deferring_access_checks (void)
cf22909c 173{
3e1f1ba5
NS
174 if (!deferred_access_no_check)
175 VEC_last (deferred_access, deferred_access_stack)
176 ->deferring_access_checks_kind = dk_no_deferred;
cf22909c
KL
177}
178
179/* Discard the current deferred access checks and restore the
180 previous states. */
181
572c2b17
AP
182void
183pop_deferring_access_checks (void)
cf22909c 184{
3e1f1ba5
NS
185 if (deferred_access_no_check)
186 deferred_access_no_check--;
187 else
188 VEC_pop (deferred_access, deferred_access_stack);
cf22909c
KL
189}
190
c8094d83
MS
191/* Returns a TREE_LIST representing the deferred checks.
192 The TREE_PURPOSE of each node is the type through which the
cf22909c
KL
193 access occurred; the TREE_VALUE is the declaration named.
194 */
195
d6b418fa 196VEC (deferred_access_check,gc)*
572c2b17 197get_deferred_access_checks (void)
cf22909c 198{
3e1f1ba5
NS
199 if (deferred_access_no_check)
200 return NULL;
201 else
202 return (VEC_last (deferred_access, deferred_access_stack)
203 ->deferred_access_checks);
cf22909c
KL
204}
205
206/* Take current deferred checks and combine with the
207 previous states if we also defer checks previously.
208 Otherwise perform checks now. */
209
572c2b17
AP
210void
211pop_to_parent_deferring_access_checks (void)
cf22909c 212{
3e1f1ba5
NS
213 if (deferred_access_no_check)
214 deferred_access_no_check--;
215 else
216 {
d6b418fa 217 VEC (deferred_access_check,gc) *checks;
3e1f1ba5
NS
218 deferred_access *ptr;
219
220 checks = (VEC_last (deferred_access, deferred_access_stack)
221 ->deferred_access_checks);
222
223 VEC_pop (deferred_access, deferred_access_stack);
224 ptr = VEC_last (deferred_access, deferred_access_stack);
225 if (ptr->deferring_access_checks_kind == dk_no_deferred)
226 {
227 /* Check access. */
d6b418fa 228 perform_access_checks (checks);
3e1f1ba5
NS
229 }
230 else
231 {
232 /* Merge with parent. */
d6b418fa
SM
233 int i, j;
234 deferred_access_check *chk, *probe;
c8094d83 235
ac47786e 236 FOR_EACH_VEC_ELT (deferred_access_check, checks, i, chk)
3e1f1ba5 237 {
ac47786e
NF
238 FOR_EACH_VEC_ELT (deferred_access_check,
239 ptr->deferred_access_checks, j, probe)
d6b418fa
SM
240 {
241 if (probe->binfo == chk->binfo &&
242 probe->decl == chk->decl &&
243 probe->diag_decl == chk->diag_decl)
244 goto found;
245 }
3e1f1ba5 246 /* Insert into parent's checks. */
d6b418fa
SM
247 VEC_safe_push (deferred_access_check, gc,
248 ptr->deferred_access_checks, chk);
3e1f1ba5
NS
249 found:;
250 }
251 }
252 }
cf22909c
KL
253}
254
6b648482
MM
255/* Perform the access checks in CHECKS. The TREE_PURPOSE of each node
256 is the BINFO indicating the qualifying scope used to access the
257 DECL node stored in the TREE_VALUE of the node. */
258
259void
d6b418fa 260perform_access_checks (VEC (deferred_access_check,gc)* checks)
6b648482 261{
d6b418fa
SM
262 int i;
263 deferred_access_check *chk;
264
265 if (!checks)
266 return;
267
ac47786e 268 FOR_EACH_VEC_ELT (deferred_access_check, checks, i, chk)
d6b418fa 269 enforce_access (chk->binfo, chk->decl, chk->diag_decl);
6b648482
MM
270}
271
25903d03
KL
272/* Perform the deferred access checks.
273
274 After performing the checks, we still have to keep the list
275 `deferred_access_stack->deferred_access_checks' since we may want
276 to check access for them again later in a different context.
277 For example:
278
279 class A {
280 typedef int X;
281 static X a;
282 };
283 A::X A::a, x; // No error for `A::a', error for `x'
284
285 We have to perform deferred access of `A::X', first with `A::a',
286 next with `x'. */
cf22909c 287
572c2b17
AP
288void
289perform_deferred_access_checks (void)
cf22909c 290{
6b648482 291 perform_access_checks (get_deferred_access_checks ());
cf22909c
KL
292}
293
294/* Defer checking the accessibility of DECL, when looked up in
02022f3a 295 BINFO. DIAG_DECL is the declaration to use to print diagnostics. */
cf22909c 296
572c2b17 297void
02022f3a 298perform_or_defer_access_check (tree binfo, tree decl, tree diag_decl)
cf22909c 299{
d6b418fa 300 int i;
3e1f1ba5 301 deferred_access *ptr;
d6b418fa
SM
302 deferred_access_check *chk;
303 deferred_access_check *new_access;
304
cf22909c 305
3e1f1ba5
NS
306 /* Exit if we are in a context that no access checking is performed.
307 */
308 if (deferred_access_no_check)
0f2a66c9 309 return;
c8094d83 310
50bc768d 311 gcc_assert (TREE_CODE (binfo) == TREE_BINFO);
0f2a66c9 312
3e1f1ba5 313 ptr = VEC_last (deferred_access, deferred_access_stack);
c8094d83 314
cf22909c 315 /* If we are not supposed to defer access checks, just check now. */
3e1f1ba5 316 if (ptr->deferring_access_checks_kind == dk_no_deferred)
cf22909c 317 {
02022f3a 318 enforce_access (binfo, decl, diag_decl);
cf22909c
KL
319 return;
320 }
c8094d83 321
cf22909c 322 /* See if we are already going to perform this check. */
ac47786e
NF
323 FOR_EACH_VEC_ELT (deferred_access_check,
324 ptr->deferred_access_checks, i, chk)
d6b418fa
SM
325 {
326 if (chk->decl == decl && chk->binfo == binfo &&
327 chk->diag_decl == diag_decl)
328 {
329 return;
330 }
331 }
cf22909c 332 /* If not, record the check. */
d6b418fa
SM
333 new_access =
334 VEC_safe_push (deferred_access_check, gc,
335 ptr->deferred_access_checks, 0);
336 new_access->binfo = binfo;
337 new_access->decl = decl;
338 new_access->diag_decl = diag_decl;
cf22909c
KL
339}
340
f7d042e2
JM
341/* Used by build_over_call in LOOKUP_SPECULATIVE mode: return whether DECL
342 is accessible in BINFO, and possibly complain if not. If we're not
343 checking access, everything is accessible. */
344
345bool
346speculative_access_check (tree binfo, tree decl, tree diag_decl,
347 bool complain)
348{
349 if (deferred_access_no_check)
350 return true;
351
352 /* If we're checking for implicit delete, we don't want access
353 control errors. */
354 if (!accessible_p (binfo, decl, true))
355 {
356 /* Unless we're under maybe_explain_implicit_delete. */
357 if (complain)
358 enforce_access (binfo, decl, diag_decl);
359 return false;
360 }
361
362 return true;
363}
364
838dfd8a 365/* Returns nonzero if the current statement is a full expression,
f2c5f623
BC
366 i.e. temporaries created during that statement should be destroyed
367 at the end of the statement. */
35b1567d 368
f2c5f623 369int
3a978d72 370stmts_are_full_exprs_p (void)
f2c5f623 371{
ae499cce
MM
372 return current_stmt_tree ()->stmts_are_full_exprs_p;
373}
374
ed3d0b14
ILT
375/* T is a statement. Add it to the statement-tree. This is the C++
376 version. The C/ObjC frontends have a slightly different version of
377 this function. */
378
379tree
380add_stmt (tree t)
381{
382 enum tree_code code = TREE_CODE (t);
383
384 if (EXPR_P (t) && code != LABEL_EXPR)
385 {
386 if (!EXPR_HAS_LOCATION (t))
387 SET_EXPR_LOCATION (t, input_location);
388
389 /* When we expand a statement-tree, we must know whether or not the
390 statements are full-expressions. We record that fact here. */
391 STMT_IS_FULL_EXPR_P (t) = stmts_are_full_exprs_p ();
392 }
393
394 /* Add T to the statement-tree. Non-side-effect statements need to be
395 recorded during statement expressions. */
396 append_to_statement_list_force (t, &cur_stmt_list);
397
398 return t;
399}
400
e8924938 401/* Returns the stmt_tree to which statements are currently being added. */
ae499cce
MM
402
403stmt_tree
3a978d72 404current_stmt_tree (void)
ae499cce 405{
c8094d83
MS
406 return (cfun
407 ? &cfun->language->base.x_stmt_tree
ae499cce 408 : &scope_chain->x_stmt_tree);
f2c5f623 409}
35b1567d 410
543a0daa
RH
411/* If statements are full expressions, wrap STMT in a CLEANUP_POINT_EXPR. */
412
413static tree
414maybe_cleanup_point_expr (tree expr)
415{
416 if (!processing_template_decl && stmts_are_full_exprs_p ())
0ad28dde 417 expr = fold_build_cleanup_point_expr (TREE_TYPE (expr), expr);
543a0daa
RH
418 return expr;
419}
420
0ad28dde 421/* Like maybe_cleanup_point_expr except have the type of the new expression be
22423a1f
KH
422 void so we don't need to create a temporary variable to hold the inner
423 expression. The reason why we do this is because the original type might be
424 an aggregate and we cannot create a temporary variable for that type. */
0ad28dde
AP
425
426static tree
427maybe_cleanup_point_expr_void (tree expr)
428{
429 if (!processing_template_decl && stmts_are_full_exprs_p ())
430 expr = fold_build_cleanup_point_expr (void_type_node, expr);
431 return expr;
432}
433
434
435
543a0daa
RH
436/* Create a declaration statement for the declaration given by the DECL. */
437
438void
350fae66 439add_decl_expr (tree decl)
543a0daa 440{
c2255bc4 441 tree r = build_stmt (input_location, DECL_EXPR, decl);
b187901e
AP
442 if (DECL_INITIAL (decl)
443 || (DECL_SIZE (decl) && TREE_SIDE_EFFECTS (DECL_SIZE (decl))))
0ad28dde 444 r = maybe_cleanup_point_expr_void (r);
543a0daa
RH
445 add_stmt (r);
446}
447
f2c5f623 448/* Finish a scope. */
35b1567d 449
20aff0b3 450tree
325c3691 451do_poplevel (tree stmt_list)
35b1567d 452{
325c3691 453 tree block = NULL;
35b1567d 454
f2c5f623 455 if (stmts_are_full_exprs_p ())
325c3691 456 block = poplevel (kept_level_p (), 1, 0);
f2c5f623 457
325c3691 458 stmt_list = pop_stmt_list (stmt_list);
c8094d83 459
325c3691
RH
460 if (!processing_template_decl)
461 {
c2255bc4 462 stmt_list = c_build_bind_expr (input_location, block, stmt_list);
325c3691 463 /* ??? See c_end_compound_stmt re statement expressions. */
35b1567d
BC
464 }
465
325c3691 466 return stmt_list;
35b1567d
BC
467}
468
c8094d83 469/* Begin a new scope. */
35b1567d 470
325c3691 471static tree
92bc1323 472do_pushlevel (scope_kind sk)
35b1567d 473{
325c3691 474 tree ret = push_stmt_list ();
f2c5f623 475 if (stmts_are_full_exprs_p ())
325c3691
RH
476 begin_scope (sk, NULL);
477 return ret;
478}
5a508662
RH
479
480/* Queue a cleanup. CLEANUP is an expression/statement to be executed
481 when the current scope is exited. EH_ONLY is true when this is not
482 meant to apply to normal control flow transfer. */
483
484void
485push_cleanup (tree decl, tree cleanup, bool eh_only)
486{
c2255bc4 487 tree stmt = build_stmt (input_location, CLEANUP_STMT, NULL, cleanup, decl);
5a508662
RH
488 CLEANUP_EH_ONLY (stmt) = eh_only;
489 add_stmt (stmt);
490 CLEANUP_BODY (stmt) = push_stmt_list ();
491}
325c3691 492
caf2523d
RH
493/* Begin a conditional that might contain a declaration. When generating
494 normal code, we want the declaration to appear before the statement
495 containing the conditional. When generating template code, we want the
350fae66 496 conditional to be rendered as the raw DECL_EXPR. */
325c3691
RH
497
498static void
caf2523d 499begin_cond (tree *cond_p)
325c3691 500{
caf2523d
RH
501 if (processing_template_decl)
502 *cond_p = push_stmt_list ();
503}
504
505/* Finish such a conditional. */
506
507static void
508finish_cond (tree *cond_p, tree expr)
509{
510 if (processing_template_decl)
35b1567d 511 {
caf2523d 512 tree cond = pop_stmt_list (*cond_p);
350fae66 513 if (TREE_CODE (cond) == DECL_EXPR)
caf2523d 514 expr = cond;
5d80a306 515
7b3e2d46 516 if (check_for_bare_parameter_packs (expr))
4439d02f 517 *cond_p = error_mark_node;
35b1567d 518 }
caf2523d 519 *cond_p = expr;
35b1567d
BC
520}
521
325c3691
RH
522/* If *COND_P specifies a conditional with a declaration, transform the
523 loop such that
0cbd7506
MS
524 while (A x = 42) { }
525 for (; A x = 42;) { }
325c3691 526 becomes
0cbd7506
MS
527 while (true) { A x = 42; if (!x) break; }
528 for (;;) { A x = 42; if (!x) break; }
caf2523d
RH
529 The statement list for BODY will be empty if the conditional did
530 not declare anything. */
c8094d83 531
325c3691 532static void
caf2523d 533simplify_loop_decl_cond (tree *cond_p, tree body)
325c3691 534{
caf2523d 535 tree cond, if_stmt;
325c3691 536
caf2523d
RH
537 if (!TREE_SIDE_EFFECTS (body))
538 return;
325c3691 539
caf2523d
RH
540 cond = *cond_p;
541 *cond_p = boolean_true_node;
c8094d83 542
caf2523d 543 if_stmt = begin_if_stmt ();
5ade1ed2 544 cond = cp_build_unary_op (TRUTH_NOT_EXPR, cond, 0, tf_warning_or_error);
caf2523d
RH
545 finish_if_stmt_cond (cond, if_stmt);
546 finish_break_stmt ();
547 finish_then_clause (if_stmt);
548 finish_if_stmt (if_stmt);
549}
325c3691 550
35b1567d
BC
551/* Finish a goto-statement. */
552
3e4d04a1 553tree
3a978d72 554finish_goto_stmt (tree destination)
35b1567d
BC
555{
556 if (TREE_CODE (destination) == IDENTIFIER_NODE)
557 destination = lookup_label (destination);
558
559 /* We warn about unused labels with -Wunused. That means we have to
560 mark the used labels as used. */
561 if (TREE_CODE (destination) == LABEL_DECL)
562 TREE_USED (destination) = 1;
fc2b8477
MM
563 else
564 {
84628aa8 565 destination = mark_rvalue_use (destination);
fc2b8477 566 if (!processing_template_decl)
f5651df1 567 {
f5651df1
JJ
568 destination = cp_convert (ptr_type_node, destination);
569 if (error_operand_p (destination))
570 return NULL_TREE;
571 }
fc2b8477
MM
572 /* We don't inline calls to functions with computed gotos.
573 Those functions are typically up to some funny business,
574 and may be depending on the labels being at particular
575 addresses, or some such. */
576 DECL_UNINLINABLE (current_function_decl) = 1;
577 }
c8094d83 578
35b1567d
BC
579 check_goto (destination);
580
c2255bc4 581 return add_stmt (build_stmt (input_location, GOTO_EXPR, destination));
35b1567d
BC
582}
583
ed5511d9 584/* COND is the condition-expression for an if, while, etc.,
d4033c81
MLI
585 statement. Convert it to a boolean value, if appropriate.
586 In addition, verify sequence points if -Wsequence-point is enabled. */
ed5511d9 587
8ce33230 588static tree
3a978d72 589maybe_convert_cond (tree cond)
ed5511d9
MM
590{
591 /* Empty conditions remain empty. */
592 if (!cond)
593 return NULL_TREE;
594
595 /* Wait until we instantiate templates before doing conversion. */
596 if (processing_template_decl)
597 return cond;
598
d4033c81
MLI
599 if (warn_sequence_point)
600 verify_sequence_points (cond);
601
ed5511d9
MM
602 /* Do the conversion. */
603 cond = convert_from_reference (cond);
fbc8d2d3
ILT
604
605 if (TREE_CODE (cond) == MODIFY_EXPR
606 && !TREE_NO_WARNING (cond)
607 && warn_parentheses)
608 {
609 warning (OPT_Wparentheses,
610 "suggest parentheses around assignment used as truth value");
611 TREE_NO_WARNING (cond) = 1;
612 }
613
ed5511d9
MM
614 return condition_conversion (cond);
615}
616
9bfadf57 617/* Finish an expression-statement, whose EXPRESSION is as indicated. */
a7e4cfa0 618
3e4d04a1 619tree
3a978d72 620finish_expr_stmt (tree expr)
ad321293 621{
3e4d04a1
RH
622 tree r = NULL_TREE;
623
ce4a0391 624 if (expr != NULL_TREE)
ad321293 625 {
a5bcc582 626 if (!processing_template_decl)
3a5b9284
RH
627 {
628 if (warn_sequence_point)
629 verify_sequence_points (expr);
ebeb2c24 630 expr = convert_to_void (expr, ICV_STATEMENT, tf_warning_or_error);
3a5b9284 631 }
47d4c811 632 else if (!type_dependent_expression_p (expr))
ebeb2c24 633 convert_to_void (build_non_dependent_expr (expr), ICV_STATEMENT,
5ade1ed2 634 tf_warning_or_error);
325c3691 635
7b3e2d46 636 if (check_for_bare_parameter_packs (expr))
4439d02f 637 expr = error_mark_node;
5d80a306 638
325c3691 639 /* Simplification of inner statement expressions, compound exprs,
ca5b80f3 640 etc can result in us already having an EXPR_STMT. */
543a0daa
RH
641 if (TREE_CODE (expr) != CLEANUP_POINT_EXPR)
642 {
643 if (TREE_CODE (expr) != EXPR_STMT)
c2255bc4 644 expr = build_stmt (input_location, EXPR_STMT, expr);
0ad28dde 645 expr = maybe_cleanup_point_expr_void (expr);
543a0daa
RH
646 }
647
325c3691 648 r = add_stmt (expr);
35b1567d 649 }
364460b6 650
35b1567d 651 finish_stmt ();
558475f0 652
3e4d04a1 653 return r;
35b1567d
BC
654}
655
35b1567d 656
ad321293
MM
657/* Begin an if-statement. Returns a newly created IF_STMT if
658 appropriate. */
659
660tree
3a978d72 661begin_if_stmt (void)
ad321293 662{
325c3691
RH
663 tree r, scope;
664 scope = do_pushlevel (sk_block);
c2255bc4 665 r = build_stmt (input_location, IF_STMT, NULL_TREE, NULL_TREE, NULL_TREE);
325c3691 666 TREE_CHAIN (r) = scope;
caf2523d 667 begin_cond (&IF_COND (r));
ad321293
MM
668 return r;
669}
670
671/* Process the COND of an if-statement, which may be given by
672 IF_STMT. */
673
c8094d83 674void
3a978d72 675finish_if_stmt_cond (tree cond, tree if_stmt)
ad321293 676{
caf2523d
RH
677 finish_cond (&IF_COND (if_stmt), maybe_convert_cond (cond));
678 add_stmt (if_stmt);
325c3691 679 THEN_CLAUSE (if_stmt) = push_stmt_list ();
ad321293
MM
680}
681
682/* Finish the then-clause of an if-statement, which may be given by
683 IF_STMT. */
684
685tree
3a978d72 686finish_then_clause (tree if_stmt)
ad321293 687{
325c3691 688 THEN_CLAUSE (if_stmt) = pop_stmt_list (THEN_CLAUSE (if_stmt));
35b1567d 689 return if_stmt;
ad321293
MM
690}
691
692/* Begin the else-clause of an if-statement. */
693
325c3691
RH
694void
695begin_else_clause (tree if_stmt)
ad321293 696{
325c3691 697 ELSE_CLAUSE (if_stmt) = push_stmt_list ();
ad321293
MM
698}
699
700/* Finish the else-clause of an if-statement, which may be given by
701 IF_STMT. */
702
703void
3a978d72 704finish_else_clause (tree if_stmt)
ad321293 705{
325c3691 706 ELSE_CLAUSE (if_stmt) = pop_stmt_list (ELSE_CLAUSE (if_stmt));
ad321293
MM
707}
708
dfbb4f34 709/* Finish an if-statement. */
ad321293 710
c8094d83 711void
325c3691 712finish_if_stmt (tree if_stmt)
ad321293 713{
325c3691
RH
714 tree scope = TREE_CHAIN (if_stmt);
715 TREE_CHAIN (if_stmt) = NULL;
716 add_stmt (do_poplevel (scope));
ad321293 717 finish_stmt ();
35b1567d
BC
718}
719
ad321293
MM
720/* Begin a while-statement. Returns a newly created WHILE_STMT if
721 appropriate. */
722
723tree
3a978d72 724begin_while_stmt (void)
ad321293
MM
725{
726 tree r;
c2255bc4 727 r = build_stmt (input_location, WHILE_STMT, NULL_TREE, NULL_TREE);
ae499cce 728 add_stmt (r);
325c3691 729 WHILE_BODY (r) = do_pushlevel (sk_block);
caf2523d 730 begin_cond (&WHILE_COND (r));
ad321293
MM
731 return r;
732}
733
27d26ee7 734/* Process the COND of a while-statement, which may be given by
ad321293
MM
735 WHILE_STMT. */
736
c8094d83 737void
3a978d72 738finish_while_stmt_cond (tree cond, tree while_stmt)
ad321293 739{
caf2523d
RH
740 finish_cond (&WHILE_COND (while_stmt), maybe_convert_cond (cond));
741 simplify_loop_decl_cond (&WHILE_COND (while_stmt), WHILE_BODY (while_stmt));
ad321293
MM
742}
743
744/* Finish a while-statement, which may be given by WHILE_STMT. */
745
c8094d83 746void
3a978d72 747finish_while_stmt (tree while_stmt)
ad321293 748{
325c3691 749 WHILE_BODY (while_stmt) = do_poplevel (WHILE_BODY (while_stmt));
ad321293
MM
750 finish_stmt ();
751}
752
753/* Begin a do-statement. Returns a newly created DO_STMT if
754 appropriate. */
755
756tree
3a978d72 757begin_do_stmt (void)
ad321293 758{
c2255bc4 759 tree r = build_stmt (input_location, DO_STMT, NULL_TREE, NULL_TREE);
ae499cce 760 add_stmt (r);
325c3691 761 DO_BODY (r) = push_stmt_list ();
35b1567d 762 return r;
ad321293
MM
763}
764
765/* Finish the body of a do-statement, which may be given by DO_STMT. */
766
767void
3a978d72 768finish_do_body (tree do_stmt)
ad321293 769{
62e00e94
DM
770 tree body = DO_BODY (do_stmt) = pop_stmt_list (DO_BODY (do_stmt));
771
772 if (TREE_CODE (body) == STATEMENT_LIST && STATEMENT_LIST_TAIL (body))
773 body = STATEMENT_LIST_TAIL (body)->stmt;
774
775 if (IS_EMPTY_STMT (body))
776 warning (OPT_Wempty_body,
777 "suggest explicit braces around empty body in %<do%> statement");
ad321293
MM
778}
779
780/* Finish a do-statement, which may be given by DO_STMT, and whose
781 COND is as indicated. */
782
783void
3a978d72 784finish_do_stmt (tree cond, tree do_stmt)
ad321293 785{
ed5511d9 786 cond = maybe_convert_cond (cond);
35b1567d
BC
787 DO_COND (do_stmt) = cond;
788 finish_stmt ();
789}
ed5511d9 790
ad321293
MM
791/* Finish a return-statement. The EXPRESSION returned, if any, is as
792 indicated. */
793
3e4d04a1 794tree
3a978d72 795finish_return_stmt (tree expr)
ad321293 796{
3e4d04a1 797 tree r;
0c9b182b 798 bool no_warning;
3e4d04a1 799
0c9b182b 800 expr = check_return_expr (expr, &no_warning);
1799e5d5
RH
801
802 if (flag_openmp && !check_omp_return ())
803 return error_mark_node;
35b1567d 804 if (!processing_template_decl)
efee38a9 805 {
d4033c81
MLI
806 if (warn_sequence_point)
807 verify_sequence_points (expr);
808
44d10c10 809 if (DECL_DESTRUCTOR_P (current_function_decl)
c8094d83 810 || (DECL_CONSTRUCTOR_P (current_function_decl)
44d10c10 811 && targetm.cxx.cdtor_returns_this ()))
efee38a9
MM
812 {
813 /* Similarly, all destructors must run destructors for
814 base-classes before returning. So, all returns in a
dfbb4f34 815 destructor get sent to the DTOR_LABEL; finish_function emits
efee38a9 816 code to return a value there. */
44d10c10 817 return finish_goto_stmt (cdtor_label);
efee38a9
MM
818 }
819 }
543a0daa 820
c2255bc4 821 r = build_stmt (input_location, RETURN_EXPR, expr);
0c9b182b 822 TREE_NO_WARNING (r) |= no_warning;
0ad28dde 823 r = maybe_cleanup_point_expr_void (r);
543a0daa 824 r = add_stmt (r);
35b1567d 825 finish_stmt ();
3e4d04a1
RH
826
827 return r;
35b1567d 828}
efee38a9 829
3f43ac31
RRC
830/* Begin the scope of a for-statement or a range-for-statement.
831 Both the returned trees are to be used in a call to
832 begin_for_stmt or begin_range_for_stmt. */
ad321293
MM
833
834tree
3f43ac31
RRC
835begin_for_scope (tree *init)
836{
837 tree scope = NULL_TREE;
838 if (flag_new_for_scope > 0)
839 scope = do_pushlevel (sk_for);
840
841 if (processing_template_decl)
842 *init = push_stmt_list ();
843 else
844 *init = NULL_TREE;
845
846 return scope;
847}
848
849/* Begin a for-statement. Returns a new FOR_STMT.
850 SCOPE and INIT should be the return of begin_for_scope,
851 or both NULL_TREE */
852
853tree
854begin_for_stmt (tree scope, tree init)
ad321293
MM
855{
856 tree r;
857
c2255bc4 858 r = build_stmt (input_location, FOR_STMT, NULL_TREE, NULL_TREE,
0dfdeca6 859 NULL_TREE, NULL_TREE);
325c3691 860
3f43ac31
RRC
861 if (scope == NULL_TREE)
862 {
95cc031f
JJ
863 gcc_assert (!init || !(flag_new_for_scope > 0));
864 if (!init)
865 scope = begin_for_scope (&init);
3f43ac31
RRC
866 }
867 FOR_INIT_STMT (r) = init;
868 TREE_CHAIN (r) = scope;
894ca2c9 869
ad321293
MM
870 return r;
871}
872
873/* Finish the for-init-statement of a for-statement, which may be
874 given by FOR_STMT. */
875
876void
3a978d72 877finish_for_init_stmt (tree for_stmt)
ad321293 878{
894ca2c9
RH
879 if (processing_template_decl)
880 FOR_INIT_STMT (for_stmt) = pop_stmt_list (FOR_INIT_STMT (for_stmt));
325c3691
RH
881 add_stmt (for_stmt);
882 FOR_BODY (for_stmt) = do_pushlevel (sk_block);
caf2523d 883 begin_cond (&FOR_COND (for_stmt));
ad321293
MM
884}
885
886/* Finish the COND of a for-statement, which may be given by
887 FOR_STMT. */
888
889void
3a978d72 890finish_for_cond (tree cond, tree for_stmt)
ad321293 891{
caf2523d
RH
892 finish_cond (&FOR_COND (for_stmt), maybe_convert_cond (cond));
893 simplify_loop_decl_cond (&FOR_COND (for_stmt), FOR_BODY (for_stmt));
ad321293
MM
894}
895
896/* Finish the increment-EXPRESSION in a for-statement, which may be
897 given by FOR_STMT. */
898
899void
3a978d72 900finish_for_expr (tree expr, tree for_stmt)
ad321293 901{
543a0daa
RH
902 if (!expr)
903 return;
6f69173e
MM
904 /* If EXPR is an overloaded function, issue an error; there is no
905 context available to use to perform overload resolution. */
543a0daa 906 if (type_unknown_p (expr))
6f69173e
MM
907 {
908 cxx_incomplete_type_error (expr, TREE_TYPE (expr));
909 expr = error_mark_node;
910 }
bcd46a7c
AP
911 if (!processing_template_decl)
912 {
913 if (warn_sequence_point)
0cbd7506 914 verify_sequence_points (expr);
ebeb2c24 915 expr = convert_to_void (expr, ICV_THIRD_IN_FOR,
5ade1ed2 916 tf_warning_or_error);
bcd46a7c
AP
917 }
918 else if (!type_dependent_expression_p (expr))
ebeb2c24 919 convert_to_void (build_non_dependent_expr (expr), ICV_THIRD_IN_FOR,
5ade1ed2 920 tf_warning_or_error);
0ad28dde 921 expr = maybe_cleanup_point_expr_void (expr);
7b3e2d46 922 if (check_for_bare_parameter_packs (expr))
4439d02f 923 expr = error_mark_node;
35b1567d 924 FOR_EXPR (for_stmt) = expr;
ad321293
MM
925}
926
927/* Finish the body of a for-statement, which may be given by
928 FOR_STMT. The increment-EXPR for the loop must be
f9132eb7
RRC
929 provided.
930 It can also finish RANGE_FOR_STMT. */
ad321293
MM
931
932void
3a978d72 933finish_for_stmt (tree for_stmt)
ad321293 934{
f9132eb7 935 if (TREE_CODE (for_stmt) == RANGE_FOR_STMT)
a8733ebf 936 RANGE_FOR_BODY (for_stmt) = do_poplevel (RANGE_FOR_BODY (for_stmt));
f9132eb7 937 else
a8733ebf 938 FOR_BODY (for_stmt) = do_poplevel (FOR_BODY (for_stmt));
325c3691 939
ad321293 940 /* Pop the scope for the body of the loop. */
a8733ebf 941 if (flag_new_for_scope > 0)
325c3691
RH
942 {
943 tree scope = TREE_CHAIN (for_stmt);
944 TREE_CHAIN (for_stmt) = NULL;
945 add_stmt (do_poplevel (scope));
946 }
947
c8094d83 948 finish_stmt ();
ad321293
MM
949}
950
f9132eb7 951/* Begin a range-for-statement. Returns a new RANGE_FOR_STMT.
3f43ac31
RRC
952 SCOPE and INIT should be the return of begin_for_scope,
953 or both NULL_TREE .
f9132eb7
RRC
954 To finish it call finish_for_stmt(). */
955
956tree
3f43ac31 957begin_range_for_stmt (tree scope, tree init)
f9132eb7
RRC
958{
959 tree r;
a8733ebf 960
f9132eb7
RRC
961 r = build_stmt (input_location, RANGE_FOR_STMT,
962 NULL_TREE, NULL_TREE, NULL_TREE);
a8733ebf 963
3f43ac31
RRC
964 if (scope == NULL_TREE)
965 {
95cc031f
JJ
966 gcc_assert (!init || !(flag_new_for_scope > 0));
967 if (!init)
968 scope = begin_for_scope (&init);
3f43ac31
RRC
969 }
970
971 /* RANGE_FOR_STMTs do not use nor save the init tree, so we
972 pop it now. */
973 if (init)
974 pop_stmt_list (init);
975 TREE_CHAIN (r) = scope;
f9132eb7
RRC
976
977 return r;
978}
979
980/* Finish the head of a range-based for statement, which may
981 be given by RANGE_FOR_STMT. DECL must be the declaration
982 and EXPR must be the loop expression. */
983
984void
985finish_range_for_decl (tree range_for_stmt, tree decl, tree expr)
986{
987 RANGE_FOR_DECL (range_for_stmt) = decl;
988 RANGE_FOR_EXPR (range_for_stmt) = expr;
989 add_stmt (range_for_stmt);
990 RANGE_FOR_BODY (range_for_stmt) = do_pushlevel (sk_block);
991}
992
ad321293
MM
993/* Finish a break-statement. */
994
3e4d04a1 995tree
3a978d72 996finish_break_stmt (void)
ad321293 997{
c2255bc4 998 return add_stmt (build_stmt (input_location, BREAK_STMT));
35b1567d
BC
999}
1000
ad321293
MM
1001/* Finish a continue-statement. */
1002
3e4d04a1 1003tree
3a978d72 1004finish_continue_stmt (void)
ad321293 1005{
c2255bc4 1006 return add_stmt (build_stmt (input_location, CONTINUE_STMT));
ad321293
MM
1007}
1008
35b1567d
BC
1009/* Begin a switch-statement. Returns a new SWITCH_STMT if
1010 appropriate. */
1011
1012tree
3a978d72 1013begin_switch_stmt (void)
35b1567d 1014{
325c3691
RH
1015 tree r, scope;
1016
c2255bc4 1017 r = build_stmt (input_location, SWITCH_STMT, NULL_TREE, NULL_TREE, NULL_TREE);
325c3691
RH
1018
1019 scope = do_pushlevel (sk_block);
1020 TREE_CHAIN (r) = scope;
ebaae582 1021 begin_cond (&SWITCH_STMT_COND (r));
325c3691 1022
527f0080 1023 return r;
ad321293
MM
1024}
1025
527f0080 1026/* Finish the cond of a switch-statement. */
ad321293 1027
527f0080 1028void
3a978d72 1029finish_switch_cond (tree cond, tree switch_stmt)
ad321293 1030{
6f9fdf4d 1031 tree orig_type = NULL;
35b1567d 1032 if (!processing_template_decl)
373eb3b3 1033 {
35b1567d 1034 /* Convert the condition to an integer or enumeration type. */
b746c5dc 1035 cond = build_expr_type_conversion (WANT_INT | WANT_ENUM, cond, true);
35b1567d 1036 if (cond == NULL_TREE)
373eb3b3 1037 {
35b1567d
BC
1038 error ("switch quantity not an integer");
1039 cond = error_mark_node;
1040 }
6f9fdf4d 1041 orig_type = TREE_TYPE (cond);
35b1567d
BC
1042 if (cond != error_mark_node)
1043 {
0a72704b
MM
1044 /* [stmt.switch]
1045
1046 Integral promotions are performed. */
1047 cond = perform_integral_promotions (cond);
543a0daa 1048 cond = maybe_cleanup_point_expr (cond);
373eb3b3 1049 }
ad321293 1050 }
7b3e2d46 1051 if (check_for_bare_parameter_packs (cond))
4439d02f 1052 cond = error_mark_node;
d4033c81
MLI
1053 else if (!processing_template_decl && warn_sequence_point)
1054 verify_sequence_points (cond);
1055
ebaae582
SB
1056 finish_cond (&SWITCH_STMT_COND (switch_stmt), cond);
1057 SWITCH_STMT_TYPE (switch_stmt) = orig_type;
caf2523d 1058 add_stmt (switch_stmt);
56cb9733 1059 push_switch (switch_stmt);
ebaae582 1060 SWITCH_STMT_BODY (switch_stmt) = push_stmt_list ();
ad321293
MM
1061}
1062
1063/* Finish the body of a switch-statement, which may be given by
1064 SWITCH_STMT. The COND to switch on is indicated. */
1065
1066void
3a978d72 1067finish_switch_stmt (tree switch_stmt)
ad321293 1068{
325c3691
RH
1069 tree scope;
1070
ebaae582
SB
1071 SWITCH_STMT_BODY (switch_stmt) =
1072 pop_stmt_list (SWITCH_STMT_BODY (switch_stmt));
c8094d83 1073 pop_switch ();
ad321293 1074 finish_stmt ();
325c3691
RH
1075
1076 scope = TREE_CHAIN (switch_stmt);
1077 TREE_CHAIN (switch_stmt) = NULL;
1078 add_stmt (do_poplevel (scope));
ad321293
MM
1079}
1080
ad321293
MM
1081/* Begin a try-block. Returns a newly-created TRY_BLOCK if
1082 appropriate. */
1083
1084tree
3a978d72 1085begin_try_block (void)
ad321293 1086{
c2255bc4 1087 tree r = build_stmt (input_location, TRY_BLOCK, NULL_TREE, NULL_TREE);
ae499cce 1088 add_stmt (r);
325c3691 1089 TRY_STMTS (r) = push_stmt_list ();
35b1567d 1090 return r;
ad321293
MM
1091}
1092
eaf6fb90
MM
1093/* Likewise, for a function-try-block. The block returned in
1094 *COMPOUND_STMT is an artificial outer scope, containing the
1095 function-try-block. */
0dde4175
JM
1096
1097tree
eaf6fb90 1098begin_function_try_block (tree *compound_stmt)
0dde4175 1099{
eaf6fb90
MM
1100 tree r;
1101 /* This outer scope does not exist in the C++ standard, but we need
1102 a place to put __FUNCTION__ and similar variables. */
1103 *compound_stmt = begin_compound_stmt (0);
1104 r = begin_try_block ();
35b1567d 1105 FN_TRY_BLOCK_P (r) = 1;
35b1567d 1106 return r;
0dde4175
JM
1107}
1108
ad321293
MM
1109/* Finish a try-block, which may be given by TRY_BLOCK. */
1110
1111void
3a978d72 1112finish_try_block (tree try_block)
ad321293 1113{
325c3691
RH
1114 TRY_STMTS (try_block) = pop_stmt_list (TRY_STMTS (try_block));
1115 TRY_HANDLERS (try_block) = push_stmt_list ();
ad321293
MM
1116}
1117
efa8eda3
MM
1118/* Finish the body of a cleanup try-block, which may be given by
1119 TRY_BLOCK. */
1120
62409b39 1121void
3a978d72 1122finish_cleanup_try_block (tree try_block)
62409b39 1123{
325c3691 1124 TRY_STMTS (try_block) = pop_stmt_list (TRY_STMTS (try_block));
62409b39
MM
1125}
1126
f1dedc31
MM
1127/* Finish an implicitly generated try-block, with a cleanup is given
1128 by CLEANUP. */
1129
1130void
3a978d72 1131finish_cleanup (tree cleanup, tree try_block)
f1dedc31 1132{
35b1567d
BC
1133 TRY_HANDLERS (try_block) = cleanup;
1134 CLEANUP_P (try_block) = 1;
f1dedc31
MM
1135}
1136
0dde4175
JM
1137/* Likewise, for a function-try-block. */
1138
1139void
3a978d72 1140finish_function_try_block (tree try_block)
0dde4175 1141{
325c3691
RH
1142 finish_try_block (try_block);
1143 /* FIXME : something queer about CTOR_INITIALIZER somehow following
1144 the try block, but moving it inside. */
b35d4555 1145 in_function_try_handler = 1;
0dde4175
JM
1146}
1147
ad321293
MM
1148/* Finish a handler-sequence for a try-block, which may be given by
1149 TRY_BLOCK. */
1150
1151void
3a978d72 1152finish_handler_sequence (tree try_block)
ad321293 1153{
325c3691 1154 TRY_HANDLERS (try_block) = pop_stmt_list (TRY_HANDLERS (try_block));
35b1567d 1155 check_handlers (TRY_HANDLERS (try_block));
ad321293
MM
1156}
1157
eaf6fb90
MM
1158/* Finish the handler-seq for a function-try-block, given by
1159 TRY_BLOCK. COMPOUND_STMT is the outer block created by
1160 begin_function_try_block. */
0dde4175
JM
1161
1162void
eaf6fb90 1163finish_function_handler_sequence (tree try_block, tree compound_stmt)
0dde4175 1164{
b35d4555 1165 in_function_try_handler = 0;
325c3691 1166 finish_handler_sequence (try_block);
eaf6fb90 1167 finish_compound_stmt (compound_stmt);
35b1567d
BC
1168}
1169
ad321293
MM
1170/* Begin a handler. Returns a HANDLER if appropriate. */
1171
1172tree
3a978d72 1173begin_handler (void)
ad321293
MM
1174{
1175 tree r;
325c3691 1176
c2255bc4 1177 r = build_stmt (input_location, HANDLER, NULL_TREE, NULL_TREE);
ae499cce 1178 add_stmt (r);
325c3691 1179
1a6025b4
JM
1180 /* Create a binding level for the eh_info and the exception object
1181 cleanup. */
325c3691
RH
1182 HANDLER_BODY (r) = do_pushlevel (sk_catch);
1183
ad321293
MM
1184 return r;
1185}
1186
1187/* Finish the handler-parameters for a handler, which may be given by
b35d4555
MM
1188 HANDLER. DECL is the declaration for the catch parameter, or NULL
1189 if this is a `catch (...)' clause. */
ad321293 1190
1a6025b4 1191void
3a978d72 1192finish_handler_parms (tree decl, tree handler)
b35d4555 1193{
1a6025b4 1194 tree type = NULL_TREE;
b35d4555
MM
1195 if (processing_template_decl)
1196 {
1197 if (decl)
1198 {
1199 decl = pushdecl (decl);
1200 decl = push_template_decl (decl);
325c3691 1201 HANDLER_PARMS (handler) = decl;
1a6025b4 1202 type = TREE_TYPE (decl);
b35d4555
MM
1203 }
1204 }
35b1567d 1205 else
1a6025b4 1206 type = expand_start_catch_block (decl);
1a6025b4 1207 HANDLER_TYPE (handler) = type;
b80cfdcd 1208 if (!processing_template_decl && type)
6cad4e17 1209 mark_used (eh_type_info (type));
35b1567d
BC
1210}
1211
1212/* Finish a handler, which may be given by HANDLER. The BLOCKs are
1213 the return value from the matching call to finish_handler_parms. */
1214
1215void
3a978d72 1216finish_handler (tree handler)
35b1567d
BC
1217{
1218 if (!processing_template_decl)
1a6025b4 1219 expand_end_catch_block ();
325c3691 1220 HANDLER_BODY (handler) = do_poplevel (HANDLER_BODY (handler));
35b1567d
BC
1221}
1222
5882f0f3 1223/* Begin a compound statement. FLAGS contains some bits that control the
5995ebfb 1224 behavior and context. If BCS_NO_SCOPE is set, the compound statement
5882f0f3 1225 does not define a scope. If BCS_FN_BODY is set, this is the outermost
c8094d83 1226 block of a function. If BCS_TRY_BLOCK is set, this is the block
5882f0f3
RH
1227 created on behalf of a TRY statement. Returns a token to be passed to
1228 finish_compound_stmt. */
ad321293
MM
1229
1230tree
325c3691 1231begin_compound_stmt (unsigned int flags)
ad321293 1232{
325c3691 1233 tree r;
558475f0 1234
325c3691
RH
1235 if (flags & BCS_NO_SCOPE)
1236 {
1237 r = push_stmt_list ();
1238 STATEMENT_LIST_NO_SCOPE (r) = 1;
1239
1240 /* Normally, we try hard to keep the BLOCK for a statement-expression.
1241 But, if it's a statement-expression with a scopeless block, there's
1242 nothing to keep, and we don't want to accidentally keep a block
c8094d83 1243 *inside* the scopeless block. */
325c3691
RH
1244 keep_next_level (false);
1245 }
f1dedc31 1246 else
325c3691
RH
1247 r = do_pushlevel (flags & BCS_TRY_BLOCK ? sk_try : sk_block);
1248
5882f0f3
RH
1249 /* When processing a template, we need to remember where the braces were,
1250 so that we can set up identical scopes when instantiating the template
1251 later. BIND_EXPR is a handy candidate for this.
1252 Note that do_poplevel won't create a BIND_EXPR itself here (and thus
1253 result in nested BIND_EXPRs), since we don't build BLOCK nodes when
1254 processing templates. */
1255 if (processing_template_decl)
325c3691 1256 {
f293ce4b 1257 r = build3 (BIND_EXPR, NULL, NULL, r, NULL);
5882f0f3
RH
1258 BIND_EXPR_TRY_BLOCK (r) = (flags & BCS_TRY_BLOCK) != 0;
1259 BIND_EXPR_BODY_BLOCK (r) = (flags & BCS_FN_BODY) != 0;
325c3691
RH
1260 TREE_SIDE_EFFECTS (r) = 1;
1261 }
ad321293
MM
1262
1263 return r;
1264}
1265
5882f0f3 1266/* Finish a compound-statement, which is given by STMT. */
ad321293 1267
325c3691
RH
1268void
1269finish_compound_stmt (tree stmt)
ad321293 1270{
5882f0f3 1271 if (TREE_CODE (stmt) == BIND_EXPR)
e02927a1
JM
1272 {
1273 tree body = do_poplevel (BIND_EXPR_BODY (stmt));
1274 /* If the STATEMENT_LIST is empty and this BIND_EXPR isn't special,
1275 discard the BIND_EXPR so it can be merged with the containing
1276 STATEMENT_LIST. */
1277 if (TREE_CODE (body) == STATEMENT_LIST
1278 && STATEMENT_LIST_HEAD (body) == NULL
1279 && !BIND_EXPR_BODY_BLOCK (stmt)
1280 && !BIND_EXPR_TRY_BLOCK (stmt))
1281 stmt = body;
1282 else
1283 BIND_EXPR_BODY (stmt) = body;
1284 }
325c3691
RH
1285 else if (STATEMENT_LIST_NO_SCOPE (stmt))
1286 stmt = pop_stmt_list (stmt);
7a3397c7 1287 else
5f070bc7
ZL
1288 {
1289 /* Destroy any ObjC "super" receivers that may have been
1290 created. */
1291 objc_clear_super_receiver ();
1292
1293 stmt = do_poplevel (stmt);
1294 }
ad321293 1295
325c3691
RH
1296 /* ??? See c_end_compound_stmt wrt statement expressions. */
1297 add_stmt (stmt);
ad321293 1298 finish_stmt ();
ad321293
MM
1299}
1300
6de9cd9a 1301/* Finish an asm-statement, whose components are a STRING, some
1c384bf1
RH
1302 OUTPUT_OPERANDS, some INPUT_OPERANDS, some CLOBBERS and some
1303 LABELS. Also note whether the asm-statement should be
1304 considered volatile. */
7dc5bd62 1305
3e4d04a1 1306tree
6de9cd9a 1307finish_asm_stmt (int volatile_p, tree string, tree output_operands,
1c384bf1 1308 tree input_operands, tree clobbers, tree labels)
35b1567d
BC
1309{
1310 tree r;
abfc8a36 1311 tree t;
5544530a
PB
1312 int ninputs = list_length (input_operands);
1313 int noutputs = list_length (output_operands);
abfc8a36 1314
abfc8a36 1315 if (!processing_template_decl)
40b18c0a 1316 {
74f0c611
RH
1317 const char *constraint;
1318 const char **oconstraints;
1319 bool allows_mem, allows_reg, is_inout;
1320 tree operand;
40b18c0a 1321 int i;
40b18c0a 1322
86b8fed1 1323 oconstraints = XALLOCAVEC (const char *, noutputs);
74f0c611
RH
1324
1325 string = resolve_asm_operand_names (string, output_operands,
1c384bf1 1326 input_operands, labels);
74f0c611
RH
1327
1328 for (i = 0, t = output_operands; t; t = TREE_CHAIN (t), ++i)
40b18c0a 1329 {
74f0c611
RH
1330 operand = TREE_VALUE (t);
1331
1332 /* ??? Really, this should not be here. Users should be using a
1333 proper lvalue, dammit. But there's a long history of using
1334 casts in the output operands. In cases like longlong.h, this
1335 becomes a primitive form of typechecking -- if the cast can be
1336 removed, then the output operand had a type of the proper width;
1337 otherwise we'll get an error. Gross, but ... */
1338 STRIP_NOPS (operand);
1339
03a904b5
JJ
1340 operand = mark_lvalue_use (operand);
1341
5ade1ed2 1342 if (!lvalue_or_else (operand, lv_asm, tf_warning_or_error))
74f0c611
RH
1343 operand = error_mark_node;
1344
3db45ab5 1345 if (operand != error_mark_node
5544530a
PB
1346 && (TREE_READONLY (operand)
1347 || CP_TYPE_CONST_P (TREE_TYPE (operand))
3db45ab5
MS
1348 /* Functions are not modifiable, even though they are
1349 lvalues. */
1350 || TREE_CODE (TREE_TYPE (operand)) == FUNCTION_TYPE
1351 || TREE_CODE (TREE_TYPE (operand)) == METHOD_TYPE
1352 /* If it's an aggregate and any field is const, then it is
1353 effectively const. */
1354 || (CLASS_TYPE_P (TREE_TYPE (operand))
1355 && C_TYPE_FIELDS_READONLY (TREE_TYPE (operand)))))
4816c593 1356 cxx_readonly_error (operand, lv_asm);
5544530a 1357
74f0c611
RH
1358 constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (t)));
1359 oconstraints[i] = constraint;
1360
1361 if (parse_output_constraint (&constraint, i, ninputs, noutputs,
1362 &allows_mem, &allows_reg, &is_inout))
1363 {
1364 /* If the operand is going to end up in memory,
1365 mark it addressable. */
1366 if (!allows_reg && !cxx_mark_addressable (operand))
1367 operand = error_mark_node;
1368 }
1369 else
1370 operand = error_mark_node;
1371
1372 TREE_VALUE (t) = operand;
1373 }
1374
1375 for (i = 0, t = input_operands; t; ++i, t = TREE_CHAIN (t))
1376 {
1377 constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (t)));
c8094d83 1378 operand = decay_conversion (TREE_VALUE (t));
74f0c611 1379
40b18c0a
MM
1380 /* If the type of the operand hasn't been determined (e.g.,
1381 because it involves an overloaded function), then issue
1382 an error message. There's no context available to
1383 resolve the overloading. */
74f0c611 1384 if (TREE_TYPE (operand) == unknown_type_node)
40b18c0a 1385 {
c8094d83 1386 error ("type of asm operand %qE could not be determined",
0cbd7506 1387 TREE_VALUE (t));
74f0c611 1388 operand = error_mark_node;
40b18c0a 1389 }
40b18c0a 1390
74f0c611
RH
1391 if (parse_input_constraint (&constraint, i, ninputs, noutputs, 0,
1392 oconstraints, &allows_mem, &allows_reg))
40b18c0a 1393 {
74f0c611
RH
1394 /* If the operand is going to end up in memory,
1395 mark it addressable. */
b4c33883
AP
1396 if (!allows_reg && allows_mem)
1397 {
1398 /* Strip the nops as we allow this case. FIXME, this really
1399 should be rejected or made deprecated. */
1400 STRIP_NOPS (operand);
1401 if (!cxx_mark_addressable (operand))
1402 operand = error_mark_node;
1403 }
40b18c0a 1404 }
74f0c611
RH
1405 else
1406 operand = error_mark_node;
40b18c0a 1407
74f0c611 1408 TREE_VALUE (t) = operand;
40b18c0a
MM
1409 }
1410 }
abfc8a36 1411
c2255bc4 1412 r = build_stmt (input_location, ASM_EXPR, string,
0dfdeca6 1413 output_operands, input_operands,
1c384bf1 1414 clobbers, labels);
5544530a 1415 ASM_VOLATILE_P (r) = volatile_p || noutputs == 0;
0ad28dde 1416 r = maybe_cleanup_point_expr_void (r);
3e4d04a1 1417 return add_stmt (r);
ad321293 1418}
b4c4a9ec 1419
5bca4e80 1420/* Finish a label with the indicated NAME. Returns the new label. */
f01b0acb 1421
a723baf1 1422tree
3a978d72 1423finish_label_stmt (tree name)
f01b0acb 1424{
5b030314 1425 tree decl = define_label (input_location, name);
417fa55b 1426
5bca4e80 1427 if (decl == error_mark_node)
417fa55b
LM
1428 return error_mark_node;
1429
c2255bc4 1430 add_stmt (build_stmt (input_location, LABEL_EXPR, decl));
5bca4e80
ILT
1431
1432 return decl;
f01b0acb
MM
1433}
1434
acef433b
MM
1435/* Finish a series of declarations for local labels. G++ allows users
1436 to declare "local" labels, i.e., labels with scope. This extension
1437 is useful when writing code involving statement-expressions. */
1438
1439void
3a978d72 1440finish_label_decl (tree name)
acef433b 1441{
a6d76a95
PC
1442 if (!at_function_scope_p ())
1443 {
1444 error ("__label__ declarations are only allowed in function scopes");
1445 return;
1446 }
1447
1448 add_decl_expr (declare_local_label (name));
acef433b
MM
1449}
1450
659e5a7a 1451/* When DECL goes out of scope, make sure that CLEANUP is executed. */
f1dedc31 1452
c8094d83 1453void
3a978d72 1454finish_decl_cleanup (tree decl, tree cleanup)
f1dedc31 1455{
325c3691 1456 push_cleanup (decl, cleanup, false);
35b1567d
BC
1457}
1458
659e5a7a 1459/* If the current scope exits with an exception, run CLEANUP. */
24bef158 1460
659e5a7a 1461void
3a978d72 1462finish_eh_cleanup (tree cleanup)
24bef158 1463{
325c3691 1464 push_cleanup (NULL, cleanup, true);
35b1567d
BC
1465}
1466
2282d28d
MM
1467/* The MEM_INITS is a list of mem-initializers, in reverse of the
1468 order they were written by the user. Each node is as for
1469 emit_mem_initializers. */
bf3428d0
MM
1470
1471void
2282d28d 1472finish_mem_initializers (tree mem_inits)
bf3428d0 1473{
2282d28d
MM
1474 /* Reorder the MEM_INITS so that they are in the order they appeared
1475 in the source program. */
1476 mem_inits = nreverse (mem_inits);
bf3428d0 1477
a0de9d20 1478 if (processing_template_decl)
5d80a306
DG
1479 {
1480 tree mem;
1481
1482 for (mem = mem_inits; mem; mem = TREE_CHAIN (mem))
1483 {
1484 /* If the TREE_PURPOSE is a TYPE_PACK_EXPANSION, skip the
1485 check for bare parameter packs in the TREE_VALUE, because
1486 any parameter packs in the TREE_VALUE have already been
1487 bound as part of the TREE_PURPOSE. See
1488 make_pack_expansion for more information. */
4439d02f 1489 if (TREE_CODE (TREE_PURPOSE (mem)) != TYPE_PACK_EXPANSION
7b3e2d46 1490 && check_for_bare_parameter_packs (TREE_VALUE (mem)))
4439d02f 1491 TREE_VALUE (mem) = error_mark_node;
5d80a306
DG
1492 }
1493
1494 add_stmt (build_min_nt (CTOR_INITIALIZER, mem_inits));
1495 }
cdd2559c 1496 else
2282d28d 1497 emit_mem_initializers (mem_inits);
558475f0
MM
1498}
1499
b4c4a9ec
MM
1500/* Finish a parenthesized expression EXPR. */
1501
1502tree
3a978d72 1503finish_parenthesized_expr (tree expr)
b4c4a9ec 1504{
6615c446 1505 if (EXPR_P (expr))
78ef5b89 1506 /* This inhibits warnings in c_common_truthvalue_conversion. */
31ec7d2f 1507 TREE_NO_WARNING (expr) = 1;
b4c4a9ec 1508
19420d00
NS
1509 if (TREE_CODE (expr) == OFFSET_REF)
1510 /* [expr.unary.op]/3 The qualified id of a pointer-to-member must not be
1511 enclosed in parentheses. */
1512 PTRMEM_OK_P (expr) = 0;
c8094d83 1513
7a8380ae
NS
1514 if (TREE_CODE (expr) == STRING_CST)
1515 PAREN_STRING_LITERAL_P (expr) = 1;
c8094d83 1516
b4c4a9ec
MM
1517 return expr;
1518}
1519
a723baf1
MM
1520/* Finish a reference to a non-static data member (DECL) that is not
1521 preceded by `.' or `->'. */
1522
1523tree
a3f10e50 1524finish_non_static_data_member (tree decl, tree object, tree qualifying_scope)
a723baf1 1525{
50bc768d 1526 gcc_assert (TREE_CODE (decl) == FIELD_DECL);
a723baf1 1527
2defb926 1528 if (!object)
51fc2d02 1529 {
51fc2d02
JM
1530 tree scope = qualifying_scope;
1531 if (scope == NULL_TREE)
1532 scope = context_for_name_lookup (decl);
1533 object = maybe_dummy_object (scope, NULL);
1534 }
1535
1496e7d6
PC
1536 if (object == error_mark_node)
1537 return error_mark_node;
1538
2defb926
JM
1539 /* DR 613: Can use non-static data members without an associated
1540 object in sizeof/decltype/alignof. */
1541 if (is_dummy_object (object) && cp_unevaluated_operand == 0
1542 && (!processing_template_decl || !current_class_ref))
a723baf1 1543 {
c8094d83 1544 if (current_function_decl
a723baf1 1545 && DECL_STATIC_FUNCTION_P (current_function_decl))
dee15844 1546 error ("invalid use of member %q+D in static member function", decl);
a723baf1 1547 else
dee15844 1548 error ("invalid use of non-static data member %q+D", decl);
a723baf1
MM
1549 error ("from this location");
1550
1551 return error_mark_node;
1552 }
d5f4eddd 1553
51fc2d02
JM
1554 if (current_class_ptr)
1555 TREE_USED (current_class_ptr) = 1;
58e1d54c 1556 if (processing_template_decl && !qualifying_scope)
a723baf1 1557 {
a3f10e50 1558 tree type = TREE_TYPE (decl);
a723baf1 1559
a3f10e50
NS
1560 if (TREE_CODE (type) == REFERENCE_TYPE)
1561 type = TREE_TYPE (type);
1562 else
1563 {
f4f206f4 1564 /* Set the cv qualifiers. */
51fc2d02
JM
1565 int quals = (current_class_ref
1566 ? cp_type_quals (TREE_TYPE (current_class_ref))
1567 : TYPE_UNQUALIFIED);
c8094d83 1568
a3f10e50
NS
1569 if (DECL_MUTABLE_P (decl))
1570 quals &= ~TYPE_QUAL_CONST;
9e95d15f 1571
a3f10e50
NS
1572 quals |= cp_type_quals (TREE_TYPE (decl));
1573 type = cp_build_qualified_type (type, quals);
1574 }
c8094d83 1575
44de5aeb 1576 return build_min (COMPONENT_REF, type, object, decl, NULL_TREE);
a3f10e50 1577 }
ab11c13f
JM
1578 /* If PROCESSING_TEMPLATE_DECL is nonzero here, then
1579 QUALIFYING_SCOPE is also non-null. Wrap this in a SCOPE_REF
1580 for now. */
1581 else if (processing_template_decl)
1582 return build_qualified_name (TREE_TYPE (decl),
1583 qualifying_scope,
1584 DECL_NAME (decl),
1585 /*template_p=*/false);
a3f10e50
NS
1586 else
1587 {
1588 tree access_type = TREE_TYPE (object);
9f01ded6 1589
02022f3a
SM
1590 perform_or_defer_access_check (TYPE_BINFO (access_type), decl,
1591 decl);
a723baf1
MM
1592
1593 /* If the data member was named `C::M', convert `*this' to `C'
1594 first. */
1595 if (qualifying_scope)
1596 {
1597 tree binfo = NULL_TREE;
1598 object = build_scoped_ref (object, qualifying_scope,
1599 &binfo);
1600 }
1601
1602 return build_class_member_access_expr (object, decl,
1603 /*access_path=*/NULL_TREE,
5ade1ed2
DG
1604 /*preserve_reference=*/false,
1605 tf_warning_or_error);
a723baf1
MM
1606 }
1607}
1608
aa373032
DS
1609/* If we are currently parsing a template and we encountered a typedef
1610 TYPEDEF_DECL that is being accessed though CONTEXT, this function
1611 adds the typedef to a list tied to the current template.
1612 At tempate instantiatin time, that list is walked and access check
1613 performed for each typedef.
1614 LOCATION is the location of the usage point of TYPEDEF_DECL. */
1615
1616void
1617add_typedef_to_current_template_for_access_check (tree typedef_decl,
1618 tree context,
1619 location_t location)
1620{
1621 tree template_info = NULL;
1622 tree cs = current_scope ();
1623
1624 if (!is_typedef_decl (typedef_decl)
1625 || !context
1626 || !CLASS_TYPE_P (context)
1627 || !cs)
1628 return;
1629
1630 if (CLASS_TYPE_P (cs) || TREE_CODE (cs) == FUNCTION_DECL)
1631 template_info = get_template_info (cs);
1632
1633 if (template_info
1634 && TI_TEMPLATE (template_info)
1635 && !currently_open_class (context))
1636 append_type_to_template_for_access_check (cs, typedef_decl,
1637 context, location);
1638}
1639
ee76b931
MM
1640/* DECL was the declaration to which a qualified-id resolved. Issue
1641 an error message if it is not accessible. If OBJECT_TYPE is
1642 non-NULL, we have just seen `x->' or `x.' and OBJECT_TYPE is the
1643 type of `*x', or `x', respectively. If the DECL was named as
1644 `A::B' then NESTED_NAME_SPECIFIER is `A'. */
1645
1646void
c8094d83
MS
1647check_accessibility_of_qualified_id (tree decl,
1648 tree object_type,
ee76b931
MM
1649 tree nested_name_specifier)
1650{
1651 tree scope;
1652 tree qualifying_type = NULL_TREE;
95b4aca6 1653
d0940d56
DS
1654 /* If we are parsing a template declaration and if decl is a typedef,
1655 add it to a list tied to the template.
1656 At template instantiation time, that list will be walked and
1657 access check performed. */
aa373032
DS
1658 add_typedef_to_current_template_for_access_check (decl,
1659 nested_name_specifier
1660 ? nested_name_specifier
1661 : DECL_CONTEXT (decl),
1662 input_location);
d0940d56 1663
77880ae4 1664 /* If we're not checking, return immediately. */
95b4aca6
NS
1665 if (deferred_access_no_check)
1666 return;
c8094d83 1667
ee76b931
MM
1668 /* Determine the SCOPE of DECL. */
1669 scope = context_for_name_lookup (decl);
1670 /* If the SCOPE is not a type, then DECL is not a member. */
1671 if (!TYPE_P (scope))
1672 return;
1673 /* Compute the scope through which DECL is being accessed. */
c8094d83 1674 if (object_type
ee76b931
MM
1675 /* OBJECT_TYPE might not be a class type; consider:
1676
1677 class A { typedef int I; };
1678 I *p;
1679 p->A::I::~I();
1680
0cbd7506 1681 In this case, we will have "A::I" as the DECL, but "I" as the
ee76b931
MM
1682 OBJECT_TYPE. */
1683 && CLASS_TYPE_P (object_type)
1684 && DERIVED_FROM_P (scope, object_type))
1685 /* If we are processing a `->' or `.' expression, use the type of the
1686 left-hand side. */
1687 qualifying_type = object_type;
1688 else if (nested_name_specifier)
1689 {
1690 /* If the reference is to a non-static member of the
1691 current class, treat it as if it were referenced through
1692 `this'. */
1693 if (DECL_NONSTATIC_MEMBER_P (decl)
1694 && current_class_ptr
1695 && DERIVED_FROM_P (scope, current_class_type))
1696 qualifying_type = current_class_type;
1697 /* Otherwise, use the type indicated by the
1698 nested-name-specifier. */
1699 else
1700 qualifying_type = nested_name_specifier;
1701 }
1702 else
1703 /* Otherwise, the name must be from the current class or one of
1704 its bases. */
1705 qualifying_type = currently_open_derived_class (scope);
1706
fc429748
MM
1707 if (qualifying_type
1708 /* It is possible for qualifying type to be a TEMPLATE_TYPE_PARM
1709 or similar in a default argument value. */
1710 && CLASS_TYPE_P (qualifying_type)
1711 && !dependent_type_p (qualifying_type))
02022f3a
SM
1712 perform_or_defer_access_check (TYPE_BINFO (qualifying_type), decl,
1713 decl);
ee76b931
MM
1714}
1715
1716/* EXPR is the result of a qualified-id. The QUALIFYING_CLASS was the
1717 class named to the left of the "::" operator. DONE is true if this
1718 expression is a complete postfix-expression; it is false if this
1719 expression is followed by '->', '[', '(', etc. ADDRESS_P is true
02ed62dd
MM
1720 iff this expression is the operand of '&'. TEMPLATE_P is true iff
1721 the qualified-id was of the form "A::template B". TEMPLATE_ARG_P
1722 is true iff this qualified name appears as a template argument. */
ee76b931
MM
1723
1724tree
3db45ab5
MS
1725finish_qualified_id_expr (tree qualifying_class,
1726 tree expr,
02ed62dd 1727 bool done,
3db45ab5 1728 bool address_p,
02ed62dd
MM
1729 bool template_p,
1730 bool template_arg_p)
ee76b931 1731{
d4f0f205
MM
1732 gcc_assert (TYPE_P (qualifying_class));
1733
5e08432e
MM
1734 if (error_operand_p (expr))
1735 return error_mark_node;
1736
7eab6e7b 1737 if (DECL_P (expr) || BASELINK_P (expr))
d4f0f205 1738 mark_used (expr);
d4f0f205 1739
02ed62dd
MM
1740 if (template_p)
1741 check_template_keyword (expr);
1742
ee76b931
MM
1743 /* If EXPR occurs as the operand of '&', use special handling that
1744 permits a pointer-to-member. */
1745 if (address_p && done)
1746 {
1747 if (TREE_CODE (expr) == SCOPE_REF)
1748 expr = TREE_OPERAND (expr, 1);
c8094d83 1749 expr = build_offset_ref (qualifying_class, expr,
a5ac359a 1750 /*address_p=*/true);
ee76b931
MM
1751 return expr;
1752 }
1753
02ed62dd
MM
1754 /* Within the scope of a class, turn references to non-static
1755 members into expression of the form "this->...". */
1756 if (template_arg_p)
1757 /* But, within a template argument, we do not want make the
1758 transformation, as there is no "this" pointer. */
1759 ;
1760 else if (TREE_CODE (expr) == FIELD_DECL)
43854f72
SB
1761 {
1762 push_deferring_access_checks (dk_no_check);
2defb926 1763 expr = finish_non_static_data_member (expr, NULL_TREE,
43854f72
SB
1764 qualifying_class);
1765 pop_deferring_access_checks ();
1766 }
ee76b931
MM
1767 else if (BASELINK_P (expr) && !processing_template_decl)
1768 {
38f1276b 1769 tree ob;
ee76b931
MM
1770
1771 /* See if any of the functions are non-static members. */
7e361ae6 1772 /* If so, the expression may be relative to 'this'. */
294e855f 1773 if (!shared_member_p (expr)
38f1276b
JM
1774 && (ob = maybe_dummy_object (qualifying_class, NULL),
1775 !is_dummy_object (ob)))
c8094d83 1776 expr = (build_class_member_access_expr
38f1276b 1777 (ob,
ee76b931
MM
1778 expr,
1779 BASELINK_ACCESS_BINFO (expr),
5ade1ed2
DG
1780 /*preserve_reference=*/false,
1781 tf_warning_or_error));
ee76b931 1782 else if (done)
a5ac359a
MM
1783 /* The expression is a qualified name whose address is not
1784 being taken. */
1785 expr = build_offset_ref (qualifying_class, expr, /*address_p=*/false);
ee76b931
MM
1786 }
1787
1788 return expr;
1789}
1790
b69b1501
MM
1791/* Begin a statement-expression. The value returned must be passed to
1792 finish_stmt_expr. */
b4c4a9ec 1793
c8094d83 1794tree
3a978d72 1795begin_stmt_expr (void)
b4c4a9ec 1796{
325c3691 1797 return push_stmt_list ();
35b1567d
BC
1798}
1799
a5bcc582 1800/* Process the final expression of a statement expression. EXPR can be
85a56c9d
MM
1801 NULL, if the final expression is empty. Return a STATEMENT_LIST
1802 containing all the statements in the statement-expression, or
1803 ERROR_MARK_NODE if there was an error. */
a5bcc582
NS
1804
1805tree
325c3691 1806finish_stmt_expr_expr (tree expr, tree stmt_expr)
a5bcc582 1807{
72e4661a 1808 if (error_operand_p (expr))
76b9a2a1
AP
1809 {
1810 /* The type of the statement-expression is the type of the last
1811 expression. */
1812 TREE_TYPE (stmt_expr) = error_mark_node;
1813 return error_mark_node;
1814 }
c8094d83 1815
85a56c9d 1816 /* If the last statement does not have "void" type, then the value
3db45ab5 1817 of the last statement is the value of the entire expression. */
a5bcc582
NS
1818 if (expr)
1819 {
c6c7698d
JM
1820 tree type = TREE_TYPE (expr);
1821
1822 if (processing_template_decl)
1823 {
c2255bc4 1824 expr = build_stmt (input_location, EXPR_STMT, expr);
c6c7698d
JM
1825 expr = add_stmt (expr);
1826 /* Mark the last statement so that we can recognize it as such at
1827 template-instantiation time. */
1828 EXPR_STMT_STMT_EXPR_RESULT (expr) = 1;
1829 }
1830 else if (VOID_TYPE_P (type))
a5bcc582 1831 {
c6c7698d
JM
1832 /* Just treat this like an ordinary statement. */
1833 expr = finish_expr_stmt (expr);
1834 }
1835 else
1836 {
1837 /* It actually has a value we need to deal with. First, force it
1838 to be an rvalue so that we won't need to build up a copy
1839 constructor call later when we try to assign it to something. */
1840 expr = force_rvalue (expr);
85a56c9d
MM
1841 if (error_operand_p (expr))
1842 return error_mark_node;
c6c7698d
JM
1843
1844 /* Update for array-to-pointer decay. */
2692eb7d 1845 type = TREE_TYPE (expr);
c6c7698d
JM
1846
1847 /* Wrap it in a CLEANUP_POINT_EXPR and add it to the list like a
1848 normal statement, but don't convert to void or actually add
1849 the EXPR_STMT. */
1850 if (TREE_CODE (expr) != CLEANUP_POINT_EXPR)
1851 expr = maybe_cleanup_point_expr (expr);
1852 add_stmt (expr);
85a56c9d 1853 }
c6c7698d 1854
85a56c9d
MM
1855 /* The type of the statement-expression is the type of the last
1856 expression. */
1857 TREE_TYPE (stmt_expr) = type;
a5bcc582 1858 }
c8094d83 1859
85a56c9d 1860 return stmt_expr;
a5bcc582
NS
1861}
1862
303b7406
NS
1863/* Finish a statement-expression. EXPR should be the value returned
1864 by the previous begin_stmt_expr. Returns an expression
1865 representing the statement-expression. */
b4c4a9ec 1866
c8094d83 1867tree
325c3691 1868finish_stmt_expr (tree stmt_expr, bool has_no_scope)
b4c4a9ec 1869{
85a56c9d
MM
1870 tree type;
1871 tree result;
325c3691 1872
85a56c9d 1873 if (error_operand_p (stmt_expr))
d7b5fa31
JJ
1874 {
1875 pop_stmt_list (stmt_expr);
1876 return error_mark_node;
1877 }
325c3691 1878
85a56c9d 1879 gcc_assert (TREE_CODE (stmt_expr) == STATEMENT_LIST);
325c3691 1880
85a56c9d
MM
1881 type = TREE_TYPE (stmt_expr);
1882 result = pop_stmt_list (stmt_expr);
c6c7698d 1883 TREE_TYPE (result) = type;
6f80451c 1884
a5bcc582 1885 if (processing_template_decl)
325c3691
RH
1886 {
1887 result = build_min (STMT_EXPR, type, result);
1888 TREE_SIDE_EFFECTS (result) = 1;
1889 STMT_EXPR_NO_SCOPE (result) = has_no_scope;
1890 }
c6c7698d 1891 else if (CLASS_TYPE_P (type))
a5bcc582 1892 {
c6c7698d
JM
1893 /* Wrap the statement-expression in a TARGET_EXPR so that the
1894 temporary object created by the final expression is destroyed at
1895 the end of the full-expression containing the
1896 statement-expression. */
1897 result = force_target_expr (type, result);
a5bcc582 1898 }
325c3691 1899
b4c4a9ec
MM
1900 return result;
1901}
1902
c2acde1e
JM
1903/* Returns the expression which provides the value of STMT_EXPR. */
1904
1905tree
1906stmt_expr_value_expr (tree stmt_expr)
1907{
1908 tree t = STMT_EXPR_STMT (stmt_expr);
1909
1910 if (TREE_CODE (t) == BIND_EXPR)
1911 t = BIND_EXPR_BODY (t);
1912
9de0e916 1913 if (TREE_CODE (t) == STATEMENT_LIST && STATEMENT_LIST_TAIL (t))
c2acde1e
JM
1914 t = STATEMENT_LIST_TAIL (t)->stmt;
1915
1916 if (TREE_CODE (t) == EXPR_STMT)
1917 t = EXPR_STMT_EXPR (t);
1918
1919 return t;
1920}
1921
9af66ed1
DS
1922/* Return TRUE iff EXPR_STMT is an empty list of
1923 expression statements. */
1924
1925bool
1926empty_expr_stmt_p (tree expr_stmt)
1927{
1928 tree body = NULL_TREE;
1929
489df541
DS
1930 if (expr_stmt == void_zero_node)
1931 return true;
1932
9af66ed1
DS
1933 if (expr_stmt)
1934 {
1935 if (TREE_CODE (expr_stmt) == EXPR_STMT)
1936 body = EXPR_STMT_EXPR (expr_stmt);
1937 else if (TREE_CODE (expr_stmt) == STATEMENT_LIST)
1938 body = expr_stmt;
1939 }
1940
489df541
DS
1941 if (body)
1942 {
1943 if (TREE_CODE (body) == STATEMENT_LIST)
1944 return tsi_end_p (tsi_start (body));
1945 else
1946 return empty_expr_stmt_p (body);
1947 }
9af66ed1
DS
1948 return false;
1949}
1950
b3445994 1951/* Perform Koenig lookup. FN is the postfix-expression representing
fa531100 1952 the function (or functions) to call; ARGS are the arguments to the
f9132eb7
RRC
1953 call; if INCLUDE_STD then the `std' namespace is automatically
1954 considered an associated namespace (used in range-based for loops).
1955 Returns the functions to be considered by overload resolution. */
b3445994
MM
1956
1957tree
f9132eb7 1958perform_koenig_lookup (tree fn, VEC(tree,gc) *args, bool include_std)
b3445994
MM
1959{
1960 tree identifier = NULL_TREE;
1961 tree functions = NULL_TREE;
d095e03c 1962 tree tmpl_args = NULL_TREE;
4e6a9725 1963 bool template_id = false;
d095e03c
JM
1964
1965 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
1966 {
4e6a9725
JM
1967 /* Use a separate flag to handle null args. */
1968 template_id = true;
d095e03c
JM
1969 tmpl_args = TREE_OPERAND (fn, 1);
1970 fn = TREE_OPERAND (fn, 0);
1971 }
b3445994
MM
1972
1973 /* Find the name of the overloaded function. */
1974 if (TREE_CODE (fn) == IDENTIFIER_NODE)
1975 identifier = fn;
1976 else if (is_overloaded_fn (fn))
1977 {
1978 functions = fn;
1979 identifier = DECL_NAME (get_first_fn (functions));
1980 }
1981 else if (DECL_P (fn))
1982 {
1983 functions = fn;
1984 identifier = DECL_NAME (fn);
1985 }
1986
1987 /* A call to a namespace-scope function using an unqualified name.
1988
1989 Do Koenig lookup -- unless any of the arguments are
1990 type-dependent. */
d095e03c
JM
1991 if (!any_type_dependent_arguments_p (args)
1992 && !any_dependent_template_arguments_p (tmpl_args))
b3445994 1993 {
f9132eb7 1994 fn = lookup_arg_dependent (identifier, functions, args, include_std);
b3445994
MM
1995 if (!fn)
1996 /* The unqualified name could not be resolved. */
1997 fn = unqualified_fn_lookup_error (identifier);
1998 }
b3445994 1999
4e6a9725
JM
2000 if (fn && template_id)
2001 fn = build2 (TEMPLATE_ID_EXPR, unknown_type_node, fn, tmpl_args);
d095e03c 2002
b3445994
MM
2003 return fn;
2004}
2005
c166b898
ILT
2006/* Generate an expression for `FN (ARGS)'. This may change the
2007 contents of ARGS.
4ba126e4
MM
2008
2009 If DISALLOW_VIRTUAL is true, the call to FN will be not generated
2010 as a virtual call, even if FN is virtual. (This flag is set when
2011 encountering an expression where the function name is explicitly
2012 qualified. For example a call to `X::f' never generates a virtual
2013 call.)
2014
2015 Returns code for the call. */
b4c4a9ec 2016
c8094d83 2017tree
c166b898
ILT
2018finish_call_expr (tree fn, VEC(tree,gc) **args, bool disallow_virtual,
2019 bool koenig_p, tsubst_flags_t complain)
b4c4a9ec 2020{
d17811fd
MM
2021 tree result;
2022 tree orig_fn;
c166b898 2023 VEC(tree,gc) *orig_args = NULL;
d17811fd 2024
c166b898 2025 if (fn == error_mark_node)
4ba126e4
MM
2026 return error_mark_node;
2027
4860b874 2028 gcc_assert (!TYPE_P (fn));
a759e627 2029
d17811fd 2030 orig_fn = fn;
d17811fd
MM
2031
2032 if (processing_template_decl)
2033 {
1770aeed
DS
2034 /* If the call expression is dependent, build a CALL_EXPR node
2035 with no type; type_dependent_expression_p recognizes
2036 expressions with no type as being dependent. */
d17811fd 2037 if (type_dependent_expression_p (fn)
1770aeed
DS
2038 || any_type_dependent_arguments_p (*args)
2039 /* For a non-static member function, we need to specifically
2040 test the type dependency of the "this" pointer because it
2041 is not included in *ARGS even though it is considered to
2042 be part of the list of arguments. Note that this is
2043 related to CWG issues 515 and 1005. */
2044 || ((TREE_CODE (TREE_TYPE (fn)) == METHOD_TYPE)
2045 && current_class_ref
2046 && type_dependent_expression_p (current_class_ref)))
6d80c4b9 2047 {
c166b898 2048 result = build_nt_call_vec (fn, *args);
5094a795 2049 KOENIG_LOOKUP_P (result) = koenig_p;
be461b8f
JJ
2050 if (cfun)
2051 {
2052 do
2053 {
2054 tree fndecl = OVL_CURRENT (fn);
2055 if (TREE_CODE (fndecl) != FUNCTION_DECL
2056 || !TREE_THIS_VOLATILE (fndecl))
2057 break;
2058 fn = OVL_NEXT (fn);
2059 }
2060 while (fn);
2061 if (!fn)
2062 current_function_returns_abnormally = 1;
2063 }
6d80c4b9
MM
2064 return result;
2065 }
c166b898 2066 orig_args = make_tree_vector_copy (*args);
d17811fd
MM
2067 if (!BASELINK_P (fn)
2068 && TREE_CODE (fn) != PSEUDO_DTOR_EXPR
2069 && TREE_TYPE (fn) != unknown_type_node)
2070 fn = build_non_dependent_expr (fn);
c166b898 2071 make_args_non_dependent (*args);
d17811fd
MM
2072 }
2073
eff3a276
MM
2074 if (is_overloaded_fn (fn))
2075 fn = baselink_for_fns (fn);
a723baf1 2076
d17811fd 2077 result = NULL_TREE;
4ba126e4 2078 if (BASELINK_P (fn))
03d82991 2079 {
4ba126e4
MM
2080 tree object;
2081
2082 /* A call to a member function. From [over.call.func]:
2083
2084 If the keyword this is in scope and refers to the class of
2085 that member function, or a derived class thereof, then the
2086 function call is transformed into a qualified function call
2087 using (*this) as the postfix-expression to the left of the
2088 . operator.... [Otherwise] a contrived object of type T
c8094d83 2089 becomes the implied object argument.
4ba126e4 2090
38f1276b 2091 In this situation:
4ba126e4
MM
2092
2093 struct A { void f(); };
2094 struct B : public A {};
2095 struct C : public A { void g() { B::f(); }};
2096
38f1276b
JM
2097 "the class of that member function" refers to `A'. But 11.2
2098 [class.access.base] says that we need to convert 'this' to B* as
2099 part of the access, so we pass 'B' to maybe_dummy_object. */
b4c4a9ec 2100
38f1276b
JM
2101 object = maybe_dummy_object (BINFO_TYPE (BASELINK_ACCESS_BINFO (fn)),
2102 NULL);
b4c4a9ec 2103
d17811fd
MM
2104 if (processing_template_decl)
2105 {
2106 if (type_dependent_expression_p (object))
c166b898
ILT
2107 {
2108 tree ret = build_nt_call_vec (orig_fn, orig_args);
2109 release_tree_vector (orig_args);
2110 return ret;
2111 }
d17811fd
MM
2112 object = build_non_dependent_expr (object);
2113 }
2114
2115 result = build_new_method_call (object, fn, args, NULL_TREE,
c8094d83 2116 (disallow_virtual
63c9a190 2117 ? LOOKUP_NONVIRTUAL : 0),
5ade1ed2
DG
2118 /*fn_p=*/NULL,
2119 complain);
4ba126e4
MM
2120 }
2121 else if (is_overloaded_fn (fn))
16c35a1f
RH
2122 {
2123 /* If the function is an overloaded builtin, resolve it. */
2124 if (TREE_CODE (fn) == FUNCTION_DECL
58646b77
PB
2125 && (DECL_BUILT_IN_CLASS (fn) == BUILT_IN_NORMAL
2126 || DECL_BUILT_IN_CLASS (fn) == BUILT_IN_MD))
c2255bc4 2127 result = resolve_overloaded_builtin (input_location, fn, *args);
16c35a1f
RH
2128
2129 if (!result)
2130 /* A call to a namespace-scope function. */
5094a795 2131 result = build_new_function_call (fn, args, koenig_p, complain);
16c35a1f 2132 }
a723baf1
MM
2133 else if (TREE_CODE (fn) == PSEUDO_DTOR_EXPR)
2134 {
c166b898 2135 if (!VEC_empty (tree, *args))
a723baf1
MM
2136 error ("arguments to destructor are not allowed");
2137 /* Mark the pseudo-destructor call as having side-effects so
2138 that we do not issue warnings about its use. */
2139 result = build1 (NOP_EXPR,
2140 void_type_node,
2141 TREE_OPERAND (fn, 0));
2142 TREE_SIDE_EFFECTS (result) = 1;
a723baf1 2143 }
4ba126e4 2144 else if (CLASS_TYPE_P (TREE_TYPE (fn)))
d17811fd
MM
2145 /* If the "function" is really an object of class type, it might
2146 have an overloaded `operator ()'. */
c166b898 2147 result = build_op_call (fn, args, complain);
16c35a1f 2148
d17811fd
MM
2149 if (!result)
2150 /* A call where the function is unknown. */
c166b898 2151 result = cp_build_function_call_vec (fn, args, complain);
4ba126e4 2152
bb4586d3 2153 if (processing_template_decl && result != error_mark_node)
6d80c4b9 2154 {
bb4586d3
JM
2155 if (TREE_CODE (result) == INDIRECT_REF)
2156 result = TREE_OPERAND (result, 0);
2157 gcc_assert (TREE_CODE (result) == CALL_EXPR
2158 || TREE_CODE (fn) == PSEUDO_DTOR_EXPR
2159 || errorcount);
c166b898 2160 result = build_call_vec (TREE_TYPE (result), orig_fn, orig_args);
5094a795 2161 KOENIG_LOOKUP_P (result) = koenig_p;
c166b898 2162 release_tree_vector (orig_args);
bb4586d3 2163 result = convert_from_reference (result);
6d80c4b9 2164 }
c166b898 2165
d17811fd 2166 return result;
b4c4a9ec
MM
2167}
2168
2169/* Finish a call to a postfix increment or decrement or EXPR. (Which
2170 is indicated by CODE, which should be POSTINCREMENT_EXPR or
2171 POSTDECREMENT_EXPR.) */
2172
c8094d83 2173tree
3a978d72 2174finish_increment_expr (tree expr, enum tree_code code)
b4c4a9ec 2175{
5ade1ed2 2176 return build_x_unary_op (code, expr, tf_warning_or_error);
b4c4a9ec
MM
2177}
2178
2179/* Finish a use of `this'. Returns an expression for `this'. */
2180
c8094d83 2181tree
3a978d72 2182finish_this_expr (void)
b4c4a9ec
MM
2183{
2184 tree result;
2185
c6be04ad
JM
2186 if (current_class_ptr)
2187 {
2188 tree type = TREE_TYPE (current_class_ref);
2189
2190 /* In a lambda expression, 'this' refers to the captured 'this'. */
2191 if (LAMBDA_TYPE_P (type))
2192 result = lambda_expr_this_capture (CLASSTYPE_LAMBDA_EXPR (type));
2193 else
2194 result = current_class_ptr;
2195
2196 }
b4c4a9ec
MM
2197 else if (current_function_decl
2198 && DECL_STATIC_FUNCTION_P (current_function_decl))
2199 {
9e637a26 2200 error ("%<this%> is unavailable for static member functions");
b4c4a9ec
MM
2201 result = error_mark_node;
2202 }
2203 else
2204 {
2205 if (current_function_decl)
9e637a26 2206 error ("invalid use of %<this%> in non-member function");
b4c4a9ec 2207 else
9e637a26 2208 error ("invalid use of %<this%> at top level");
b4c4a9ec
MM
2209 result = error_mark_node;
2210 }
2211
2212 return result;
2213}
2214
a723baf1
MM
2215/* Finish a pseudo-destructor expression. If SCOPE is NULL, the
2216 expression was of the form `OBJECT.~DESTRUCTOR' where DESTRUCTOR is
2217 the TYPE for the type given. If SCOPE is non-NULL, the expression
2218 was of the form `OBJECT.SCOPE::~DESTRUCTOR'. */
b4c4a9ec 2219
c8094d83 2220tree
3a978d72 2221finish_pseudo_destructor_expr (tree object, tree scope, tree destructor)
b4c4a9ec 2222{
09b1ccd6 2223 if (object == error_mark_node || destructor == error_mark_node)
a723baf1 2224 return error_mark_node;
40242ccf 2225
50bc768d 2226 gcc_assert (TYPE_P (destructor));
b4c4a9ec 2227
a723baf1
MM
2228 if (!processing_template_decl)
2229 {
2230 if (scope == error_mark_node)
2231 {
2232 error ("invalid qualifying scope in pseudo-destructor name");
2233 return error_mark_node;
2234 }
5cf10afb
AP
2235 if (scope && TYPE_P (scope) && !check_dtor_name (scope, destructor))
2236 {
2237 error ("qualified type %qT does not match destructor name ~%qT",
2238 scope, destructor);
2239 return error_mark_node;
2240 }
2241
c8094d83 2242
26bcf8fc
MM
2243 /* [expr.pseudo] says both:
2244
0cbd7506 2245 The type designated by the pseudo-destructor-name shall be
26bcf8fc
MM
2246 the same as the object type.
2247
0cbd7506 2248 and:
26bcf8fc 2249
0cbd7506 2250 The cv-unqualified versions of the object type and of the
26bcf8fc
MM
2251 type designated by the pseudo-destructor-name shall be the
2252 same type.
2253
0cbd7506
MS
2254 We implement the more generous second sentence, since that is
2255 what most other compilers do. */
c8094d83 2256 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (object),
26bcf8fc 2257 destructor))
a723baf1 2258 {
a82e1a7d 2259 error ("%qE is not of type %qT", object, destructor);
a723baf1
MM
2260 return error_mark_node;
2261 }
2262 }
b4c4a9ec 2263
f293ce4b 2264 return build3 (PSEUDO_DTOR_EXPR, void_type_node, object, scope, destructor);
b4c4a9ec
MM
2265}
2266
ce4a0391
MM
2267/* Finish an expression of the form CODE EXPR. */
2268
2269tree
3a978d72 2270finish_unary_op_expr (enum tree_code code, tree expr)
ce4a0391 2271{
5ade1ed2 2272 tree result = build_x_unary_op (code, expr, tf_warning_or_error);
7c355bca
ML
2273 /* Inside a template, build_x_unary_op does not fold the
2274 expression. So check whether the result is folded before
2275 setting TREE_NEGATED_INT. */
2276 if (code == NEGATE_EXPR && TREE_CODE (expr) == INTEGER_CST
88b4335f 2277 && TREE_CODE (result) == INTEGER_CST
8df83eae 2278 && !TYPE_UNSIGNED (TREE_TYPE (result))
88b4335f 2279 && INT_CST_LT (result, integer_zero_node))
6fc98adf
MM
2280 {
2281 /* RESULT may be a cached INTEGER_CST, so we must copy it before
2282 setting TREE_NEGATED_INT. */
2283 result = copy_node (result);
2284 TREE_NEGATED_INT (result) = 1;
2285 }
59c0753d 2286 if (TREE_OVERFLOW_P (result) && !TREE_OVERFLOW_P (expr))
c2255bc4 2287 overflow_warning (input_location, result);
59c0753d 2288
ce4a0391
MM
2289 return result;
2290}
2291
a723baf1 2292/* Finish a compound-literal expression. TYPE is the type to which
09357846 2293 the CONSTRUCTOR in COMPOUND_LITERAL is being cast. */
a723baf1
MM
2294
2295tree
09357846 2296finish_compound_literal (tree type, tree compound_literal)
a723baf1 2297{
326a4d4e
JJ
2298 if (type == error_mark_node)
2299 return error_mark_node;
2300
2b643eda
MM
2301 if (!TYPE_OBJ_P (type))
2302 {
2303 error ("compound literal of non-object type %qT", type);
2304 return error_mark_node;
2305 }
2306
a723baf1 2307 if (processing_template_decl)
a723baf1 2308 {
e92fb501
MM
2309 TREE_TYPE (compound_literal) = type;
2310 /* Mark the expression as a compound literal. */
2311 TREE_HAS_CONSTRUCTOR (compound_literal) = 1;
2312 return compound_literal;
a723baf1
MM
2313 }
2314
df794884 2315 type = complete_type (type);
09357846
JM
2316
2317 if (TYPE_NON_AGGREGATE_CLASS (type))
2318 {
2319 /* Trying to deal with a CONSTRUCTOR instead of a TREE_LIST
2320 everywhere that deals with function arguments would be a pain, so
2321 just wrap it in a TREE_LIST. The parser set a flag so we know
2322 that it came from T{} rather than T({}). */
2323 CONSTRUCTOR_IS_DIRECT_INIT (compound_literal) = 1;
2324 compound_literal = build_tree_list (NULL_TREE, compound_literal);
2325 return build_functional_cast (type, compound_literal, tf_error);
2326 }
2327
23bee8f4
JJ
2328 if (TREE_CODE (type) == ARRAY_TYPE
2329 && check_array_initializer (NULL_TREE, type, compound_literal))
2330 return error_mark_node;
df794884
JM
2331 compound_literal = reshape_init (type, compound_literal);
2332 if (TREE_CODE (type) == ARRAY_TYPE)
2333 cp_complete_array_type (&type, compound_literal, false);
2334 compound_literal = digest_init (type, compound_literal);
467649eb 2335 return get_target_expr (compound_literal);
a723baf1
MM
2336}
2337
5f261ba9
MM
2338/* Return the declaration for the function-name variable indicated by
2339 ID. */
2340
2341tree
2342finish_fname (tree id)
2343{
2344 tree decl;
c8094d83 2345
3ba09659 2346 decl = fname_decl (input_location, C_RID_CODE (id), id);
be771f25 2347 if (processing_template_decl && current_function_decl)
10b1d5e7 2348 decl = DECL_NAME (decl);
5f261ba9
MM
2349 return decl;
2350}
2351
8014a339 2352/* Finish a translation unit. */
ce4a0391 2353
c8094d83 2354void
3a978d72 2355finish_translation_unit (void)
ce4a0391
MM
2356{
2357 /* In case there were missing closebraces,
2358 get us back to the global binding level. */
273a708f 2359 pop_everything ();
ce4a0391
MM
2360 while (current_namespace != global_namespace)
2361 pop_namespace ();
0ba8a114 2362
c6002625 2363 /* Do file scope __FUNCTION__ et al. */
0ba8a114 2364 finish_fname_decls ();
ce4a0391
MM
2365}
2366
b4c4a9ec
MM
2367/* Finish a template type parameter, specified as AGGR IDENTIFIER.
2368 Returns the parameter. */
2369
c8094d83 2370tree
3a978d72 2371finish_template_type_parm (tree aggr, tree identifier)
b4c4a9ec 2372{
6eabb241 2373 if (aggr != class_type_node)
b4c4a9ec 2374 {
cbe5f3b3 2375 permerror (input_location, "template type parameters must use the keyword %<class%> or %<typename%>");
b4c4a9ec
MM
2376 aggr = class_type_node;
2377 }
2378
2379 return build_tree_list (aggr, identifier);
2380}
2381
2382/* Finish a template template parameter, specified as AGGR IDENTIFIER.
2383 Returns the parameter. */
2384
c8094d83 2385tree
3a978d72 2386finish_template_template_parm (tree aggr, tree identifier)
b4c4a9ec 2387{
c2255bc4
AH
2388 tree decl = build_decl (input_location,
2389 TYPE_DECL, identifier, NULL_TREE);
b4c4a9ec
MM
2390 tree tmpl = build_lang_decl (TEMPLATE_DECL, identifier, NULL_TREE);
2391 DECL_TEMPLATE_PARMS (tmpl) = current_template_parms;
2392 DECL_TEMPLATE_RESULT (tmpl) = decl;
c727aa5e 2393 DECL_ARTIFICIAL (decl) = 1;
b4c4a9ec
MM
2394 end_template_decl ();
2395
50bc768d 2396 gcc_assert (DECL_TEMPLATE_PARMS (tmpl));
b37bf5bd 2397
85d85234
DG
2398 check_default_tmpl_args (decl, DECL_TEMPLATE_PARMS (tmpl),
2399 /*is_primary=*/true, /*is_partial=*/false,
2400 /*is_friend=*/0);
2401
b4c4a9ec
MM
2402 return finish_template_type_parm (aggr, tmpl);
2403}
ce4a0391 2404
8ba658ee
MM
2405/* ARGUMENT is the default-argument value for a template template
2406 parameter. If ARGUMENT is invalid, issue error messages and return
2407 the ERROR_MARK_NODE. Otherwise, ARGUMENT itself is returned. */
2408
2409tree
2410check_template_template_default_arg (tree argument)
2411{
2412 if (TREE_CODE (argument) != TEMPLATE_DECL
2413 && TREE_CODE (argument) != TEMPLATE_TEMPLATE_PARM
8ba658ee
MM
2414 && TREE_CODE (argument) != UNBOUND_CLASS_TEMPLATE)
2415 {
a3a503a5 2416 if (TREE_CODE (argument) == TYPE_DECL)
e488a090
VR
2417 error ("invalid use of type %qT as a default value for a template "
2418 "template-parameter", TREE_TYPE (argument));
a3a503a5
GB
2419 else
2420 error ("invalid default argument for a template template parameter");
8ba658ee
MM
2421 return error_mark_node;
2422 }
2423
2424 return argument;
2425}
2426
ce4a0391
MM
2427/* Begin a class definition, as indicated by T. */
2428
2429tree
b9e75696 2430begin_class_definition (tree t, tree attributes)
ce4a0391 2431{
7d2f0ecd 2432 if (error_operand_p (t) || error_operand_p (TYPE_MAIN_DECL (t)))
7437519c
ZW
2433 return error_mark_node;
2434
522d6614
NS
2435 if (processing_template_parmlist)
2436 {
a82e1a7d 2437 error ("definition of %q#T inside template parameter list", t);
522d6614
NS
2438 return error_mark_node;
2439 }
ebf0bf7f
JJ
2440
2441 /* According to the C++ ABI, decimal classes defined in ISO/IEC TR 24733
2442 are passed the same as decimal scalar types. */
cd924144
JM
2443 if (TREE_CODE (t) == RECORD_TYPE
2444 && !processing_template_decl)
ebf0bf7f 2445 {
cd924144
JM
2446 tree ns = TYPE_CONTEXT (t);
2447 if (ns && TREE_CODE (ns) == NAMESPACE_DECL
2448 && DECL_CONTEXT (ns) == std_node
935c0a5d 2449 && DECL_NAME (ns)
cd924144
JM
2450 && !strcmp (IDENTIFIER_POINTER (DECL_NAME (ns)), "decimal"))
2451 {
2452 const char *n = TYPE_NAME_STRING (t);
2453 if ((strcmp (n, "decimal32") == 0)
2454 || (strcmp (n, "decimal64") == 0)
2455 || (strcmp (n, "decimal128") == 0))
2456 TYPE_TRANSPARENT_AGGR (t) = 1;
2457 }
ebf0bf7f
JJ
2458 }
2459
47ee8904
MM
2460 /* A non-implicit typename comes from code like:
2461
2462 template <typename T> struct A {
0cbd7506 2463 template <typename U> struct A<T>::B ...
47ee8904
MM
2464
2465 This is erroneous. */
2466 else if (TREE_CODE (t) == TYPENAME_TYPE)
2467 {
a82e1a7d 2468 error ("invalid definition of qualified type %qT", t);
47ee8904
MM
2469 t = error_mark_node;
2470 }
2471
9e1e64ec 2472 if (t == error_mark_node || ! MAYBE_CLASS_TYPE_P (t))
ce4a0391 2473 {
9e1e64ec 2474 t = make_class_type (RECORD_TYPE);
bd3d082e 2475 pushtag (make_anon_name (), t, /*tag_scope=*/ts_current);
ce4a0391 2476 }
830fcda8 2477
4c571114 2478 if (TYPE_BEING_DEFINED (t))
ce4a0391 2479 {
9e1e64ec 2480 t = make_class_type (TREE_CODE (t));
bd3d082e 2481 pushtag (TYPE_IDENTIFIER (t), t, /*tag_scope=*/ts_current);
ce4a0391 2482 }
ff350acd 2483 maybe_process_partial_specialization (t);
29370796 2484 pushclass (t);
ce4a0391 2485 TYPE_BEING_DEFINED (t) = 1;
b9e75696
JM
2486
2487 cplus_decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
8943989d 2488 fixup_attribute_variants (t);
b9e75696 2489
c0694c4b
MM
2490 if (flag_pack_struct)
2491 {
2492 tree v;
2493 TYPE_PACKED (t) = 1;
2494 /* Even though the type is being defined for the first time
2495 here, there might have been a forward declaration, so there
2496 might be cv-qualified variants of T. */
2497 for (v = TYPE_NEXT_VARIANT (t); v; v = TYPE_NEXT_VARIANT (v))
2498 TYPE_PACKED (v) = 1;
2499 }
ce4a0391
MM
2500 /* Reset the interface data, at the earliest possible
2501 moment, as it might have been set via a class foo;
2502 before. */
1951a1b6
JM
2503 if (! TYPE_ANONYMOUS_P (t))
2504 {
c533e34d 2505 struct c_fileinfo *finfo = get_fileinfo (input_filename);
5d709b00 2506 CLASSTYPE_INTERFACE_ONLY (t) = finfo->interface_only;
1951a1b6 2507 SET_CLASSTYPE_INTERFACE_UNKNOWN_X
5d709b00 2508 (t, finfo->interface_unknown);
1951a1b6 2509 }
ce4a0391 2510 reset_specialization();
c8094d83 2511
b7975aed
MM
2512 /* Make a declaration for this class in its own scope. */
2513 build_self_reference ();
2514
830fcda8 2515 return t;
ce4a0391
MM
2516}
2517
61a127b3
MM
2518/* Finish the member declaration given by DECL. */
2519
2520void
3a978d72 2521finish_member_declaration (tree decl)
61a127b3
MM
2522{
2523 if (decl == error_mark_node || decl == NULL_TREE)
2524 return;
2525
2526 if (decl == void_type_node)
2527 /* The COMPONENT was a friend, not a member, and so there's
2528 nothing for us to do. */
2529 return;
2530
2531 /* We should see only one DECL at a time. */
910ad8de 2532 gcc_assert (DECL_CHAIN (decl) == NULL_TREE);
61a127b3
MM
2533
2534 /* Set up access control for DECL. */
c8094d83 2535 TREE_PRIVATE (decl)
61a127b3 2536 = (current_access_specifier == access_private_node);
c8094d83 2537 TREE_PROTECTED (decl)
61a127b3
MM
2538 = (current_access_specifier == access_protected_node);
2539 if (TREE_CODE (decl) == TEMPLATE_DECL)
2540 {
17aec3eb
RK
2541 TREE_PRIVATE (DECL_TEMPLATE_RESULT (decl)) = TREE_PRIVATE (decl);
2542 TREE_PROTECTED (DECL_TEMPLATE_RESULT (decl)) = TREE_PROTECTED (decl);
61a127b3
MM
2543 }
2544
2545 /* Mark the DECL as a member of the current class. */
4f1c5b7d 2546 DECL_CONTEXT (decl) = current_class_type;
61a127b3 2547
b1d7b1c0 2548 /* Check for bare parameter packs in the member variable declaration. */
1ad8aeeb 2549 if (TREE_CODE (decl) == FIELD_DECL)
4439d02f 2550 {
7b3e2d46 2551 if (check_for_bare_parameter_packs (TREE_TYPE (decl)))
4439d02f 2552 TREE_TYPE (decl) = error_mark_node;
7b3e2d46 2553 if (check_for_bare_parameter_packs (DECL_ATTRIBUTES (decl)))
4439d02f
DG
2554 DECL_ATTRIBUTES (decl) = NULL_TREE;
2555 }
b1d7b1c0 2556
421844e7
MM
2557 /* [dcl.link]
2558
2559 A C language linkage is ignored for the names of class members
2560 and the member function type of class member functions. */
2561 if (DECL_LANG_SPECIFIC (decl) && DECL_LANGUAGE (decl) == lang_c)
5d2ed28c 2562 SET_DECL_LANGUAGE (decl, lang_cplusplus);
421844e7 2563
61a127b3
MM
2564 /* Put functions on the TYPE_METHODS list and everything else on the
2565 TYPE_FIELDS list. Note that these are built up in reverse order.
2566 We reverse them (to obtain declaration order) in finish_struct. */
c8094d83 2567 if (TREE_CODE (decl) == FUNCTION_DECL
61a127b3
MM
2568 || DECL_FUNCTION_TEMPLATE_P (decl))
2569 {
2570 /* We also need to add this function to the
2571 CLASSTYPE_METHOD_VEC. */
b77fe7b4
NS
2572 if (add_method (current_class_type, decl, NULL_TREE))
2573 {
910ad8de 2574 DECL_CHAIN (decl) = TYPE_METHODS (current_class_type);
b77fe7b4 2575 TYPE_METHODS (current_class_type) = decl;
f139561c 2576
b77fe7b4
NS
2577 maybe_add_class_template_decl_list (current_class_type, decl,
2578 /*friend_p=*/0);
2579 }
61a127b3 2580 }
f139561c 2581 /* Enter the DECL into the scope of the class. */
98ed9dae 2582 else if ((TREE_CODE (decl) == USING_DECL && !DECL_DEPENDENT_P (decl))
399dedb9 2583 || pushdecl_class_level (decl))
61a127b3
MM
2584 {
2585 /* All TYPE_DECLs go at the end of TYPE_FIELDS. Ordinary fields
2586 go at the beginning. The reason is that lookup_field_1
2587 searches the list in order, and we want a field name to
2588 override a type name so that the "struct stat hack" will
2589 work. In particular:
2590
2591 struct S { enum E { }; int E } s;
2592 s.E = 3;
2593
0e339752 2594 is valid. In addition, the FIELD_DECLs must be maintained in
61a127b3
MM
2595 declaration order so that class layout works as expected.
2596 However, we don't need that order until class layout, so we
2597 save a little time by putting FIELD_DECLs on in reverse order
2598 here, and then reversing them in finish_struct_1. (We could
2599 also keep a pointer to the correct insertion points in the
2600 list.) */
2601
2602 if (TREE_CODE (decl) == TYPE_DECL)
c8094d83 2603 TYPE_FIELDS (current_class_type)
61a127b3
MM
2604 = chainon (TYPE_FIELDS (current_class_type), decl);
2605 else
2606 {
910ad8de 2607 DECL_CHAIN (decl) = TYPE_FIELDS (current_class_type);
61a127b3
MM
2608 TYPE_FIELDS (current_class_type) = decl;
2609 }
8f032717 2610
c8094d83 2611 maybe_add_class_template_decl_list (current_class_type, decl,
f139561c 2612 /*friend_p=*/0);
61a127b3 2613 }
5e2f4cd2
MM
2614
2615 if (pch_file)
2616 note_decl_for_pch (decl);
2617}
2618
2619/* DECL has been declared while we are building a PCH file. Perform
2620 actions that we might normally undertake lazily, but which can be
2621 performed now so that they do not have to be performed in
2622 translation units which include the PCH file. */
2623
2624void
2625note_decl_for_pch (tree decl)
2626{
2627 gcc_assert (pch_file);
2628
5e2f4cd2
MM
2629 /* There's a good chance that we'll have to mangle names at some
2630 point, even if only for emission in debugging information. */
ec0897de
JM
2631 if ((TREE_CODE (decl) == VAR_DECL
2632 || TREE_CODE (decl) == FUNCTION_DECL)
2633 && !processing_template_decl)
5e2f4cd2 2634 mangle_decl (decl);
61a127b3
MM
2635}
2636
306ef644 2637/* Finish processing a complete template declaration. The PARMS are
36a117a5
MM
2638 the template parameters. */
2639
2640void
3a978d72 2641finish_template_decl (tree parms)
36a117a5
MM
2642{
2643 if (parms)
2644 end_template_decl ();
2645 else
2646 end_specialization ();
2647}
2648
509fc277 2649/* Finish processing a template-id (which names a type) of the form
36a117a5 2650 NAME < ARGS >. Return the TYPE_DECL for the type named by the
838dfd8a 2651 template-id. If ENTERING_SCOPE is nonzero we are about to enter
36a117a5
MM
2652 the scope of template-id indicated. */
2653
2654tree
3a978d72 2655finish_template_type (tree name, tree args, int entering_scope)
36a117a5
MM
2656{
2657 tree decl;
2658
2659 decl = lookup_template_class (name, args,
42eaed49 2660 NULL_TREE, NULL_TREE, entering_scope,
23fca1f5 2661 tf_warning_or_error | tf_user);
36a117a5
MM
2662 if (decl != error_mark_node)
2663 decl = TYPE_STUB_DECL (decl);
2664
2665 return decl;
2666}
648f19f6 2667
ea6021e8
MM
2668/* Finish processing a BASE_CLASS with the indicated ACCESS_SPECIFIER.
2669 Return a TREE_LIST containing the ACCESS_SPECIFIER and the
2670 BASE_CLASS, or NULL_TREE if an error occurred. The
aba649ba 2671 ACCESS_SPECIFIER is one of
809e3e7f
NS
2672 access_{default,public,protected_private}_node. For a virtual base
2673 we set TREE_TYPE. */
ea6021e8 2674
c8094d83 2675tree
dbbf88d1 2676finish_base_specifier (tree base, tree access, bool virtual_p)
ea6021e8 2677{
ea6021e8
MM
2678 tree result;
2679
dbbf88d1 2680 if (base == error_mark_node)
acb044ee
GDR
2681 {
2682 error ("invalid base-class specification");
2683 result = NULL_TREE;
2684 }
9e1e64ec
PC
2685 else if (! MAYBE_CLASS_TYPE_P (base))
2686 {
2687 error ("%qT is not a class type", base);
2688 result = NULL_TREE;
2689 }
ea6021e8 2690 else
bb92901d 2691 {
dbbf88d1 2692 if (cp_type_quals (base) != 0)
0cbd7506
MS
2693 {
2694 error ("base class %qT has cv qualifiers", base);
2695 base = TYPE_MAIN_VARIANT (base);
2696 }
dbbf88d1 2697 result = build_tree_list (access, base);
809e3e7f
NS
2698 if (virtual_p)
2699 TREE_TYPE (result) = integer_type_node;
bb92901d 2700 }
ea6021e8
MM
2701
2702 return result;
2703}
61a127b3 2704
eff3a276
MM
2705/* If FNS is a member function, a set of member functions, or a
2706 template-id referring to one or more member functions, return a
2707 BASELINK for FNS, incorporating the current access context.
2708 Otherwise, return FNS unchanged. */
2709
2710tree
2711baselink_for_fns (tree fns)
2712{
2713 tree fn;
2714 tree cl;
2715
2716 if (BASELINK_P (fns)
eff3a276
MM
2717 || error_operand_p (fns))
2718 return fns;
2719
2720 fn = fns;
2721 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
2722 fn = TREE_OPERAND (fn, 0);
2723 fn = get_first_fn (fn);
2724 if (!DECL_FUNCTION_MEMBER_P (fn))
2725 return fns;
2726
2727 cl = currently_open_derived_class (DECL_CONTEXT (fn));
2728 if (!cl)
2729 cl = DECL_CONTEXT (fn);
2730 cl = TYPE_BINFO (cl);
5a40306b 2731 return build_baselink (cl, cl, fns, /*optype=*/NULL_TREE);
eff3a276
MM
2732}
2733
d5f4eddd
JM
2734/* Returns true iff DECL is an automatic variable from a function outside
2735 the current one. */
2736
2737static bool
2738outer_automatic_var_p (tree decl)
2739{
2740 return ((TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL)
2741 && DECL_FUNCTION_SCOPE_P (decl)
2742 && !TREE_STATIC (decl)
2743 && DECL_CONTEXT (decl) != current_function_decl);
2744}
2745
9660afe0
JM
2746/* Returns true iff DECL is a capture field from a lambda that is not our
2747 immediate context. */
2748
2749static bool
2750outer_lambda_capture_p (tree decl)
2751{
2752 return (TREE_CODE (decl) == FIELD_DECL
2753 && LAMBDA_TYPE_P (DECL_CONTEXT (decl))
19030d77
JM
2754 && (!current_class_type
2755 || !DERIVED_FROM_P (DECL_CONTEXT (decl), current_class_type)));
9660afe0
JM
2756}
2757
b3445994
MM
2758/* ID_EXPRESSION is a representation of parsed, but unprocessed,
2759 id-expression. (See cp_parser_id_expression for details.) SCOPE,
2760 if non-NULL, is the type or namespace used to explicitly qualify
2761 ID_EXPRESSION. DECL is the entity to which that name has been
c8094d83 2762 resolved.
b3445994
MM
2763
2764 *CONSTANT_EXPRESSION_P is true if we are presently parsing a
2765 constant-expression. In that case, *NON_CONSTANT_EXPRESSION_P will
2766 be set to true if this expression isn't permitted in a
2767 constant-expression, but it is otherwise not set by this function.
2768 *ALLOW_NON_CONSTANT_EXPRESSION_P is true if we are parsing a
2769 constant-expression, but a non-constant expression is also
2770 permissible.
2771
02ed62dd
MM
2772 DONE is true if this expression is a complete postfix-expression;
2773 it is false if this expression is followed by '->', '[', '(', etc.
2774 ADDRESS_P is true iff this expression is the operand of '&'.
2775 TEMPLATE_P is true iff the qualified-id was of the form
2776 "A::template B". TEMPLATE_ARG_P is true iff this qualified name
2777 appears as a template argument.
2778
b3445994
MM
2779 If an error occurs, and it is the kind of error that might cause
2780 the parser to abort a tentative parse, *ERROR_MSG is filled in. It
2781 is the caller's responsibility to issue the message. *ERROR_MSG
2782 will be a string with static storage duration, so the caller need
2783 not "free" it.
2784
2785 Return an expression for the entity, after issuing appropriate
2786 diagnostics. This function is also responsible for transforming a
2787 reference to a non-static member into a COMPONENT_REF that makes
c8094d83 2788 the use of "this" explicit.
b3445994
MM
2789
2790 Upon return, *IDK will be filled in appropriately. */
b3445994 2791tree
c8094d83 2792finish_id_expression (tree id_expression,
b3445994
MM
2793 tree decl,
2794 tree scope,
2795 cp_id_kind *idk,
67c03833
JM
2796 bool integral_constant_expression_p,
2797 bool allow_non_integral_constant_expression_p,
2798 bool *non_integral_constant_expression_p,
02ed62dd
MM
2799 bool template_p,
2800 bool done,
2801 bool address_p,
2802 bool template_arg_p,
2b7a3abf
DS
2803 const char **error_msg,
2804 location_t location)
b3445994
MM
2805{
2806 /* Initialize the output parameters. */
2807 *idk = CP_ID_KIND_NONE;
2808 *error_msg = NULL;
2809
2810 if (id_expression == error_mark_node)
2811 return error_mark_node;
2812 /* If we have a template-id, then no further lookup is
2813 required. If the template-id was for a template-class, we
2814 will sometimes have a TYPE_DECL at this point. */
2815 else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
ee935db4 2816 || TREE_CODE (decl) == TYPE_DECL)
b3445994
MM
2817 ;
2818 /* Look up the name. */
c8094d83 2819 else
b3445994
MM
2820 {
2821 if (decl == error_mark_node)
2822 {
2823 /* Name lookup failed. */
c8094d83
MS
2824 if (scope
2825 && (!TYPE_P (scope)
4546865e
MM
2826 || (!dependent_type_p (scope)
2827 && !(TREE_CODE (id_expression) == IDENTIFIER_NODE
2828 && IDENTIFIER_TYPENAME_P (id_expression)
2829 && dependent_type_p (TREE_TYPE (id_expression))))))
b3445994 2830 {
4546865e
MM
2831 /* If the qualifying type is non-dependent (and the name
2832 does not name a conversion operator to a dependent
2833 type), issue an error. */
2b7a3abf 2834 qualified_name_lookup_error (scope, id_expression, decl, location);
b3445994
MM
2835 return error_mark_node;
2836 }
2837 else if (!scope)
2838 {
2839 /* It may be resolved via Koenig lookup. */
2840 *idk = CP_ID_KIND_UNQUALIFIED;
2841 return id_expression;
2842 }
4546865e
MM
2843 else
2844 decl = id_expression;
b3445994
MM
2845 }
2846 /* If DECL is a variable that would be out of scope under
2847 ANSI/ISO rules, but in scope in the ARM, name lookup
2848 will succeed. Issue a diagnostic here. */
2849 else
2850 decl = check_for_out_of_scope_variable (decl);
2851
2852 /* Remember that the name was used in the definition of
2853 the current class so that we can check later to see if
2854 the meaning would have been different after the class
2855 was entirely defined. */
c97c25c0
JM
2856 if (!scope && decl != error_mark_node
2857 && TREE_CODE (id_expression) == IDENTIFIER_NODE)
b3445994 2858 maybe_note_name_used_in_class (id_expression, decl);
8ca4bf25 2859
d5f4eddd
JM
2860 /* Disallow uses of local variables from containing functions, except
2861 within lambda-expressions. */
9660afe0
JM
2862 if ((outer_automatic_var_p (decl)
2863 || outer_lambda_capture_p (decl))
d5f4eddd
JM
2864 /* It's not a use (3.2) if we're in an unevaluated context. */
2865 && !cp_unevaluated_operand)
8ca4bf25 2866 {
d5f4eddd
JM
2867 tree context = DECL_CONTEXT (decl);
2868 tree containing_function = current_function_decl;
2869 tree lambda_stack = NULL_TREE;
2870 tree lambda_expr = NULL_TREE;
9660afe0 2871 tree initializer = decl;
d5f4eddd
JM
2872
2873 /* Core issue 696: "[At the July 2009 meeting] the CWG expressed
2874 support for an approach in which a reference to a local
2875 [constant] automatic variable in a nested class or lambda body
2876 would enter the expression as an rvalue, which would reduce
2877 the complexity of the problem"
2878
2879 FIXME update for final resolution of core issue 696. */
aef4a215 2880 if (decl_constant_var_p (decl))
d5f4eddd
JM
2881 return integral_constant_value (decl);
2882
9660afe0
JM
2883 if (TYPE_P (context))
2884 {
2885 /* Implicit capture of an explicit capture. */
2886 context = lambda_function (context);
2887 initializer = thisify_lambda_field (decl);
2888 }
2889
d5f4eddd
JM
2890 /* If we are in a lambda function, we can move out until we hit
2891 1. the context,
2892 2. a non-lambda function, or
2893 3. a non-default capturing lambda function. */
2894 while (context != containing_function
2895 && LAMBDA_FUNCTION_P (containing_function))
2896 {
2897 lambda_expr = CLASSTYPE_LAMBDA_EXPR
2898 (DECL_CONTEXT (containing_function));
2899
2900 if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr)
2901 == CPLD_NONE)
2902 break;
2903
2904 lambda_stack = tree_cons (NULL_TREE,
2905 lambda_expr,
2906 lambda_stack);
2907
2908 containing_function
2909 = decl_function_context (containing_function);
2910 }
2911
2912 if (context == containing_function)
2913 {
2914 decl = add_default_capture (lambda_stack,
2915 /*id=*/DECL_NAME (decl),
9660afe0 2916 initializer);
d5f4eddd
JM
2917 }
2918 else if (lambda_expr)
2919 {
2920 error ("%qD is not captured", decl);
2921 return error_mark_node;
2922 }
2923 else
8ca4bf25
MM
2924 {
2925 error (TREE_CODE (decl) == VAR_DECL
2926 ? "use of %<auto%> variable from containing function"
2927 : "use of parameter from containing function");
2928 error (" %q+#D declared here", decl);
2929 return error_mark_node;
2930 }
2931 }
da9bc840
JM
2932
2933 /* Also disallow uses of function parameters outside the function
2934 body, except inside an unevaluated context (i.e. decltype). */
2935 if (TREE_CODE (decl) == PARM_DECL
2936 && DECL_CONTEXT (decl) == NULL_TREE
2937 && !cp_unevaluated_operand)
2938 {
2939 error ("use of parameter %qD outside function body", decl);
2940 return error_mark_node;
2941 }
b3445994
MM
2942 }
2943
2944 /* If we didn't find anything, or what we found was a type,
2945 then this wasn't really an id-expression. */
2946 if (TREE_CODE (decl) == TEMPLATE_DECL
2947 && !DECL_FUNCTION_TEMPLATE_P (decl))
2948 {
2949 *error_msg = "missing template arguments";
2950 return error_mark_node;
2951 }
2952 else if (TREE_CODE (decl) == TYPE_DECL
2953 || TREE_CODE (decl) == NAMESPACE_DECL)
2954 {
2955 *error_msg = "expected primary-expression";
2956 return error_mark_node;
2957 }
2958
2959 /* If the name resolved to a template parameter, there is no
931a9c05
GB
2960 need to look it up again later. */
2961 if ((TREE_CODE (decl) == CONST_DECL && DECL_TEMPLATE_PARM_P (decl))
2962 || TREE_CODE (decl) == TEMPLATE_PARM_INDEX)
b3445994 2963 {
db24eb1f 2964 tree r;
c8094d83 2965
b3445994 2966 *idk = CP_ID_KIND_NONE;
931a9c05
GB
2967 if (TREE_CODE (decl) == TEMPLATE_PARM_INDEX)
2968 decl = TEMPLATE_PARM_DECL (decl);
db24eb1f 2969 r = convert_from_reference (DECL_INITIAL (decl));
c8094d83
MS
2970
2971 if (integral_constant_expression_p
68deab91 2972 && !dependent_type_p (TREE_TYPE (decl))
db24eb1f 2973 && !(INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (r))))
931a9c05 2974 {
67c03833 2975 if (!allow_non_integral_constant_expression_p)
a82e1a7d 2976 error ("template parameter %qD of type %qT is not allowed in "
931a9c05
GB
2977 "an integral constant expression because it is not of "
2978 "integral or enumeration type", decl, TREE_TYPE (decl));
67c03833 2979 *non_integral_constant_expression_p = true;
931a9c05 2980 }
db24eb1f 2981 return r;
931a9c05 2982 }
c8094d83 2983 /* Similarly, we resolve enumeration constants to their
931a9c05
GB
2984 underlying values. */
2985 else if (TREE_CODE (decl) == CONST_DECL)
2986 {
2987 *idk = CP_ID_KIND_NONE;
2988 if (!processing_template_decl)
6193b8b7
DJ
2989 {
2990 used_types_insert (TREE_TYPE (decl));
2991 return DECL_INITIAL (decl);
2992 }
b3445994
MM
2993 return decl;
2994 }
2995 else
2996 {
2997 bool dependent_p;
2998
2999 /* If the declaration was explicitly qualified indicate
3000 that. The semantics of `A::f(3)' are different than
3001 `f(3)' if `f' is virtual. */
c8094d83 3002 *idk = (scope
b3445994
MM
3003 ? CP_ID_KIND_QUALIFIED
3004 : (TREE_CODE (decl) == TEMPLATE_ID_EXPR
3005 ? CP_ID_KIND_TEMPLATE_ID
3006 : CP_ID_KIND_UNQUALIFIED));
3007
3008
3009 /* [temp.dep.expr]
3010
3011 An id-expression is type-dependent if it contains an
3012 identifier that was declared with a dependent type.
3013
b3445994
MM
3014 The standard is not very specific about an id-expression that
3015 names a set of overloaded functions. What if some of them
3016 have dependent types and some of them do not? Presumably,
3017 such a name should be treated as a dependent name. */
3018 /* Assume the name is not dependent. */
3019 dependent_p = false;
3020 if (!processing_template_decl)
3021 /* No names are dependent outside a template. */
3022 ;
3023 /* A template-id where the name of the template was not resolved
3024 is definitely dependent. */
3025 else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
c8094d83 3026 && (TREE_CODE (TREE_OPERAND (decl, 0))
b3445994
MM
3027 == IDENTIFIER_NODE))
3028 dependent_p = true;
3029 /* For anything except an overloaded function, just check its
3030 type. */
3031 else if (!is_overloaded_fn (decl))
c8094d83 3032 dependent_p
b3445994
MM
3033 = dependent_type_p (TREE_TYPE (decl));
3034 /* For a set of overloaded functions, check each of the
3035 functions. */
3036 else
3037 {
3038 tree fns = decl;
3039
3040 if (BASELINK_P (fns))
3041 fns = BASELINK_FUNCTIONS (fns);
3042
3043 /* For a template-id, check to see if the template
3044 arguments are dependent. */
3045 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
3046 {
3047 tree args = TREE_OPERAND (fns, 1);
3048 dependent_p = any_dependent_template_arguments_p (args);
3049 /* The functions are those referred to by the
3050 template-id. */
3051 fns = TREE_OPERAND (fns, 0);
3052 }
3053
3054 /* If there are no dependent template arguments, go through
cd0be382 3055 the overloaded functions. */
b3445994
MM
3056 while (fns && !dependent_p)
3057 {
3058 tree fn = OVL_CURRENT (fns);
3059
3060 /* Member functions of dependent classes are
3061 dependent. */
3062 if (TREE_CODE (fn) == FUNCTION_DECL
3063 && type_dependent_expression_p (fn))
3064 dependent_p = true;
3065 else if (TREE_CODE (fn) == TEMPLATE_DECL
3066 && dependent_template_p (fn))
3067 dependent_p = true;
3068
3069 fns = OVL_NEXT (fns);
3070 }
3071 }
3072
3073 /* If the name was dependent on a template parameter, we will
3074 resolve the name at instantiation time. */
3075 if (dependent_p)
3076 {
3077 /* Create a SCOPE_REF for qualified names, if the scope is
3078 dependent. */
3079 if (scope)
3080 {
02ed62dd
MM
3081 if (TYPE_P (scope))
3082 {
3083 if (address_p && done)
3084 decl = finish_qualified_id_expr (scope, decl,
3085 done, address_p,
3086 template_p,
3087 template_arg_p);
7e361ae6
JM
3088 else
3089 {
3090 tree type = NULL_TREE;
3091 if (DECL_P (decl) && !dependent_scope_p (scope))
3092 type = TREE_TYPE (decl);
3093 decl = build_qualified_name (type,
3094 scope,
3095 id_expression,
3096 template_p);
3097 }
02ed62dd
MM
3098 }
3099 if (TREE_TYPE (decl))
3100 decl = convert_from_reference (decl);
3101 return decl;
b3445994
MM
3102 }
3103 /* A TEMPLATE_ID already contains all the information we
3104 need. */
3105 if (TREE_CODE (id_expression) == TEMPLATE_ID_EXPR)
3106 return id_expression;
10b1d5e7 3107 *idk = CP_ID_KIND_UNQUALIFIED_DEPENDENT;
5a98fa7b
MM
3108 /* If we found a variable, then name lookup during the
3109 instantiation will always resolve to the same VAR_DECL
3110 (or an instantiation thereof). */
3c398f34
MM
3111 if (TREE_CODE (decl) == VAR_DECL
3112 || TREE_CODE (decl) == PARM_DECL)
db24eb1f 3113 return convert_from_reference (decl);
bad1f462
KL
3114 /* The same is true for FIELD_DECL, but we also need to
3115 make sure that the syntax is correct. */
3116 else if (TREE_CODE (decl) == FIELD_DECL)
a26ddf11
KL
3117 {
3118 /* Since SCOPE is NULL here, this is an unqualified name.
3119 Access checking has been performed during name lookup
3120 already. Turn off checking to avoid duplicate errors. */
3121 push_deferring_access_checks (dk_no_check);
3122 decl = finish_non_static_data_member
2defb926 3123 (decl, NULL_TREE,
a26ddf11
KL
3124 /*qualifying_scope=*/NULL_TREE);
3125 pop_deferring_access_checks ();
3126 return decl;
3127 }
10b1d5e7 3128 return id_expression;
b3445994
MM
3129 }
3130
415d4636 3131 if (TREE_CODE (decl) == NAMESPACE_DECL)
9e95d15f 3132 {
a82e1a7d 3133 error ("use of namespace %qD as expression", decl);
9e95d15f
NS
3134 return error_mark_node;
3135 }
3136 else if (DECL_CLASS_TEMPLATE_P (decl))
3137 {
a82e1a7d 3138 error ("use of class template %qT as expression", decl);
9e95d15f
NS
3139 return error_mark_node;
3140 }
3141 else if (TREE_CODE (decl) == TREE_LIST)
3142 {
3143 /* Ambiguous reference to base members. */
a82e1a7d 3144 error ("request for member %qD is ambiguous in "
9e95d15f
NS
3145 "multiple inheritance lattice", id_expression);
3146 print_candidates (decl);
3147 return error_mark_node;
3148 }
415d4636
MM
3149
3150 /* Mark variable-like entities as used. Functions are similarly
3151 marked either below or after overload resolution. */
3152 if (TREE_CODE (decl) == VAR_DECL
3153 || TREE_CODE (decl) == PARM_DECL
3154 || TREE_CODE (decl) == RESULT_DECL)
3155 mark_used (decl);
3156
aef4a215
JM
3157 /* Only certain kinds of names are allowed in constant
3158 expression. Enumerators and template parameters have already
3159 been handled above. */
7f7d4b12
DS
3160 if (! error_operand_p (decl)
3161 && integral_constant_expression_p
aef4a215
JM
3162 && ! decl_constant_var_p (decl)
3163 && ! builtin_valid_in_constant_expr_p (decl))
3164 {
3165 if (!allow_non_integral_constant_expression_p)
3166 {
3167 error ("%qD cannot appear in a constant-expression", decl);
3168 return error_mark_node;
3169 }
3170 *non_integral_constant_expression_p = true;
3171 }
3172
415d4636
MM
3173 if (scope)
3174 {
c8094d83 3175 decl = (adjust_result_of_qualified_name_lookup
415d4636 3176 (decl, scope, current_class_type));
e20bcc5e
JH
3177
3178 if (TREE_CODE (decl) == FUNCTION_DECL)
3179 mark_used (decl);
3180
415d4636 3181 if (TREE_CODE (decl) == FIELD_DECL || BASELINK_P (decl))
02ed62dd
MM
3182 decl = finish_qualified_id_expr (scope,
3183 decl,
3184 done,
3185 address_p,
3186 template_p,
3187 template_arg_p);
db24eb1f
NS
3188 else
3189 {
3190 tree r = convert_from_reference (decl);
c8094d83 3191
d3a79fcc
JM
3192 /* In a template, return a SCOPE_REF for most qualified-ids
3193 so that we can check access at instantiation time. But if
3194 we're looking at a member of the current instantiation, we
3195 know we have access and building up the SCOPE_REF confuses
3196 non-type template argument handling. */
3197 if (processing_template_decl && TYPE_P (scope)
3198 && !currently_open_class (scope))
02ed62dd
MM
3199 r = build_qualified_name (TREE_TYPE (r),
3200 scope, decl,
3201 template_p);
db24eb1f
NS
3202 decl = r;
3203 }
415d4636 3204 }
9e95d15f 3205 else if (TREE_CODE (decl) == FIELD_DECL)
a26ddf11
KL
3206 {
3207 /* Since SCOPE is NULL here, this is an unqualified name.
3208 Access checking has been performed during name lookup
3209 already. Turn off checking to avoid duplicate errors. */
3210 push_deferring_access_checks (dk_no_check);
2defb926 3211 decl = finish_non_static_data_member (decl, NULL_TREE,
a26ddf11
KL
3212 /*qualifying_scope=*/NULL_TREE);
3213 pop_deferring_access_checks ();
3214 }
9e95d15f
NS
3215 else if (is_overloaded_fn (decl))
3216 {
eff3a276 3217 tree first_fn;
b3445994 3218
294e855f 3219 first_fn = get_first_fn (decl);
9e95d15f
NS
3220 if (TREE_CODE (first_fn) == TEMPLATE_DECL)
3221 first_fn = DECL_TEMPLATE_RESULT (first_fn);
415d4636
MM
3222
3223 if (!really_overloaded_fn (decl))
3224 mark_used (first_fn);
3225
02ed62dd
MM
3226 if (!template_arg_p
3227 && TREE_CODE (first_fn) == FUNCTION_DECL
821eaf2a
MM
3228 && DECL_FUNCTION_MEMBER_P (first_fn)
3229 && !shared_member_p (decl))
9e95d15f
NS
3230 {
3231 /* A set of member functions. */
3232 decl = maybe_dummy_object (DECL_CONTEXT (first_fn), 0);
02ed62dd 3233 return finish_class_member_access_expr (decl, id_expression,
5ade1ed2
DG
3234 /*template_p=*/false,
3235 tf_warning_or_error);
9e95d15f 3236 }
eff3a276
MM
3237
3238 decl = baselink_for_fns (decl);
9e95d15f
NS
3239 }
3240 else
3241 {
9e95d15f 3242 if (DECL_P (decl) && DECL_NONLOCAL (decl)
24f58e74 3243 && DECL_CLASS_SCOPE_P (decl))
9e95d15f 3244 {
24f58e74
PC
3245 tree context = context_for_name_lookup (decl);
3246 if (context != current_class_type)
3247 {
3248 tree path = currently_open_derived_class (context);
3249 perform_or_defer_access_check (TYPE_BINFO (path),
3250 decl, decl);
3251 }
9e95d15f 3252 }
c8094d83 3253
db24eb1f 3254 decl = convert_from_reference (decl);
9e95d15f 3255 }
b3445994
MM
3256 }
3257
3258 if (TREE_DEPRECATED (decl))
9b86d6bb 3259 warn_deprecated_use (decl, NULL_TREE);
b3445994
MM
3260
3261 return decl;
3262}
3263
0213a355
JM
3264/* Implement the __typeof keyword: Return the type of EXPR, suitable for
3265 use as a type-specifier. */
3266
b894fc05 3267tree
3a978d72 3268finish_typeof (tree expr)
b894fc05 3269{
65a5559b
MM
3270 tree type;
3271
dffbbe80 3272 if (type_dependent_expression_p (expr))
b894fc05 3273 {
9e1e64ec 3274 type = cxx_make_type (TYPEOF_TYPE);
eb34af89 3275 TYPEOF_TYPE_EXPR (type) = expr;
3ad6a8e1 3276 SET_TYPE_STRUCTURAL_EQUALITY (type);
b894fc05 3277
65a5559b 3278 return type;
b894fc05
JM
3279 }
3280
03a904b5
JJ
3281 expr = mark_type_use (expr);
3282
3c38f0ff 3283 type = unlowered_expr_type (expr);
65a5559b
MM
3284
3285 if (!type || type == unknown_type_node)
3286 {
a82e1a7d 3287 error ("type of %qE is unknown", expr);
65a5559b
MM
3288 return error_mark_node;
3289 }
3290
3291 return type;
b894fc05 3292}
558475f0 3293
c291f8b1
VR
3294/* Perform C++-specific checks for __builtin_offsetof before calling
3295 fold_offsetof. */
3296
3297tree
3298finish_offsetof (tree expr)
3299{
4c65a534
VR
3300 if (TREE_CODE (expr) == PSEUDO_DTOR_EXPR)
3301 {
3302 error ("cannot apply %<offsetof%> to destructor %<~%T%>",
3303 TREE_OPERAND (expr, 2));
3304 return error_mark_node;
3305 }
c291f8b1
VR
3306 if (TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE
3307 || TREE_CODE (TREE_TYPE (expr)) == METHOD_TYPE
fbfc8363 3308 || TREE_TYPE (expr) == unknown_type_node)
c291f8b1 3309 {
1916c916
VR
3310 if (TREE_CODE (expr) == COMPONENT_REF
3311 || TREE_CODE (expr) == COMPOUND_EXPR)
0a9367cb
VR
3312 expr = TREE_OPERAND (expr, 1);
3313 error ("cannot apply %<offsetof%> to member function %qD", expr);
c291f8b1
VR
3314 return error_mark_node;
3315 }
60c4d135
JJ
3316 if (TREE_CODE (expr) == INDIRECT_REF && REFERENCE_REF_P (expr))
3317 expr = TREE_OPERAND (expr, 0);
6d4d7b0e 3318 return fold_offsetof (expr, NULL_TREE);
c291f8b1
VR
3319}
3320
9eeb200f
JM
3321/* Replace the AGGR_INIT_EXPR at *TP with an equivalent CALL_EXPR. This
3322 function is broken out from the above for the benefit of the tree-ssa
3323 project. */
3324
3325void
3326simplify_aggr_init_expr (tree *tp)
3327{
3328 tree aggr_init_expr = *tp;
3329
3eb24f73 3330 /* Form an appropriate CALL_EXPR. */
5039610b
SL
3331 tree fn = AGGR_INIT_EXPR_FN (aggr_init_expr);
3332 tree slot = AGGR_INIT_EXPR_SLOT (aggr_init_expr);
2692eb7d 3333 tree type = TREE_TYPE (slot);
9eeb200f
JM
3334
3335 tree call_expr;
3336 enum style_t { ctor, arg, pcc } style;
4977bab6 3337
3eb24f73 3338 if (AGGR_INIT_VIA_CTOR_P (aggr_init_expr))
4977bab6
ZW
3339 style = ctor;
3340#ifdef PCC_STATIC_STRUCT_RETURN
3341 else if (1)
3342 style = pcc;
3343#endif
4977bab6 3344 else
315fb5db
NS
3345 {
3346 gcc_assert (TREE_ADDRESSABLE (type));
3347 style = arg;
3348 }
4977bab6 3349
db3927fb
AH
3350 call_expr = build_call_array_loc (input_location,
3351 TREE_TYPE (TREE_TYPE (TREE_TYPE (fn))),
3352 fn,
3353 aggr_init_expr_nargs (aggr_init_expr),
3354 AGGR_INIT_EXPR_ARGP (aggr_init_expr));
d8a0d13e 3355 TREE_NOTHROW (call_expr) = TREE_NOTHROW (aggr_init_expr);
5039610b 3356
fa47911c 3357 if (style == ctor)
3eb24f73 3358 {
fa47911c
JM
3359 /* Replace the first argument to the ctor with the address of the
3360 slot. */
dffd7eb6 3361 cxx_mark_addressable (slot);
5039610b
SL
3362 CALL_EXPR_ARG (call_expr, 0) =
3363 build1 (ADDR_EXPR, build_pointer_type (type), slot);
3eb24f73 3364 }
5039610b 3365 else if (style == arg)
fa47911c
JM
3366 {
3367 /* Just mark it addressable here, and leave the rest to
3368 expand_call{,_inline}. */
3369 cxx_mark_addressable (slot);
3370 CALL_EXPR_RETURN_SLOT_OPT (call_expr) = true;
941f78d1 3371 call_expr = build2 (INIT_EXPR, TREE_TYPE (call_expr), slot, call_expr);
fa47911c 3372 }
4977bab6 3373 else if (style == pcc)
3eb24f73 3374 {
4977bab6
ZW
3375 /* If we're using the non-reentrant PCC calling convention, then we
3376 need to copy the returned value out of the static buffer into the
3377 SLOT. */
78757caa 3378 push_deferring_access_checks (dk_no_check);
46af705a 3379 call_expr = build_aggr_init (slot, call_expr,
5ade1ed2
DG
3380 DIRECT_BIND | LOOKUP_ONLYCONVERTING,
3381 tf_warning_or_error);
78757caa 3382 pop_deferring_access_checks ();
d17791d6 3383 call_expr = build2 (COMPOUND_EXPR, TREE_TYPE (slot), call_expr, slot);
3eb24f73 3384 }
3eb24f73 3385
450a927a
JM
3386 if (AGGR_INIT_ZERO_FIRST (aggr_init_expr))
3387 {
3388 tree init = build_zero_init (type, NULL_TREE,
3389 /*static_storage_p=*/false);
3390 init = build2 (INIT_EXPR, void_type_node, slot, init);
3391 call_expr = build2 (COMPOUND_EXPR, TREE_TYPE (call_expr),
3392 init, call_expr);
3393 }
3394
3eb24f73 3395 *tp = call_expr;
3eb24f73
MM
3396}
3397
31f8e4f3
MM
3398/* Emit all thunks to FN that should be emitted when FN is emitted. */
3399
e89d6010 3400void
3a978d72 3401emit_associated_thunks (tree fn)
31f8e4f3
MM
3402{
3403 /* When we use vcall offsets, we emit thunks with the virtual
3404 functions to which they thunk. The whole point of vcall offsets
3405 is so that you can know statically the entire set of thunks that
3406 will ever be needed for a given virtual function, thereby
3407 enabling you to output all the thunks with the function itself. */
4537ec0c
DN
3408 if (DECL_VIRTUAL_P (fn)
3409 /* Do not emit thunks for extern template instantiations. */
3410 && ! DECL_REALLY_EXTERN (fn))
31f8e4f3 3411 {
bb5e8a7f 3412 tree thunk;
c8094d83 3413
910ad8de 3414 for (thunk = DECL_THUNKS (fn); thunk; thunk = DECL_CHAIN (thunk))
4977bab6 3415 {
e00853fd 3416 if (!THUNK_ALIAS (thunk))
4977bab6 3417 {
bb885938
NS
3418 use_thunk (thunk, /*emit_p=*/1);
3419 if (DECL_RESULT_THUNK_P (thunk))
3420 {
3421 tree probe;
c8094d83 3422
bb885938 3423 for (probe = DECL_THUNKS (thunk);
910ad8de 3424 probe; probe = DECL_CHAIN (probe))
bb885938
NS
3425 use_thunk (probe, /*emit_p=*/1);
3426 }
4977bab6 3427 }
bb885938 3428 else
50bc768d 3429 gcc_assert (!DECL_THUNKS (thunk));
4977bab6 3430 }
31f8e4f3
MM
3431 }
3432}
3433
558475f0
MM
3434/* Generate RTL for FN. */
3435
b2583345
JJ
3436bool
3437expand_or_defer_fn_1 (tree fn)
8cd2462c
JH
3438{
3439 /* When the parser calls us after finishing the body of a template
c353b8e3
MM
3440 function, we don't really want to expand the body. */
3441 if (processing_template_decl)
8cd2462c
JH
3442 {
3443 /* Normally, collection only occurs in rest_of_compilation. So,
3444 if we don't collect here, we never collect junk generated
3445 during the processing of templates until we hit a
27250734
MM
3446 non-template function. It's not safe to do this inside a
3447 nested class, though, as the parser may have local state that
3448 is not a GC root. */
3449 if (!function_depth)
3450 ggc_collect ();
b2583345 3451 return false;
8cd2462c
JH
3452 }
3453
a406865a 3454 gcc_assert (DECL_SAVED_TREE (fn));
726a989a 3455
8cd2462c
JH
3456 /* If this is a constructor or destructor body, we have to clone
3457 it. */
3458 if (maybe_clone_body (fn))
3459 {
3460 /* We don't want to process FN again, so pretend we've written
3461 it out, even though we haven't. */
3462 TREE_ASM_WRITTEN (fn) = 1;
c6a21142 3463 DECL_SAVED_TREE (fn) = NULL_TREE;
b2583345 3464 return false;
8cd2462c
JH
3465 }
3466
4684cd27
MM
3467 /* We make a decision about linkage for these functions at the end
3468 of the compilation. Until that point, we do not want the back
3469 end to output them -- but we do want it to see the bodies of
1a10290c 3470 these functions so that it can inline them as appropriate. */
4684cd27
MM
3471 if (DECL_DECLARED_INLINE_P (fn) || DECL_IMPLICIT_INSTANTIATION (fn))
3472 {
1ef0df47
MM
3473 if (DECL_INTERFACE_KNOWN (fn))
3474 /* We've already made a decision as to how this function will
3475 be handled. */;
3476 else if (!at_eof)
4684cd27
MM
3477 {
3478 DECL_EXTERNAL (fn) = 1;
3479 DECL_NOT_REALLY_EXTERN (fn) = 1;
3480 note_vague_linkage_fn (fn);
1ef0df47
MM
3481 /* A non-template inline function with external linkage will
3482 always be COMDAT. As we must eventually determine the
3483 linkage of all functions, and as that causes writes to
3484 the data mapped in from the PCH file, it's advantageous
3485 to mark the functions at this point. */
3486 if (!DECL_IMPLICIT_INSTANTIATION (fn))
3487 {
3488 /* This function must have external linkage, as
3489 otherwise DECL_INTERFACE_KNOWN would have been
3490 set. */
3491 gcc_assert (TREE_PUBLIC (fn));
3492 comdat_linkage (fn);
3493 DECL_INTERFACE_KNOWN (fn) = 1;
3494 }
4684cd27
MM
3495 }
3496 else
3497 import_export_decl (fn);
1a10290c
MM
3498
3499 /* If the user wants us to keep all inline functions, then mark
3500 this function as needed so that finish_file will make sure to
fe2978fb
MM
3501 output it later. Similarly, all dllexport'd functions must
3502 be emitted; there may be callers in other DLLs. */
3fc20697
RG
3503 if ((flag_keep_inline_functions
3504 && DECL_DECLARED_INLINE_P (fn)
3505 && !DECL_REALLY_EXTERN (fn))
47ea1edf
DK
3506 || (flag_keep_inline_dllexport
3507 && lookup_attribute ("dllexport", DECL_ATTRIBUTES (fn))))
1a10290c 3508 mark_needed (fn);
4684cd27
MM
3509 }
3510
8cd2462c
JH
3511 /* There's no reason to do any of the work here if we're only doing
3512 semantic analysis; this code just generates RTL. */
3513 if (flag_syntax_only)
b2583345
JJ
3514 return false;
3515
3516 return true;
3517}
8cd2462c 3518
b2583345
JJ
3519void
3520expand_or_defer_fn (tree fn)
3521{
3522 if (expand_or_defer_fn_1 (fn))
3523 {
3524 function_depth++;
99edd65d 3525
b2583345
JJ
3526 /* Expand or defer, at the whim of the compilation unit manager. */
3527 cgraph_finalize_function (fn, function_depth > 1);
6744a6ab 3528 emit_associated_thunks (fn);
99edd65d 3529
b2583345
JJ
3530 function_depth--;
3531 }
8cd2462c
JH
3532}
3533
6de9cd9a
DN
3534struct nrv_data
3535{
3536 tree var;
3537 tree result;
3538 htab_t visited;
3539};
0d97bf4c 3540
6de9cd9a
DN
3541/* Helper function for walk_tree, used by finalize_nrv below. */
3542
3543static tree
3544finalize_nrv_r (tree* tp, int* walk_subtrees, void* data)
0d97bf4c 3545{
6de9cd9a
DN
3546 struct nrv_data *dp = (struct nrv_data *)data;
3547 void **slot;
07b2f2fd
JM
3548
3549 /* No need to walk into types. There wouldn't be any need to walk into
3550 non-statements, except that we have to consider STMT_EXPRs. */
0d97bf4c
JM
3551 if (TYPE_P (*tp))
3552 *walk_subtrees = 0;
6de9cd9a
DN
3553 /* Change all returns to just refer to the RESULT_DECL; this is a nop,
3554 but differs from using NULL_TREE in that it indicates that we care
3555 about the value of the RESULT_DECL. */
5088b058
RH
3556 else if (TREE_CODE (*tp) == RETURN_EXPR)
3557 TREE_OPERAND (*tp, 0) = dp->result;
6de9cd9a
DN
3558 /* Change all cleanups for the NRV to only run when an exception is
3559 thrown. */
07b2f2fd 3560 else if (TREE_CODE (*tp) == CLEANUP_STMT
6de9cd9a 3561 && CLEANUP_DECL (*tp) == dp->var)
659e5a7a 3562 CLEANUP_EH_ONLY (*tp) = 1;
350fae66 3563 /* Replace the DECL_EXPR for the NRV with an initialization of the
6de9cd9a 3564 RESULT_DECL, if needed. */
350fae66
RK
3565 else if (TREE_CODE (*tp) == DECL_EXPR
3566 && DECL_EXPR_DECL (*tp) == dp->var)
6de9cd9a
DN
3567 {
3568 tree init;
3569 if (DECL_INITIAL (dp->var)
3570 && DECL_INITIAL (dp->var) != error_mark_node)
2d188530
JJ
3571 init = build2 (INIT_EXPR, void_type_node, dp->result,
3572 DECL_INITIAL (dp->var));
6de9cd9a 3573 else
c2255bc4 3574 init = build_empty_stmt (EXPR_LOCATION (*tp));
2d188530 3575 DECL_INITIAL (dp->var) = NULL_TREE;
5e278028 3576 SET_EXPR_LOCATION (init, EXPR_LOCATION (*tp));
6de9cd9a
DN
3577 *tp = init;
3578 }
3579 /* And replace all uses of the NRV with the RESULT_DECL. */
3580 else if (*tp == dp->var)
3581 *tp = dp->result;
3582
3583 /* Avoid walking into the same tree more than once. Unfortunately, we
3584 can't just use walk_tree_without duplicates because it would only call
3585 us for the first occurrence of dp->var in the function body. */
3586 slot = htab_find_slot (dp->visited, *tp, INSERT);
3587 if (*slot)
3588 *walk_subtrees = 0;
3589 else
3590 *slot = *tp;
0d97bf4c
JM
3591
3592 /* Keep iterating. */
3593 return NULL_TREE;
3594}
3595
6de9cd9a 3596/* Called from finish_function to implement the named return value
5088b058 3597 optimization by overriding all the RETURN_EXPRs and pertinent
6de9cd9a
DN
3598 CLEANUP_STMTs and replacing all occurrences of VAR with RESULT, the
3599 RESULT_DECL for the function. */
f444e36b 3600
4985cde3 3601void
6de9cd9a 3602finalize_nrv (tree *tp, tree var, tree result)
f444e36b 3603{
6de9cd9a
DN
3604 struct nrv_data data;
3605
add86e09 3606 /* Copy name from VAR to RESULT. */
6de9cd9a 3607 DECL_NAME (result) = DECL_NAME (var);
6de9cd9a
DN
3608 /* Don't forget that we take its address. */
3609 TREE_ADDRESSABLE (result) = TREE_ADDRESSABLE (var);
add86e09
JJ
3610 /* Finally set DECL_VALUE_EXPR to avoid assigning
3611 a stack slot at -O0 for the original var and debug info
3612 uses RESULT location for VAR. */
3613 SET_DECL_VALUE_EXPR (var, result);
3614 DECL_HAS_VALUE_EXPR_P (var) = 1;
6de9cd9a
DN
3615
3616 data.var = var;
3617 data.result = result;
3618 data.visited = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL);
14588106 3619 cp_walk_tree (tp, finalize_nrv_r, &data, 0);
6de9cd9a 3620 htab_delete (data.visited);
b850de4f 3621}
1799e5d5 3622\f
a68ab351
JJ
3623/* Create CP_OMP_CLAUSE_INFO for clause C. Returns true if it is invalid. */
3624
3625bool
3626cxx_omp_create_clause_info (tree c, tree type, bool need_default_ctor,
3627 bool need_copy_ctor, bool need_copy_assignment)
3628{
3629 int save_errorcount = errorcount;
3630 tree info, t;
3631
3632 /* Always allocate 3 elements for simplicity. These are the
3633 function decls for the ctor, dtor, and assignment op.
3634 This layout is known to the three lang hooks,
3635 cxx_omp_clause_default_init, cxx_omp_clause_copy_init,
3636 and cxx_omp_clause_assign_op. */
3637 info = make_tree_vec (3);
3638 CP_OMP_CLAUSE_INFO (c) = info;
3639
ac177431 3640 if (need_default_ctor || need_copy_ctor)
a68ab351
JJ
3641 {
3642 if (need_default_ctor)
ac177431 3643 t = get_default_ctor (type);
a68ab351 3644 else
ac177431
JM
3645 t = get_copy_ctor (type);
3646
3647 if (t && !trivial_fn_p (t))
3648 TREE_VEC_ELT (info, 0) = t;
a68ab351
JJ
3649 }
3650
3651 if ((need_default_ctor || need_copy_ctor)
3652 && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
ac177431 3653 TREE_VEC_ELT (info, 1) = get_dtor (type);
a68ab351 3654
ac177431 3655 if (need_copy_assignment)
a68ab351 3656 {
ac177431
JM
3657 t = get_copy_assign (type);
3658
3659 if (t && !trivial_fn_p (t))
3660 TREE_VEC_ELT (info, 2) = t;
a68ab351
JJ
3661 }
3662
3663 return errorcount != save_errorcount;
3664}
3665
1799e5d5
RH
3666/* For all elements of CLAUSES, validate them vs OpenMP constraints.
3667 Remove any elements from the list that are invalid. */
3668
3669tree
3670finish_omp_clauses (tree clauses)
3671{
3672 bitmap_head generic_head, firstprivate_head, lastprivate_head;
3673 tree c, t, *pc = &clauses;
3674 const char *name;
3675
3676 bitmap_obstack_initialize (NULL);
3677 bitmap_initialize (&generic_head, &bitmap_default_obstack);
3678 bitmap_initialize (&firstprivate_head, &bitmap_default_obstack);
3679 bitmap_initialize (&lastprivate_head, &bitmap_default_obstack);
3680
3681 for (pc = &clauses, c = clauses; c ; c = *pc)
3682 {
3683 bool remove = false;
3684
3685 switch (OMP_CLAUSE_CODE (c))
3686 {
3687 case OMP_CLAUSE_SHARED:
3688 name = "shared";
3689 goto check_dup_generic;
3690 case OMP_CLAUSE_PRIVATE:
3691 name = "private";
3692 goto check_dup_generic;
3693 case OMP_CLAUSE_REDUCTION:
3694 name = "reduction";
3695 goto check_dup_generic;
3696 case OMP_CLAUSE_COPYPRIVATE:
3697 name = "copyprivate";
3698 goto check_dup_generic;
3699 case OMP_CLAUSE_COPYIN:
3700 name = "copyin";
3701 goto check_dup_generic;
3702 check_dup_generic:
3703 t = OMP_CLAUSE_DECL (c);
3704 if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3705 {
3706 if (processing_template_decl)
3707 break;
76dc15d4
JJ
3708 if (DECL_P (t))
3709 error ("%qD is not a variable in clause %qs", t, name);
3710 else
3711 error ("%qE is not a variable in clause %qs", t, name);
1799e5d5
RH
3712 remove = true;
3713 }
3714 else if (bitmap_bit_p (&generic_head, DECL_UID (t))
3715 || bitmap_bit_p (&firstprivate_head, DECL_UID (t))
3716 || bitmap_bit_p (&lastprivate_head, DECL_UID (t)))
3717 {
76dc15d4 3718 error ("%qD appears more than once in data clauses", t);
1799e5d5
RH
3719 remove = true;
3720 }
3721 else
3722 bitmap_set_bit (&generic_head, DECL_UID (t));
3723 break;
3724
3725 case OMP_CLAUSE_FIRSTPRIVATE:
3726 t = OMP_CLAUSE_DECL (c);
3727 if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3728 {
3729 if (processing_template_decl)
3730 break;
85b20612
JJ
3731 if (DECL_P (t))
3732 error ("%qD is not a variable in clause %<firstprivate%>", t);
3733 else
3734 error ("%qE is not a variable in clause %<firstprivate%>", t);
1799e5d5
RH
3735 remove = true;
3736 }
3737 else if (bitmap_bit_p (&generic_head, DECL_UID (t))
3738 || bitmap_bit_p (&firstprivate_head, DECL_UID (t)))
3739 {
85b20612 3740 error ("%qD appears more than once in data clauses", t);
1799e5d5
RH
3741 remove = true;
3742 }
3743 else
3744 bitmap_set_bit (&firstprivate_head, DECL_UID (t));
3745 break;
3746
3747 case OMP_CLAUSE_LASTPRIVATE:
3748 t = OMP_CLAUSE_DECL (c);
3749 if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3750 {
3751 if (processing_template_decl)
3752 break;
85b20612
JJ
3753 if (DECL_P (t))
3754 error ("%qD is not a variable in clause %<lastprivate%>", t);
3755 else
3756 error ("%qE is not a variable in clause %<lastprivate%>", t);
1799e5d5
RH
3757 remove = true;
3758 }
3759 else if (bitmap_bit_p (&generic_head, DECL_UID (t))
3760 || bitmap_bit_p (&lastprivate_head, DECL_UID (t)))
3761 {
85b20612 3762 error ("%qD appears more than once in data clauses", t);
1799e5d5
RH
3763 remove = true;
3764 }
3765 else
3766 bitmap_set_bit (&lastprivate_head, DECL_UID (t));
3767 break;
3768
3769 case OMP_CLAUSE_IF:
3770 t = OMP_CLAUSE_IF_EXPR (c);
3771 t = maybe_convert_cond (t);
3772 if (t == error_mark_node)
3773 remove = true;
3774 OMP_CLAUSE_IF_EXPR (c) = t;
3775 break;
3776
3777 case OMP_CLAUSE_NUM_THREADS:
3778 t = OMP_CLAUSE_NUM_THREADS_EXPR (c);
3779 if (t == error_mark_node)
3780 remove = true;
6e684eee
JJ
3781 else if (!type_dependent_expression_p (t)
3782 && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
1799e5d5
RH
3783 {
3784 error ("num_threads expression must be integral");
3785 remove = true;
3786 }
3787 break;
3788
3789 case OMP_CLAUSE_SCHEDULE:
3790 t = OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c);
3791 if (t == NULL)
3792 ;
3793 else if (t == error_mark_node)
3794 remove = true;
6e684eee
JJ
3795 else if (!type_dependent_expression_p (t)
3796 && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
1799e5d5
RH
3797 {
3798 error ("schedule chunk size expression must be integral");
3799 remove = true;
3800 }
3801 break;
3802
3803 case OMP_CLAUSE_NOWAIT:
3804 case OMP_CLAUSE_ORDERED:
3805 case OMP_CLAUSE_DEFAULT:
a68ab351
JJ
3806 case OMP_CLAUSE_UNTIED:
3807 case OMP_CLAUSE_COLLAPSE:
1799e5d5
RH
3808 break;
3809
3810 default:
3811 gcc_unreachable ();
3812 }
3813
3814 if (remove)
3815 *pc = OMP_CLAUSE_CHAIN (c);
3816 else
3817 pc = &OMP_CLAUSE_CHAIN (c);
3818 }
3819
3820 for (pc = &clauses, c = clauses; c ; c = *pc)
3821 {
81f40b79 3822 enum omp_clause_code c_kind = OMP_CLAUSE_CODE (c);
1799e5d5
RH
3823 bool remove = false;
3824 bool need_complete_non_reference = false;
3825 bool need_default_ctor = false;
3826 bool need_copy_ctor = false;
3827 bool need_copy_assignment = false;
3828 bool need_implicitly_determined = false;
3829 tree type, inner_type;
3830
3831 switch (c_kind)
3832 {
3833 case OMP_CLAUSE_SHARED:
3834 name = "shared";
3835 need_implicitly_determined = true;
3836 break;
3837 case OMP_CLAUSE_PRIVATE:
3838 name = "private";
3839 need_complete_non_reference = true;
3840 need_default_ctor = true;
3841 need_implicitly_determined = true;
3842 break;
3843 case OMP_CLAUSE_FIRSTPRIVATE:
3844 name = "firstprivate";
3845 need_complete_non_reference = true;
3846 need_copy_ctor = true;
3847 need_implicitly_determined = true;
3848 break;
3849 case OMP_CLAUSE_LASTPRIVATE:
3850 name = "lastprivate";
3851 need_complete_non_reference = true;
3852 need_copy_assignment = true;
3853 need_implicitly_determined = true;
3854 break;
3855 case OMP_CLAUSE_REDUCTION:
3856 name = "reduction";
3857 need_implicitly_determined = true;
3858 break;
3859 case OMP_CLAUSE_COPYPRIVATE:
3860 name = "copyprivate";
3861 need_copy_assignment = true;
3862 break;
3863 case OMP_CLAUSE_COPYIN:
3864 name = "copyin";
3865 need_copy_assignment = true;
3866 break;
3867 default:
3868 pc = &OMP_CLAUSE_CHAIN (c);
3869 continue;
3870 }
3871
3872 t = OMP_CLAUSE_DECL (c);
3873 if (processing_template_decl
3874 && TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3875 {
3876 pc = &OMP_CLAUSE_CHAIN (c);
3877 continue;
3878 }
3879
3880 switch (c_kind)
3881 {
3882 case OMP_CLAUSE_LASTPRIVATE:
3883 if (!bitmap_bit_p (&firstprivate_head, DECL_UID (t)))
3884 need_default_ctor = true;
3885 break;
3886
3887 case OMP_CLAUSE_REDUCTION:
3888 if (AGGREGATE_TYPE_P (TREE_TYPE (t))
3889 || POINTER_TYPE_P (TREE_TYPE (t)))
3890 {
3891 error ("%qE has invalid type for %<reduction%>", t);
3892 remove = true;
3893 }
3894 else if (FLOAT_TYPE_P (TREE_TYPE (t)))
3895 {
3896 enum tree_code r_code = OMP_CLAUSE_REDUCTION_CODE (c);
3897 switch (r_code)
3898 {
3899 case PLUS_EXPR:
3900 case MULT_EXPR:
3901 case MINUS_EXPR:
3902 break;
3903 default:
3904 error ("%qE has invalid type for %<reduction(%s)%>",
3905 t, operator_name_info[r_code].name);
3906 remove = true;
3907 }
3908 }
3909 break;
3910
3911 case OMP_CLAUSE_COPYIN:
3912 if (TREE_CODE (t) != VAR_DECL || !DECL_THREAD_LOCAL_P (t))
3913 {
3914 error ("%qE must be %<threadprivate%> for %<copyin%>", t);
3915 remove = true;
3916 }
3917 break;
3918
3919 default:
3920 break;
3921 }
3922
3923 if (need_complete_non_reference)
3924 {
3925 t = require_complete_type (t);
3926 if (t == error_mark_node)
3927 remove = true;
3928 else if (TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE)
3929 {
3930 error ("%qE has reference type for %qs", t, name);
3931 remove = true;
3932 }
3933 }
3934 if (need_implicitly_determined)
3935 {
3936 const char *share_name = NULL;
3937
3938 if (TREE_CODE (t) == VAR_DECL && DECL_THREAD_LOCAL_P (t))
3939 share_name = "threadprivate";
3940 else switch (cxx_omp_predetermined_sharing (t))
3941 {
3942 case OMP_CLAUSE_DEFAULT_UNSPECIFIED:
3943 break;
3944 case OMP_CLAUSE_DEFAULT_SHARED:
3945 share_name = "shared";
3946 break;
3947 case OMP_CLAUSE_DEFAULT_PRIVATE:
3948 share_name = "private";
3949 break;
3950 default:
3951 gcc_unreachable ();
3952 }
3953 if (share_name)
3954 {
3955 error ("%qE is predetermined %qs for %qs",
3956 t, share_name, name);
3957 remove = true;
3958 }
3959 }
3960
3961 /* We're interested in the base element, not arrays. */
3962 inner_type = type = TREE_TYPE (t);
3963 while (TREE_CODE (inner_type) == ARRAY_TYPE)
3964 inner_type = TREE_TYPE (inner_type);
3965
84dc00e8 3966 /* Check for special function availability by building a call to one.
1799e5d5
RH
3967 Save the results, because later we won't be in the right context
3968 for making these queries. */
3969 if (CLASS_TYPE_P (inner_type)
6f719560 3970 && (need_default_ctor || need_copy_ctor || need_copy_assignment)
a68ab351
JJ
3971 && !type_dependent_expression_p (t)
3972 && cxx_omp_create_clause_info (c, inner_type, need_default_ctor,
3973 need_copy_ctor, need_copy_assignment))
3974 remove = true;
1799e5d5
RH
3975
3976 if (remove)
3977 *pc = OMP_CLAUSE_CHAIN (c);
3978 else
3979 pc = &OMP_CLAUSE_CHAIN (c);
3980 }
3981
3982 bitmap_obstack_release (NULL);
3983 return clauses;
3984}
3985
3986/* For all variables in the tree_list VARS, mark them as thread local. */
3987
3988void
3989finish_omp_threadprivate (tree vars)
3990{
3991 tree t;
3992
3993 /* Mark every variable in VARS to be assigned thread local storage. */
3994 for (t = vars; t; t = TREE_CHAIN (t))
3995 {
3996 tree v = TREE_PURPOSE (t);
3997
edb6000e
JJ
3998 if (error_operand_p (v))
3999 ;
4000 else if (TREE_CODE (v) != VAR_DECL)
4001 error ("%<threadprivate%> %qD is not file, namespace "
4002 "or block scope variable", v);
1799e5d5
RH
4003 /* If V had already been marked threadprivate, it doesn't matter
4004 whether it had been used prior to this point. */
edb6000e 4005 else if (TREE_USED (v)
1799e5d5
RH
4006 && (DECL_LANG_SPECIFIC (v) == NULL
4007 || !CP_DECL_THREADPRIVATE_P (v)))
4008 error ("%qE declared %<threadprivate%> after first use", v);
4009 else if (! TREE_STATIC (v) && ! DECL_EXTERNAL (v))
4010 error ("automatic variable %qE cannot be %<threadprivate%>", v);
4011 else if (! COMPLETE_TYPE_P (TREE_TYPE (v)))
4012 error ("%<threadprivate%> %qE has incomplete type", v);
a68ab351
JJ
4013 else if (TREE_STATIC (v) && TYPE_P (CP_DECL_CONTEXT (v))
4014 && CP_DECL_CONTEXT (v) != current_class_type)
4015 error ("%<threadprivate%> %qE directive not "
4016 "in %qT definition", v, CP_DECL_CONTEXT (v));
1799e5d5
RH
4017 else
4018 {
4019 /* Allocate a LANG_SPECIFIC structure for V, if needed. */
4020 if (DECL_LANG_SPECIFIC (v) == NULL)
4021 {
4022 retrofit_lang_decl (v);
4023
4024 /* Make sure that DECL_DISCRIMINATOR_P continues to be true
4025 after the allocation of the lang_decl structure. */
4026 if (DECL_DISCRIMINATOR_P (v))
b97e8a14 4027 DECL_LANG_SPECIFIC (v)->u.base.u2sel = 1;
1799e5d5
RH
4028 }
4029
4030 if (! DECL_THREAD_LOCAL_P (v))
4031 {
4032 DECL_TLS_MODEL (v) = decl_default_tls_model (v);
4033 /* If rtl has been already set for this var, call
4034 make_decl_rtl once again, so that encode_section_info
4035 has a chance to look at the new decl flags. */
4036 if (DECL_RTL_SET_P (v))
4037 make_decl_rtl (v);
4038 }
4039 CP_DECL_THREADPRIVATE_P (v) = 1;
4040 }
4041 }
4042}
4043
4044/* Build an OpenMP structured block. */
4045
4046tree
4047begin_omp_structured_block (void)
4048{
4049 return do_pushlevel (sk_omp);
4050}
4051
4052tree
4053finish_omp_structured_block (tree block)
4054{
4055 return do_poplevel (block);
4056}
4057
84dc00e8 4058/* Similarly, except force the retention of the BLOCK. */
1799e5d5
RH
4059
4060tree
4061begin_omp_parallel (void)
4062{
4063 keep_next_level (true);
4064 return begin_omp_structured_block ();
4065}
4066
4067tree
4068finish_omp_parallel (tree clauses, tree body)
4069{
4070 tree stmt;
4071
4072 body = finish_omp_structured_block (body);
b850de4f 4073
1799e5d5
RH
4074 stmt = make_node (OMP_PARALLEL);
4075 TREE_TYPE (stmt) = void_type_node;
4076 OMP_PARALLEL_CLAUSES (stmt) = clauses;
4077 OMP_PARALLEL_BODY (stmt) = body;
54f7877c 4078
1799e5d5
RH
4079 return add_stmt (stmt);
4080}
4081
a68ab351
JJ
4082tree
4083begin_omp_task (void)
4084{
4085 keep_next_level (true);
4086 return begin_omp_structured_block ();
4087}
4088
4089tree
4090finish_omp_task (tree clauses, tree body)
4091{
4092 tree stmt;
4093
4094 body = finish_omp_structured_block (body);
4095
4096 stmt = make_node (OMP_TASK);
4097 TREE_TYPE (stmt) = void_type_node;
4098 OMP_TASK_CLAUSES (stmt) = clauses;
4099 OMP_TASK_BODY (stmt) = body;
4100
4101 return add_stmt (stmt);
4102}
4103
4104/* Helper function for finish_omp_for. Convert Ith random access iterator
4105 into integral iterator. Return FALSE if successful. */
4106
4107static bool
4108handle_omp_for_class_iterator (int i, location_t locus, tree declv, tree initv,
4109 tree condv, tree incrv, tree *body,
4110 tree *pre_body, tree clauses)
4111{
4112 tree diff, iter_init, iter_incr = NULL, last;
4113 tree incr_var = NULL, orig_pre_body, orig_body, c;
4114 tree decl = TREE_VEC_ELT (declv, i);
4115 tree init = TREE_VEC_ELT (initv, i);
4116 tree cond = TREE_VEC_ELT (condv, i);
4117 tree incr = TREE_VEC_ELT (incrv, i);
4118 tree iter = decl;
4119 location_t elocus = locus;
4120
4121 if (init && EXPR_HAS_LOCATION (init))
4122 elocus = EXPR_LOCATION (init);
4123
4124 switch (TREE_CODE (cond))
4125 {
4126 case GT_EXPR:
4127 case GE_EXPR:
4128 case LT_EXPR:
4129 case LE_EXPR:
c5cdb03f
JJ
4130 if (TREE_OPERAND (cond, 1) == iter)
4131 cond = build2 (swap_tree_comparison (TREE_CODE (cond)),
4132 TREE_TYPE (cond), iter, TREE_OPERAND (cond, 0));
a68ab351
JJ
4133 if (TREE_OPERAND (cond, 0) != iter)
4134 cond = error_mark_node;
4135 else
4136 {
4137 tree tem = build_x_binary_op (TREE_CODE (cond), iter, ERROR_MARK,
4138 TREE_OPERAND (cond, 1), ERROR_MARK,
4139 NULL, tf_warning_or_error);
4140 if (error_operand_p (tem))
4141 return true;
4142 }
4143 break;
4144 default:
4145 cond = error_mark_node;
4146 break;
4147 }
4148 if (cond == error_mark_node)
4149 {
69bc6bff 4150 error_at (elocus, "invalid controlling predicate");
a68ab351
JJ
4151 return true;
4152 }
4153 diff = build_x_binary_op (MINUS_EXPR, TREE_OPERAND (cond, 1),
4154 ERROR_MARK, iter, ERROR_MARK, NULL,
4155 tf_warning_or_error);
4156 if (error_operand_p (diff))
4157 return true;
4158 if (TREE_CODE (TREE_TYPE (diff)) != INTEGER_TYPE)
4159 {
69bc6bff
MLI
4160 error_at (elocus, "difference between %qE and %qD does not have integer type",
4161 TREE_OPERAND (cond, 1), iter);
a68ab351
JJ
4162 return true;
4163 }
4164
4165 switch (TREE_CODE (incr))
4166 {
4167 case PREINCREMENT_EXPR:
4168 case PREDECREMENT_EXPR:
4169 case POSTINCREMENT_EXPR:
4170 case POSTDECREMENT_EXPR:
4171 if (TREE_OPERAND (incr, 0) != iter)
4172 {
4173 incr = error_mark_node;
4174 break;
4175 }
4176 iter_incr = build_x_unary_op (TREE_CODE (incr), iter,
4177 tf_warning_or_error);
4178 if (error_operand_p (iter_incr))
4179 return true;
4180 else if (TREE_CODE (incr) == PREINCREMENT_EXPR
4181 || TREE_CODE (incr) == POSTINCREMENT_EXPR)
4182 incr = integer_one_node;
4183 else
4184 incr = integer_minus_one_node;
4185 break;
4186 case MODIFY_EXPR:
4187 if (TREE_OPERAND (incr, 0) != iter)
4188 incr = error_mark_node;
4189 else if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
4190 || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
4191 {
4192 tree rhs = TREE_OPERAND (incr, 1);
4193 if (TREE_OPERAND (rhs, 0) == iter)
4194 {
4195 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (rhs, 1)))
4196 != INTEGER_TYPE)
4197 incr = error_mark_node;
4198 else
4199 {
4200 iter_incr = build_x_modify_expr (iter, TREE_CODE (rhs),
4201 TREE_OPERAND (rhs, 1),
4202 tf_warning_or_error);
4203 if (error_operand_p (iter_incr))
4204 return true;
4205 incr = TREE_OPERAND (rhs, 1);
4206 incr = cp_convert (TREE_TYPE (diff), incr);
4207 if (TREE_CODE (rhs) == MINUS_EXPR)
4208 {
4209 incr = build1 (NEGATE_EXPR, TREE_TYPE (diff), incr);
4210 incr = fold_if_not_in_template (incr);
4211 }
4212 if (TREE_CODE (incr) != INTEGER_CST
4213 && (TREE_CODE (incr) != NOP_EXPR
4214 || (TREE_CODE (TREE_OPERAND (incr, 0))
4215 != INTEGER_CST)))
4216 iter_incr = NULL;
4217 }
4218 }
4219 else if (TREE_OPERAND (rhs, 1) == iter)
4220 {
4221 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (rhs, 0))) != INTEGER_TYPE
4222 || TREE_CODE (rhs) != PLUS_EXPR)
4223 incr = error_mark_node;
4224 else
4225 {
4226 iter_incr = build_x_binary_op (PLUS_EXPR,
4227 TREE_OPERAND (rhs, 0),
4228 ERROR_MARK, iter,
4229 ERROR_MARK, NULL,
4230 tf_warning_or_error);
4231 if (error_operand_p (iter_incr))
4232 return true;
4233 iter_incr = build_x_modify_expr (iter, NOP_EXPR,
4234 iter_incr,
4235 tf_warning_or_error);
4236 if (error_operand_p (iter_incr))
4237 return true;
4238 incr = TREE_OPERAND (rhs, 0);
4239 iter_incr = NULL;
4240 }
4241 }
4242 else
4243 incr = error_mark_node;
4244 }
4245 else
4246 incr = error_mark_node;
4247 break;
4248 default:
4249 incr = error_mark_node;
4250 break;
4251 }
4252
4253 if (incr == error_mark_node)
4254 {
69bc6bff 4255 error_at (elocus, "invalid increment expression");
a68ab351
JJ
4256 return true;
4257 }
4258
4259 incr = cp_convert (TREE_TYPE (diff), incr);
4260 for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
4261 if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE
4262 && OMP_CLAUSE_DECL (c) == iter)
4263 break;
4264
4265 decl = create_temporary_var (TREE_TYPE (diff));
4266 pushdecl (decl);
4267 add_decl_expr (decl);
4268 last = create_temporary_var (TREE_TYPE (diff));
4269 pushdecl (last);
4270 add_decl_expr (last);
4271 if (c && iter_incr == NULL)
4272 {
4273 incr_var = create_temporary_var (TREE_TYPE (diff));
4274 pushdecl (incr_var);
4275 add_decl_expr (incr_var);
4276 }
4277 gcc_assert (stmts_are_full_exprs_p ());
4278
4279 orig_pre_body = *pre_body;
4280 *pre_body = push_stmt_list ();
4281 if (orig_pre_body)
4282 add_stmt (orig_pre_body);
4283 if (init != NULL)
4284 finish_expr_stmt (build_x_modify_expr (iter, NOP_EXPR, init,
4285 tf_warning_or_error));
4286 init = build_int_cst (TREE_TYPE (diff), 0);
4287 if (c && iter_incr == NULL)
4288 {
4289 finish_expr_stmt (build_x_modify_expr (incr_var, NOP_EXPR,
4290 incr, tf_warning_or_error));
4291 incr = incr_var;
4292 iter_incr = build_x_modify_expr (iter, PLUS_EXPR, incr,
4293 tf_warning_or_error);
4294 }
4295 finish_expr_stmt (build_x_modify_expr (last, NOP_EXPR, init,
4296 tf_warning_or_error));
4297 *pre_body = pop_stmt_list (*pre_body);
4298
ba47d38d
AH
4299 cond = cp_build_binary_op (elocus,
4300 TREE_CODE (cond), decl, diff,
a68ab351 4301 tf_warning_or_error);
32e8bb8e 4302 incr = build_modify_expr (elocus, decl, NULL_TREE, PLUS_EXPR,
c2255bc4 4303 elocus, incr, NULL_TREE);
a68ab351
JJ
4304
4305 orig_body = *body;
4306 *body = push_stmt_list ();
4307 iter_init = build2 (MINUS_EXPR, TREE_TYPE (diff), decl, last);
4308 iter_init = build_x_modify_expr (iter, PLUS_EXPR, iter_init,
4309 tf_warning_or_error);
4310 iter_init = build1 (NOP_EXPR, void_type_node, iter_init);
4311 finish_expr_stmt (iter_init);
4312 finish_expr_stmt (build_x_modify_expr (last, NOP_EXPR, decl,
4313 tf_warning_or_error));
4314 add_stmt (orig_body);
4315 *body = pop_stmt_list (*body);
4316
4317 if (c)
4318 {
4319 OMP_CLAUSE_LASTPRIVATE_STMT (c) = push_stmt_list ();
4320 finish_expr_stmt (iter_incr);
4321 OMP_CLAUSE_LASTPRIVATE_STMT (c)
4322 = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (c));
4323 }
4324
4325 TREE_VEC_ELT (declv, i) = decl;
4326 TREE_VEC_ELT (initv, i) = init;
4327 TREE_VEC_ELT (condv, i) = cond;
4328 TREE_VEC_ELT (incrv, i) = incr;
4329
4330 return false;
4331}
4332
1799e5d5
RH
4333/* Build and validate an OMP_FOR statement. CLAUSES, BODY, COND, INCR
4334 are directly for their associated operands in the statement. DECL
4335 and INIT are a combo; if DECL is NULL then INIT ought to be a
4336 MODIFY_EXPR, and the DECL should be extracted. PRE_BODY are
4337 optional statements that need to go before the loop into its
4338 sk_omp scope. */
4339
4340tree
a68ab351
JJ
4341finish_omp_for (location_t locus, tree declv, tree initv, tree condv,
4342 tree incrv, tree body, tree pre_body, tree clauses)
4343{
4344 tree omp_for = NULL, orig_incr = NULL;
4345 tree decl, init, cond, incr;
4346 location_t elocus;
4347 int i;
4348
4349 gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (initv));
4350 gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (condv));
4351 gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (incrv));
4352 for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
4353 {
4354 decl = TREE_VEC_ELT (declv, i);
4355 init = TREE_VEC_ELT (initv, i);
4356 cond = TREE_VEC_ELT (condv, i);
4357 incr = TREE_VEC_ELT (incrv, i);
4358 elocus = locus;
4359
4360 if (decl == NULL)
4361 {
4362 if (init != NULL)
4363 switch (TREE_CODE (init))
1799e5d5 4364 {
a68ab351 4365 case MODIFY_EXPR:
1799e5d5 4366 decl = TREE_OPERAND (init, 0);
a68ab351
JJ
4367 init = TREE_OPERAND (init, 1);
4368 break;
4369 case MODOP_EXPR:
4370 if (TREE_CODE (TREE_OPERAND (init, 1)) == NOP_EXPR)
4371 {
4372 decl = TREE_OPERAND (init, 0);
4373 init = TREE_OPERAND (init, 2);
4374 }
4375 break;
4376 default:
4377 break;
1799e5d5 4378 }
1799e5d5 4379
a68ab351
JJ
4380 if (decl == NULL)
4381 {
69bc6bff
MLI
4382 error_at (locus,
4383 "expected iteration declaration or initialization");
a68ab351
JJ
4384 return NULL;
4385 }
1799e5d5 4386 }
1799e5d5 4387
a68ab351
JJ
4388 if (init && EXPR_HAS_LOCATION (init))
4389 elocus = EXPR_LOCATION (init);
1799e5d5
RH
4390
4391 if (cond == NULL)
4392 {
69bc6bff 4393 error_at (elocus, "missing controlling predicate");
1799e5d5
RH
4394 return NULL;
4395 }
4396
4397 if (incr == NULL)
4398 {
69bc6bff 4399 error_at (elocus, "missing increment expression");
1799e5d5
RH
4400 return NULL;
4401 }
4402
a68ab351
JJ
4403 TREE_VEC_ELT (declv, i) = decl;
4404 TREE_VEC_ELT (initv, i) = init;
4405 }
4406
4407 if (dependent_omp_for_p (declv, initv, condv, incrv))
4408 {
4409 tree stmt;
4410
1799e5d5
RH
4411 stmt = make_node (OMP_FOR);
4412
a68ab351
JJ
4413 for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
4414 {
4415 /* This is really just a place-holder. We'll be decomposing this
4416 again and going through the cp_build_modify_expr path below when
4417 we instantiate the thing. */
4418 TREE_VEC_ELT (initv, i)
4419 = build2 (MODIFY_EXPR, void_type_node, TREE_VEC_ELT (declv, i),
4420 TREE_VEC_ELT (initv, i));
4421 }
1799e5d5
RH
4422
4423 TREE_TYPE (stmt) = void_type_node;
a68ab351
JJ
4424 OMP_FOR_INIT (stmt) = initv;
4425 OMP_FOR_COND (stmt) = condv;
4426 OMP_FOR_INCR (stmt) = incrv;
1799e5d5
RH
4427 OMP_FOR_BODY (stmt) = body;
4428 OMP_FOR_PRE_BODY (stmt) = pre_body;
a68ab351 4429 OMP_FOR_CLAUSES (stmt) = clauses;
1799e5d5
RH
4430
4431 SET_EXPR_LOCATION (stmt, locus);
4432 return add_stmt (stmt);
4433 }
4434
a68ab351
JJ
4435 if (processing_template_decl)
4436 orig_incr = make_tree_vec (TREE_VEC_LENGTH (incrv));
1799e5d5 4437
a68ab351 4438 for (i = 0; i < TREE_VEC_LENGTH (declv); )
dadb19e0 4439 {
a68ab351
JJ
4440 decl = TREE_VEC_ELT (declv, i);
4441 init = TREE_VEC_ELT (initv, i);
4442 cond = TREE_VEC_ELT (condv, i);
4443 incr = TREE_VEC_ELT (incrv, i);
4444 if (orig_incr)
4445 TREE_VEC_ELT (orig_incr, i) = incr;
4446 elocus = locus;
4447
4448 if (init && EXPR_HAS_LOCATION (init))
dadb19e0 4449 elocus = EXPR_LOCATION (init);
dadb19e0 4450
a68ab351
JJ
4451 if (!DECL_P (decl))
4452 {
69bc6bff 4453 error_at (elocus, "expected iteration declaration or initialization");
a68ab351
JJ
4454 return NULL;
4455 }
969c111d 4456
a68ab351
JJ
4457 if (incr && TREE_CODE (incr) == MODOP_EXPR)
4458 {
4459 if (orig_incr)
4460 TREE_VEC_ELT (orig_incr, i) = incr;
4461 incr = cp_build_modify_expr (TREE_OPERAND (incr, 0),
4462 TREE_CODE (TREE_OPERAND (incr, 1)),
4463 TREE_OPERAND (incr, 2),
4464 tf_warning_or_error);
4465 }
4466
4467 if (CLASS_TYPE_P (TREE_TYPE (decl)))
4468 {
4469 if (handle_omp_for_class_iterator (i, locus, declv, initv, condv,
4470 incrv, &body, &pre_body, clauses))
4471 return NULL;
4472 continue;
4473 }
4474
4475 if (!INTEGRAL_TYPE_P (TREE_TYPE (decl))
4476 && TREE_CODE (TREE_TYPE (decl)) != POINTER_TYPE)
4477 {
69bc6bff 4478 error_at (elocus, "invalid type for iteration variable %qE", decl);
a68ab351
JJ
4479 return NULL;
4480 }
969c111d 4481
b2ebd268 4482 if (!processing_template_decl)
8569b2d0
JJ
4483 {
4484 init = fold_build_cleanup_point_expr (TREE_TYPE (init), init);
4485 init = cp_build_modify_expr (decl, NOP_EXPR, init, tf_warning_or_error);
4486 }
4487 else
4488 init = build2 (MODIFY_EXPR, void_type_node, decl, init);
e4ebaef3
JJ
4489 if (cond
4490 && TREE_SIDE_EFFECTS (cond)
4491 && COMPARISON_CLASS_P (cond)
4492 && !processing_template_decl)
a68ab351 4493 {
e4ebaef3
JJ
4494 tree t = TREE_OPERAND (cond, 0);
4495 if (TREE_SIDE_EFFECTS (t)
4496 && t != decl
4497 && (TREE_CODE (t) != NOP_EXPR
4498 || TREE_OPERAND (t, 0) != decl))
4499 TREE_OPERAND (cond, 0)
4500 = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
a68ab351 4501
e4ebaef3
JJ
4502 t = TREE_OPERAND (cond, 1);
4503 if (TREE_SIDE_EFFECTS (t)
4504 && t != decl
4505 && (TREE_CODE (t) != NOP_EXPR
4506 || TREE_OPERAND (t, 0) != decl))
4507 TREE_OPERAND (cond, 1)
a68ab351
JJ
4508 = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4509 }
4510 if (decl == error_mark_node || init == error_mark_node)
4511 return NULL;
4512
4513 TREE_VEC_ELT (declv, i) = decl;
4514 TREE_VEC_ELT (initv, i) = init;
4515 TREE_VEC_ELT (condv, i) = cond;
4516 TREE_VEC_ELT (incrv, i) = incr;
4517 i++;
969c111d 4518 }
a68ab351
JJ
4519
4520 if (IS_EMPTY_STMT (pre_body))
4521 pre_body = NULL;
4522
4523 omp_for = c_finish_omp_for (locus, declv, initv, condv, incrv,
4524 body, pre_body);
4525
4526 if (omp_for == NULL)
4527 return NULL;
4528
4529 for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INCR (omp_for)); i++)
969c111d 4530 {
e4ebaef3
JJ
4531 decl = TREE_OPERAND (TREE_VEC_ELT (OMP_FOR_INIT (omp_for), i), 0);
4532 incr = TREE_VEC_ELT (OMP_FOR_INCR (omp_for), i);
969c111d 4533
a68ab351
JJ
4534 if (TREE_CODE (incr) != MODIFY_EXPR)
4535 continue;
4536
4537 if (TREE_SIDE_EFFECTS (TREE_OPERAND (incr, 1))
e4ebaef3
JJ
4538 && BINARY_CLASS_P (TREE_OPERAND (incr, 1))
4539 && !processing_template_decl)
a68ab351 4540 {
e4ebaef3
JJ
4541 tree t = TREE_OPERAND (TREE_OPERAND (incr, 1), 0);
4542 if (TREE_SIDE_EFFECTS (t)
4543 && t != decl
4544 && (TREE_CODE (t) != NOP_EXPR
4545 || TREE_OPERAND (t, 0) != decl))
4546 TREE_OPERAND (TREE_OPERAND (incr, 1), 0)
4547 = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
a68ab351 4548
e4ebaef3
JJ
4549 t = TREE_OPERAND (TREE_OPERAND (incr, 1), 1);
4550 if (TREE_SIDE_EFFECTS (t)
4551 && t != decl
4552 && (TREE_CODE (t) != NOP_EXPR
4553 || TREE_OPERAND (t, 0) != decl))
4554 TREE_OPERAND (TREE_OPERAND (incr, 1), 1)
4555 = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
a68ab351
JJ
4556 }
4557
4558 if (orig_incr)
4559 TREE_VEC_ELT (OMP_FOR_INCR (omp_for), i) = TREE_VEC_ELT (orig_incr, i);
969c111d 4560 }
a68ab351
JJ
4561 if (omp_for != NULL)
4562 OMP_FOR_CLAUSES (omp_for) = clauses;
969c111d 4563 return omp_for;
1799e5d5
RH
4564}
4565
4566void
4567finish_omp_atomic (enum tree_code code, tree lhs, tree rhs)
4568{
239371f9
JJ
4569 tree orig_lhs;
4570 tree orig_rhs;
4571 bool dependent_p;
e6bd5565
MM
4572 tree stmt;
4573
239371f9
JJ
4574 orig_lhs = lhs;
4575 orig_rhs = rhs;
4576 dependent_p = false;
4577 stmt = NULL_TREE;
4578
4579 /* Even in a template, we can detect invalid uses of the atomic
4580 pragma if neither LHS nor RHS is type-dependent. */
4581 if (processing_template_decl)
e6bd5565 4582 {
239371f9
JJ
4583 dependent_p = (type_dependent_expression_p (lhs)
4584 || type_dependent_expression_p (rhs));
4585 if (!dependent_p)
e6bd5565
MM
4586 {
4587 lhs = build_non_dependent_expr (lhs);
4588 rhs = build_non_dependent_expr (rhs);
4589 }
239371f9
JJ
4590 }
4591 if (!dependent_p)
4592 {
c2255bc4 4593 stmt = c_finish_omp_atomic (input_location, code, lhs, rhs);
239371f9
JJ
4594 if (stmt == error_mark_node)
4595 return;
e6bd5565 4596 }
239371f9
JJ
4597 if (processing_template_decl)
4598 stmt = build2 (OMP_ATOMIC, void_type_node, integer_zero_node,
4599 build2 (code, void_type_node, orig_lhs, orig_rhs));
4600 add_stmt (stmt);
1799e5d5
RH
4601}
4602
4603void
4604finish_omp_barrier (void)
4605{
4606 tree fn = built_in_decls[BUILT_IN_GOMP_BARRIER];
c166b898
ILT
4607 VEC(tree,gc) *vec = make_tree_vector ();
4608 tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
4609 release_tree_vector (vec);
1799e5d5
RH
4610 finish_expr_stmt (stmt);
4611}
4612
4613void
4614finish_omp_flush (void)
4615{
4616 tree fn = built_in_decls[BUILT_IN_SYNCHRONIZE];
c166b898
ILT
4617 VEC(tree,gc) *vec = make_tree_vector ();
4618 tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
4619 release_tree_vector (vec);
1799e5d5
RH
4620 finish_expr_stmt (stmt);
4621}
4622
a68ab351
JJ
4623void
4624finish_omp_taskwait (void)
1799e5d5 4625{
a68ab351 4626 tree fn = built_in_decls[BUILT_IN_GOMP_TASKWAIT];
c166b898
ILT
4627 VEC(tree,gc) *vec = make_tree_vector ();
4628 tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
4629 release_tree_vector (vec);
a68ab351 4630 finish_expr_stmt (stmt);
1799e5d5
RH
4631}
4632\f
54f7877c 4633void
3a978d72 4634init_cp_semantics (void)
54f7877c 4635{
54f7877c 4636}
55a3debe
DG
4637\f
4638/* Build a STATIC_ASSERT for a static assertion with the condition
4639 CONDITION and the message text MESSAGE. LOCATION is the location
4640 of the static assertion in the source code. When MEMBER_P, this
4641 static assertion is a member of a class. */
4642void
4643finish_static_assert (tree condition, tree message, location_t location,
4644 bool member_p)
4645{
7b3e2d46
DG
4646 if (check_for_bare_parameter_packs (condition))
4647 condition = error_mark_node;
4648
55a3debe
DG
4649 if (type_dependent_expression_p (condition)
4650 || value_dependent_expression_p (condition))
4651 {
4652 /* We're in a template; build a STATIC_ASSERT and put it in
4653 the right place. */
4654 tree assertion;
4655
4656 assertion = make_node (STATIC_ASSERT);
4657 STATIC_ASSERT_CONDITION (assertion) = condition;
4658 STATIC_ASSERT_MESSAGE (assertion) = message;
4659 STATIC_ASSERT_SOURCE_LOCATION (assertion) = location;
4660
4661 if (member_p)
4662 maybe_add_class_template_decl_list (current_class_type,
4663 assertion,
4664 /*friend_p=*/0);
4665 else
4666 add_stmt (assertion);
4667
4668 return;
4669 }
4670
4671 /* Fold the expression and convert it to a boolean value. */
4672 condition = fold_non_dependent_expr (condition);
4673 condition = cp_convert (boolean_type_node, condition);
fa2200cb 4674 condition = maybe_constant_value (condition);
55a3debe
DG
4675
4676 if (TREE_CODE (condition) == INTEGER_CST && !integer_zerop (condition))
4677 /* Do nothing; the condition is satisfied. */
4678 ;
4679 else
4680 {
4681 location_t saved_loc = input_location;
4682
4683 input_location = location;
4684 if (TREE_CODE (condition) == INTEGER_CST
4685 && integer_zerop (condition))
4686 /* Report the error. */
4687 error ("static assertion failed: %E", message);
4688 else if (condition && condition != error_mark_node)
fa2200cb
JM
4689 {
4690 error ("non-constant condition for static assertion");
4691 cxx_constant_value (condition);
4692 }
55a3debe
DG
4693 input_location = saved_loc;
4694 }
4695}
3ad6a8e1 4696\f
4b4a42c4
JM
4697/* Returns the type of EXPR for cases where we can determine it even though
4698 EXPR is a type-dependent expression. */
a77f94e2
JM
4699
4700tree
4701describable_type (tree expr)
4702{
4703 tree type = NULL_TREE;
4704
a77f94e2
JM
4705 if (! type_dependent_expression_p (expr)
4706 && ! type_unknown_p (expr))
4707 {
aef8bce8 4708 type = unlowered_expr_type (expr);
a77f94e2
JM
4709 if (real_lvalue_p (expr))
4710 type = build_reference_type (type);
4711 }
a77f94e2
JM
4712
4713 if (type)
4714 return type;
4715
4716 switch (TREE_CODE (expr))
4717 {
4718 case VAR_DECL:
4719 case PARM_DECL:
4720 case RESULT_DECL:
4721 case FUNCTION_DECL:
4b4a42c4 4722 return TREE_TYPE (expr);
a77f94e2
JM
4723 break;
4724
4725 case NEW_EXPR:
4726 case CONST_DECL:
4727 case TEMPLATE_PARM_INDEX:
4728 case CAST_EXPR:
4729 case STATIC_CAST_EXPR:
4730 case REINTERPRET_CAST_EXPR:
4731 case CONST_CAST_EXPR:
4732 case DYNAMIC_CAST_EXPR:
4733 type = TREE_TYPE (expr);
4734 break;
4735
4736 case INDIRECT_REF:
4737 {
4738 tree ptrtype = describable_type (TREE_OPERAND (expr, 0));
4739 if (ptrtype && POINTER_TYPE_P (ptrtype))
4740 type = build_reference_type (TREE_TYPE (ptrtype));
4741 }
4742 break;
4743
4744 default:
4745 if (TREE_CODE_CLASS (TREE_CODE (expr)) == tcc_constant)
4746 type = TREE_TYPE (expr);
4747 break;
4748 }
4749
4750 if (type && type_uses_auto (type))
4751 return NULL_TREE;
4752 else
4753 return type;
4754}
4755
3ad6a8e1
DG
4756/* Implements the C++0x decltype keyword. Returns the type of EXPR,
4757 suitable for use as a type-specifier.
4758
4759 ID_EXPRESSION_OR_MEMBER_ACCESS_P is true when EXPR was parsed as an
4760 id-expression or a class member access, FALSE when it was parsed as
4761 a full expression. */
a77f94e2 4762
3ad6a8e1
DG
4763tree
4764finish_decltype_type (tree expr, bool id_expression_or_member_access_p)
4765{
4766 tree orig_expr = expr;
056dd1af 4767 tree type = NULL_TREE;
3ad6a8e1 4768
e4fd5b87
DG
4769 if (!expr || error_operand_p (expr))
4770 return error_mark_node;
4771
7a547b93
JJ
4772 if (TYPE_P (expr)
4773 || TREE_CODE (expr) == TYPE_DECL
4774 || (TREE_CODE (expr) == BIT_NOT_EXPR
4775 && TYPE_P (TREE_OPERAND (expr, 0))))
4776 {
4777 error ("argument to decltype must be an expression");
4778 return error_mark_node;
4779 }
4780
67e18edb 4781 /* FIXME instantiation-dependent */
21920fd1
JM
4782 if (type_dependent_expression_p (expr)
4783 /* In a template, a COMPONENT_REF has an IDENTIFIER_NODE for op1 even
4784 if it isn't dependent, so that we can check access control at
4785 instantiation time, so defer the decltype as well (PR 42277). */
4786 || (id_expression_or_member_access_p
4787 && processing_template_decl
4788 && TREE_CODE (expr) == COMPONENT_REF))
3ad6a8e1 4789 {
9e1e64ec 4790 type = cxx_make_type (DECLTYPE_TYPE);
3ad6a8e1
DG
4791 DECLTYPE_TYPE_EXPR (type) = expr;
4792 DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (type)
4793 = id_expression_or_member_access_p;
4794 SET_TYPE_STRUCTURAL_EQUALITY (type);
4795
4796 return type;
4797 }
4798
4799 /* The type denoted by decltype(e) is defined as follows: */
4800
ccb05613 4801 expr = resolve_nondeduced_context (expr);
48326487
JM
4802
4803 /* To get the size of a static data member declared as an array of
4804 unknown bound, we need to instantiate it. */
4805 if (TREE_CODE (expr) == VAR_DECL
4806 && VAR_HAD_UNKNOWN_BOUND (expr)
4807 && DECL_TEMPLATE_INSTANTIATION (expr))
4808 instantiate_decl (expr, /*defer_ok*/true, /*expl_inst_mem*/false);
4809
3ad6a8e1
DG
4810 if (id_expression_or_member_access_p)
4811 {
4812 /* If e is an id-expression or a class member access (5.2.5
4813 [expr.ref]), decltype(e) is defined as the type of the entity
4814 named by e. If there is no such entity, or e names a set of
4815 overloaded functions, the program is ill-formed. */
4816 if (TREE_CODE (expr) == IDENTIFIER_NODE)
4817 expr = lookup_name (expr);
4818
4819 if (TREE_CODE (expr) == INDIRECT_REF)
4820 /* This can happen when the expression is, e.g., "a.b". Just
4821 look at the underlying operand. */
4822 expr = TREE_OPERAND (expr, 0);
4823
4824 if (TREE_CODE (expr) == OFFSET_REF
4825 || TREE_CODE (expr) == MEMBER_REF)
4826 /* We're only interested in the field itself. If it is a
4827 BASELINK, we will need to see through it in the next
4828 step. */
4829 expr = TREE_OPERAND (expr, 1);
4830
4831 if (TREE_CODE (expr) == BASELINK)
4832 /* See through BASELINK nodes to the underlying functions. */
4833 expr = BASELINK_FUNCTIONS (expr);
4834
ccb05613
JM
4835 if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
4836 expr = TREE_OPERAND (expr, 0);
4837
3ad6a8e1
DG
4838 if (TREE_CODE (expr) == OVERLOAD)
4839 {
ccb05613
JM
4840 if (OVL_CHAIN (expr)
4841 || TREE_CODE (OVL_FUNCTION (expr)) == TEMPLATE_DECL)
3ad6a8e1
DG
4842 {
4843 error ("%qE refers to a set of overloaded functions", orig_expr);
4844 return error_mark_node;
4845 }
4846 else
4847 /* An overload set containing only one function: just look
4848 at that function. */
4849 expr = OVL_FUNCTION (expr);
4850 }
4851
4852 switch (TREE_CODE (expr))
4853 {
4854 case FIELD_DECL:
e76d7cc7 4855 if (DECL_BIT_FIELD_TYPE (expr))
3ad6a8e1
DG
4856 {
4857 type = DECL_BIT_FIELD_TYPE (expr);
4858 break;
4859 }
4860 /* Fall through for fields that aren't bitfields. */
4861
4862 case FUNCTION_DECL:
4863 case VAR_DECL:
4864 case CONST_DECL:
4865 case PARM_DECL:
4866 case RESULT_DECL:
088d4f95 4867 case TEMPLATE_PARM_INDEX:
03a904b5 4868 expr = mark_type_use (expr);
3ad6a8e1
DG
4869 type = TREE_TYPE (expr);
4870 break;
4871
4872 case ERROR_MARK:
4873 type = error_mark_node;
4874 break;
4875
4876 case COMPONENT_REF:
03a904b5 4877 mark_type_use (expr);
3ad6a8e1
DG
4878 type = is_bitfield_expr_with_lowered_type (expr);
4879 if (!type)
4880 type = TREE_TYPE (TREE_OPERAND (expr, 1));
4881 break;
4882
4883 case BIT_FIELD_REF:
4884 gcc_unreachable ();
4885
4886 case INTEGER_CST:
4887 /* We can get here when the id-expression refers to an
4888 enumerator. */
4889 type = TREE_TYPE (expr);
4890 break;
4891
4892 default:
91929b4d
JJ
4893 gcc_assert (TYPE_P (expr) || DECL_P (expr)
4894 || TREE_CODE (expr) == SCOPE_REF);
3ad6a8e1
DG
4895 error ("argument to decltype must be an expression");
4896 return error_mark_node;
4897 }
4898 }
4899 else
4900 {
c1e41527
JM
4901 /* Within a lambda-expression:
4902
4903 Every occurrence of decltype((x)) where x is a possibly
4904 parenthesized id-expression that names an entity of
4905 automatic storage duration is treated as if x were
4906 transformed into an access to a corresponding data member
4907 of the closure type that would have been declared if x
4908 were a use of the denoted entity. */
4909 if (outer_automatic_var_p (expr)
4910 && current_function_decl
4911 && LAMBDA_FUNCTION_P (current_function_decl))
4912 type = capture_decltype (expr);
4913 else if (error_operand_p (expr))
4914 type = error_mark_node;
4915 else if (expr == current_class_ptr)
4916 /* If the expression is just "this", we want the
4917 cv-unqualified pointer for the "this" type. */
4918 type = TYPE_MAIN_VARIANT (TREE_TYPE (expr));
4919 else
4920 {
4921 /* Otherwise, where T is the type of e, if e is an lvalue,
4922 decltype(e) is defined as T&; if an xvalue, T&&; otherwise, T. */
4923 cp_lvalue_kind clk = lvalue_kind (expr);
4924 type = unlowered_expr_type (expr);
4925 gcc_assert (TREE_CODE (type) != REFERENCE_TYPE);
4926 if (clk != clk_none && !(clk & clk_class))
4927 type = cp_build_reference_type (type, (clk & clk_rvalueref));
4928 }
3ad6a8e1
DG
4929 }
4930
4931 if (!type || type == unknown_type_node)
4932 {
4933 error ("type of %qE is unknown", expr);
4934 return error_mark_node;
4935 }
4936
4937 return type;
4938}
cf22909c 4939
b29441ec
PC
4940/* Called from trait_expr_value to evaluate either __has_nothrow_assign or
4941 __has_nothrow_copy, depending on assign_p. */
cb68ec50
PC
4942
4943static bool
b29441ec 4944classtype_has_nothrow_assign_or_copy_p (tree type, bool assign_p)
cb68ec50 4945{
b29441ec 4946 tree fns;
cb68ec50 4947
b29441ec
PC
4948 if (assign_p)
4949 {
4950 int ix;
4951 ix = lookup_fnfields_1 (type, ansi_assopname (NOP_EXPR));
4952 if (ix < 0)
cb68ec50 4953 return false;
b29441ec
PC
4954 fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), ix);
4955 }
066ec0a4 4956 else if (TYPE_HAS_COPY_CTOR (type))
b29441ec
PC
4957 {
4958 /* If construction of the copy constructor was postponed, create
4959 it now. */
4960 if (CLASSTYPE_LAZY_COPY_CTOR (type))
4961 lazily_declare_fn (sfk_copy_constructor, type);
d5f4eddd
JM
4962 if (CLASSTYPE_LAZY_MOVE_CTOR (type))
4963 lazily_declare_fn (sfk_move_constructor, type);
b29441ec 4964 fns = CLASSTYPE_CONSTRUCTORS (type);
cb68ec50
PC
4965 }
4966 else
4967 return false;
4968
b29441ec 4969 for (; fns; fns = OVL_NEXT (fns))
279086c3
PC
4970 {
4971 tree fn = OVL_CURRENT (fns);
4972
4973 if (assign_p)
4974 {
4975 if (copy_fn_p (fn) == 0)
4976 continue;
4977 }
4978 else if (copy_fn_p (fn) <= 0)
4979 continue;
4980
4981 if (!TYPE_NOTHROW_P (TREE_TYPE (fn)))
4982 return false;
4983 }
b29441ec 4984
cb68ec50
PC
4985 return true;
4986}
4987
4988/* Actually evaluates the trait. */
4989
4990static bool
4991trait_expr_value (cp_trait_kind kind, tree type1, tree type2)
4992{
4993 enum tree_code type_code1;
4994 tree t;
4995
4996 type_code1 = TREE_CODE (type1);
4997
4998 switch (kind)
4999 {
5000 case CPTK_HAS_NOTHROW_ASSIGN:
c32097d8 5001 type1 = strip_array_types (type1);
b29441ec
PC
5002 return (!CP_TYPE_CONST_P (type1) && type_code1 != REFERENCE_TYPE
5003 && (trait_expr_value (CPTK_HAS_TRIVIAL_ASSIGN, type1, type2)
5004 || (CLASS_TYPE_P (type1)
5005 && classtype_has_nothrow_assign_or_copy_p (type1,
5006 true))));
cb68ec50
PC
5007
5008 case CPTK_HAS_TRIVIAL_ASSIGN:
c32097d8
JM
5009 /* ??? The standard seems to be missing the "or array of such a class
5010 type" wording for this trait. */
5011 type1 = strip_array_types (type1);
cb68ec50 5012 return (!CP_TYPE_CONST_P (type1) && type_code1 != REFERENCE_TYPE
c32097d8 5013 && (trivial_type_p (type1)
cb68ec50 5014 || (CLASS_TYPE_P (type1)
066ec0a4 5015 && TYPE_HAS_TRIVIAL_COPY_ASSIGN (type1))));
cb68ec50
PC
5016
5017 case CPTK_HAS_NOTHROW_CONSTRUCTOR:
5018 type1 = strip_array_types (type1);
5019 return (trait_expr_value (CPTK_HAS_TRIVIAL_CONSTRUCTOR, type1, type2)
5020 || (CLASS_TYPE_P (type1)
ac177431 5021 && (t = locate_ctor (type1))
e24313f3 5022 && TYPE_NOTHROW_P (TREE_TYPE (t))));
cb68ec50
PC
5023
5024 case CPTK_HAS_TRIVIAL_CONSTRUCTOR:
5025 type1 = strip_array_types (type1);
c32097d8 5026 return (trivial_type_p (type1)
cb68ec50
PC
5027 || (CLASS_TYPE_P (type1) && TYPE_HAS_TRIVIAL_DFLT (type1)));
5028
5029 case CPTK_HAS_NOTHROW_COPY:
c32097d8 5030 type1 = strip_array_types (type1);
cb68ec50
PC
5031 return (trait_expr_value (CPTK_HAS_TRIVIAL_COPY, type1, type2)
5032 || (CLASS_TYPE_P (type1)
b29441ec 5033 && classtype_has_nothrow_assign_or_copy_p (type1, false)));
cb68ec50
PC
5034
5035 case CPTK_HAS_TRIVIAL_COPY:
c32097d8
JM
5036 /* ??? The standard seems to be missing the "or array of such a class
5037 type" wording for this trait. */
5038 type1 = strip_array_types (type1);
5039 return (trivial_type_p (type1) || type_code1 == REFERENCE_TYPE
066ec0a4 5040 || (CLASS_TYPE_P (type1) && TYPE_HAS_TRIVIAL_COPY_CTOR (type1)));
cb68ec50
PC
5041
5042 case CPTK_HAS_TRIVIAL_DESTRUCTOR:
5043 type1 = strip_array_types (type1);
c32097d8 5044 return (trivial_type_p (type1) || type_code1 == REFERENCE_TYPE
cb68ec50
PC
5045 || (CLASS_TYPE_P (type1)
5046 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type1)));
5047
5048 case CPTK_HAS_VIRTUAL_DESTRUCTOR:
46408846 5049 return type_has_virtual_destructor (type1);
cb68ec50
PC
5050
5051 case CPTK_IS_ABSTRACT:
5052 return (CLASS_TYPE_P (type1) && CLASSTYPE_PURE_VIRTUALS (type1));
5053
5054 case CPTK_IS_BASE_OF:
5055 return (NON_UNION_CLASS_TYPE_P (type1) && NON_UNION_CLASS_TYPE_P (type2)
5056 && DERIVED_FROM_P (type1, type2));
5057
5058 case CPTK_IS_CLASS:
5059 return (NON_UNION_CLASS_TYPE_P (type1));
5060
5061 case CPTK_IS_CONVERTIBLE_TO:
5062 /* TODO */
5063 return false;
5064
5065 case CPTK_IS_EMPTY:
5066 return (NON_UNION_CLASS_TYPE_P (type1) && CLASSTYPE_EMPTY_P (type1));
5067
5068 case CPTK_IS_ENUM:
5069 return (type_code1 == ENUMERAL_TYPE);
5070
5071 case CPTK_IS_POD:
5072 return (pod_type_p (type1));
5073
5074 case CPTK_IS_POLYMORPHIC:
5075 return (CLASS_TYPE_P (type1) && TYPE_POLYMORPHIC_P (type1));
5076
c32097d8
JM
5077 case CPTK_IS_STD_LAYOUT:
5078 return (std_layout_type_p (type1));
5079
5080 case CPTK_IS_TRIVIAL:
5081 return (trivial_type_p (type1));
5082
cb68ec50
PC
5083 case CPTK_IS_UNION:
5084 return (type_code1 == UNION_TYPE);
5085
2b08f2c5
JM
5086 case CPTK_IS_LITERAL_TYPE:
5087 return (literal_type_p (type1));
5088
cb68ec50
PC
5089 default:
5090 gcc_unreachable ();
5091 return false;
5092 }
5093}
5094
ff284b4b
PC
5095/* Returns true if TYPE is a complete type, an array of unknown bound,
5096 or (possibly cv-qualified) void, returns false otherwise. */
5097
5098static bool
5099check_trait_type (tree type)
5100{
5101 if (COMPLETE_TYPE_P (type))
5102 return true;
5103
f94ae987
JM
5104 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type)
5105 && COMPLETE_TYPE_P (TREE_TYPE (type)))
ff284b4b
PC
5106 return true;
5107
5108 if (VOID_TYPE_P (type))
5109 return true;
5110
5111 return false;
5112}
5113
cb68ec50
PC
5114/* Process a trait expression. */
5115
5116tree
5117finish_trait_expr (cp_trait_kind kind, tree type1, tree type2)
5118{
5119 gcc_assert (kind == CPTK_HAS_NOTHROW_ASSIGN
5120 || kind == CPTK_HAS_NOTHROW_CONSTRUCTOR
5121 || kind == CPTK_HAS_NOTHROW_COPY
5122 || kind == CPTK_HAS_TRIVIAL_ASSIGN
5123 || kind == CPTK_HAS_TRIVIAL_CONSTRUCTOR
5124 || kind == CPTK_HAS_TRIVIAL_COPY
5125 || kind == CPTK_HAS_TRIVIAL_DESTRUCTOR
5126 || kind == CPTK_HAS_VIRTUAL_DESTRUCTOR
5127 || kind == CPTK_IS_ABSTRACT
5128 || kind == CPTK_IS_BASE_OF
5129 || kind == CPTK_IS_CLASS
5130 || kind == CPTK_IS_CONVERTIBLE_TO
5131 || kind == CPTK_IS_EMPTY
5132 || kind == CPTK_IS_ENUM
5133 || kind == CPTK_IS_POD
5134 || kind == CPTK_IS_POLYMORPHIC
c32097d8
JM
5135 || kind == CPTK_IS_STD_LAYOUT
5136 || kind == CPTK_IS_TRIVIAL
2b08f2c5 5137 || kind == CPTK_IS_LITERAL_TYPE
cb68ec50
PC
5138 || kind == CPTK_IS_UNION);
5139
5140 if (kind == CPTK_IS_CONVERTIBLE_TO)
5141 {
5142 sorry ("__is_convertible_to");
5143 return error_mark_node;
5144 }
5145
5146 if (type1 == error_mark_node
5147 || ((kind == CPTK_IS_BASE_OF || kind == CPTK_IS_CONVERTIBLE_TO)
5148 && type2 == error_mark_node))
5149 return error_mark_node;
5150
5151 if (processing_template_decl)
5152 {
5153 tree trait_expr = make_node (TRAIT_EXPR);
5154 TREE_TYPE (trait_expr) = boolean_type_node;
5155 TRAIT_EXPR_TYPE1 (trait_expr) = type1;
5156 TRAIT_EXPR_TYPE2 (trait_expr) = type2;
5157 TRAIT_EXPR_KIND (trait_expr) = kind;
5158 return trait_expr;
5159 }
5160
10c1d4af
PC
5161 complete_type (type1);
5162 if (type2)
5163 complete_type (type2);
5164
ff284b4b 5165 switch (kind)
cb68ec50 5166 {
ff284b4b
PC
5167 case CPTK_HAS_NOTHROW_ASSIGN:
5168 case CPTK_HAS_TRIVIAL_ASSIGN:
5169 case CPTK_HAS_NOTHROW_CONSTRUCTOR:
5170 case CPTK_HAS_TRIVIAL_CONSTRUCTOR:
5171 case CPTK_HAS_NOTHROW_COPY:
5172 case CPTK_HAS_TRIVIAL_COPY:
5173 case CPTK_HAS_TRIVIAL_DESTRUCTOR:
5174 case CPTK_HAS_VIRTUAL_DESTRUCTOR:
5175 case CPTK_IS_ABSTRACT:
5176 case CPTK_IS_EMPTY:
5177 case CPTK_IS_POD:
5178 case CPTK_IS_POLYMORPHIC:
c32097d8
JM
5179 case CPTK_IS_STD_LAYOUT:
5180 case CPTK_IS_TRIVIAL:
2b08f2c5 5181 case CPTK_IS_LITERAL_TYPE:
ff284b4b
PC
5182 if (!check_trait_type (type1))
5183 {
5184 error ("incomplete type %qT not allowed", type1);
5185 return error_mark_node;
5186 }
5187 break;
5188
5189 case CPTK_IS_BASE_OF:
5190 if (NON_UNION_CLASS_TYPE_P (type1) && NON_UNION_CLASS_TYPE_P (type2)
5191 && !same_type_ignoring_top_level_qualifiers_p (type1, type2)
5192 && !COMPLETE_TYPE_P (type2))
5193 {
5194 error ("incomplete type %qT not allowed", type2);
5195 return error_mark_node;
5196 }
5197 break;
5198
5199 case CPTK_IS_CLASS:
5200 case CPTK_IS_ENUM:
5201 case CPTK_IS_UNION:
5202 break;
5203
5204 case CPTK_IS_CONVERTIBLE_TO:
5205 default:
5206 gcc_unreachable ();
cb68ec50
PC
5207 }
5208
5209 return (trait_expr_value (kind, type1, type2)
5210 ? boolean_true_node : boolean_false_node);
5211}
5212
6ec637a4
JJ
5213/* Do-nothing variants of functions to handle pragma FLOAT_CONST_DECIMAL64,
5214 which is ignored for C++. */
5215
5216void
5217set_float_const_decimal64 (void)
5218{
5219}
5220
5221void
5222clear_float_const_decimal64 (void)
5223{
5224}
5225
5226bool
5227float_const_decimal64_p (void)
5228{
5229 return 0;
5230}
5231
3b49d762 5232\f
7ecbca9d
GDR
5233/* Return true if T is a literal type. */
5234
5235bool
5236literal_type_p (tree t)
5237{
5238 if (SCALAR_TYPE_P (t))
5239 return true;
5240 if (CLASS_TYPE_P (t))
5241 return CLASSTYPE_LITERAL_P (t);
5242 if (TREE_CODE (t) == ARRAY_TYPE)
5243 return literal_type_p (strip_array_types (t));
5244 return false;
5245}
5246
7ecbca9d
GDR
5247/* If DECL is a variable declared `constexpr', require its type
5248 be literal. Return the DECL if OK, otherwise NULL. */
5249
5250tree
5251ensure_literal_type_for_constexpr_object (tree decl)
5252{
5253 tree type = TREE_TYPE (decl);
5254 if (TREE_CODE (decl) == VAR_DECL && DECL_DECLARED_CONSTEXPR_P (decl)
fa2200cb
JM
5255 && !processing_template_decl
5256 /* The call to complete_type is just for initializer_list. */
5257 && !literal_type_p (complete_type (type)))
7ecbca9d
GDR
5258 {
5259 error ("the type %qT of constexpr variable %qD is not literal",
5260 type, decl);
5261 return NULL;
5262 }
5263 return decl;
5264}
5265
66e61a34
JM
5266/* Representation of entries in the constexpr function definition table. */
5267
5268typedef struct GTY(()) constexpr_fundef {
5269 tree decl;
5270 tree body;
5271} constexpr_fundef;
5272
5273/* This table holds all constexpr function definitions seen in
5274 the current translation unit. */
5275
5276static GTY ((param_is (constexpr_fundef))) htab_t constexpr_fundef_table;
5277
66e61a34
JM
5278/* Utility function used for managing the constexpr function table.
5279 Return true if the entries pointed to by P and Q are for the
5280 same constexpr function. */
5281
5282static inline int
5283constexpr_fundef_equal (const void *p, const void *q)
5284{
5285 const constexpr_fundef *lhs = (const constexpr_fundef *) p;
5286 const constexpr_fundef *rhs = (const constexpr_fundef *) q;
5287 return lhs->decl == rhs->decl;
5288}
5289
5290/* Utility function used for managing the constexpr function table.
5291 Return a hash value for the entry pointed to by Q. */
5292
5293static inline hashval_t
5294constexpr_fundef_hash (const void *p)
5295{
5296 const constexpr_fundef *fundef = (const constexpr_fundef *) p;
5297 return DECL_UID (fundef->decl);
5298}
5299
5300/* Return a previously saved definition of function FUN. */
5301
5302static constexpr_fundef *
5303retrieve_constexpr_fundef (tree fun)
5304{
5305 constexpr_fundef fundef = { NULL, NULL };
5306 if (constexpr_fundef_table == NULL)
5307 return NULL;
5308
5309 fundef.decl = fun;
5310 return (constexpr_fundef *) htab_find (constexpr_fundef_table, &fundef);
5311}
5312
91ea6df3
GDR
5313/* Return true if type expression T is a valid parameter type, or
5314 a valid return type, of a constexpr function. */
5315
5316static bool
5317valid_type_in_constexpr_fundecl_p (tree t)
5318{
5319 return (literal_type_p (t)
5320 /* FIXME we allow ref to non-literal; should change standard to
5321 match, or change back if not. */
5322 || TREE_CODE (t) == REFERENCE_TYPE);
5323}
5324
5325/* Check whether the parameter and return types of FUN are valid for a
5326 constexpr function, and complain if COMPLAIN. */
5327
5328static bool
5329is_valid_constexpr_fn (tree fun, bool complain)
5330{
5331 tree parm = FUNCTION_FIRST_USER_PARM (fun);
5332 bool ret = true;
5333 for (; parm != NULL; parm = TREE_CHAIN (parm))
5334 if (!valid_type_in_constexpr_fundecl_p (TREE_TYPE (parm)))
5335 {
5336 ret = false;
5337 if (complain)
5338 error ("invalid type for parameter %q#D of constexpr function",
5339 parm);
5340 }
5341
5342 if (!DECL_CONSTRUCTOR_P (fun))
5343 {
5344 tree rettype = TREE_TYPE (TREE_TYPE (fun));
5345 if (!valid_type_in_constexpr_fundecl_p (rettype))
5346 {
5347 ret = false;
5348 if (complain)
5349 error ("invalid return type %qT of constexpr function %qD",
5350 rettype, fun);
5351 }
5352
5353 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fun)
5354 && COMPLETE_TYPE_P (DECL_CONTEXT (fun))
5355 && !valid_type_in_constexpr_fundecl_p (DECL_CONTEXT (fun)))
5356 {
5357 ret = false;
5358 if (complain)
5359 error ("enclosing class of %q#D is not a literal type", fun);
5360 }
5361 }
5362
5363 return ret;
5364}
5365
7ecbca9d
GDR
5366/* Return non-null if FUN certainly designates a valid constexpr function
5367 declaration. Otherwise return NULL. Issue appropriate diagnostics
5368 if necessary. Note that we only check the declaration, not the body
5369 of the function. */
5370
5371tree
5372validate_constexpr_fundecl (tree fun)
5373{
66e61a34
JM
5374 constexpr_fundef entry;
5375 constexpr_fundef **slot;
5376
91ea6df3 5377 if (processing_template_decl || !DECL_DECLARED_CONSTEXPR_P (fun))
7ecbca9d 5378 return NULL;
91ea6df3
GDR
5379 else if (DECL_CLONED_FUNCTION_P (fun))
5380 /* We already checked the original function. */
7ecbca9d
GDR
5381 return fun;
5382
91ea6df3 5383 if (!is_valid_constexpr_fn (fun, !DECL_TEMPLATE_INSTANTIATION (fun)))
7ecbca9d 5384 {
91ea6df3 5385 DECL_DECLARED_CONSTEXPR_P (fun) = false;
7ecbca9d
GDR
5386 return NULL;
5387 }
91ea6df3 5388
66e61a34
JM
5389 /* Create the constexpr function table if necessary. */
5390 if (constexpr_fundef_table == NULL)
5391 constexpr_fundef_table = htab_create_ggc (101,
5392 constexpr_fundef_hash,
5393 constexpr_fundef_equal,
5394 ggc_free);
5395 entry.decl = fun;
5396 entry.body = NULL;
5397 slot = (constexpr_fundef **)
5398 htab_find_slot (constexpr_fundef_table, &entry, INSERT);
5399 if (*slot == NULL)
5400 {
5401 *slot = ggc_alloc_constexpr_fundef ();
5402 **slot = entry;
5403 }
5404 return fun;
5405}
5406
5407/* Subroutine of build_constexpr_constructor_member_initializers.
5408 The expression tree T represents a data member initialization
5409 in a (constexpr) constructor definition. Build a pairing of
5410 the data member with its initializer, and prepend that pair
5411 to the existing initialization pair INITS. */
5412
5413static bool
5414build_data_member_initialization (tree t, VEC(constructor_elt,gc) **vec)
5415{
5416 tree member, init;
5417 if (TREE_CODE (t) == CLEANUP_POINT_EXPR)
5418 t = TREE_OPERAND (t, 0);
5419 if (TREE_CODE (t) == EXPR_STMT)
5420 t = TREE_OPERAND (t, 0);
5421 if (t == error_mark_node)
5422 return false;
60d237af
JJ
5423 if (TREE_CODE (t) == STATEMENT_LIST)
5424 {
5425 tree_stmt_iterator i;
5426 for (i = tsi_start (t); !tsi_end_p (i); tsi_next (&i))
5427 {
5428 if (! build_data_member_initialization (tsi_stmt (i), vec))
5429 return false;
5430 }
5431 return true;
5432 }
66e61a34 5433 if (TREE_CODE (t) == CLEANUP_STMT)
ebb526f9
JJ
5434 {
5435 /* We can't see a CLEANUP_STMT in a constructor for a literal class,
5436 but we can in a constexpr constructor for a non-literal class. Just
5437 ignore it; either all the initialization will be constant, in which
5438 case the cleanup can't run, or it can't be constexpr.
5439 Still recurse into CLEANUP_BODY. */
60d237af 5440 return build_data_member_initialization (CLEANUP_BODY (t), vec);
ebb526f9 5441 }
66e61a34
JM
5442 if (TREE_CODE (t) == CONVERT_EXPR)
5443 t = TREE_OPERAND (t, 0);
5444 if (TREE_CODE (t) == INIT_EXPR
5445 || TREE_CODE (t) == MODIFY_EXPR)
5446 {
5447 member = TREE_OPERAND (t, 0);
5448 init = unshare_expr (TREE_OPERAND (t, 1));
5449 }
5450 else
5451 {
66e61a34
JM
5452 gcc_assert (TREE_CODE (t) == CALL_EXPR);
5453 member = CALL_EXPR_ARG (t, 0);
0e5dcad1
JM
5454 /* We don't use build_cplus_new here because it complains about
5455 abstract bases. Leaving the call unwrapped means that it has the
5456 wrong type, but cxx_eval_constant_expression doesn't care. */
5457 init = unshare_expr (t);
5458 }
5459 if (TREE_CODE (member) == INDIRECT_REF)
5460 member = TREE_OPERAND (member, 0);
5461 if (TREE_CODE (member) == NOP_EXPR)
5462 {
5463 tree op = member;
5464 STRIP_NOPS (op);
5465 if (TREE_CODE (op) == ADDR_EXPR)
66e61a34 5466 {
0e5dcad1
JM
5467 gcc_assert (same_type_ignoring_top_level_qualifiers_p
5468 (TREE_TYPE (TREE_TYPE (op)),
5469 TREE_TYPE (TREE_TYPE (member))));
5470 /* Initializing a cv-qualified member; we need to look through
5471 the const_cast. */
5472 member = op;
66e61a34
JM
5473 }
5474 else
5475 {
0e5dcad1
JM
5476 /* We don't put out anything for an empty base. */
5477 gcc_assert (is_empty_class (TREE_TYPE (TREE_TYPE (member))));
5478 /* But if the initializer isn't constexpr, leave it in so we
5479 complain later. */
d6ed1c89 5480 if (potential_constant_expression (init))
0e5dcad1 5481 return true;
66e61a34 5482 }
66e61a34 5483 }
0e5dcad1
JM
5484 if (TREE_CODE (member) == ADDR_EXPR)
5485 member = TREE_OPERAND (member, 0);
d79b88a1
JM
5486 if (TREE_CODE (member) == COMPONENT_REF
5487 /* If we're initializing a member of a subaggregate, it's a vtable
5488 pointer. Leave it as COMPONENT_REF so we remember the path to get
5489 to the vfield. */
5490 && TREE_CODE (TREE_OPERAND (member, 0)) != COMPONENT_REF)
66e61a34
JM
5491 member = TREE_OPERAND (member, 1);
5492 CONSTRUCTOR_APPEND_ELT (*vec, member, init);
5493 return true;
5494}
5495
9b7d0509
JM
5496/* Make sure that there are no statements after LAST in the constructor
5497 body represented by LIST. */
5498
5499bool
5500check_constexpr_ctor_body (tree last, tree list)
5501{
5502 bool ok = true;
5503 if (TREE_CODE (list) == STATEMENT_LIST)
5504 {
5505 tree_stmt_iterator i = tsi_last (list);
5506 for (; !tsi_end_p (i); tsi_prev (&i))
5507 {
5508 tree t = tsi_stmt (i);
5509 if (t == last)
5510 break;
5511 if (TREE_CODE (t) == BIND_EXPR)
5512 {
5513 if (!check_constexpr_ctor_body (last, BIND_EXPR_BODY (t)))
5514 return false;
5515 else
5516 continue;
5517 }
5518 /* We currently allow typedefs and static_assert.
5519 FIXME allow them in the standard, too. */
5520 if (TREE_CODE (t) != STATIC_ASSERT)
5521 {
5522 ok = false;
5523 break;
5524 }
5525 }
5526 }
5527 else if (list != last
5528 && TREE_CODE (list) != STATIC_ASSERT)
5529 ok = false;
5530 if (!ok)
5531 {
5532 error ("constexpr constructor does not have empty body");
5533 DECL_DECLARED_CONSTEXPR_P (current_function_decl) = false;
5534 }
5535 return ok;
5536}
5537
66e61a34
JM
5538/* Build compile-time evalable representations of member-initializer list
5539 for a constexpr constructor. */
5540
5541static tree
5542build_constexpr_constructor_member_initializers (tree type, tree body)
5543{
5544 VEC(constructor_elt,gc) *vec = NULL;
5545 bool ok = true;
5546 if (TREE_CODE (body) == MUST_NOT_THROW_EXPR
5547 || TREE_CODE (body) == EH_SPEC_BLOCK)
5548 body = TREE_OPERAND (body, 0);
d4e55f30
JM
5549 if (TREE_CODE (body) == STATEMENT_LIST)
5550 body = STATEMENT_LIST_HEAD (body)->stmt;
5551 body = BIND_EXPR_BODY (body);
66e61a34 5552 if (TREE_CODE (body) == CLEANUP_POINT_EXPR)
62f9aedc
JM
5553 {
5554 body = TREE_OPERAND (body, 0);
5555 if (TREE_CODE (body) == EXPR_STMT)
5556 body = TREE_OPERAND (body, 0);
5557 if (TREE_CODE (body) == INIT_EXPR
5558 && (same_type_ignoring_top_level_qualifiers_p
5559 (TREE_TYPE (TREE_OPERAND (body, 0)),
5560 current_class_type)))
5561 {
5562 /* Trivial copy. */
5563 return TREE_OPERAND (body, 1);
5564 }
5565 ok = build_data_member_initialization (body, &vec);
5566 }
0787e2e7 5567 else if (TREE_CODE (body) == STATEMENT_LIST)
66e61a34
JM
5568 {
5569 tree_stmt_iterator i;
66e61a34
JM
5570 for (i = tsi_start (body); !tsi_end_p (i); tsi_next (&i))
5571 {
5572 ok = build_data_member_initialization (tsi_stmt (i), &vec);
5573 if (!ok)
5574 break;
5575 }
5576 }
0787e2e7
JM
5577 else
5578 gcc_assert (errorcount > 0);
66e61a34
JM
5579 if (ok)
5580 return build_constructor (type, vec);
5581 else
5582 return error_mark_node;
5583}
5584
5585/* We are processing the definition of the constexpr function FUN.
5586 Check that its BODY fulfills the propriate requirements and
5587 enter it in the constexpr function definition table.
5588 For constructor BODY is actually the TREE_LIST of the
5589 member-initializer list. */
5590
5591tree
5592register_constexpr_fundef (tree fun, tree body)
5593{
5594 constexpr_fundef *fundef = retrieve_constexpr_fundef (fun);
5595 gcc_assert (fundef != NULL && fundef->body == NULL);
5596
5597 if (DECL_CONSTRUCTOR_P (fun))
5598 body = build_constexpr_constructor_member_initializers
5599 (DECL_CONTEXT (fun), body);
5600 else
5601 {
5602 if (TREE_CODE (body) == BIND_EXPR)
5603 body = BIND_EXPR_BODY (body);
5604 if (TREE_CODE (body) == EH_SPEC_BLOCK)
5605 body = EH_SPEC_STMTS (body);
5606 if (TREE_CODE (body) == MUST_NOT_THROW_EXPR)
5607 body = TREE_OPERAND (body, 0);
5608 if (TREE_CODE (body) == CLEANUP_POINT_EXPR)
5609 body = TREE_OPERAND (body, 0);
5610 if (TREE_CODE (body) != RETURN_EXPR)
5611 {
5612 error ("body of constexpr function %qD not a return-statement", fun);
5613 DECL_DECLARED_CONSTEXPR_P (fun) = false;
5614 return NULL;
5615 }
5616 body = unshare_expr (TREE_OPERAND (body, 0));
5617 }
5618
cb21e9cd 5619 if (!potential_rvalue_constant_expression (body))
66e61a34
JM
5620 {
5621 DECL_DECLARED_CONSTEXPR_P (fun) = false;
d6ed1c89 5622 if (!DECL_TEMPLATE_INSTANTIATION (fun))
cb21e9cd 5623 require_potential_rvalue_constant_expression (body);
66e61a34
JM
5624 return NULL;
5625 }
5626 fundef->body = body;
5627 return fun;
5628}
5629
c41095db
GDR
5630/* Objects of this type represent calls to constexpr functions
5631 along with the bindings of parameters to their arguments, for
5632 the purpose of compile time evaluation. */
5633
5634typedef struct GTY(()) constexpr_call {
5635 /* Description of the constexpr function definition. */
5636 constexpr_fundef *fundef;
5637 /* Parameter bindings enironment. A TREE_LIST where each TREE_PURPOSE
5638 is a parameter _DECL and the TREE_VALUE is the value of the parameter.
5639 Note: This arrangement is made to accomodate the use of
5640 iterative_hash_template_arg (see pt.c). If you change this
5641 representation, also change the hash calculation in
5642 cxx_eval_call_expression. */
5643 tree bindings;
5644 /* Result of the call.
5645 NULL means the call is being evaluated.
5646 error_mark_node means that the evaluation was erroneous;
5647 otherwise, the actuall value of the call. */
5648 tree result;
5649 /* The hash of this call; we remember it here to avoid having to
5650 recalculate it when expanding the hash table. */
5651 hashval_t hash;
5652} constexpr_call;
5653
5654/* A table of all constexpr calls that have been evaluated by the
5655 compiler in this translation unit. */
5656
5657static GTY ((param_is (constexpr_call))) htab_t constexpr_call_table;
5658
5659static tree cxx_eval_constant_expression (const constexpr_call *, tree,
5660 bool, bool, bool *);
5661
5662/* Compute a hash value for a constexpr call representation. */
5663
5664static hashval_t
5665constexpr_call_hash (const void *p)
5666{
5667 const constexpr_call *info = (const constexpr_call *) p;
5668 return info->hash;
5669}
5670
5671/* Return 1 if the objects pointed to by P and Q represent calls
5672 to the same constexpr function with the same arguments.
5673 Otherwise, return 0. */
5674
5675static int
5676constexpr_call_equal (const void *p, const void *q)
5677{
5678 const constexpr_call *lhs = (const constexpr_call *) p;
5679 const constexpr_call *rhs = (const constexpr_call *) q;
5680 tree lhs_bindings;
5681 tree rhs_bindings;
5682 if (lhs == rhs)
5683 return 1;
5684 if (!constexpr_fundef_equal (lhs->fundef, rhs->fundef))
5685 return 0;
5686 lhs_bindings = lhs->bindings;
5687 rhs_bindings = rhs->bindings;
5688 while (lhs_bindings != NULL && rhs_bindings != NULL)
5689 {
5690 tree lhs_arg = TREE_VALUE (lhs_bindings);
5691 tree rhs_arg = TREE_VALUE (rhs_bindings);
5692 gcc_assert (TREE_TYPE (lhs_arg) == TREE_TYPE (rhs_arg));
5693 if (!cp_tree_equal (lhs_arg, rhs_arg))
5694 return 0;
5695 lhs_bindings = TREE_CHAIN (lhs_bindings);
5696 rhs_bindings = TREE_CHAIN (rhs_bindings);
5697 }
5698 return lhs_bindings == rhs_bindings;
5699}
5700
5701/* Initialize the constexpr call table, if needed. */
5702
5703static void
5704maybe_initialize_constexpr_call_table (void)
5705{
5706 if (constexpr_call_table == NULL)
5707 constexpr_call_table = htab_create_ggc (101,
5708 constexpr_call_hash,
5709 constexpr_call_equal,
5710 ggc_free);
5711}
5712
66e61a34
JM
5713/* Return true if T designates the implied `this' parameter. */
5714
5715static inline bool
5716is_this_parameter (tree t)
5717{
5718 return t == current_class_ptr;
5719}
5720
5721/* We have an expression tree T that represents a call, either CALL_EXPR
5722 or AGGR_INIT_EXPR. If the call is lexically to a named function,
5723 retrun the _DECL for that function. */
5724
5725static tree
5726get_function_named_in_call (tree t)
5727{
5728 tree fun = NULL;
5729 switch (TREE_CODE (t))
5730 {
5731 case CALL_EXPR:
5732 fun = CALL_EXPR_FN (t);
5733 break;
5734
5735 case AGGR_INIT_EXPR:
5736 fun = AGGR_INIT_EXPR_FN (t);
5737 break;
5738
5739 default:
5740 gcc_unreachable();
5741 break;
5742 }
5743 if (TREE_CODE (fun) == ADDR_EXPR
5744 && TREE_CODE (TREE_OPERAND (fun, 0)) == FUNCTION_DECL)
5745 fun = TREE_OPERAND (fun, 0);
7ecbca9d
GDR
5746 return fun;
5747}
5748
66e61a34
JM
5749/* We have an expression tree T that represents a call, either CALL_EXPR
5750 or AGGR_INIT_EXPR. Return the Nth argument. */
5751
5752static inline tree
5753get_nth_callarg (tree t, int n)
5754{
5755 switch (TREE_CODE (t))
5756 {
5757 case CALL_EXPR:
5758 return CALL_EXPR_ARG (t, n);
5759
5760 case AGGR_INIT_EXPR:
5761 return AGGR_INIT_EXPR_ARG (t, n);
5762
5763 default:
5764 gcc_unreachable ();
5765 return NULL;
5766 }
5767}
5768
c41095db
GDR
5769/* Look up the binding of the function parameter T in a constexpr
5770 function call context CALL. */
5771
5772static tree
5773lookup_parameter_binding (const constexpr_call *call, tree t)
5774{
5775 tree b = purpose_member (t, call->bindings);
5776 return TREE_VALUE (b);
5777}
5778
5779/* Attempt to evaluate T which represents a call to a builtin function.
5780 We assume here that all builtin functions evaluate to scalar types
5781 represented by _CST nodes. */
5782
5783static tree
5784cxx_eval_builtin_function_call (const constexpr_call *call, tree t,
5785 bool allow_non_constant, bool addr,
5786 bool *non_constant_p)
5787{
5788 const int nargs = call_expr_nargs (t);
5789 tree *args = (tree *) alloca (nargs * sizeof (tree));
5790 tree new_call;
5791 int i;
5792 for (i = 0; i < nargs; ++i)
5793 {
5794 args[i] = cxx_eval_constant_expression (call, CALL_EXPR_ARG (t, i),
5795 allow_non_constant, addr,
5796 non_constant_p);
5797 if (allow_non_constant && *non_constant_p)
5798 return t;
5799 }
5800 if (*non_constant_p)
5801 return t;
5802 new_call = build_call_array_loc (EXPR_LOCATION (t), TREE_TYPE (t),
5803 CALL_EXPR_FN (t), nargs, args);
5804 return fold (new_call);
5805}
5806
5807/* TEMP is the constant value of a temporary object of type TYPE. Adjust
5808 the type of the value to match. */
5809
5810static tree
5811adjust_temp_type (tree type, tree temp)
5812{
5813 if (TREE_TYPE (temp) == type)
5814 return temp;
5815 /* Avoid wrapping an aggregate value in a NOP_EXPR. */
5816 if (TREE_CODE (temp) == CONSTRUCTOR)
5817 return build_constructor (type, CONSTRUCTOR_ELTS (temp));
5818 gcc_assert (SCALAR_TYPE_P (type));
9e115cec 5819 return cp_fold_convert (type, temp);
c41095db
GDR
5820}
5821
5822/* Subroutine of cxx_eval_call_expression.
5823 We are processing a call expression (either CALL_EXPR or
5824 AGGR_INIT_EXPR) in the call context of OLD_CALL. Evaluate
5825 all arguments and bind their values to correspondings
5826 parameters, making up the NEW_CALL context. */
5827
5828static void
5829cxx_bind_parameters_in_call (const constexpr_call *old_call, tree t,
5830 constexpr_call *new_call,
5831 bool allow_non_constant,
5832 bool *non_constant_p)
5833{
5834 const int nargs = call_expr_nargs (t);
5835 tree fun = new_call->fundef->decl;
5836 tree parms = DECL_ARGUMENTS (fun);
5837 int i;
5838 for (i = 0; i < nargs; ++i)
5839 {
5840 tree x, arg;
5841 tree type = parms ? TREE_TYPE (parms) : void_type_node;
5842 /* For member function, the first argument is a pointer to the implied
5843 object. And for an object contruction, don't bind `this' before
5844 it is fully constructed. */
5845 if (i == 0 && DECL_CONSTRUCTOR_P (fun))
5846 goto next;
5847 x = get_nth_callarg (t, i);
5848 arg = cxx_eval_constant_expression (old_call, x, allow_non_constant,
5849 TREE_CODE (type) == REFERENCE_TYPE,
5850 non_constant_p);
5851 /* Don't VERIFY_CONSTANT here. */
5852 if (*non_constant_p && allow_non_constant)
5853 return;
5854 /* Just discard ellipsis args after checking their constantitude. */
5855 if (!parms)
5856 continue;
c6f54c7a
JM
5857 if (*non_constant_p)
5858 /* Don't try to adjust the type of non-constant args. */
5859 goto next;
c41095db
GDR
5860
5861 /* Make sure the binding has the same type as the parm. */
5862 if (TREE_CODE (type) != REFERENCE_TYPE)
5863 arg = adjust_temp_type (type, arg);
5864 new_call->bindings = tree_cons (parms, arg, new_call->bindings);
5865 next:
5866 parms = TREE_CHAIN (parms);
5867 }
5868}
5869
2bfe0527
JM
5870/* Variables and functions to manage constexpr call expansion context.
5871 These do not need to be marked for PCH or GC. */
5872
17bc631c 5873/* FIXME remember and print actual constant arguments. */
2bfe0527
JM
5874static VEC(tree,heap) *call_stack = NULL;
5875static int call_stack_tick;
5876static int last_cx_error_tick;
5877
17bc631c 5878static bool
2bfe0527
JM
5879push_cx_call_context (tree call)
5880{
5881 ++call_stack_tick;
5882 if (!EXPR_HAS_LOCATION (call))
5883 SET_EXPR_LOCATION (call, input_location);
5884 VEC_safe_push (tree, heap, call_stack, call);
17bc631c
JM
5885 if (VEC_length (tree, call_stack) > (unsigned) max_constexpr_depth)
5886 return false;
5887 return true;
2bfe0527
JM
5888}
5889
5890static void
5891pop_cx_call_context (void)
5892{
5893 ++call_stack_tick;
5894 VEC_pop (tree, call_stack);
5895}
5896
5897VEC(tree,heap) *
5898cx_error_context (void)
5899{
5900 VEC(tree,heap) *r = NULL;
5901 if (call_stack_tick != last_cx_error_tick
5902 && !VEC_empty (tree, call_stack))
5903 r = call_stack;
5904 last_cx_error_tick = call_stack_tick;
5905 return r;
5906}
5907
c41095db
GDR
5908/* Subroutine of cxx_eval_constant_expression.
5909 Evaluate the call expression tree T in the context of OLD_CALL expression
5910 evaluation. */
5911
5912static tree
5913cxx_eval_call_expression (const constexpr_call *old_call, tree t,
5914 bool allow_non_constant, bool addr,
5915 bool *non_constant_p)
5916{
2bfe0527 5917 location_t loc = EXPR_LOC_OR_HERE (t);
c41095db
GDR
5918 tree fun = get_function_named_in_call (t);
5919 tree result;
5920 constexpr_call new_call = { NULL, NULL, NULL, 0 };
5921 constexpr_call **slot;
17bc631c
JM
5922 constexpr_call *entry;
5923 bool depth_ok;
5924
c41095db
GDR
5925 if (TREE_CODE (fun) != FUNCTION_DECL)
5926 {
5927 /* Might be a constexpr function pointer. */
5928 fun = cxx_eval_constant_expression (old_call, fun, allow_non_constant,
5929 /*addr*/false, non_constant_p);
5930 if (TREE_CODE (fun) == ADDR_EXPR)
5931 fun = TREE_OPERAND (fun, 0);
5932 }
5933 if (TREE_CODE (fun) != FUNCTION_DECL)
5934 {
5935 if (!allow_non_constant)
5936 error_at (loc, "expression %qE does not designate a constexpr "
5937 "function", fun);
5938 *non_constant_p = true;
5939 return t;
5940 }
5941 if (DECL_CLONED_FUNCTION_P (fun))
5942 fun = DECL_CLONED_FUNCTION (fun);
5943 if (is_builtin_fn (fun))
5944 return cxx_eval_builtin_function_call (old_call, t, allow_non_constant,
5945 addr, non_constant_p);
5946 if (!DECL_DECLARED_CONSTEXPR_P (fun))
5947 {
5948 if (!allow_non_constant)
5949 {
5950 error_at (loc, "%qD is not a constexpr function", fun);
5951 if (DECL_TEMPLATE_INSTANTIATION (fun)
5952 && DECL_DECLARED_CONSTEXPR_P (DECL_TEMPLATE_RESULT
5953 (DECL_TI_TEMPLATE (fun))))
5954 is_valid_constexpr_fn (fun, true);
5955 }
5956 *non_constant_p = true;
5957 return t;
5958 }
5959
06a85dd3
JM
5960 /* Shortcut trivial copy constructor/op=. */
5961 if (call_expr_nargs (t) == 2 && trivial_fn_p (fun))
c62f4cd9
JM
5962 {
5963 tree arg = convert_from_reference (get_nth_callarg (t, 1));
5964 return cxx_eval_constant_expression (old_call, arg, allow_non_constant,
5965 addr, non_constant_p);
5966 }
06a85dd3 5967
c41095db
GDR
5968 /* If in direct recursive call, optimize definition search. */
5969 if (old_call != NULL && old_call->fundef->decl == fun)
5970 new_call.fundef = old_call->fundef;
5971 else
5972 {
5973 new_call.fundef = retrieve_constexpr_fundef (fun);
5974 if (new_call.fundef == NULL || new_call.fundef->body == NULL)
5975 {
5976 if (!allow_non_constant)
5977 error_at (loc, "%qD used before its definition", fun);
5978 *non_constant_p = true;
5979 return t;
5980 }
5981 }
5982 cxx_bind_parameters_in_call (old_call, t, &new_call,
5983 allow_non_constant, non_constant_p);
5984 if (*non_constant_p)
5985 return t;
5986
17bc631c 5987 depth_ok = push_cx_call_context (t);
2bfe0527 5988
c41095db
GDR
5989 new_call.hash
5990 = iterative_hash_template_arg (new_call.bindings,
5991 constexpr_fundef_hash (new_call.fundef));
5992
5993 /* If we have seen this call before, we are done. */
5994 maybe_initialize_constexpr_call_table ();
5995 slot = (constexpr_call **)
5996 htab_find_slot (constexpr_call_table, &new_call, INSERT);
17bc631c
JM
5997 entry = *slot;
5998 if (entry == NULL)
c41095db
GDR
5999 {
6000 /* We need to keep a pointer to the entry, not just the slot, as the
6001 slot can move in the call to cxx_eval_builtin_function_call. */
17bc631c 6002 *slot = entry = ggc_alloc_constexpr_call ();
c41095db 6003 *entry = new_call;
17bc631c
JM
6004 }
6005 /* Calls which are in progress have their result set to NULL
6006 so that we can detect circular dependencies. */
6007 else if (entry->result == NULL)
6008 {
6009 if (!allow_non_constant)
6010 error ("call has circular dependency");
6011 *non_constant_p = true;
6012 entry->result = result = error_mark_node;
6013 }
6014
6015 if (!depth_ok)
6016 {
6017 if (!allow_non_constant)
6018 error ("constexpr evaluation depth exceeds maximum of %d (use "
6019 "-fconstexpr-depth= to increase the maximum)",
6020 max_constexpr_depth);
6021 *non_constant_p = true;
6022 entry->result = result = error_mark_node;
6023 }
6024 else
6025 {
6026 result = entry->result;
6027 if (!result || (result == error_mark_node && !allow_non_constant))
6028 result = (cxx_eval_constant_expression
6029 (&new_call, new_call.fundef->body,
6030 allow_non_constant, addr,
6031 non_constant_p));
6032 if (result == error_mark_node)
6033 *non_constant_p = true;
c41095db
GDR
6034 if (*non_constant_p)
6035 entry->result = result = error_mark_node;
6036 else
6037 {
6038 /* If this was a call to initialize an object, set the type of
6039 the CONSTRUCTOR to the type of that object. */
6040 if (DECL_CONSTRUCTOR_P (fun))
6041 {
6042 tree ob_arg = get_nth_callarg (t, 0);
6043 STRIP_NOPS (ob_arg);
6044 gcc_assert (TREE_CODE (TREE_TYPE (ob_arg)) == POINTER_TYPE
6045 && CLASS_TYPE_P (TREE_TYPE (TREE_TYPE (ob_arg))));
6046 result = adjust_temp_type (TREE_TYPE (TREE_TYPE (ob_arg)),
6047 result);
6048 }
6049 entry->result = result;
6050 }
6051 }
6052
2bfe0527 6053 pop_cx_call_context ();
e26ab5ec 6054 return unshare_expr (result);
c41095db
GDR
6055}
6056
9e115cec
JM
6057/* FIXME speed this up, it's taking 16% of compile time on sieve testcase. */
6058
c41095db
GDR
6059bool
6060reduced_constant_expression_p (tree t)
6061{
9e115cec
JM
6062 if (TREE_OVERFLOW_P (t))
6063 /* Integer overflow makes this not a constant expression. */
c41095db
GDR
6064 return false;
6065 /* FIXME are we calling this too much? */
6066 return initializer_constant_valid_p (t, TREE_TYPE (t)) != NULL_TREE;
6067}
6068
6069/* Some expressions may have constant operands but are not constant
6070 themselves, such as 1/0. Call this function (or rather, the macro
6071 following it) to check for that condition.
6072
6073 We only call this in places that require an arithmetic constant, not in
6074 places where we might have a non-constant expression that can be a
6075 component of a constant expression, such as the address of a constexpr
6076 variable that might be dereferenced later. */
6077
6078static bool
6079verify_constant (tree t, bool allow_non_constant, bool *non_constant_p)
6080{
6081 if (!*non_constant_p && !reduced_constant_expression_p (t))
6082 {
6083 if (!allow_non_constant)
9e115cec
JM
6084 {
6085 /* If T was already folded to a _CST with TREE_OVERFLOW set,
6086 printing the folded constant isn't helpful. */
6087 if (TREE_OVERFLOW_P (t))
6088 {
6089 permerror (input_location, "overflow in constant expression");
6090 /* If we're being permissive (and are in an enforcing
6091 context), consider this constant. */
6092 if (flag_permissive)
6093 return false;
6094 }
6095 else
6096 error ("%q+E is not a constant expression", t);
6097 }
c41095db
GDR
6098 *non_constant_p = true;
6099 }
6100 return *non_constant_p;
6101}
6102#define VERIFY_CONSTANT(X) \
6103do { \
6104 if (verify_constant ((X), allow_non_constant, non_constant_p)) \
6105 return t; \
6106 } while (0)
6107
6108/* Subroutine of cxx_eval_constant_expression.
6109 Attempt to reduce the unary expression tree T to a compile time value.
6110 If successful, return the value. Otherwise issue a diagnostic
6111 and return error_mark_node. */
6112
6113static tree
6114cxx_eval_unary_expression (const constexpr_call *call, tree t,
6115 bool allow_non_constant, bool addr,
6116 bool *non_constant_p)
6117{
6118 tree r;
6119 tree orig_arg = TREE_OPERAND (t, 0);
6120 tree arg = cxx_eval_constant_expression (call, orig_arg, allow_non_constant,
6121 addr, non_constant_p);
6122 VERIFY_CONSTANT (arg);
6123 if (arg == orig_arg)
6124 return t;
6125 r = fold_build1 (TREE_CODE (t), TREE_TYPE (t), arg);
6126 VERIFY_CONSTANT (r);
6127 return r;
6128}
6129
6130/* Subroutine of cxx_eval_constant_expression.
6131 Like cxx_eval_unary_expression, except for binary expressions. */
6132
6133static tree
6134cxx_eval_binary_expression (const constexpr_call *call, tree t,
6135 bool allow_non_constant, bool addr,
6136 bool *non_constant_p)
6137{
6138 tree r;
6139 tree orig_lhs = TREE_OPERAND (t, 0);
6140 tree orig_rhs = TREE_OPERAND (t, 1);
6141 tree lhs, rhs;
6142 lhs = cxx_eval_constant_expression (call, orig_lhs,
6143 allow_non_constant, addr,
6144 non_constant_p);
6145 VERIFY_CONSTANT (lhs);
6146 rhs = cxx_eval_constant_expression (call, orig_rhs,
6147 allow_non_constant, addr,
6148 non_constant_p);
6149 VERIFY_CONSTANT (rhs);
6150 if (lhs == orig_lhs && rhs == orig_rhs)
6151 return t;
6152 r = fold_build2 (TREE_CODE (t), TREE_TYPE (t), lhs, rhs);
6153 VERIFY_CONSTANT (r);
6154 return r;
6155}
6156
6157/* Subroutine of cxx_eval_constant_expression.
6158 Attempt to evaluate condition expressions. Dead branches are not
6159 looked into. */
6160
6161static tree
6162cxx_eval_conditional_expression (const constexpr_call *call, tree t,
6163 bool allow_non_constant, bool addr,
6164 bool *non_constant_p)
6165{
6166 tree val = cxx_eval_constant_expression (call, TREE_OPERAND (t, 0),
6167 allow_non_constant, addr,
6168 non_constant_p);
6169 VERIFY_CONSTANT (val);
6170 if (val == boolean_true_node)
6171 return cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
6172 allow_non_constant, addr,
6173 non_constant_p);
6174 gcc_assert (val == boolean_false_node);
6175 /* Don't VERIFY_CONSTANT here. */
6176 return cxx_eval_constant_expression (call, TREE_OPERAND (t, 2),
6177 allow_non_constant, addr,
6178 non_constant_p);
6179}
6180
6181/* Subroutine of cxx_eval_constant_expression.
6182 Attempt to reduce a reference to an array slot. */
6183
6184static tree
6185cxx_eval_array_reference (const constexpr_call *call, tree t,
6186 bool allow_non_constant, bool addr,
6187 bool *non_constant_p)
6188{
6189 tree oldary = TREE_OPERAND (t, 0);
6190 tree ary = cxx_eval_constant_expression (call, oldary,
6191 allow_non_constant, addr,
6192 non_constant_p);
6193 tree index, oldidx;
6194 HOST_WIDE_INT i;
6195 unsigned len;
6196 if (*non_constant_p)
6197 return t;
6198 oldidx = TREE_OPERAND (t, 1);
6199 index = cxx_eval_constant_expression (call, oldidx,
6200 allow_non_constant, false,
6201 non_constant_p);
6202 VERIFY_CONSTANT (index);
6203 if (addr && ary == oldary && index == oldidx)
6204 return t;
6205 else if (addr)
6206 return build4 (ARRAY_REF, TREE_TYPE (t), ary, index, NULL, NULL);
6207 len = (TREE_CODE (ary) == CONSTRUCTOR
6208 ? CONSTRUCTOR_NELTS (ary)
6209 : (unsigned)TREE_STRING_LENGTH (ary));
6210 if (compare_tree_int (index, len) >= 0)
6211 {
6212 if (!allow_non_constant)
6213 error ("array subscript out of bound");
6214 *non_constant_p = true;
6215 return t;
6216 }
6217 i = tree_low_cst (index, 0);
6218 if (TREE_CODE (ary) == CONSTRUCTOR)
6219 return VEC_index (constructor_elt, CONSTRUCTOR_ELTS (ary), i)->value;
6220 else
6221 return build_int_cst (cv_unqualified (TREE_TYPE (TREE_TYPE (ary))),
6222 TREE_STRING_POINTER (ary)[i]);
6223 /* Don't VERIFY_CONSTANT here. */
6224}
6225
6226/* Subroutine of cxx_eval_constant_expression.
6227 Attempt to reduce a field access of a value of class type. */
6228
6229static tree
6230cxx_eval_component_reference (const constexpr_call *call, tree t,
6231 bool allow_non_constant, bool addr,
6232 bool *non_constant_p)
6233{
6234 unsigned HOST_WIDE_INT i;
6235 tree field;
6236 tree value;
6237 tree part = TREE_OPERAND (t, 1);
6238 tree orig_whole = TREE_OPERAND (t, 0);
6239 tree whole = cxx_eval_constant_expression (call, orig_whole,
6240 allow_non_constant, addr,
6241 non_constant_p);
6242 if (whole == orig_whole)
6243 return t;
6244 if (addr)
6245 return fold_build3 (COMPONENT_REF, TREE_TYPE (t),
6246 whole, part, NULL_TREE);
6247 /* Don't VERIFY_CONSTANT here; we only want to check that we got a
6248 CONSTRUCTOR. */
6249 if (!*non_constant_p && TREE_CODE (whole) != CONSTRUCTOR)
6250 {
6251 if (!allow_non_constant)
6252 error ("%qE is not a constant expression", orig_whole);
6253 *non_constant_p = true;
6254 }
6255 if (*non_constant_p)
6256 return t;
6257 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (whole), i, field, value)
6258 {
6259 if (field == part)
6260 return value;
6261 }
6262 if (TREE_CODE (TREE_TYPE (whole)) == UNION_TYPE)
6263 {
6264 /* FIXME Mike Miller wants this to be OK. */
6265 if (!allow_non_constant)
6266 error ("accessing %qD member instead of initialized %qD member in "
6267 "constant expression", part, CONSTRUCTOR_ELT (whole, 0)->index);
6268 *non_constant_p = true;
6269 return t;
6270 }
6271 gcc_unreachable();
6272 return error_mark_node;
6273}
6274
4ddf1c7f
JM
6275/* Subroutine of cxx_eval_constant_expression.
6276 Attempt to reduce a field access of a value of class type that is
6277 expressed as a BIT_FIELD_REF. */
6278
6279static tree
6280cxx_eval_bit_field_ref (const constexpr_call *call, tree t,
6281 bool allow_non_constant, bool addr,
6282 bool *non_constant_p)
6283{
6284 tree orig_whole = TREE_OPERAND (t, 0);
6285 tree whole = cxx_eval_constant_expression (call, orig_whole,
6286 allow_non_constant, addr,
6287 non_constant_p);
6288 tree start, field, value;
6289 unsigned HOST_WIDE_INT i;
6290
6291 if (whole == orig_whole)
6292 return t;
6293 /* Don't VERIFY_CONSTANT here; we only want to check that we got a
6294 CONSTRUCTOR. */
6295 if (!*non_constant_p && TREE_CODE (whole) != CONSTRUCTOR)
6296 {
6297 if (!allow_non_constant)
6298 error ("%qE is not a constant expression", orig_whole);
6299 *non_constant_p = true;
6300 }
6301 if (*non_constant_p)
6302 return t;
6303
6304 start = TREE_OPERAND (t, 2);
6305 FOR_EACH_CONSTRUCTOR_ELT (CONSTRUCTOR_ELTS (whole), i, field, value)
6306 {
6307 if (bit_position (field) == start)
6308 return value;
6309 }
6310 gcc_unreachable();
6311 return error_mark_node;
6312}
6313
c41095db
GDR
6314/* Subroutine of cxx_eval_constant_expression.
6315 Evaluate a short-circuited logical expression T in the context
6316 of a given constexpr CALL. BAILOUT_VALUE is the value for
6317 early return. CONTINUE_VALUE is used here purely for
6318 sanity check purposes. */
6319
6320static tree
6321cxx_eval_logical_expression (const constexpr_call *call, tree t,
6322 tree bailout_value, tree continue_value,
6323 bool allow_non_constant, bool addr,
6324 bool *non_constant_p)
6325{
6326 tree r;
6327 tree lhs = cxx_eval_constant_expression (call, TREE_OPERAND (t, 0),
6328 allow_non_constant, addr,
6329 non_constant_p);
6330 VERIFY_CONSTANT (lhs);
6331 if (lhs == bailout_value)
6332 return lhs;
6333 gcc_assert (lhs == continue_value);
6334 r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
6335 allow_non_constant, addr, non_constant_p);
6336 VERIFY_CONSTANT (r);
6337 return r;
6338}
6339
d79b88a1
JM
6340/* REF is a COMPONENT_REF designating a particular field. V is a vector of
6341 CONSTRUCTOR elements to initialize (part of) an object containing that
6342 field. Return a pointer to the constructor_elt corresponding to the
6343 initialization of the field. */
6344
6345static constructor_elt *
6346base_field_constructor_elt (VEC(constructor_elt,gc) *v, tree ref)
6347{
6348 tree aggr = TREE_OPERAND (ref, 0);
6349 tree field = TREE_OPERAND (ref, 1);
6350 HOST_WIDE_INT i;
6351 constructor_elt *ce;
6352
6353 gcc_assert (TREE_CODE (ref) == COMPONENT_REF);
6354
6355 if (TREE_CODE (aggr) == COMPONENT_REF)
6356 {
6357 constructor_elt *base_ce
6358 = base_field_constructor_elt (v, aggr);
6359 v = CONSTRUCTOR_ELTS (base_ce->value);
6360 }
6361
6362 for (i = 0; VEC_iterate (constructor_elt, v, i, ce); ++i)
6363 if (ce->index == field)
6364 return ce;
6365
6366 gcc_unreachable ();
6367 return NULL;
6368}
6369
c41095db
GDR
6370/* Subroutine of cxx_eval_constant_expression.
6371 The expression tree T denotes a C-style array or a C-style
6372 aggregate. Reduce it to a constant expression. */
6373
6374static tree
6375cxx_eval_bare_aggregate (const constexpr_call *call, tree t,
6376 bool allow_non_constant, bool addr,
6377 bool *non_constant_p)
6378{
6379 VEC(constructor_elt,gc) *v = CONSTRUCTOR_ELTS (t);
6380 VEC(constructor_elt,gc) *n = VEC_alloc (constructor_elt, gc,
6381 VEC_length (constructor_elt, v));
6382 constructor_elt *ce;
6383 HOST_WIDE_INT i;
6384 bool changed = false;
c41095db
GDR
6385 gcc_assert (!BRACE_ENCLOSED_INITIALIZER_P (t));
6386 for (i = 0; VEC_iterate (constructor_elt, v, i, ce); ++i)
6387 {
6388 tree elt = cxx_eval_constant_expression (call, ce->value,
6389 allow_non_constant, addr,
6390 non_constant_p);
6391 /* Don't VERIFY_CONSTANT here. */
6392 if (allow_non_constant && *non_constant_p)
6393 goto fail;
6394 if (elt != ce->value)
6395 changed = true;
d79b88a1 6396 if (TREE_CODE (ce->index) == COMPONENT_REF)
c41095db 6397 {
d79b88a1
JM
6398 /* This is an initialization of a vfield inside a base
6399 subaggregate that we already initialized; push this
6400 initialization into the previous initialization. */
6401 constructor_elt *inner = base_field_constructor_elt (n, ce->index);
6402 inner->value = elt;
c41095db
GDR
6403 }
6404 else
6405 CONSTRUCTOR_APPEND_ELT (n, ce->index, elt);
6406 }
6407 if (*non_constant_p || !changed)
6408 {
6409 fail:
6410 VEC_free (constructor_elt, gc, n);
6411 return t;
6412 }
6413 t = build_constructor (TREE_TYPE (t), n);
6414 TREE_CONSTANT (t) = true;
6415 return t;
6416}
6417
6418/* Subroutine of cxx_eval_constant_expression.
6419 The expression tree T is a VEC_INIT_EXPR which denotes the desired
6420 initialization of a non-static data member of array type. Reduce it to a
6421 CONSTRUCTOR.
6422
2b00e201
JM
6423 Note that apart from value-initialization (when VALUE_INIT is true),
6424 this is only intended to support value-initialization and the
6425 initializations done by defaulted constructors for classes with
6426 non-static data members of array type. In this case, VEC_INIT_EXPR_INIT
6427 will either be NULL_TREE for the default constructor, or a COMPONENT_REF
6428 for the copy/move constructor. */
c41095db
GDR
6429
6430static tree
6431cxx_eval_vec_init_1 (const constexpr_call *call, tree atype, tree init,
2b00e201 6432 bool value_init, bool allow_non_constant, bool addr,
c41095db
GDR
6433 bool *non_constant_p)
6434{
6435 tree elttype = TREE_TYPE (atype);
6436 int max = tree_low_cst (array_type_nelts (atype), 0);
6437 VEC(constructor_elt,gc) *n = VEC_alloc (constructor_elt, gc, max + 1);
6438 int i;
6439
6440 /* For the default constructor, build up a call to the default
6441 constructor of the element type. We only need to handle class types
6442 here, as for a constructor to be constexpr, all members must be
6443 initialized, which for a defaulted default constructor means they must
6444 be of a class type with a constexpr default constructor. */
2b00e201
JM
6445 if (value_init)
6446 gcc_assert (!init);
6447 else if (!init)
c41095db
GDR
6448 {
6449 VEC(tree,gc) *argvec = make_tree_vector ();
6450 init = build_special_member_call (NULL_TREE, complete_ctor_identifier,
6451 &argvec, elttype, LOOKUP_NORMAL,
6452 tf_warning_or_error);
6453 release_tree_vector (argvec);
6454 init = cxx_eval_constant_expression (call, init, allow_non_constant,
6455 addr, non_constant_p);
6456 }
6457
6458 if (*non_constant_p && !allow_non_constant)
6459 goto fail;
6460
6461 for (i = 0; i <= max; ++i)
6462 {
6463 tree idx = build_int_cst (size_type_node, i);
6464 tree eltinit;
6465 if (TREE_CODE (elttype) == ARRAY_TYPE)
6466 {
6467 /* A multidimensional array; recurse. */
2b00e201
JM
6468 if (value_init)
6469 eltinit = NULL_TREE;
6470 else
6471 eltinit = cp_build_array_ref (input_location, init, idx,
6472 tf_warning_or_error);
6473 eltinit = cxx_eval_vec_init_1 (call, elttype, eltinit, value_init,
c41095db
GDR
6474 allow_non_constant, addr,
6475 non_constant_p);
6476 }
2b00e201
JM
6477 else if (value_init)
6478 {
6479 eltinit = build_value_init (elttype, tf_warning_or_error);
6480 eltinit = cxx_eval_constant_expression
6481 (call, eltinit, allow_non_constant, addr, non_constant_p);
6482 }
c41095db
GDR
6483 else if (TREE_CODE (init) == CONSTRUCTOR)
6484 {
6485 /* Initializing an element using the call to the default
6486 constructor we just built above. */
6487 eltinit = unshare_expr (init);
6488 }
6489 else
6490 {
6491 /* Copying an element. */
6492 VEC(tree,gc) *argvec;
6493 gcc_assert (same_type_ignoring_top_level_qualifiers_p
6494 (atype, TREE_TYPE (init)));
6495 eltinit = cp_build_array_ref (input_location, init, idx,
6496 tf_warning_or_error);
6497 if (!real_lvalue_p (init))
6498 eltinit = move (eltinit);
6499 argvec = make_tree_vector ();
6500 VEC_quick_push (tree, argvec, eltinit);
6501 eltinit = (build_special_member_call
6502 (NULL_TREE, complete_ctor_identifier, &argvec,
6503 elttype, LOOKUP_NORMAL, tf_warning_or_error));
6504 release_tree_vector (argvec);
6505 eltinit = cxx_eval_constant_expression
6506 (call, eltinit, allow_non_constant, addr, non_constant_p);
6507 }
6508 if (*non_constant_p && !allow_non_constant)
6509 goto fail;
6510 CONSTRUCTOR_APPEND_ELT (n, idx, eltinit);
6511 }
6512
6513 if (!*non_constant_p)
6514 {
6515 init = build_constructor (TREE_TYPE (atype), n);
6516 TREE_CONSTANT (init) = true;
6517 return init;
6518 }
6519
6520 fail:
6521 VEC_free (constructor_elt, gc, n);
6522 return init;
6523}
6524
6525static tree
6526cxx_eval_vec_init (const constexpr_call *call, tree t,
6527 bool allow_non_constant, bool addr,
6528 bool *non_constant_p)
6529{
6530 tree atype = TREE_TYPE (t);
6531 tree init = VEC_INIT_EXPR_INIT (t);
2b00e201
JM
6532 tree r = cxx_eval_vec_init_1 (call, atype, init,
6533 VEC_INIT_EXPR_VALUE_INIT (t),
6534 allow_non_constant, addr, non_constant_p);
c41095db
GDR
6535 if (*non_constant_p)
6536 return t;
6537 else
6538 return r;
6539}
6540
6541/* A less strict version of fold_indirect_ref_1, which requires cv-quals to
6542 match. We want to be less strict for simple *& folding; if we have a
6543 non-const temporary that we access through a const pointer, that should
6544 work. We handle this here rather than change fold_indirect_ref_1
6545 because we're dealing with things like ADDR_EXPR of INTEGER_CST which
6546 don't really make sense outside of constant expression evaluation. Also
6547 we want to allow folding to COMPONENT_REF, which could cause trouble
6548 with TBAA in fold_indirect_ref_1. */
6549
6550static tree
6551cxx_eval_indirect_ref (const constexpr_call *call, tree t,
6552 bool allow_non_constant, bool addr,
6553 bool *non_constant_p)
6554{
6555 tree orig_op0 = TREE_OPERAND (t, 0);
6556 tree op0 = cxx_eval_constant_expression (call, orig_op0, allow_non_constant,
6557 /*addr*/false, non_constant_p);
6558 tree type, sub, subtype, r;
6559 bool empty_base;
6560
6561 /* Don't VERIFY_CONSTANT here. */
6562 if (*non_constant_p)
6563 return t;
6564
6565 type = TREE_TYPE (t);
6566 sub = op0;
6567 r = NULL_TREE;
6568 empty_base = false;
6569
6570 STRIP_NOPS (sub);
6571 subtype = TREE_TYPE (sub);
6572 gcc_assert (POINTER_TYPE_P (subtype));
6573
6574 if (TREE_CODE (sub) == ADDR_EXPR)
6575 {
6576 tree op = TREE_OPERAND (sub, 0);
6577 tree optype = TREE_TYPE (op);
6578
6579 if (same_type_ignoring_top_level_qualifiers_p (optype, type))
6580 r = op;
6581 /* Also handle conversion to an empty base class, which
6582 is represented with a NOP_EXPR. */
6583 else if (!addr && is_empty_class (type)
6584 && CLASS_TYPE_P (optype)
6585 && DERIVED_FROM_P (type, optype))
6586 {
6587 r = op;
6588 empty_base = true;
6589 }
6590 /* *(foo *)&struct_with_foo_field => COMPONENT_REF */
6591 else if (RECORD_OR_UNION_TYPE_P (optype))
6592 {
6593 tree field = TYPE_FIELDS (optype);
6594 for (; field; field = DECL_CHAIN (field))
6595 if (TREE_CODE (field) == FIELD_DECL
6596 && integer_zerop (byte_position (field))
6597 && (same_type_ignoring_top_level_qualifiers_p
6598 (TREE_TYPE (field), type)))
6599 {
6600 r = fold_build3 (COMPONENT_REF, type, op, field, NULL_TREE);
6601 break;
6602 }
6603 }
6604 }
6605 else if (TREE_CODE (sub) == POINTER_PLUS_EXPR
6606 && TREE_CODE (TREE_OPERAND (sub, 1)) == INTEGER_CST)
6607 {
6608 tree op00 = TREE_OPERAND (sub, 0);
6609 tree op01 = TREE_OPERAND (sub, 1);
6610
6611 STRIP_NOPS (op00);
6612 if (TREE_CODE (op00) == ADDR_EXPR)
6613 {
6614 tree op00type;
6615 op00 = TREE_OPERAND (op00, 0);
6616 op00type = TREE_TYPE (op00);
6617
6618 /* ((foo *)&struct_with_foo_field)[1] => COMPONENT_REF */
6619 if (RECORD_OR_UNION_TYPE_P (op00type))
6620 {
6621 tree field = TYPE_FIELDS (op00type);
6622 for (; field; field = DECL_CHAIN (field))
6623 if (TREE_CODE (field) == FIELD_DECL
6624 && tree_int_cst_equal (byte_position (field), op01)
6625 && (same_type_ignoring_top_level_qualifiers_p
6626 (TREE_TYPE (field), type)))
6627 {
6628 r = fold_build3 (COMPONENT_REF, type, op00,
6629 field, NULL_TREE);
6630 break;
6631 }
6632 }
6633 }
6634 }
6635
6636 /* Let build_fold_indirect_ref handle the cases it does fine with. */
6637 if (r == NULL_TREE)
6638 r = build_fold_indirect_ref (op0);
6639 if (TREE_CODE (r) != INDIRECT_REF)
6640 r = cxx_eval_constant_expression (call, r, allow_non_constant,
6641 addr, non_constant_p);
6642 else if (TREE_CODE (sub) == ADDR_EXPR
6643 || TREE_CODE (sub) == POINTER_PLUS_EXPR)
6644 {
6645 gcc_assert (!same_type_ignoring_top_level_qualifiers_p
6646 (TREE_TYPE (TREE_TYPE (sub)), TREE_TYPE (t)));
6647 /* FIXME Mike Miller wants this to be OK. */
6648 if (!allow_non_constant)
6649 error ("accessing value of %qE through a %qT glvalue in a "
6650 "constant expression", build_fold_indirect_ref (sub),
6651 TREE_TYPE (t));
6652 *non_constant_p = true;
6653 return t;
6654 }
6655
6656 /* If we're pulling out the value of an empty base, make sure
6657 that the whole object is constant and then return an empty
6658 CONSTRUCTOR. */
6659 if (empty_base)
6660 {
6661 VERIFY_CONSTANT (r);
6662 r = build_constructor (TREE_TYPE (t), NULL);
6663 TREE_CONSTANT (r) = true;
6664 }
6665
6666 if (TREE_CODE (r) == INDIRECT_REF && TREE_OPERAND (r, 0) == orig_op0)
6667 return t;
6668 return r;
6669}
6670
acfd3fff
JM
6671/* Complain about R, a VAR_DECL, not being usable in a constant expression.
6672 Shared between potential_constant_expression and
6673 cxx_eval_constant_expression. */
6674
6675static void
6676non_const_var_error (tree r)
6677{
6678 tree type = TREE_TYPE (r);
6679 error ("the value of %qD is not usable in a constant "
6680 "expression", r);
6681 if (DECL_DECLARED_CONSTEXPR_P (r))
6682 inform (DECL_SOURCE_LOCATION (r),
6683 "%qD used in its own initializer", r);
6684 else if (INTEGRAL_OR_ENUMERATION_TYPE_P (type))
6685 {
6686 if (!CP_TYPE_CONST_P (type))
6687 inform (DECL_SOURCE_LOCATION (r),
6688 "%q#D is not const", r);
6689 else if (CP_TYPE_VOLATILE_P (type))
6690 inform (DECL_SOURCE_LOCATION (r),
6691 "%q#D is volatile", r);
6692 else if (!DECL_INITIAL (r))
6693 inform (DECL_SOURCE_LOCATION (r),
6694 "%qD was not initialized with a constant "
6695 "expression", r);
6696 else
6697 gcc_unreachable ();
6698 }
6699 else
6700 {
6701 if (cxx_dialect >= cxx0x && !DECL_DECLARED_CONSTEXPR_P (r))
6702 inform (DECL_SOURCE_LOCATION (r),
6703 "%qD was not declared %<constexpr%>", r);
6704 else
6705 inform (DECL_SOURCE_LOCATION (r),
6706 "%qD does not have integral or enumeration type",
6707 r);
6708 }
6709}
6710
c41095db
GDR
6711/* Attempt to reduce the expression T to a constant value.
6712 On failure, issue diagnostic and return error_mark_node. */
6713/* FIXME unify with c_fully_fold */
6714
6715static tree
6716cxx_eval_constant_expression (const constexpr_call *call, tree t,
6717 bool allow_non_constant, bool addr,
6718 bool *non_constant_p)
6719{
6720 tree r = t;
6721
6722 if (t == error_mark_node)
6723 {
6724 *non_constant_p = true;
6725 return t;
6726 }
6727 if (CONSTANT_CLASS_P (t))
6728 {
6729 if (TREE_CODE (t) == PTRMEM_CST)
6730 t = cplus_expand_constant (t);
6731 return t;
6732 }
6733 if (TREE_CODE (t) != NOP_EXPR
6734 && reduced_constant_expression_p (t))
6735 return fold (t);
6736
6737 switch (TREE_CODE (t))
6738 {
6739 case VAR_DECL:
6740 if (addr)
6741 return t;
6742 /* else fall through. */
6743 case CONST_DECL:
6744 r = integral_constant_value (t);
6745 if (TREE_CODE (r) == TARGET_EXPR
6746 && TREE_CODE (TARGET_EXPR_INITIAL (r)) == CONSTRUCTOR)
6747 r = TARGET_EXPR_INITIAL (r);
6748 if (DECL_P (r))
6749 {
6750 if (!allow_non_constant)
acfd3fff 6751 non_const_var_error (r);
c41095db
GDR
6752 *non_constant_p = true;
6753 }
6754 break;
6755
6756 case FUNCTION_DECL:
6757 case LABEL_DECL:
6758 return t;
6759
6760 case PARM_DECL:
6761 if (call && DECL_CONTEXT (t) == call->fundef->decl)
6762 r = lookup_parameter_binding (call, t);
6763 else if (addr)
6764 /* Defer in case this is only used for its type. */;
6765 else
6766 {
6767 if (!allow_non_constant)
6768 error ("%qE is not a constant expression", t);
6769 *non_constant_p = true;
6770 }
6771 break;
6772
6773 case CALL_EXPR:
6774 case AGGR_INIT_EXPR:
6775 r = cxx_eval_call_expression (call, t, allow_non_constant, addr,
6776 non_constant_p);
6777 break;
6778
6779 case TARGET_EXPR:
6780 case INIT_EXPR:
6781 /* Pass false for 'addr' because these codes indicate
6782 initialization of a temporary. */
6783 r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
6784 allow_non_constant, false,
6785 non_constant_p);
6786 if (!*non_constant_p)
6787 /* Adjust the type of the result to the type of the temporary. */
6788 r = adjust_temp_type (TREE_TYPE (t), r);
6789 break;
6790
6791 case SCOPE_REF:
6792 r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 1),
6793 allow_non_constant, addr,
6794 non_constant_p);
6795 break;
6796
6797 case RETURN_EXPR:
6798 case NON_LVALUE_EXPR:
6799 case TRY_CATCH_EXPR:
6800 case CLEANUP_POINT_EXPR:
6801 case MUST_NOT_THROW_EXPR:
6802 case SAVE_EXPR:
6803 r = cxx_eval_constant_expression (call, TREE_OPERAND (t, 0),
6804 allow_non_constant, addr,
6805 non_constant_p);
6806 break;
6807
6808 /* These differ from cxx_eval_unary_expression in that this doesn't
6809 check for a constant operand or result; an address can be
6810 constant without its operand being, and vice versa. */
6811 case INDIRECT_REF:
6812 r = cxx_eval_indirect_ref (call, t, allow_non_constant, addr,
6813 non_constant_p);
6814 break;
6815
6816 case ADDR_EXPR:
6817 {
6818 tree oldop = TREE_OPERAND (t, 0);
6819 tree op = cxx_eval_constant_expression (call, oldop,
6820 allow_non_constant,
6821 /*addr*/true,
6822 non_constant_p);
6823 /* Don't VERIFY_CONSTANT here. */
6824 if (*non_constant_p)
6825 return t;
6826 /* This function does more aggressive folding than fold itself. */
6827 r = build_fold_addr_expr_with_type (op, TREE_TYPE (t));
6828 if (TREE_CODE (r) == ADDR_EXPR && TREE_OPERAND (r, 0) == oldop)
6829 return t;
6830 break;
6831 }
6832
6833 case REALPART_EXPR:
6834 case IMAGPART_EXPR:
6835 case CONJ_EXPR:
6836 case FIX_TRUNC_EXPR:
6837 case FLOAT_EXPR:
6838 case NEGATE_EXPR:
6839 case ABS_EXPR:
6840 case BIT_NOT_EXPR:
6841 case TRUTH_NOT_EXPR:
6842 case FIXED_CONVERT_EXPR:
6843 r = cxx_eval_unary_expression (call, t, allow_non_constant, addr,
6844 non_constant_p);
6845 break;
6846
6847 case COMPOUND_EXPR:
6848 {
6849 /* check_return_expr sometimes wraps a TARGET_EXPR in a
6850 COMPOUND_EXPR; don't get confused. Also handle EMPTY_CLASS_EXPR
6851 introduced by build_call_a. */
6852 tree op0 = TREE_OPERAND (t, 0);
6853 tree op1 = TREE_OPERAND (t, 1);
6854 STRIP_NOPS (op1);
6855 if ((TREE_CODE (op0) == TARGET_EXPR && op1 == TARGET_EXPR_SLOT (op0))
6856 || TREE_CODE (op1) == EMPTY_CLASS_EXPR)
6857 r = cxx_eval_constant_expression (call, op0, allow_non_constant,
6858 addr, non_constant_p);
6859 else
3f7c7453
JM
6860 {
6861 /* Check that the LHS is constant and then discard it. */
6862 cxx_eval_constant_expression (call, op0, allow_non_constant,
6863 false, non_constant_p);
6864 r = cxx_eval_constant_expression (call, op1, allow_non_constant,
6865 addr, non_constant_p);
6866 }
c41095db
GDR
6867 }
6868 break;
6869
6870 case POINTER_PLUS_EXPR:
6871 case PLUS_EXPR:
6872 case MINUS_EXPR:
6873 case MULT_EXPR:
6874 case TRUNC_DIV_EXPR:
6875 case CEIL_DIV_EXPR:
6876 case FLOOR_DIV_EXPR:
6877 case ROUND_DIV_EXPR:
6878 case TRUNC_MOD_EXPR:
6879 case CEIL_MOD_EXPR:
6880 case ROUND_MOD_EXPR:
6881 case RDIV_EXPR:
6882 case EXACT_DIV_EXPR:
6883 case MIN_EXPR:
6884 case MAX_EXPR:
6885 case LSHIFT_EXPR:
6886 case RSHIFT_EXPR:
6887 case LROTATE_EXPR:
6888 case RROTATE_EXPR:
6889 case BIT_IOR_EXPR:
6890 case BIT_XOR_EXPR:
6891 case BIT_AND_EXPR:
6892 case TRUTH_XOR_EXPR:
6893 case LT_EXPR:
6894 case LE_EXPR:
6895 case GT_EXPR:
6896 case GE_EXPR:
6897 case EQ_EXPR:
6898 case NE_EXPR:
6899 case UNORDERED_EXPR:
6900 case ORDERED_EXPR:
6901 case UNLT_EXPR:
6902 case UNLE_EXPR:
6903 case UNGT_EXPR:
6904 case UNGE_EXPR:
6905 case UNEQ_EXPR:
6906 case RANGE_EXPR:
6907 case COMPLEX_EXPR:
c41095db
GDR
6908 r = cxx_eval_binary_expression (call, t, allow_non_constant, addr,
6909 non_constant_p);
6910 break;
6911
6912 /* fold can introduce non-IF versions of these; still treat them as
6913 short-circuiting. */
6914 case TRUTH_AND_EXPR:
6915 case TRUTH_ANDIF_EXPR:
6916 r = cxx_eval_logical_expression (call, t, boolean_false_node,
6917 boolean_true_node,
6918 allow_non_constant, addr,
6919 non_constant_p);
6920 break;
6921
6922 case TRUTH_OR_EXPR:
6923 case TRUTH_ORIF_EXPR:
6924 r = cxx_eval_logical_expression (call, t, boolean_true_node,
6925 boolean_false_node,
6926 allow_non_constant, addr,
6927 non_constant_p);
6928 break;
6929
6930 case ARRAY_REF:
6931 r = cxx_eval_array_reference (call, t, allow_non_constant, addr,
6932 non_constant_p);
6933 break;
6934
6935 case COMPONENT_REF:
6936 r = cxx_eval_component_reference (call, t, allow_non_constant, addr,
6937 non_constant_p);
6938 break;
6939
4ddf1c7f
JM
6940 case BIT_FIELD_REF:
6941 r = cxx_eval_bit_field_ref (call, t, allow_non_constant, addr,
6942 non_constant_p);
6943 break;
6944
c41095db
GDR
6945 case COND_EXPR:
6946 case VEC_COND_EXPR:
6947 r = cxx_eval_conditional_expression (call, t, allow_non_constant, addr,
6948 non_constant_p);
6949 break;
6950
6951 case CONSTRUCTOR:
6952 r = cxx_eval_bare_aggregate (call, t, allow_non_constant, addr,
6953 non_constant_p);
6954 break;
6955
6956 case VEC_INIT_EXPR:
6957 /* We can get this in a defaulted constructor for a class with a
6958 non-static data member of array type. Either the initializer will
6959 be NULL, meaning default-initialization, or it will be an lvalue
6960 or xvalue of the same type, meaning direct-initialization from the
6961 corresponding member. */
6962 r = cxx_eval_vec_init (call, t, allow_non_constant, addr,
6963 non_constant_p);
6964 break;
6965
6966 case CONVERT_EXPR:
6967 case VIEW_CONVERT_EXPR:
6968 case NOP_EXPR:
6969 {
6970 tree oldop = TREE_OPERAND (t, 0);
6971 tree op = oldop;
6972 tree to = TREE_TYPE (t);
6973 tree source = TREE_TYPE (op);
6974 if (TYPE_PTR_P (source) && ARITHMETIC_TYPE_P (to)
6975 && !(TREE_CODE (op) == COMPONENT_REF
6976 && TYPE_PTRMEMFUNC_P (TREE_TYPE (TREE_OPERAND (op, 0)))))
6977 {
6978 if (!allow_non_constant)
6979 error ("conversion of expression %qE of pointer type "
6980 "cannot yield a constant expression", op);
6981 *non_constant_p = true;
6982 return t;
6983 }
6984 op = cxx_eval_constant_expression (call, TREE_OPERAND (t, 0),
6985 allow_non_constant, addr,
6986 non_constant_p);
6987 if (*non_constant_p)
6988 return t;
6989 if (op == oldop)
6990 /* We didn't fold at the top so we could check for ptr-int
6991 conversion. */
6992 return fold (t);
6993 r = fold_build1 (TREE_CODE (t), to, op);
6994 }
6995 break;
6996
6997 case EMPTY_CLASS_EXPR:
6998 /* This is good enough for a function argument that might not get
6999 used, and they can't do anything with it, so just return it. */
7000 return t;
7001
7002 case LAMBDA_EXPR:
7003 case DYNAMIC_CAST_EXPR:
7004 case PSEUDO_DTOR_EXPR:
7005 case PREINCREMENT_EXPR:
7006 case POSTINCREMENT_EXPR:
7007 case PREDECREMENT_EXPR:
7008 case POSTDECREMENT_EXPR:
7009 case NEW_EXPR:
7010 case VEC_NEW_EXPR:
7011 case DELETE_EXPR:
7012 case VEC_DELETE_EXPR:
7013 case THROW_EXPR:
7014 case MODIFY_EXPR:
7015 case MODOP_EXPR:
7016 /* GCC internal stuff. */
7017 case VA_ARG_EXPR:
7018 case OBJ_TYPE_REF:
7019 case WITH_CLEANUP_EXPR:
7020 case STATEMENT_LIST:
7021 case BIND_EXPR:
7022 case NON_DEPENDENT_EXPR:
7023 case BASELINK:
7024 case EXPR_STMT:
0eb35d46 7025 case OFFSET_REF:
c41095db
GDR
7026 if (!allow_non_constant)
7027 error_at (EXPR_LOC_OR_HERE (t),
7028 "expression %qE is not a constant-expression", t);
7029 *non_constant_p = true;
7030 break;
7031
7032 default:
7033 internal_error ("unexpected expression %qE of kind %s", t,
7034 tree_code_name[TREE_CODE (t)]);
7035 *non_constant_p = true;
7036 break;
7037 }
7038
7039 if (r == error_mark_node)
7040 *non_constant_p = true;
7041
7042 if (*non_constant_p)
7043 return t;
7044 else
7045 return r;
7046}
7047
7048static tree
7049cxx_eval_outermost_constant_expr (tree t, bool allow_non_constant)
7050{
7051 bool non_constant_p = false;
7052 tree r = cxx_eval_constant_expression (NULL, t, allow_non_constant,
7053 false, &non_constant_p);
7054
9e115cec 7055 verify_constant (r, allow_non_constant, &non_constant_p);
c41095db
GDR
7056
7057 if (non_constant_p && !allow_non_constant)
7058 return error_mark_node;
7059 else if (non_constant_p && TREE_CONSTANT (t))
7060 {
7061 /* This isn't actually constant, so unset TREE_CONSTANT. */
7062 if (EXPR_P (t) || TREE_CODE (t) == CONSTRUCTOR)
7063 r = copy_node (t);
7064 else
7065 r = build_nop (TREE_TYPE (t), t);
7066 TREE_CONSTANT (r) = false;
7067 return r;
7068 }
7069 else if (non_constant_p || r == t)
7070 return t;
7071 else if (TREE_CODE (r) == CONSTRUCTOR && CLASS_TYPE_P (TREE_TYPE (r)))
7072 {
7073 if (TREE_CODE (t) == TARGET_EXPR
7074 && TARGET_EXPR_INITIAL (t) == r)
7075 return t;
7076 else
7077 {
7078 r = get_target_expr (r);
7079 TREE_CONSTANT (r) = true;
7080 return r;
7081 }
7082 }
7083 else
7084 return r;
7085}
7086
fa2200cb
JM
7087/* Returns true if T is a valid subexpression of a constant expression,
7088 even if it isn't itself a constant expression. */
7089
7090bool
7091is_sub_constant_expr (tree t)
7092{
7093 bool non_constant_p = false;
7094 cxx_eval_constant_expression (NULL, t, true, false, &non_constant_p);
7095 return !non_constant_p;
7096}
7097
c41095db
GDR
7098/* If T represents a constant expression returns its reduced value.
7099 Otherwise return error_mark_node. If T is dependent, then
7100 return NULL. */
7101
7102tree
7103cxx_constant_value (tree t)
7104{
7105 return cxx_eval_outermost_constant_expr (t, false);
7106}
7107
7108/* If T is a constant expression, returns its reduced value.
7109 Otherwise, if T does not have TREE_CONSTANT set, returns T.
7110 Otherwise, returns a version of T without TREE_CONSTANT. */
7111
7112tree
7113maybe_constant_value (tree t)
7114{
7115 tree r;
7116
7117 if (type_dependent_expression_p (t)
4be5e5b1 7118 || type_unknown_p (t)
d6ed1c89 7119 || !potential_constant_expression (t)
c41095db
GDR
7120 || value_dependent_expression_p (t))
7121 return t;
7122
7123 r = cxx_eval_outermost_constant_expr (t, true);
7124#ifdef ENABLE_CHECKING
7125 /* cp_tree_equal looks through NOPs, so allow them. */
7126 gcc_assert (r == t
7127 || CONVERT_EXPR_P (t)
7128 || (TREE_CONSTANT (t) && !TREE_CONSTANT (r))
7129 || !cp_tree_equal (r, t));
7130#endif
7131 return r;
7132}
7133
7134/* Like maybe_constant_value, but returns a CONSTRUCTOR directly, rather
7135 than wrapped in a TARGET_EXPR. */
7136
7137tree
7138maybe_constant_init (tree t)
7139{
7140 t = maybe_constant_value (t);
7141 if (TREE_CODE (t) == TARGET_EXPR)
7142 {
7143 tree init = TARGET_EXPR_INITIAL (t);
7144 if (TREE_CODE (init) == CONSTRUCTOR
7145 && TREE_CONSTANT (init))
7146 t = init;
7147 }
7148 return t;
7149}
7150
d6ed1c89
JM
7151#if 0
7152/* FIXME see ADDR_EXPR section in potential_constant_expression_1. */
66e61a34
JM
7153/* Return true if the object referred to by REF has automatic or thread
7154 local storage. */
7ecbca9d 7155
66e61a34
JM
7156enum { ck_ok, ck_bad, ck_unknown };
7157static int
7158check_automatic_or_tls (tree ref)
7159{
7160 enum machine_mode mode;
7161 HOST_WIDE_INT bitsize, bitpos;
7162 tree offset;
7163 int volatilep = 0, unsignedp = 0;
7164 tree decl = get_inner_reference (ref, &bitsize, &bitpos, &offset,
7165 &mode, &unsignedp, &volatilep, false);
7166 duration_kind dk;
7167
7168 /* If there isn't a decl in the middle, we don't know the linkage here,
7169 and this isn't a constant expression anyway. */
7170 if (!DECL_P (decl))
7171 return ck_unknown;
7172 dk = decl_storage_duration (decl);
7173 return (dk == dk_auto || dk == dk_thread) ? ck_bad : ck_ok;
7174}
d6ed1c89 7175#endif
66e61a34
JM
7176
7177/* Return true if the DECL designates a builtin function that is
7178 morally constexpr, in the sense that its parameter types and
7179 return type are literal types and the compiler is allowed to
7180 fold its invocations. */
7181
7182static bool
7183morally_constexpr_builtin_function_p (tree decl)
7184{
7185 tree funtype = TREE_TYPE (decl);
7186 tree t;
7187
7188 if (!is_builtin_fn (decl))
7189 return false;
7190 if (!literal_type_p (TREE_TYPE (funtype)))
7191 return false;
7192 for (t = TYPE_ARG_TYPES (funtype); t != NULL ; t = TREE_CHAIN (t))
7193 {
7194 if (t == void_list_node)
7195 return true;
7196 if (!literal_type_p (TREE_VALUE (t)))
7197 return false;
7198 }
7199 /* We assume no varargs builtins are suitable. */
7200 return t != NULL;
7201}
7202
d6ed1c89
JM
7203/* Return true if T denotes a potentially constant expression. Issue
7204 diagnostic as appropriate under control of FLAGS. If WANT_RVAL is true,
7205 an lvalue-rvalue conversion is implied.
66e61a34 7206
d6ed1c89 7207 C++0x [expr.const] used to say
66e61a34
JM
7208
7209 6 An expression is a potential constant expression if it is
7210 a constant expression where all occurences of function
7211 parameters are replaced by arbitrary constant expressions
7212 of the appropriate type.
7213
7214 2 A conditional expression is a constant expression unless it
7215 involves one of the following as a potentially evaluated
7216 subexpression (3.2), but subexpressions of logical AND (5.14),
7217 logical OR (5.15), and conditional (5.16) operations that are
7218 not evaluated are not considered. */
7219
d6ed1c89
JM
7220static bool
7221potential_constant_expression_1 (tree t, bool want_rval, tsubst_flags_t flags)
66e61a34 7222{
d6ed1c89 7223 enum { any = false, rval = true };
66e61a34
JM
7224 int i;
7225 tree tmp;
d6ed1c89
JM
7226
7227 /* C++98 has different rules for the form of a constant expression that
7228 are enforced in the parser, so we can assume that anything that gets
7229 this far is suitable. */
7230 if (cxx_dialect < cxx0x)
7231 return true;
7232
66e61a34
JM
7233 if (t == error_mark_node)
7234 return false;
d6ed1c89
JM
7235 if (t == NULL_TREE)
7236 return true;
66e61a34
JM
7237 if (TREE_THIS_VOLATILE (t))
7238 {
7239 if (flags & tf_error)
7240 error ("expression %qE has side-effects", t);
7241 return false;
7242 }
7243 if (CONSTANT_CLASS_P (t))
93dd46fb
JM
7244 {
7245 if (TREE_OVERFLOW (t))
7246 {
7247 if (flags & tf_error)
7248 {
7249 permerror (EXPR_LOC_OR_HERE (t),
7250 "overflow in constant expression");
7251 if (flag_permissive)
7252 return true;
7253 }
7254 return false;
7255 }
7256 return true;
7257 }
66e61a34
JM
7258
7259 switch (TREE_CODE (t))
7260 {
7261 case FUNCTION_DECL:
d6ed1c89 7262 case BASELINK:
5b883ca6 7263 case TEMPLATE_DECL:
d6ed1c89
JM
7264 case OVERLOAD:
7265 case TEMPLATE_ID_EXPR:
66e61a34
JM
7266 case LABEL_DECL:
7267 case CONST_DECL:
d6ed1c89
JM
7268 case SIZEOF_EXPR:
7269 case ALIGNOF_EXPR:
7270 case OFFSETOF_EXPR:
7271 case NOEXCEPT_EXPR:
7272 case TEMPLATE_PARM_INDEX:
7273 case TRAIT_EXPR:
7274 case IDENTIFIER_NODE:
66e61a34
JM
7275 return true;
7276
7277 case PARM_DECL:
7278 /* -- this (5.1) unless it appears as the postfix-expression in a
7279 class member access expression, including the result of the
7280 implicit transformation in the body of the non-static
7281 member function (9.3.1); */
7282 if (is_this_parameter (t))
7283 {
7284 if (flags & tf_error)
7285 error ("%qE is not a potential constant expression", t);
7286 return false;
7287 }
7288 return true;
7289
7290 case AGGR_INIT_EXPR:
7291 case CALL_EXPR:
7292 /* -- an invocation of a function other than a constexpr function
7293 or a constexpr constructor. */
7294 {
7295 tree fun = get_function_named_in_call (t);
7296 const int nargs = call_expr_nargs (t);
7297 if (TREE_CODE (fun) != FUNCTION_DECL)
7298 {
d6ed1c89 7299 if (potential_constant_expression_1 (fun, rval, flags))
66e61a34
JM
7300 /* Might end up being a constant function pointer. */
7301 return true;
7302 if (flags & tf_error)
7303 error ("%qE is not a function name", fun);
7304 return false;
7305 }
7306 /* Skip initial arguments to base constructors. */
7307 if (DECL_BASE_CONSTRUCTOR_P (fun))
7308 i = num_artificial_parms_for (fun);
7309 else
7310 i = 0;
7311 fun = DECL_ORIGIN (fun);
7312 if (builtin_valid_in_constant_expr_p (fun))
7313 return true;
7314 if (!DECL_DECLARED_CONSTEXPR_P (fun)
7315 && !morally_constexpr_builtin_function_p (fun))
7316 {
7317 if (flags & tf_error)
7318 error ("%qD is not %<constexpr%>", fun);
7319 return false;
7320 }
7321 for (; i < nargs; ++i)
7322 {
7323 tree x = get_nth_callarg (t, i);
7324 /* A call to a non-static member function takes the
7325 address of the object as the first argument.
7326 But in a constant expression the address will be folded
7327 away, so look through it now. */
7328 if (i == 0 && DECL_NONSTATIC_MEMBER_P (fun)
7329 && !DECL_CONSTRUCTOR_P (fun))
7330 {
66e61a34
JM
7331 if (is_this_parameter (x))
7332 /* OK. */;
d6ed1c89 7333 else if (!potential_constant_expression_1 (x, rval, flags))
66e61a34
JM
7334 {
7335 if (flags & tf_error)
7336 error ("object argument is not a potential constant "
7337 "expression");
7338 return false;
7339 }
7340 }
d6ed1c89 7341 else if (!potential_constant_expression_1 (x, rval, flags))
66e61a34
JM
7342 {
7343 if (flags & tf_error)
7344 error ("argument in position %qP is not a "
7345 "potential constant expression", i);
7346 return false;
7347 }
7348 }
7349 return true;
7350 }
7351
7352 case NON_LVALUE_EXPR:
7353 /* -- an lvalue-to-rvalue conversion (4.1) unless it is applied to
7354 -- an lvalue of integral type that refers to a non-volatile
7355 const variable or static data member initialized with
7356 constant expressions, or
7357
7358 -- an lvalue of literal type that refers to non-volatile
7359 object defined with constexpr, or that refers to a
7360 sub-object of such an object; */
d6ed1c89 7361 return potential_constant_expression_1 (TREE_OPERAND (t, 0), rval, flags);
66e61a34
JM
7362
7363 case VAR_DECL:
acfd3fff
JM
7364 if (want_rval && !decl_constant_var_p (t)
7365 && !dependent_type_p (TREE_TYPE (t)))
66e61a34
JM
7366 {
7367 if (flags & tf_error)
acfd3fff 7368 non_const_var_error (t);
66e61a34
JM
7369 return false;
7370 }
7371 return true;
7372
7373 case NOP_EXPR:
7374 case CONVERT_EXPR:
7375 case VIEW_CONVERT_EXPR:
7376 /* -- an array-to-pointer conversion that is applied to an lvalue
7377 that designates an object with thread or automatic storage
7378 duration; FIXME not implemented as it breaks constexpr arrays;
7379 need to fix the standard
7380 -- a type conversion from a pointer or pointer-to-member type
7381 to a literal type. */
7382 {
7383 tree from = TREE_OPERAND (t, 0);
7384 tree source = TREE_TYPE (from);
7385 tree target = TREE_TYPE (t);
7386 if (TYPE_PTR_P (source) && ARITHMETIC_TYPE_P (target)
7387 && !(TREE_CODE (from) == COMPONENT_REF
7388 && TYPE_PTRMEMFUNC_P (TREE_TYPE (TREE_OPERAND (from, 0)))))
7389 {
7390 if (flags & tf_error)
7391 error ("conversion of expression %qE of pointer type "
7392 "cannot yield a constant expression", from);
7393 return false;
7394 }
d6ed1c89
JM
7395 return (potential_constant_expression_1
7396 (from, TREE_CODE (t) != VIEW_CONVERT_EXPR, flags));
66e61a34
JM
7397 }
7398
7399 case ADDR_EXPR:
7400 /* -- a unary operator & that is applied to an lvalue that
7401 designates an object with thread or automatic storage
7402 duration; */
7403 t = TREE_OPERAND (t, 0);
d6ed1c89
JM
7404#if 0
7405 /* FIXME adjust when issue 1197 is fully resolved. For now don't do
7406 any checking here, as we might dereference the pointer later. If
7407 we remove this code, also remove check_automatic_or_tls. */
66e61a34
JM
7408 i = check_automatic_or_tls (t);
7409 if (i == ck_ok)
7410 return true;
7411 if (i == ck_bad)
7412 {
7413 if (flags & tf_error)
7414 error ("address-of an object %qE with thread local or "
7415 "automatic storage is not a constant expression", t);
7416 return false;
7417 }
d6ed1c89
JM
7418#endif
7419 return potential_constant_expression_1 (t, any, flags);
66e61a34
JM
7420
7421 case COMPONENT_REF:
7422 case BIT_FIELD_REF:
d6ed1c89
JM
7423 case ARROW_EXPR:
7424 case OFFSET_REF:
66e61a34
JM
7425 /* -- a class member access unless its postfix-expression is
7426 of literal type or of pointer to literal type. */
7427 /* This test would be redundant, as it follows from the
7428 postfix-expression being a potential constant expression. */
d6ed1c89
JM
7429 return potential_constant_expression_1 (TREE_OPERAND (t, 0),
7430 want_rval, flags);
7431
7432 case EXPR_PACK_EXPANSION:
7433 return potential_constant_expression_1 (PACK_EXPANSION_PATTERN (t),
7434 want_rval, flags);
66e61a34
JM
7435
7436 case INDIRECT_REF:
7437 {
7438 tree x = TREE_OPERAND (t, 0);
7439 STRIP_NOPS (x);
7440 if (is_this_parameter (x))
cb21e9cd
JM
7441 {
7442 if (DECL_CONSTRUCTOR_P (DECL_CONTEXT (x)) && want_rval)
7443 {
7444 if (flags & tf_error)
7445 error ("the value of the object being constructed is "
7446 "not a constant expression");
7447 return false;
7448 }
7449 return true;
7450 }
d6ed1c89 7451 return potential_constant_expression_1 (x, rval, flags);
66e61a34
JM
7452 }
7453
7454 case LAMBDA_EXPR:
7455 case DYNAMIC_CAST_EXPR:
7456 case PSEUDO_DTOR_EXPR:
7457 case PREINCREMENT_EXPR:
7458 case POSTINCREMENT_EXPR:
7459 case PREDECREMENT_EXPR:
7460 case POSTDECREMENT_EXPR:
7461 case NEW_EXPR:
7462 case VEC_NEW_EXPR:
7463 case DELETE_EXPR:
7464 case VEC_DELETE_EXPR:
7465 case THROW_EXPR:
7466 case MODIFY_EXPR:
7467 case MODOP_EXPR:
7468 /* GCC internal stuff. */
7469 case VA_ARG_EXPR:
7470 case OBJ_TYPE_REF:
7471 case WITH_CLEANUP_EXPR:
7472 case CLEANUP_POINT_EXPR:
7473 case MUST_NOT_THROW_EXPR:
7474 case TRY_CATCH_EXPR:
7475 case STATEMENT_LIST:
d6ed1c89
JM
7476 /* Don't bother trying to define a subset of statement-expressions to
7477 be constant-expressions, at least for now. */
7478 case STMT_EXPR:
7479 case EXPR_STMT:
66e61a34
JM
7480 case BIND_EXPR:
7481 if (flags & tf_error)
7482 error ("expression %qE is not a constant-expression", t);
7483 return false;
7484
7485 case TYPEID_EXPR:
7486 /* -- a typeid expression whose operand is of polymorphic
7487 class type; */
7488 {
7489 tree e = TREE_OPERAND (t, 0);
d6ed1c89
JM
7490 if (!TYPE_P (e) && !type_dependent_expression_p (e)
7491 && TYPE_POLYMORPHIC_P (TREE_TYPE (e)))
66e61a34
JM
7492 {
7493 if (flags & tf_error)
7494 error ("typeid-expression is not a constant expression "
7495 "because %qE is of polymorphic type", e);
7496 return false;
7497 }
7498 return true;
7499 }
7500
7501 case MINUS_EXPR:
7502 /* -- a subtraction where both operands are pointers. */
7503 if (TYPE_PTR_P (TREE_OPERAND (t, 0))
7504 && TYPE_PTR_P (TREE_OPERAND (t, 1)))
7505 {
7506 if (flags & tf_error)
7507 error ("difference of two pointer expressions is not "
7508 "a constant expression");
7509 return false;
7510 }
d6ed1c89 7511 want_rval = true;
66e61a34
JM
7512 goto binary;
7513
7514 case LT_EXPR:
7515 case LE_EXPR:
7516 case GT_EXPR:
7517 case GE_EXPR:
7518 case EQ_EXPR:
7519 case NE_EXPR:
7520 /* -- a relational or equality operator where at least
7521 one of the operands is a pointer. */
7522 if (TYPE_PTR_P (TREE_OPERAND (t, 0))
7523 || TYPE_PTR_P (TREE_OPERAND (t, 1)))
7524 {
7525 if (flags & tf_error)
7526 error ("pointer comparison expression is not a "
7527 "constant expression");
7528 return false;
7529 }
d6ed1c89 7530 want_rval = true;
66e61a34
JM
7531 goto binary;
7532
7533 case REALPART_EXPR:
7534 case IMAGPART_EXPR:
7535 case CONJ_EXPR:
7536 case SAVE_EXPR:
7537 case FIX_TRUNC_EXPR:
7538 case FLOAT_EXPR:
7539 case NEGATE_EXPR:
7540 case ABS_EXPR:
7541 case BIT_NOT_EXPR:
7542 case TRUTH_NOT_EXPR:
66e61a34 7543 case FIXED_CONVERT_EXPR:
d6ed1c89
JM
7544 case UNARY_PLUS_EXPR:
7545 return potential_constant_expression_1 (TREE_OPERAND (t, 0), rval,
7546 flags);
7547
7548 case CAST_EXPR:
7549 case CONST_CAST_EXPR:
7550 case STATIC_CAST_EXPR:
7551 case REINTERPRET_CAST_EXPR:
7552 return (potential_constant_expression_1
7553 (TREE_OPERAND (t, 0),
7554 TREE_CODE (TREE_TYPE (t)) != REFERENCE_TYPE, flags));
7555
7556 case PAREN_EXPR:
7557 case NON_DEPENDENT_EXPR:
66e61a34
JM
7558 /* For convenience. */
7559 case RETURN_EXPR:
d6ed1c89
JM
7560 return potential_constant_expression_1 (TREE_OPERAND (t, 0),
7561 want_rval, flags);
7562
7563 case SCOPE_REF:
7564 return potential_constant_expression_1 (TREE_OPERAND (t, 1),
7565 want_rval, flags);
66e61a34
JM
7566
7567 case INIT_EXPR:
7568 case TARGET_EXPR:
d6ed1c89
JM
7569 return potential_constant_expression_1 (TREE_OPERAND (t, 1),
7570 rval, flags);
66e61a34
JM
7571
7572 case CONSTRUCTOR:
7573 {
7574 VEC(constructor_elt, gc) *v = CONSTRUCTOR_ELTS (t);
7575 constructor_elt *ce;
7576 for (i = 0; VEC_iterate (constructor_elt, v, i, ce); ++i)
d6ed1c89 7577 if (!potential_constant_expression_1 (ce->value, want_rval, flags))
66e61a34
JM
7578 return false;
7579 return true;
7580 }
7581
7582 case TREE_LIST:
7583 {
7584 gcc_assert (TREE_PURPOSE (t) == NULL_TREE
7585 || DECL_P (TREE_PURPOSE (t)));
d6ed1c89
JM
7586 if (!potential_constant_expression_1 (TREE_VALUE (t), want_rval,
7587 flags))
66e61a34
JM
7588 return false;
7589 if (TREE_CHAIN (t) == NULL_TREE)
7590 return true;
d6ed1c89
JM
7591 return potential_constant_expression_1 (TREE_CHAIN (t), want_rval,
7592 flags);
66e61a34
JM
7593 }
7594
7595 case TRUNC_DIV_EXPR:
7596 case CEIL_DIV_EXPR:
7597 case FLOOR_DIV_EXPR:
7598 case ROUND_DIV_EXPR:
7599 case TRUNC_MOD_EXPR:
7600 case CEIL_MOD_EXPR:
7601 case ROUND_MOD_EXPR:
d6ed1c89
JM
7602 {
7603 tree denom = TREE_OPERAND (t, 1);
7604 /* We can't call maybe_constant_value on an expression
7605 that hasn't been through fold_non_dependent_expr yet. */
7606 if (!processing_template_decl)
7607 denom = maybe_constant_value (denom);
7608 if (integer_zerop (denom))
7609 {
7610 if (flags & tf_error)
7611 error ("division by zero is not a constant-expression");
7612 return false;
7613 }
7614 else
7615 {
7616 want_rval = true;
7617 goto binary;
7618 }
7619 }
66e61a34
JM
7620
7621 case COMPOUND_EXPR:
7622 {
7623 /* check_return_expr sometimes wraps a TARGET_EXPR in a
7624 COMPOUND_EXPR; don't get confused. Also handle EMPTY_CLASS_EXPR
7625 introduced by build_call_a. */
7626 tree op0 = TREE_OPERAND (t, 0);
7627 tree op1 = TREE_OPERAND (t, 1);
7628 STRIP_NOPS (op1);
7629 if ((TREE_CODE (op0) == TARGET_EXPR && op1 == TARGET_EXPR_SLOT (op0))
7630 || TREE_CODE (op1) == EMPTY_CLASS_EXPR)
d6ed1c89 7631 return potential_constant_expression_1 (op0, want_rval, flags);
66e61a34
JM
7632 else
7633 goto binary;
7634 }
7635
7636 /* If the first operand is the non-short-circuit constant, look at
7637 the second operand; otherwise we only care about the first one for
7638 potentiality. */
7639 case TRUTH_AND_EXPR:
7640 case TRUTH_ANDIF_EXPR:
7641 tmp = boolean_true_node;
7642 goto truth;
7643 case TRUTH_OR_EXPR:
7644 case TRUTH_ORIF_EXPR:
7645 tmp = boolean_false_node;
7646 truth:
7647 if (TREE_OPERAND (t, 0) == tmp)
d6ed1c89 7648 return potential_constant_expression_1 (TREE_OPERAND (t, 1), rval, flags);
66e61a34 7649 else
d6ed1c89 7650 return potential_constant_expression_1 (TREE_OPERAND (t, 0), rval, flags);
66e61a34 7651
66e61a34
JM
7652 case PLUS_EXPR:
7653 case MULT_EXPR:
7654 case POINTER_PLUS_EXPR:
7655 case RDIV_EXPR:
7656 case EXACT_DIV_EXPR:
7657 case MIN_EXPR:
7658 case MAX_EXPR:
7659 case LSHIFT_EXPR:
7660 case RSHIFT_EXPR:
7661 case LROTATE_EXPR:
7662 case RROTATE_EXPR:
7663 case BIT_IOR_EXPR:
7664 case BIT_XOR_EXPR:
7665 case BIT_AND_EXPR:
81cce6f6 7666 case TRUTH_XOR_EXPR:
66e61a34
JM
7667 case UNLT_EXPR:
7668 case UNLE_EXPR:
7669 case UNGT_EXPR:
7670 case UNGE_EXPR:
7671 case UNEQ_EXPR:
7672 case RANGE_EXPR:
7673 case COMPLEX_EXPR:
d6ed1c89
JM
7674 want_rval = true;
7675 /* Fall through. */
7676 case ARRAY_REF:
7677 case ARRAY_RANGE_REF:
7678 case MEMBER_REF:
7679 case DOTSTAR_EXPR:
66e61a34
JM
7680 binary:
7681 for (i = 0; i < 2; ++i)
d6ed1c89
JM
7682 if (!potential_constant_expression_1 (TREE_OPERAND (t, i),
7683 want_rval, flags))
66e61a34
JM
7684 return false;
7685 return true;
7686
7687 case COND_EXPR:
7688 case VEC_COND_EXPR:
7689 /* If the condition is a known constant, we know which of the legs we
7690 care about; otherwise we only require that the condition and
7691 either of the legs be potentially constant. */
7692 tmp = TREE_OPERAND (t, 0);
d6ed1c89 7693 if (!potential_constant_expression_1 (tmp, rval, flags))
66e61a34
JM
7694 return false;
7695 else if (tmp == boolean_true_node)
d6ed1c89
JM
7696 return potential_constant_expression_1 (TREE_OPERAND (t, 1),
7697 want_rval, flags);
66e61a34 7698 else if (tmp == boolean_false_node)
d6ed1c89
JM
7699 return potential_constant_expression_1 (TREE_OPERAND (t, 2),
7700 want_rval, flags);
66e61a34 7701 for (i = 1; i < 3; ++i)
d6ed1c89
JM
7702 if (potential_constant_expression_1 (TREE_OPERAND (t, i),
7703 want_rval, tf_none))
66e61a34
JM
7704 return true;
7705 if (flags & tf_error)
7706 error ("expression %qE is not a constant-expression", t);
7707 return false;
7708
7709 case VEC_INIT_EXPR:
d6ed1c89
JM
7710 if (VEC_INIT_EXPR_IS_CONSTEXPR (t))
7711 return true;
7712 if (flags & tf_error)
262a7d6b
JM
7713 {
7714 error ("non-constant array initialization");
7715 diagnose_non_constexpr_vec_init (t);
7716 }
d6ed1c89 7717 return false;
66e61a34
JM
7718
7719 default:
7720 sorry ("unexpected ast of kind %s", tree_code_name[TREE_CODE (t)]);
7721 gcc_unreachable();
7722 return false;
7723 }
7724}
7725
d6ed1c89
JM
7726/* The main entry point to the above. */
7727
7728bool
7729potential_constant_expression (tree t)
7730{
7731 return potential_constant_expression_1 (t, false, tf_none);
7732}
7733
4be5e5b1
JM
7734/* As above, but require a constant rvalue. */
7735
7736bool
7737potential_rvalue_constant_expression (tree t)
7738{
7739 return potential_constant_expression_1 (t, true, tf_none);
7740}
7741
d6ed1c89
JM
7742/* Like above, but complain about non-constant expressions. */
7743
7744bool
7745require_potential_constant_expression (tree t)
7746{
7747 return potential_constant_expression_1 (t, false, tf_warning_or_error);
7748}
4be5e5b1
JM
7749
7750/* Cross product of the above. */
7751
7752bool
7753require_potential_rvalue_constant_expression (tree t)
7754{
7755 return potential_constant_expression_1 (t, true, tf_warning_or_error);
7756}
66e61a34 7757\f
d5f4eddd
JM
7758/* Constructor for a lambda expression. */
7759
7760tree
7761build_lambda_expr (void)
7762{
7763 tree lambda = make_node (LAMBDA_EXPR);
7764 LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) = CPLD_NONE;
7765 LAMBDA_EXPR_CAPTURE_LIST (lambda) = NULL_TREE;
7766 LAMBDA_EXPR_THIS_CAPTURE (lambda) = NULL_TREE;
7767 LAMBDA_EXPR_RETURN_TYPE (lambda) = NULL_TREE;
7768 LAMBDA_EXPR_MUTABLE_P (lambda) = false;
7769 return lambda;
7770}
7771
7772/* Create the closure object for a LAMBDA_EXPR. */
7773
7774tree
7775build_lambda_object (tree lambda_expr)
7776{
7777 /* Build aggregate constructor call.
7778 - cp_parser_braced_list
7779 - cp_parser_functional_cast */
7780 VEC(constructor_elt,gc) *elts = NULL;
7781 tree node, expr, type;
7782 location_t saved_loc;
7783
7784 if (processing_template_decl)
7785 return lambda_expr;
7786
7787 /* Make sure any error messages refer to the lambda-introducer. */
7788 saved_loc = input_location;
7789 input_location = LAMBDA_EXPR_LOCATION (lambda_expr);
7790
7791 for (node = LAMBDA_EXPR_CAPTURE_LIST (lambda_expr);
7792 node;
7793 node = TREE_CHAIN (node))
7794 {
7795 tree field = TREE_PURPOSE (node);
7796 tree val = TREE_VALUE (node);
7797
a26e0b81
PC
7798 if (field == error_mark_node)
7799 {
7800 expr = error_mark_node;
7801 goto out;
7802 }
7803
1f4a7a48
JM
7804 if (DECL_P (val))
7805 mark_used (val);
7806
d5f4eddd
JM
7807 /* Mere mortals can't copy arrays with aggregate initialization, so
7808 do some magic to make it work here. */
7809 if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE)
7810 val = build_array_copy (val);
37a7519a
JM
7811 else if (DECL_NORMAL_CAPTURE_P (field)
7812 && TREE_CODE (TREE_TYPE (field)) != REFERENCE_TYPE)
7813 {
7814 /* "the entities that are captured by copy are used to
7815 direct-initialize each corresponding non-static data
7816 member of the resulting closure object."
7817
7818 There's normally no way to express direct-initialization
7819 from an element of a CONSTRUCTOR, so we build up a special
7820 TARGET_EXPR to bypass the usual copy-initialization. */
7821 val = force_rvalue (val);
7822 if (TREE_CODE (val) == TARGET_EXPR)
7823 TARGET_EXPR_DIRECT_INIT_P (val) = true;
7824 }
d5f4eddd
JM
7825
7826 CONSTRUCTOR_APPEND_ELT (elts, DECL_NAME (field), val);
7827 }
7828
7829 expr = build_constructor (init_list_type_node, elts);
7830 CONSTRUCTOR_IS_DIRECT_INIT (expr) = 1;
7831
7832 /* N2927: "[The closure] class type is not an aggregate."
7833 But we briefly treat it as an aggregate to make this simpler. */
7834 type = TREE_TYPE (lambda_expr);
7835 CLASSTYPE_NON_AGGREGATE (type) = 0;
7836 expr = finish_compound_literal (type, expr);
7837 CLASSTYPE_NON_AGGREGATE (type) = 1;
7838
a26e0b81 7839 out:
d5f4eddd
JM
7840 input_location = saved_loc;
7841 return expr;
7842}
7843
7844/* Return an initialized RECORD_TYPE for LAMBDA.
7845 LAMBDA must have its explicit captures already. */
7846
7847tree
7848begin_lambda_type (tree lambda)
7849{
7850 tree type;
7851
7852 {
7853 /* Unique name. This is just like an unnamed class, but we cannot use
7854 make_anon_name because of certain checks against TYPE_ANONYMOUS_P. */
7855 tree name;
7856 name = make_lambda_name ();
7857
7858 /* Create the new RECORD_TYPE for this lambda. */
7859 type = xref_tag (/*tag_code=*/record_type,
7860 name,
7861 /*scope=*/ts_within_enclosing_non_class,
7862 /*template_header_p=*/false);
7863 }
7864
7865 /* Designate it as a struct so that we can use aggregate initialization. */
7866 CLASSTYPE_DECLARED_CLASS (type) = false;
7867
7868 /* Clear base types. */
7869 xref_basetypes (type, /*bases=*/NULL_TREE);
7870
7871 /* Start the class. */
7872 type = begin_class_definition (type, /*attributes=*/NULL_TREE);
7873
7874 /* Cross-reference the expression and the type. */
7875 TREE_TYPE (lambda) = type;
7876 CLASSTYPE_LAMBDA_EXPR (type) = lambda;
7877
7878 return type;
7879}
7880
7881/* Returns the type to use for the return type of the operator() of a
7882 closure class. */
7883
7884tree
7885lambda_return_type (tree expr)
7886{
7887 tree type;
95b24c84
JM
7888 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
7889 {
7890 warning (0, "cannot deduce lambda return type from a braced-init-list");
7891 return void_type_node;
7892 }
d5f4eddd
JM
7893 if (type_dependent_expression_p (expr))
7894 {
7895 type = cxx_make_type (DECLTYPE_TYPE);
7896 DECLTYPE_TYPE_EXPR (type) = expr;
7897 DECLTYPE_FOR_LAMBDA_RETURN (type) = true;
7898 SET_TYPE_STRUCTURAL_EQUALITY (type);
7899 }
7900 else
7901 type = type_decays_to (unlowered_expr_type (expr));
7902 return type;
7903}
7904
7905/* Given a LAMBDA_EXPR or closure type LAMBDA, return the op() of the
7906 closure type. */
7907
7908tree
7909lambda_function (tree lambda)
7910{
7911 tree type;
7912 if (TREE_CODE (lambda) == LAMBDA_EXPR)
7913 type = TREE_TYPE (lambda);
7914 else
7915 type = lambda;
7916 gcc_assert (LAMBDA_TYPE_P (type));
7917 /* Don't let debug_tree cause instantiation. */
7918 if (CLASSTYPE_TEMPLATE_INSTANTIATION (type) && !COMPLETE_TYPE_P (type))
7919 return NULL_TREE;
7920 lambda = lookup_member (type, ansi_opname (CALL_EXPR),
7921 /*protect=*/0, /*want_type=*/false);
7922 if (lambda)
7923 lambda = BASELINK_FUNCTIONS (lambda);
7924 return lambda;
7925}
7926
7927/* Returns the type to use for the FIELD_DECL corresponding to the
7928 capture of EXPR.
7929 The caller should add REFERENCE_TYPE for capture by reference. */
7930
7931tree
7932lambda_capture_field_type (tree expr)
7933{
7934 tree type;
7935 if (type_dependent_expression_p (expr))
7936 {
7937 type = cxx_make_type (DECLTYPE_TYPE);
7938 DECLTYPE_TYPE_EXPR (type) = expr;
7939 DECLTYPE_FOR_LAMBDA_CAPTURE (type) = true;
7940 SET_TYPE_STRUCTURAL_EQUALITY (type);
7941 }
7942 else
7943 type = non_reference (unlowered_expr_type (expr));
7944 return type;
7945}
7946
7947/* Recompute the return type for LAMBDA with body of the form:
7948 { return EXPR ; } */
7949
7950void
7951apply_lambda_return_type (tree lambda, tree return_type)
7952{
7953 tree fco = lambda_function (lambda);
7954 tree result;
7955
7956 LAMBDA_EXPR_RETURN_TYPE (lambda) = return_type;
7957
7958 /* If we got a DECLTYPE_TYPE, don't stick it in the function yet,
7959 it would interfere with instantiating the closure type. */
7960 if (dependent_type_p (return_type))
7961 return;
7962 if (return_type == error_mark_node)
7963 return;
7964
7965 /* TREE_TYPE (FUNCTION_DECL) == METHOD_TYPE
7966 TREE_TYPE (METHOD_TYPE) == return-type */
643d4cd6 7967 TREE_TYPE (fco) = change_return_type (return_type, TREE_TYPE (fco));
d5f4eddd
JM
7968
7969 result = DECL_RESULT (fco);
7970 if (result == NULL_TREE)
7971 return;
7972
7973 /* We already have a DECL_RESULT from start_preparsed_function.
7974 Now we need to redo the work it and allocate_struct_function
7975 did to reflect the new type. */
7976 result = build_decl (input_location, RESULT_DECL, NULL_TREE,
7977 TYPE_MAIN_VARIANT (return_type));
7978 DECL_ARTIFICIAL (result) = 1;
7979 DECL_IGNORED_P (result) = 1;
7980 cp_apply_type_quals_to_decl (cp_type_quals (return_type),
7981 result);
7982
7983 DECL_RESULT (fco) = result;
7984
7985 if (!processing_template_decl && aggregate_value_p (result, fco))
7986 {
7987#ifdef PCC_STATIC_STRUCT_RETURN
7988 cfun->returns_pcc_struct = 1;
7989#endif
7990 cfun->returns_struct = 1;
7991 }
7992
7993}
7994
7995/* DECL is a local variable or parameter from the surrounding scope of a
7996 lambda-expression. Returns the decltype for a use of the capture field
7997 for DECL even if it hasn't been captured yet. */
7998
7999static tree
8000capture_decltype (tree decl)
8001{
8002 tree lam = CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (current_function_decl));
8003 /* FIXME do lookup instead of list walk? */
8004 tree cap = value_member (decl, LAMBDA_EXPR_CAPTURE_LIST (lam));
8005 tree type;
8006
8007 if (cap)
8008 type = TREE_TYPE (TREE_PURPOSE (cap));
8009 else
8010 switch (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lam))
8011 {
8012 case CPLD_NONE:
8013 error ("%qD is not captured", decl);
8014 return error_mark_node;
8015
8016 case CPLD_COPY:
8017 type = TREE_TYPE (decl);
8018 if (TREE_CODE (type) == REFERENCE_TYPE
8019 && TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE)
8020 type = TREE_TYPE (type);
8021 break;
8022
8023 case CPLD_REFERENCE:
8024 type = TREE_TYPE (decl);
8025 if (TREE_CODE (type) != REFERENCE_TYPE)
8026 type = build_reference_type (TREE_TYPE (decl));
8027 break;
8028
8029 default:
8030 gcc_unreachable ();
8031 }
8032
8033 if (TREE_CODE (type) != REFERENCE_TYPE)
8034 {
8035 if (!LAMBDA_EXPR_MUTABLE_P (lam))
a3360e77 8036 type = cp_build_qualified_type (type, (cp_type_quals (type)
d5f4eddd
JM
8037 |TYPE_QUAL_CONST));
8038 type = build_reference_type (type);
8039 }
8040 return type;
8041}
8042
8043/* From an ID and INITIALIZER, create a capture (by reference if
8044 BY_REFERENCE_P is true), add it to the capture-list for LAMBDA,
8045 and return it. */
8046
8047tree
37a7519a
JM
8048add_capture (tree lambda, tree id, tree initializer, bool by_reference_p,
8049 bool explicit_init_p)
d5f4eddd
JM
8050{
8051 tree type;
8052 tree member;
8053
8054 type = lambda_capture_field_type (initializer);
8055 if (by_reference_p)
8056 {
8057 type = build_reference_type (type);
8058 if (!real_lvalue_p (initializer))
8059 error ("cannot capture %qE by reference", initializer);
8060 }
8061
8062 /* Make member variable. */
8063 member = build_lang_decl (FIELD_DECL, id, type);
37a7519a
JM
8064 if (!explicit_init_p)
8065 /* Normal captures are invisible to name lookup but uses are replaced
8066 with references to the capture field; we implement this by only
8067 really making them invisible in unevaluated context; see
8068 qualify_lookup. For now, let's make explicitly initialized captures
8069 always visible. */
8070 DECL_NORMAL_CAPTURE_P (member) = true;
d5f4eddd 8071
19030d77
JM
8072 /* Add it to the appropriate closure class if we've started it. */
8073 if (current_class_type && current_class_type == TREE_TYPE (lambda))
8074 finish_member_declaration (member);
d5f4eddd
JM
8075
8076 LAMBDA_EXPR_CAPTURE_LIST (lambda)
8077 = tree_cons (member, initializer, LAMBDA_EXPR_CAPTURE_LIST (lambda));
8078
8079 if (id == get_identifier ("__this"))
8080 {
8081 if (LAMBDA_EXPR_CAPTURES_THIS_P (lambda))
8082 error ("already captured %<this%> in lambda expression");
8083 LAMBDA_EXPR_THIS_CAPTURE (lambda) = member;
8084 }
8085
8086 return member;
8087}
8088
19030d77
JM
8089/* Register all the capture members on the list CAPTURES, which is the
8090 LAMBDA_EXPR_CAPTURE_LIST for the lambda after the introducer. */
8091
8092void register_capture_members (tree captures)
8093{
8094 if (captures)
8095 {
8096 register_capture_members (TREE_CHAIN (captures));
8097 finish_member_declaration (TREE_PURPOSE (captures));
8098 }
8099}
8100
9660afe0
JM
8101/* Given a FIELD_DECL decl belonging to a closure type, return a
8102 COMPONENT_REF of it relative to the 'this' parameter of the op() for
8103 that type. */
8104
8105static tree
8106thisify_lambda_field (tree decl)
8107{
8108 tree context = lambda_function (DECL_CONTEXT (decl));
8109 tree object = cp_build_indirect_ref (DECL_ARGUMENTS (context),
dd865ef6 8110 RO_NULL,
9660afe0
JM
8111 tf_warning_or_error);
8112 return finish_non_static_data_member (decl, object,
8113 /*qualifying_scope*/NULL_TREE);
8114}
8115
d5f4eddd
JM
8116/* Similar to add_capture, except this works on a stack of nested lambdas.
8117 BY_REFERENCE_P in this case is derived from the default capture mode.
8118 Returns the capture for the lambda at the bottom of the stack. */
8119
8120tree
8121add_default_capture (tree lambda_stack, tree id, tree initializer)
8122{
8123 bool this_capture_p = (id == get_identifier ("__this"));
8124
8125 tree member = NULL_TREE;
8126
8127 tree saved_class_type = current_class_type;
8128
8129 tree node;
8130
8131 for (node = lambda_stack;
8132 node;
8133 node = TREE_CHAIN (node))
8134 {
8135 tree lambda = TREE_VALUE (node);
8136
8137 current_class_type = TREE_TYPE (lambda);
8138 member = add_capture (lambda,
8139 id,
8140 initializer,
8141 /*by_reference_p=*/
8142 (!this_capture_p
8143 && (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda)
37a7519a
JM
8144 == CPLD_REFERENCE)),
8145 /*explicit_init_p=*/false);
9660afe0 8146 initializer = thisify_lambda_field (member);
d5f4eddd
JM
8147 }
8148
8149 current_class_type = saved_class_type;
8150
8151 return member;
d5f4eddd
JM
8152}
8153
8154/* Return the capture pertaining to a use of 'this' in LAMBDA, in the form of an
8155 INDIRECT_REF, possibly adding it through default capturing. */
8156
8157tree
8158lambda_expr_this_capture (tree lambda)
8159{
8160 tree result;
8161
8162 tree this_capture = LAMBDA_EXPR_THIS_CAPTURE (lambda);
8163
8164 /* Try to default capture 'this' if we can. */
8165 if (!this_capture
8166 && LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) != CPLD_NONE)
8167 {
8168 tree containing_function = TYPE_CONTEXT (TREE_TYPE (lambda));
8169 tree lambda_stack = tree_cons (NULL_TREE, lambda, NULL_TREE);
71d16049 8170 tree init = NULL_TREE;
d5f4eddd
JM
8171
8172 /* If we are in a lambda function, we can move out until we hit:
8173 1. a non-lambda function,
8174 2. a lambda function capturing 'this', or
8175 3. a non-default capturing lambda function. */
8176 while (LAMBDA_FUNCTION_P (containing_function))
8177 {
8178 tree lambda
8179 = CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (containing_function));
8180
71d16049
JM
8181 if (LAMBDA_EXPR_THIS_CAPTURE (lambda))
8182 {
8183 /* An outer lambda has already captured 'this'. */
8184 tree cap = LAMBDA_EXPR_THIS_CAPTURE (lambda);
92de1b37 8185 init = thisify_lambda_field (cap);
71d16049
JM
8186 break;
8187 }
8188
8189 if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) == CPLD_NONE)
8190 /* An outer lambda won't let us capture 'this'. */
8191 break;
d5f4eddd
JM
8192
8193 lambda_stack = tree_cons (NULL_TREE,
8194 lambda,
8195 lambda_stack);
8196
8197 containing_function = decl_function_context (containing_function);
8198 }
8199
71d16049
JM
8200 if (!init && DECL_NONSTATIC_MEMBER_FUNCTION_P (containing_function)
8201 && !LAMBDA_FUNCTION_P (containing_function))
8202 /* First parameter is 'this'. */
8203 init = DECL_ARGUMENTS (containing_function);
d5f4eddd 8204
71d16049
JM
8205 if (init)
8206 this_capture = add_default_capture (lambda_stack,
8207 /*id=*/get_identifier ("__this"),
8208 init);
d5f4eddd
JM
8209 }
8210
8211 if (!this_capture)
8212 {
8213 error ("%<this%> was not captured for this lambda function");
8214 result = error_mark_node;
8215 }
8216 else
8217 {
8218 /* To make sure that current_class_ref is for the lambda. */
8219 gcc_assert (TYPE_MAIN_VARIANT (TREE_TYPE (current_class_ref)) == TREE_TYPE (lambda));
8220
8221 result = finish_non_static_data_member (this_capture,
2defb926 8222 NULL_TREE,
d5f4eddd
JM
8223 /*qualifying_scope=*/NULL_TREE);
8224
8225 /* If 'this' is captured, each use of 'this' is transformed into an
8226 access to the corresponding unnamed data member of the closure
8227 type cast (_expr.cast_ 5.4) to the type of 'this'. [ The cast
8228 ensures that the transformed expression is an rvalue. ] */
8229 result = rvalue (result);
8230 }
8231
8232 return result;
8233}
8234
a6846853
JM
8235/* Returns the method basetype of the innermost non-lambda function, or
8236 NULL_TREE if none. */
8237
8238tree
8239nonlambda_method_basetype (void)
8240{
8241 tree fn, type;
8242 if (!current_class_ref)
8243 return NULL_TREE;
8244
8245 type = current_class_type;
8246 if (!LAMBDA_TYPE_P (type))
8247 return type;
8248
8249 /* Find the nearest enclosing non-lambda function. */
8250 fn = TYPE_NAME (type);
8251 do
8252 fn = decl_function_context (fn);
8253 while (fn && LAMBDA_FUNCTION_P (fn));
8254
8255 if (!fn || !DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
8256 return NULL_TREE;
8257
8258 return TYPE_METHOD_BASETYPE (TREE_TYPE (fn));
8259}
8260
b77068f2
JM
8261/* If the closure TYPE has a static op(), also add a conversion to function
8262 pointer. */
8263
8264void
8265maybe_add_lambda_conv_op (tree type)
8266{
8267 bool nested = (current_function_decl != NULL_TREE);
8268 tree callop = lambda_function (type);
8269 tree rettype, name, fntype, fn, body, compound_stmt;
c6be04ad
JM
8270 tree thistype, stattype, statfn, convfn, call, arg;
8271 VEC (tree, gc) *argvec;
b77068f2 8272
c6be04ad 8273 if (LAMBDA_EXPR_CAPTURE_LIST (CLASSTYPE_LAMBDA_EXPR (type)) != NULL_TREE)
b77068f2
JM
8274 return;
8275
c6be04ad
JM
8276 stattype = build_function_type (TREE_TYPE (TREE_TYPE (callop)),
8277 FUNCTION_ARG_CHAIN (callop));
8278
8279 /* First build up the conversion op. */
8280
8281 rettype = build_pointer_type (stattype);
b77068f2 8282 name = mangle_conv_op_name_for_type (rettype);
c6be04ad
JM
8283 thistype = cp_build_qualified_type (type, TYPE_QUAL_CONST);
8284 fntype = build_method_type_directly (thistype, rettype, void_list_node);
8285 fn = convfn = build_lang_decl (FUNCTION_DECL, name, fntype);
b77068f2
JM
8286 DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (callop);
8287
8288 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
8289 && DECL_ALIGN (fn) < 2 * BITS_PER_UNIT)
8290 DECL_ALIGN (fn) = 2 * BITS_PER_UNIT;
8291
8292 SET_OVERLOADED_OPERATOR_CODE (fn, TYPE_EXPR);
8293 grokclassfn (type, fn, NO_SPECIAL);
8294 set_linkage_according_to_type (type, fn);
8295 rest_of_decl_compilation (fn, toplevel_bindings_p (), at_eof);
8296 DECL_IN_AGGR_P (fn) = 1;
8297 DECL_ARTIFICIAL (fn) = 1;
8298 DECL_NOT_REALLY_EXTERN (fn) = 1;
8299 DECL_DECLARED_INLINE_P (fn) = 1;
c6be04ad
JM
8300 DECL_ARGUMENTS (fn) = build_this_parm (fntype, TYPE_QUAL_CONST);
8301 if (nested)
8302 DECL_INTERFACE_KNOWN (fn) = 1;
8303
8304 add_method (type, fn, NULL_TREE);
8305
8306 /* Generic thunk code fails for varargs; we'll complain in mark_used if
8307 the conversion op is used. */
8308 if (varargs_function_p (callop))
8309 {
8310 DECL_DELETED_FN (fn) = 1;
8311 return;
8312 }
8313
8314 /* Now build up the thunk to be returned. */
8315
8316 name = get_identifier ("_FUN");
8317 fn = statfn = build_lang_decl (FUNCTION_DECL, name, stattype);
8318 DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (callop);
8319 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
8320 && DECL_ALIGN (fn) < 2 * BITS_PER_UNIT)
8321 DECL_ALIGN (fn) = 2 * BITS_PER_UNIT;
8322 grokclassfn (type, fn, NO_SPECIAL);
8323 set_linkage_according_to_type (type, fn);
8324 rest_of_decl_compilation (fn, toplevel_bindings_p (), at_eof);
8325 DECL_IN_AGGR_P (fn) = 1;
8326 DECL_ARTIFICIAL (fn) = 1;
8327 DECL_NOT_REALLY_EXTERN (fn) = 1;
8328 DECL_DECLARED_INLINE_P (fn) = 1;
b77068f2 8329 DECL_STATIC_FUNCTION_P (fn) = 1;
910ad8de
NF
8330 DECL_ARGUMENTS (fn) = copy_list (DECL_CHAIN (DECL_ARGUMENTS (callop)));
8331 for (arg = DECL_ARGUMENTS (fn); arg; arg = DECL_CHAIN (arg))
c6be04ad 8332 DECL_CONTEXT (arg) = fn;
7a79ff3b
JM
8333 if (nested)
8334 DECL_INTERFACE_KNOWN (fn) = 1;
b77068f2
JM
8335
8336 add_method (type, fn, NULL_TREE);
8337
8338 if (nested)
8339 push_function_context ();
c6be04ad
JM
8340
8341 /* Generate the body of the thunk. */
8342
8343 start_preparsed_function (statfn, NULL_TREE,
8344 SF_PRE_PARSED | SF_INCLASS_INLINE);
8345 if (DECL_ONE_ONLY (statfn))
8346 {
8347 /* Put the thunk in the same comdat group as the call op. */
8348 struct cgraph_node *callop_node, *thunk_node;
8349 DECL_COMDAT_GROUP (statfn) = DECL_COMDAT_GROUP (callop);
8350 callop_node = cgraph_node (callop);
8351 thunk_node = cgraph_node (statfn);
8352 gcc_assert (callop_node->same_comdat_group == NULL);
8353 gcc_assert (thunk_node->same_comdat_group == NULL);
8354 callop_node->same_comdat_group = thunk_node;
8355 thunk_node->same_comdat_group = callop_node;
8356 }
8357 body = begin_function_body ();
8358 compound_stmt = begin_compound_stmt (0);
8359
9542943d
JM
8360 arg = build1 (NOP_EXPR, TREE_TYPE (DECL_ARGUMENTS (callop)),
8361 null_pointer_node);
c6be04ad
JM
8362 argvec = make_tree_vector ();
8363 VEC_quick_push (tree, argvec, arg);
910ad8de 8364 for (arg = DECL_ARGUMENTS (statfn); arg; arg = DECL_CHAIN (arg))
c6be04ad 8365 VEC_safe_push (tree, gc, argvec, arg);
e62e4922
JM
8366 call = build_call_a (callop, VEC_length (tree, argvec),
8367 VEC_address (tree, argvec));
c6be04ad 8368 CALL_FROM_THUNK_P (call) = 1;
e62e4922
JM
8369 if (MAYBE_CLASS_TYPE_P (TREE_TYPE (call)))
8370 call = build_cplus_new (TREE_TYPE (call), call);
8371 call = convert_from_reference (call);
c6be04ad
JM
8372 finish_return_stmt (call);
8373
8374 finish_compound_stmt (compound_stmt);
8375 finish_function_body (body);
8376
8377 expand_or_defer_fn (finish_function (2));
8378
8379 /* Generate the body of the conversion op. */
8380
8381 start_preparsed_function (convfn, NULL_TREE,
b77068f2
JM
8382 SF_PRE_PARSED | SF_INCLASS_INLINE);
8383 body = begin_function_body ();
8384 compound_stmt = begin_compound_stmt (0);
8385
c6be04ad 8386 finish_return_stmt (decay_conversion (statfn));
b77068f2
JM
8387
8388 finish_compound_stmt (compound_stmt);
8389 finish_function_body (body);
8390
8391 expand_or_defer_fn (finish_function (2));
c6be04ad 8392
b77068f2
JM
8393 if (nested)
8394 pop_function_context ();
8395}
cf22909c 8396#include "gt-cp-semantics.h"
This page took 3.773267 seconds and 5 git commands to generate.