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