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