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