]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/cp/semantics.c
re PR middle-end/43901 (FAIL: gcc.c-torture/compile/pr42196-2.c)
[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,
66647d44 7 2008, 2009 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"
5f070bc7 33#include "c-common.h"
25af8512 34#include "tree-inline.h"
6de9cd9a 35#include "tree-mudflap.h"
ad321293 36#include "except.h"
12027a89 37#include "toplev.h"
84df082b 38#include "flags.h"
d9b2d9da 39#include "rtl.h"
d6684bc8 40#include "expr.h"
225ff119 41#include "output.h"
ea11ca7e 42#include "timevar.h"
2b85879e 43#include "debug.h"
6de9cd9a 44#include "diagnostic.h"
8cd2462c 45#include "cgraph.h"
325c3691 46#include "tree-iterator.h"
3e1f1ba5 47#include "vec.h"
44d10c10 48#include "target.h"
726a989a 49#include "gimple.h"
ad321293
MM
50
51/* There routines provide a modular interface to perform many parsing
52 operations. They may therefore be used during actual parsing, or
53 during template instantiation, which may be regarded as a
0b4d5576 54 degenerate form of parsing. */
ad321293 55
3a978d72 56static tree maybe_convert_cond (tree);
6de9cd9a 57static tree finalize_nrv_r (tree *, int *, void *);
d5f4eddd 58static tree capture_decltype (tree);
9660afe0 59static tree thisify_lambda_field (tree);
4985cde3 60
558475f0 61
8d241e0b
KL
62/* Deferred Access Checking Overview
63 ---------------------------------
64
65 Most C++ expressions and declarations require access checking
66 to be performed during parsing. However, in several cases,
67 this has to be treated differently.
68
69 For member declarations, access checking has to be deferred
70 until more information about the declaration is known. For
71 example:
72
73 class A {
0cbd7506 74 typedef int X;
8d241e0b 75 public:
0cbd7506 76 X f();
8d241e0b
KL
77 };
78
79 A::X A::f();
80 A::X g();
81
82 When we are parsing the function return type `A::X', we don't
83 really know if this is allowed until we parse the function name.
84
85 Furthermore, some contexts require that access checking is
86 never performed at all. These include class heads, and template
87 instantiations.
88
89 Typical use of access checking functions is described here:
c8094d83 90
8d241e0b
KL
91 1. When we enter a context that requires certain access checking
92 mode, the function `push_deferring_access_checks' is called with
93 DEFERRING argument specifying the desired mode. Access checking
94 may be performed immediately (dk_no_deferred), deferred
95 (dk_deferred), or not performed (dk_no_check).
96
97 2. When a declaration such as a type, or a variable, is encountered,
98 the function `perform_or_defer_access_check' is called. It
d6b418fa 99 maintains a VEC of all deferred checks.
8d241e0b
KL
100
101 3. The global `current_class_type' or `current_function_decl' is then
102 setup by the parser. `enforce_access' relies on these information
103 to check access.
104
105 4. Upon exiting the context mentioned in step 1,
106 `perform_deferred_access_checks' is called to check all declaration
d6b418fa 107 stored in the VEC. `pop_deferring_access_checks' is then
8d241e0b
KL
108 called to restore the previous access checking mode.
109
110 In case of parsing error, we simply call `pop_deferring_access_checks'
111 without `perform_deferred_access_checks'. */
112
d1b38208 113typedef struct GTY(()) deferred_access {
d6b418fa 114 /* A VEC representing name-lookups for which we have deferred
3e1f1ba5
NS
115 checking access controls. We cannot check the accessibility of
116 names used in a decl-specifier-seq until we know what is being
117 declared because code like:
118
c8094d83 119 class A {
0cbd7506
MS
120 class B {};
121 B* f();
3e1f1ba5
NS
122 }
123
124 A::B* A::f() { return 0; }
125
d6b418fa
SM
126 is valid, even though `A::B' is not generally accessible. */
127 VEC (deferred_access_check,gc)* GTY(()) deferred_access_checks;
c8094d83 128
3e1f1ba5
NS
129 /* The current mode of access checks. */
130 enum deferring_kind deferring_access_checks_kind;
c8094d83 131
3e1f1ba5 132} deferred_access;
d4e6fecb
NS
133DEF_VEC_O (deferred_access);
134DEF_VEC_ALLOC_O (deferred_access,gc);
3e1f1ba5 135
cf22909c 136/* Data for deferred access checking. */
d4e6fecb 137static GTY(()) VEC(deferred_access,gc) *deferred_access_stack;
3e1f1ba5 138static GTY(()) unsigned deferred_access_no_check;
cf22909c
KL
139
140/* Save the current deferred access states and start deferred
141 access checking iff DEFER_P is true. */
142
572c2b17
AP
143void
144push_deferring_access_checks (deferring_kind deferring)
cf22909c 145{
78757caa
KL
146 /* For context like template instantiation, access checking
147 disabling applies to all nested context. */
3e1f1ba5
NS
148 if (deferred_access_no_check || deferring == dk_no_check)
149 deferred_access_no_check++;
cf22909c 150 else
3e1f1ba5
NS
151 {
152 deferred_access *ptr;
cf22909c 153
d4e6fecb 154 ptr = VEC_safe_push (deferred_access, gc, deferred_access_stack, NULL);
d6b418fa 155 ptr->deferred_access_checks = NULL;
3e1f1ba5
NS
156 ptr->deferring_access_checks_kind = deferring;
157 }
cf22909c
KL
158}
159
160/* Resume deferring access checks again after we stopped doing
161 this previously. */
162
572c2b17
AP
163void
164resume_deferring_access_checks (void)
cf22909c 165{
3e1f1ba5
NS
166 if (!deferred_access_no_check)
167 VEC_last (deferred_access, deferred_access_stack)
168 ->deferring_access_checks_kind = dk_deferred;
cf22909c
KL
169}
170
171/* Stop deferring access checks. */
172
572c2b17
AP
173void
174stop_deferring_access_checks (void)
cf22909c 175{
3e1f1ba5
NS
176 if (!deferred_access_no_check)
177 VEC_last (deferred_access, deferred_access_stack)
178 ->deferring_access_checks_kind = dk_no_deferred;
cf22909c
KL
179}
180
181/* Discard the current deferred access checks and restore the
182 previous states. */
183
572c2b17
AP
184void
185pop_deferring_access_checks (void)
cf22909c 186{
3e1f1ba5
NS
187 if (deferred_access_no_check)
188 deferred_access_no_check--;
189 else
190 VEC_pop (deferred_access, deferred_access_stack);
cf22909c
KL
191}
192
c8094d83
MS
193/* Returns a TREE_LIST representing the deferred checks.
194 The TREE_PURPOSE of each node is the type through which the
cf22909c
KL
195 access occurred; the TREE_VALUE is the declaration named.
196 */
197
d6b418fa 198VEC (deferred_access_check,gc)*
572c2b17 199get_deferred_access_checks (void)
cf22909c 200{
3e1f1ba5
NS
201 if (deferred_access_no_check)
202 return NULL;
203 else
204 return (VEC_last (deferred_access, deferred_access_stack)
205 ->deferred_access_checks);
cf22909c
KL
206}
207
208/* Take current deferred checks and combine with the
209 previous states if we also defer checks previously.
210 Otherwise perform checks now. */
211
572c2b17
AP
212void
213pop_to_parent_deferring_access_checks (void)
cf22909c 214{
3e1f1ba5
NS
215 if (deferred_access_no_check)
216 deferred_access_no_check--;
217 else
218 {
d6b418fa 219 VEC (deferred_access_check,gc) *checks;
3e1f1ba5
NS
220 deferred_access *ptr;
221
222 checks = (VEC_last (deferred_access, deferred_access_stack)
223 ->deferred_access_checks);
224
225 VEC_pop (deferred_access, deferred_access_stack);
226 ptr = VEC_last (deferred_access, deferred_access_stack);
227 if (ptr->deferring_access_checks_kind == dk_no_deferred)
228 {
229 /* Check access. */
d6b418fa 230 perform_access_checks (checks);
3e1f1ba5
NS
231 }
232 else
233 {
234 /* Merge with parent. */
d6b418fa
SM
235 int i, j;
236 deferred_access_check *chk, *probe;
c8094d83 237
d6b418fa
SM
238 for (i = 0 ;
239 VEC_iterate (deferred_access_check, checks, i, chk) ;
240 ++i)
3e1f1ba5 241 {
d6b418fa
SM
242 for (j = 0 ;
243 VEC_iterate (deferred_access_check,
244 ptr->deferred_access_checks, j, probe) ;
245 ++j)
246 {
247 if (probe->binfo == chk->binfo &&
248 probe->decl == chk->decl &&
249 probe->diag_decl == chk->diag_decl)
250 goto found;
251 }
3e1f1ba5 252 /* Insert into parent's checks. */
d6b418fa
SM
253 VEC_safe_push (deferred_access_check, gc,
254 ptr->deferred_access_checks, chk);
3e1f1ba5
NS
255 found:;
256 }
257 }
258 }
cf22909c
KL
259}
260
6b648482
MM
261/* Perform the access checks in CHECKS. The TREE_PURPOSE of each node
262 is the BINFO indicating the qualifying scope used to access the
263 DECL node stored in the TREE_VALUE of the node. */
264
265void
d6b418fa 266perform_access_checks (VEC (deferred_access_check,gc)* checks)
6b648482 267{
d6b418fa
SM
268 int i;
269 deferred_access_check *chk;
270
271 if (!checks)
272 return;
273
274 for (i = 0 ; VEC_iterate (deferred_access_check, checks, i, chk) ; ++i)
275 enforce_access (chk->binfo, chk->decl, chk->diag_decl);
6b648482
MM
276}
277
25903d03
KL
278/* Perform the deferred access checks.
279
280 After performing the checks, we still have to keep the list
281 `deferred_access_stack->deferred_access_checks' since we may want
282 to check access for them again later in a different context.
283 For example:
284
285 class A {
286 typedef int X;
287 static X a;
288 };
289 A::X A::a, x; // No error for `A::a', error for `x'
290
291 We have to perform deferred access of `A::X', first with `A::a',
292 next with `x'. */
cf22909c 293
572c2b17
AP
294void
295perform_deferred_access_checks (void)
cf22909c 296{
6b648482 297 perform_access_checks (get_deferred_access_checks ());
cf22909c
KL
298}
299
300/* Defer checking the accessibility of DECL, when looked up in
02022f3a 301 BINFO. DIAG_DECL is the declaration to use to print diagnostics. */
cf22909c 302
572c2b17 303void
02022f3a 304perform_or_defer_access_check (tree binfo, tree decl, tree diag_decl)
cf22909c 305{
d6b418fa 306 int i;
3e1f1ba5 307 deferred_access *ptr;
d6b418fa
SM
308 deferred_access_check *chk;
309 deferred_access_check *new_access;
310
cf22909c 311
3e1f1ba5
NS
312 /* Exit if we are in a context that no access checking is performed.
313 */
314 if (deferred_access_no_check)
0f2a66c9 315 return;
c8094d83 316
50bc768d 317 gcc_assert (TREE_CODE (binfo) == TREE_BINFO);
0f2a66c9 318
3e1f1ba5 319 ptr = VEC_last (deferred_access, deferred_access_stack);
c8094d83 320
cf22909c 321 /* If we are not supposed to defer access checks, just check now. */
3e1f1ba5 322 if (ptr->deferring_access_checks_kind == dk_no_deferred)
cf22909c 323 {
02022f3a 324 enforce_access (binfo, decl, diag_decl);
cf22909c
KL
325 return;
326 }
c8094d83 327
cf22909c 328 /* See if we are already going to perform this check. */
d6b418fa
SM
329 for (i = 0 ;
330 VEC_iterate (deferred_access_check,
331 ptr->deferred_access_checks, i, chk) ;
332 ++i)
333 {
334 if (chk->decl == decl && chk->binfo == binfo &&
335 chk->diag_decl == diag_decl)
336 {
337 return;
338 }
339 }
cf22909c 340 /* If not, record the check. */
d6b418fa
SM
341 new_access =
342 VEC_safe_push (deferred_access_check, gc,
343 ptr->deferred_access_checks, 0);
344 new_access->binfo = binfo;
345 new_access->decl = decl;
346 new_access->diag_decl = diag_decl;
cf22909c
KL
347}
348
838dfd8a 349/* Returns nonzero if the current statement is a full expression,
f2c5f623
BC
350 i.e. temporaries created during that statement should be destroyed
351 at the end of the statement. */
35b1567d 352
f2c5f623 353int
3a978d72 354stmts_are_full_exprs_p (void)
f2c5f623 355{
ae499cce
MM
356 return current_stmt_tree ()->stmts_are_full_exprs_p;
357}
358
ed3d0b14
ILT
359/* T is a statement. Add it to the statement-tree. This is the C++
360 version. The C/ObjC frontends have a slightly different version of
361 this function. */
362
363tree
364add_stmt (tree t)
365{
366 enum tree_code code = TREE_CODE (t);
367
368 if (EXPR_P (t) && code != LABEL_EXPR)
369 {
370 if (!EXPR_HAS_LOCATION (t))
371 SET_EXPR_LOCATION (t, input_location);
372
373 /* When we expand a statement-tree, we must know whether or not the
374 statements are full-expressions. We record that fact here. */
375 STMT_IS_FULL_EXPR_P (t) = stmts_are_full_exprs_p ();
376 }
377
378 /* Add T to the statement-tree. Non-side-effect statements need to be
379 recorded during statement expressions. */
380 append_to_statement_list_force (t, &cur_stmt_list);
381
382 return t;
383}
384
e8924938 385/* Returns the stmt_tree to which statements are currently being added. */
ae499cce
MM
386
387stmt_tree
3a978d72 388current_stmt_tree (void)
ae499cce 389{
c8094d83
MS
390 return (cfun
391 ? &cfun->language->base.x_stmt_tree
ae499cce 392 : &scope_chain->x_stmt_tree);
f2c5f623 393}
35b1567d 394
543a0daa
RH
395/* If statements are full expressions, wrap STMT in a CLEANUP_POINT_EXPR. */
396
397static tree
398maybe_cleanup_point_expr (tree expr)
399{
400 if (!processing_template_decl && stmts_are_full_exprs_p ())
0ad28dde 401 expr = fold_build_cleanup_point_expr (TREE_TYPE (expr), expr);
543a0daa
RH
402 return expr;
403}
404
0ad28dde 405/* Like maybe_cleanup_point_expr except have the type of the new expression be
22423a1f
KH
406 void so we don't need to create a temporary variable to hold the inner
407 expression. The reason why we do this is because the original type might be
408 an aggregate and we cannot create a temporary variable for that type. */
0ad28dde
AP
409
410static tree
411maybe_cleanup_point_expr_void (tree expr)
412{
413 if (!processing_template_decl && stmts_are_full_exprs_p ())
414 expr = fold_build_cleanup_point_expr (void_type_node, expr);
415 return expr;
416}
417
418
419
543a0daa
RH
420/* Create a declaration statement for the declaration given by the DECL. */
421
422void
350fae66 423add_decl_expr (tree decl)
543a0daa 424{
c2255bc4 425 tree r = build_stmt (input_location, DECL_EXPR, decl);
b187901e
AP
426 if (DECL_INITIAL (decl)
427 || (DECL_SIZE (decl) && TREE_SIDE_EFFECTS (DECL_SIZE (decl))))
0ad28dde 428 r = maybe_cleanup_point_expr_void (r);
543a0daa
RH
429 add_stmt (r);
430}
431
f2c5f623 432/* Finish a scope. */
35b1567d 433
20aff0b3 434tree
325c3691 435do_poplevel (tree stmt_list)
35b1567d 436{
325c3691 437 tree block = NULL;
35b1567d 438
f2c5f623 439 if (stmts_are_full_exprs_p ())
325c3691 440 block = poplevel (kept_level_p (), 1, 0);
f2c5f623 441
325c3691 442 stmt_list = pop_stmt_list (stmt_list);
c8094d83 443
325c3691
RH
444 if (!processing_template_decl)
445 {
c2255bc4 446 stmt_list = c_build_bind_expr (input_location, block, stmt_list);
325c3691 447 /* ??? See c_end_compound_stmt re statement expressions. */
35b1567d
BC
448 }
449
325c3691 450 return stmt_list;
35b1567d
BC
451}
452
c8094d83 453/* Begin a new scope. */
35b1567d 454
325c3691 455static tree
92bc1323 456do_pushlevel (scope_kind sk)
35b1567d 457{
325c3691 458 tree ret = push_stmt_list ();
f2c5f623 459 if (stmts_are_full_exprs_p ())
325c3691
RH
460 begin_scope (sk, NULL);
461 return ret;
462}
5a508662
RH
463
464/* Queue a cleanup. CLEANUP is an expression/statement to be executed
465 when the current scope is exited. EH_ONLY is true when this is not
466 meant to apply to normal control flow transfer. */
467
468void
469push_cleanup (tree decl, tree cleanup, bool eh_only)
470{
c2255bc4 471 tree stmt = build_stmt (input_location, CLEANUP_STMT, NULL, cleanup, decl);
5a508662
RH
472 CLEANUP_EH_ONLY (stmt) = eh_only;
473 add_stmt (stmt);
474 CLEANUP_BODY (stmt) = push_stmt_list ();
475}
325c3691 476
caf2523d
RH
477/* Begin a conditional that might contain a declaration. When generating
478 normal code, we want the declaration to appear before the statement
479 containing the conditional. When generating template code, we want the
350fae66 480 conditional to be rendered as the raw DECL_EXPR. */
325c3691
RH
481
482static void
caf2523d 483begin_cond (tree *cond_p)
325c3691 484{
caf2523d
RH
485 if (processing_template_decl)
486 *cond_p = push_stmt_list ();
487}
488
489/* Finish such a conditional. */
490
491static void
492finish_cond (tree *cond_p, tree expr)
493{
494 if (processing_template_decl)
35b1567d 495 {
caf2523d 496 tree cond = pop_stmt_list (*cond_p);
350fae66 497 if (TREE_CODE (cond) == DECL_EXPR)
caf2523d 498 expr = cond;
5d80a306 499
7b3e2d46 500 if (check_for_bare_parameter_packs (expr))
4439d02f 501 *cond_p = error_mark_node;
35b1567d 502 }
caf2523d 503 *cond_p = expr;
35b1567d
BC
504}
505
325c3691
RH
506/* If *COND_P specifies a conditional with a declaration, transform the
507 loop such that
0cbd7506
MS
508 while (A x = 42) { }
509 for (; A x = 42;) { }
325c3691 510 becomes
0cbd7506
MS
511 while (true) { A x = 42; if (!x) break; }
512 for (;;) { A x = 42; if (!x) break; }
caf2523d
RH
513 The statement list for BODY will be empty if the conditional did
514 not declare anything. */
c8094d83 515
325c3691 516static void
caf2523d 517simplify_loop_decl_cond (tree *cond_p, tree body)
325c3691 518{
caf2523d 519 tree cond, if_stmt;
325c3691 520
caf2523d
RH
521 if (!TREE_SIDE_EFFECTS (body))
522 return;
325c3691 523
caf2523d
RH
524 cond = *cond_p;
525 *cond_p = boolean_true_node;
c8094d83 526
caf2523d 527 if_stmt = begin_if_stmt ();
5ade1ed2 528 cond = cp_build_unary_op (TRUTH_NOT_EXPR, cond, 0, tf_warning_or_error);
caf2523d
RH
529 finish_if_stmt_cond (cond, if_stmt);
530 finish_break_stmt ();
531 finish_then_clause (if_stmt);
532 finish_if_stmt (if_stmt);
533}
325c3691 534
35b1567d
BC
535/* Finish a goto-statement. */
536
3e4d04a1 537tree
3a978d72 538finish_goto_stmt (tree destination)
35b1567d
BC
539{
540 if (TREE_CODE (destination) == IDENTIFIER_NODE)
541 destination = lookup_label (destination);
542
543 /* We warn about unused labels with -Wunused. That means we have to
544 mark the used labels as used. */
545 if (TREE_CODE (destination) == LABEL_DECL)
546 TREE_USED (destination) = 1;
fc2b8477
MM
547 else
548 {
fc2b8477 549 if (!processing_template_decl)
f5651df1 550 {
f5651df1
JJ
551 destination = cp_convert (ptr_type_node, destination);
552 if (error_operand_p (destination))
553 return NULL_TREE;
554 }
fc2b8477
MM
555 /* We don't inline calls to functions with computed gotos.
556 Those functions are typically up to some funny business,
557 and may be depending on the labels being at particular
558 addresses, or some such. */
559 DECL_UNINLINABLE (current_function_decl) = 1;
560 }
c8094d83 561
35b1567d
BC
562 check_goto (destination);
563
c2255bc4 564 return add_stmt (build_stmt (input_location, GOTO_EXPR, destination));
35b1567d
BC
565}
566
ed5511d9 567/* COND is the condition-expression for an if, while, etc.,
d4033c81
MLI
568 statement. Convert it to a boolean value, if appropriate.
569 In addition, verify sequence points if -Wsequence-point is enabled. */
ed5511d9 570
8ce33230 571static tree
3a978d72 572maybe_convert_cond (tree cond)
ed5511d9
MM
573{
574 /* Empty conditions remain empty. */
575 if (!cond)
576 return NULL_TREE;
577
578 /* Wait until we instantiate templates before doing conversion. */
579 if (processing_template_decl)
580 return cond;
581
d4033c81
MLI
582 if (warn_sequence_point)
583 verify_sequence_points (cond);
584
ed5511d9
MM
585 /* Do the conversion. */
586 cond = convert_from_reference (cond);
fbc8d2d3
ILT
587
588 if (TREE_CODE (cond) == MODIFY_EXPR
589 && !TREE_NO_WARNING (cond)
590 && warn_parentheses)
591 {
592 warning (OPT_Wparentheses,
593 "suggest parentheses around assignment used as truth value");
594 TREE_NO_WARNING (cond) = 1;
595 }
596
ed5511d9
MM
597 return condition_conversion (cond);
598}
599
9bfadf57 600/* Finish an expression-statement, whose EXPRESSION is as indicated. */
a7e4cfa0 601
3e4d04a1 602tree
3a978d72 603finish_expr_stmt (tree expr)
ad321293 604{
3e4d04a1
RH
605 tree r = NULL_TREE;
606
ce4a0391 607 if (expr != NULL_TREE)
ad321293 608 {
a5bcc582 609 if (!processing_template_decl)
3a5b9284
RH
610 {
611 if (warn_sequence_point)
612 verify_sequence_points (expr);
5ade1ed2 613 expr = convert_to_void (expr, "statement", tf_warning_or_error);
3a5b9284 614 }
47d4c811 615 else if (!type_dependent_expression_p (expr))
5ade1ed2
DG
616 convert_to_void (build_non_dependent_expr (expr), "statement",
617 tf_warning_or_error);
325c3691 618
7b3e2d46 619 if (check_for_bare_parameter_packs (expr))
4439d02f 620 expr = error_mark_node;
5d80a306 621
325c3691 622 /* Simplification of inner statement expressions, compound exprs,
ca5b80f3 623 etc can result in us already having an EXPR_STMT. */
543a0daa
RH
624 if (TREE_CODE (expr) != CLEANUP_POINT_EXPR)
625 {
626 if (TREE_CODE (expr) != EXPR_STMT)
c2255bc4 627 expr = build_stmt (input_location, EXPR_STMT, expr);
0ad28dde 628 expr = maybe_cleanup_point_expr_void (expr);
543a0daa
RH
629 }
630
325c3691 631 r = add_stmt (expr);
35b1567d 632 }
364460b6 633
35b1567d 634 finish_stmt ();
558475f0 635
3e4d04a1 636 return r;
35b1567d
BC
637}
638
35b1567d 639
ad321293
MM
640/* Begin an if-statement. Returns a newly created IF_STMT if
641 appropriate. */
642
643tree
3a978d72 644begin_if_stmt (void)
ad321293 645{
325c3691
RH
646 tree r, scope;
647 scope = do_pushlevel (sk_block);
c2255bc4 648 r = build_stmt (input_location, IF_STMT, NULL_TREE, NULL_TREE, NULL_TREE);
325c3691 649 TREE_CHAIN (r) = scope;
caf2523d 650 begin_cond (&IF_COND (r));
ad321293
MM
651 return r;
652}
653
654/* Process the COND of an if-statement, which may be given by
655 IF_STMT. */
656
c8094d83 657void
3a978d72 658finish_if_stmt_cond (tree cond, tree if_stmt)
ad321293 659{
caf2523d
RH
660 finish_cond (&IF_COND (if_stmt), maybe_convert_cond (cond));
661 add_stmt (if_stmt);
325c3691 662 THEN_CLAUSE (if_stmt) = push_stmt_list ();
ad321293
MM
663}
664
665/* Finish the then-clause of an if-statement, which may be given by
666 IF_STMT. */
667
668tree
3a978d72 669finish_then_clause (tree if_stmt)
ad321293 670{
325c3691 671 THEN_CLAUSE (if_stmt) = pop_stmt_list (THEN_CLAUSE (if_stmt));
35b1567d 672 return if_stmt;
ad321293
MM
673}
674
675/* Begin the else-clause of an if-statement. */
676
325c3691
RH
677void
678begin_else_clause (tree if_stmt)
ad321293 679{
325c3691 680 ELSE_CLAUSE (if_stmt) = push_stmt_list ();
ad321293
MM
681}
682
683/* Finish the else-clause of an if-statement, which may be given by
684 IF_STMT. */
685
686void
3a978d72 687finish_else_clause (tree if_stmt)
ad321293 688{
325c3691 689 ELSE_CLAUSE (if_stmt) = pop_stmt_list (ELSE_CLAUSE (if_stmt));
ad321293
MM
690}
691
dfbb4f34 692/* Finish an if-statement. */
ad321293 693
c8094d83 694void
325c3691 695finish_if_stmt (tree if_stmt)
ad321293 696{
325c3691
RH
697 tree scope = TREE_CHAIN (if_stmt);
698 TREE_CHAIN (if_stmt) = NULL;
699 add_stmt (do_poplevel (scope));
ad321293 700 finish_stmt ();
35b1567d
BC
701}
702
ad321293
MM
703/* Begin a while-statement. Returns a newly created WHILE_STMT if
704 appropriate. */
705
706tree
3a978d72 707begin_while_stmt (void)
ad321293
MM
708{
709 tree r;
c2255bc4 710 r = build_stmt (input_location, WHILE_STMT, NULL_TREE, NULL_TREE);
ae499cce 711 add_stmt (r);
325c3691 712 WHILE_BODY (r) = do_pushlevel (sk_block);
caf2523d 713 begin_cond (&WHILE_COND (r));
ad321293
MM
714 return r;
715}
716
27d26ee7 717/* Process the COND of a while-statement, which may be given by
ad321293
MM
718 WHILE_STMT. */
719
c8094d83 720void
3a978d72 721finish_while_stmt_cond (tree cond, tree while_stmt)
ad321293 722{
caf2523d
RH
723 finish_cond (&WHILE_COND (while_stmt), maybe_convert_cond (cond));
724 simplify_loop_decl_cond (&WHILE_COND (while_stmt), WHILE_BODY (while_stmt));
ad321293
MM
725}
726
727/* Finish a while-statement, which may be given by WHILE_STMT. */
728
c8094d83 729void
3a978d72 730finish_while_stmt (tree while_stmt)
ad321293 731{
325c3691 732 WHILE_BODY (while_stmt) = do_poplevel (WHILE_BODY (while_stmt));
ad321293
MM
733 finish_stmt ();
734}
735
736/* Begin a do-statement. Returns a newly created DO_STMT if
737 appropriate. */
738
739tree
3a978d72 740begin_do_stmt (void)
ad321293 741{
c2255bc4 742 tree r = build_stmt (input_location, DO_STMT, NULL_TREE, NULL_TREE);
ae499cce 743 add_stmt (r);
325c3691 744 DO_BODY (r) = push_stmt_list ();
35b1567d 745 return r;
ad321293
MM
746}
747
748/* Finish the body of a do-statement, which may be given by DO_STMT. */
749
750void
3a978d72 751finish_do_body (tree do_stmt)
ad321293 752{
62e00e94
DM
753 tree body = DO_BODY (do_stmt) = pop_stmt_list (DO_BODY (do_stmt));
754
755 if (TREE_CODE (body) == STATEMENT_LIST && STATEMENT_LIST_TAIL (body))
756 body = STATEMENT_LIST_TAIL (body)->stmt;
757
758 if (IS_EMPTY_STMT (body))
759 warning (OPT_Wempty_body,
760 "suggest explicit braces around empty body in %<do%> statement");
ad321293
MM
761}
762
763/* Finish a do-statement, which may be given by DO_STMT, and whose
764 COND is as indicated. */
765
766void
3a978d72 767finish_do_stmt (tree cond, tree do_stmt)
ad321293 768{
ed5511d9 769 cond = maybe_convert_cond (cond);
35b1567d
BC
770 DO_COND (do_stmt) = cond;
771 finish_stmt ();
772}
ed5511d9 773
ad321293
MM
774/* Finish a return-statement. The EXPRESSION returned, if any, is as
775 indicated. */
776
3e4d04a1 777tree
3a978d72 778finish_return_stmt (tree expr)
ad321293 779{
3e4d04a1 780 tree r;
0c9b182b 781 bool no_warning;
3e4d04a1 782
0c9b182b 783 expr = check_return_expr (expr, &no_warning);
1799e5d5
RH
784
785 if (flag_openmp && !check_omp_return ())
786 return error_mark_node;
35b1567d 787 if (!processing_template_decl)
efee38a9 788 {
d4033c81
MLI
789 if (warn_sequence_point)
790 verify_sequence_points (expr);
791
44d10c10 792 if (DECL_DESTRUCTOR_P (current_function_decl)
c8094d83 793 || (DECL_CONSTRUCTOR_P (current_function_decl)
44d10c10 794 && targetm.cxx.cdtor_returns_this ()))
efee38a9
MM
795 {
796 /* Similarly, all destructors must run destructors for
797 base-classes before returning. So, all returns in a
dfbb4f34 798 destructor get sent to the DTOR_LABEL; finish_function emits
efee38a9 799 code to return a value there. */
44d10c10 800 return finish_goto_stmt (cdtor_label);
efee38a9
MM
801 }
802 }
543a0daa 803
c2255bc4 804 r = build_stmt (input_location, RETURN_EXPR, expr);
0c9b182b 805 TREE_NO_WARNING (r) |= no_warning;
0ad28dde 806 r = maybe_cleanup_point_expr_void (r);
543a0daa 807 r = add_stmt (r);
35b1567d 808 finish_stmt ();
3e4d04a1
RH
809
810 return r;
35b1567d 811}
efee38a9 812
ad321293
MM
813/* Begin a for-statement. Returns a new FOR_STMT if appropriate. */
814
815tree
3a978d72 816begin_for_stmt (void)
ad321293
MM
817{
818 tree r;
819
c2255bc4 820 r = build_stmt (input_location, FOR_STMT, NULL_TREE, NULL_TREE,
0dfdeca6 821 NULL_TREE, NULL_TREE);
325c3691
RH
822
823 if (flag_new_for_scope > 0)
824 TREE_CHAIN (r) = do_pushlevel (sk_for);
ad321293 825
894ca2c9
RH
826 if (processing_template_decl)
827 FOR_INIT_STMT (r) = push_stmt_list ();
828
ad321293
MM
829 return r;
830}
831
832/* Finish the for-init-statement of a for-statement, which may be
833 given by FOR_STMT. */
834
835void
3a978d72 836finish_for_init_stmt (tree for_stmt)
ad321293 837{
894ca2c9
RH
838 if (processing_template_decl)
839 FOR_INIT_STMT (for_stmt) = pop_stmt_list (FOR_INIT_STMT (for_stmt));
325c3691
RH
840 add_stmt (for_stmt);
841 FOR_BODY (for_stmt) = do_pushlevel (sk_block);
caf2523d 842 begin_cond (&FOR_COND (for_stmt));
ad321293
MM
843}
844
845/* Finish the COND of a for-statement, which may be given by
846 FOR_STMT. */
847
848void
3a978d72 849finish_for_cond (tree cond, tree for_stmt)
ad321293 850{
caf2523d
RH
851 finish_cond (&FOR_COND (for_stmt), maybe_convert_cond (cond));
852 simplify_loop_decl_cond (&FOR_COND (for_stmt), FOR_BODY (for_stmt));
ad321293
MM
853}
854
855/* Finish the increment-EXPRESSION in a for-statement, which may be
856 given by FOR_STMT. */
857
858void
3a978d72 859finish_for_expr (tree expr, tree for_stmt)
ad321293 860{
543a0daa
RH
861 if (!expr)
862 return;
6f69173e
MM
863 /* If EXPR is an overloaded function, issue an error; there is no
864 context available to use to perform overload resolution. */
543a0daa 865 if (type_unknown_p (expr))
6f69173e
MM
866 {
867 cxx_incomplete_type_error (expr, TREE_TYPE (expr));
868 expr = error_mark_node;
869 }
bcd46a7c
AP
870 if (!processing_template_decl)
871 {
872 if (warn_sequence_point)
0cbd7506 873 verify_sequence_points (expr);
5ade1ed2
DG
874 expr = convert_to_void (expr, "3rd expression in for",
875 tf_warning_or_error);
bcd46a7c
AP
876 }
877 else if (!type_dependent_expression_p (expr))
5ade1ed2
DG
878 convert_to_void (build_non_dependent_expr (expr), "3rd expression in for",
879 tf_warning_or_error);
0ad28dde 880 expr = maybe_cleanup_point_expr_void (expr);
7b3e2d46 881 if (check_for_bare_parameter_packs (expr))
4439d02f 882 expr = error_mark_node;
35b1567d 883 FOR_EXPR (for_stmt) = expr;
ad321293
MM
884}
885
886/* Finish the body of a for-statement, which may be given by
887 FOR_STMT. The increment-EXPR for the loop must be
888 provided. */
889
890void
3a978d72 891finish_for_stmt (tree for_stmt)
ad321293 892{
325c3691
RH
893 FOR_BODY (for_stmt) = do_poplevel (FOR_BODY (for_stmt));
894
ad321293 895 /* Pop the scope for the body of the loop. */
325c3691
RH
896 if (flag_new_for_scope > 0)
897 {
898 tree scope = TREE_CHAIN (for_stmt);
899 TREE_CHAIN (for_stmt) = NULL;
900 add_stmt (do_poplevel (scope));
901 }
902
c8094d83 903 finish_stmt ();
ad321293
MM
904}
905
906/* Finish a break-statement. */
907
3e4d04a1 908tree
3a978d72 909finish_break_stmt (void)
ad321293 910{
c2255bc4 911 return add_stmt (build_stmt (input_location, BREAK_STMT));
35b1567d
BC
912}
913
ad321293
MM
914/* Finish a continue-statement. */
915
3e4d04a1 916tree
3a978d72 917finish_continue_stmt (void)
ad321293 918{
c2255bc4 919 return add_stmt (build_stmt (input_location, CONTINUE_STMT));
ad321293
MM
920}
921
35b1567d
BC
922/* Begin a switch-statement. Returns a new SWITCH_STMT if
923 appropriate. */
924
925tree
3a978d72 926begin_switch_stmt (void)
35b1567d 927{
325c3691
RH
928 tree r, scope;
929
c2255bc4 930 r = build_stmt (input_location, SWITCH_STMT, NULL_TREE, NULL_TREE, NULL_TREE);
325c3691
RH
931
932 scope = do_pushlevel (sk_block);
933 TREE_CHAIN (r) = scope;
ebaae582 934 begin_cond (&SWITCH_STMT_COND (r));
325c3691 935
527f0080 936 return r;
ad321293
MM
937}
938
527f0080 939/* Finish the cond of a switch-statement. */
ad321293 940
527f0080 941void
3a978d72 942finish_switch_cond (tree cond, tree switch_stmt)
ad321293 943{
6f9fdf4d 944 tree orig_type = NULL;
35b1567d 945 if (!processing_template_decl)
373eb3b3 946 {
35b1567d 947 /* Convert the condition to an integer or enumeration type. */
b746c5dc 948 cond = build_expr_type_conversion (WANT_INT | WANT_ENUM, cond, true);
35b1567d 949 if (cond == NULL_TREE)
373eb3b3 950 {
35b1567d
BC
951 error ("switch quantity not an integer");
952 cond = error_mark_node;
953 }
6f9fdf4d 954 orig_type = TREE_TYPE (cond);
35b1567d
BC
955 if (cond != error_mark_node)
956 {
0a72704b
MM
957 /* [stmt.switch]
958
959 Integral promotions are performed. */
960 cond = perform_integral_promotions (cond);
543a0daa 961 cond = maybe_cleanup_point_expr (cond);
373eb3b3 962 }
ad321293 963 }
7b3e2d46 964 if (check_for_bare_parameter_packs (cond))
4439d02f 965 cond = error_mark_node;
d4033c81
MLI
966 else if (!processing_template_decl && warn_sequence_point)
967 verify_sequence_points (cond);
968
ebaae582
SB
969 finish_cond (&SWITCH_STMT_COND (switch_stmt), cond);
970 SWITCH_STMT_TYPE (switch_stmt) = orig_type;
caf2523d 971 add_stmt (switch_stmt);
56cb9733 972 push_switch (switch_stmt);
ebaae582 973 SWITCH_STMT_BODY (switch_stmt) = push_stmt_list ();
ad321293
MM
974}
975
976/* Finish the body of a switch-statement, which may be given by
977 SWITCH_STMT. The COND to switch on is indicated. */
978
979void
3a978d72 980finish_switch_stmt (tree switch_stmt)
ad321293 981{
325c3691
RH
982 tree scope;
983
ebaae582
SB
984 SWITCH_STMT_BODY (switch_stmt) =
985 pop_stmt_list (SWITCH_STMT_BODY (switch_stmt));
c8094d83 986 pop_switch ();
ad321293 987 finish_stmt ();
325c3691
RH
988
989 scope = TREE_CHAIN (switch_stmt);
990 TREE_CHAIN (switch_stmt) = NULL;
991 add_stmt (do_poplevel (scope));
ad321293
MM
992}
993
ad321293
MM
994/* Begin a try-block. Returns a newly-created TRY_BLOCK if
995 appropriate. */
996
997tree
3a978d72 998begin_try_block (void)
ad321293 999{
c2255bc4 1000 tree r = build_stmt (input_location, TRY_BLOCK, NULL_TREE, NULL_TREE);
ae499cce 1001 add_stmt (r);
325c3691 1002 TRY_STMTS (r) = push_stmt_list ();
35b1567d 1003 return r;
ad321293
MM
1004}
1005
eaf6fb90
MM
1006/* Likewise, for a function-try-block. The block returned in
1007 *COMPOUND_STMT is an artificial outer scope, containing the
1008 function-try-block. */
0dde4175
JM
1009
1010tree
eaf6fb90 1011begin_function_try_block (tree *compound_stmt)
0dde4175 1012{
eaf6fb90
MM
1013 tree r;
1014 /* This outer scope does not exist in the C++ standard, but we need
1015 a place to put __FUNCTION__ and similar variables. */
1016 *compound_stmt = begin_compound_stmt (0);
1017 r = begin_try_block ();
35b1567d 1018 FN_TRY_BLOCK_P (r) = 1;
35b1567d 1019 return r;
0dde4175
JM
1020}
1021
ad321293
MM
1022/* Finish a try-block, which may be given by TRY_BLOCK. */
1023
1024void
3a978d72 1025finish_try_block (tree try_block)
ad321293 1026{
325c3691
RH
1027 TRY_STMTS (try_block) = pop_stmt_list (TRY_STMTS (try_block));
1028 TRY_HANDLERS (try_block) = push_stmt_list ();
ad321293
MM
1029}
1030
efa8eda3
MM
1031/* Finish the body of a cleanup try-block, which may be given by
1032 TRY_BLOCK. */
1033
62409b39 1034void
3a978d72 1035finish_cleanup_try_block (tree try_block)
62409b39 1036{
325c3691 1037 TRY_STMTS (try_block) = pop_stmt_list (TRY_STMTS (try_block));
62409b39
MM
1038}
1039
f1dedc31
MM
1040/* Finish an implicitly generated try-block, with a cleanup is given
1041 by CLEANUP. */
1042
1043void
3a978d72 1044finish_cleanup (tree cleanup, tree try_block)
f1dedc31 1045{
35b1567d
BC
1046 TRY_HANDLERS (try_block) = cleanup;
1047 CLEANUP_P (try_block) = 1;
f1dedc31
MM
1048}
1049
0dde4175
JM
1050/* Likewise, for a function-try-block. */
1051
1052void
3a978d72 1053finish_function_try_block (tree try_block)
0dde4175 1054{
325c3691
RH
1055 finish_try_block (try_block);
1056 /* FIXME : something queer about CTOR_INITIALIZER somehow following
1057 the try block, but moving it inside. */
b35d4555 1058 in_function_try_handler = 1;
0dde4175
JM
1059}
1060
ad321293
MM
1061/* Finish a handler-sequence for a try-block, which may be given by
1062 TRY_BLOCK. */
1063
1064void
3a978d72 1065finish_handler_sequence (tree try_block)
ad321293 1066{
325c3691 1067 TRY_HANDLERS (try_block) = pop_stmt_list (TRY_HANDLERS (try_block));
35b1567d 1068 check_handlers (TRY_HANDLERS (try_block));
ad321293
MM
1069}
1070
eaf6fb90
MM
1071/* Finish the handler-seq for a function-try-block, given by
1072 TRY_BLOCK. COMPOUND_STMT is the outer block created by
1073 begin_function_try_block. */
0dde4175
JM
1074
1075void
eaf6fb90 1076finish_function_handler_sequence (tree try_block, tree compound_stmt)
0dde4175 1077{
b35d4555 1078 in_function_try_handler = 0;
325c3691 1079 finish_handler_sequence (try_block);
eaf6fb90 1080 finish_compound_stmt (compound_stmt);
35b1567d
BC
1081}
1082
ad321293
MM
1083/* Begin a handler. Returns a HANDLER if appropriate. */
1084
1085tree
3a978d72 1086begin_handler (void)
ad321293
MM
1087{
1088 tree r;
325c3691 1089
c2255bc4 1090 r = build_stmt (input_location, HANDLER, NULL_TREE, NULL_TREE);
ae499cce 1091 add_stmt (r);
325c3691 1092
1a6025b4
JM
1093 /* Create a binding level for the eh_info and the exception object
1094 cleanup. */
325c3691
RH
1095 HANDLER_BODY (r) = do_pushlevel (sk_catch);
1096
ad321293
MM
1097 return r;
1098}
1099
1100/* Finish the handler-parameters for a handler, which may be given by
b35d4555
MM
1101 HANDLER. DECL is the declaration for the catch parameter, or NULL
1102 if this is a `catch (...)' clause. */
ad321293 1103
1a6025b4 1104void
3a978d72 1105finish_handler_parms (tree decl, tree handler)
b35d4555 1106{
1a6025b4 1107 tree type = NULL_TREE;
b35d4555
MM
1108 if (processing_template_decl)
1109 {
1110 if (decl)
1111 {
1112 decl = pushdecl (decl);
1113 decl = push_template_decl (decl);
325c3691 1114 HANDLER_PARMS (handler) = decl;
1a6025b4 1115 type = TREE_TYPE (decl);
b35d4555
MM
1116 }
1117 }
35b1567d 1118 else
1a6025b4 1119 type = expand_start_catch_block (decl);
1a6025b4 1120 HANDLER_TYPE (handler) = type;
b80cfdcd 1121 if (!processing_template_decl && type)
6cad4e17 1122 mark_used (eh_type_info (type));
35b1567d
BC
1123}
1124
1125/* Finish a handler, which may be given by HANDLER. The BLOCKs are
1126 the return value from the matching call to finish_handler_parms. */
1127
1128void
3a978d72 1129finish_handler (tree handler)
35b1567d
BC
1130{
1131 if (!processing_template_decl)
1a6025b4 1132 expand_end_catch_block ();
325c3691 1133 HANDLER_BODY (handler) = do_poplevel (HANDLER_BODY (handler));
35b1567d
BC
1134}
1135
5882f0f3 1136/* Begin a compound statement. FLAGS contains some bits that control the
5995ebfb 1137 behavior and context. If BCS_NO_SCOPE is set, the compound statement
5882f0f3 1138 does not define a scope. If BCS_FN_BODY is set, this is the outermost
c8094d83 1139 block of a function. If BCS_TRY_BLOCK is set, this is the block
5882f0f3
RH
1140 created on behalf of a TRY statement. Returns a token to be passed to
1141 finish_compound_stmt. */
ad321293
MM
1142
1143tree
325c3691 1144begin_compound_stmt (unsigned int flags)
ad321293 1145{
325c3691 1146 tree r;
558475f0 1147
325c3691
RH
1148 if (flags & BCS_NO_SCOPE)
1149 {
1150 r = push_stmt_list ();
1151 STATEMENT_LIST_NO_SCOPE (r) = 1;
1152
1153 /* Normally, we try hard to keep the BLOCK for a statement-expression.
1154 But, if it's a statement-expression with a scopeless block, there's
1155 nothing to keep, and we don't want to accidentally keep a block
c8094d83 1156 *inside* the scopeless block. */
325c3691
RH
1157 keep_next_level (false);
1158 }
f1dedc31 1159 else
325c3691
RH
1160 r = do_pushlevel (flags & BCS_TRY_BLOCK ? sk_try : sk_block);
1161
5882f0f3
RH
1162 /* When processing a template, we need to remember where the braces were,
1163 so that we can set up identical scopes when instantiating the template
1164 later. BIND_EXPR is a handy candidate for this.
1165 Note that do_poplevel won't create a BIND_EXPR itself here (and thus
1166 result in nested BIND_EXPRs), since we don't build BLOCK nodes when
1167 processing templates. */
1168 if (processing_template_decl)
325c3691 1169 {
f293ce4b 1170 r = build3 (BIND_EXPR, NULL, NULL, r, NULL);
5882f0f3
RH
1171 BIND_EXPR_TRY_BLOCK (r) = (flags & BCS_TRY_BLOCK) != 0;
1172 BIND_EXPR_BODY_BLOCK (r) = (flags & BCS_FN_BODY) != 0;
325c3691
RH
1173 TREE_SIDE_EFFECTS (r) = 1;
1174 }
ad321293
MM
1175
1176 return r;
1177}
1178
5882f0f3 1179/* Finish a compound-statement, which is given by STMT. */
ad321293 1180
325c3691
RH
1181void
1182finish_compound_stmt (tree stmt)
ad321293 1183{
5882f0f3
RH
1184 if (TREE_CODE (stmt) == BIND_EXPR)
1185 BIND_EXPR_BODY (stmt) = do_poplevel (BIND_EXPR_BODY (stmt));
325c3691
RH
1186 else if (STATEMENT_LIST_NO_SCOPE (stmt))
1187 stmt = pop_stmt_list (stmt);
7a3397c7 1188 else
5f070bc7
ZL
1189 {
1190 /* Destroy any ObjC "super" receivers that may have been
1191 created. */
1192 objc_clear_super_receiver ();
1193
1194 stmt = do_poplevel (stmt);
1195 }
ad321293 1196
325c3691
RH
1197 /* ??? See c_end_compound_stmt wrt statement expressions. */
1198 add_stmt (stmt);
ad321293 1199 finish_stmt ();
ad321293
MM
1200}
1201
6de9cd9a 1202/* Finish an asm-statement, whose components are a STRING, some
1c384bf1
RH
1203 OUTPUT_OPERANDS, some INPUT_OPERANDS, some CLOBBERS and some
1204 LABELS. Also note whether the asm-statement should be
1205 considered volatile. */
7dc5bd62 1206
3e4d04a1 1207tree
6de9cd9a 1208finish_asm_stmt (int volatile_p, tree string, tree output_operands,
1c384bf1 1209 tree input_operands, tree clobbers, tree labels)
35b1567d
BC
1210{
1211 tree r;
abfc8a36 1212 tree t;
5544530a
PB
1213 int ninputs = list_length (input_operands);
1214 int noutputs = list_length (output_operands);
abfc8a36 1215
abfc8a36 1216 if (!processing_template_decl)
40b18c0a 1217 {
74f0c611
RH
1218 const char *constraint;
1219 const char **oconstraints;
1220 bool allows_mem, allows_reg, is_inout;
1221 tree operand;
40b18c0a 1222 int i;
40b18c0a 1223
74f0c611
RH
1224 oconstraints = (const char **) alloca (noutputs * sizeof (char *));
1225
1226 string = resolve_asm_operand_names (string, output_operands,
1c384bf1 1227 input_operands, labels);
74f0c611
RH
1228
1229 for (i = 0, t = output_operands; t; t = TREE_CHAIN (t), ++i)
40b18c0a 1230 {
74f0c611
RH
1231 operand = TREE_VALUE (t);
1232
1233 /* ??? Really, this should not be here. Users should be using a
1234 proper lvalue, dammit. But there's a long history of using
1235 casts in the output operands. In cases like longlong.h, this
1236 becomes a primitive form of typechecking -- if the cast can be
1237 removed, then the output operand had a type of the proper width;
1238 otherwise we'll get an error. Gross, but ... */
1239 STRIP_NOPS (operand);
1240
5ade1ed2 1241 if (!lvalue_or_else (operand, lv_asm, tf_warning_or_error))
74f0c611
RH
1242 operand = error_mark_node;
1243
3db45ab5 1244 if (operand != error_mark_node
5544530a
PB
1245 && (TREE_READONLY (operand)
1246 || CP_TYPE_CONST_P (TREE_TYPE (operand))
3db45ab5
MS
1247 /* Functions are not modifiable, even though they are
1248 lvalues. */
1249 || TREE_CODE (TREE_TYPE (operand)) == FUNCTION_TYPE
1250 || TREE_CODE (TREE_TYPE (operand)) == METHOD_TYPE
1251 /* If it's an aggregate and any field is const, then it is
1252 effectively const. */
1253 || (CLASS_TYPE_P (TREE_TYPE (operand))
1254 && C_TYPE_FIELDS_READONLY (TREE_TYPE (operand)))))
4cd5a50a 1255 readonly_error (operand, REK_ASSIGNMENT_ASM);
5544530a 1256
74f0c611
RH
1257 constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (t)));
1258 oconstraints[i] = constraint;
1259
1260 if (parse_output_constraint (&constraint, i, ninputs, noutputs,
1261 &allows_mem, &allows_reg, &is_inout))
1262 {
1263 /* If the operand is going to end up in memory,
1264 mark it addressable. */
1265 if (!allows_reg && !cxx_mark_addressable (operand))
1266 operand = error_mark_node;
1267 }
1268 else
1269 operand = error_mark_node;
1270
1271 TREE_VALUE (t) = operand;
1272 }
1273
1274 for (i = 0, t = input_operands; t; ++i, t = TREE_CHAIN (t))
1275 {
1276 constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (t)));
c8094d83 1277 operand = decay_conversion (TREE_VALUE (t));
74f0c611 1278
40b18c0a
MM
1279 /* If the type of the operand hasn't been determined (e.g.,
1280 because it involves an overloaded function), then issue
1281 an error message. There's no context available to
1282 resolve the overloading. */
74f0c611 1283 if (TREE_TYPE (operand) == unknown_type_node)
40b18c0a 1284 {
c8094d83 1285 error ("type of asm operand %qE could not be determined",
0cbd7506 1286 TREE_VALUE (t));
74f0c611 1287 operand = error_mark_node;
40b18c0a 1288 }
40b18c0a 1289
74f0c611
RH
1290 if (parse_input_constraint (&constraint, i, ninputs, noutputs, 0,
1291 oconstraints, &allows_mem, &allows_reg))
40b18c0a 1292 {
74f0c611
RH
1293 /* If the operand is going to end up in memory,
1294 mark it addressable. */
b4c33883
AP
1295 if (!allows_reg && allows_mem)
1296 {
1297 /* Strip the nops as we allow this case. FIXME, this really
1298 should be rejected or made deprecated. */
1299 STRIP_NOPS (operand);
1300 if (!cxx_mark_addressable (operand))
1301 operand = error_mark_node;
1302 }
40b18c0a 1303 }
74f0c611
RH
1304 else
1305 operand = error_mark_node;
40b18c0a 1306
74f0c611 1307 TREE_VALUE (t) = operand;
40b18c0a
MM
1308 }
1309 }
abfc8a36 1310
c2255bc4 1311 r = build_stmt (input_location, ASM_EXPR, string,
0dfdeca6 1312 output_operands, input_operands,
1c384bf1 1313 clobbers, labels);
5544530a 1314 ASM_VOLATILE_P (r) = volatile_p || noutputs == 0;
0ad28dde 1315 r = maybe_cleanup_point_expr_void (r);
3e4d04a1 1316 return add_stmt (r);
ad321293 1317}
b4c4a9ec 1318
5bca4e80 1319/* Finish a label with the indicated NAME. Returns the new label. */
f01b0acb 1320
a723baf1 1321tree
3a978d72 1322finish_label_stmt (tree name)
f01b0acb 1323{
5b030314 1324 tree decl = define_label (input_location, name);
417fa55b 1325
5bca4e80 1326 if (decl == error_mark_node)
417fa55b
LM
1327 return error_mark_node;
1328
c2255bc4 1329 add_stmt (build_stmt (input_location, LABEL_EXPR, decl));
5bca4e80
ILT
1330
1331 return decl;
f01b0acb
MM
1332}
1333
acef433b
MM
1334/* Finish a series of declarations for local labels. G++ allows users
1335 to declare "local" labels, i.e., labels with scope. This extension
1336 is useful when writing code involving statement-expressions. */
1337
1338void
3a978d72 1339finish_label_decl (tree name)
acef433b 1340{
a6d76a95
PC
1341 if (!at_function_scope_p ())
1342 {
1343 error ("__label__ declarations are only allowed in function scopes");
1344 return;
1345 }
1346
1347 add_decl_expr (declare_local_label (name));
acef433b
MM
1348}
1349
659e5a7a 1350/* When DECL goes out of scope, make sure that CLEANUP is executed. */
f1dedc31 1351
c8094d83 1352void
3a978d72 1353finish_decl_cleanup (tree decl, tree cleanup)
f1dedc31 1354{
325c3691 1355 push_cleanup (decl, cleanup, false);
35b1567d
BC
1356}
1357
659e5a7a 1358/* If the current scope exits with an exception, run CLEANUP. */
24bef158 1359
659e5a7a 1360void
3a978d72 1361finish_eh_cleanup (tree cleanup)
24bef158 1362{
325c3691 1363 push_cleanup (NULL, cleanup, true);
35b1567d
BC
1364}
1365
2282d28d
MM
1366/* The MEM_INITS is a list of mem-initializers, in reverse of the
1367 order they were written by the user. Each node is as for
1368 emit_mem_initializers. */
bf3428d0
MM
1369
1370void
2282d28d 1371finish_mem_initializers (tree mem_inits)
bf3428d0 1372{
2282d28d
MM
1373 /* Reorder the MEM_INITS so that they are in the order they appeared
1374 in the source program. */
1375 mem_inits = nreverse (mem_inits);
bf3428d0 1376
a0de9d20 1377 if (processing_template_decl)
5d80a306
DG
1378 {
1379 tree mem;
1380
1381 for (mem = mem_inits; mem; mem = TREE_CHAIN (mem))
1382 {
1383 /* If the TREE_PURPOSE is a TYPE_PACK_EXPANSION, skip the
1384 check for bare parameter packs in the TREE_VALUE, because
1385 any parameter packs in the TREE_VALUE have already been
1386 bound as part of the TREE_PURPOSE. See
1387 make_pack_expansion for more information. */
4439d02f 1388 if (TREE_CODE (TREE_PURPOSE (mem)) != TYPE_PACK_EXPANSION
7b3e2d46 1389 && check_for_bare_parameter_packs (TREE_VALUE (mem)))
4439d02f 1390 TREE_VALUE (mem) = error_mark_node;
5d80a306
DG
1391 }
1392
1393 add_stmt (build_min_nt (CTOR_INITIALIZER, mem_inits));
1394 }
cdd2559c 1395 else
2282d28d 1396 emit_mem_initializers (mem_inits);
558475f0
MM
1397}
1398
b4c4a9ec
MM
1399/* Finish a parenthesized expression EXPR. */
1400
1401tree
3a978d72 1402finish_parenthesized_expr (tree expr)
b4c4a9ec 1403{
6615c446 1404 if (EXPR_P (expr))
78ef5b89 1405 /* This inhibits warnings in c_common_truthvalue_conversion. */
31ec7d2f 1406 TREE_NO_WARNING (expr) = 1;
b4c4a9ec 1407
19420d00
NS
1408 if (TREE_CODE (expr) == OFFSET_REF)
1409 /* [expr.unary.op]/3 The qualified id of a pointer-to-member must not be
1410 enclosed in parentheses. */
1411 PTRMEM_OK_P (expr) = 0;
c8094d83 1412
7a8380ae
NS
1413 if (TREE_CODE (expr) == STRING_CST)
1414 PAREN_STRING_LITERAL_P (expr) = 1;
c8094d83 1415
b4c4a9ec
MM
1416 return expr;
1417}
1418
a723baf1
MM
1419/* Finish a reference to a non-static data member (DECL) that is not
1420 preceded by `.' or `->'. */
1421
1422tree
a3f10e50 1423finish_non_static_data_member (tree decl, tree object, tree qualifying_scope)
a723baf1 1424{
50bc768d 1425 gcc_assert (TREE_CODE (decl) == FIELD_DECL);
a723baf1 1426
2defb926 1427 if (!object)
51fc2d02 1428 {
51fc2d02
JM
1429 tree scope = qualifying_scope;
1430 if (scope == NULL_TREE)
1431 scope = context_for_name_lookup (decl);
1432 object = maybe_dummy_object (scope, NULL);
1433 }
1434
2defb926
JM
1435 /* DR 613: Can use non-static data members without an associated
1436 object in sizeof/decltype/alignof. */
1437 if (is_dummy_object (object) && cp_unevaluated_operand == 0
1438 && (!processing_template_decl || !current_class_ref))
a723baf1 1439 {
c8094d83 1440 if (current_function_decl
a723baf1 1441 && DECL_STATIC_FUNCTION_P (current_function_decl))
dee15844 1442 error ("invalid use of member %q+D in static member function", decl);
a723baf1 1443 else
dee15844 1444 error ("invalid use of non-static data member %q+D", decl);
a723baf1
MM
1445 error ("from this location");
1446
1447 return error_mark_node;
1448 }
d5f4eddd 1449
51fc2d02
JM
1450 if (current_class_ptr)
1451 TREE_USED (current_class_ptr) = 1;
58e1d54c 1452 if (processing_template_decl && !qualifying_scope)
a723baf1 1453 {
a3f10e50 1454 tree type = TREE_TYPE (decl);
a723baf1 1455
a3f10e50
NS
1456 if (TREE_CODE (type) == REFERENCE_TYPE)
1457 type = TREE_TYPE (type);
1458 else
1459 {
f4f206f4 1460 /* Set the cv qualifiers. */
51fc2d02
JM
1461 int quals = (current_class_ref
1462 ? cp_type_quals (TREE_TYPE (current_class_ref))
1463 : TYPE_UNQUALIFIED);
c8094d83 1464
a3f10e50
NS
1465 if (DECL_MUTABLE_P (decl))
1466 quals &= ~TYPE_QUAL_CONST;
9e95d15f 1467
a3f10e50
NS
1468 quals |= cp_type_quals (TREE_TYPE (decl));
1469 type = cp_build_qualified_type (type, quals);
1470 }
c8094d83 1471
44de5aeb 1472 return build_min (COMPONENT_REF, type, object, decl, NULL_TREE);
a3f10e50 1473 }
ab11c13f
JM
1474 /* If PROCESSING_TEMPLATE_DECL is nonzero here, then
1475 QUALIFYING_SCOPE is also non-null. Wrap this in a SCOPE_REF
1476 for now. */
1477 else if (processing_template_decl)
1478 return build_qualified_name (TREE_TYPE (decl),
1479 qualifying_scope,
1480 DECL_NAME (decl),
1481 /*template_p=*/false);
a3f10e50
NS
1482 else
1483 {
1484 tree access_type = TREE_TYPE (object);
9f01ded6 1485
02022f3a
SM
1486 perform_or_defer_access_check (TYPE_BINFO (access_type), decl,
1487 decl);
a723baf1
MM
1488
1489 /* If the data member was named `C::M', convert `*this' to `C'
1490 first. */
1491 if (qualifying_scope)
1492 {
1493 tree binfo = NULL_TREE;
1494 object = build_scoped_ref (object, qualifying_scope,
1495 &binfo);
1496 }
1497
1498 return build_class_member_access_expr (object, decl,
1499 /*access_path=*/NULL_TREE,
5ade1ed2
DG
1500 /*preserve_reference=*/false,
1501 tf_warning_or_error);
a723baf1
MM
1502 }
1503}
1504
aa373032
DS
1505/* If we are currently parsing a template and we encountered a typedef
1506 TYPEDEF_DECL that is being accessed though CONTEXT, this function
1507 adds the typedef to a list tied to the current template.
1508 At tempate instantiatin time, that list is walked and access check
1509 performed for each typedef.
1510 LOCATION is the location of the usage point of TYPEDEF_DECL. */
1511
1512void
1513add_typedef_to_current_template_for_access_check (tree typedef_decl,
1514 tree context,
1515 location_t location)
1516{
1517 tree template_info = NULL;
1518 tree cs = current_scope ();
1519
1520 if (!is_typedef_decl (typedef_decl)
1521 || !context
1522 || !CLASS_TYPE_P (context)
1523 || !cs)
1524 return;
1525
1526 if (CLASS_TYPE_P (cs) || TREE_CODE (cs) == FUNCTION_DECL)
1527 template_info = get_template_info (cs);
1528
1529 if (template_info
1530 && TI_TEMPLATE (template_info)
1531 && !currently_open_class (context))
1532 append_type_to_template_for_access_check (cs, typedef_decl,
1533 context, location);
1534}
1535
ee76b931
MM
1536/* DECL was the declaration to which a qualified-id resolved. Issue
1537 an error message if it is not accessible. If OBJECT_TYPE is
1538 non-NULL, we have just seen `x->' or `x.' and OBJECT_TYPE is the
1539 type of `*x', or `x', respectively. If the DECL was named as
1540 `A::B' then NESTED_NAME_SPECIFIER is `A'. */
1541
1542void
c8094d83
MS
1543check_accessibility_of_qualified_id (tree decl,
1544 tree object_type,
ee76b931
MM
1545 tree nested_name_specifier)
1546{
1547 tree scope;
1548 tree qualifying_type = NULL_TREE;
95b4aca6 1549
d0940d56
DS
1550 /* If we are parsing a template declaration and if decl is a typedef,
1551 add it to a list tied to the template.
1552 At template instantiation time, that list will be walked and
1553 access check performed. */
aa373032
DS
1554 add_typedef_to_current_template_for_access_check (decl,
1555 nested_name_specifier
1556 ? nested_name_specifier
1557 : DECL_CONTEXT (decl),
1558 input_location);
d0940d56 1559
77880ae4 1560 /* If we're not checking, return immediately. */
95b4aca6
NS
1561 if (deferred_access_no_check)
1562 return;
c8094d83 1563
ee76b931
MM
1564 /* Determine the SCOPE of DECL. */
1565 scope = context_for_name_lookup (decl);
1566 /* If the SCOPE is not a type, then DECL is not a member. */
1567 if (!TYPE_P (scope))
1568 return;
1569 /* Compute the scope through which DECL is being accessed. */
c8094d83 1570 if (object_type
ee76b931
MM
1571 /* OBJECT_TYPE might not be a class type; consider:
1572
1573 class A { typedef int I; };
1574 I *p;
1575 p->A::I::~I();
1576
0cbd7506 1577 In this case, we will have "A::I" as the DECL, but "I" as the
ee76b931
MM
1578 OBJECT_TYPE. */
1579 && CLASS_TYPE_P (object_type)
1580 && DERIVED_FROM_P (scope, object_type))
1581 /* If we are processing a `->' or `.' expression, use the type of the
1582 left-hand side. */
1583 qualifying_type = object_type;
1584 else if (nested_name_specifier)
1585 {
1586 /* If the reference is to a non-static member of the
1587 current class, treat it as if it were referenced through
1588 `this'. */
1589 if (DECL_NONSTATIC_MEMBER_P (decl)
1590 && current_class_ptr
1591 && DERIVED_FROM_P (scope, current_class_type))
1592 qualifying_type = current_class_type;
1593 /* Otherwise, use the type indicated by the
1594 nested-name-specifier. */
1595 else
1596 qualifying_type = nested_name_specifier;
1597 }
1598 else
1599 /* Otherwise, the name must be from the current class or one of
1600 its bases. */
1601 qualifying_type = currently_open_derived_class (scope);
1602
fc429748
MM
1603 if (qualifying_type
1604 /* It is possible for qualifying type to be a TEMPLATE_TYPE_PARM
1605 or similar in a default argument value. */
1606 && CLASS_TYPE_P (qualifying_type)
1607 && !dependent_type_p (qualifying_type))
02022f3a
SM
1608 perform_or_defer_access_check (TYPE_BINFO (qualifying_type), decl,
1609 decl);
ee76b931
MM
1610}
1611
1612/* EXPR is the result of a qualified-id. The QUALIFYING_CLASS was the
1613 class named to the left of the "::" operator. DONE is true if this
1614 expression is a complete postfix-expression; it is false if this
1615 expression is followed by '->', '[', '(', etc. ADDRESS_P is true
02ed62dd
MM
1616 iff this expression is the operand of '&'. TEMPLATE_P is true iff
1617 the qualified-id was of the form "A::template B". TEMPLATE_ARG_P
1618 is true iff this qualified name appears as a template argument. */
ee76b931
MM
1619
1620tree
3db45ab5
MS
1621finish_qualified_id_expr (tree qualifying_class,
1622 tree expr,
02ed62dd 1623 bool done,
3db45ab5 1624 bool address_p,
02ed62dd
MM
1625 bool template_p,
1626 bool template_arg_p)
ee76b931 1627{
d4f0f205
MM
1628 gcc_assert (TYPE_P (qualifying_class));
1629
5e08432e
MM
1630 if (error_operand_p (expr))
1631 return error_mark_node;
1632
7eab6e7b 1633 if (DECL_P (expr) || BASELINK_P (expr))
d4f0f205 1634 mark_used (expr);
d4f0f205 1635
02ed62dd
MM
1636 if (template_p)
1637 check_template_keyword (expr);
1638
ee76b931
MM
1639 /* If EXPR occurs as the operand of '&', use special handling that
1640 permits a pointer-to-member. */
1641 if (address_p && done)
1642 {
1643 if (TREE_CODE (expr) == SCOPE_REF)
1644 expr = TREE_OPERAND (expr, 1);
c8094d83 1645 expr = build_offset_ref (qualifying_class, expr,
a5ac359a 1646 /*address_p=*/true);
ee76b931
MM
1647 return expr;
1648 }
1649
02ed62dd
MM
1650 /* Within the scope of a class, turn references to non-static
1651 members into expression of the form "this->...". */
1652 if (template_arg_p)
1653 /* But, within a template argument, we do not want make the
1654 transformation, as there is no "this" pointer. */
1655 ;
1656 else if (TREE_CODE (expr) == FIELD_DECL)
43854f72
SB
1657 {
1658 push_deferring_access_checks (dk_no_check);
2defb926 1659 expr = finish_non_static_data_member (expr, NULL_TREE,
43854f72
SB
1660 qualifying_class);
1661 pop_deferring_access_checks ();
1662 }
ee76b931
MM
1663 else if (BASELINK_P (expr) && !processing_template_decl)
1664 {
38f1276b 1665 tree ob;
ee76b931
MM
1666
1667 /* See if any of the functions are non-static members. */
7e361ae6 1668 /* If so, the expression may be relative to 'this'. */
294e855f 1669 if (!shared_member_p (expr)
38f1276b
JM
1670 && (ob = maybe_dummy_object (qualifying_class, NULL),
1671 !is_dummy_object (ob)))
c8094d83 1672 expr = (build_class_member_access_expr
38f1276b 1673 (ob,
ee76b931
MM
1674 expr,
1675 BASELINK_ACCESS_BINFO (expr),
5ade1ed2
DG
1676 /*preserve_reference=*/false,
1677 tf_warning_or_error));
ee76b931 1678 else if (done)
a5ac359a
MM
1679 /* The expression is a qualified name whose address is not
1680 being taken. */
1681 expr = build_offset_ref (qualifying_class, expr, /*address_p=*/false);
ee76b931
MM
1682 }
1683
1684 return expr;
1685}
1686
b69b1501
MM
1687/* Begin a statement-expression. The value returned must be passed to
1688 finish_stmt_expr. */
b4c4a9ec 1689
c8094d83 1690tree
3a978d72 1691begin_stmt_expr (void)
b4c4a9ec 1692{
325c3691 1693 return push_stmt_list ();
35b1567d
BC
1694}
1695
a5bcc582 1696/* Process the final expression of a statement expression. EXPR can be
85a56c9d
MM
1697 NULL, if the final expression is empty. Return a STATEMENT_LIST
1698 containing all the statements in the statement-expression, or
1699 ERROR_MARK_NODE if there was an error. */
a5bcc582
NS
1700
1701tree
325c3691 1702finish_stmt_expr_expr (tree expr, tree stmt_expr)
a5bcc582 1703{
72e4661a 1704 if (error_operand_p (expr))
76b9a2a1
AP
1705 {
1706 /* The type of the statement-expression is the type of the last
1707 expression. */
1708 TREE_TYPE (stmt_expr) = error_mark_node;
1709 return error_mark_node;
1710 }
c8094d83 1711
85a56c9d 1712 /* If the last statement does not have "void" type, then the value
3db45ab5 1713 of the last statement is the value of the entire expression. */
a5bcc582
NS
1714 if (expr)
1715 {
c6c7698d
JM
1716 tree type = TREE_TYPE (expr);
1717
1718 if (processing_template_decl)
1719 {
c2255bc4 1720 expr = build_stmt (input_location, EXPR_STMT, expr);
c6c7698d
JM
1721 expr = add_stmt (expr);
1722 /* Mark the last statement so that we can recognize it as such at
1723 template-instantiation time. */
1724 EXPR_STMT_STMT_EXPR_RESULT (expr) = 1;
1725 }
1726 else if (VOID_TYPE_P (type))
a5bcc582 1727 {
c6c7698d
JM
1728 /* Just treat this like an ordinary statement. */
1729 expr = finish_expr_stmt (expr);
1730 }
1731 else
1732 {
1733 /* It actually has a value we need to deal with. First, force it
1734 to be an rvalue so that we won't need to build up a copy
1735 constructor call later when we try to assign it to something. */
1736 expr = force_rvalue (expr);
85a56c9d
MM
1737 if (error_operand_p (expr))
1738 return error_mark_node;
c6c7698d
JM
1739
1740 /* Update for array-to-pointer decay. */
2692eb7d 1741 type = TREE_TYPE (expr);
c6c7698d
JM
1742
1743 /* Wrap it in a CLEANUP_POINT_EXPR and add it to the list like a
1744 normal statement, but don't convert to void or actually add
1745 the EXPR_STMT. */
1746 if (TREE_CODE (expr) != CLEANUP_POINT_EXPR)
1747 expr = maybe_cleanup_point_expr (expr);
1748 add_stmt (expr);
85a56c9d 1749 }
c6c7698d 1750
85a56c9d
MM
1751 /* The type of the statement-expression is the type of the last
1752 expression. */
1753 TREE_TYPE (stmt_expr) = type;
a5bcc582 1754 }
c8094d83 1755
85a56c9d 1756 return stmt_expr;
a5bcc582
NS
1757}
1758
303b7406
NS
1759/* Finish a statement-expression. EXPR should be the value returned
1760 by the previous begin_stmt_expr. Returns an expression
1761 representing the statement-expression. */
b4c4a9ec 1762
c8094d83 1763tree
325c3691 1764finish_stmt_expr (tree stmt_expr, bool has_no_scope)
b4c4a9ec 1765{
85a56c9d
MM
1766 tree type;
1767 tree result;
325c3691 1768
85a56c9d 1769 if (error_operand_p (stmt_expr))
d7b5fa31
JJ
1770 {
1771 pop_stmt_list (stmt_expr);
1772 return error_mark_node;
1773 }
325c3691 1774
85a56c9d 1775 gcc_assert (TREE_CODE (stmt_expr) == STATEMENT_LIST);
325c3691 1776
85a56c9d
MM
1777 type = TREE_TYPE (stmt_expr);
1778 result = pop_stmt_list (stmt_expr);
c6c7698d 1779 TREE_TYPE (result) = type;
6f80451c 1780
a5bcc582 1781 if (processing_template_decl)
325c3691
RH
1782 {
1783 result = build_min (STMT_EXPR, type, result);
1784 TREE_SIDE_EFFECTS (result) = 1;
1785 STMT_EXPR_NO_SCOPE (result) = has_no_scope;
1786 }
c6c7698d 1787 else if (CLASS_TYPE_P (type))
a5bcc582 1788 {
c6c7698d
JM
1789 /* Wrap the statement-expression in a TARGET_EXPR so that the
1790 temporary object created by the final expression is destroyed at
1791 the end of the full-expression containing the
1792 statement-expression. */
1793 result = force_target_expr (type, result);
a5bcc582 1794 }
325c3691 1795
b4c4a9ec
MM
1796 return result;
1797}
1798
c2acde1e
JM
1799/* Returns the expression which provides the value of STMT_EXPR. */
1800
1801tree
1802stmt_expr_value_expr (tree stmt_expr)
1803{
1804 tree t = STMT_EXPR_STMT (stmt_expr);
1805
1806 if (TREE_CODE (t) == BIND_EXPR)
1807 t = BIND_EXPR_BODY (t);
1808
9de0e916 1809 if (TREE_CODE (t) == STATEMENT_LIST && STATEMENT_LIST_TAIL (t))
c2acde1e
JM
1810 t = STATEMENT_LIST_TAIL (t)->stmt;
1811
1812 if (TREE_CODE (t) == EXPR_STMT)
1813 t = EXPR_STMT_EXPR (t);
1814
1815 return t;
1816}
1817
9af66ed1
DS
1818/* Return TRUE iff EXPR_STMT is an empty list of
1819 expression statements. */
1820
1821bool
1822empty_expr_stmt_p (tree expr_stmt)
1823{
1824 tree body = NULL_TREE;
1825
489df541
DS
1826 if (expr_stmt == void_zero_node)
1827 return true;
1828
9af66ed1
DS
1829 if (expr_stmt)
1830 {
1831 if (TREE_CODE (expr_stmt) == EXPR_STMT)
1832 body = EXPR_STMT_EXPR (expr_stmt);
1833 else if (TREE_CODE (expr_stmt) == STATEMENT_LIST)
1834 body = expr_stmt;
1835 }
1836
489df541
DS
1837 if (body)
1838 {
1839 if (TREE_CODE (body) == STATEMENT_LIST)
1840 return tsi_end_p (tsi_start (body));
1841 else
1842 return empty_expr_stmt_p (body);
1843 }
9af66ed1
DS
1844 return false;
1845}
1846
b3445994 1847/* Perform Koenig lookup. FN is the postfix-expression representing
fa531100
MM
1848 the function (or functions) to call; ARGS are the arguments to the
1849 call. Returns the functions to be considered by overload
1850 resolution. */
b3445994
MM
1851
1852tree
c166b898 1853perform_koenig_lookup (tree fn, VEC(tree,gc) *args)
b3445994
MM
1854{
1855 tree identifier = NULL_TREE;
1856 tree functions = NULL_TREE;
d095e03c 1857 tree tmpl_args = NULL_TREE;
4e6a9725 1858 bool template_id = false;
d095e03c
JM
1859
1860 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
1861 {
4e6a9725
JM
1862 /* Use a separate flag to handle null args. */
1863 template_id = true;
d095e03c
JM
1864 tmpl_args = TREE_OPERAND (fn, 1);
1865 fn = TREE_OPERAND (fn, 0);
1866 }
b3445994
MM
1867
1868 /* Find the name of the overloaded function. */
1869 if (TREE_CODE (fn) == IDENTIFIER_NODE)
1870 identifier = fn;
1871 else if (is_overloaded_fn (fn))
1872 {
1873 functions = fn;
1874 identifier = DECL_NAME (get_first_fn (functions));
1875 }
1876 else if (DECL_P (fn))
1877 {
1878 functions = fn;
1879 identifier = DECL_NAME (fn);
1880 }
1881
1882 /* A call to a namespace-scope function using an unqualified name.
1883
1884 Do Koenig lookup -- unless any of the arguments are
1885 type-dependent. */
d095e03c
JM
1886 if (!any_type_dependent_arguments_p (args)
1887 && !any_dependent_template_arguments_p (tmpl_args))
b3445994
MM
1888 {
1889 fn = lookup_arg_dependent (identifier, functions, args);
1890 if (!fn)
1891 /* The unqualified name could not be resolved. */
1892 fn = unqualified_fn_lookup_error (identifier);
1893 }
b3445994 1894
4e6a9725
JM
1895 if (fn && template_id)
1896 fn = build2 (TEMPLATE_ID_EXPR, unknown_type_node, fn, tmpl_args);
d095e03c 1897
b3445994
MM
1898 return fn;
1899}
1900
c166b898
ILT
1901/* Generate an expression for `FN (ARGS)'. This may change the
1902 contents of ARGS.
4ba126e4
MM
1903
1904 If DISALLOW_VIRTUAL is true, the call to FN will be not generated
1905 as a virtual call, even if FN is virtual. (This flag is set when
1906 encountering an expression where the function name is explicitly
1907 qualified. For example a call to `X::f' never generates a virtual
1908 call.)
1909
1910 Returns code for the call. */
b4c4a9ec 1911
c8094d83 1912tree
c166b898
ILT
1913finish_call_expr (tree fn, VEC(tree,gc) **args, bool disallow_virtual,
1914 bool koenig_p, tsubst_flags_t complain)
b4c4a9ec 1915{
d17811fd
MM
1916 tree result;
1917 tree orig_fn;
c166b898 1918 VEC(tree,gc) *orig_args = NULL;
d17811fd 1919
c166b898 1920 if (fn == error_mark_node)
4ba126e4
MM
1921 return error_mark_node;
1922
4860b874 1923 gcc_assert (!TYPE_P (fn));
a759e627 1924
d17811fd 1925 orig_fn = fn;
d17811fd
MM
1926
1927 if (processing_template_decl)
1928 {
1929 if (type_dependent_expression_p (fn)
c166b898 1930 || any_type_dependent_arguments_p (*args))
6d80c4b9 1931 {
c166b898 1932 result = build_nt_call_vec (fn, *args);
5094a795 1933 KOENIG_LOOKUP_P (result) = koenig_p;
be461b8f
JJ
1934 if (cfun)
1935 {
1936 do
1937 {
1938 tree fndecl = OVL_CURRENT (fn);
1939 if (TREE_CODE (fndecl) != FUNCTION_DECL
1940 || !TREE_THIS_VOLATILE (fndecl))
1941 break;
1942 fn = OVL_NEXT (fn);
1943 }
1944 while (fn);
1945 if (!fn)
1946 current_function_returns_abnormally = 1;
1947 }
6d80c4b9
MM
1948 return result;
1949 }
c166b898 1950 orig_args = make_tree_vector_copy (*args);
d17811fd
MM
1951 if (!BASELINK_P (fn)
1952 && TREE_CODE (fn) != PSEUDO_DTOR_EXPR
1953 && TREE_TYPE (fn) != unknown_type_node)
1954 fn = build_non_dependent_expr (fn);
c166b898 1955 make_args_non_dependent (*args);
d17811fd
MM
1956 }
1957
eff3a276
MM
1958 if (is_overloaded_fn (fn))
1959 fn = baselink_for_fns (fn);
a723baf1 1960
d17811fd 1961 result = NULL_TREE;
4ba126e4 1962 if (BASELINK_P (fn))
03d82991 1963 {
4ba126e4
MM
1964 tree object;
1965
1966 /* A call to a member function. From [over.call.func]:
1967
1968 If the keyword this is in scope and refers to the class of
1969 that member function, or a derived class thereof, then the
1970 function call is transformed into a qualified function call
1971 using (*this) as the postfix-expression to the left of the
1972 . operator.... [Otherwise] a contrived object of type T
c8094d83 1973 becomes the implied object argument.
4ba126e4 1974
38f1276b 1975 In this situation:
4ba126e4
MM
1976
1977 struct A { void f(); };
1978 struct B : public A {};
1979 struct C : public A { void g() { B::f(); }};
1980
38f1276b
JM
1981 "the class of that member function" refers to `A'. But 11.2
1982 [class.access.base] says that we need to convert 'this' to B* as
1983 part of the access, so we pass 'B' to maybe_dummy_object. */
b4c4a9ec 1984
38f1276b
JM
1985 object = maybe_dummy_object (BINFO_TYPE (BASELINK_ACCESS_BINFO (fn)),
1986 NULL);
b4c4a9ec 1987
d17811fd
MM
1988 if (processing_template_decl)
1989 {
1990 if (type_dependent_expression_p (object))
c166b898
ILT
1991 {
1992 tree ret = build_nt_call_vec (orig_fn, orig_args);
1993 release_tree_vector (orig_args);
1994 return ret;
1995 }
d17811fd
MM
1996 object = build_non_dependent_expr (object);
1997 }
1998
1999 result = build_new_method_call (object, fn, args, NULL_TREE,
c8094d83 2000 (disallow_virtual
63c9a190 2001 ? LOOKUP_NONVIRTUAL : 0),
5ade1ed2
DG
2002 /*fn_p=*/NULL,
2003 complain);
4ba126e4
MM
2004 }
2005 else if (is_overloaded_fn (fn))
16c35a1f
RH
2006 {
2007 /* If the function is an overloaded builtin, resolve it. */
2008 if (TREE_CODE (fn) == FUNCTION_DECL
58646b77
PB
2009 && (DECL_BUILT_IN_CLASS (fn) == BUILT_IN_NORMAL
2010 || DECL_BUILT_IN_CLASS (fn) == BUILT_IN_MD))
c2255bc4 2011 result = resolve_overloaded_builtin (input_location, fn, *args);
16c35a1f
RH
2012
2013 if (!result)
2014 /* A call to a namespace-scope function. */
5094a795 2015 result = build_new_function_call (fn, args, koenig_p, complain);
16c35a1f 2016 }
a723baf1
MM
2017 else if (TREE_CODE (fn) == PSEUDO_DTOR_EXPR)
2018 {
c166b898 2019 if (!VEC_empty (tree, *args))
a723baf1
MM
2020 error ("arguments to destructor are not allowed");
2021 /* Mark the pseudo-destructor call as having side-effects so
2022 that we do not issue warnings about its use. */
2023 result = build1 (NOP_EXPR,
2024 void_type_node,
2025 TREE_OPERAND (fn, 0));
2026 TREE_SIDE_EFFECTS (result) = 1;
a723baf1 2027 }
4ba126e4 2028 else if (CLASS_TYPE_P (TREE_TYPE (fn)))
d17811fd
MM
2029 /* If the "function" is really an object of class type, it might
2030 have an overloaded `operator ()'. */
c166b898 2031 result = build_op_call (fn, args, complain);
16c35a1f 2032
d17811fd
MM
2033 if (!result)
2034 /* A call where the function is unknown. */
c166b898 2035 result = cp_build_function_call_vec (fn, args, complain);
4ba126e4 2036
d17811fd 2037 if (processing_template_decl)
6d80c4b9 2038 {
c166b898 2039 result = build_call_vec (TREE_TYPE (result), orig_fn, orig_args);
5094a795 2040 KOENIG_LOOKUP_P (result) = koenig_p;
c166b898 2041 release_tree_vector (orig_args);
6d80c4b9 2042 }
c166b898 2043
d17811fd 2044 return result;
b4c4a9ec
MM
2045}
2046
2047/* Finish a call to a postfix increment or decrement or EXPR. (Which
2048 is indicated by CODE, which should be POSTINCREMENT_EXPR or
2049 POSTDECREMENT_EXPR.) */
2050
c8094d83 2051tree
3a978d72 2052finish_increment_expr (tree expr, enum tree_code code)
b4c4a9ec 2053{
5ade1ed2 2054 return build_x_unary_op (code, expr, tf_warning_or_error);
b4c4a9ec
MM
2055}
2056
2057/* Finish a use of `this'. Returns an expression for `this'. */
2058
c8094d83 2059tree
3a978d72 2060finish_this_expr (void)
b4c4a9ec
MM
2061{
2062 tree result;
2063
c6be04ad
JM
2064 if (current_class_ptr)
2065 {
2066 tree type = TREE_TYPE (current_class_ref);
2067
2068 /* In a lambda expression, 'this' refers to the captured 'this'. */
2069 if (LAMBDA_TYPE_P (type))
2070 result = lambda_expr_this_capture (CLASSTYPE_LAMBDA_EXPR (type));
2071 else
2072 result = current_class_ptr;
2073
2074 }
b4c4a9ec
MM
2075 else if (current_function_decl
2076 && DECL_STATIC_FUNCTION_P (current_function_decl))
2077 {
9e637a26 2078 error ("%<this%> is unavailable for static member functions");
b4c4a9ec
MM
2079 result = error_mark_node;
2080 }
2081 else
2082 {
2083 if (current_function_decl)
9e637a26 2084 error ("invalid use of %<this%> in non-member function");
b4c4a9ec 2085 else
9e637a26 2086 error ("invalid use of %<this%> at top level");
b4c4a9ec
MM
2087 result = error_mark_node;
2088 }
2089
2090 return result;
2091}
2092
a723baf1
MM
2093/* Finish a pseudo-destructor expression. If SCOPE is NULL, the
2094 expression was of the form `OBJECT.~DESTRUCTOR' where DESTRUCTOR is
2095 the TYPE for the type given. If SCOPE is non-NULL, the expression
2096 was of the form `OBJECT.SCOPE::~DESTRUCTOR'. */
b4c4a9ec 2097
c8094d83 2098tree
3a978d72 2099finish_pseudo_destructor_expr (tree object, tree scope, tree destructor)
b4c4a9ec 2100{
09b1ccd6 2101 if (object == error_mark_node || destructor == error_mark_node)
a723baf1 2102 return error_mark_node;
40242ccf 2103
50bc768d 2104 gcc_assert (TYPE_P (destructor));
b4c4a9ec 2105
a723baf1
MM
2106 if (!processing_template_decl)
2107 {
2108 if (scope == error_mark_node)
2109 {
2110 error ("invalid qualifying scope in pseudo-destructor name");
2111 return error_mark_node;
2112 }
5cf10afb
AP
2113 if (scope && TYPE_P (scope) && !check_dtor_name (scope, destructor))
2114 {
2115 error ("qualified type %qT does not match destructor name ~%qT",
2116 scope, destructor);
2117 return error_mark_node;
2118 }
2119
c8094d83 2120
26bcf8fc
MM
2121 /* [expr.pseudo] says both:
2122
0cbd7506 2123 The type designated by the pseudo-destructor-name shall be
26bcf8fc
MM
2124 the same as the object type.
2125
0cbd7506 2126 and:
26bcf8fc 2127
0cbd7506 2128 The cv-unqualified versions of the object type and of the
26bcf8fc
MM
2129 type designated by the pseudo-destructor-name shall be the
2130 same type.
2131
0cbd7506
MS
2132 We implement the more generous second sentence, since that is
2133 what most other compilers do. */
c8094d83 2134 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (object),
26bcf8fc 2135 destructor))
a723baf1 2136 {
a82e1a7d 2137 error ("%qE is not of type %qT", object, destructor);
a723baf1
MM
2138 return error_mark_node;
2139 }
2140 }
b4c4a9ec 2141
f293ce4b 2142 return build3 (PSEUDO_DTOR_EXPR, void_type_node, object, scope, destructor);
b4c4a9ec
MM
2143}
2144
ce4a0391
MM
2145/* Finish an expression of the form CODE EXPR. */
2146
2147tree
3a978d72 2148finish_unary_op_expr (enum tree_code code, tree expr)
ce4a0391 2149{
5ade1ed2 2150 tree result = build_x_unary_op (code, expr, tf_warning_or_error);
7c355bca
ML
2151 /* Inside a template, build_x_unary_op does not fold the
2152 expression. So check whether the result is folded before
2153 setting TREE_NEGATED_INT. */
2154 if (code == NEGATE_EXPR && TREE_CODE (expr) == INTEGER_CST
88b4335f 2155 && TREE_CODE (result) == INTEGER_CST
8df83eae 2156 && !TYPE_UNSIGNED (TREE_TYPE (result))
88b4335f 2157 && INT_CST_LT (result, integer_zero_node))
6fc98adf
MM
2158 {
2159 /* RESULT may be a cached INTEGER_CST, so we must copy it before
2160 setting TREE_NEGATED_INT. */
2161 result = copy_node (result);
2162 TREE_NEGATED_INT (result) = 1;
2163 }
59c0753d 2164 if (TREE_OVERFLOW_P (result) && !TREE_OVERFLOW_P (expr))
c2255bc4 2165 overflow_warning (input_location, result);
59c0753d 2166
ce4a0391
MM
2167 return result;
2168}
2169
a723baf1 2170/* Finish a compound-literal expression. TYPE is the type to which
09357846 2171 the CONSTRUCTOR in COMPOUND_LITERAL is being cast. */
a723baf1
MM
2172
2173tree
09357846 2174finish_compound_literal (tree type, tree compound_literal)
a723baf1 2175{
326a4d4e
JJ
2176 if (type == error_mark_node)
2177 return error_mark_node;
2178
2b643eda
MM
2179 if (!TYPE_OBJ_P (type))
2180 {
2181 error ("compound literal of non-object type %qT", type);
2182 return error_mark_node;
2183 }
2184
a723baf1 2185 if (processing_template_decl)
a723baf1 2186 {
e92fb501
MM
2187 TREE_TYPE (compound_literal) = type;
2188 /* Mark the expression as a compound literal. */
2189 TREE_HAS_CONSTRUCTOR (compound_literal) = 1;
2190 return compound_literal;
a723baf1
MM
2191 }
2192
df794884 2193 type = complete_type (type);
09357846
JM
2194
2195 if (TYPE_NON_AGGREGATE_CLASS (type))
2196 {
2197 /* Trying to deal with a CONSTRUCTOR instead of a TREE_LIST
2198 everywhere that deals with function arguments would be a pain, so
2199 just wrap it in a TREE_LIST. The parser set a flag so we know
2200 that it came from T{} rather than T({}). */
2201 CONSTRUCTOR_IS_DIRECT_INIT (compound_literal) = 1;
2202 compound_literal = build_tree_list (NULL_TREE, compound_literal);
2203 return build_functional_cast (type, compound_literal, tf_error);
2204 }
2205
23bee8f4
JJ
2206 if (TREE_CODE (type) == ARRAY_TYPE
2207 && check_array_initializer (NULL_TREE, type, compound_literal))
2208 return error_mark_node;
df794884
JM
2209 compound_literal = reshape_init (type, compound_literal);
2210 if (TREE_CODE (type) == ARRAY_TYPE)
2211 cp_complete_array_type (&type, compound_literal, false);
2212 compound_literal = digest_init (type, compound_literal);
09357846
JM
2213 if ((!at_function_scope_p () || cp_type_readonly (type))
2214 && initializer_constant_valid_p (compound_literal, type))
2215 {
2216 tree decl = create_temporary_var (type);
2217 DECL_INITIAL (decl) = compound_literal;
2218 TREE_STATIC (decl) = 1;
1acb8caa 2219 cp_apply_type_quals_to_decl (cp_type_quals (type), decl);
09357846
JM
2220 decl = pushdecl_top_level (decl);
2221 DECL_NAME (decl) = make_anon_name ();
2222 SET_DECL_ASSEMBLER_NAME (decl, DECL_NAME (decl));
2223 return decl;
2224 }
2225 else
2226 return get_target_expr (compound_literal);
a723baf1
MM
2227}
2228
5f261ba9
MM
2229/* Return the declaration for the function-name variable indicated by
2230 ID. */
2231
2232tree
2233finish_fname (tree id)
2234{
2235 tree decl;
c8094d83 2236
3ba09659 2237 decl = fname_decl (input_location, C_RID_CODE (id), id);
5f261ba9 2238 if (processing_template_decl)
10b1d5e7 2239 decl = DECL_NAME (decl);
5f261ba9
MM
2240 return decl;
2241}
2242
8014a339 2243/* Finish a translation unit. */
ce4a0391 2244
c8094d83 2245void
3a978d72 2246finish_translation_unit (void)
ce4a0391
MM
2247{
2248 /* In case there were missing closebraces,
2249 get us back to the global binding level. */
273a708f 2250 pop_everything ();
ce4a0391
MM
2251 while (current_namespace != global_namespace)
2252 pop_namespace ();
0ba8a114 2253
c6002625 2254 /* Do file scope __FUNCTION__ et al. */
0ba8a114 2255 finish_fname_decls ();
ce4a0391
MM
2256}
2257
b4c4a9ec
MM
2258/* Finish a template type parameter, specified as AGGR IDENTIFIER.
2259 Returns the parameter. */
2260
c8094d83 2261tree
3a978d72 2262finish_template_type_parm (tree aggr, tree identifier)
b4c4a9ec 2263{
6eabb241 2264 if (aggr != class_type_node)
b4c4a9ec 2265 {
cbe5f3b3 2266 permerror (input_location, "template type parameters must use the keyword %<class%> or %<typename%>");
b4c4a9ec
MM
2267 aggr = class_type_node;
2268 }
2269
2270 return build_tree_list (aggr, identifier);
2271}
2272
2273/* Finish a template template parameter, specified as AGGR IDENTIFIER.
2274 Returns the parameter. */
2275
c8094d83 2276tree
3a978d72 2277finish_template_template_parm (tree aggr, tree identifier)
b4c4a9ec 2278{
c2255bc4
AH
2279 tree decl = build_decl (input_location,
2280 TYPE_DECL, identifier, NULL_TREE);
b4c4a9ec
MM
2281 tree tmpl = build_lang_decl (TEMPLATE_DECL, identifier, NULL_TREE);
2282 DECL_TEMPLATE_PARMS (tmpl) = current_template_parms;
2283 DECL_TEMPLATE_RESULT (tmpl) = decl;
c727aa5e 2284 DECL_ARTIFICIAL (decl) = 1;
b4c4a9ec
MM
2285 end_template_decl ();
2286
50bc768d 2287 gcc_assert (DECL_TEMPLATE_PARMS (tmpl));
b37bf5bd 2288
85d85234
DG
2289 check_default_tmpl_args (decl, DECL_TEMPLATE_PARMS (tmpl),
2290 /*is_primary=*/true, /*is_partial=*/false,
2291 /*is_friend=*/0);
2292
b4c4a9ec
MM
2293 return finish_template_type_parm (aggr, tmpl);
2294}
ce4a0391 2295
8ba658ee
MM
2296/* ARGUMENT is the default-argument value for a template template
2297 parameter. If ARGUMENT is invalid, issue error messages and return
2298 the ERROR_MARK_NODE. Otherwise, ARGUMENT itself is returned. */
2299
2300tree
2301check_template_template_default_arg (tree argument)
2302{
2303 if (TREE_CODE (argument) != TEMPLATE_DECL
2304 && TREE_CODE (argument) != TEMPLATE_TEMPLATE_PARM
8ba658ee
MM
2305 && TREE_CODE (argument) != UNBOUND_CLASS_TEMPLATE)
2306 {
a3a503a5 2307 if (TREE_CODE (argument) == TYPE_DECL)
e488a090
VR
2308 error ("invalid use of type %qT as a default value for a template "
2309 "template-parameter", TREE_TYPE (argument));
a3a503a5
GB
2310 else
2311 error ("invalid default argument for a template template parameter");
8ba658ee
MM
2312 return error_mark_node;
2313 }
2314
2315 return argument;
2316}
2317
ce4a0391
MM
2318/* Begin a class definition, as indicated by T. */
2319
2320tree
b9e75696 2321begin_class_definition (tree t, tree attributes)
ce4a0391 2322{
7d2f0ecd 2323 if (error_operand_p (t) || error_operand_p (TYPE_MAIN_DECL (t)))
7437519c
ZW
2324 return error_mark_node;
2325
522d6614
NS
2326 if (processing_template_parmlist)
2327 {
a82e1a7d 2328 error ("definition of %q#T inside template parameter list", t);
522d6614
NS
2329 return error_mark_node;
2330 }
ebf0bf7f
JJ
2331
2332 /* According to the C++ ABI, decimal classes defined in ISO/IEC TR 24733
2333 are passed the same as decimal scalar types. */
cd924144
JM
2334 if (TREE_CODE (t) == RECORD_TYPE
2335 && !processing_template_decl)
ebf0bf7f 2336 {
cd924144
JM
2337 tree ns = TYPE_CONTEXT (t);
2338 if (ns && TREE_CODE (ns) == NAMESPACE_DECL
2339 && DECL_CONTEXT (ns) == std_node
935c0a5d 2340 && DECL_NAME (ns)
cd924144
JM
2341 && !strcmp (IDENTIFIER_POINTER (DECL_NAME (ns)), "decimal"))
2342 {
2343 const char *n = TYPE_NAME_STRING (t);
2344 if ((strcmp (n, "decimal32") == 0)
2345 || (strcmp (n, "decimal64") == 0)
2346 || (strcmp (n, "decimal128") == 0))
2347 TYPE_TRANSPARENT_AGGR (t) = 1;
2348 }
ebf0bf7f
JJ
2349 }
2350
47ee8904
MM
2351 /* A non-implicit typename comes from code like:
2352
2353 template <typename T> struct A {
0cbd7506 2354 template <typename U> struct A<T>::B ...
47ee8904
MM
2355
2356 This is erroneous. */
2357 else if (TREE_CODE (t) == TYPENAME_TYPE)
2358 {
a82e1a7d 2359 error ("invalid definition of qualified type %qT", t);
47ee8904
MM
2360 t = error_mark_node;
2361 }
2362
9e1e64ec 2363 if (t == error_mark_node || ! MAYBE_CLASS_TYPE_P (t))
ce4a0391 2364 {
9e1e64ec 2365 t = make_class_type (RECORD_TYPE);
bd3d082e 2366 pushtag (make_anon_name (), t, /*tag_scope=*/ts_current);
ce4a0391 2367 }
830fcda8 2368
4c571114 2369 if (TYPE_BEING_DEFINED (t))
ce4a0391 2370 {
9e1e64ec 2371 t = make_class_type (TREE_CODE (t));
bd3d082e 2372 pushtag (TYPE_IDENTIFIER (t), t, /*tag_scope=*/ts_current);
ce4a0391 2373 }
ff350acd 2374 maybe_process_partial_specialization (t);
29370796 2375 pushclass (t);
ce4a0391 2376 TYPE_BEING_DEFINED (t) = 1;
b9e75696
JM
2377
2378 cplus_decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
2379
c0694c4b
MM
2380 if (flag_pack_struct)
2381 {
2382 tree v;
2383 TYPE_PACKED (t) = 1;
2384 /* Even though the type is being defined for the first time
2385 here, there might have been a forward declaration, so there
2386 might be cv-qualified variants of T. */
2387 for (v = TYPE_NEXT_VARIANT (t); v; v = TYPE_NEXT_VARIANT (v))
2388 TYPE_PACKED (v) = 1;
2389 }
ce4a0391
MM
2390 /* Reset the interface data, at the earliest possible
2391 moment, as it might have been set via a class foo;
2392 before. */
1951a1b6
JM
2393 if (! TYPE_ANONYMOUS_P (t))
2394 {
c533e34d 2395 struct c_fileinfo *finfo = get_fileinfo (input_filename);
5d709b00 2396 CLASSTYPE_INTERFACE_ONLY (t) = finfo->interface_only;
1951a1b6 2397 SET_CLASSTYPE_INTERFACE_UNKNOWN_X
5d709b00 2398 (t, finfo->interface_unknown);
1951a1b6 2399 }
ce4a0391 2400 reset_specialization();
c8094d83 2401
b7975aed
MM
2402 /* Make a declaration for this class in its own scope. */
2403 build_self_reference ();
2404
830fcda8 2405 return t;
ce4a0391
MM
2406}
2407
61a127b3
MM
2408/* Finish the member declaration given by DECL. */
2409
2410void
3a978d72 2411finish_member_declaration (tree decl)
61a127b3
MM
2412{
2413 if (decl == error_mark_node || decl == NULL_TREE)
2414 return;
2415
2416 if (decl == void_type_node)
2417 /* The COMPONENT was a friend, not a member, and so there's
2418 nothing for us to do. */
2419 return;
2420
2421 /* We should see only one DECL at a time. */
50bc768d 2422 gcc_assert (TREE_CHAIN (decl) == NULL_TREE);
61a127b3
MM
2423
2424 /* Set up access control for DECL. */
c8094d83 2425 TREE_PRIVATE (decl)
61a127b3 2426 = (current_access_specifier == access_private_node);
c8094d83 2427 TREE_PROTECTED (decl)
61a127b3
MM
2428 = (current_access_specifier == access_protected_node);
2429 if (TREE_CODE (decl) == TEMPLATE_DECL)
2430 {
17aec3eb
RK
2431 TREE_PRIVATE (DECL_TEMPLATE_RESULT (decl)) = TREE_PRIVATE (decl);
2432 TREE_PROTECTED (DECL_TEMPLATE_RESULT (decl)) = TREE_PROTECTED (decl);
61a127b3
MM
2433 }
2434
2435 /* Mark the DECL as a member of the current class. */
4f1c5b7d 2436 DECL_CONTEXT (decl) = current_class_type;
61a127b3 2437
b1d7b1c0 2438 /* Check for bare parameter packs in the member variable declaration. */
1ad8aeeb 2439 if (TREE_CODE (decl) == FIELD_DECL)
4439d02f 2440 {
7b3e2d46 2441 if (check_for_bare_parameter_packs (TREE_TYPE (decl)))
4439d02f 2442 TREE_TYPE (decl) = error_mark_node;
7b3e2d46 2443 if (check_for_bare_parameter_packs (DECL_ATTRIBUTES (decl)))
4439d02f
DG
2444 DECL_ATTRIBUTES (decl) = NULL_TREE;
2445 }
b1d7b1c0 2446
421844e7
MM
2447 /* [dcl.link]
2448
2449 A C language linkage is ignored for the names of class members
2450 and the member function type of class member functions. */
2451 if (DECL_LANG_SPECIFIC (decl) && DECL_LANGUAGE (decl) == lang_c)
5d2ed28c 2452 SET_DECL_LANGUAGE (decl, lang_cplusplus);
421844e7 2453
61a127b3
MM
2454 /* Put functions on the TYPE_METHODS list and everything else on the
2455 TYPE_FIELDS list. Note that these are built up in reverse order.
2456 We reverse them (to obtain declaration order) in finish_struct. */
c8094d83 2457 if (TREE_CODE (decl) == FUNCTION_DECL
61a127b3
MM
2458 || DECL_FUNCTION_TEMPLATE_P (decl))
2459 {
2460 /* We also need to add this function to the
2461 CLASSTYPE_METHOD_VEC. */
b77fe7b4
NS
2462 if (add_method (current_class_type, decl, NULL_TREE))
2463 {
2464 TREE_CHAIN (decl) = TYPE_METHODS (current_class_type);
2465 TYPE_METHODS (current_class_type) = decl;
f139561c 2466
b77fe7b4
NS
2467 maybe_add_class_template_decl_list (current_class_type, decl,
2468 /*friend_p=*/0);
2469 }
61a127b3 2470 }
f139561c 2471 /* Enter the DECL into the scope of the class. */
98ed9dae 2472 else if ((TREE_CODE (decl) == USING_DECL && !DECL_DEPENDENT_P (decl))
399dedb9 2473 || pushdecl_class_level (decl))
61a127b3
MM
2474 {
2475 /* All TYPE_DECLs go at the end of TYPE_FIELDS. Ordinary fields
2476 go at the beginning. The reason is that lookup_field_1
2477 searches the list in order, and we want a field name to
2478 override a type name so that the "struct stat hack" will
2479 work. In particular:
2480
2481 struct S { enum E { }; int E } s;
2482 s.E = 3;
2483
0e339752 2484 is valid. In addition, the FIELD_DECLs must be maintained in
61a127b3
MM
2485 declaration order so that class layout works as expected.
2486 However, we don't need that order until class layout, so we
2487 save a little time by putting FIELD_DECLs on in reverse order
2488 here, and then reversing them in finish_struct_1. (We could
2489 also keep a pointer to the correct insertion points in the
2490 list.) */
2491
2492 if (TREE_CODE (decl) == TYPE_DECL)
c8094d83 2493 TYPE_FIELDS (current_class_type)
61a127b3
MM
2494 = chainon (TYPE_FIELDS (current_class_type), decl);
2495 else
2496 {
2497 TREE_CHAIN (decl) = TYPE_FIELDS (current_class_type);
2498 TYPE_FIELDS (current_class_type) = decl;
2499 }
8f032717 2500
c8094d83 2501 maybe_add_class_template_decl_list (current_class_type, decl,
f139561c 2502 /*friend_p=*/0);
61a127b3 2503 }
5e2f4cd2
MM
2504
2505 if (pch_file)
2506 note_decl_for_pch (decl);
2507}
2508
2509/* DECL has been declared while we are building a PCH file. Perform
2510 actions that we might normally undertake lazily, but which can be
2511 performed now so that they do not have to be performed in
2512 translation units which include the PCH file. */
2513
2514void
2515note_decl_for_pch (tree decl)
2516{
2517 gcc_assert (pch_file);
2518
5e2f4cd2
MM
2519 /* There's a good chance that we'll have to mangle names at some
2520 point, even if only for emission in debugging information. */
ec0897de
JM
2521 if ((TREE_CODE (decl) == VAR_DECL
2522 || TREE_CODE (decl) == FUNCTION_DECL)
2523 && !processing_template_decl)
5e2f4cd2 2524 mangle_decl (decl);
61a127b3
MM
2525}
2526
306ef644 2527/* Finish processing a complete template declaration. The PARMS are
36a117a5
MM
2528 the template parameters. */
2529
2530void
3a978d72 2531finish_template_decl (tree parms)
36a117a5
MM
2532{
2533 if (parms)
2534 end_template_decl ();
2535 else
2536 end_specialization ();
2537}
2538
509fc277 2539/* Finish processing a template-id (which names a type) of the form
36a117a5 2540 NAME < ARGS >. Return the TYPE_DECL for the type named by the
838dfd8a 2541 template-id. If ENTERING_SCOPE is nonzero we are about to enter
36a117a5
MM
2542 the scope of template-id indicated. */
2543
2544tree
3a978d72 2545finish_template_type (tree name, tree args, int entering_scope)
36a117a5
MM
2546{
2547 tree decl;
2548
2549 decl = lookup_template_class (name, args,
42eaed49 2550 NULL_TREE, NULL_TREE, entering_scope,
23fca1f5 2551 tf_warning_or_error | tf_user);
36a117a5
MM
2552 if (decl != error_mark_node)
2553 decl = TYPE_STUB_DECL (decl);
2554
2555 return decl;
2556}
648f19f6 2557
ea6021e8
MM
2558/* Finish processing a BASE_CLASS with the indicated ACCESS_SPECIFIER.
2559 Return a TREE_LIST containing the ACCESS_SPECIFIER and the
2560 BASE_CLASS, or NULL_TREE if an error occurred. The
aba649ba 2561 ACCESS_SPECIFIER is one of
809e3e7f
NS
2562 access_{default,public,protected_private}_node. For a virtual base
2563 we set TREE_TYPE. */
ea6021e8 2564
c8094d83 2565tree
dbbf88d1 2566finish_base_specifier (tree base, tree access, bool virtual_p)
ea6021e8 2567{
ea6021e8
MM
2568 tree result;
2569
dbbf88d1 2570 if (base == error_mark_node)
acb044ee
GDR
2571 {
2572 error ("invalid base-class specification");
2573 result = NULL_TREE;
2574 }
9e1e64ec
PC
2575 else if (! MAYBE_CLASS_TYPE_P (base))
2576 {
2577 error ("%qT is not a class type", base);
2578 result = NULL_TREE;
2579 }
ea6021e8 2580 else
bb92901d 2581 {
dbbf88d1 2582 if (cp_type_quals (base) != 0)
0cbd7506
MS
2583 {
2584 error ("base class %qT has cv qualifiers", base);
2585 base = TYPE_MAIN_VARIANT (base);
2586 }
dbbf88d1 2587 result = build_tree_list (access, base);
809e3e7f
NS
2588 if (virtual_p)
2589 TREE_TYPE (result) = integer_type_node;
bb92901d 2590 }
ea6021e8
MM
2591
2592 return result;
2593}
61a127b3 2594
8f78f01f 2595/* Issue a diagnostic that NAME cannot be found in SCOPE. DECL is
2b7a3abf
DS
2596 what we found when we tried to do the lookup.
2597 LOCATION is the location of the NAME identifier;
2598 The location is used in the error message*/
22038b2c
NS
2599
2600void
2b7a3abf
DS
2601qualified_name_lookup_error (tree scope, tree name,
2602 tree decl, location_t location)
22038b2c 2603{
1e1b4b37
VR
2604 if (scope == error_mark_node)
2605 ; /* We already complained. */
2606 else if (TYPE_P (scope))
22038b2c
NS
2607 {
2608 if (!COMPLETE_TYPE_P (scope))
69bc6bff
MLI
2609 error_at (location, "incomplete type %qT used in nested name specifier",
2610 scope);
8f78f01f
MM
2611 else if (TREE_CODE (decl) == TREE_LIST)
2612 {
69bc6bff
MLI
2613 error_at (location, "reference to %<%T::%D%> is ambiguous",
2614 scope, name);
8f78f01f
MM
2615 print_candidates (decl);
2616 }
22038b2c 2617 else
69bc6bff 2618 error_at (location, "%qD is not a member of %qT", name, scope);
22038b2c
NS
2619 }
2620 else if (scope != global_namespace)
69bc6bff 2621 error_at (location, "%qD is not a member of %qD", name, scope);
22038b2c 2622 else
69bc6bff 2623 error_at (location, "%<::%D%> has not been declared", name);
22038b2c 2624}
c8094d83 2625
eff3a276
MM
2626/* If FNS is a member function, a set of member functions, or a
2627 template-id referring to one or more member functions, return a
2628 BASELINK for FNS, incorporating the current access context.
2629 Otherwise, return FNS unchanged. */
2630
2631tree
2632baselink_for_fns (tree fns)
2633{
2634 tree fn;
2635 tree cl;
2636
2637 if (BASELINK_P (fns)
eff3a276
MM
2638 || error_operand_p (fns))
2639 return fns;
2640
2641 fn = fns;
2642 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
2643 fn = TREE_OPERAND (fn, 0);
2644 fn = get_first_fn (fn);
2645 if (!DECL_FUNCTION_MEMBER_P (fn))
2646 return fns;
2647
2648 cl = currently_open_derived_class (DECL_CONTEXT (fn));
2649 if (!cl)
2650 cl = DECL_CONTEXT (fn);
2651 cl = TYPE_BINFO (cl);
16de17ae
JM
2652 return build_baselink (TYPE_BINFO (DECL_CONTEXT (fn)), cl, fns,
2653 /*optype=*/NULL_TREE);
eff3a276
MM
2654}
2655
d5f4eddd
JM
2656/* Returns true iff DECL is an automatic variable from a function outside
2657 the current one. */
2658
2659static bool
2660outer_automatic_var_p (tree decl)
2661{
2662 return ((TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL)
2663 && DECL_FUNCTION_SCOPE_P (decl)
2664 && !TREE_STATIC (decl)
2665 && DECL_CONTEXT (decl) != current_function_decl);
2666}
2667
9660afe0
JM
2668/* Returns true iff DECL is a capture field from a lambda that is not our
2669 immediate context. */
2670
2671static bool
2672outer_lambda_capture_p (tree decl)
2673{
2674 return (TREE_CODE (decl) == FIELD_DECL
2675 && LAMBDA_TYPE_P (DECL_CONTEXT (decl))
19030d77
JM
2676 && (!current_class_type
2677 || !DERIVED_FROM_P (DECL_CONTEXT (decl), current_class_type)));
9660afe0
JM
2678}
2679
b3445994
MM
2680/* ID_EXPRESSION is a representation of parsed, but unprocessed,
2681 id-expression. (See cp_parser_id_expression for details.) SCOPE,
2682 if non-NULL, is the type or namespace used to explicitly qualify
2683 ID_EXPRESSION. DECL is the entity to which that name has been
c8094d83 2684 resolved.
b3445994
MM
2685
2686 *CONSTANT_EXPRESSION_P is true if we are presently parsing a
2687 constant-expression. In that case, *NON_CONSTANT_EXPRESSION_P will
2688 be set to true if this expression isn't permitted in a
2689 constant-expression, but it is otherwise not set by this function.
2690 *ALLOW_NON_CONSTANT_EXPRESSION_P is true if we are parsing a
2691 constant-expression, but a non-constant expression is also
2692 permissible.
2693
02ed62dd
MM
2694 DONE is true if this expression is a complete postfix-expression;
2695 it is false if this expression is followed by '->', '[', '(', etc.
2696 ADDRESS_P is true iff this expression is the operand of '&'.
2697 TEMPLATE_P is true iff the qualified-id was of the form
2698 "A::template B". TEMPLATE_ARG_P is true iff this qualified name
2699 appears as a template argument.
2700
b3445994
MM
2701 If an error occurs, and it is the kind of error that might cause
2702 the parser to abort a tentative parse, *ERROR_MSG is filled in. It
2703 is the caller's responsibility to issue the message. *ERROR_MSG
2704 will be a string with static storage duration, so the caller need
2705 not "free" it.
2706
2707 Return an expression for the entity, after issuing appropriate
2708 diagnostics. This function is also responsible for transforming a
2709 reference to a non-static member into a COMPONENT_REF that makes
c8094d83 2710 the use of "this" explicit.
b3445994
MM
2711
2712 Upon return, *IDK will be filled in appropriately. */
b3445994 2713tree
c8094d83 2714finish_id_expression (tree id_expression,
b3445994
MM
2715 tree decl,
2716 tree scope,
2717 cp_id_kind *idk,
67c03833
JM
2718 bool integral_constant_expression_p,
2719 bool allow_non_integral_constant_expression_p,
2720 bool *non_integral_constant_expression_p,
02ed62dd
MM
2721 bool template_p,
2722 bool done,
2723 bool address_p,
2724 bool template_arg_p,
2b7a3abf
DS
2725 const char **error_msg,
2726 location_t location)
b3445994
MM
2727{
2728 /* Initialize the output parameters. */
2729 *idk = CP_ID_KIND_NONE;
2730 *error_msg = NULL;
2731
2732 if (id_expression == error_mark_node)
2733 return error_mark_node;
2734 /* If we have a template-id, then no further lookup is
2735 required. If the template-id was for a template-class, we
2736 will sometimes have a TYPE_DECL at this point. */
2737 else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
ee935db4 2738 || TREE_CODE (decl) == TYPE_DECL)
b3445994
MM
2739 ;
2740 /* Look up the name. */
c8094d83 2741 else
b3445994
MM
2742 {
2743 if (decl == error_mark_node)
2744 {
2745 /* Name lookup failed. */
c8094d83
MS
2746 if (scope
2747 && (!TYPE_P (scope)
4546865e
MM
2748 || (!dependent_type_p (scope)
2749 && !(TREE_CODE (id_expression) == IDENTIFIER_NODE
2750 && IDENTIFIER_TYPENAME_P (id_expression)
2751 && dependent_type_p (TREE_TYPE (id_expression))))))
b3445994 2752 {
4546865e
MM
2753 /* If the qualifying type is non-dependent (and the name
2754 does not name a conversion operator to a dependent
2755 type), issue an error. */
2b7a3abf 2756 qualified_name_lookup_error (scope, id_expression, decl, location);
b3445994
MM
2757 return error_mark_node;
2758 }
2759 else if (!scope)
2760 {
2761 /* It may be resolved via Koenig lookup. */
2762 *idk = CP_ID_KIND_UNQUALIFIED;
2763 return id_expression;
2764 }
4546865e
MM
2765 else
2766 decl = id_expression;
b3445994
MM
2767 }
2768 /* If DECL is a variable that would be out of scope under
2769 ANSI/ISO rules, but in scope in the ARM, name lookup
2770 will succeed. Issue a diagnostic here. */
2771 else
2772 decl = check_for_out_of_scope_variable (decl);
2773
2774 /* Remember that the name was used in the definition of
2775 the current class so that we can check later to see if
2776 the meaning would have been different after the class
2777 was entirely defined. */
2778 if (!scope && decl != error_mark_node)
2779 maybe_note_name_used_in_class (id_expression, decl);
8ca4bf25 2780
d5f4eddd
JM
2781 /* Disallow uses of local variables from containing functions, except
2782 within lambda-expressions. */
9660afe0
JM
2783 if ((outer_automatic_var_p (decl)
2784 || outer_lambda_capture_p (decl))
d5f4eddd
JM
2785 /* It's not a use (3.2) if we're in an unevaluated context. */
2786 && !cp_unevaluated_operand)
8ca4bf25 2787 {
d5f4eddd
JM
2788 tree context = DECL_CONTEXT (decl);
2789 tree containing_function = current_function_decl;
2790 tree lambda_stack = NULL_TREE;
2791 tree lambda_expr = NULL_TREE;
9660afe0 2792 tree initializer = decl;
d5f4eddd
JM
2793
2794 /* Core issue 696: "[At the July 2009 meeting] the CWG expressed
2795 support for an approach in which a reference to a local
2796 [constant] automatic variable in a nested class or lambda body
2797 would enter the expression as an rvalue, which would reduce
2798 the complexity of the problem"
2799
2800 FIXME update for final resolution of core issue 696. */
2801 if (DECL_INTEGRAL_CONSTANT_VAR_P (decl))
2802 return integral_constant_value (decl);
2803
9660afe0
JM
2804 if (TYPE_P (context))
2805 {
2806 /* Implicit capture of an explicit capture. */
2807 context = lambda_function (context);
2808 initializer = thisify_lambda_field (decl);
2809 }
2810
d5f4eddd
JM
2811 /* If we are in a lambda function, we can move out until we hit
2812 1. the context,
2813 2. a non-lambda function, or
2814 3. a non-default capturing lambda function. */
2815 while (context != containing_function
2816 && LAMBDA_FUNCTION_P (containing_function))
2817 {
2818 lambda_expr = CLASSTYPE_LAMBDA_EXPR
2819 (DECL_CONTEXT (containing_function));
2820
2821 if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda_expr)
2822 == CPLD_NONE)
2823 break;
2824
2825 lambda_stack = tree_cons (NULL_TREE,
2826 lambda_expr,
2827 lambda_stack);
2828
2829 containing_function
2830 = decl_function_context (containing_function);
2831 }
2832
2833 if (context == containing_function)
2834 {
2835 decl = add_default_capture (lambda_stack,
2836 /*id=*/DECL_NAME (decl),
9660afe0 2837 initializer);
d5f4eddd
JM
2838 }
2839 else if (lambda_expr)
2840 {
2841 error ("%qD is not captured", decl);
2842 return error_mark_node;
2843 }
2844 else
8ca4bf25
MM
2845 {
2846 error (TREE_CODE (decl) == VAR_DECL
2847 ? "use of %<auto%> variable from containing function"
2848 : "use of parameter from containing function");
2849 error (" %q+#D declared here", decl);
2850 return error_mark_node;
2851 }
2852 }
b3445994
MM
2853 }
2854
2855 /* If we didn't find anything, or what we found was a type,
2856 then this wasn't really an id-expression. */
2857 if (TREE_CODE (decl) == TEMPLATE_DECL
2858 && !DECL_FUNCTION_TEMPLATE_P (decl))
2859 {
2860 *error_msg = "missing template arguments";
2861 return error_mark_node;
2862 }
2863 else if (TREE_CODE (decl) == TYPE_DECL
2864 || TREE_CODE (decl) == NAMESPACE_DECL)
2865 {
2866 *error_msg = "expected primary-expression";
2867 return error_mark_node;
2868 }
2869
2870 /* If the name resolved to a template parameter, there is no
931a9c05
GB
2871 need to look it up again later. */
2872 if ((TREE_CODE (decl) == CONST_DECL && DECL_TEMPLATE_PARM_P (decl))
2873 || TREE_CODE (decl) == TEMPLATE_PARM_INDEX)
b3445994 2874 {
db24eb1f 2875 tree r;
c8094d83 2876
b3445994 2877 *idk = CP_ID_KIND_NONE;
931a9c05
GB
2878 if (TREE_CODE (decl) == TEMPLATE_PARM_INDEX)
2879 decl = TEMPLATE_PARM_DECL (decl);
db24eb1f 2880 r = convert_from_reference (DECL_INITIAL (decl));
c8094d83
MS
2881
2882 if (integral_constant_expression_p
68deab91 2883 && !dependent_type_p (TREE_TYPE (decl))
db24eb1f 2884 && !(INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (r))))
931a9c05 2885 {
67c03833 2886 if (!allow_non_integral_constant_expression_p)
a82e1a7d 2887 error ("template parameter %qD of type %qT is not allowed in "
931a9c05
GB
2888 "an integral constant expression because it is not of "
2889 "integral or enumeration type", decl, TREE_TYPE (decl));
67c03833 2890 *non_integral_constant_expression_p = true;
931a9c05 2891 }
db24eb1f 2892 return r;
931a9c05 2893 }
c8094d83 2894 /* Similarly, we resolve enumeration constants to their
931a9c05
GB
2895 underlying values. */
2896 else if (TREE_CODE (decl) == CONST_DECL)
2897 {
2898 *idk = CP_ID_KIND_NONE;
2899 if (!processing_template_decl)
6193b8b7
DJ
2900 {
2901 used_types_insert (TREE_TYPE (decl));
2902 return DECL_INITIAL (decl);
2903 }
b3445994
MM
2904 return decl;
2905 }
2906 else
2907 {
2908 bool dependent_p;
2909
2910 /* If the declaration was explicitly qualified indicate
2911 that. The semantics of `A::f(3)' are different than
2912 `f(3)' if `f' is virtual. */
c8094d83 2913 *idk = (scope
b3445994
MM
2914 ? CP_ID_KIND_QUALIFIED
2915 : (TREE_CODE (decl) == TEMPLATE_ID_EXPR
2916 ? CP_ID_KIND_TEMPLATE_ID
2917 : CP_ID_KIND_UNQUALIFIED));
2918
2919
2920 /* [temp.dep.expr]
2921
2922 An id-expression is type-dependent if it contains an
2923 identifier that was declared with a dependent type.
2924
b3445994
MM
2925 The standard is not very specific about an id-expression that
2926 names a set of overloaded functions. What if some of them
2927 have dependent types and some of them do not? Presumably,
2928 such a name should be treated as a dependent name. */
2929 /* Assume the name is not dependent. */
2930 dependent_p = false;
2931 if (!processing_template_decl)
2932 /* No names are dependent outside a template. */
2933 ;
2934 /* A template-id where the name of the template was not resolved
2935 is definitely dependent. */
2936 else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
c8094d83 2937 && (TREE_CODE (TREE_OPERAND (decl, 0))
b3445994
MM
2938 == IDENTIFIER_NODE))
2939 dependent_p = true;
2940 /* For anything except an overloaded function, just check its
2941 type. */
2942 else if (!is_overloaded_fn (decl))
c8094d83 2943 dependent_p
b3445994
MM
2944 = dependent_type_p (TREE_TYPE (decl));
2945 /* For a set of overloaded functions, check each of the
2946 functions. */
2947 else
2948 {
2949 tree fns = decl;
2950
2951 if (BASELINK_P (fns))
2952 fns = BASELINK_FUNCTIONS (fns);
2953
2954 /* For a template-id, check to see if the template
2955 arguments are dependent. */
2956 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
2957 {
2958 tree args = TREE_OPERAND (fns, 1);
2959 dependent_p = any_dependent_template_arguments_p (args);
2960 /* The functions are those referred to by the
2961 template-id. */
2962 fns = TREE_OPERAND (fns, 0);
2963 }
2964
2965 /* If there are no dependent template arguments, go through
cd0be382 2966 the overloaded functions. */
b3445994
MM
2967 while (fns && !dependent_p)
2968 {
2969 tree fn = OVL_CURRENT (fns);
2970
2971 /* Member functions of dependent classes are
2972 dependent. */
2973 if (TREE_CODE (fn) == FUNCTION_DECL
2974 && type_dependent_expression_p (fn))
2975 dependent_p = true;
2976 else if (TREE_CODE (fn) == TEMPLATE_DECL
2977 && dependent_template_p (fn))
2978 dependent_p = true;
2979
2980 fns = OVL_NEXT (fns);
2981 }
2982 }
2983
2984 /* If the name was dependent on a template parameter, we will
2985 resolve the name at instantiation time. */
2986 if (dependent_p)
2987 {
2988 /* Create a SCOPE_REF for qualified names, if the scope is
2989 dependent. */
2990 if (scope)
2991 {
02ed62dd
MM
2992 if (TYPE_P (scope))
2993 {
2994 if (address_p && done)
2995 decl = finish_qualified_id_expr (scope, decl,
2996 done, address_p,
2997 template_p,
2998 template_arg_p);
7e361ae6
JM
2999 else
3000 {
3001 tree type = NULL_TREE;
3002 if (DECL_P (decl) && !dependent_scope_p (scope))
3003 type = TREE_TYPE (decl);
3004 decl = build_qualified_name (type,
3005 scope,
3006 id_expression,
3007 template_p);
3008 }
02ed62dd
MM
3009 }
3010 if (TREE_TYPE (decl))
3011 decl = convert_from_reference (decl);
3012 return decl;
b3445994
MM
3013 }
3014 /* A TEMPLATE_ID already contains all the information we
3015 need. */
3016 if (TREE_CODE (id_expression) == TEMPLATE_ID_EXPR)
3017 return id_expression;
10b1d5e7 3018 *idk = CP_ID_KIND_UNQUALIFIED_DEPENDENT;
5a98fa7b
MM
3019 /* If we found a variable, then name lookup during the
3020 instantiation will always resolve to the same VAR_DECL
3021 (or an instantiation thereof). */
3c398f34
MM
3022 if (TREE_CODE (decl) == VAR_DECL
3023 || TREE_CODE (decl) == PARM_DECL)
db24eb1f 3024 return convert_from_reference (decl);
bad1f462
KL
3025 /* The same is true for FIELD_DECL, but we also need to
3026 make sure that the syntax is correct. */
3027 else if (TREE_CODE (decl) == FIELD_DECL)
a26ddf11
KL
3028 {
3029 /* Since SCOPE is NULL here, this is an unqualified name.
3030 Access checking has been performed during name lookup
3031 already. Turn off checking to avoid duplicate errors. */
3032 push_deferring_access_checks (dk_no_check);
3033 decl = finish_non_static_data_member
2defb926 3034 (decl, NULL_TREE,
a26ddf11
KL
3035 /*qualifying_scope=*/NULL_TREE);
3036 pop_deferring_access_checks ();
3037 return decl;
3038 }
10b1d5e7 3039 return id_expression;
b3445994
MM
3040 }
3041
3042 /* Only certain kinds of names are allowed in constant
0cbd7506
MS
3043 expression. Enumerators and template parameters have already
3044 been handled above. */
c30b4add 3045 if (integral_constant_expression_p
100d337a
MA
3046 && ! DECL_INTEGRAL_CONSTANT_VAR_P (decl)
3047 && ! builtin_valid_in_constant_expr_p (decl))
b3445994 3048 {
c30b4add 3049 if (!allow_non_integral_constant_expression_p)
b3445994 3050 {
a82e1a7d 3051 error ("%qD cannot appear in a constant-expression", decl);
c30b4add 3052 return error_mark_node;
b3445994 3053 }
c30b4add 3054 *non_integral_constant_expression_p = true;
b3445994 3055 }
c8094d83 3056
415d4636 3057 if (TREE_CODE (decl) == NAMESPACE_DECL)
9e95d15f 3058 {
a82e1a7d 3059 error ("use of namespace %qD as expression", decl);
9e95d15f
NS
3060 return error_mark_node;
3061 }
3062 else if (DECL_CLASS_TEMPLATE_P (decl))
3063 {
a82e1a7d 3064 error ("use of class template %qT as expression", decl);
9e95d15f
NS
3065 return error_mark_node;
3066 }
3067 else if (TREE_CODE (decl) == TREE_LIST)
3068 {
3069 /* Ambiguous reference to base members. */
a82e1a7d 3070 error ("request for member %qD is ambiguous in "
9e95d15f
NS
3071 "multiple inheritance lattice", id_expression);
3072 print_candidates (decl);
3073 return error_mark_node;
3074 }
415d4636
MM
3075
3076 /* Mark variable-like entities as used. Functions are similarly
3077 marked either below or after overload resolution. */
3078 if (TREE_CODE (decl) == VAR_DECL
3079 || TREE_CODE (decl) == PARM_DECL
3080 || TREE_CODE (decl) == RESULT_DECL)
3081 mark_used (decl);
3082
3083 if (scope)
3084 {
c8094d83 3085 decl = (adjust_result_of_qualified_name_lookup
415d4636 3086 (decl, scope, current_class_type));
e20bcc5e
JH
3087
3088 if (TREE_CODE (decl) == FUNCTION_DECL)
3089 mark_used (decl);
3090
415d4636 3091 if (TREE_CODE (decl) == FIELD_DECL || BASELINK_P (decl))
02ed62dd
MM
3092 decl = finish_qualified_id_expr (scope,
3093 decl,
3094 done,
3095 address_p,
3096 template_p,
3097 template_arg_p);
db24eb1f
NS
3098 else
3099 {
3100 tree r = convert_from_reference (decl);
c8094d83 3101
02ed62dd
MM
3102 if (processing_template_decl && TYPE_P (scope))
3103 r = build_qualified_name (TREE_TYPE (r),
3104 scope, decl,
3105 template_p);
db24eb1f
NS
3106 decl = r;
3107 }
415d4636 3108 }
9e95d15f 3109 else if (TREE_CODE (decl) == FIELD_DECL)
a26ddf11
KL
3110 {
3111 /* Since SCOPE is NULL here, this is an unqualified name.
3112 Access checking has been performed during name lookup
3113 already. Turn off checking to avoid duplicate errors. */
3114 push_deferring_access_checks (dk_no_check);
2defb926 3115 decl = finish_non_static_data_member (decl, NULL_TREE,
a26ddf11
KL
3116 /*qualifying_scope=*/NULL_TREE);
3117 pop_deferring_access_checks ();
3118 }
9e95d15f
NS
3119 else if (is_overloaded_fn (decl))
3120 {
eff3a276 3121 tree first_fn;
b3445994 3122
294e855f 3123 first_fn = get_first_fn (decl);
9e95d15f
NS
3124 if (TREE_CODE (first_fn) == TEMPLATE_DECL)
3125 first_fn = DECL_TEMPLATE_RESULT (first_fn);
415d4636
MM
3126
3127 if (!really_overloaded_fn (decl))
3128 mark_used (first_fn);
3129
02ed62dd
MM
3130 if (!template_arg_p
3131 && TREE_CODE (first_fn) == FUNCTION_DECL
821eaf2a
MM
3132 && DECL_FUNCTION_MEMBER_P (first_fn)
3133 && !shared_member_p (decl))
9e95d15f
NS
3134 {
3135 /* A set of member functions. */
3136 decl = maybe_dummy_object (DECL_CONTEXT (first_fn), 0);
02ed62dd 3137 return finish_class_member_access_expr (decl, id_expression,
5ade1ed2
DG
3138 /*template_p=*/false,
3139 tf_warning_or_error);
9e95d15f 3140 }
eff3a276
MM
3141
3142 decl = baselink_for_fns (decl);
9e95d15f
NS
3143 }
3144 else
3145 {
9e95d15f 3146 if (DECL_P (decl) && DECL_NONLOCAL (decl)
24f58e74 3147 && DECL_CLASS_SCOPE_P (decl))
9e95d15f 3148 {
24f58e74
PC
3149 tree context = context_for_name_lookup (decl);
3150 if (context != current_class_type)
3151 {
3152 tree path = currently_open_derived_class (context);
3153 perform_or_defer_access_check (TYPE_BINFO (path),
3154 decl, decl);
3155 }
9e95d15f 3156 }
c8094d83 3157
db24eb1f 3158 decl = convert_from_reference (decl);
9e95d15f 3159 }
b3445994
MM
3160 }
3161
3162 if (TREE_DEPRECATED (decl))
9b86d6bb 3163 warn_deprecated_use (decl, NULL_TREE);
b3445994
MM
3164
3165 return decl;
3166}
3167
0213a355
JM
3168/* Implement the __typeof keyword: Return the type of EXPR, suitable for
3169 use as a type-specifier. */
3170
b894fc05 3171tree
3a978d72 3172finish_typeof (tree expr)
b894fc05 3173{
65a5559b
MM
3174 tree type;
3175
dffbbe80 3176 if (type_dependent_expression_p (expr))
b894fc05 3177 {
9e1e64ec 3178 type = cxx_make_type (TYPEOF_TYPE);
eb34af89 3179 TYPEOF_TYPE_EXPR (type) = expr;
3ad6a8e1 3180 SET_TYPE_STRUCTURAL_EQUALITY (type);
b894fc05 3181
65a5559b 3182 return type;
b894fc05
JM
3183 }
3184
3c38f0ff 3185 type = unlowered_expr_type (expr);
65a5559b
MM
3186
3187 if (!type || type == unknown_type_node)
3188 {
a82e1a7d 3189 error ("type of %qE is unknown", expr);
65a5559b
MM
3190 return error_mark_node;
3191 }
3192
3193 return type;
b894fc05 3194}
558475f0 3195
c291f8b1
VR
3196/* Perform C++-specific checks for __builtin_offsetof before calling
3197 fold_offsetof. */
3198
3199tree
3200finish_offsetof (tree expr)
3201{
4c65a534
VR
3202 if (TREE_CODE (expr) == PSEUDO_DTOR_EXPR)
3203 {
3204 error ("cannot apply %<offsetof%> to destructor %<~%T%>",
3205 TREE_OPERAND (expr, 2));
3206 return error_mark_node;
3207 }
c291f8b1
VR
3208 if (TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE
3209 || TREE_CODE (TREE_TYPE (expr)) == METHOD_TYPE
3210 || TREE_CODE (TREE_TYPE (expr)) == UNKNOWN_TYPE)
3211 {
1916c916
VR
3212 if (TREE_CODE (expr) == COMPONENT_REF
3213 || TREE_CODE (expr) == COMPOUND_EXPR)
0a9367cb
VR
3214 expr = TREE_OPERAND (expr, 1);
3215 error ("cannot apply %<offsetof%> to member function %qD", expr);
c291f8b1
VR
3216 return error_mark_node;
3217 }
60c4d135
JJ
3218 if (TREE_CODE (expr) == INDIRECT_REF && REFERENCE_REF_P (expr))
3219 expr = TREE_OPERAND (expr, 0);
6d4d7b0e 3220 return fold_offsetof (expr, NULL_TREE);
c291f8b1
VR
3221}
3222
9eeb200f
JM
3223/* Replace the AGGR_INIT_EXPR at *TP with an equivalent CALL_EXPR. This
3224 function is broken out from the above for the benefit of the tree-ssa
3225 project. */
3226
3227void
3228simplify_aggr_init_expr (tree *tp)
3229{
3230 tree aggr_init_expr = *tp;
3231
3eb24f73 3232 /* Form an appropriate CALL_EXPR. */
5039610b
SL
3233 tree fn = AGGR_INIT_EXPR_FN (aggr_init_expr);
3234 tree slot = AGGR_INIT_EXPR_SLOT (aggr_init_expr);
2692eb7d 3235 tree type = TREE_TYPE (slot);
9eeb200f
JM
3236
3237 tree call_expr;
3238 enum style_t { ctor, arg, pcc } style;
4977bab6 3239
3eb24f73 3240 if (AGGR_INIT_VIA_CTOR_P (aggr_init_expr))
4977bab6
ZW
3241 style = ctor;
3242#ifdef PCC_STATIC_STRUCT_RETURN
3243 else if (1)
3244 style = pcc;
3245#endif
4977bab6 3246 else
315fb5db
NS
3247 {
3248 gcc_assert (TREE_ADDRESSABLE (type));
3249 style = arg;
3250 }
4977bab6 3251
db3927fb
AH
3252 call_expr = build_call_array_loc (input_location,
3253 TREE_TYPE (TREE_TYPE (TREE_TYPE (fn))),
3254 fn,
3255 aggr_init_expr_nargs (aggr_init_expr),
3256 AGGR_INIT_EXPR_ARGP (aggr_init_expr));
5039610b 3257
fa47911c 3258 if (style == ctor)
3eb24f73 3259 {
fa47911c
JM
3260 /* Replace the first argument to the ctor with the address of the
3261 slot. */
dffd7eb6 3262 cxx_mark_addressable (slot);
5039610b
SL
3263 CALL_EXPR_ARG (call_expr, 0) =
3264 build1 (ADDR_EXPR, build_pointer_type (type), slot);
3eb24f73 3265 }
5039610b 3266 else if (style == arg)
fa47911c
JM
3267 {
3268 /* Just mark it addressable here, and leave the rest to
3269 expand_call{,_inline}. */
3270 cxx_mark_addressable (slot);
3271 CALL_EXPR_RETURN_SLOT_OPT (call_expr) = true;
3272 call_expr = build2 (MODIFY_EXPR, TREE_TYPE (call_expr), slot, call_expr);
3273 }
4977bab6 3274 else if (style == pcc)
3eb24f73 3275 {
4977bab6
ZW
3276 /* If we're using the non-reentrant PCC calling convention, then we
3277 need to copy the returned value out of the static buffer into the
3278 SLOT. */
78757caa 3279 push_deferring_access_checks (dk_no_check);
46af705a 3280 call_expr = build_aggr_init (slot, call_expr,
5ade1ed2
DG
3281 DIRECT_BIND | LOOKUP_ONLYCONVERTING,
3282 tf_warning_or_error);
78757caa 3283 pop_deferring_access_checks ();
d17791d6 3284 call_expr = build2 (COMPOUND_EXPR, TREE_TYPE (slot), call_expr, slot);
3eb24f73 3285 }
3eb24f73 3286
450a927a
JM
3287 if (AGGR_INIT_ZERO_FIRST (aggr_init_expr))
3288 {
3289 tree init = build_zero_init (type, NULL_TREE,
3290 /*static_storage_p=*/false);
3291 init = build2 (INIT_EXPR, void_type_node, slot, init);
3292 call_expr = build2 (COMPOUND_EXPR, TREE_TYPE (call_expr),
3293 init, call_expr);
3294 }
3295
3eb24f73 3296 *tp = call_expr;
3eb24f73
MM
3297}
3298
31f8e4f3
MM
3299/* Emit all thunks to FN that should be emitted when FN is emitted. */
3300
e89d6010 3301void
3a978d72 3302emit_associated_thunks (tree fn)
31f8e4f3
MM
3303{
3304 /* When we use vcall offsets, we emit thunks with the virtual
3305 functions to which they thunk. The whole point of vcall offsets
3306 is so that you can know statically the entire set of thunks that
3307 will ever be needed for a given virtual function, thereby
3308 enabling you to output all the thunks with the function itself. */
4537ec0c
DN
3309 if (DECL_VIRTUAL_P (fn)
3310 /* Do not emit thunks for extern template instantiations. */
3311 && ! DECL_REALLY_EXTERN (fn))
31f8e4f3 3312 {
bb5e8a7f 3313 tree thunk;
c8094d83 3314
bb5e8a7f 3315 for (thunk = DECL_THUNKS (fn); thunk; thunk = TREE_CHAIN (thunk))
4977bab6 3316 {
e00853fd 3317 if (!THUNK_ALIAS (thunk))
4977bab6 3318 {
bb885938
NS
3319 use_thunk (thunk, /*emit_p=*/1);
3320 if (DECL_RESULT_THUNK_P (thunk))
3321 {
3322 tree probe;
c8094d83 3323
bb885938
NS
3324 for (probe = DECL_THUNKS (thunk);
3325 probe; probe = TREE_CHAIN (probe))
3326 use_thunk (probe, /*emit_p=*/1);
3327 }
4977bab6 3328 }
bb885938 3329 else
50bc768d 3330 gcc_assert (!DECL_THUNKS (thunk));
4977bab6 3331 }
31f8e4f3
MM
3332 }
3333}
3334
558475f0
MM
3335/* Generate RTL for FN. */
3336
b2583345
JJ
3337bool
3338expand_or_defer_fn_1 (tree fn)
8cd2462c
JH
3339{
3340 /* When the parser calls us after finishing the body of a template
c353b8e3
MM
3341 function, we don't really want to expand the body. */
3342 if (processing_template_decl)
8cd2462c
JH
3343 {
3344 /* Normally, collection only occurs in rest_of_compilation. So,
3345 if we don't collect here, we never collect junk generated
3346 during the processing of templates until we hit a
27250734
MM
3347 non-template function. It's not safe to do this inside a
3348 nested class, though, as the parser may have local state that
3349 is not a GC root. */
3350 if (!function_depth)
3351 ggc_collect ();
b2583345 3352 return false;
8cd2462c
JH
3353 }
3354
a406865a 3355 gcc_assert (DECL_SAVED_TREE (fn));
726a989a 3356
8cd2462c
JH
3357 /* If this is a constructor or destructor body, we have to clone
3358 it. */
3359 if (maybe_clone_body (fn))
3360 {
3361 /* We don't want to process FN again, so pretend we've written
3362 it out, even though we haven't. */
3363 TREE_ASM_WRITTEN (fn) = 1;
c6a21142 3364 DECL_SAVED_TREE (fn) = NULL_TREE;
b2583345 3365 return false;
8cd2462c
JH
3366 }
3367
4684cd27
MM
3368 /* We make a decision about linkage for these functions at the end
3369 of the compilation. Until that point, we do not want the back
3370 end to output them -- but we do want it to see the bodies of
1a10290c 3371 these functions so that it can inline them as appropriate. */
4684cd27
MM
3372 if (DECL_DECLARED_INLINE_P (fn) || DECL_IMPLICIT_INSTANTIATION (fn))
3373 {
1ef0df47
MM
3374 if (DECL_INTERFACE_KNOWN (fn))
3375 /* We've already made a decision as to how this function will
3376 be handled. */;
3377 else if (!at_eof)
4684cd27
MM
3378 {
3379 DECL_EXTERNAL (fn) = 1;
3380 DECL_NOT_REALLY_EXTERN (fn) = 1;
3381 note_vague_linkage_fn (fn);
1ef0df47
MM
3382 /* A non-template inline function with external linkage will
3383 always be COMDAT. As we must eventually determine the
3384 linkage of all functions, and as that causes writes to
3385 the data mapped in from the PCH file, it's advantageous
3386 to mark the functions at this point. */
3387 if (!DECL_IMPLICIT_INSTANTIATION (fn))
3388 {
3389 /* This function must have external linkage, as
3390 otherwise DECL_INTERFACE_KNOWN would have been
3391 set. */
3392 gcc_assert (TREE_PUBLIC (fn));
3393 comdat_linkage (fn);
3394 DECL_INTERFACE_KNOWN (fn) = 1;
3395 }
4684cd27
MM
3396 }
3397 else
3398 import_export_decl (fn);
1a10290c
MM
3399
3400 /* If the user wants us to keep all inline functions, then mark
3401 this function as needed so that finish_file will make sure to
fe2978fb
MM
3402 output it later. Similarly, all dllexport'd functions must
3403 be emitted; there may be callers in other DLLs. */
3fc20697
RG
3404 if ((flag_keep_inline_functions
3405 && DECL_DECLARED_INLINE_P (fn)
3406 && !DECL_REALLY_EXTERN (fn))
fe2978fb 3407 || lookup_attribute ("dllexport", DECL_ATTRIBUTES (fn)))
1a10290c 3408 mark_needed (fn);
4684cd27
MM
3409 }
3410
8cd2462c
JH
3411 /* There's no reason to do any of the work here if we're only doing
3412 semantic analysis; this code just generates RTL. */
3413 if (flag_syntax_only)
b2583345
JJ
3414 return false;
3415
3416 return true;
3417}
8cd2462c 3418
b2583345
JJ
3419void
3420expand_or_defer_fn (tree fn)
3421{
3422 if (expand_or_defer_fn_1 (fn))
3423 {
3424 function_depth++;
99edd65d 3425
b2583345
JJ
3426 /* Expand or defer, at the whim of the compilation unit manager. */
3427 cgraph_finalize_function (fn, function_depth > 1);
6744a6ab 3428 emit_associated_thunks (fn);
99edd65d 3429
b2583345
JJ
3430 function_depth--;
3431 }
8cd2462c
JH
3432}
3433
6de9cd9a
DN
3434struct nrv_data
3435{
3436 tree var;
3437 tree result;
3438 htab_t visited;
3439};
0d97bf4c 3440
6de9cd9a
DN
3441/* Helper function for walk_tree, used by finalize_nrv below. */
3442
3443static tree
3444finalize_nrv_r (tree* tp, int* walk_subtrees, void* data)
0d97bf4c 3445{
6de9cd9a
DN
3446 struct nrv_data *dp = (struct nrv_data *)data;
3447 void **slot;
07b2f2fd
JM
3448
3449 /* No need to walk into types. There wouldn't be any need to walk into
3450 non-statements, except that we have to consider STMT_EXPRs. */
0d97bf4c
JM
3451 if (TYPE_P (*tp))
3452 *walk_subtrees = 0;
6de9cd9a
DN
3453 /* Change all returns to just refer to the RESULT_DECL; this is a nop,
3454 but differs from using NULL_TREE in that it indicates that we care
3455 about the value of the RESULT_DECL. */
5088b058
RH
3456 else if (TREE_CODE (*tp) == RETURN_EXPR)
3457 TREE_OPERAND (*tp, 0) = dp->result;
6de9cd9a
DN
3458 /* Change all cleanups for the NRV to only run when an exception is
3459 thrown. */
07b2f2fd 3460 else if (TREE_CODE (*tp) == CLEANUP_STMT
6de9cd9a 3461 && CLEANUP_DECL (*tp) == dp->var)
659e5a7a 3462 CLEANUP_EH_ONLY (*tp) = 1;
350fae66 3463 /* Replace the DECL_EXPR for the NRV with an initialization of the
6de9cd9a 3464 RESULT_DECL, if needed. */
350fae66
RK
3465 else if (TREE_CODE (*tp) == DECL_EXPR
3466 && DECL_EXPR_DECL (*tp) == dp->var)
6de9cd9a
DN
3467 {
3468 tree init;
3469 if (DECL_INITIAL (dp->var)
3470 && DECL_INITIAL (dp->var) != error_mark_node)
2d188530
JJ
3471 init = build2 (INIT_EXPR, void_type_node, dp->result,
3472 DECL_INITIAL (dp->var));
6de9cd9a 3473 else
c2255bc4 3474 init = build_empty_stmt (EXPR_LOCATION (*tp));
2d188530 3475 DECL_INITIAL (dp->var) = NULL_TREE;
5e278028 3476 SET_EXPR_LOCATION (init, EXPR_LOCATION (*tp));
6de9cd9a
DN
3477 *tp = init;
3478 }
3479 /* And replace all uses of the NRV with the RESULT_DECL. */
3480 else if (*tp == dp->var)
3481 *tp = dp->result;
3482
3483 /* Avoid walking into the same tree more than once. Unfortunately, we
3484 can't just use walk_tree_without duplicates because it would only call
3485 us for the first occurrence of dp->var in the function body. */
3486 slot = htab_find_slot (dp->visited, *tp, INSERT);
3487 if (*slot)
3488 *walk_subtrees = 0;
3489 else
3490 *slot = *tp;
0d97bf4c
JM
3491
3492 /* Keep iterating. */
3493 return NULL_TREE;
3494}
3495
6de9cd9a 3496/* Called from finish_function to implement the named return value
5088b058 3497 optimization by overriding all the RETURN_EXPRs and pertinent
6de9cd9a
DN
3498 CLEANUP_STMTs and replacing all occurrences of VAR with RESULT, the
3499 RESULT_DECL for the function. */
f444e36b 3500
4985cde3 3501void
6de9cd9a 3502finalize_nrv (tree *tp, tree var, tree result)
f444e36b 3503{
6de9cd9a
DN
3504 struct nrv_data data;
3505
3506 /* Copy debugging information from VAR to RESULT. */
3507 DECL_NAME (result) = DECL_NAME (var);
b785f485
RH
3508 DECL_ARTIFICIAL (result) = DECL_ARTIFICIAL (var);
3509 DECL_IGNORED_P (result) = DECL_IGNORED_P (var);
6de9cd9a
DN
3510 DECL_SOURCE_LOCATION (result) = DECL_SOURCE_LOCATION (var);
3511 DECL_ABSTRACT_ORIGIN (result) = DECL_ABSTRACT_ORIGIN (var);
3512 /* Don't forget that we take its address. */
3513 TREE_ADDRESSABLE (result) = TREE_ADDRESSABLE (var);
3514
3515 data.var = var;
3516 data.result = result;
3517 data.visited = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL);
14588106 3518 cp_walk_tree (tp, finalize_nrv_r, &data, 0);
6de9cd9a 3519 htab_delete (data.visited);
b850de4f 3520}
1799e5d5 3521\f
7a0112e7
JJ
3522/* Return the declaration for the function called by CALL_EXPR T,
3523 TYPE is the class type of the clause decl. */
3524
3525static tree
3526omp_clause_info_fndecl (tree t, tree type)
3527{
3528 tree ret = get_callee_fndecl (t);
3529
3530 if (ret)
3531 return ret;
3532
3533 gcc_assert (TREE_CODE (t) == CALL_EXPR);
3534 t = CALL_EXPR_FN (t);
3535 STRIP_NOPS (t);
3536 if (TREE_CODE (t) == OBJ_TYPE_REF)
3537 {
3538 t = cp_fold_obj_type_ref (t, type);
3539 if (TREE_CODE (t) == ADDR_EXPR
3540 && TREE_CODE (TREE_OPERAND (t, 0)) == FUNCTION_DECL)
3541 return TREE_OPERAND (t, 0);
3542 }
3543
3544 return NULL_TREE;
3545}
3546
a68ab351
JJ
3547/* Create CP_OMP_CLAUSE_INFO for clause C. Returns true if it is invalid. */
3548
3549bool
3550cxx_omp_create_clause_info (tree c, tree type, bool need_default_ctor,
3551 bool need_copy_ctor, bool need_copy_assignment)
3552{
3553 int save_errorcount = errorcount;
3554 tree info, t;
3555
3556 /* Always allocate 3 elements for simplicity. These are the
3557 function decls for the ctor, dtor, and assignment op.
3558 This layout is known to the three lang hooks,
3559 cxx_omp_clause_default_init, cxx_omp_clause_copy_init,
3560 and cxx_omp_clause_assign_op. */
3561 info = make_tree_vec (3);
3562 CP_OMP_CLAUSE_INFO (c) = info;
3563
3564 if (need_default_ctor
3565 || (need_copy_ctor && !TYPE_HAS_TRIVIAL_INIT_REF (type)))
3566 {
c166b898
ILT
3567 VEC(tree,gc) *vec;
3568
a68ab351 3569 if (need_default_ctor)
c166b898 3570 vec = NULL;
a68ab351
JJ
3571 else
3572 {
3573 t = build_int_cst (build_pointer_type (type), 0);
3574 t = build1 (INDIRECT_REF, type, t);
c166b898 3575 vec = make_tree_vector_single (t);
a68ab351
JJ
3576 }
3577 t = build_special_member_call (NULL_TREE, complete_ctor_identifier,
c166b898 3578 &vec, type, LOOKUP_NORMAL,
a68ab351
JJ
3579 tf_warning_or_error);
3580
c166b898
ILT
3581 if (vec != NULL)
3582 release_tree_vector (vec);
3583
a68ab351
JJ
3584 if (targetm.cxx.cdtor_returns_this () || errorcount)
3585 /* Because constructors and destructors return this,
3586 the call will have been cast to "void". Remove the
3587 cast here. We would like to use STRIP_NOPS, but it
3588 wouldn't work here because TYPE_MODE (t) and
3589 TYPE_MODE (TREE_OPERAND (t, 0)) are different.
3590 They are VOIDmode and Pmode, respectively. */
3591 if (TREE_CODE (t) == NOP_EXPR)
3592 t = TREE_OPERAND (t, 0);
3593
3594 TREE_VEC_ELT (info, 0) = get_callee_fndecl (t);
3595 }
3596
3597 if ((need_default_ctor || need_copy_ctor)
3598 && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (type))
3599 {
3600 t = build_int_cst (build_pointer_type (type), 0);
3601 t = build1 (INDIRECT_REF, type, t);
3602 t = build_special_member_call (t, complete_dtor_identifier,
3603 NULL, type, LOOKUP_NORMAL,
3604 tf_warning_or_error);
3605
3606 if (targetm.cxx.cdtor_returns_this () || errorcount)
3607 /* Because constructors and destructors return this,
3608 the call will have been cast to "void". Remove the
3609 cast here. We would like to use STRIP_NOPS, but it
3610 wouldn't work here because TYPE_MODE (t) and
3611 TYPE_MODE (TREE_OPERAND (t, 0)) are different.
3612 They are VOIDmode and Pmode, respectively. */
3613 if (TREE_CODE (t) == NOP_EXPR)
3614 t = TREE_OPERAND (t, 0);
3615
3616 TREE_VEC_ELT (info, 1) = omp_clause_info_fndecl (t, type);
3617 }
3618
3619 if (need_copy_assignment && !TYPE_HAS_TRIVIAL_ASSIGN_REF (type))
3620 {
c166b898
ILT
3621 VEC(tree,gc) *vec;
3622
a68ab351
JJ
3623 t = build_int_cst (build_pointer_type (type), 0);
3624 t = build1 (INDIRECT_REF, type, t);
c166b898 3625 vec = make_tree_vector_single (t);
a68ab351 3626 t = build_special_member_call (t, ansi_assopname (NOP_EXPR),
c166b898 3627 &vec, type, LOOKUP_NORMAL,
a68ab351 3628 tf_warning_or_error);
c166b898 3629 release_tree_vector (vec);
a68ab351
JJ
3630
3631 /* We'll have called convert_from_reference on the call, which
3632 may well have added an indirect_ref. It's unneeded here,
3633 and in the way, so kill it. */
3634 if (TREE_CODE (t) == INDIRECT_REF)
3635 t = TREE_OPERAND (t, 0);
3636
3637 TREE_VEC_ELT (info, 2) = omp_clause_info_fndecl (t, type);
3638 }
3639
3640 return errorcount != save_errorcount;
3641}
3642
1799e5d5
RH
3643/* For all elements of CLAUSES, validate them vs OpenMP constraints.
3644 Remove any elements from the list that are invalid. */
3645
3646tree
3647finish_omp_clauses (tree clauses)
3648{
3649 bitmap_head generic_head, firstprivate_head, lastprivate_head;
3650 tree c, t, *pc = &clauses;
3651 const char *name;
3652
3653 bitmap_obstack_initialize (NULL);
3654 bitmap_initialize (&generic_head, &bitmap_default_obstack);
3655 bitmap_initialize (&firstprivate_head, &bitmap_default_obstack);
3656 bitmap_initialize (&lastprivate_head, &bitmap_default_obstack);
3657
3658 for (pc = &clauses, c = clauses; c ; c = *pc)
3659 {
3660 bool remove = false;
3661
3662 switch (OMP_CLAUSE_CODE (c))
3663 {
3664 case OMP_CLAUSE_SHARED:
3665 name = "shared";
3666 goto check_dup_generic;
3667 case OMP_CLAUSE_PRIVATE:
3668 name = "private";
3669 goto check_dup_generic;
3670 case OMP_CLAUSE_REDUCTION:
3671 name = "reduction";
3672 goto check_dup_generic;
3673 case OMP_CLAUSE_COPYPRIVATE:
3674 name = "copyprivate";
3675 goto check_dup_generic;
3676 case OMP_CLAUSE_COPYIN:
3677 name = "copyin";
3678 goto check_dup_generic;
3679 check_dup_generic:
3680 t = OMP_CLAUSE_DECL (c);
3681 if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3682 {
3683 if (processing_template_decl)
3684 break;
76dc15d4
JJ
3685 if (DECL_P (t))
3686 error ("%qD is not a variable in clause %qs", t, name);
3687 else
3688 error ("%qE is not a variable in clause %qs", t, name);
1799e5d5
RH
3689 remove = true;
3690 }
3691 else if (bitmap_bit_p (&generic_head, DECL_UID (t))
3692 || bitmap_bit_p (&firstprivate_head, DECL_UID (t))
3693 || bitmap_bit_p (&lastprivate_head, DECL_UID (t)))
3694 {
76dc15d4 3695 error ("%qD appears more than once in data clauses", t);
1799e5d5
RH
3696 remove = true;
3697 }
3698 else
3699 bitmap_set_bit (&generic_head, DECL_UID (t));
3700 break;
3701
3702 case OMP_CLAUSE_FIRSTPRIVATE:
3703 t = OMP_CLAUSE_DECL (c);
3704 if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3705 {
3706 if (processing_template_decl)
3707 break;
85b20612
JJ
3708 if (DECL_P (t))
3709 error ("%qD is not a variable in clause %<firstprivate%>", t);
3710 else
3711 error ("%qE is not a variable in clause %<firstprivate%>", t);
1799e5d5
RH
3712 remove = true;
3713 }
3714 else if (bitmap_bit_p (&generic_head, DECL_UID (t))
3715 || bitmap_bit_p (&firstprivate_head, DECL_UID (t)))
3716 {
85b20612 3717 error ("%qD appears more than once in data clauses", t);
1799e5d5
RH
3718 remove = true;
3719 }
3720 else
3721 bitmap_set_bit (&firstprivate_head, DECL_UID (t));
3722 break;
3723
3724 case OMP_CLAUSE_LASTPRIVATE:
3725 t = OMP_CLAUSE_DECL (c);
3726 if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3727 {
3728 if (processing_template_decl)
3729 break;
85b20612
JJ
3730 if (DECL_P (t))
3731 error ("%qD is not a variable in clause %<lastprivate%>", t);
3732 else
3733 error ("%qE is not a variable in clause %<lastprivate%>", t);
1799e5d5
RH
3734 remove = true;
3735 }
3736 else if (bitmap_bit_p (&generic_head, DECL_UID (t))
3737 || bitmap_bit_p (&lastprivate_head, DECL_UID (t)))
3738 {
85b20612 3739 error ("%qD appears more than once in data clauses", t);
1799e5d5
RH
3740 remove = true;
3741 }
3742 else
3743 bitmap_set_bit (&lastprivate_head, DECL_UID (t));
3744 break;
3745
3746 case OMP_CLAUSE_IF:
3747 t = OMP_CLAUSE_IF_EXPR (c);
3748 t = maybe_convert_cond (t);
3749 if (t == error_mark_node)
3750 remove = true;
3751 OMP_CLAUSE_IF_EXPR (c) = t;
3752 break;
3753
3754 case OMP_CLAUSE_NUM_THREADS:
3755 t = OMP_CLAUSE_NUM_THREADS_EXPR (c);
3756 if (t == error_mark_node)
3757 remove = true;
6e684eee
JJ
3758 else if (!type_dependent_expression_p (t)
3759 && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
1799e5d5
RH
3760 {
3761 error ("num_threads expression must be integral");
3762 remove = true;
3763 }
3764 break;
3765
3766 case OMP_CLAUSE_SCHEDULE:
3767 t = OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c);
3768 if (t == NULL)
3769 ;
3770 else if (t == error_mark_node)
3771 remove = true;
6e684eee
JJ
3772 else if (!type_dependent_expression_p (t)
3773 && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
1799e5d5
RH
3774 {
3775 error ("schedule chunk size expression must be integral");
3776 remove = true;
3777 }
3778 break;
3779
3780 case OMP_CLAUSE_NOWAIT:
3781 case OMP_CLAUSE_ORDERED:
3782 case OMP_CLAUSE_DEFAULT:
a68ab351
JJ
3783 case OMP_CLAUSE_UNTIED:
3784 case OMP_CLAUSE_COLLAPSE:
1799e5d5
RH
3785 break;
3786
3787 default:
3788 gcc_unreachable ();
3789 }
3790
3791 if (remove)
3792 *pc = OMP_CLAUSE_CHAIN (c);
3793 else
3794 pc = &OMP_CLAUSE_CHAIN (c);
3795 }
3796
3797 for (pc = &clauses, c = clauses; c ; c = *pc)
3798 {
81f40b79 3799 enum omp_clause_code c_kind = OMP_CLAUSE_CODE (c);
1799e5d5
RH
3800 bool remove = false;
3801 bool need_complete_non_reference = false;
3802 bool need_default_ctor = false;
3803 bool need_copy_ctor = false;
3804 bool need_copy_assignment = false;
3805 bool need_implicitly_determined = false;
3806 tree type, inner_type;
3807
3808 switch (c_kind)
3809 {
3810 case OMP_CLAUSE_SHARED:
3811 name = "shared";
3812 need_implicitly_determined = true;
3813 break;
3814 case OMP_CLAUSE_PRIVATE:
3815 name = "private";
3816 need_complete_non_reference = true;
3817 need_default_ctor = true;
3818 need_implicitly_determined = true;
3819 break;
3820 case OMP_CLAUSE_FIRSTPRIVATE:
3821 name = "firstprivate";
3822 need_complete_non_reference = true;
3823 need_copy_ctor = true;
3824 need_implicitly_determined = true;
3825 break;
3826 case OMP_CLAUSE_LASTPRIVATE:
3827 name = "lastprivate";
3828 need_complete_non_reference = true;
3829 need_copy_assignment = true;
3830 need_implicitly_determined = true;
3831 break;
3832 case OMP_CLAUSE_REDUCTION:
3833 name = "reduction";
3834 need_implicitly_determined = true;
3835 break;
3836 case OMP_CLAUSE_COPYPRIVATE:
3837 name = "copyprivate";
3838 need_copy_assignment = true;
3839 break;
3840 case OMP_CLAUSE_COPYIN:
3841 name = "copyin";
3842 need_copy_assignment = true;
3843 break;
3844 default:
3845 pc = &OMP_CLAUSE_CHAIN (c);
3846 continue;
3847 }
3848
3849 t = OMP_CLAUSE_DECL (c);
3850 if (processing_template_decl
3851 && TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3852 {
3853 pc = &OMP_CLAUSE_CHAIN (c);
3854 continue;
3855 }
3856
3857 switch (c_kind)
3858 {
3859 case OMP_CLAUSE_LASTPRIVATE:
3860 if (!bitmap_bit_p (&firstprivate_head, DECL_UID (t)))
3861 need_default_ctor = true;
3862 break;
3863
3864 case OMP_CLAUSE_REDUCTION:
3865 if (AGGREGATE_TYPE_P (TREE_TYPE (t))
3866 || POINTER_TYPE_P (TREE_TYPE (t)))
3867 {
3868 error ("%qE has invalid type for %<reduction%>", t);
3869 remove = true;
3870 }
3871 else if (FLOAT_TYPE_P (TREE_TYPE (t)))
3872 {
3873 enum tree_code r_code = OMP_CLAUSE_REDUCTION_CODE (c);
3874 switch (r_code)
3875 {
3876 case PLUS_EXPR:
3877 case MULT_EXPR:
3878 case MINUS_EXPR:
3879 break;
3880 default:
3881 error ("%qE has invalid type for %<reduction(%s)%>",
3882 t, operator_name_info[r_code].name);
3883 remove = true;
3884 }
3885 }
3886 break;
3887
3888 case OMP_CLAUSE_COPYIN:
3889 if (TREE_CODE (t) != VAR_DECL || !DECL_THREAD_LOCAL_P (t))
3890 {
3891 error ("%qE must be %<threadprivate%> for %<copyin%>", t);
3892 remove = true;
3893 }
3894 break;
3895
3896 default:
3897 break;
3898 }
3899
3900 if (need_complete_non_reference)
3901 {
3902 t = require_complete_type (t);
3903 if (t == error_mark_node)
3904 remove = true;
3905 else if (TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE)
3906 {
3907 error ("%qE has reference type for %qs", t, name);
3908 remove = true;
3909 }
3910 }
3911 if (need_implicitly_determined)
3912 {
3913 const char *share_name = NULL;
3914
3915 if (TREE_CODE (t) == VAR_DECL && DECL_THREAD_LOCAL_P (t))
3916 share_name = "threadprivate";
3917 else switch (cxx_omp_predetermined_sharing (t))
3918 {
3919 case OMP_CLAUSE_DEFAULT_UNSPECIFIED:
3920 break;
3921 case OMP_CLAUSE_DEFAULT_SHARED:
3922 share_name = "shared";
3923 break;
3924 case OMP_CLAUSE_DEFAULT_PRIVATE:
3925 share_name = "private";
3926 break;
3927 default:
3928 gcc_unreachable ();
3929 }
3930 if (share_name)
3931 {
3932 error ("%qE is predetermined %qs for %qs",
3933 t, share_name, name);
3934 remove = true;
3935 }
3936 }
3937
3938 /* We're interested in the base element, not arrays. */
3939 inner_type = type = TREE_TYPE (t);
3940 while (TREE_CODE (inner_type) == ARRAY_TYPE)
3941 inner_type = TREE_TYPE (inner_type);
3942
84dc00e8 3943 /* Check for special function availability by building a call to one.
1799e5d5
RH
3944 Save the results, because later we won't be in the right context
3945 for making these queries. */
3946 if (CLASS_TYPE_P (inner_type)
6f719560 3947 && (need_default_ctor || need_copy_ctor || need_copy_assignment)
a68ab351
JJ
3948 && !type_dependent_expression_p (t)
3949 && cxx_omp_create_clause_info (c, inner_type, need_default_ctor,
3950 need_copy_ctor, need_copy_assignment))
3951 remove = true;
1799e5d5
RH
3952
3953 if (remove)
3954 *pc = OMP_CLAUSE_CHAIN (c);
3955 else
3956 pc = &OMP_CLAUSE_CHAIN (c);
3957 }
3958
3959 bitmap_obstack_release (NULL);
3960 return clauses;
3961}
3962
3963/* For all variables in the tree_list VARS, mark them as thread local. */
3964
3965void
3966finish_omp_threadprivate (tree vars)
3967{
3968 tree t;
3969
3970 /* Mark every variable in VARS to be assigned thread local storage. */
3971 for (t = vars; t; t = TREE_CHAIN (t))
3972 {
3973 tree v = TREE_PURPOSE (t);
3974
edb6000e
JJ
3975 if (error_operand_p (v))
3976 ;
3977 else if (TREE_CODE (v) != VAR_DECL)
3978 error ("%<threadprivate%> %qD is not file, namespace "
3979 "or block scope variable", v);
1799e5d5
RH
3980 /* If V had already been marked threadprivate, it doesn't matter
3981 whether it had been used prior to this point. */
edb6000e 3982 else if (TREE_USED (v)
1799e5d5
RH
3983 && (DECL_LANG_SPECIFIC (v) == NULL
3984 || !CP_DECL_THREADPRIVATE_P (v)))
3985 error ("%qE declared %<threadprivate%> after first use", v);
3986 else if (! TREE_STATIC (v) && ! DECL_EXTERNAL (v))
3987 error ("automatic variable %qE cannot be %<threadprivate%>", v);
3988 else if (! COMPLETE_TYPE_P (TREE_TYPE (v)))
3989 error ("%<threadprivate%> %qE has incomplete type", v);
a68ab351
JJ
3990 else if (TREE_STATIC (v) && TYPE_P (CP_DECL_CONTEXT (v))
3991 && CP_DECL_CONTEXT (v) != current_class_type)
3992 error ("%<threadprivate%> %qE directive not "
3993 "in %qT definition", v, CP_DECL_CONTEXT (v));
1799e5d5
RH
3994 else
3995 {
3996 /* Allocate a LANG_SPECIFIC structure for V, if needed. */
3997 if (DECL_LANG_SPECIFIC (v) == NULL)
3998 {
3999 retrofit_lang_decl (v);
4000
4001 /* Make sure that DECL_DISCRIMINATOR_P continues to be true
4002 after the allocation of the lang_decl structure. */
4003 if (DECL_DISCRIMINATOR_P (v))
b97e8a14 4004 DECL_LANG_SPECIFIC (v)->u.base.u2sel = 1;
1799e5d5
RH
4005 }
4006
4007 if (! DECL_THREAD_LOCAL_P (v))
4008 {
4009 DECL_TLS_MODEL (v) = decl_default_tls_model (v);
4010 /* If rtl has been already set for this var, call
4011 make_decl_rtl once again, so that encode_section_info
4012 has a chance to look at the new decl flags. */
4013 if (DECL_RTL_SET_P (v))
4014 make_decl_rtl (v);
4015 }
4016 CP_DECL_THREADPRIVATE_P (v) = 1;
4017 }
4018 }
4019}
4020
4021/* Build an OpenMP structured block. */
4022
4023tree
4024begin_omp_structured_block (void)
4025{
4026 return do_pushlevel (sk_omp);
4027}
4028
4029tree
4030finish_omp_structured_block (tree block)
4031{
4032 return do_poplevel (block);
4033}
4034
84dc00e8 4035/* Similarly, except force the retention of the BLOCK. */
1799e5d5
RH
4036
4037tree
4038begin_omp_parallel (void)
4039{
4040 keep_next_level (true);
4041 return begin_omp_structured_block ();
4042}
4043
4044tree
4045finish_omp_parallel (tree clauses, tree body)
4046{
4047 tree stmt;
4048
4049 body = finish_omp_structured_block (body);
b850de4f 4050
1799e5d5
RH
4051 stmt = make_node (OMP_PARALLEL);
4052 TREE_TYPE (stmt) = void_type_node;
4053 OMP_PARALLEL_CLAUSES (stmt) = clauses;
4054 OMP_PARALLEL_BODY (stmt) = body;
54f7877c 4055
1799e5d5
RH
4056 return add_stmt (stmt);
4057}
4058
a68ab351
JJ
4059tree
4060begin_omp_task (void)
4061{
4062 keep_next_level (true);
4063 return begin_omp_structured_block ();
4064}
4065
4066tree
4067finish_omp_task (tree clauses, tree body)
4068{
4069 tree stmt;
4070
4071 body = finish_omp_structured_block (body);
4072
4073 stmt = make_node (OMP_TASK);
4074 TREE_TYPE (stmt) = void_type_node;
4075 OMP_TASK_CLAUSES (stmt) = clauses;
4076 OMP_TASK_BODY (stmt) = body;
4077
4078 return add_stmt (stmt);
4079}
4080
4081/* Helper function for finish_omp_for. Convert Ith random access iterator
4082 into integral iterator. Return FALSE if successful. */
4083
4084static bool
4085handle_omp_for_class_iterator (int i, location_t locus, tree declv, tree initv,
4086 tree condv, tree incrv, tree *body,
4087 tree *pre_body, tree clauses)
4088{
4089 tree diff, iter_init, iter_incr = NULL, last;
4090 tree incr_var = NULL, orig_pre_body, orig_body, c;
4091 tree decl = TREE_VEC_ELT (declv, i);
4092 tree init = TREE_VEC_ELT (initv, i);
4093 tree cond = TREE_VEC_ELT (condv, i);
4094 tree incr = TREE_VEC_ELT (incrv, i);
4095 tree iter = decl;
4096 location_t elocus = locus;
4097
4098 if (init && EXPR_HAS_LOCATION (init))
4099 elocus = EXPR_LOCATION (init);
4100
4101 switch (TREE_CODE (cond))
4102 {
4103 case GT_EXPR:
4104 case GE_EXPR:
4105 case LT_EXPR:
4106 case LE_EXPR:
c5cdb03f
JJ
4107 if (TREE_OPERAND (cond, 1) == iter)
4108 cond = build2 (swap_tree_comparison (TREE_CODE (cond)),
4109 TREE_TYPE (cond), iter, TREE_OPERAND (cond, 0));
a68ab351
JJ
4110 if (TREE_OPERAND (cond, 0) != iter)
4111 cond = error_mark_node;
4112 else
4113 {
4114 tree tem = build_x_binary_op (TREE_CODE (cond), iter, ERROR_MARK,
4115 TREE_OPERAND (cond, 1), ERROR_MARK,
4116 NULL, tf_warning_or_error);
4117 if (error_operand_p (tem))
4118 return true;
4119 }
4120 break;
4121 default:
4122 cond = error_mark_node;
4123 break;
4124 }
4125 if (cond == error_mark_node)
4126 {
69bc6bff 4127 error_at (elocus, "invalid controlling predicate");
a68ab351
JJ
4128 return true;
4129 }
4130 diff = build_x_binary_op (MINUS_EXPR, TREE_OPERAND (cond, 1),
4131 ERROR_MARK, iter, ERROR_MARK, NULL,
4132 tf_warning_or_error);
4133 if (error_operand_p (diff))
4134 return true;
4135 if (TREE_CODE (TREE_TYPE (diff)) != INTEGER_TYPE)
4136 {
69bc6bff
MLI
4137 error_at (elocus, "difference between %qE and %qD does not have integer type",
4138 TREE_OPERAND (cond, 1), iter);
a68ab351
JJ
4139 return true;
4140 }
4141
4142 switch (TREE_CODE (incr))
4143 {
4144 case PREINCREMENT_EXPR:
4145 case PREDECREMENT_EXPR:
4146 case POSTINCREMENT_EXPR:
4147 case POSTDECREMENT_EXPR:
4148 if (TREE_OPERAND (incr, 0) != iter)
4149 {
4150 incr = error_mark_node;
4151 break;
4152 }
4153 iter_incr = build_x_unary_op (TREE_CODE (incr), iter,
4154 tf_warning_or_error);
4155 if (error_operand_p (iter_incr))
4156 return true;
4157 else if (TREE_CODE (incr) == PREINCREMENT_EXPR
4158 || TREE_CODE (incr) == POSTINCREMENT_EXPR)
4159 incr = integer_one_node;
4160 else
4161 incr = integer_minus_one_node;
4162 break;
4163 case MODIFY_EXPR:
4164 if (TREE_OPERAND (incr, 0) != iter)
4165 incr = error_mark_node;
4166 else if (TREE_CODE (TREE_OPERAND (incr, 1)) == PLUS_EXPR
4167 || TREE_CODE (TREE_OPERAND (incr, 1)) == MINUS_EXPR)
4168 {
4169 tree rhs = TREE_OPERAND (incr, 1);
4170 if (TREE_OPERAND (rhs, 0) == iter)
4171 {
4172 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (rhs, 1)))
4173 != INTEGER_TYPE)
4174 incr = error_mark_node;
4175 else
4176 {
4177 iter_incr = build_x_modify_expr (iter, TREE_CODE (rhs),
4178 TREE_OPERAND (rhs, 1),
4179 tf_warning_or_error);
4180 if (error_operand_p (iter_incr))
4181 return true;
4182 incr = TREE_OPERAND (rhs, 1);
4183 incr = cp_convert (TREE_TYPE (diff), incr);
4184 if (TREE_CODE (rhs) == MINUS_EXPR)
4185 {
4186 incr = build1 (NEGATE_EXPR, TREE_TYPE (diff), incr);
4187 incr = fold_if_not_in_template (incr);
4188 }
4189 if (TREE_CODE (incr) != INTEGER_CST
4190 && (TREE_CODE (incr) != NOP_EXPR
4191 || (TREE_CODE (TREE_OPERAND (incr, 0))
4192 != INTEGER_CST)))
4193 iter_incr = NULL;
4194 }
4195 }
4196 else if (TREE_OPERAND (rhs, 1) == iter)
4197 {
4198 if (TREE_CODE (TREE_TYPE (TREE_OPERAND (rhs, 0))) != INTEGER_TYPE
4199 || TREE_CODE (rhs) != PLUS_EXPR)
4200 incr = error_mark_node;
4201 else
4202 {
4203 iter_incr = build_x_binary_op (PLUS_EXPR,
4204 TREE_OPERAND (rhs, 0),
4205 ERROR_MARK, iter,
4206 ERROR_MARK, NULL,
4207 tf_warning_or_error);
4208 if (error_operand_p (iter_incr))
4209 return true;
4210 iter_incr = build_x_modify_expr (iter, NOP_EXPR,
4211 iter_incr,
4212 tf_warning_or_error);
4213 if (error_operand_p (iter_incr))
4214 return true;
4215 incr = TREE_OPERAND (rhs, 0);
4216 iter_incr = NULL;
4217 }
4218 }
4219 else
4220 incr = error_mark_node;
4221 }
4222 else
4223 incr = error_mark_node;
4224 break;
4225 default:
4226 incr = error_mark_node;
4227 break;
4228 }
4229
4230 if (incr == error_mark_node)
4231 {
69bc6bff 4232 error_at (elocus, "invalid increment expression");
a68ab351
JJ
4233 return true;
4234 }
4235
4236 incr = cp_convert (TREE_TYPE (diff), incr);
4237 for (c = clauses; c ; c = OMP_CLAUSE_CHAIN (c))
4238 if (OMP_CLAUSE_CODE (c) == OMP_CLAUSE_LASTPRIVATE
4239 && OMP_CLAUSE_DECL (c) == iter)
4240 break;
4241
4242 decl = create_temporary_var (TREE_TYPE (diff));
4243 pushdecl (decl);
4244 add_decl_expr (decl);
4245 last = create_temporary_var (TREE_TYPE (diff));
4246 pushdecl (last);
4247 add_decl_expr (last);
4248 if (c && iter_incr == NULL)
4249 {
4250 incr_var = create_temporary_var (TREE_TYPE (diff));
4251 pushdecl (incr_var);
4252 add_decl_expr (incr_var);
4253 }
4254 gcc_assert (stmts_are_full_exprs_p ());
4255
4256 orig_pre_body = *pre_body;
4257 *pre_body = push_stmt_list ();
4258 if (orig_pre_body)
4259 add_stmt (orig_pre_body);
4260 if (init != NULL)
4261 finish_expr_stmt (build_x_modify_expr (iter, NOP_EXPR, init,
4262 tf_warning_or_error));
4263 init = build_int_cst (TREE_TYPE (diff), 0);
4264 if (c && iter_incr == NULL)
4265 {
4266 finish_expr_stmt (build_x_modify_expr (incr_var, NOP_EXPR,
4267 incr, tf_warning_or_error));
4268 incr = incr_var;
4269 iter_incr = build_x_modify_expr (iter, PLUS_EXPR, incr,
4270 tf_warning_or_error);
4271 }
4272 finish_expr_stmt (build_x_modify_expr (last, NOP_EXPR, init,
4273 tf_warning_or_error));
4274 *pre_body = pop_stmt_list (*pre_body);
4275
ba47d38d
AH
4276 cond = cp_build_binary_op (elocus,
4277 TREE_CODE (cond), decl, diff,
a68ab351 4278 tf_warning_or_error);
32e8bb8e 4279 incr = build_modify_expr (elocus, decl, NULL_TREE, PLUS_EXPR,
c2255bc4 4280 elocus, incr, NULL_TREE);
a68ab351
JJ
4281
4282 orig_body = *body;
4283 *body = push_stmt_list ();
4284 iter_init = build2 (MINUS_EXPR, TREE_TYPE (diff), decl, last);
4285 iter_init = build_x_modify_expr (iter, PLUS_EXPR, iter_init,
4286 tf_warning_or_error);
4287 iter_init = build1 (NOP_EXPR, void_type_node, iter_init);
4288 finish_expr_stmt (iter_init);
4289 finish_expr_stmt (build_x_modify_expr (last, NOP_EXPR, decl,
4290 tf_warning_or_error));
4291 add_stmt (orig_body);
4292 *body = pop_stmt_list (*body);
4293
4294 if (c)
4295 {
4296 OMP_CLAUSE_LASTPRIVATE_STMT (c) = push_stmt_list ();
4297 finish_expr_stmt (iter_incr);
4298 OMP_CLAUSE_LASTPRIVATE_STMT (c)
4299 = pop_stmt_list (OMP_CLAUSE_LASTPRIVATE_STMT (c));
4300 }
4301
4302 TREE_VEC_ELT (declv, i) = decl;
4303 TREE_VEC_ELT (initv, i) = init;
4304 TREE_VEC_ELT (condv, i) = cond;
4305 TREE_VEC_ELT (incrv, i) = incr;
4306
4307 return false;
4308}
4309
1799e5d5
RH
4310/* Build and validate an OMP_FOR statement. CLAUSES, BODY, COND, INCR
4311 are directly for their associated operands in the statement. DECL
4312 and INIT are a combo; if DECL is NULL then INIT ought to be a
4313 MODIFY_EXPR, and the DECL should be extracted. PRE_BODY are
4314 optional statements that need to go before the loop into its
4315 sk_omp scope. */
4316
4317tree
a68ab351
JJ
4318finish_omp_for (location_t locus, tree declv, tree initv, tree condv,
4319 tree incrv, tree body, tree pre_body, tree clauses)
4320{
4321 tree omp_for = NULL, orig_incr = NULL;
4322 tree decl, init, cond, incr;
4323 location_t elocus;
4324 int i;
4325
4326 gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (initv));
4327 gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (condv));
4328 gcc_assert (TREE_VEC_LENGTH (declv) == TREE_VEC_LENGTH (incrv));
4329 for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
4330 {
4331 decl = TREE_VEC_ELT (declv, i);
4332 init = TREE_VEC_ELT (initv, i);
4333 cond = TREE_VEC_ELT (condv, i);
4334 incr = TREE_VEC_ELT (incrv, i);
4335 elocus = locus;
4336
4337 if (decl == NULL)
4338 {
4339 if (init != NULL)
4340 switch (TREE_CODE (init))
1799e5d5 4341 {
a68ab351 4342 case MODIFY_EXPR:
1799e5d5 4343 decl = TREE_OPERAND (init, 0);
a68ab351
JJ
4344 init = TREE_OPERAND (init, 1);
4345 break;
4346 case MODOP_EXPR:
4347 if (TREE_CODE (TREE_OPERAND (init, 1)) == NOP_EXPR)
4348 {
4349 decl = TREE_OPERAND (init, 0);
4350 init = TREE_OPERAND (init, 2);
4351 }
4352 break;
4353 default:
4354 break;
1799e5d5 4355 }
1799e5d5 4356
a68ab351
JJ
4357 if (decl == NULL)
4358 {
69bc6bff
MLI
4359 error_at (locus,
4360 "expected iteration declaration or initialization");
a68ab351
JJ
4361 return NULL;
4362 }
1799e5d5 4363 }
1799e5d5 4364
a68ab351
JJ
4365 if (init && EXPR_HAS_LOCATION (init))
4366 elocus = EXPR_LOCATION (init);
1799e5d5
RH
4367
4368 if (cond == NULL)
4369 {
69bc6bff 4370 error_at (elocus, "missing controlling predicate");
1799e5d5
RH
4371 return NULL;
4372 }
4373
4374 if (incr == NULL)
4375 {
69bc6bff 4376 error_at (elocus, "missing increment expression");
1799e5d5
RH
4377 return NULL;
4378 }
4379
a68ab351
JJ
4380 TREE_VEC_ELT (declv, i) = decl;
4381 TREE_VEC_ELT (initv, i) = init;
4382 }
4383
4384 if (dependent_omp_for_p (declv, initv, condv, incrv))
4385 {
4386 tree stmt;
4387
1799e5d5
RH
4388 stmt = make_node (OMP_FOR);
4389
a68ab351
JJ
4390 for (i = 0; i < TREE_VEC_LENGTH (declv); i++)
4391 {
4392 /* This is really just a place-holder. We'll be decomposing this
4393 again and going through the cp_build_modify_expr path below when
4394 we instantiate the thing. */
4395 TREE_VEC_ELT (initv, i)
4396 = build2 (MODIFY_EXPR, void_type_node, TREE_VEC_ELT (declv, i),
4397 TREE_VEC_ELT (initv, i));
4398 }
1799e5d5
RH
4399
4400 TREE_TYPE (stmt) = void_type_node;
a68ab351
JJ
4401 OMP_FOR_INIT (stmt) = initv;
4402 OMP_FOR_COND (stmt) = condv;
4403 OMP_FOR_INCR (stmt) = incrv;
1799e5d5
RH
4404 OMP_FOR_BODY (stmt) = body;
4405 OMP_FOR_PRE_BODY (stmt) = pre_body;
a68ab351 4406 OMP_FOR_CLAUSES (stmt) = clauses;
1799e5d5
RH
4407
4408 SET_EXPR_LOCATION (stmt, locus);
4409 return add_stmt (stmt);
4410 }
4411
a68ab351
JJ
4412 if (processing_template_decl)
4413 orig_incr = make_tree_vec (TREE_VEC_LENGTH (incrv));
1799e5d5 4414
a68ab351 4415 for (i = 0; i < TREE_VEC_LENGTH (declv); )
dadb19e0 4416 {
a68ab351
JJ
4417 decl = TREE_VEC_ELT (declv, i);
4418 init = TREE_VEC_ELT (initv, i);
4419 cond = TREE_VEC_ELT (condv, i);
4420 incr = TREE_VEC_ELT (incrv, i);
4421 if (orig_incr)
4422 TREE_VEC_ELT (orig_incr, i) = incr;
4423 elocus = locus;
4424
4425 if (init && EXPR_HAS_LOCATION (init))
dadb19e0 4426 elocus = EXPR_LOCATION (init);
dadb19e0 4427
a68ab351
JJ
4428 if (!DECL_P (decl))
4429 {
69bc6bff 4430 error_at (elocus, "expected iteration declaration or initialization");
a68ab351
JJ
4431 return NULL;
4432 }
969c111d 4433
a68ab351
JJ
4434 if (incr && TREE_CODE (incr) == MODOP_EXPR)
4435 {
4436 if (orig_incr)
4437 TREE_VEC_ELT (orig_incr, i) = incr;
4438 incr = cp_build_modify_expr (TREE_OPERAND (incr, 0),
4439 TREE_CODE (TREE_OPERAND (incr, 1)),
4440 TREE_OPERAND (incr, 2),
4441 tf_warning_or_error);
4442 }
4443
4444 if (CLASS_TYPE_P (TREE_TYPE (decl)))
4445 {
4446 if (handle_omp_for_class_iterator (i, locus, declv, initv, condv,
4447 incrv, &body, &pre_body, clauses))
4448 return NULL;
4449 continue;
4450 }
4451
4452 if (!INTEGRAL_TYPE_P (TREE_TYPE (decl))
4453 && TREE_CODE (TREE_TYPE (decl)) != POINTER_TYPE)
4454 {
69bc6bff 4455 error_at (elocus, "invalid type for iteration variable %qE", decl);
a68ab351
JJ
4456 return NULL;
4457 }
969c111d 4458
b2ebd268 4459 if (!processing_template_decl)
8569b2d0
JJ
4460 {
4461 init = fold_build_cleanup_point_expr (TREE_TYPE (init), init);
4462 init = cp_build_modify_expr (decl, NOP_EXPR, init, tf_warning_or_error);
4463 }
4464 else
4465 init = build2 (MODIFY_EXPR, void_type_node, decl, init);
e4ebaef3
JJ
4466 if (cond
4467 && TREE_SIDE_EFFECTS (cond)
4468 && COMPARISON_CLASS_P (cond)
4469 && !processing_template_decl)
a68ab351 4470 {
e4ebaef3
JJ
4471 tree t = TREE_OPERAND (cond, 0);
4472 if (TREE_SIDE_EFFECTS (t)
4473 && t != decl
4474 && (TREE_CODE (t) != NOP_EXPR
4475 || TREE_OPERAND (t, 0) != decl))
4476 TREE_OPERAND (cond, 0)
4477 = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
a68ab351 4478
e4ebaef3
JJ
4479 t = TREE_OPERAND (cond, 1);
4480 if (TREE_SIDE_EFFECTS (t)
4481 && t != decl
4482 && (TREE_CODE (t) != NOP_EXPR
4483 || TREE_OPERAND (t, 0) != decl))
4484 TREE_OPERAND (cond, 1)
a68ab351
JJ
4485 = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
4486 }
4487 if (decl == error_mark_node || init == error_mark_node)
4488 return NULL;
4489
4490 TREE_VEC_ELT (declv, i) = decl;
4491 TREE_VEC_ELT (initv, i) = init;
4492 TREE_VEC_ELT (condv, i) = cond;
4493 TREE_VEC_ELT (incrv, i) = incr;
4494 i++;
969c111d 4495 }
a68ab351
JJ
4496
4497 if (IS_EMPTY_STMT (pre_body))
4498 pre_body = NULL;
4499
4500 omp_for = c_finish_omp_for (locus, declv, initv, condv, incrv,
4501 body, pre_body);
4502
4503 if (omp_for == NULL)
4504 return NULL;
4505
4506 for (i = 0; i < TREE_VEC_LENGTH (OMP_FOR_INCR (omp_for)); i++)
969c111d 4507 {
e4ebaef3
JJ
4508 decl = TREE_OPERAND (TREE_VEC_ELT (OMP_FOR_INIT (omp_for), i), 0);
4509 incr = TREE_VEC_ELT (OMP_FOR_INCR (omp_for), i);
969c111d 4510
a68ab351
JJ
4511 if (TREE_CODE (incr) != MODIFY_EXPR)
4512 continue;
4513
4514 if (TREE_SIDE_EFFECTS (TREE_OPERAND (incr, 1))
e4ebaef3
JJ
4515 && BINARY_CLASS_P (TREE_OPERAND (incr, 1))
4516 && !processing_template_decl)
a68ab351 4517 {
e4ebaef3
JJ
4518 tree t = TREE_OPERAND (TREE_OPERAND (incr, 1), 0);
4519 if (TREE_SIDE_EFFECTS (t)
4520 && t != decl
4521 && (TREE_CODE (t) != NOP_EXPR
4522 || TREE_OPERAND (t, 0) != decl))
4523 TREE_OPERAND (TREE_OPERAND (incr, 1), 0)
4524 = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
a68ab351 4525
e4ebaef3
JJ
4526 t = TREE_OPERAND (TREE_OPERAND (incr, 1), 1);
4527 if (TREE_SIDE_EFFECTS (t)
4528 && t != decl
4529 && (TREE_CODE (t) != NOP_EXPR
4530 || TREE_OPERAND (t, 0) != decl))
4531 TREE_OPERAND (TREE_OPERAND (incr, 1), 1)
4532 = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
a68ab351
JJ
4533 }
4534
4535 if (orig_incr)
4536 TREE_VEC_ELT (OMP_FOR_INCR (omp_for), i) = TREE_VEC_ELT (orig_incr, i);
969c111d 4537 }
a68ab351
JJ
4538 if (omp_for != NULL)
4539 OMP_FOR_CLAUSES (omp_for) = clauses;
969c111d 4540 return omp_for;
1799e5d5
RH
4541}
4542
4543void
4544finish_omp_atomic (enum tree_code code, tree lhs, tree rhs)
4545{
239371f9
JJ
4546 tree orig_lhs;
4547 tree orig_rhs;
4548 bool dependent_p;
e6bd5565
MM
4549 tree stmt;
4550
239371f9
JJ
4551 orig_lhs = lhs;
4552 orig_rhs = rhs;
4553 dependent_p = false;
4554 stmt = NULL_TREE;
4555
4556 /* Even in a template, we can detect invalid uses of the atomic
4557 pragma if neither LHS nor RHS is type-dependent. */
4558 if (processing_template_decl)
e6bd5565 4559 {
239371f9
JJ
4560 dependent_p = (type_dependent_expression_p (lhs)
4561 || type_dependent_expression_p (rhs));
4562 if (!dependent_p)
e6bd5565
MM
4563 {
4564 lhs = build_non_dependent_expr (lhs);
4565 rhs = build_non_dependent_expr (rhs);
4566 }
239371f9
JJ
4567 }
4568 if (!dependent_p)
4569 {
c2255bc4 4570 stmt = c_finish_omp_atomic (input_location, code, lhs, rhs);
239371f9
JJ
4571 if (stmt == error_mark_node)
4572 return;
e6bd5565 4573 }
239371f9
JJ
4574 if (processing_template_decl)
4575 stmt = build2 (OMP_ATOMIC, void_type_node, integer_zero_node,
4576 build2 (code, void_type_node, orig_lhs, orig_rhs));
4577 add_stmt (stmt);
1799e5d5
RH
4578}
4579
4580void
4581finish_omp_barrier (void)
4582{
4583 tree fn = built_in_decls[BUILT_IN_GOMP_BARRIER];
c166b898
ILT
4584 VEC(tree,gc) *vec = make_tree_vector ();
4585 tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
4586 release_tree_vector (vec);
1799e5d5
RH
4587 finish_expr_stmt (stmt);
4588}
4589
4590void
4591finish_omp_flush (void)
4592{
4593 tree fn = built_in_decls[BUILT_IN_SYNCHRONIZE];
c166b898
ILT
4594 VEC(tree,gc) *vec = make_tree_vector ();
4595 tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
4596 release_tree_vector (vec);
1799e5d5
RH
4597 finish_expr_stmt (stmt);
4598}
4599
a68ab351
JJ
4600void
4601finish_omp_taskwait (void)
1799e5d5 4602{
a68ab351 4603 tree fn = built_in_decls[BUILT_IN_GOMP_TASKWAIT];
c166b898
ILT
4604 VEC(tree,gc) *vec = make_tree_vector ();
4605 tree stmt = finish_call_expr (fn, &vec, false, false, tf_warning_or_error);
4606 release_tree_vector (vec);
a68ab351 4607 finish_expr_stmt (stmt);
1799e5d5
RH
4608}
4609\f
54f7877c 4610void
3a978d72 4611init_cp_semantics (void)
54f7877c 4612{
54f7877c 4613}
55a3debe
DG
4614\f
4615/* Build a STATIC_ASSERT for a static assertion with the condition
4616 CONDITION and the message text MESSAGE. LOCATION is the location
4617 of the static assertion in the source code. When MEMBER_P, this
4618 static assertion is a member of a class. */
4619void
4620finish_static_assert (tree condition, tree message, location_t location,
4621 bool member_p)
4622{
7b3e2d46
DG
4623 if (check_for_bare_parameter_packs (condition))
4624 condition = error_mark_node;
4625
55a3debe
DG
4626 if (type_dependent_expression_p (condition)
4627 || value_dependent_expression_p (condition))
4628 {
4629 /* We're in a template; build a STATIC_ASSERT and put it in
4630 the right place. */
4631 tree assertion;
4632
4633 assertion = make_node (STATIC_ASSERT);
4634 STATIC_ASSERT_CONDITION (assertion) = condition;
4635 STATIC_ASSERT_MESSAGE (assertion) = message;
4636 STATIC_ASSERT_SOURCE_LOCATION (assertion) = location;
4637
4638 if (member_p)
4639 maybe_add_class_template_decl_list (current_class_type,
4640 assertion,
4641 /*friend_p=*/0);
4642 else
4643 add_stmt (assertion);
4644
4645 return;
4646 }
4647
4648 /* Fold the expression and convert it to a boolean value. */
4649 condition = fold_non_dependent_expr (condition);
4650 condition = cp_convert (boolean_type_node, condition);
4651
4652 if (TREE_CODE (condition) == INTEGER_CST && !integer_zerop (condition))
4653 /* Do nothing; the condition is satisfied. */
4654 ;
4655 else
4656 {
4657 location_t saved_loc = input_location;
4658
4659 input_location = location;
4660 if (TREE_CODE (condition) == INTEGER_CST
4661 && integer_zerop (condition))
4662 /* Report the error. */
4663 error ("static assertion failed: %E", message);
4664 else if (condition && condition != error_mark_node)
4665 error ("non-constant condition for static assertion");
4666 input_location = saved_loc;
4667 }
4668}
3ad6a8e1 4669\f
4b4a42c4
JM
4670/* Returns the type of EXPR for cases where we can determine it even though
4671 EXPR is a type-dependent expression. */
a77f94e2
JM
4672
4673tree
4674describable_type (tree expr)
4675{
4676 tree type = NULL_TREE;
4677
a77f94e2
JM
4678 if (! type_dependent_expression_p (expr)
4679 && ! type_unknown_p (expr))
4680 {
aef8bce8 4681 type = unlowered_expr_type (expr);
a77f94e2
JM
4682 if (real_lvalue_p (expr))
4683 type = build_reference_type (type);
4684 }
a77f94e2
JM
4685
4686 if (type)
4687 return type;
4688
4689 switch (TREE_CODE (expr))
4690 {
4691 case VAR_DECL:
4692 case PARM_DECL:
4693 case RESULT_DECL:
4694 case FUNCTION_DECL:
4b4a42c4 4695 return TREE_TYPE (expr);
a77f94e2
JM
4696 break;
4697
4698 case NEW_EXPR:
4699 case CONST_DECL:
4700 case TEMPLATE_PARM_INDEX:
4701 case CAST_EXPR:
4702 case STATIC_CAST_EXPR:
4703 case REINTERPRET_CAST_EXPR:
4704 case CONST_CAST_EXPR:
4705 case DYNAMIC_CAST_EXPR:
4706 type = TREE_TYPE (expr);
4707 break;
4708
4709 case INDIRECT_REF:
4710 {
4711 tree ptrtype = describable_type (TREE_OPERAND (expr, 0));
4712 if (ptrtype && POINTER_TYPE_P (ptrtype))
4713 type = build_reference_type (TREE_TYPE (ptrtype));
4714 }
4715 break;
4716
4717 default:
4718 if (TREE_CODE_CLASS (TREE_CODE (expr)) == tcc_constant)
4719 type = TREE_TYPE (expr);
4720 break;
4721 }
4722
4723 if (type && type_uses_auto (type))
4724 return NULL_TREE;
4725 else
4726 return type;
4727}
4728
3ad6a8e1
DG
4729/* Implements the C++0x decltype keyword. Returns the type of EXPR,
4730 suitable for use as a type-specifier.
4731
4732 ID_EXPRESSION_OR_MEMBER_ACCESS_P is true when EXPR was parsed as an
4733 id-expression or a class member access, FALSE when it was parsed as
4734 a full expression. */
a77f94e2 4735
3ad6a8e1
DG
4736tree
4737finish_decltype_type (tree expr, bool id_expression_or_member_access_p)
4738{
4739 tree orig_expr = expr;
056dd1af 4740 tree type = NULL_TREE;
3ad6a8e1 4741
e4fd5b87
DG
4742 if (!expr || error_operand_p (expr))
4743 return error_mark_node;
4744
7a547b93
JJ
4745 if (TYPE_P (expr)
4746 || TREE_CODE (expr) == TYPE_DECL
4747 || (TREE_CODE (expr) == BIT_NOT_EXPR
4748 && TYPE_P (TREE_OPERAND (expr, 0))))
4749 {
4750 error ("argument to decltype must be an expression");
4751 return error_mark_node;
4752 }
4753
21920fd1
JM
4754 if (type_dependent_expression_p (expr)
4755 /* In a template, a COMPONENT_REF has an IDENTIFIER_NODE for op1 even
4756 if it isn't dependent, so that we can check access control at
4757 instantiation time, so defer the decltype as well (PR 42277). */
4758 || (id_expression_or_member_access_p
4759 && processing_template_decl
4760 && TREE_CODE (expr) == COMPONENT_REF))
3ad6a8e1 4761 {
a77f94e2
JM
4762 if (id_expression_or_member_access_p)
4763 {
4764 switch (TREE_CODE (expr))
4765 {
4766 case VAR_DECL:
4767 case PARM_DECL:
4768 case RESULT_DECL:
4769 case FUNCTION_DECL:
4770 case CONST_DECL:
4771 case TEMPLATE_PARM_INDEX:
4772 type = TREE_TYPE (expr);
4773 break;
4774
4775 default:
4776 break;
4777 }
4778 }
a77f94e2
JM
4779
4780 if (type && !type_uses_auto (type))
4781 return type;
4782
d1c05c88 4783 treat_as_dependent:
9e1e64ec 4784 type = cxx_make_type (DECLTYPE_TYPE);
3ad6a8e1
DG
4785 DECLTYPE_TYPE_EXPR (type) = expr;
4786 DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (type)
4787 = id_expression_or_member_access_p;
4788 SET_TYPE_STRUCTURAL_EQUALITY (type);
4789
4790 return type;
4791 }
4792
4793 /* The type denoted by decltype(e) is defined as follows: */
4794
ccb05613 4795 expr = resolve_nondeduced_context (expr);
48326487
JM
4796
4797 /* To get the size of a static data member declared as an array of
4798 unknown bound, we need to instantiate it. */
4799 if (TREE_CODE (expr) == VAR_DECL
4800 && VAR_HAD_UNKNOWN_BOUND (expr)
4801 && DECL_TEMPLATE_INSTANTIATION (expr))
4802 instantiate_decl (expr, /*defer_ok*/true, /*expl_inst_mem*/false);
4803
3ad6a8e1
DG
4804 if (id_expression_or_member_access_p)
4805 {
4806 /* If e is an id-expression or a class member access (5.2.5
4807 [expr.ref]), decltype(e) is defined as the type of the entity
4808 named by e. If there is no such entity, or e names a set of
4809 overloaded functions, the program is ill-formed. */
4810 if (TREE_CODE (expr) == IDENTIFIER_NODE)
4811 expr = lookup_name (expr);
4812
4813 if (TREE_CODE (expr) == INDIRECT_REF)
4814 /* This can happen when the expression is, e.g., "a.b". Just
4815 look at the underlying operand. */
4816 expr = TREE_OPERAND (expr, 0);
4817
4818 if (TREE_CODE (expr) == OFFSET_REF
4819 || TREE_CODE (expr) == MEMBER_REF)
4820 /* We're only interested in the field itself. If it is a
4821 BASELINK, we will need to see through it in the next
4822 step. */
4823 expr = TREE_OPERAND (expr, 1);
4824
4825 if (TREE_CODE (expr) == BASELINK)
4826 /* See through BASELINK nodes to the underlying functions. */
4827 expr = BASELINK_FUNCTIONS (expr);
4828
ccb05613
JM
4829 if (TREE_CODE (expr) == TEMPLATE_ID_EXPR)
4830 expr = TREE_OPERAND (expr, 0);
4831
3ad6a8e1
DG
4832 if (TREE_CODE (expr) == OVERLOAD)
4833 {
ccb05613
JM
4834 if (OVL_CHAIN (expr)
4835 || TREE_CODE (OVL_FUNCTION (expr)) == TEMPLATE_DECL)
3ad6a8e1
DG
4836 {
4837 error ("%qE refers to a set of overloaded functions", orig_expr);
4838 return error_mark_node;
4839 }
4840 else
4841 /* An overload set containing only one function: just look
4842 at that function. */
4843 expr = OVL_FUNCTION (expr);
4844 }
4845
4846 switch (TREE_CODE (expr))
4847 {
4848 case FIELD_DECL:
e76d7cc7 4849 if (DECL_BIT_FIELD_TYPE (expr))
3ad6a8e1
DG
4850 {
4851 type = DECL_BIT_FIELD_TYPE (expr);
4852 break;
4853 }
4854 /* Fall through for fields that aren't bitfields. */
4855
4856 case FUNCTION_DECL:
4857 case VAR_DECL:
4858 case CONST_DECL:
4859 case PARM_DECL:
4860 case RESULT_DECL:
088d4f95 4861 case TEMPLATE_PARM_INDEX:
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:
4870 type = is_bitfield_expr_with_lowered_type (expr);
4871 if (!type)
4872 type = TREE_TYPE (TREE_OPERAND (expr, 1));
4873 break;
4874
4875 case BIT_FIELD_REF:
4876 gcc_unreachable ();
4877
4878 case INTEGER_CST:
4879 /* We can get here when the id-expression refers to an
4880 enumerator. */
4881 type = TREE_TYPE (expr);
4882 break;
4883
4884 default:
91929b4d
JJ
4885 gcc_assert (TYPE_P (expr) || DECL_P (expr)
4886 || TREE_CODE (expr) == SCOPE_REF);
3ad6a8e1
DG
4887 error ("argument to decltype must be an expression");
4888 return error_mark_node;
4889 }
4890 }
4891 else
4892 {
e4fd5b87
DG
4893 /* Expressions of reference type are sometimes wrapped in
4894 INDIRECT_REFs. INDIRECT_REFs are just internal compiler
4895 representation, not part of the language, so we have to look
4896 through them. */
4897 if (TREE_CODE (expr) == INDIRECT_REF
4898 && TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0)))
4899 == REFERENCE_TYPE)
4900 expr = TREE_OPERAND (expr, 0);
4901
ed85a1f6
DG
4902 if (TREE_CODE (expr) == CALL_EXPR)
4903 {
4904 /* If e is a function call (5.2.2 [expr.call]) or an
3ad6a8e1
DG
4905 invocation of an overloaded operator (parentheses around e
4906 are ignored), decltype(e) is defined as the return type of
4907 that function. */
ed85a1f6
DG
4908 tree fndecl = get_callee_fndecl (expr);
4909 if (fndecl && fndecl != error_mark_node)
4910 type = TREE_TYPE (TREE_TYPE (fndecl));
4911 else
4912 {
4913 tree target_type = TREE_TYPE (CALL_EXPR_FN (expr));
4914 if ((TREE_CODE (target_type) == REFERENCE_TYPE
4915 || TREE_CODE (target_type) == POINTER_TYPE)
4916 && (TREE_CODE (TREE_TYPE (target_type)) == FUNCTION_TYPE
4917 || TREE_CODE (TREE_TYPE (target_type)) == METHOD_TYPE))
4918 type = TREE_TYPE (TREE_TYPE (target_type));
d1c05c88
JM
4919 else if (processing_template_decl)
4920 /* Within a template finish_call_expr doesn't resolve
4921 CALL_EXPR_FN, so even though this decltype isn't really
4922 dependent let's defer resolving it. */
4923 goto treat_as_dependent;
ed85a1f6
DG
4924 else
4925 sorry ("unable to determine the declared type of expression %<%E%>",
4926 expr);
4927 }
4928 }
3ad6a8e1
DG
4929 else
4930 {
4931 type = is_bitfield_expr_with_lowered_type (expr);
4932 if (type)
4933 {
4934 /* Bitfields are special, because their type encodes the
4935 number of bits they store. If the expression referenced a
4936 bitfield, TYPE now has the declared type of that
4937 bitfield. */
4938 type = cp_build_qualified_type (type,
4939 cp_type_quals (TREE_TYPE (expr)));
4940
4941 if (real_lvalue_p (expr))
4942 type = build_reference_type (type);
4943 }
d5f4eddd
JM
4944 /* Within a lambda-expression:
4945
4946 Every occurrence of decltype((x)) where x is a possibly
4947 parenthesized id-expression that names an entity of
4948 automatic storage duration is treated as if x were
4949 transformed into an access to a corresponding data member
4950 of the closure type that would have been declared if x
4951 were a use of the denoted entity. */
4952 else if (outer_automatic_var_p (expr)
4953 && current_function_decl
4954 && LAMBDA_FUNCTION_P (current_function_decl))
4955 type = capture_decltype (expr);
3ad6a8e1
DG
4956 else
4957 {
4958 /* Otherwise, where T is the type of e, if e is an lvalue,
4959 decltype(e) is defined as T&, otherwise decltype(e) is
4960 defined as T. */
4961 type = TREE_TYPE (expr);
e4fd5b87
DG
4962 if (type == error_mark_node)
4963 return error_mark_node;
4964 else if (expr == current_class_ptr)
3ad6a8e1
DG
4965 /* If the expression is just "this", we want the
4966 cv-unqualified pointer for the "this" type. */
4967 type = TYPE_MAIN_VARIANT (type);
4968 else if (real_lvalue_p (expr))
4969 {
4970 if (TREE_CODE (type) != REFERENCE_TYPE)
4971 type = build_reference_type (type);
4972 }
4973 else
4974 type = non_reference (type);
4975 }
4976 }
4977 }
4978
4979 if (!type || type == unknown_type_node)
4980 {
4981 error ("type of %qE is unknown", expr);
4982 return error_mark_node;
4983 }
4984
4985 return type;
4986}
cf22909c 4987
b29441ec
PC
4988/* Called from trait_expr_value to evaluate either __has_nothrow_assign or
4989 __has_nothrow_copy, depending on assign_p. */
cb68ec50
PC
4990
4991static bool
b29441ec 4992classtype_has_nothrow_assign_or_copy_p (tree type, bool assign_p)
cb68ec50 4993{
b29441ec 4994 tree fns;
cb68ec50 4995
b29441ec
PC
4996 if (assign_p)
4997 {
4998 int ix;
4999 ix = lookup_fnfields_1 (type, ansi_assopname (NOP_EXPR));
5000 if (ix < 0)
cb68ec50 5001 return false;
b29441ec
PC
5002 fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), ix);
5003 }
5004 else if (TYPE_HAS_INIT_REF (type))
5005 {
5006 /* If construction of the copy constructor was postponed, create
5007 it now. */
5008 if (CLASSTYPE_LAZY_COPY_CTOR (type))
5009 lazily_declare_fn (sfk_copy_constructor, type);
d5f4eddd
JM
5010 if (CLASSTYPE_LAZY_MOVE_CTOR (type))
5011 lazily_declare_fn (sfk_move_constructor, type);
b29441ec 5012 fns = CLASSTYPE_CONSTRUCTORS (type);
cb68ec50
PC
5013 }
5014 else
5015 return false;
5016
b29441ec 5017 for (; fns; fns = OVL_NEXT (fns))
279086c3
PC
5018 {
5019 tree fn = OVL_CURRENT (fns);
5020
5021 if (assign_p)
5022 {
5023 if (copy_fn_p (fn) == 0)
5024 continue;
5025 }
5026 else if (copy_fn_p (fn) <= 0)
5027 continue;
5028
5029 if (!TYPE_NOTHROW_P (TREE_TYPE (fn)))
5030 return false;
5031 }
b29441ec 5032
cb68ec50
PC
5033 return true;
5034}
5035
5036/* Actually evaluates the trait. */
5037
5038static bool
5039trait_expr_value (cp_trait_kind kind, tree type1, tree type2)
5040{
5041 enum tree_code type_code1;
5042 tree t;
5043
5044 type_code1 = TREE_CODE (type1);
5045
5046 switch (kind)
5047 {
5048 case CPTK_HAS_NOTHROW_ASSIGN:
c32097d8 5049 type1 = strip_array_types (type1);
b29441ec
PC
5050 return (!CP_TYPE_CONST_P (type1) && type_code1 != REFERENCE_TYPE
5051 && (trait_expr_value (CPTK_HAS_TRIVIAL_ASSIGN, type1, type2)
5052 || (CLASS_TYPE_P (type1)
5053 && classtype_has_nothrow_assign_or_copy_p (type1,
5054 true))));
cb68ec50
PC
5055
5056 case CPTK_HAS_TRIVIAL_ASSIGN:
c32097d8
JM
5057 /* ??? The standard seems to be missing the "or array of such a class
5058 type" wording for this trait. */
5059 type1 = strip_array_types (type1);
cb68ec50 5060 return (!CP_TYPE_CONST_P (type1) && type_code1 != REFERENCE_TYPE
c32097d8 5061 && (trivial_type_p (type1)
cb68ec50
PC
5062 || (CLASS_TYPE_P (type1)
5063 && TYPE_HAS_TRIVIAL_ASSIGN_REF (type1))));
5064
5065 case CPTK_HAS_NOTHROW_CONSTRUCTOR:
5066 type1 = strip_array_types (type1);
5067 return (trait_expr_value (CPTK_HAS_TRIVIAL_CONSTRUCTOR, type1, type2)
5068 || (CLASS_TYPE_P (type1)
e24313f3
PC
5069 && (t = locate_ctor (type1, NULL))
5070 && TYPE_NOTHROW_P (TREE_TYPE (t))));
cb68ec50
PC
5071
5072 case CPTK_HAS_TRIVIAL_CONSTRUCTOR:
5073 type1 = strip_array_types (type1);
c32097d8 5074 return (trivial_type_p (type1)
cb68ec50
PC
5075 || (CLASS_TYPE_P (type1) && TYPE_HAS_TRIVIAL_DFLT (type1)));
5076
5077 case CPTK_HAS_NOTHROW_COPY:
c32097d8 5078 type1 = strip_array_types (type1);
cb68ec50
PC
5079 return (trait_expr_value (CPTK_HAS_TRIVIAL_COPY, type1, type2)
5080 || (CLASS_TYPE_P (type1)
b29441ec 5081 && classtype_has_nothrow_assign_or_copy_p (type1, false)));
cb68ec50
PC
5082
5083 case CPTK_HAS_TRIVIAL_COPY:
c32097d8
JM
5084 /* ??? The standard seems to be missing the "or array of such a class
5085 type" wording for this trait. */
5086 type1 = strip_array_types (type1);
5087 return (trivial_type_p (type1) || type_code1 == REFERENCE_TYPE
cb68ec50
PC
5088 || (CLASS_TYPE_P (type1) && TYPE_HAS_TRIVIAL_INIT_REF (type1)));
5089
5090 case CPTK_HAS_TRIVIAL_DESTRUCTOR:
5091 type1 = strip_array_types (type1);
c32097d8 5092 return (trivial_type_p (type1) || type_code1 == REFERENCE_TYPE
cb68ec50
PC
5093 || (CLASS_TYPE_P (type1)
5094 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type1)));
5095
5096 case CPTK_HAS_VIRTUAL_DESTRUCTOR:
5097 return (CLASS_TYPE_P (type1)
5098 && (t = locate_dtor (type1, NULL)) && DECL_VIRTUAL_P (t));
5099
5100 case CPTK_IS_ABSTRACT:
5101 return (CLASS_TYPE_P (type1) && CLASSTYPE_PURE_VIRTUALS (type1));
5102
5103 case CPTK_IS_BASE_OF:
5104 return (NON_UNION_CLASS_TYPE_P (type1) && NON_UNION_CLASS_TYPE_P (type2)
5105 && DERIVED_FROM_P (type1, type2));
5106
5107 case CPTK_IS_CLASS:
5108 return (NON_UNION_CLASS_TYPE_P (type1));
5109
5110 case CPTK_IS_CONVERTIBLE_TO:
5111 /* TODO */
5112 return false;
5113
5114 case CPTK_IS_EMPTY:
5115 return (NON_UNION_CLASS_TYPE_P (type1) && CLASSTYPE_EMPTY_P (type1));
5116
5117 case CPTK_IS_ENUM:
5118 return (type_code1 == ENUMERAL_TYPE);
5119
5120 case CPTK_IS_POD:
5121 return (pod_type_p (type1));
5122
5123 case CPTK_IS_POLYMORPHIC:
5124 return (CLASS_TYPE_P (type1) && TYPE_POLYMORPHIC_P (type1));
5125
c32097d8
JM
5126 case CPTK_IS_STD_LAYOUT:
5127 return (std_layout_type_p (type1));
5128
5129 case CPTK_IS_TRIVIAL:
5130 return (trivial_type_p (type1));
5131
cb68ec50
PC
5132 case CPTK_IS_UNION:
5133 return (type_code1 == UNION_TYPE);
5134
5135 default:
5136 gcc_unreachable ();
5137 return false;
5138 }
5139}
5140
ff284b4b
PC
5141/* Returns true if TYPE is a complete type, an array of unknown bound,
5142 or (possibly cv-qualified) void, returns false otherwise. */
5143
5144static bool
5145check_trait_type (tree type)
5146{
5147 if (COMPLETE_TYPE_P (type))
5148 return true;
5149
5150 if (TREE_CODE (type) == ARRAY_TYPE && !TYPE_DOMAIN (type))
5151 return true;
5152
5153 if (VOID_TYPE_P (type))
5154 return true;
5155
5156 return false;
5157}
5158
cb68ec50
PC
5159/* Process a trait expression. */
5160
5161tree
5162finish_trait_expr (cp_trait_kind kind, tree type1, tree type2)
5163{
5164 gcc_assert (kind == CPTK_HAS_NOTHROW_ASSIGN
5165 || kind == CPTK_HAS_NOTHROW_CONSTRUCTOR
5166 || kind == CPTK_HAS_NOTHROW_COPY
5167 || kind == CPTK_HAS_TRIVIAL_ASSIGN
5168 || kind == CPTK_HAS_TRIVIAL_CONSTRUCTOR
5169 || kind == CPTK_HAS_TRIVIAL_COPY
5170 || kind == CPTK_HAS_TRIVIAL_DESTRUCTOR
5171 || kind == CPTK_HAS_VIRTUAL_DESTRUCTOR
5172 || kind == CPTK_IS_ABSTRACT
5173 || kind == CPTK_IS_BASE_OF
5174 || kind == CPTK_IS_CLASS
5175 || kind == CPTK_IS_CONVERTIBLE_TO
5176 || kind == CPTK_IS_EMPTY
5177 || kind == CPTK_IS_ENUM
5178 || kind == CPTK_IS_POD
5179 || kind == CPTK_IS_POLYMORPHIC
c32097d8
JM
5180 || kind == CPTK_IS_STD_LAYOUT
5181 || kind == CPTK_IS_TRIVIAL
cb68ec50
PC
5182 || kind == CPTK_IS_UNION);
5183
5184 if (kind == CPTK_IS_CONVERTIBLE_TO)
5185 {
5186 sorry ("__is_convertible_to");
5187 return error_mark_node;
5188 }
5189
5190 if (type1 == error_mark_node
5191 || ((kind == CPTK_IS_BASE_OF || kind == CPTK_IS_CONVERTIBLE_TO)
5192 && type2 == error_mark_node))
5193 return error_mark_node;
5194
5195 if (processing_template_decl)
5196 {
5197 tree trait_expr = make_node (TRAIT_EXPR);
5198 TREE_TYPE (trait_expr) = boolean_type_node;
5199 TRAIT_EXPR_TYPE1 (trait_expr) = type1;
5200 TRAIT_EXPR_TYPE2 (trait_expr) = type2;
5201 TRAIT_EXPR_KIND (trait_expr) = kind;
5202 return trait_expr;
5203 }
5204
10c1d4af
PC
5205 complete_type (type1);
5206 if (type2)
5207 complete_type (type2);
5208
ff284b4b 5209 switch (kind)
cb68ec50 5210 {
ff284b4b
PC
5211 case CPTK_HAS_NOTHROW_ASSIGN:
5212 case CPTK_HAS_TRIVIAL_ASSIGN:
5213 case CPTK_HAS_NOTHROW_CONSTRUCTOR:
5214 case CPTK_HAS_TRIVIAL_CONSTRUCTOR:
5215 case CPTK_HAS_NOTHROW_COPY:
5216 case CPTK_HAS_TRIVIAL_COPY:
5217 case CPTK_HAS_TRIVIAL_DESTRUCTOR:
5218 case CPTK_HAS_VIRTUAL_DESTRUCTOR:
5219 case CPTK_IS_ABSTRACT:
5220 case CPTK_IS_EMPTY:
5221 case CPTK_IS_POD:
5222 case CPTK_IS_POLYMORPHIC:
c32097d8
JM
5223 case CPTK_IS_STD_LAYOUT:
5224 case CPTK_IS_TRIVIAL:
ff284b4b
PC
5225 if (!check_trait_type (type1))
5226 {
5227 error ("incomplete type %qT not allowed", type1);
5228 return error_mark_node;
5229 }
5230 break;
5231
5232 case CPTK_IS_BASE_OF:
5233 if (NON_UNION_CLASS_TYPE_P (type1) && NON_UNION_CLASS_TYPE_P (type2)
5234 && !same_type_ignoring_top_level_qualifiers_p (type1, type2)
5235 && !COMPLETE_TYPE_P (type2))
5236 {
5237 error ("incomplete type %qT not allowed", type2);
5238 return error_mark_node;
5239 }
5240 break;
5241
5242 case CPTK_IS_CLASS:
5243 case CPTK_IS_ENUM:
5244 case CPTK_IS_UNION:
5245 break;
5246
5247 case CPTK_IS_CONVERTIBLE_TO:
5248 default:
5249 gcc_unreachable ();
cb68ec50
PC
5250 }
5251
5252 return (trait_expr_value (kind, type1, type2)
5253 ? boolean_true_node : boolean_false_node);
5254}
5255
6ec637a4
JJ
5256/* Do-nothing variants of functions to handle pragma FLOAT_CONST_DECIMAL64,
5257 which is ignored for C++. */
5258
5259void
5260set_float_const_decimal64 (void)
5261{
5262}
5263
5264void
5265clear_float_const_decimal64 (void)
5266{
5267}
5268
5269bool
5270float_const_decimal64_p (void)
5271{
5272 return 0;
5273}
5274
7ecbca9d
GDR
5275/* Return true if T is a literal type. */
5276
5277bool
5278literal_type_p (tree t)
5279{
5280 if (SCALAR_TYPE_P (t))
5281 return true;
5282 if (CLASS_TYPE_P (t))
5283 return CLASSTYPE_LITERAL_P (t);
5284 if (TREE_CODE (t) == ARRAY_TYPE)
5285 return literal_type_p (strip_array_types (t));
5286 return false;
5287}
5288
5289
5290/* If DECL is a variable declared `constexpr', require its type
5291 be literal. Return the DECL if OK, otherwise NULL. */
5292
5293tree
5294ensure_literal_type_for_constexpr_object (tree decl)
5295{
5296 tree type = TREE_TYPE (decl);
5297 if (TREE_CODE (decl) == VAR_DECL && DECL_DECLARED_CONSTEXPR_P (decl)
5298 && !processing_template_decl && !literal_type_p (type))
5299 {
5300 error ("the type %qT of constexpr variable %qD is not literal",
5301 type, decl);
5302 return NULL;
5303 }
5304 return decl;
5305}
5306
5307/* Return non-null if FUN certainly designates a valid constexpr function
5308 declaration. Otherwise return NULL. Issue appropriate diagnostics
5309 if necessary. Note that we only check the declaration, not the body
5310 of the function. */
5311
5312tree
5313validate_constexpr_fundecl (tree fun)
5314{
5315 tree rettype = NULL;
5316 tree parm = NULL;
5317
5318 /* Don't bother if FUN is not marked constexpr. */
5319 if (!DECL_DECLARED_CONSTEXPR_P (fun))
5320 return NULL;
5321
5322 /* For a function template, we have absolutely no guarantee that all
5323 instantiations will be constexpr. */
5324 if (TREE_CODE (fun) == TEMPLATE_DECL)
5325 return NULL;
5326
5327 parm = FUNCTION_FIRST_USER_PARM (fun);
5328 for (; parm != NULL; parm = TREE_CHAIN (parm))
5329 {
5330 tree type = TREE_TYPE (parm);
5331 if (dependent_type_p (type))
5332 return NULL;
5333 if (!literal_type_p (type))
5334 {
5335 error ("parameter %q#D is not of literal type", parm);
5336 return NULL;
5337 }
5338 }
5339
5340 if (DECL_CONSTRUCTOR_P (fun))
5341 return fun;
5342
5343 rettype = TREE_TYPE (TREE_TYPE (fun));
5344 if (dependent_type_p (rettype))
5345 return NULL;
5346 if (!literal_type_p (rettype))
5347 {
5348 error ("return type %qT of function %qD is not a literal type",
5349 TREE_TYPE (TREE_TYPE (fun)), fun);
5350 return NULL;
5351 }
5352 return fun;
5353}
5354
5355
d5f4eddd
JM
5356/* Constructor for a lambda expression. */
5357
5358tree
5359build_lambda_expr (void)
5360{
5361 tree lambda = make_node (LAMBDA_EXPR);
5362 LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) = CPLD_NONE;
5363 LAMBDA_EXPR_CAPTURE_LIST (lambda) = NULL_TREE;
5364 LAMBDA_EXPR_THIS_CAPTURE (lambda) = NULL_TREE;
5365 LAMBDA_EXPR_RETURN_TYPE (lambda) = NULL_TREE;
5366 LAMBDA_EXPR_MUTABLE_P (lambda) = false;
5367 return lambda;
5368}
5369
5370/* Create the closure object for a LAMBDA_EXPR. */
5371
5372tree
5373build_lambda_object (tree lambda_expr)
5374{
5375 /* Build aggregate constructor call.
5376 - cp_parser_braced_list
5377 - cp_parser_functional_cast */
5378 VEC(constructor_elt,gc) *elts = NULL;
5379 tree node, expr, type;
5380 location_t saved_loc;
5381
5382 if (processing_template_decl)
5383 return lambda_expr;
5384
5385 /* Make sure any error messages refer to the lambda-introducer. */
5386 saved_loc = input_location;
5387 input_location = LAMBDA_EXPR_LOCATION (lambda_expr);
5388
5389 for (node = LAMBDA_EXPR_CAPTURE_LIST (lambda_expr);
5390 node;
5391 node = TREE_CHAIN (node))
5392 {
5393 tree field = TREE_PURPOSE (node);
5394 tree val = TREE_VALUE (node);
5395
1f4a7a48
JM
5396 if (DECL_P (val))
5397 mark_used (val);
5398
d5f4eddd
JM
5399 /* Mere mortals can't copy arrays with aggregate initialization, so
5400 do some magic to make it work here. */
5401 if (TREE_CODE (TREE_TYPE (field)) == ARRAY_TYPE)
5402 val = build_array_copy (val);
37a7519a
JM
5403 else if (DECL_NORMAL_CAPTURE_P (field)
5404 && TREE_CODE (TREE_TYPE (field)) != REFERENCE_TYPE)
5405 {
5406 /* "the entities that are captured by copy are used to
5407 direct-initialize each corresponding non-static data
5408 member of the resulting closure object."
5409
5410 There's normally no way to express direct-initialization
5411 from an element of a CONSTRUCTOR, so we build up a special
5412 TARGET_EXPR to bypass the usual copy-initialization. */
5413 val = force_rvalue (val);
5414 if (TREE_CODE (val) == TARGET_EXPR)
5415 TARGET_EXPR_DIRECT_INIT_P (val) = true;
5416 }
d5f4eddd
JM
5417
5418 CONSTRUCTOR_APPEND_ELT (elts, DECL_NAME (field), val);
5419 }
5420
5421 expr = build_constructor (init_list_type_node, elts);
5422 CONSTRUCTOR_IS_DIRECT_INIT (expr) = 1;
5423
5424 /* N2927: "[The closure] class type is not an aggregate."
5425 But we briefly treat it as an aggregate to make this simpler. */
5426 type = TREE_TYPE (lambda_expr);
5427 CLASSTYPE_NON_AGGREGATE (type) = 0;
5428 expr = finish_compound_literal (type, expr);
5429 CLASSTYPE_NON_AGGREGATE (type) = 1;
5430
5431 input_location = saved_loc;
5432 return expr;
5433}
5434
5435/* Return an initialized RECORD_TYPE for LAMBDA.
5436 LAMBDA must have its explicit captures already. */
5437
5438tree
5439begin_lambda_type (tree lambda)
5440{
5441 tree type;
5442
5443 {
5444 /* Unique name. This is just like an unnamed class, but we cannot use
5445 make_anon_name because of certain checks against TYPE_ANONYMOUS_P. */
5446 tree name;
5447 name = make_lambda_name ();
5448
5449 /* Create the new RECORD_TYPE for this lambda. */
5450 type = xref_tag (/*tag_code=*/record_type,
5451 name,
5452 /*scope=*/ts_within_enclosing_non_class,
5453 /*template_header_p=*/false);
5454 }
5455
5456 /* Designate it as a struct so that we can use aggregate initialization. */
5457 CLASSTYPE_DECLARED_CLASS (type) = false;
5458
5459 /* Clear base types. */
5460 xref_basetypes (type, /*bases=*/NULL_TREE);
5461
5462 /* Start the class. */
5463 type = begin_class_definition (type, /*attributes=*/NULL_TREE);
5464
5465 /* Cross-reference the expression and the type. */
5466 TREE_TYPE (lambda) = type;
5467 CLASSTYPE_LAMBDA_EXPR (type) = lambda;
5468
5469 return type;
5470}
5471
5472/* Returns the type to use for the return type of the operator() of a
5473 closure class. */
5474
5475tree
5476lambda_return_type (tree expr)
5477{
5478 tree type;
95b24c84
JM
5479 if (BRACE_ENCLOSED_INITIALIZER_P (expr))
5480 {
5481 warning (0, "cannot deduce lambda return type from a braced-init-list");
5482 return void_type_node;
5483 }
d5f4eddd
JM
5484 if (type_dependent_expression_p (expr))
5485 {
5486 type = cxx_make_type (DECLTYPE_TYPE);
5487 DECLTYPE_TYPE_EXPR (type) = expr;
5488 DECLTYPE_FOR_LAMBDA_RETURN (type) = true;
5489 SET_TYPE_STRUCTURAL_EQUALITY (type);
5490 }
5491 else
5492 type = type_decays_to (unlowered_expr_type (expr));
5493 return type;
5494}
5495
5496/* Given a LAMBDA_EXPR or closure type LAMBDA, return the op() of the
5497 closure type. */
5498
5499tree
5500lambda_function (tree lambda)
5501{
5502 tree type;
5503 if (TREE_CODE (lambda) == LAMBDA_EXPR)
5504 type = TREE_TYPE (lambda);
5505 else
5506 type = lambda;
5507 gcc_assert (LAMBDA_TYPE_P (type));
5508 /* Don't let debug_tree cause instantiation. */
5509 if (CLASSTYPE_TEMPLATE_INSTANTIATION (type) && !COMPLETE_TYPE_P (type))
5510 return NULL_TREE;
5511 lambda = lookup_member (type, ansi_opname (CALL_EXPR),
5512 /*protect=*/0, /*want_type=*/false);
5513 if (lambda)
5514 lambda = BASELINK_FUNCTIONS (lambda);
5515 return lambda;
5516}
5517
5518/* Returns the type to use for the FIELD_DECL corresponding to the
5519 capture of EXPR.
5520 The caller should add REFERENCE_TYPE for capture by reference. */
5521
5522tree
5523lambda_capture_field_type (tree expr)
5524{
5525 tree type;
5526 if (type_dependent_expression_p (expr))
5527 {
5528 type = cxx_make_type (DECLTYPE_TYPE);
5529 DECLTYPE_TYPE_EXPR (type) = expr;
5530 DECLTYPE_FOR_LAMBDA_CAPTURE (type) = true;
5531 SET_TYPE_STRUCTURAL_EQUALITY (type);
5532 }
5533 else
5534 type = non_reference (unlowered_expr_type (expr));
5535 return type;
5536}
5537
5538/* Recompute the return type for LAMBDA with body of the form:
5539 { return EXPR ; } */
5540
5541void
5542apply_lambda_return_type (tree lambda, tree return_type)
5543{
5544 tree fco = lambda_function (lambda);
5545 tree result;
5546
5547 LAMBDA_EXPR_RETURN_TYPE (lambda) = return_type;
5548
5549 /* If we got a DECLTYPE_TYPE, don't stick it in the function yet,
5550 it would interfere with instantiating the closure type. */
5551 if (dependent_type_p (return_type))
5552 return;
5553 if (return_type == error_mark_node)
5554 return;
5555
5556 /* TREE_TYPE (FUNCTION_DECL) == METHOD_TYPE
5557 TREE_TYPE (METHOD_TYPE) == return-type */
643d4cd6 5558 TREE_TYPE (fco) = change_return_type (return_type, TREE_TYPE (fco));
d5f4eddd
JM
5559
5560 result = DECL_RESULT (fco);
5561 if (result == NULL_TREE)
5562 return;
5563
5564 /* We already have a DECL_RESULT from start_preparsed_function.
5565 Now we need to redo the work it and allocate_struct_function
5566 did to reflect the new type. */
5567 result = build_decl (input_location, RESULT_DECL, NULL_TREE,
5568 TYPE_MAIN_VARIANT (return_type));
5569 DECL_ARTIFICIAL (result) = 1;
5570 DECL_IGNORED_P (result) = 1;
5571 cp_apply_type_quals_to_decl (cp_type_quals (return_type),
5572 result);
5573
5574 DECL_RESULT (fco) = result;
5575
5576 if (!processing_template_decl && aggregate_value_p (result, fco))
5577 {
5578#ifdef PCC_STATIC_STRUCT_RETURN
5579 cfun->returns_pcc_struct = 1;
5580#endif
5581 cfun->returns_struct = 1;
5582 }
5583
5584}
5585
5586/* DECL is a local variable or parameter from the surrounding scope of a
5587 lambda-expression. Returns the decltype for a use of the capture field
5588 for DECL even if it hasn't been captured yet. */
5589
5590static tree
5591capture_decltype (tree decl)
5592{
5593 tree lam = CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (current_function_decl));
5594 /* FIXME do lookup instead of list walk? */
5595 tree cap = value_member (decl, LAMBDA_EXPR_CAPTURE_LIST (lam));
5596 tree type;
5597
5598 if (cap)
5599 type = TREE_TYPE (TREE_PURPOSE (cap));
5600 else
5601 switch (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lam))
5602 {
5603 case CPLD_NONE:
5604 error ("%qD is not captured", decl);
5605 return error_mark_node;
5606
5607 case CPLD_COPY:
5608 type = TREE_TYPE (decl);
5609 if (TREE_CODE (type) == REFERENCE_TYPE
5610 && TREE_CODE (TREE_TYPE (type)) != FUNCTION_TYPE)
5611 type = TREE_TYPE (type);
5612 break;
5613
5614 case CPLD_REFERENCE:
5615 type = TREE_TYPE (decl);
5616 if (TREE_CODE (type) != REFERENCE_TYPE)
5617 type = build_reference_type (TREE_TYPE (decl));
5618 break;
5619
5620 default:
5621 gcc_unreachable ();
5622 }
5623
5624 if (TREE_CODE (type) != REFERENCE_TYPE)
5625 {
5626 if (!LAMBDA_EXPR_MUTABLE_P (lam))
5627 type = cp_build_qualified_type (type, (TYPE_QUALS (type)
5628 |TYPE_QUAL_CONST));
5629 type = build_reference_type (type);
5630 }
5631 return type;
5632}
5633
5634/* From an ID and INITIALIZER, create a capture (by reference if
5635 BY_REFERENCE_P is true), add it to the capture-list for LAMBDA,
5636 and return it. */
5637
5638tree
37a7519a
JM
5639add_capture (tree lambda, tree id, tree initializer, bool by_reference_p,
5640 bool explicit_init_p)
d5f4eddd
JM
5641{
5642 tree type;
5643 tree member;
5644
5645 type = lambda_capture_field_type (initializer);
5646 if (by_reference_p)
5647 {
5648 type = build_reference_type (type);
5649 if (!real_lvalue_p (initializer))
5650 error ("cannot capture %qE by reference", initializer);
5651 }
5652
5653 /* Make member variable. */
5654 member = build_lang_decl (FIELD_DECL, id, type);
37a7519a
JM
5655 if (!explicit_init_p)
5656 /* Normal captures are invisible to name lookup but uses are replaced
5657 with references to the capture field; we implement this by only
5658 really making them invisible in unevaluated context; see
5659 qualify_lookup. For now, let's make explicitly initialized captures
5660 always visible. */
5661 DECL_NORMAL_CAPTURE_P (member) = true;
d5f4eddd 5662
19030d77
JM
5663 /* Add it to the appropriate closure class if we've started it. */
5664 if (current_class_type && current_class_type == TREE_TYPE (lambda))
5665 finish_member_declaration (member);
d5f4eddd
JM
5666
5667 LAMBDA_EXPR_CAPTURE_LIST (lambda)
5668 = tree_cons (member, initializer, LAMBDA_EXPR_CAPTURE_LIST (lambda));
5669
5670 if (id == get_identifier ("__this"))
5671 {
5672 if (LAMBDA_EXPR_CAPTURES_THIS_P (lambda))
5673 error ("already captured %<this%> in lambda expression");
5674 LAMBDA_EXPR_THIS_CAPTURE (lambda) = member;
5675 }
5676
5677 return member;
5678}
5679
19030d77
JM
5680/* Register all the capture members on the list CAPTURES, which is the
5681 LAMBDA_EXPR_CAPTURE_LIST for the lambda after the introducer. */
5682
5683void register_capture_members (tree captures)
5684{
5685 if (captures)
5686 {
5687 register_capture_members (TREE_CHAIN (captures));
5688 finish_member_declaration (TREE_PURPOSE (captures));
5689 }
5690}
5691
9660afe0
JM
5692/* Given a FIELD_DECL decl belonging to a closure type, return a
5693 COMPONENT_REF of it relative to the 'this' parameter of the op() for
5694 that type. */
5695
5696static tree
5697thisify_lambda_field (tree decl)
5698{
5699 tree context = lambda_function (DECL_CONTEXT (decl));
5700 tree object = cp_build_indirect_ref (DECL_ARGUMENTS (context),
dd865ef6 5701 RO_NULL,
9660afe0
JM
5702 tf_warning_or_error);
5703 return finish_non_static_data_member (decl, object,
5704 /*qualifying_scope*/NULL_TREE);
5705}
5706
d5f4eddd
JM
5707/* Similar to add_capture, except this works on a stack of nested lambdas.
5708 BY_REFERENCE_P in this case is derived from the default capture mode.
5709 Returns the capture for the lambda at the bottom of the stack. */
5710
5711tree
5712add_default_capture (tree lambda_stack, tree id, tree initializer)
5713{
5714 bool this_capture_p = (id == get_identifier ("__this"));
5715
5716 tree member = NULL_TREE;
5717
5718 tree saved_class_type = current_class_type;
5719
5720 tree node;
5721
5722 for (node = lambda_stack;
5723 node;
5724 node = TREE_CHAIN (node))
5725 {
5726 tree lambda = TREE_VALUE (node);
5727
5728 current_class_type = TREE_TYPE (lambda);
5729 member = add_capture (lambda,
5730 id,
5731 initializer,
5732 /*by_reference_p=*/
5733 (!this_capture_p
5734 && (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda)
37a7519a
JM
5735 == CPLD_REFERENCE)),
5736 /*explicit_init_p=*/false);
9660afe0 5737 initializer = thisify_lambda_field (member);
d5f4eddd
JM
5738 }
5739
5740 current_class_type = saved_class_type;
5741
5742 return member;
d5f4eddd
JM
5743}
5744
5745/* Return the capture pertaining to a use of 'this' in LAMBDA, in the form of an
5746 INDIRECT_REF, possibly adding it through default capturing. */
5747
5748tree
5749lambda_expr_this_capture (tree lambda)
5750{
5751 tree result;
5752
5753 tree this_capture = LAMBDA_EXPR_THIS_CAPTURE (lambda);
5754
5755 /* Try to default capture 'this' if we can. */
5756 if (!this_capture
5757 && LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) != CPLD_NONE)
5758 {
5759 tree containing_function = TYPE_CONTEXT (TREE_TYPE (lambda));
5760 tree lambda_stack = tree_cons (NULL_TREE, lambda, NULL_TREE);
71d16049 5761 tree init = NULL_TREE;
d5f4eddd
JM
5762
5763 /* If we are in a lambda function, we can move out until we hit:
5764 1. a non-lambda function,
5765 2. a lambda function capturing 'this', or
5766 3. a non-default capturing lambda function. */
5767 while (LAMBDA_FUNCTION_P (containing_function))
5768 {
5769 tree lambda
5770 = CLASSTYPE_LAMBDA_EXPR (DECL_CONTEXT (containing_function));
5771
71d16049
JM
5772 if (LAMBDA_EXPR_THIS_CAPTURE (lambda))
5773 {
5774 /* An outer lambda has already captured 'this'. */
5775 tree cap = LAMBDA_EXPR_THIS_CAPTURE (lambda);
92de1b37 5776 init = thisify_lambda_field (cap);
71d16049
JM
5777 break;
5778 }
5779
5780 if (LAMBDA_EXPR_DEFAULT_CAPTURE_MODE (lambda) == CPLD_NONE)
5781 /* An outer lambda won't let us capture 'this'. */
5782 break;
d5f4eddd
JM
5783
5784 lambda_stack = tree_cons (NULL_TREE,
5785 lambda,
5786 lambda_stack);
5787
5788 containing_function = decl_function_context (containing_function);
5789 }
5790
71d16049
JM
5791 if (!init && DECL_NONSTATIC_MEMBER_FUNCTION_P (containing_function)
5792 && !LAMBDA_FUNCTION_P (containing_function))
5793 /* First parameter is 'this'. */
5794 init = DECL_ARGUMENTS (containing_function);
d5f4eddd 5795
71d16049
JM
5796 if (init)
5797 this_capture = add_default_capture (lambda_stack,
5798 /*id=*/get_identifier ("__this"),
5799 init);
d5f4eddd
JM
5800 }
5801
5802 if (!this_capture)
5803 {
5804 error ("%<this%> was not captured for this lambda function");
5805 result = error_mark_node;
5806 }
5807 else
5808 {
5809 /* To make sure that current_class_ref is for the lambda. */
5810 gcc_assert (TYPE_MAIN_VARIANT (TREE_TYPE (current_class_ref)) == TREE_TYPE (lambda));
5811
5812 result = finish_non_static_data_member (this_capture,
2defb926 5813 NULL_TREE,
d5f4eddd
JM
5814 /*qualifying_scope=*/NULL_TREE);
5815
5816 /* If 'this' is captured, each use of 'this' is transformed into an
5817 access to the corresponding unnamed data member of the closure
5818 type cast (_expr.cast_ 5.4) to the type of 'this'. [ The cast
5819 ensures that the transformed expression is an rvalue. ] */
5820 result = rvalue (result);
5821 }
5822
5823 return result;
5824}
5825
a6846853
JM
5826/* Returns the method basetype of the innermost non-lambda function, or
5827 NULL_TREE if none. */
5828
5829tree
5830nonlambda_method_basetype (void)
5831{
5832 tree fn, type;
5833 if (!current_class_ref)
5834 return NULL_TREE;
5835
5836 type = current_class_type;
5837 if (!LAMBDA_TYPE_P (type))
5838 return type;
5839
5840 /* Find the nearest enclosing non-lambda function. */
5841 fn = TYPE_NAME (type);
5842 do
5843 fn = decl_function_context (fn);
5844 while (fn && LAMBDA_FUNCTION_P (fn));
5845
5846 if (!fn || !DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
5847 return NULL_TREE;
5848
5849 return TYPE_METHOD_BASETYPE (TREE_TYPE (fn));
5850}
5851
b77068f2
JM
5852/* If the closure TYPE has a static op(), also add a conversion to function
5853 pointer. */
5854
5855void
5856maybe_add_lambda_conv_op (tree type)
5857{
5858 bool nested = (current_function_decl != NULL_TREE);
5859 tree callop = lambda_function (type);
5860 tree rettype, name, fntype, fn, body, compound_stmt;
c6be04ad
JM
5861 tree thistype, stattype, statfn, convfn, call, arg;
5862 VEC (tree, gc) *argvec;
b77068f2 5863
c6be04ad 5864 if (LAMBDA_EXPR_CAPTURE_LIST (CLASSTYPE_LAMBDA_EXPR (type)) != NULL_TREE)
b77068f2
JM
5865 return;
5866
c6be04ad
JM
5867 stattype = build_function_type (TREE_TYPE (TREE_TYPE (callop)),
5868 FUNCTION_ARG_CHAIN (callop));
5869
5870 /* First build up the conversion op. */
5871
5872 rettype = build_pointer_type (stattype);
b77068f2 5873 name = mangle_conv_op_name_for_type (rettype);
c6be04ad
JM
5874 thistype = cp_build_qualified_type (type, TYPE_QUAL_CONST);
5875 fntype = build_method_type_directly (thistype, rettype, void_list_node);
5876 fn = convfn = build_lang_decl (FUNCTION_DECL, name, fntype);
b77068f2
JM
5877 DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (callop);
5878
5879 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
5880 && DECL_ALIGN (fn) < 2 * BITS_PER_UNIT)
5881 DECL_ALIGN (fn) = 2 * BITS_PER_UNIT;
5882
5883 SET_OVERLOADED_OPERATOR_CODE (fn, TYPE_EXPR);
5884 grokclassfn (type, fn, NO_SPECIAL);
5885 set_linkage_according_to_type (type, fn);
5886 rest_of_decl_compilation (fn, toplevel_bindings_p (), at_eof);
5887 DECL_IN_AGGR_P (fn) = 1;
5888 DECL_ARTIFICIAL (fn) = 1;
5889 DECL_NOT_REALLY_EXTERN (fn) = 1;
5890 DECL_DECLARED_INLINE_P (fn) = 1;
c6be04ad
JM
5891 DECL_ARGUMENTS (fn) = build_this_parm (fntype, TYPE_QUAL_CONST);
5892 if (nested)
5893 DECL_INTERFACE_KNOWN (fn) = 1;
5894
5895 add_method (type, fn, NULL_TREE);
5896
5897 /* Generic thunk code fails for varargs; we'll complain in mark_used if
5898 the conversion op is used. */
5899 if (varargs_function_p (callop))
5900 {
5901 DECL_DELETED_FN (fn) = 1;
5902 return;
5903 }
5904
5905 /* Now build up the thunk to be returned. */
5906
5907 name = get_identifier ("_FUN");
5908 fn = statfn = build_lang_decl (FUNCTION_DECL, name, stattype);
5909 DECL_SOURCE_LOCATION (fn) = DECL_SOURCE_LOCATION (callop);
5910 if (TARGET_PTRMEMFUNC_VBIT_LOCATION == ptrmemfunc_vbit_in_pfn
5911 && DECL_ALIGN (fn) < 2 * BITS_PER_UNIT)
5912 DECL_ALIGN (fn) = 2 * BITS_PER_UNIT;
5913 grokclassfn (type, fn, NO_SPECIAL);
5914 set_linkage_according_to_type (type, fn);
5915 rest_of_decl_compilation (fn, toplevel_bindings_p (), at_eof);
5916 DECL_IN_AGGR_P (fn) = 1;
5917 DECL_ARTIFICIAL (fn) = 1;
5918 DECL_NOT_REALLY_EXTERN (fn) = 1;
5919 DECL_DECLARED_INLINE_P (fn) = 1;
b77068f2 5920 DECL_STATIC_FUNCTION_P (fn) = 1;
c6be04ad
JM
5921 DECL_ARGUMENTS (fn) = copy_list (TREE_CHAIN (DECL_ARGUMENTS (callop)));
5922 for (arg = DECL_ARGUMENTS (fn); arg; arg = TREE_CHAIN (arg))
5923 DECL_CONTEXT (arg) = fn;
7a79ff3b
JM
5924 if (nested)
5925 DECL_INTERFACE_KNOWN (fn) = 1;
b77068f2
JM
5926
5927 add_method (type, fn, NULL_TREE);
5928
5929 if (nested)
5930 push_function_context ();
c6be04ad
JM
5931
5932 /* Generate the body of the thunk. */
5933
5934 start_preparsed_function (statfn, NULL_TREE,
5935 SF_PRE_PARSED | SF_INCLASS_INLINE);
5936 if (DECL_ONE_ONLY (statfn))
5937 {
5938 /* Put the thunk in the same comdat group as the call op. */
5939 struct cgraph_node *callop_node, *thunk_node;
5940 DECL_COMDAT_GROUP (statfn) = DECL_COMDAT_GROUP (callop);
5941 callop_node = cgraph_node (callop);
5942 thunk_node = cgraph_node (statfn);
5943 gcc_assert (callop_node->same_comdat_group == NULL);
5944 gcc_assert (thunk_node->same_comdat_group == NULL);
5945 callop_node->same_comdat_group = thunk_node;
5946 thunk_node->same_comdat_group = callop_node;
5947 }
5948 body = begin_function_body ();
5949 compound_stmt = begin_compound_stmt (0);
5950
9542943d
JM
5951 arg = build1 (NOP_EXPR, TREE_TYPE (DECL_ARGUMENTS (callop)),
5952 null_pointer_node);
c6be04ad
JM
5953 argvec = make_tree_vector ();
5954 VEC_quick_push (tree, argvec, arg);
5955 for (arg = DECL_ARGUMENTS (statfn); arg; arg = TREE_CHAIN (arg))
5956 VEC_safe_push (tree, gc, argvec, arg);
e62e4922
JM
5957 call = build_call_a (callop, VEC_length (tree, argvec),
5958 VEC_address (tree, argvec));
c6be04ad 5959 CALL_FROM_THUNK_P (call) = 1;
e62e4922
JM
5960 if (MAYBE_CLASS_TYPE_P (TREE_TYPE (call)))
5961 call = build_cplus_new (TREE_TYPE (call), call);
5962 call = convert_from_reference (call);
c6be04ad
JM
5963 finish_return_stmt (call);
5964
5965 finish_compound_stmt (compound_stmt);
5966 finish_function_body (body);
5967
5968 expand_or_defer_fn (finish_function (2));
5969
5970 /* Generate the body of the conversion op. */
5971
5972 start_preparsed_function (convfn, NULL_TREE,
b77068f2
JM
5973 SF_PRE_PARSED | SF_INCLASS_INLINE);
5974 body = begin_function_body ();
5975 compound_stmt = begin_compound_stmt (0);
5976
c6be04ad 5977 finish_return_stmt (decay_conversion (statfn));
b77068f2
JM
5978
5979 finish_compound_stmt (compound_stmt);
5980 finish_function_body (body);
5981
5982 expand_or_defer_fn (finish_function (2));
c6be04ad 5983
b77068f2
JM
5984 if (nested)
5985 pop_function_context ();
5986}
cf22909c 5987#include "gt-cp-semantics.h"