]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/cp/semantics.c
typeck.c (composite_pointer_type_r): Add SFINAE support.
[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
JJ
6 Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005, 2006, 2007,
7 2008 Free Software Foundation, Inc.
ad321293 8 Written by Mark Mitchell (mmitchell@usa.net) based on code found
c8094d83 9 formerly in parse.y and pt.c.
ad321293 10
f5adbb8d 11 This file is part of GCC.
ad321293 12
f5adbb8d 13 GCC is free software; you can redistribute it and/or modify it
ad321293 14 under the terms of the GNU General Public License as published by
e77f031d 15 the Free Software Foundation; either version 3, or (at your option)
ad321293 16 any later version.
c8094d83 17
f5adbb8d 18 GCC is distributed in the hope that it will be useful, but
ad321293
MM
19 WITHOUT ANY WARRANTY; without even the implied warranty of
20 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
21 General Public License for more details.
c8094d83 22
e77f031d
NC
23You should have received a copy of the GNU General Public License
24along with GCC; see the file COPYING3. If not see
25<http://www.gnu.org/licenses/>. */
ad321293
MM
26
27#include "config.h"
8d052bc7 28#include "system.h"
4977bab6
ZW
29#include "coretypes.h"
30#include "tm.h"
ad321293
MM
31#include "tree.h"
32#include "cp-tree.h"
5f070bc7 33#include "c-common.h"
25af8512 34#include "tree-inline.h"
6de9cd9a 35#include "tree-mudflap.h"
ad321293 36#include "except.h"
12027a89 37#include "toplev.h"
84df082b 38#include "flags.h"
d9b2d9da 39#include "rtl.h"
d6684bc8 40#include "expr.h"
225ff119 41#include "output.h"
ea11ca7e 42#include "timevar.h"
2b85879e 43#include "debug.h"
6de9cd9a 44#include "diagnostic.h"
8cd2462c 45#include "cgraph.h"
325c3691 46#include "tree-iterator.h"
3e1f1ba5 47#include "vec.h"
44d10c10 48#include "target.h"
ad321293
MM
49
50/* There routines provide a modular interface to perform many parsing
51 operations. They may therefore be used during actual parsing, or
52 during template instantiation, which may be regarded as a
0b4d5576 53 degenerate form of parsing. */
ad321293 54
3a978d72
NN
55static tree maybe_convert_cond (tree);
56static tree simplify_aggr_init_exprs_r (tree *, int *, void *);
6de9cd9a 57static tree finalize_nrv_r (tree *, int *, void *);
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
3e1f1ba5
NS
111typedef struct deferred_access GTY(())
112{
d6b418fa 113 /* A VEC representing name-lookups for which we have deferred
3e1f1ba5
NS
114 checking access controls. We cannot check the accessibility of
115 names used in a decl-specifier-seq until we know what is being
116 declared because code like:
117
c8094d83 118 class A {
0cbd7506
MS
119 class B {};
120 B* f();
3e1f1ba5
NS
121 }
122
123 A::B* A::f() { return 0; }
124
d6b418fa
SM
125 is valid, even though `A::B' is not generally accessible. */
126 VEC (deferred_access_check,gc)* GTY(()) deferred_access_checks;
c8094d83 127
3e1f1ba5
NS
128 /* The current mode of access checks. */
129 enum deferring_kind deferring_access_checks_kind;
c8094d83 130
3e1f1ba5 131} deferred_access;
d4e6fecb
NS
132DEF_VEC_O (deferred_access);
133DEF_VEC_ALLOC_O (deferred_access,gc);
3e1f1ba5 134
cf22909c 135/* Data for deferred access checking. */
d4e6fecb 136static GTY(()) VEC(deferred_access,gc) *deferred_access_stack;
3e1f1ba5 137static GTY(()) unsigned deferred_access_no_check;
cf22909c
KL
138
139/* Save the current deferred access states and start deferred
140 access checking iff DEFER_P is true. */
141
572c2b17
AP
142void
143push_deferring_access_checks (deferring_kind deferring)
cf22909c 144{
78757caa
KL
145 /* For context like template instantiation, access checking
146 disabling applies to all nested context. */
3e1f1ba5
NS
147 if (deferred_access_no_check || deferring == dk_no_check)
148 deferred_access_no_check++;
cf22909c 149 else
3e1f1ba5
NS
150 {
151 deferred_access *ptr;
cf22909c 152
d4e6fecb 153 ptr = VEC_safe_push (deferred_access, gc, deferred_access_stack, NULL);
d6b418fa 154 ptr->deferred_access_checks = NULL;
3e1f1ba5
NS
155 ptr->deferring_access_checks_kind = deferring;
156 }
cf22909c
KL
157}
158
159/* Resume deferring access checks again after we stopped doing
160 this previously. */
161
572c2b17
AP
162void
163resume_deferring_access_checks (void)
cf22909c 164{
3e1f1ba5
NS
165 if (!deferred_access_no_check)
166 VEC_last (deferred_access, deferred_access_stack)
167 ->deferring_access_checks_kind = dk_deferred;
cf22909c
KL
168}
169
170/* Stop deferring access checks. */
171
572c2b17
AP
172void
173stop_deferring_access_checks (void)
cf22909c 174{
3e1f1ba5
NS
175 if (!deferred_access_no_check)
176 VEC_last (deferred_access, deferred_access_stack)
177 ->deferring_access_checks_kind = dk_no_deferred;
cf22909c
KL
178}
179
180/* Discard the current deferred access checks and restore the
181 previous states. */
182
572c2b17
AP
183void
184pop_deferring_access_checks (void)
cf22909c 185{
3e1f1ba5
NS
186 if (deferred_access_no_check)
187 deferred_access_no_check--;
188 else
189 VEC_pop (deferred_access, deferred_access_stack);
cf22909c
KL
190}
191
c8094d83
MS
192/* Returns a TREE_LIST representing the deferred checks.
193 The TREE_PURPOSE of each node is the type through which the
cf22909c
KL
194 access occurred; the TREE_VALUE is the declaration named.
195 */
196
d6b418fa 197VEC (deferred_access_check,gc)*
572c2b17 198get_deferred_access_checks (void)
cf22909c 199{
3e1f1ba5
NS
200 if (deferred_access_no_check)
201 return NULL;
202 else
203 return (VEC_last (deferred_access, deferred_access_stack)
204 ->deferred_access_checks);
cf22909c
KL
205}
206
207/* Take current deferred checks and combine with the
208 previous states if we also defer checks previously.
209 Otherwise perform checks now. */
210
572c2b17
AP
211void
212pop_to_parent_deferring_access_checks (void)
cf22909c 213{
3e1f1ba5
NS
214 if (deferred_access_no_check)
215 deferred_access_no_check--;
216 else
217 {
d6b418fa 218 VEC (deferred_access_check,gc) *checks;
3e1f1ba5
NS
219 deferred_access *ptr;
220
221 checks = (VEC_last (deferred_access, deferred_access_stack)
222 ->deferred_access_checks);
223
224 VEC_pop (deferred_access, deferred_access_stack);
225 ptr = VEC_last (deferred_access, deferred_access_stack);
226 if (ptr->deferring_access_checks_kind == dk_no_deferred)
227 {
228 /* Check access. */
d6b418fa 229 perform_access_checks (checks);
3e1f1ba5
NS
230 }
231 else
232 {
233 /* Merge with parent. */
d6b418fa
SM
234 int i, j;
235 deferred_access_check *chk, *probe;
c8094d83 236
d6b418fa
SM
237 for (i = 0 ;
238 VEC_iterate (deferred_access_check, checks, i, chk) ;
239 ++i)
3e1f1ba5 240 {
d6b418fa
SM
241 for (j = 0 ;
242 VEC_iterate (deferred_access_check,
243 ptr->deferred_access_checks, j, probe) ;
244 ++j)
245 {
246 if (probe->binfo == chk->binfo &&
247 probe->decl == chk->decl &&
248 probe->diag_decl == chk->diag_decl)
249 goto found;
250 }
3e1f1ba5 251 /* Insert into parent's checks. */
d6b418fa
SM
252 VEC_safe_push (deferred_access_check, gc,
253 ptr->deferred_access_checks, chk);
3e1f1ba5
NS
254 found:;
255 }
256 }
257 }
cf22909c
KL
258}
259
6b648482
MM
260/* Perform the access checks in CHECKS. The TREE_PURPOSE of each node
261 is the BINFO indicating the qualifying scope used to access the
262 DECL node stored in the TREE_VALUE of the node. */
263
264void
d6b418fa 265perform_access_checks (VEC (deferred_access_check,gc)* checks)
6b648482 266{
d6b418fa
SM
267 int i;
268 deferred_access_check *chk;
269
270 if (!checks)
271 return;
272
273 for (i = 0 ; VEC_iterate (deferred_access_check, checks, i, chk) ; ++i)
274 enforce_access (chk->binfo, chk->decl, chk->diag_decl);
6b648482
MM
275}
276
25903d03
KL
277/* Perform the deferred access checks.
278
279 After performing the checks, we still have to keep the list
280 `deferred_access_stack->deferred_access_checks' since we may want
281 to check access for them again later in a different context.
282 For example:
283
284 class A {
285 typedef int X;
286 static X a;
287 };
288 A::X A::a, x; // No error for `A::a', error for `x'
289
290 We have to perform deferred access of `A::X', first with `A::a',
291 next with `x'. */
cf22909c 292
572c2b17
AP
293void
294perform_deferred_access_checks (void)
cf22909c 295{
6b648482 296 perform_access_checks (get_deferred_access_checks ());
cf22909c
KL
297}
298
299/* Defer checking the accessibility of DECL, when looked up in
02022f3a 300 BINFO. DIAG_DECL is the declaration to use to print diagnostics. */
cf22909c 301
572c2b17 302void
02022f3a 303perform_or_defer_access_check (tree binfo, tree decl, tree diag_decl)
cf22909c 304{
d6b418fa 305 int i;
3e1f1ba5 306 deferred_access *ptr;
d6b418fa
SM
307 deferred_access_check *chk;
308 deferred_access_check *new_access;
309
cf22909c 310
3e1f1ba5
NS
311 /* Exit if we are in a context that no access checking is performed.
312 */
313 if (deferred_access_no_check)
0f2a66c9 314 return;
c8094d83 315
50bc768d 316 gcc_assert (TREE_CODE (binfo) == TREE_BINFO);
0f2a66c9 317
3e1f1ba5 318 ptr = VEC_last (deferred_access, deferred_access_stack);
c8094d83 319
cf22909c 320 /* If we are not supposed to defer access checks, just check now. */
3e1f1ba5 321 if (ptr->deferring_access_checks_kind == dk_no_deferred)
cf22909c 322 {
02022f3a 323 enforce_access (binfo, decl, diag_decl);
cf22909c
KL
324 return;
325 }
c8094d83 326
cf22909c 327 /* See if we are already going to perform this check. */
d6b418fa
SM
328 for (i = 0 ;
329 VEC_iterate (deferred_access_check,
330 ptr->deferred_access_checks, i, chk) ;
331 ++i)
332 {
333 if (chk->decl == decl && chk->binfo == binfo &&
334 chk->diag_decl == diag_decl)
335 {
336 return;
337 }
338 }
cf22909c 339 /* If not, record the check. */
d6b418fa
SM
340 new_access =
341 VEC_safe_push (deferred_access_check, gc,
342 ptr->deferred_access_checks, 0);
343 new_access->binfo = binfo;
344 new_access->decl = decl;
345 new_access->diag_decl = diag_decl;
cf22909c
KL
346}
347
838dfd8a 348/* Returns nonzero if the current statement is a full expression,
f2c5f623
BC
349 i.e. temporaries created during that statement should be destroyed
350 at the end of the statement. */
35b1567d 351
f2c5f623 352int
3a978d72 353stmts_are_full_exprs_p (void)
f2c5f623 354{
ae499cce
MM
355 return current_stmt_tree ()->stmts_are_full_exprs_p;
356}
357
ed3d0b14
ILT
358/* T is a statement. Add it to the statement-tree. This is the C++
359 version. The C/ObjC frontends have a slightly different version of
360 this function. */
361
362tree
363add_stmt (tree t)
364{
365 enum tree_code code = TREE_CODE (t);
366
367 if (EXPR_P (t) && code != LABEL_EXPR)
368 {
369 if (!EXPR_HAS_LOCATION (t))
370 SET_EXPR_LOCATION (t, input_location);
371
372 /* When we expand a statement-tree, we must know whether or not the
373 statements are full-expressions. We record that fact here. */
374 STMT_IS_FULL_EXPR_P (t) = stmts_are_full_exprs_p ();
375 }
376
377 /* Add T to the statement-tree. Non-side-effect statements need to be
378 recorded during statement expressions. */
379 append_to_statement_list_force (t, &cur_stmt_list);
380
381 return t;
382}
383
ae499cce
MM
384/* Returns the stmt_tree (if any) to which statements are currently
385 being added. If there is no active statement-tree, NULL is
386 returned. */
387
388stmt_tree
3a978d72 389current_stmt_tree (void)
ae499cce 390{
c8094d83
MS
391 return (cfun
392 ? &cfun->language->base.x_stmt_tree
ae499cce 393 : &scope_chain->x_stmt_tree);
f2c5f623 394}
35b1567d 395
543a0daa
RH
396/* If statements are full expressions, wrap STMT in a CLEANUP_POINT_EXPR. */
397
398static tree
399maybe_cleanup_point_expr (tree expr)
400{
401 if (!processing_template_decl && stmts_are_full_exprs_p ())
0ad28dde 402 expr = fold_build_cleanup_point_expr (TREE_TYPE (expr), expr);
543a0daa
RH
403 return expr;
404}
405
0ad28dde 406/* Like maybe_cleanup_point_expr except have the type of the new expression be
22423a1f
KH
407 void so we don't need to create a temporary variable to hold the inner
408 expression. The reason why we do this is because the original type might be
409 an aggregate and we cannot create a temporary variable for that type. */
0ad28dde
AP
410
411static tree
412maybe_cleanup_point_expr_void (tree expr)
413{
414 if (!processing_template_decl && stmts_are_full_exprs_p ())
415 expr = fold_build_cleanup_point_expr (void_type_node, expr);
416 return expr;
417}
418
419
420
543a0daa
RH
421/* Create a declaration statement for the declaration given by the DECL. */
422
423void
350fae66 424add_decl_expr (tree decl)
543a0daa 425{
350fae66 426 tree r = build_stmt (DECL_EXPR, decl);
b187901e
AP
427 if (DECL_INITIAL (decl)
428 || (DECL_SIZE (decl) && TREE_SIDE_EFFECTS (DECL_SIZE (decl))))
0ad28dde 429 r = maybe_cleanup_point_expr_void (r);
543a0daa
RH
430 add_stmt (r);
431}
432
f2c5f623
BC
433/* Nonzero if TYPE is an anonymous union or struct type. We have to use a
434 flag for this because "A union for which objects or pointers are
435 declared is not an anonymous union" [class.union]. */
35b1567d 436
f2c5f623 437int
58f9752a 438anon_aggr_type_p (const_tree node)
35b1567d 439{
e2500fed 440 return ANON_AGGR_TYPE_P (node);
35b1567d
BC
441}
442
f2c5f623 443/* Finish a scope. */
35b1567d 444
20aff0b3 445tree
325c3691 446do_poplevel (tree stmt_list)
35b1567d 447{
325c3691 448 tree block = NULL;
35b1567d 449
f2c5f623 450 if (stmts_are_full_exprs_p ())
325c3691 451 block = poplevel (kept_level_p (), 1, 0);
f2c5f623 452
325c3691 453 stmt_list = pop_stmt_list (stmt_list);
c8094d83 454
325c3691
RH
455 if (!processing_template_decl)
456 {
457 stmt_list = c_build_bind_expr (block, stmt_list);
458 /* ??? See c_end_compound_stmt re statement expressions. */
35b1567d
BC
459 }
460
325c3691 461 return stmt_list;
35b1567d
BC
462}
463
c8094d83 464/* Begin a new scope. */
35b1567d 465
325c3691 466static tree
92bc1323 467do_pushlevel (scope_kind sk)
35b1567d 468{
325c3691 469 tree ret = push_stmt_list ();
f2c5f623 470 if (stmts_are_full_exprs_p ())
325c3691
RH
471 begin_scope (sk, NULL);
472 return ret;
473}
5a508662
RH
474
475/* Queue a cleanup. CLEANUP is an expression/statement to be executed
476 when the current scope is exited. EH_ONLY is true when this is not
477 meant to apply to normal control flow transfer. */
478
479void
480push_cleanup (tree decl, tree cleanup, bool eh_only)
481{
482 tree stmt = build_stmt (CLEANUP_STMT, NULL, cleanup, decl);
483 CLEANUP_EH_ONLY (stmt) = eh_only;
484 add_stmt (stmt);
485 CLEANUP_BODY (stmt) = push_stmt_list ();
486}
325c3691 487
caf2523d
RH
488/* Begin a conditional that might contain a declaration. When generating
489 normal code, we want the declaration to appear before the statement
490 containing the conditional. When generating template code, we want the
350fae66 491 conditional to be rendered as the raw DECL_EXPR. */
325c3691
RH
492
493static void
caf2523d 494begin_cond (tree *cond_p)
325c3691 495{
caf2523d
RH
496 if (processing_template_decl)
497 *cond_p = push_stmt_list ();
498}
499
500/* Finish such a conditional. */
501
502static void
503finish_cond (tree *cond_p, tree expr)
504{
505 if (processing_template_decl)
35b1567d 506 {
caf2523d 507 tree cond = pop_stmt_list (*cond_p);
350fae66 508 if (TREE_CODE (cond) == DECL_EXPR)
caf2523d 509 expr = cond;
5d80a306 510
7b3e2d46 511 if (check_for_bare_parameter_packs (expr))
4439d02f 512 *cond_p = error_mark_node;
35b1567d 513 }
caf2523d 514 *cond_p = expr;
35b1567d
BC
515}
516
325c3691
RH
517/* If *COND_P specifies a conditional with a declaration, transform the
518 loop such that
0cbd7506
MS
519 while (A x = 42) { }
520 for (; A x = 42;) { }
325c3691 521 becomes
0cbd7506
MS
522 while (true) { A x = 42; if (!x) break; }
523 for (;;) { A x = 42; if (!x) break; }
caf2523d
RH
524 The statement list for BODY will be empty if the conditional did
525 not declare anything. */
c8094d83 526
325c3691 527static void
caf2523d 528simplify_loop_decl_cond (tree *cond_p, tree body)
325c3691 529{
caf2523d 530 tree cond, if_stmt;
325c3691 531
caf2523d
RH
532 if (!TREE_SIDE_EFFECTS (body))
533 return;
325c3691 534
caf2523d
RH
535 cond = *cond_p;
536 *cond_p = boolean_true_node;
c8094d83 537
caf2523d 538 if_stmt = begin_if_stmt ();
5ade1ed2 539 cond = cp_build_unary_op (TRUTH_NOT_EXPR, cond, 0, tf_warning_or_error);
caf2523d
RH
540 finish_if_stmt_cond (cond, if_stmt);
541 finish_break_stmt ();
542 finish_then_clause (if_stmt);
543 finish_if_stmt (if_stmt);
544}
325c3691 545
35b1567d
BC
546/* Finish a goto-statement. */
547
3e4d04a1 548tree
3a978d72 549finish_goto_stmt (tree destination)
35b1567d
BC
550{
551 if (TREE_CODE (destination) == IDENTIFIER_NODE)
552 destination = lookup_label (destination);
553
554 /* We warn about unused labels with -Wunused. That means we have to
555 mark the used labels as used. */
556 if (TREE_CODE (destination) == LABEL_DECL)
557 TREE_USED (destination) = 1;
fc2b8477
MM
558 else
559 {
560 /* The DESTINATION is being used as an rvalue. */
561 if (!processing_template_decl)
562 destination = decay_conversion (destination);
563 /* We don't inline calls to functions with computed gotos.
564 Those functions are typically up to some funny business,
565 and may be depending on the labels being at particular
566 addresses, or some such. */
567 DECL_UNINLINABLE (current_function_decl) = 1;
568 }
c8094d83 569
35b1567d
BC
570 check_goto (destination);
571
9e14e18f 572 return add_stmt (build_stmt (GOTO_EXPR, destination));
35b1567d
BC
573}
574
ed5511d9
MM
575/* COND is the condition-expression for an if, while, etc.,
576 statement. Convert it to a boolean value, if appropriate. */
577
8ce33230 578static tree
3a978d72 579maybe_convert_cond (tree cond)
ed5511d9
MM
580{
581 /* Empty conditions remain empty. */
582 if (!cond)
583 return NULL_TREE;
584
585 /* Wait until we instantiate templates before doing conversion. */
586 if (processing_template_decl)
587 return cond;
588
589 /* Do the conversion. */
590 cond = convert_from_reference (cond);
fbc8d2d3
ILT
591
592 if (TREE_CODE (cond) == MODIFY_EXPR
593 && !TREE_NO_WARNING (cond)
594 && warn_parentheses)
595 {
596 warning (OPT_Wparentheses,
597 "suggest parentheses around assignment used as truth value");
598 TREE_NO_WARNING (cond) = 1;
599 }
600
ed5511d9
MM
601 return condition_conversion (cond);
602}
603
9bfadf57 604/* Finish an expression-statement, whose EXPRESSION is as indicated. */
a7e4cfa0 605
3e4d04a1 606tree
3a978d72 607finish_expr_stmt (tree expr)
ad321293 608{
3e4d04a1
RH
609 tree r = NULL_TREE;
610
ce4a0391 611 if (expr != NULL_TREE)
ad321293 612 {
a5bcc582 613 if (!processing_template_decl)
3a5b9284
RH
614 {
615 if (warn_sequence_point)
616 verify_sequence_points (expr);
5ade1ed2 617 expr = convert_to_void (expr, "statement", tf_warning_or_error);
3a5b9284 618 }
47d4c811 619 else if (!type_dependent_expression_p (expr))
5ade1ed2
DG
620 convert_to_void (build_non_dependent_expr (expr), "statement",
621 tf_warning_or_error);
325c3691 622
7b3e2d46 623 if (check_for_bare_parameter_packs (expr))
4439d02f 624 expr = error_mark_node;
5d80a306 625
325c3691 626 /* Simplification of inner statement expressions, compound exprs,
ca5b80f3 627 etc can result in us already having an EXPR_STMT. */
543a0daa
RH
628 if (TREE_CODE (expr) != CLEANUP_POINT_EXPR)
629 {
630 if (TREE_CODE (expr) != EXPR_STMT)
631 expr = build_stmt (EXPR_STMT, expr);
0ad28dde 632 expr = maybe_cleanup_point_expr_void (expr);
543a0daa
RH
633 }
634
325c3691 635 r = add_stmt (expr);
35b1567d 636 }
364460b6 637
35b1567d 638 finish_stmt ();
558475f0 639
3e4d04a1 640 return r;
35b1567d
BC
641}
642
35b1567d 643
ad321293
MM
644/* Begin an if-statement. Returns a newly created IF_STMT if
645 appropriate. */
646
647tree
3a978d72 648begin_if_stmt (void)
ad321293 649{
325c3691
RH
650 tree r, scope;
651 scope = do_pushlevel (sk_block);
0dfdeca6 652 r = build_stmt (IF_STMT, NULL_TREE, NULL_TREE, NULL_TREE);
325c3691 653 TREE_CHAIN (r) = scope;
caf2523d 654 begin_cond (&IF_COND (r));
ad321293
MM
655 return r;
656}
657
658/* Process the COND of an if-statement, which may be given by
659 IF_STMT. */
660
c8094d83 661void
3a978d72 662finish_if_stmt_cond (tree cond, tree if_stmt)
ad321293 663{
caf2523d
RH
664 finish_cond (&IF_COND (if_stmt), maybe_convert_cond (cond));
665 add_stmt (if_stmt);
325c3691 666 THEN_CLAUSE (if_stmt) = push_stmt_list ();
ad321293
MM
667}
668
669/* Finish the then-clause of an if-statement, which may be given by
670 IF_STMT. */
671
672tree
3a978d72 673finish_then_clause (tree if_stmt)
ad321293 674{
325c3691 675 THEN_CLAUSE (if_stmt) = pop_stmt_list (THEN_CLAUSE (if_stmt));
35b1567d 676 return if_stmt;
ad321293
MM
677}
678
679/* Begin the else-clause of an if-statement. */
680
325c3691
RH
681void
682begin_else_clause (tree if_stmt)
ad321293 683{
325c3691 684 ELSE_CLAUSE (if_stmt) = push_stmt_list ();
ad321293
MM
685}
686
687/* Finish the else-clause of an if-statement, which may be given by
688 IF_STMT. */
689
690void
3a978d72 691finish_else_clause (tree if_stmt)
ad321293 692{
325c3691 693 ELSE_CLAUSE (if_stmt) = pop_stmt_list (ELSE_CLAUSE (if_stmt));
ad321293
MM
694}
695
dfbb4f34 696/* Finish an if-statement. */
ad321293 697
c8094d83 698void
325c3691 699finish_if_stmt (tree if_stmt)
ad321293 700{
325c3691
RH
701 tree scope = TREE_CHAIN (if_stmt);
702 TREE_CHAIN (if_stmt) = NULL;
703 add_stmt (do_poplevel (scope));
ad321293 704 finish_stmt ();
62e00e94 705 empty_if_body_warning (THEN_CLAUSE (if_stmt), ELSE_CLAUSE (if_stmt));
35b1567d
BC
706}
707
ad321293
MM
708/* Begin a while-statement. Returns a newly created WHILE_STMT if
709 appropriate. */
710
711tree
3a978d72 712begin_while_stmt (void)
ad321293
MM
713{
714 tree r;
0dfdeca6 715 r = build_stmt (WHILE_STMT, NULL_TREE, NULL_TREE);
ae499cce 716 add_stmt (r);
325c3691 717 WHILE_BODY (r) = do_pushlevel (sk_block);
caf2523d 718 begin_cond (&WHILE_COND (r));
ad321293
MM
719 return r;
720}
721
27d26ee7 722/* Process the COND of a while-statement, which may be given by
ad321293
MM
723 WHILE_STMT. */
724
c8094d83 725void
3a978d72 726finish_while_stmt_cond (tree cond, tree while_stmt)
ad321293 727{
caf2523d
RH
728 finish_cond (&WHILE_COND (while_stmt), maybe_convert_cond (cond));
729 simplify_loop_decl_cond (&WHILE_COND (while_stmt), WHILE_BODY (while_stmt));
ad321293
MM
730}
731
732/* Finish a while-statement, which may be given by WHILE_STMT. */
733
c8094d83 734void
3a978d72 735finish_while_stmt (tree while_stmt)
ad321293 736{
325c3691 737 WHILE_BODY (while_stmt) = do_poplevel (WHILE_BODY (while_stmt));
ad321293
MM
738 finish_stmt ();
739}
740
741/* Begin a do-statement. Returns a newly created DO_STMT if
742 appropriate. */
743
744tree
3a978d72 745begin_do_stmt (void)
ad321293 746{
0dfdeca6 747 tree r = build_stmt (DO_STMT, NULL_TREE, NULL_TREE);
ae499cce 748 add_stmt (r);
325c3691 749 DO_BODY (r) = push_stmt_list ();
35b1567d 750 return r;
ad321293
MM
751}
752
753/* Finish the body of a do-statement, which may be given by DO_STMT. */
754
755void
3a978d72 756finish_do_body (tree do_stmt)
ad321293 757{
62e00e94
DM
758 tree body = DO_BODY (do_stmt) = pop_stmt_list (DO_BODY (do_stmt));
759
760 if (TREE_CODE (body) == STATEMENT_LIST && STATEMENT_LIST_TAIL (body))
761 body = STATEMENT_LIST_TAIL (body)->stmt;
762
763 if (IS_EMPTY_STMT (body))
764 warning (OPT_Wempty_body,
765 "suggest explicit braces around empty body in %<do%> statement");
ad321293
MM
766}
767
768/* Finish a do-statement, which may be given by DO_STMT, and whose
769 COND is as indicated. */
770
771void
3a978d72 772finish_do_stmt (tree cond, tree do_stmt)
ad321293 773{
ed5511d9 774 cond = maybe_convert_cond (cond);
35b1567d
BC
775 DO_COND (do_stmt) = cond;
776 finish_stmt ();
777}
ed5511d9 778
ad321293
MM
779/* Finish a return-statement. The EXPRESSION returned, if any, is as
780 indicated. */
781
3e4d04a1 782tree
3a978d72 783finish_return_stmt (tree expr)
ad321293 784{
3e4d04a1 785 tree r;
0c9b182b 786 bool no_warning;
3e4d04a1 787
0c9b182b 788 expr = check_return_expr (expr, &no_warning);
1799e5d5
RH
789
790 if (flag_openmp && !check_omp_return ())
791 return error_mark_node;
35b1567d 792 if (!processing_template_decl)
efee38a9 793 {
44d10c10 794 if (DECL_DESTRUCTOR_P (current_function_decl)
c8094d83 795 || (DECL_CONSTRUCTOR_P (current_function_decl)
44d10c10 796 && targetm.cxx.cdtor_returns_this ()))
efee38a9
MM
797 {
798 /* Similarly, all destructors must run destructors for
799 base-classes before returning. So, all returns in a
dfbb4f34 800 destructor get sent to the DTOR_LABEL; finish_function emits
efee38a9 801 code to return a value there. */
44d10c10 802 return finish_goto_stmt (cdtor_label);
efee38a9
MM
803 }
804 }
543a0daa 805
5088b058 806 r = build_stmt (RETURN_EXPR, expr);
0c9b182b 807 TREE_NO_WARNING (r) |= no_warning;
0ad28dde 808 r = maybe_cleanup_point_expr_void (r);
543a0daa 809 r = add_stmt (r);
35b1567d 810 finish_stmt ();
3e4d04a1
RH
811
812 return r;
35b1567d 813}
efee38a9 814
ad321293
MM
815/* Begin a for-statement. Returns a new FOR_STMT if appropriate. */
816
817tree
3a978d72 818begin_for_stmt (void)
ad321293
MM
819{
820 tree r;
821
c8094d83 822 r = build_stmt (FOR_STMT, NULL_TREE, NULL_TREE,
0dfdeca6 823 NULL_TREE, NULL_TREE);
325c3691
RH
824
825 if (flag_new_for_scope > 0)
826 TREE_CHAIN (r) = do_pushlevel (sk_for);
ad321293 827
894ca2c9
RH
828 if (processing_template_decl)
829 FOR_INIT_STMT (r) = push_stmt_list ();
830
ad321293
MM
831 return r;
832}
833
834/* Finish the for-init-statement of a for-statement, which may be
835 given by FOR_STMT. */
836
837void
3a978d72 838finish_for_init_stmt (tree for_stmt)
ad321293 839{
894ca2c9
RH
840 if (processing_template_decl)
841 FOR_INIT_STMT (for_stmt) = pop_stmt_list (FOR_INIT_STMT (for_stmt));
325c3691
RH
842 add_stmt (for_stmt);
843 FOR_BODY (for_stmt) = do_pushlevel (sk_block);
caf2523d 844 begin_cond (&FOR_COND (for_stmt));
ad321293
MM
845}
846
847/* Finish the COND of a for-statement, which may be given by
848 FOR_STMT. */
849
850void
3a978d72 851finish_for_cond (tree cond, tree for_stmt)
ad321293 852{
caf2523d
RH
853 finish_cond (&FOR_COND (for_stmt), maybe_convert_cond (cond));
854 simplify_loop_decl_cond (&FOR_COND (for_stmt), FOR_BODY (for_stmt));
ad321293
MM
855}
856
857/* Finish the increment-EXPRESSION in a for-statement, which may be
858 given by FOR_STMT. */
859
860void
3a978d72 861finish_for_expr (tree expr, tree for_stmt)
ad321293 862{
543a0daa
RH
863 if (!expr)
864 return;
6f69173e
MM
865 /* If EXPR is an overloaded function, issue an error; there is no
866 context available to use to perform overload resolution. */
543a0daa 867 if (type_unknown_p (expr))
6f69173e
MM
868 {
869 cxx_incomplete_type_error (expr, TREE_TYPE (expr));
870 expr = error_mark_node;
871 }
bcd46a7c
AP
872 if (!processing_template_decl)
873 {
874 if (warn_sequence_point)
0cbd7506 875 verify_sequence_points (expr);
5ade1ed2
DG
876 expr = convert_to_void (expr, "3rd expression in for",
877 tf_warning_or_error);
bcd46a7c
AP
878 }
879 else if (!type_dependent_expression_p (expr))
5ade1ed2
DG
880 convert_to_void (build_non_dependent_expr (expr), "3rd expression in for",
881 tf_warning_or_error);
0ad28dde 882 expr = maybe_cleanup_point_expr_void (expr);
7b3e2d46 883 if (check_for_bare_parameter_packs (expr))
4439d02f 884 expr = error_mark_node;
35b1567d 885 FOR_EXPR (for_stmt) = expr;
ad321293
MM
886}
887
888/* Finish the body of a for-statement, which may be given by
889 FOR_STMT. The increment-EXPR for the loop must be
890 provided. */
891
892void
3a978d72 893finish_for_stmt (tree for_stmt)
ad321293 894{
325c3691
RH
895 FOR_BODY (for_stmt) = do_poplevel (FOR_BODY (for_stmt));
896
ad321293 897 /* Pop the scope for the body of the loop. */
325c3691
RH
898 if (flag_new_for_scope > 0)
899 {
900 tree scope = TREE_CHAIN (for_stmt);
901 TREE_CHAIN (for_stmt) = NULL;
902 add_stmt (do_poplevel (scope));
903 }
904
c8094d83 905 finish_stmt ();
ad321293
MM
906}
907
908/* Finish a break-statement. */
909
3e4d04a1 910tree
3a978d72 911finish_break_stmt (void)
ad321293 912{
fbc315db 913 return add_stmt (build_stmt (BREAK_STMT));
35b1567d
BC
914}
915
ad321293
MM
916/* Finish a continue-statement. */
917
3e4d04a1 918tree
3a978d72 919finish_continue_stmt (void)
ad321293 920{
fbc315db 921 return add_stmt (build_stmt (CONTINUE_STMT));
ad321293
MM
922}
923
35b1567d
BC
924/* Begin a switch-statement. Returns a new SWITCH_STMT if
925 appropriate. */
926
927tree
3a978d72 928begin_switch_stmt (void)
35b1567d 929{
325c3691
RH
930 tree r, scope;
931
6f9fdf4d 932 r = build_stmt (SWITCH_STMT, NULL_TREE, NULL_TREE, NULL_TREE);
325c3691
RH
933
934 scope = do_pushlevel (sk_block);
935 TREE_CHAIN (r) = scope;
ebaae582 936 begin_cond (&SWITCH_STMT_COND (r));
325c3691 937
527f0080 938 return r;
ad321293
MM
939}
940
527f0080 941/* Finish the cond of a switch-statement. */
ad321293 942
527f0080 943void
3a978d72 944finish_switch_cond (tree cond, tree switch_stmt)
ad321293 945{
6f9fdf4d 946 tree orig_type = NULL;
35b1567d 947 if (!processing_template_decl)
373eb3b3 948 {
56cb9733
MM
949 tree index;
950
35b1567d 951 /* Convert the condition to an integer or enumeration type. */
b746c5dc 952 cond = build_expr_type_conversion (WANT_INT | WANT_ENUM, cond, true);
35b1567d 953 if (cond == NULL_TREE)
373eb3b3 954 {
35b1567d
BC
955 error ("switch quantity not an integer");
956 cond = error_mark_node;
957 }
6f9fdf4d 958 orig_type = TREE_TYPE (cond);
35b1567d
BC
959 if (cond != error_mark_node)
960 {
0a72704b
MM
961 /* [stmt.switch]
962
963 Integral promotions are performed. */
964 cond = perform_integral_promotions (cond);
543a0daa 965 cond = maybe_cleanup_point_expr (cond);
373eb3b3 966 }
56cb9733 967
25c8b645
JJ
968 if (cond != error_mark_node)
969 {
970 index = get_unwidened (cond, NULL_TREE);
971 /* We can't strip a conversion from a signed type to an unsigned,
972 because if we did, int_fits_type_p would do the wrong thing
973 when checking case values for being in range,
974 and it's too hard to do the right thing. */
8df83eae
RK
975 if (TYPE_UNSIGNED (TREE_TYPE (cond))
976 == TYPE_UNSIGNED (TREE_TYPE (index)))
25c8b645
JJ
977 cond = index;
978 }
ad321293 979 }
7b3e2d46 980 if (check_for_bare_parameter_packs (cond))
4439d02f 981 cond = error_mark_node;
ebaae582
SB
982 finish_cond (&SWITCH_STMT_COND (switch_stmt), cond);
983 SWITCH_STMT_TYPE (switch_stmt) = orig_type;
caf2523d 984 add_stmt (switch_stmt);
56cb9733 985 push_switch (switch_stmt);
ebaae582 986 SWITCH_STMT_BODY (switch_stmt) = push_stmt_list ();
ad321293
MM
987}
988
989/* Finish the body of a switch-statement, which may be given by
990 SWITCH_STMT. The COND to switch on is indicated. */
991
992void
3a978d72 993finish_switch_stmt (tree switch_stmt)
ad321293 994{
325c3691
RH
995 tree scope;
996
ebaae582
SB
997 SWITCH_STMT_BODY (switch_stmt) =
998 pop_stmt_list (SWITCH_STMT_BODY (switch_stmt));
c8094d83 999 pop_switch ();
ad321293 1000 finish_stmt ();
325c3691
RH
1001
1002 scope = TREE_CHAIN (switch_stmt);
1003 TREE_CHAIN (switch_stmt) = NULL;
1004 add_stmt (do_poplevel (scope));
ad321293
MM
1005}
1006
ad321293
MM
1007/* Begin a try-block. Returns a newly-created TRY_BLOCK if
1008 appropriate. */
1009
1010tree
3a978d72 1011begin_try_block (void)
ad321293 1012{
0dfdeca6 1013 tree r = build_stmt (TRY_BLOCK, NULL_TREE, NULL_TREE);
ae499cce 1014 add_stmt (r);
325c3691 1015 TRY_STMTS (r) = push_stmt_list ();
35b1567d 1016 return r;
ad321293
MM
1017}
1018
eaf6fb90
MM
1019/* Likewise, for a function-try-block. The block returned in
1020 *COMPOUND_STMT is an artificial outer scope, containing the
1021 function-try-block. */
0dde4175
JM
1022
1023tree
eaf6fb90 1024begin_function_try_block (tree *compound_stmt)
0dde4175 1025{
eaf6fb90
MM
1026 tree r;
1027 /* This outer scope does not exist in the C++ standard, but we need
1028 a place to put __FUNCTION__ and similar variables. */
1029 *compound_stmt = begin_compound_stmt (0);
1030 r = begin_try_block ();
35b1567d 1031 FN_TRY_BLOCK_P (r) = 1;
35b1567d 1032 return r;
0dde4175
JM
1033}
1034
ad321293
MM
1035/* Finish a try-block, which may be given by TRY_BLOCK. */
1036
1037void
3a978d72 1038finish_try_block (tree try_block)
ad321293 1039{
325c3691
RH
1040 TRY_STMTS (try_block) = pop_stmt_list (TRY_STMTS (try_block));
1041 TRY_HANDLERS (try_block) = push_stmt_list ();
ad321293
MM
1042}
1043
efa8eda3
MM
1044/* Finish the body of a cleanup try-block, which may be given by
1045 TRY_BLOCK. */
1046
62409b39 1047void
3a978d72 1048finish_cleanup_try_block (tree try_block)
62409b39 1049{
325c3691 1050 TRY_STMTS (try_block) = pop_stmt_list (TRY_STMTS (try_block));
62409b39
MM
1051}
1052
f1dedc31
MM
1053/* Finish an implicitly generated try-block, with a cleanup is given
1054 by CLEANUP. */
1055
1056void
3a978d72 1057finish_cleanup (tree cleanup, tree try_block)
f1dedc31 1058{
35b1567d
BC
1059 TRY_HANDLERS (try_block) = cleanup;
1060 CLEANUP_P (try_block) = 1;
f1dedc31
MM
1061}
1062
0dde4175
JM
1063/* Likewise, for a function-try-block. */
1064
1065void
3a978d72 1066finish_function_try_block (tree try_block)
0dde4175 1067{
325c3691
RH
1068 finish_try_block (try_block);
1069 /* FIXME : something queer about CTOR_INITIALIZER somehow following
1070 the try block, but moving it inside. */
b35d4555 1071 in_function_try_handler = 1;
0dde4175
JM
1072}
1073
ad321293
MM
1074/* Finish a handler-sequence for a try-block, which may be given by
1075 TRY_BLOCK. */
1076
1077void
3a978d72 1078finish_handler_sequence (tree try_block)
ad321293 1079{
325c3691 1080 TRY_HANDLERS (try_block) = pop_stmt_list (TRY_HANDLERS (try_block));
35b1567d 1081 check_handlers (TRY_HANDLERS (try_block));
ad321293
MM
1082}
1083
eaf6fb90
MM
1084/* Finish the handler-seq for a function-try-block, given by
1085 TRY_BLOCK. COMPOUND_STMT is the outer block created by
1086 begin_function_try_block. */
0dde4175
JM
1087
1088void
eaf6fb90 1089finish_function_handler_sequence (tree try_block, tree compound_stmt)
0dde4175 1090{
b35d4555 1091 in_function_try_handler = 0;
325c3691 1092 finish_handler_sequence (try_block);
eaf6fb90 1093 finish_compound_stmt (compound_stmt);
35b1567d
BC
1094}
1095
ad321293
MM
1096/* Begin a handler. Returns a HANDLER if appropriate. */
1097
1098tree
3a978d72 1099begin_handler (void)
ad321293
MM
1100{
1101 tree r;
325c3691 1102
0dfdeca6 1103 r = build_stmt (HANDLER, NULL_TREE, NULL_TREE);
ae499cce 1104 add_stmt (r);
325c3691 1105
1a6025b4
JM
1106 /* Create a binding level for the eh_info and the exception object
1107 cleanup. */
325c3691
RH
1108 HANDLER_BODY (r) = do_pushlevel (sk_catch);
1109
ad321293
MM
1110 return r;
1111}
1112
1113/* Finish the handler-parameters for a handler, which may be given by
b35d4555
MM
1114 HANDLER. DECL is the declaration for the catch parameter, or NULL
1115 if this is a `catch (...)' clause. */
ad321293 1116
1a6025b4 1117void
3a978d72 1118finish_handler_parms (tree decl, tree handler)
b35d4555 1119{
1a6025b4 1120 tree type = NULL_TREE;
b35d4555
MM
1121 if (processing_template_decl)
1122 {
1123 if (decl)
1124 {
1125 decl = pushdecl (decl);
1126 decl = push_template_decl (decl);
325c3691 1127 HANDLER_PARMS (handler) = decl;
1a6025b4 1128 type = TREE_TYPE (decl);
b35d4555
MM
1129 }
1130 }
35b1567d 1131 else
1a6025b4 1132 type = expand_start_catch_block (decl);
1a6025b4 1133 HANDLER_TYPE (handler) = type;
b80cfdcd 1134 if (!processing_template_decl && type)
6cad4e17 1135 mark_used (eh_type_info (type));
35b1567d
BC
1136}
1137
1138/* Finish a handler, which may be given by HANDLER. The BLOCKs are
1139 the return value from the matching call to finish_handler_parms. */
1140
1141void
3a978d72 1142finish_handler (tree handler)
35b1567d
BC
1143{
1144 if (!processing_template_decl)
1a6025b4 1145 expand_end_catch_block ();
325c3691 1146 HANDLER_BODY (handler) = do_poplevel (HANDLER_BODY (handler));
35b1567d
BC
1147}
1148
5882f0f3 1149/* Begin a compound statement. FLAGS contains some bits that control the
5995ebfb 1150 behavior and context. If BCS_NO_SCOPE is set, the compound statement
5882f0f3 1151 does not define a scope. If BCS_FN_BODY is set, this is the outermost
c8094d83 1152 block of a function. If BCS_TRY_BLOCK is set, this is the block
5882f0f3
RH
1153 created on behalf of a TRY statement. Returns a token to be passed to
1154 finish_compound_stmt. */
ad321293
MM
1155
1156tree
325c3691 1157begin_compound_stmt (unsigned int flags)
ad321293 1158{
325c3691 1159 tree r;
558475f0 1160
325c3691
RH
1161 if (flags & BCS_NO_SCOPE)
1162 {
1163 r = push_stmt_list ();
1164 STATEMENT_LIST_NO_SCOPE (r) = 1;
1165
1166 /* Normally, we try hard to keep the BLOCK for a statement-expression.
1167 But, if it's a statement-expression with a scopeless block, there's
1168 nothing to keep, and we don't want to accidentally keep a block
c8094d83 1169 *inside* the scopeless block. */
325c3691
RH
1170 keep_next_level (false);
1171 }
f1dedc31 1172 else
325c3691
RH
1173 r = do_pushlevel (flags & BCS_TRY_BLOCK ? sk_try : sk_block);
1174
5882f0f3
RH
1175 /* When processing a template, we need to remember where the braces were,
1176 so that we can set up identical scopes when instantiating the template
1177 later. BIND_EXPR is a handy candidate for this.
1178 Note that do_poplevel won't create a BIND_EXPR itself here (and thus
1179 result in nested BIND_EXPRs), since we don't build BLOCK nodes when
1180 processing templates. */
1181 if (processing_template_decl)
325c3691 1182 {
f293ce4b 1183 r = build3 (BIND_EXPR, NULL, NULL, r, NULL);
5882f0f3
RH
1184 BIND_EXPR_TRY_BLOCK (r) = (flags & BCS_TRY_BLOCK) != 0;
1185 BIND_EXPR_BODY_BLOCK (r) = (flags & BCS_FN_BODY) != 0;
325c3691
RH
1186 TREE_SIDE_EFFECTS (r) = 1;
1187 }
ad321293
MM
1188
1189 return r;
1190}
1191
5882f0f3 1192/* Finish a compound-statement, which is given by STMT. */
ad321293 1193
325c3691
RH
1194void
1195finish_compound_stmt (tree stmt)
ad321293 1196{
5882f0f3
RH
1197 if (TREE_CODE (stmt) == BIND_EXPR)
1198 BIND_EXPR_BODY (stmt) = do_poplevel (BIND_EXPR_BODY (stmt));
325c3691
RH
1199 else if (STATEMENT_LIST_NO_SCOPE (stmt))
1200 stmt = pop_stmt_list (stmt);
7a3397c7 1201 else
5f070bc7
ZL
1202 {
1203 /* Destroy any ObjC "super" receivers that may have been
1204 created. */
1205 objc_clear_super_receiver ();
1206
1207 stmt = do_poplevel (stmt);
1208 }
ad321293 1209
325c3691
RH
1210 /* ??? See c_end_compound_stmt wrt statement expressions. */
1211 add_stmt (stmt);
ad321293 1212 finish_stmt ();
ad321293
MM
1213}
1214
6de9cd9a
DN
1215/* Finish an asm-statement, whose components are a STRING, some
1216 OUTPUT_OPERANDS, some INPUT_OPERANDS, and some CLOBBERS. Also note
1217 whether the asm-statement should be considered volatile. */
7dc5bd62 1218
3e4d04a1 1219tree
6de9cd9a
DN
1220finish_asm_stmt (int volatile_p, tree string, tree output_operands,
1221 tree input_operands, tree clobbers)
35b1567d
BC
1222{
1223 tree r;
abfc8a36 1224 tree t;
5544530a
PB
1225 int ninputs = list_length (input_operands);
1226 int noutputs = list_length (output_operands);
abfc8a36 1227
abfc8a36 1228 if (!processing_template_decl)
40b18c0a 1229 {
74f0c611
RH
1230 const char *constraint;
1231 const char **oconstraints;
1232 bool allows_mem, allows_reg, is_inout;
1233 tree operand;
40b18c0a 1234 int i;
40b18c0a 1235
74f0c611
RH
1236 oconstraints = (const char **) alloca (noutputs * sizeof (char *));
1237
1238 string = resolve_asm_operand_names (string, output_operands,
1239 input_operands);
1240
1241 for (i = 0, t = output_operands; t; t = TREE_CHAIN (t), ++i)
40b18c0a 1242 {
74f0c611
RH
1243 operand = TREE_VALUE (t);
1244
1245 /* ??? Really, this should not be here. Users should be using a
1246 proper lvalue, dammit. But there's a long history of using
1247 casts in the output operands. In cases like longlong.h, this
1248 becomes a primitive form of typechecking -- if the cast can be
1249 removed, then the output operand had a type of the proper width;
1250 otherwise we'll get an error. Gross, but ... */
1251 STRIP_NOPS (operand);
1252
5ade1ed2 1253 if (!lvalue_or_else (operand, lv_asm, tf_warning_or_error))
74f0c611
RH
1254 operand = error_mark_node;
1255
3db45ab5 1256 if (operand != error_mark_node
5544530a
PB
1257 && (TREE_READONLY (operand)
1258 || CP_TYPE_CONST_P (TREE_TYPE (operand))
3db45ab5
MS
1259 /* Functions are not modifiable, even though they are
1260 lvalues. */
1261 || TREE_CODE (TREE_TYPE (operand)) == FUNCTION_TYPE
1262 || TREE_CODE (TREE_TYPE (operand)) == METHOD_TYPE
1263 /* If it's an aggregate and any field is const, then it is
1264 effectively const. */
1265 || (CLASS_TYPE_P (TREE_TYPE (operand))
1266 && C_TYPE_FIELDS_READONLY (TREE_TYPE (operand)))))
fabb00fc 1267 readonly_error (operand, "assignment (via 'asm' output)");
5544530a 1268
74f0c611
RH
1269 constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (t)));
1270 oconstraints[i] = constraint;
1271
1272 if (parse_output_constraint (&constraint, i, ninputs, noutputs,
1273 &allows_mem, &allows_reg, &is_inout))
1274 {
1275 /* If the operand is going to end up in memory,
1276 mark it addressable. */
1277 if (!allows_reg && !cxx_mark_addressable (operand))
1278 operand = error_mark_node;
1279 }
1280 else
1281 operand = error_mark_node;
1282
1283 TREE_VALUE (t) = operand;
1284 }
1285
1286 for (i = 0, t = input_operands; t; ++i, t = TREE_CHAIN (t))
1287 {
1288 constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (t)));
c8094d83 1289 operand = decay_conversion (TREE_VALUE (t));
74f0c611 1290
40b18c0a
MM
1291 /* If the type of the operand hasn't been determined (e.g.,
1292 because it involves an overloaded function), then issue
1293 an error message. There's no context available to
1294 resolve the overloading. */
74f0c611 1295 if (TREE_TYPE (operand) == unknown_type_node)
40b18c0a 1296 {
c8094d83 1297 error ("type of asm operand %qE could not be determined",
0cbd7506 1298 TREE_VALUE (t));
74f0c611 1299 operand = error_mark_node;
40b18c0a 1300 }
40b18c0a 1301
74f0c611
RH
1302 if (parse_input_constraint (&constraint, i, ninputs, noutputs, 0,
1303 oconstraints, &allows_mem, &allows_reg))
40b18c0a 1304 {
74f0c611
RH
1305 /* If the operand is going to end up in memory,
1306 mark it addressable. */
b4c33883
AP
1307 if (!allows_reg && allows_mem)
1308 {
1309 /* Strip the nops as we allow this case. FIXME, this really
1310 should be rejected or made deprecated. */
1311 STRIP_NOPS (operand);
1312 if (!cxx_mark_addressable (operand))
1313 operand = error_mark_node;
1314 }
40b18c0a 1315 }
74f0c611
RH
1316 else
1317 operand = error_mark_node;
40b18c0a 1318
74f0c611 1319 TREE_VALUE (t) = operand;
40b18c0a
MM
1320 }
1321 }
abfc8a36 1322
e130a54b 1323 r = build_stmt (ASM_EXPR, string,
0dfdeca6
BC
1324 output_operands, input_operands,
1325 clobbers);
5544530a 1326 ASM_VOLATILE_P (r) = volatile_p || noutputs == 0;
0ad28dde 1327 r = maybe_cleanup_point_expr_void (r);
3e4d04a1 1328 return add_stmt (r);
ad321293 1329}
b4c4a9ec 1330
f01b0acb
MM
1331/* Finish a label with the indicated NAME. */
1332
a723baf1 1333tree
3a978d72 1334finish_label_stmt (tree name)
f01b0acb 1335{
5b030314 1336 tree decl = define_label (input_location, name);
417fa55b
LM
1337
1338 if (decl == error_mark_node)
1339 return error_mark_node;
1340
9e14e18f 1341 return add_stmt (build_stmt (LABEL_EXPR, decl));
f01b0acb
MM
1342}
1343
acef433b
MM
1344/* Finish a series of declarations for local labels. G++ allows users
1345 to declare "local" labels, i.e., labels with scope. This extension
1346 is useful when writing code involving statement-expressions. */
1347
1348void
3a978d72 1349finish_label_decl (tree name)
acef433b 1350{
a6d76a95
PC
1351 if (!at_function_scope_p ())
1352 {
1353 error ("__label__ declarations are only allowed in function scopes");
1354 return;
1355 }
1356
1357 add_decl_expr (declare_local_label (name));
acef433b
MM
1358}
1359
659e5a7a 1360/* When DECL goes out of scope, make sure that CLEANUP is executed. */
f1dedc31 1361
c8094d83 1362void
3a978d72 1363finish_decl_cleanup (tree decl, tree cleanup)
f1dedc31 1364{
325c3691 1365 push_cleanup (decl, cleanup, false);
35b1567d
BC
1366}
1367
659e5a7a 1368/* If the current scope exits with an exception, run CLEANUP. */
24bef158 1369
659e5a7a 1370void
3a978d72 1371finish_eh_cleanup (tree cleanup)
24bef158 1372{
325c3691 1373 push_cleanup (NULL, cleanup, true);
35b1567d
BC
1374}
1375
2282d28d
MM
1376/* The MEM_INITS is a list of mem-initializers, in reverse of the
1377 order they were written by the user. Each node is as for
1378 emit_mem_initializers. */
bf3428d0
MM
1379
1380void
2282d28d 1381finish_mem_initializers (tree mem_inits)
bf3428d0 1382{
2282d28d
MM
1383 /* Reorder the MEM_INITS so that they are in the order they appeared
1384 in the source program. */
1385 mem_inits = nreverse (mem_inits);
bf3428d0 1386
a0de9d20 1387 if (processing_template_decl)
5d80a306
DG
1388 {
1389 tree mem;
1390
1391 for (mem = mem_inits; mem; mem = TREE_CHAIN (mem))
1392 {
1393 /* If the TREE_PURPOSE is a TYPE_PACK_EXPANSION, skip the
1394 check for bare parameter packs in the TREE_VALUE, because
1395 any parameter packs in the TREE_VALUE have already been
1396 bound as part of the TREE_PURPOSE. See
1397 make_pack_expansion for more information. */
4439d02f 1398 if (TREE_CODE (TREE_PURPOSE (mem)) != TYPE_PACK_EXPANSION
7b3e2d46 1399 && check_for_bare_parameter_packs (TREE_VALUE (mem)))
4439d02f 1400 TREE_VALUE (mem) = error_mark_node;
5d80a306
DG
1401 }
1402
1403 add_stmt (build_min_nt (CTOR_INITIALIZER, mem_inits));
1404 }
cdd2559c 1405 else
2282d28d 1406 emit_mem_initializers (mem_inits);
558475f0
MM
1407}
1408
b4c4a9ec
MM
1409/* Finish a parenthesized expression EXPR. */
1410
1411tree
3a978d72 1412finish_parenthesized_expr (tree expr)
b4c4a9ec 1413{
6615c446 1414 if (EXPR_P (expr))
78ef5b89 1415 /* This inhibits warnings in c_common_truthvalue_conversion. */
31ec7d2f 1416 TREE_NO_WARNING (expr) = 1;
b4c4a9ec 1417
19420d00
NS
1418 if (TREE_CODE (expr) == OFFSET_REF)
1419 /* [expr.unary.op]/3 The qualified id of a pointer-to-member must not be
1420 enclosed in parentheses. */
1421 PTRMEM_OK_P (expr) = 0;
c8094d83 1422
7a8380ae
NS
1423 if (TREE_CODE (expr) == STRING_CST)
1424 PAREN_STRING_LITERAL_P (expr) = 1;
c8094d83 1425
b4c4a9ec
MM
1426 return expr;
1427}
1428
a723baf1
MM
1429/* Finish a reference to a non-static data member (DECL) that is not
1430 preceded by `.' or `->'. */
1431
1432tree
a3f10e50 1433finish_non_static_data_member (tree decl, tree object, tree qualifying_scope)
a723baf1 1434{
50bc768d 1435 gcc_assert (TREE_CODE (decl) == FIELD_DECL);
a723baf1 1436
a3f10e50 1437 if (!object)
a723baf1 1438 {
c8094d83 1439 if (current_function_decl
a723baf1 1440 && DECL_STATIC_FUNCTION_P (current_function_decl))
dee15844 1441 error ("invalid use of member %q+D in static member function", decl);
a723baf1 1442 else
dee15844 1443 error ("invalid use of non-static data member %q+D", decl);
a723baf1
MM
1444 error ("from this location");
1445
1446 return error_mark_node;
1447 }
1448 TREE_USED (current_class_ptr) = 1;
58e1d54c 1449 if (processing_template_decl && !qualifying_scope)
a723baf1 1450 {
a3f10e50 1451 tree type = TREE_TYPE (decl);
a723baf1 1452
a3f10e50
NS
1453 if (TREE_CODE (type) == REFERENCE_TYPE)
1454 type = TREE_TYPE (type);
1455 else
1456 {
f4f206f4 1457 /* Set the cv qualifiers. */
a3f10e50 1458 int quals = cp_type_quals (TREE_TYPE (current_class_ref));
c8094d83 1459
a3f10e50
NS
1460 if (DECL_MUTABLE_P (decl))
1461 quals &= ~TYPE_QUAL_CONST;
9e95d15f 1462
a3f10e50
NS
1463 quals |= cp_type_quals (TREE_TYPE (decl));
1464 type = cp_build_qualified_type (type, quals);
1465 }
c8094d83 1466
44de5aeb 1467 return build_min (COMPONENT_REF, type, object, decl, NULL_TREE);
a3f10e50
NS
1468 }
1469 else
1470 {
1471 tree access_type = TREE_TYPE (object);
1472 tree lookup_context = context_for_name_lookup (decl);
c8094d83 1473
a3f10e50 1474 while (!DERIVED_FROM_P (lookup_context, access_type))
a723baf1
MM
1475 {
1476 access_type = TYPE_CONTEXT (access_type);
9f01ded6 1477 while (access_type && DECL_P (access_type))
a723baf1 1478 access_type = DECL_CONTEXT (access_type);
a723baf1 1479
a3f10e50
NS
1480 if (!access_type)
1481 {
dee15844 1482 error ("object missing in reference to %q+D", decl);
a3f10e50
NS
1483 error ("from this location");
1484 return error_mark_node;
1485 }
9f01ded6
KL
1486 }
1487
5c425df5 1488 /* If PROCESSING_TEMPLATE_DECL is nonzero here, then
58e1d54c
KL
1489 QUALIFYING_SCOPE is also non-null. Wrap this in a SCOPE_REF
1490 for now. */
1491 if (processing_template_decl)
02ed62dd
MM
1492 return build_qualified_name (TREE_TYPE (decl),
1493 qualifying_scope,
1494 DECL_NAME (decl),
1495 /*template_p=*/false);
58e1d54c 1496
02022f3a
SM
1497 perform_or_defer_access_check (TYPE_BINFO (access_type), decl,
1498 decl);
a723baf1
MM
1499
1500 /* If the data member was named `C::M', convert `*this' to `C'
1501 first. */
1502 if (qualifying_scope)
1503 {
1504 tree binfo = NULL_TREE;
1505 object = build_scoped_ref (object, qualifying_scope,
1506 &binfo);
1507 }
1508
1509 return build_class_member_access_expr (object, decl,
1510 /*access_path=*/NULL_TREE,
5ade1ed2
DG
1511 /*preserve_reference=*/false,
1512 tf_warning_or_error);
a723baf1
MM
1513 }
1514}
1515
ee76b931
MM
1516/* DECL was the declaration to which a qualified-id resolved. Issue
1517 an error message if it is not accessible. If OBJECT_TYPE is
1518 non-NULL, we have just seen `x->' or `x.' and OBJECT_TYPE is the
1519 type of `*x', or `x', respectively. If the DECL was named as
1520 `A::B' then NESTED_NAME_SPECIFIER is `A'. */
1521
1522void
c8094d83
MS
1523check_accessibility_of_qualified_id (tree decl,
1524 tree object_type,
ee76b931
MM
1525 tree nested_name_specifier)
1526{
1527 tree scope;
1528 tree qualifying_type = NULL_TREE;
95b4aca6 1529
77880ae4 1530 /* If we're not checking, return immediately. */
95b4aca6
NS
1531 if (deferred_access_no_check)
1532 return;
c8094d83 1533
ee76b931
MM
1534 /* Determine the SCOPE of DECL. */
1535 scope = context_for_name_lookup (decl);
1536 /* If the SCOPE is not a type, then DECL is not a member. */
1537 if (!TYPE_P (scope))
1538 return;
1539 /* Compute the scope through which DECL is being accessed. */
c8094d83 1540 if (object_type
ee76b931
MM
1541 /* OBJECT_TYPE might not be a class type; consider:
1542
1543 class A { typedef int I; };
1544 I *p;
1545 p->A::I::~I();
1546
0cbd7506 1547 In this case, we will have "A::I" as the DECL, but "I" as the
ee76b931
MM
1548 OBJECT_TYPE. */
1549 && CLASS_TYPE_P (object_type)
1550 && DERIVED_FROM_P (scope, object_type))
1551 /* If we are processing a `->' or `.' expression, use the type of the
1552 left-hand side. */
1553 qualifying_type = object_type;
1554 else if (nested_name_specifier)
1555 {
1556 /* If the reference is to a non-static member of the
1557 current class, treat it as if it were referenced through
1558 `this'. */
1559 if (DECL_NONSTATIC_MEMBER_P (decl)
1560 && current_class_ptr
1561 && DERIVED_FROM_P (scope, current_class_type))
1562 qualifying_type = current_class_type;
1563 /* Otherwise, use the type indicated by the
1564 nested-name-specifier. */
1565 else
1566 qualifying_type = nested_name_specifier;
1567 }
1568 else
1569 /* Otherwise, the name must be from the current class or one of
1570 its bases. */
1571 qualifying_type = currently_open_derived_class (scope);
1572
fc429748
MM
1573 if (qualifying_type
1574 /* It is possible for qualifying type to be a TEMPLATE_TYPE_PARM
1575 or similar in a default argument value. */
1576 && CLASS_TYPE_P (qualifying_type)
1577 && !dependent_type_p (qualifying_type))
02022f3a
SM
1578 perform_or_defer_access_check (TYPE_BINFO (qualifying_type), decl,
1579 decl);
ee76b931
MM
1580}
1581
1582/* EXPR is the result of a qualified-id. The QUALIFYING_CLASS was the
1583 class named to the left of the "::" operator. DONE is true if this
1584 expression is a complete postfix-expression; it is false if this
1585 expression is followed by '->', '[', '(', etc. ADDRESS_P is true
02ed62dd
MM
1586 iff this expression is the operand of '&'. TEMPLATE_P is true iff
1587 the qualified-id was of the form "A::template B". TEMPLATE_ARG_P
1588 is true iff this qualified name appears as a template argument. */
ee76b931
MM
1589
1590tree
3db45ab5
MS
1591finish_qualified_id_expr (tree qualifying_class,
1592 tree expr,
02ed62dd 1593 bool done,
3db45ab5 1594 bool address_p,
02ed62dd
MM
1595 bool template_p,
1596 bool template_arg_p)
ee76b931 1597{
d4f0f205
MM
1598 gcc_assert (TYPE_P (qualifying_class));
1599
5e08432e
MM
1600 if (error_operand_p (expr))
1601 return error_mark_node;
1602
7eab6e7b 1603 if (DECL_P (expr) || BASELINK_P (expr))
d4f0f205 1604 mark_used (expr);
d4f0f205 1605
02ed62dd
MM
1606 if (template_p)
1607 check_template_keyword (expr);
1608
ee76b931
MM
1609 /* If EXPR occurs as the operand of '&', use special handling that
1610 permits a pointer-to-member. */
1611 if (address_p && done)
1612 {
1613 if (TREE_CODE (expr) == SCOPE_REF)
1614 expr = TREE_OPERAND (expr, 1);
c8094d83 1615 expr = build_offset_ref (qualifying_class, expr,
a5ac359a 1616 /*address_p=*/true);
ee76b931
MM
1617 return expr;
1618 }
1619
02ed62dd
MM
1620 /* Within the scope of a class, turn references to non-static
1621 members into expression of the form "this->...". */
1622 if (template_arg_p)
1623 /* But, within a template argument, we do not want make the
1624 transformation, as there is no "this" pointer. */
1625 ;
1626 else if (TREE_CODE (expr) == FIELD_DECL)
43854f72
SB
1627 {
1628 push_deferring_access_checks (dk_no_check);
1629 expr = finish_non_static_data_member (expr, current_class_ref,
1630 qualifying_class);
1631 pop_deferring_access_checks ();
1632 }
ee76b931
MM
1633 else if (BASELINK_P (expr) && !processing_template_decl)
1634 {
ee76b931
MM
1635 tree fns;
1636
1637 /* See if any of the functions are non-static members. */
1638 fns = BASELINK_FUNCTIONS (expr);
1639 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
1640 fns = TREE_OPERAND (fns, 0);
ee76b931
MM
1641 /* If so, the expression may be relative to the current
1642 class. */
821eaf2a 1643 if (!shared_member_p (fns)
c8094d83 1644 && current_class_type
ee76b931 1645 && DERIVED_FROM_P (qualifying_class, current_class_type))
c8094d83 1646 expr = (build_class_member_access_expr
ee76b931
MM
1647 (maybe_dummy_object (qualifying_class, NULL),
1648 expr,
1649 BASELINK_ACCESS_BINFO (expr),
5ade1ed2
DG
1650 /*preserve_reference=*/false,
1651 tf_warning_or_error));
ee76b931 1652 else if (done)
a5ac359a
MM
1653 /* The expression is a qualified name whose address is not
1654 being taken. */
1655 expr = build_offset_ref (qualifying_class, expr, /*address_p=*/false);
ee76b931
MM
1656 }
1657
1658 return expr;
1659}
1660
b69b1501
MM
1661/* Begin a statement-expression. The value returned must be passed to
1662 finish_stmt_expr. */
b4c4a9ec 1663
c8094d83 1664tree
3a978d72 1665begin_stmt_expr (void)
b4c4a9ec 1666{
325c3691 1667 return push_stmt_list ();
35b1567d
BC
1668}
1669
a5bcc582 1670/* Process the final expression of a statement expression. EXPR can be
85a56c9d
MM
1671 NULL, if the final expression is empty. Return a STATEMENT_LIST
1672 containing all the statements in the statement-expression, or
1673 ERROR_MARK_NODE if there was an error. */
a5bcc582
NS
1674
1675tree
325c3691 1676finish_stmt_expr_expr (tree expr, tree stmt_expr)
a5bcc582 1677{
72e4661a 1678 if (error_operand_p (expr))
76b9a2a1
AP
1679 {
1680 /* The type of the statement-expression is the type of the last
1681 expression. */
1682 TREE_TYPE (stmt_expr) = error_mark_node;
1683 return error_mark_node;
1684 }
c8094d83 1685
85a56c9d 1686 /* If the last statement does not have "void" type, then the value
3db45ab5 1687 of the last statement is the value of the entire expression. */
a5bcc582
NS
1688 if (expr)
1689 {
c6c7698d
JM
1690 tree type = TREE_TYPE (expr);
1691
1692 if (processing_template_decl)
1693 {
1694 expr = build_stmt (EXPR_STMT, expr);
1695 expr = add_stmt (expr);
1696 /* Mark the last statement so that we can recognize it as such at
1697 template-instantiation time. */
1698 EXPR_STMT_STMT_EXPR_RESULT (expr) = 1;
1699 }
1700 else if (VOID_TYPE_P (type))
a5bcc582 1701 {
c6c7698d
JM
1702 /* Just treat this like an ordinary statement. */
1703 expr = finish_expr_stmt (expr);
1704 }
1705 else
1706 {
1707 /* It actually has a value we need to deal with. First, force it
1708 to be an rvalue so that we won't need to build up a copy
1709 constructor call later when we try to assign it to something. */
1710 expr = force_rvalue (expr);
85a56c9d
MM
1711 if (error_operand_p (expr))
1712 return error_mark_node;
c6c7698d
JM
1713
1714 /* Update for array-to-pointer decay. */
2692eb7d 1715 type = TREE_TYPE (expr);
c6c7698d
JM
1716
1717 /* Wrap it in a CLEANUP_POINT_EXPR and add it to the list like a
1718 normal statement, but don't convert to void or actually add
1719 the EXPR_STMT. */
1720 if (TREE_CODE (expr) != CLEANUP_POINT_EXPR)
1721 expr = maybe_cleanup_point_expr (expr);
1722 add_stmt (expr);
85a56c9d 1723 }
c6c7698d 1724
85a56c9d
MM
1725 /* The type of the statement-expression is the type of the last
1726 expression. */
1727 TREE_TYPE (stmt_expr) = type;
a5bcc582 1728 }
c8094d83 1729
85a56c9d 1730 return stmt_expr;
a5bcc582
NS
1731}
1732
303b7406
NS
1733/* Finish a statement-expression. EXPR should be the value returned
1734 by the previous begin_stmt_expr. Returns an expression
1735 representing the statement-expression. */
b4c4a9ec 1736
c8094d83 1737tree
325c3691 1738finish_stmt_expr (tree stmt_expr, bool has_no_scope)
b4c4a9ec 1739{
85a56c9d
MM
1740 tree type;
1741 tree result;
325c3691 1742
85a56c9d
MM
1743 if (error_operand_p (stmt_expr))
1744 return error_mark_node;
325c3691 1745
85a56c9d 1746 gcc_assert (TREE_CODE (stmt_expr) == STATEMENT_LIST);
325c3691 1747
85a56c9d
MM
1748 type = TREE_TYPE (stmt_expr);
1749 result = pop_stmt_list (stmt_expr);
c6c7698d 1750 TREE_TYPE (result) = type;
6f80451c 1751
a5bcc582 1752 if (processing_template_decl)
325c3691
RH
1753 {
1754 result = build_min (STMT_EXPR, type, result);
1755 TREE_SIDE_EFFECTS (result) = 1;
1756 STMT_EXPR_NO_SCOPE (result) = has_no_scope;
1757 }
c6c7698d 1758 else if (CLASS_TYPE_P (type))
a5bcc582 1759 {
c6c7698d
JM
1760 /* Wrap the statement-expression in a TARGET_EXPR so that the
1761 temporary object created by the final expression is destroyed at
1762 the end of the full-expression containing the
1763 statement-expression. */
1764 result = force_target_expr (type, result);
a5bcc582 1765 }
325c3691 1766
b4c4a9ec
MM
1767 return result;
1768}
1769
c2acde1e
JM
1770/* Returns the expression which provides the value of STMT_EXPR. */
1771
1772tree
1773stmt_expr_value_expr (tree stmt_expr)
1774{
1775 tree t = STMT_EXPR_STMT (stmt_expr);
1776
1777 if (TREE_CODE (t) == BIND_EXPR)
1778 t = BIND_EXPR_BODY (t);
1779
1780 if (TREE_CODE (t) == STATEMENT_LIST)
1781 t = STATEMENT_LIST_TAIL (t)->stmt;
1782
1783 if (TREE_CODE (t) == EXPR_STMT)
1784 t = EXPR_STMT_EXPR (t);
1785
1786 return t;
1787}
1788
b3445994 1789/* Perform Koenig lookup. FN is the postfix-expression representing
fa531100
MM
1790 the function (or functions) to call; ARGS are the arguments to the
1791 call. Returns the functions to be considered by overload
1792 resolution. */
b3445994
MM
1793
1794tree
1795perform_koenig_lookup (tree fn, tree args)
1796{
1797 tree identifier = NULL_TREE;
1798 tree functions = NULL_TREE;
1799
1800 /* Find the name of the overloaded function. */
1801 if (TREE_CODE (fn) == IDENTIFIER_NODE)
1802 identifier = fn;
1803 else if (is_overloaded_fn (fn))
1804 {
1805 functions = fn;
1806 identifier = DECL_NAME (get_first_fn (functions));
1807 }
1808 else if (DECL_P (fn))
1809 {
1810 functions = fn;
1811 identifier = DECL_NAME (fn);
1812 }
1813
1814 /* A call to a namespace-scope function using an unqualified name.
1815
1816 Do Koenig lookup -- unless any of the arguments are
1817 type-dependent. */
1818 if (!any_type_dependent_arguments_p (args))
1819 {
1820 fn = lookup_arg_dependent (identifier, functions, args);
1821 if (!fn)
1822 /* The unqualified name could not be resolved. */
1823 fn = unqualified_fn_lookup_error (identifier);
1824 }
b3445994
MM
1825
1826 return fn;
1827}
1828
4ba126e4
MM
1829/* Generate an expression for `FN (ARGS)'.
1830
1831 If DISALLOW_VIRTUAL is true, the call to FN will be not generated
1832 as a virtual call, even if FN is virtual. (This flag is set when
1833 encountering an expression where the function name is explicitly
1834 qualified. For example a call to `X::f' never generates a virtual
1835 call.)
1836
1837 Returns code for the call. */
b4c4a9ec 1838
c8094d83 1839tree
5ade1ed2
DG
1840finish_call_expr (tree fn, tree args, bool disallow_virtual, bool koenig_p,
1841 tsubst_flags_t complain)
b4c4a9ec 1842{
d17811fd
MM
1843 tree result;
1844 tree orig_fn;
1845 tree orig_args;
1846
4ba126e4
MM
1847 if (fn == error_mark_node || args == error_mark_node)
1848 return error_mark_node;
1849
4ba126e4 1850 /* ARGS should be a list of arguments. */
50bc768d 1851 gcc_assert (!args || TREE_CODE (args) == TREE_LIST);
4860b874 1852 gcc_assert (!TYPE_P (fn));
a759e627 1853
d17811fd
MM
1854 orig_fn = fn;
1855 orig_args = args;
1856
1857 if (processing_template_decl)
1858 {
1859 if (type_dependent_expression_p (fn)
1860 || any_type_dependent_arguments_p (args))
6d80c4b9 1861 {
5039610b 1862 result = build_nt_call_list (fn, args);
6d80c4b9 1863 KOENIG_LOOKUP_P (result) = koenig_p;
be461b8f
JJ
1864 if (cfun)
1865 {
1866 do
1867 {
1868 tree fndecl = OVL_CURRENT (fn);
1869 if (TREE_CODE (fndecl) != FUNCTION_DECL
1870 || !TREE_THIS_VOLATILE (fndecl))
1871 break;
1872 fn = OVL_NEXT (fn);
1873 }
1874 while (fn);
1875 if (!fn)
1876 current_function_returns_abnormally = 1;
1877 }
6d80c4b9
MM
1878 return result;
1879 }
d17811fd
MM
1880 if (!BASELINK_P (fn)
1881 && TREE_CODE (fn) != PSEUDO_DTOR_EXPR
1882 && TREE_TYPE (fn) != unknown_type_node)
1883 fn = build_non_dependent_expr (fn);
1884 args = build_non_dependent_args (orig_args);
1885 }
1886
eff3a276
MM
1887 if (is_overloaded_fn (fn))
1888 fn = baselink_for_fns (fn);
a723baf1 1889
d17811fd 1890 result = NULL_TREE;
4ba126e4 1891 if (BASELINK_P (fn))
03d82991 1892 {
4ba126e4
MM
1893 tree object;
1894
1895 /* A call to a member function. From [over.call.func]:
1896
1897 If the keyword this is in scope and refers to the class of
1898 that member function, or a derived class thereof, then the
1899 function call is transformed into a qualified function call
1900 using (*this) as the postfix-expression to the left of the
1901 . operator.... [Otherwise] a contrived object of type T
c8094d83 1902 becomes the implied object argument.
4ba126e4 1903
0cbd7506 1904 This paragraph is unclear about this situation:
4ba126e4
MM
1905
1906 struct A { void f(); };
1907 struct B : public A {};
1908 struct C : public A { void g() { B::f(); }};
1909
1910 In particular, for `B::f', this paragraph does not make clear
c8094d83 1911 whether "the class of that member function" refers to `A' or
4ba126e4 1912 to `B'. We believe it refers to `B'. */
c8094d83 1913 if (current_class_type
4ba126e4
MM
1914 && DERIVED_FROM_P (BINFO_TYPE (BASELINK_ACCESS_BINFO (fn)),
1915 current_class_type)
1916 && current_class_ref)
127b8136
MM
1917 object = maybe_dummy_object (BINFO_TYPE (BASELINK_ACCESS_BINFO (fn)),
1918 NULL);
4ba126e4
MM
1919 else
1920 {
1921 tree representative_fn;
b4c4a9ec 1922
4ba126e4
MM
1923 representative_fn = BASELINK_FUNCTIONS (fn);
1924 if (TREE_CODE (representative_fn) == TEMPLATE_ID_EXPR)
1925 representative_fn = TREE_OPERAND (representative_fn, 0);
1926 representative_fn = get_first_fn (representative_fn);
1927 object = build_dummy_object (DECL_CONTEXT (representative_fn));
1928 }
b4c4a9ec 1929
d17811fd
MM
1930 if (processing_template_decl)
1931 {
1932 if (type_dependent_expression_p (object))
5039610b 1933 return build_nt_call_list (orig_fn, orig_args);
d17811fd
MM
1934 object = build_non_dependent_expr (object);
1935 }
1936
1937 result = build_new_method_call (object, fn, args, NULL_TREE,
c8094d83 1938 (disallow_virtual
63c9a190 1939 ? LOOKUP_NONVIRTUAL : 0),
5ade1ed2
DG
1940 /*fn_p=*/NULL,
1941 complain);
4ba126e4
MM
1942 }
1943 else if (is_overloaded_fn (fn))
16c35a1f
RH
1944 {
1945 /* If the function is an overloaded builtin, resolve it. */
1946 if (TREE_CODE (fn) == FUNCTION_DECL
58646b77
PB
1947 && (DECL_BUILT_IN_CLASS (fn) == BUILT_IN_NORMAL
1948 || DECL_BUILT_IN_CLASS (fn) == BUILT_IN_MD))
0cbd7506 1949 result = resolve_overloaded_builtin (fn, args);
16c35a1f
RH
1950
1951 if (!result)
1952 /* A call to a namespace-scope function. */
5ade1ed2 1953 result = build_new_function_call (fn, args, koenig_p, complain);
16c35a1f 1954 }
a723baf1
MM
1955 else if (TREE_CODE (fn) == PSEUDO_DTOR_EXPR)
1956 {
a723baf1
MM
1957 if (args)
1958 error ("arguments to destructor are not allowed");
1959 /* Mark the pseudo-destructor call as having side-effects so
1960 that we do not issue warnings about its use. */
1961 result = build1 (NOP_EXPR,
1962 void_type_node,
1963 TREE_OPERAND (fn, 0));
1964 TREE_SIDE_EFFECTS (result) = 1;
a723baf1 1965 }
4ba126e4 1966 else if (CLASS_TYPE_P (TREE_TYPE (fn)))
d17811fd
MM
1967 /* If the "function" is really an object of class type, it might
1968 have an overloaded `operator ()'. */
ec835fb2 1969 result = build_new_op (CALL_EXPR, LOOKUP_NORMAL, fn, args, NULL_TREE,
5ade1ed2 1970 /*overloaded_p=*/NULL, complain);
16c35a1f 1971
d17811fd
MM
1972 if (!result)
1973 /* A call where the function is unknown. */
5ade1ed2 1974 result = cp_build_function_call (fn, args, complain);
4ba126e4 1975
d17811fd 1976 if (processing_template_decl)
6d80c4b9 1977 {
5039610b 1978 result = build_call_list (TREE_TYPE (result), orig_fn, orig_args);
6d80c4b9
MM
1979 KOENIG_LOOKUP_P (result) = koenig_p;
1980 }
d17811fd 1981 return result;
b4c4a9ec
MM
1982}
1983
1984/* Finish a call to a postfix increment or decrement or EXPR. (Which
1985 is indicated by CODE, which should be POSTINCREMENT_EXPR or
1986 POSTDECREMENT_EXPR.) */
1987
c8094d83 1988tree
3a978d72 1989finish_increment_expr (tree expr, enum tree_code code)
b4c4a9ec 1990{
5ade1ed2 1991 return build_x_unary_op (code, expr, tf_warning_or_error);
b4c4a9ec
MM
1992}
1993
1994/* Finish a use of `this'. Returns an expression for `this'. */
1995
c8094d83 1996tree
3a978d72 1997finish_this_expr (void)
b4c4a9ec
MM
1998{
1999 tree result;
2000
2001 if (current_class_ptr)
2002 {
b4c4a9ec
MM
2003 result = current_class_ptr;
2004 }
2005 else if (current_function_decl
2006 && DECL_STATIC_FUNCTION_P (current_function_decl))
2007 {
9e637a26 2008 error ("%<this%> is unavailable for static member functions");
b4c4a9ec
MM
2009 result = error_mark_node;
2010 }
2011 else
2012 {
2013 if (current_function_decl)
9e637a26 2014 error ("invalid use of %<this%> in non-member function");
b4c4a9ec 2015 else
9e637a26 2016 error ("invalid use of %<this%> at top level");
b4c4a9ec
MM
2017 result = error_mark_node;
2018 }
2019
2020 return result;
2021}
2022
a723baf1
MM
2023/* Finish a pseudo-destructor expression. If SCOPE is NULL, the
2024 expression was of the form `OBJECT.~DESTRUCTOR' where DESTRUCTOR is
2025 the TYPE for the type given. If SCOPE is non-NULL, the expression
2026 was of the form `OBJECT.SCOPE::~DESTRUCTOR'. */
b4c4a9ec 2027
c8094d83 2028tree
3a978d72 2029finish_pseudo_destructor_expr (tree object, tree scope, tree destructor)
b4c4a9ec 2030{
09b1ccd6 2031 if (object == error_mark_node || destructor == error_mark_node)
a723baf1 2032 return error_mark_node;
40242ccf 2033
50bc768d 2034 gcc_assert (TYPE_P (destructor));
b4c4a9ec 2035
a723baf1
MM
2036 if (!processing_template_decl)
2037 {
2038 if (scope == error_mark_node)
2039 {
2040 error ("invalid qualifying scope in pseudo-destructor name");
2041 return error_mark_node;
2042 }
5cf10afb
AP
2043 if (scope && TYPE_P (scope) && !check_dtor_name (scope, destructor))
2044 {
2045 error ("qualified type %qT does not match destructor name ~%qT",
2046 scope, destructor);
2047 return error_mark_node;
2048 }
2049
c8094d83 2050
26bcf8fc
MM
2051 /* [expr.pseudo] says both:
2052
0cbd7506 2053 The type designated by the pseudo-destructor-name shall be
26bcf8fc
MM
2054 the same as the object type.
2055
0cbd7506 2056 and:
26bcf8fc 2057
0cbd7506 2058 The cv-unqualified versions of the object type and of the
26bcf8fc
MM
2059 type designated by the pseudo-destructor-name shall be the
2060 same type.
2061
0cbd7506
MS
2062 We implement the more generous second sentence, since that is
2063 what most other compilers do. */
c8094d83 2064 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (object),
26bcf8fc 2065 destructor))
a723baf1 2066 {
a82e1a7d 2067 error ("%qE is not of type %qT", object, destructor);
a723baf1
MM
2068 return error_mark_node;
2069 }
2070 }
b4c4a9ec 2071
f293ce4b 2072 return build3 (PSEUDO_DTOR_EXPR, void_type_node, object, scope, destructor);
b4c4a9ec
MM
2073}
2074
ce4a0391
MM
2075/* Finish an expression of the form CODE EXPR. */
2076
2077tree
3a978d72 2078finish_unary_op_expr (enum tree_code code, tree expr)
ce4a0391 2079{
5ade1ed2 2080 tree result = build_x_unary_op (code, expr, tf_warning_or_error);
7c355bca
ML
2081 /* Inside a template, build_x_unary_op does not fold the
2082 expression. So check whether the result is folded before
2083 setting TREE_NEGATED_INT. */
2084 if (code == NEGATE_EXPR && TREE_CODE (expr) == INTEGER_CST
88b4335f 2085 && TREE_CODE (result) == INTEGER_CST
8df83eae 2086 && !TYPE_UNSIGNED (TREE_TYPE (result))
88b4335f 2087 && INT_CST_LT (result, integer_zero_node))
6fc98adf
MM
2088 {
2089 /* RESULT may be a cached INTEGER_CST, so we must copy it before
2090 setting TREE_NEGATED_INT. */
2091 result = copy_node (result);
2092 TREE_NEGATED_INT (result) = 1;
2093 }
59c0753d
MLI
2094 if (TREE_OVERFLOW_P (result) && !TREE_OVERFLOW_P (expr))
2095 overflow_warning (result);
2096
ce4a0391
MM
2097 return result;
2098}
2099
a723baf1
MM
2100/* Finish a compound-literal expression. TYPE is the type to which
2101 the INITIALIZER_LIST is being cast. */
2102
2103tree
4038c495 2104finish_compound_literal (tree type, VEC(constructor_elt,gc) *initializer_list)
a723baf1 2105{
e92fb501 2106 tree var;
a723baf1
MM
2107 tree compound_literal;
2108
2b643eda
MM
2109 if (!TYPE_OBJ_P (type))
2110 {
2111 error ("compound literal of non-object type %qT", type);
2112 return error_mark_node;
2113 }
2114
a723baf1 2115 /* Build a CONSTRUCTOR for the INITIALIZER_LIST. */
dcf92453 2116 compound_literal = build_constructor (NULL_TREE, initializer_list);
a723baf1 2117 if (processing_template_decl)
a723baf1 2118 {
e92fb501
MM
2119 TREE_TYPE (compound_literal) = type;
2120 /* Mark the expression as a compound literal. */
2121 TREE_HAS_CONSTRUCTOR (compound_literal) = 1;
2122 return compound_literal;
a723baf1
MM
2123 }
2124
e92fb501
MM
2125 /* Create a temporary variable to represent the compound literal. */
2126 var = create_temporary_var (type);
2127 if (!current_function_decl)
2128 {
2129 /* If this compound-literal appears outside of a function, then
2130 the corresponding variable has static storage duration, just
3db45ab5 2131 like the variable in whose initializer it appears. */
e92fb501
MM
2132 TREE_STATIC (var) = 1;
2133 /* The variable has internal linkage, since there is no need to
2134 reference it from another translation unit. */
2135 TREE_PUBLIC (var) = 0;
2136 /* It must have a name, so that the name mangler can mangle it. */
2137 DECL_NAME (var) = make_anon_name ();
2138 }
2139 /* We must call pushdecl, since the gimplifier complains if the
105d72c5 2140 variable has not been declared via a BIND_EXPR. */
e92fb501
MM
2141 pushdecl (var);
2142 /* Initialize the variable as we would any other variable with a
2143 brace-enclosed initializer. */
3db45ab5 2144 cp_finish_decl (var, compound_literal,
e92fb501
MM
2145 /*init_const_expr_p=*/false,
2146 /*asmspec_tree=*/NULL_TREE,
2147 LOOKUP_ONLYCONVERTING);
2148 return var;
a723baf1
MM
2149}
2150
5f261ba9
MM
2151/* Return the declaration for the function-name variable indicated by
2152 ID. */
2153
2154tree
2155finish_fname (tree id)
2156{
2157 tree decl;
c8094d83 2158
5f261ba9
MM
2159 decl = fname_decl (C_RID_CODE (id), id);
2160 if (processing_template_decl)
10b1d5e7 2161 decl = DECL_NAME (decl);
5f261ba9
MM
2162 return decl;
2163}
2164
8014a339 2165/* Finish a translation unit. */
ce4a0391 2166
c8094d83 2167void
3a978d72 2168finish_translation_unit (void)
ce4a0391
MM
2169{
2170 /* In case there were missing closebraces,
2171 get us back to the global binding level. */
273a708f 2172 pop_everything ();
ce4a0391
MM
2173 while (current_namespace != global_namespace)
2174 pop_namespace ();
0ba8a114 2175
c6002625 2176 /* Do file scope __FUNCTION__ et al. */
0ba8a114 2177 finish_fname_decls ();
ce4a0391
MM
2178}
2179
b4c4a9ec
MM
2180/* Finish a template type parameter, specified as AGGR IDENTIFIER.
2181 Returns the parameter. */
2182
c8094d83 2183tree
3a978d72 2184finish_template_type_parm (tree aggr, tree identifier)
b4c4a9ec 2185{
6eabb241 2186 if (aggr != class_type_node)
b4c4a9ec 2187 {
9e637a26 2188 pedwarn ("template type parameters must use the keyword %<class%> or %<typename%>");
b4c4a9ec
MM
2189 aggr = class_type_node;
2190 }
2191
2192 return build_tree_list (aggr, identifier);
2193}
2194
2195/* Finish a template template parameter, specified as AGGR IDENTIFIER.
2196 Returns the parameter. */
2197
c8094d83 2198tree
3a978d72 2199finish_template_template_parm (tree aggr, tree identifier)
b4c4a9ec
MM
2200{
2201 tree decl = build_decl (TYPE_DECL, identifier, NULL_TREE);
2202 tree tmpl = build_lang_decl (TEMPLATE_DECL, identifier, NULL_TREE);
2203 DECL_TEMPLATE_PARMS (tmpl) = current_template_parms;
2204 DECL_TEMPLATE_RESULT (tmpl) = decl;
c727aa5e 2205 DECL_ARTIFICIAL (decl) = 1;
b4c4a9ec
MM
2206 end_template_decl ();
2207
50bc768d 2208 gcc_assert (DECL_TEMPLATE_PARMS (tmpl));
b37bf5bd 2209
85d85234
DG
2210 check_default_tmpl_args (decl, DECL_TEMPLATE_PARMS (tmpl),
2211 /*is_primary=*/true, /*is_partial=*/false,
2212 /*is_friend=*/0);
2213
b4c4a9ec
MM
2214 return finish_template_type_parm (aggr, tmpl);
2215}
ce4a0391 2216
8ba658ee
MM
2217/* ARGUMENT is the default-argument value for a template template
2218 parameter. If ARGUMENT is invalid, issue error messages and return
2219 the ERROR_MARK_NODE. Otherwise, ARGUMENT itself is returned. */
2220
2221tree
2222check_template_template_default_arg (tree argument)
2223{
2224 if (TREE_CODE (argument) != TEMPLATE_DECL
2225 && TREE_CODE (argument) != TEMPLATE_TEMPLATE_PARM
8ba658ee
MM
2226 && TREE_CODE (argument) != UNBOUND_CLASS_TEMPLATE)
2227 {
a3a503a5 2228 if (TREE_CODE (argument) == TYPE_DECL)
e488a090
VR
2229 error ("invalid use of type %qT as a default value for a template "
2230 "template-parameter", TREE_TYPE (argument));
a3a503a5
GB
2231 else
2232 error ("invalid default argument for a template template parameter");
8ba658ee
MM
2233 return error_mark_node;
2234 }
2235
2236 return argument;
2237}
2238
ce4a0391
MM
2239/* Begin a class definition, as indicated by T. */
2240
2241tree
b9e75696 2242begin_class_definition (tree t, tree attributes)
ce4a0391 2243{
7437519c
ZW
2244 if (t == error_mark_node)
2245 return error_mark_node;
2246
522d6614
NS
2247 if (processing_template_parmlist)
2248 {
a82e1a7d 2249 error ("definition of %q#T inside template parameter list", t);
522d6614
NS
2250 return error_mark_node;
2251 }
47ee8904
MM
2252 /* A non-implicit typename comes from code like:
2253
2254 template <typename T> struct A {
0cbd7506 2255 template <typename U> struct A<T>::B ...
47ee8904
MM
2256
2257 This is erroneous. */
2258 else if (TREE_CODE (t) == TYPENAME_TYPE)
2259 {
a82e1a7d 2260 error ("invalid definition of qualified type %qT", t);
47ee8904
MM
2261 t = error_mark_node;
2262 }
2263
9e1e64ec 2264 if (t == error_mark_node || ! MAYBE_CLASS_TYPE_P (t))
ce4a0391 2265 {
9e1e64ec 2266 t = make_class_type (RECORD_TYPE);
bd3d082e 2267 pushtag (make_anon_name (), t, /*tag_scope=*/ts_current);
ce4a0391 2268 }
830fcda8 2269
b4f70b3d 2270 /* Update the location of the decl. */
f31686a3 2271 DECL_SOURCE_LOCATION (TYPE_NAME (t)) = input_location;
c8094d83 2272
4c571114 2273 if (TYPE_BEING_DEFINED (t))
ce4a0391 2274 {
9e1e64ec 2275 t = make_class_type (TREE_CODE (t));
bd3d082e 2276 pushtag (TYPE_IDENTIFIER (t), t, /*tag_scope=*/ts_current);
ce4a0391 2277 }
ff350acd 2278 maybe_process_partial_specialization (t);
29370796 2279 pushclass (t);
ce4a0391 2280 TYPE_BEING_DEFINED (t) = 1;
b9e75696
JM
2281
2282 cplus_decl_attributes (&t, attributes, (int) ATTR_FLAG_TYPE_IN_PLACE);
2283
c0694c4b
MM
2284 if (flag_pack_struct)
2285 {
2286 tree v;
2287 TYPE_PACKED (t) = 1;
2288 /* Even though the type is being defined for the first time
2289 here, there might have been a forward declaration, so there
2290 might be cv-qualified variants of T. */
2291 for (v = TYPE_NEXT_VARIANT (t); v; v = TYPE_NEXT_VARIANT (v))
2292 TYPE_PACKED (v) = 1;
2293 }
ce4a0391
MM
2294 /* Reset the interface data, at the earliest possible
2295 moment, as it might have been set via a class foo;
2296 before. */
1951a1b6
JM
2297 if (! TYPE_ANONYMOUS_P (t))
2298 {
c533e34d 2299 struct c_fileinfo *finfo = get_fileinfo (input_filename);
5d709b00 2300 CLASSTYPE_INTERFACE_ONLY (t) = finfo->interface_only;
1951a1b6 2301 SET_CLASSTYPE_INTERFACE_UNKNOWN_X
5d709b00 2302 (t, finfo->interface_unknown);
1951a1b6 2303 }
ce4a0391 2304 reset_specialization();
c8094d83 2305
b7975aed
MM
2306 /* Make a declaration for this class in its own scope. */
2307 build_self_reference ();
2308
830fcda8 2309 return t;
ce4a0391
MM
2310}
2311
61a127b3
MM
2312/* Finish the member declaration given by DECL. */
2313
2314void
3a978d72 2315finish_member_declaration (tree decl)
61a127b3
MM
2316{
2317 if (decl == error_mark_node || decl == NULL_TREE)
2318 return;
2319
2320 if (decl == void_type_node)
2321 /* The COMPONENT was a friend, not a member, and so there's
2322 nothing for us to do. */
2323 return;
2324
2325 /* We should see only one DECL at a time. */
50bc768d 2326 gcc_assert (TREE_CHAIN (decl) == NULL_TREE);
61a127b3
MM
2327
2328 /* Set up access control for DECL. */
c8094d83 2329 TREE_PRIVATE (decl)
61a127b3 2330 = (current_access_specifier == access_private_node);
c8094d83 2331 TREE_PROTECTED (decl)
61a127b3
MM
2332 = (current_access_specifier == access_protected_node);
2333 if (TREE_CODE (decl) == TEMPLATE_DECL)
2334 {
17aec3eb
RK
2335 TREE_PRIVATE (DECL_TEMPLATE_RESULT (decl)) = TREE_PRIVATE (decl);
2336 TREE_PROTECTED (DECL_TEMPLATE_RESULT (decl)) = TREE_PROTECTED (decl);
61a127b3
MM
2337 }
2338
2339 /* Mark the DECL as a member of the current class. */
4f1c5b7d 2340 DECL_CONTEXT (decl) = current_class_type;
61a127b3 2341
b1d7b1c0 2342 /* Check for bare parameter packs in the member variable declaration. */
1ad8aeeb 2343 if (TREE_CODE (decl) == FIELD_DECL)
4439d02f 2344 {
7b3e2d46 2345 if (check_for_bare_parameter_packs (TREE_TYPE (decl)))
4439d02f 2346 TREE_TYPE (decl) = error_mark_node;
7b3e2d46 2347 if (check_for_bare_parameter_packs (DECL_ATTRIBUTES (decl)))
4439d02f
DG
2348 DECL_ATTRIBUTES (decl) = NULL_TREE;
2349 }
b1d7b1c0 2350
421844e7
MM
2351 /* [dcl.link]
2352
2353 A C language linkage is ignored for the names of class members
2354 and the member function type of class member functions. */
2355 if (DECL_LANG_SPECIFIC (decl) && DECL_LANGUAGE (decl) == lang_c)
5d2ed28c 2356 SET_DECL_LANGUAGE (decl, lang_cplusplus);
421844e7 2357
61a127b3
MM
2358 /* Put functions on the TYPE_METHODS list and everything else on the
2359 TYPE_FIELDS list. Note that these are built up in reverse order.
2360 We reverse them (to obtain declaration order) in finish_struct. */
c8094d83 2361 if (TREE_CODE (decl) == FUNCTION_DECL
61a127b3
MM
2362 || DECL_FUNCTION_TEMPLATE_P (decl))
2363 {
2364 /* We also need to add this function to the
2365 CLASSTYPE_METHOD_VEC. */
b77fe7b4
NS
2366 if (add_method (current_class_type, decl, NULL_TREE))
2367 {
2368 TREE_CHAIN (decl) = TYPE_METHODS (current_class_type);
2369 TYPE_METHODS (current_class_type) = decl;
f139561c 2370
b77fe7b4
NS
2371 maybe_add_class_template_decl_list (current_class_type, decl,
2372 /*friend_p=*/0);
2373 }
61a127b3 2374 }
f139561c 2375 /* Enter the DECL into the scope of the class. */
98ed9dae 2376 else if ((TREE_CODE (decl) == USING_DECL && !DECL_DEPENDENT_P (decl))
399dedb9 2377 || pushdecl_class_level (decl))
61a127b3
MM
2378 {
2379 /* All TYPE_DECLs go at the end of TYPE_FIELDS. Ordinary fields
2380 go at the beginning. The reason is that lookup_field_1
2381 searches the list in order, and we want a field name to
2382 override a type name so that the "struct stat hack" will
2383 work. In particular:
2384
2385 struct S { enum E { }; int E } s;
2386 s.E = 3;
2387
0e339752 2388 is valid. In addition, the FIELD_DECLs must be maintained in
61a127b3
MM
2389 declaration order so that class layout works as expected.
2390 However, we don't need that order until class layout, so we
2391 save a little time by putting FIELD_DECLs on in reverse order
2392 here, and then reversing them in finish_struct_1. (We could
2393 also keep a pointer to the correct insertion points in the
2394 list.) */
2395
2396 if (TREE_CODE (decl) == TYPE_DECL)
c8094d83 2397 TYPE_FIELDS (current_class_type)
61a127b3
MM
2398 = chainon (TYPE_FIELDS (current_class_type), decl);
2399 else
2400 {
2401 TREE_CHAIN (decl) = TYPE_FIELDS (current_class_type);
2402 TYPE_FIELDS (current_class_type) = decl;
2403 }
8f032717 2404
c8094d83 2405 maybe_add_class_template_decl_list (current_class_type, decl,
f139561c 2406 /*friend_p=*/0);
61a127b3 2407 }
5e2f4cd2
MM
2408
2409 if (pch_file)
2410 note_decl_for_pch (decl);
2411}
2412
2413/* DECL has been declared while we are building a PCH file. Perform
2414 actions that we might normally undertake lazily, but which can be
2415 performed now so that they do not have to be performed in
2416 translation units which include the PCH file. */
2417
2418void
2419note_decl_for_pch (tree decl)
2420{
2421 gcc_assert (pch_file);
2422
5e2f4cd2
MM
2423 /* There's a good chance that we'll have to mangle names at some
2424 point, even if only for emission in debugging information. */
ec0897de
JM
2425 if ((TREE_CODE (decl) == VAR_DECL
2426 || TREE_CODE (decl) == FUNCTION_DECL)
2427 && !processing_template_decl)
5e2f4cd2 2428 mangle_decl (decl);
61a127b3
MM
2429}
2430
306ef644 2431/* Finish processing a complete template declaration. The PARMS are
36a117a5
MM
2432 the template parameters. */
2433
2434void
3a978d72 2435finish_template_decl (tree parms)
36a117a5
MM
2436{
2437 if (parms)
2438 end_template_decl ();
2439 else
2440 end_specialization ();
2441}
2442
509fc277 2443/* Finish processing a template-id (which names a type) of the form
36a117a5 2444 NAME < ARGS >. Return the TYPE_DECL for the type named by the
838dfd8a 2445 template-id. If ENTERING_SCOPE is nonzero we are about to enter
36a117a5
MM
2446 the scope of template-id indicated. */
2447
2448tree
3a978d72 2449finish_template_type (tree name, tree args, int entering_scope)
36a117a5
MM
2450{
2451 tree decl;
2452
2453 decl = lookup_template_class (name, args,
42eaed49 2454 NULL_TREE, NULL_TREE, entering_scope,
23fca1f5 2455 tf_warning_or_error | tf_user);
36a117a5
MM
2456 if (decl != error_mark_node)
2457 decl = TYPE_STUB_DECL (decl);
2458
2459 return decl;
2460}
648f19f6 2461
ea6021e8
MM
2462/* Finish processing a BASE_CLASS with the indicated ACCESS_SPECIFIER.
2463 Return a TREE_LIST containing the ACCESS_SPECIFIER and the
2464 BASE_CLASS, or NULL_TREE if an error occurred. The
aba649ba 2465 ACCESS_SPECIFIER is one of
809e3e7f
NS
2466 access_{default,public,protected_private}_node. For a virtual base
2467 we set TREE_TYPE. */
ea6021e8 2468
c8094d83 2469tree
dbbf88d1 2470finish_base_specifier (tree base, tree access, bool virtual_p)
ea6021e8 2471{
ea6021e8
MM
2472 tree result;
2473
dbbf88d1 2474 if (base == error_mark_node)
acb044ee
GDR
2475 {
2476 error ("invalid base-class specification");
2477 result = NULL_TREE;
2478 }
9e1e64ec
PC
2479 else if (! MAYBE_CLASS_TYPE_P (base))
2480 {
2481 error ("%qT is not a class type", base);
2482 result = NULL_TREE;
2483 }
ea6021e8 2484 else
bb92901d 2485 {
dbbf88d1 2486 if (cp_type_quals (base) != 0)
0cbd7506
MS
2487 {
2488 error ("base class %qT has cv qualifiers", base);
2489 base = TYPE_MAIN_VARIANT (base);
2490 }
dbbf88d1 2491 result = build_tree_list (access, base);
809e3e7f
NS
2492 if (virtual_p)
2493 TREE_TYPE (result) = integer_type_node;
bb92901d 2494 }
ea6021e8
MM
2495
2496 return result;
2497}
61a127b3 2498
8f78f01f
MM
2499/* Issue a diagnostic that NAME cannot be found in SCOPE. DECL is
2500 what we found when we tried to do the lookup. */
22038b2c
NS
2501
2502void
8f78f01f 2503qualified_name_lookup_error (tree scope, tree name, tree decl)
22038b2c 2504{
1e1b4b37
VR
2505 if (scope == error_mark_node)
2506 ; /* We already complained. */
2507 else if (TYPE_P (scope))
22038b2c
NS
2508 {
2509 if (!COMPLETE_TYPE_P (scope))
a82e1a7d 2510 error ("incomplete type %qT used in nested name specifier", scope);
8f78f01f
MM
2511 else if (TREE_CODE (decl) == TREE_LIST)
2512 {
a82e1a7d 2513 error ("reference to %<%T::%D%> is ambiguous", scope, name);
8f78f01f
MM
2514 print_candidates (decl);
2515 }
22038b2c 2516 else
a82e1a7d 2517 error ("%qD is not a member of %qT", name, scope);
22038b2c
NS
2518 }
2519 else if (scope != global_namespace)
a82e1a7d 2520 error ("%qD is not a member of %qD", name, scope);
22038b2c 2521 else
a82e1a7d 2522 error ("%<::%D%> has not been declared", name);
22038b2c 2523}
c8094d83 2524
eff3a276
MM
2525/* If FNS is a member function, a set of member functions, or a
2526 template-id referring to one or more member functions, return a
2527 BASELINK for FNS, incorporating the current access context.
2528 Otherwise, return FNS unchanged. */
2529
2530tree
2531baselink_for_fns (tree fns)
2532{
2533 tree fn;
2534 tree cl;
2535
2536 if (BASELINK_P (fns)
eff3a276
MM
2537 || error_operand_p (fns))
2538 return fns;
2539
2540 fn = fns;
2541 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
2542 fn = TREE_OPERAND (fn, 0);
2543 fn = get_first_fn (fn);
2544 if (!DECL_FUNCTION_MEMBER_P (fn))
2545 return fns;
2546
2547 cl = currently_open_derived_class (DECL_CONTEXT (fn));
2548 if (!cl)
2549 cl = DECL_CONTEXT (fn);
2550 cl = TYPE_BINFO (cl);
2551 return build_baselink (cl, cl, fns, /*optype=*/NULL_TREE);
2552}
2553
b3445994
MM
2554/* ID_EXPRESSION is a representation of parsed, but unprocessed,
2555 id-expression. (See cp_parser_id_expression for details.) SCOPE,
2556 if non-NULL, is the type or namespace used to explicitly qualify
2557 ID_EXPRESSION. DECL is the entity to which that name has been
c8094d83 2558 resolved.
b3445994
MM
2559
2560 *CONSTANT_EXPRESSION_P is true if we are presently parsing a
2561 constant-expression. In that case, *NON_CONSTANT_EXPRESSION_P will
2562 be set to true if this expression isn't permitted in a
2563 constant-expression, but it is otherwise not set by this function.
2564 *ALLOW_NON_CONSTANT_EXPRESSION_P is true if we are parsing a
2565 constant-expression, but a non-constant expression is also
2566 permissible.
2567
02ed62dd
MM
2568 DONE is true if this expression is a complete postfix-expression;
2569 it is false if this expression is followed by '->', '[', '(', etc.
2570 ADDRESS_P is true iff this expression is the operand of '&'.
2571 TEMPLATE_P is true iff the qualified-id was of the form
2572 "A::template B". TEMPLATE_ARG_P is true iff this qualified name
2573 appears as a template argument.
2574
b3445994
MM
2575 If an error occurs, and it is the kind of error that might cause
2576 the parser to abort a tentative parse, *ERROR_MSG is filled in. It
2577 is the caller's responsibility to issue the message. *ERROR_MSG
2578 will be a string with static storage duration, so the caller need
2579 not "free" it.
2580
2581 Return an expression for the entity, after issuing appropriate
2582 diagnostics. This function is also responsible for transforming a
2583 reference to a non-static member into a COMPONENT_REF that makes
c8094d83 2584 the use of "this" explicit.
b3445994
MM
2585
2586 Upon return, *IDK will be filled in appropriately. */
2587
2588tree
c8094d83 2589finish_id_expression (tree id_expression,
b3445994
MM
2590 tree decl,
2591 tree scope,
2592 cp_id_kind *idk,
67c03833
JM
2593 bool integral_constant_expression_p,
2594 bool allow_non_integral_constant_expression_p,
2595 bool *non_integral_constant_expression_p,
02ed62dd
MM
2596 bool template_p,
2597 bool done,
2598 bool address_p,
2599 bool template_arg_p,
b3445994
MM
2600 const char **error_msg)
2601{
2602 /* Initialize the output parameters. */
2603 *idk = CP_ID_KIND_NONE;
2604 *error_msg = NULL;
2605
2606 if (id_expression == error_mark_node)
2607 return error_mark_node;
2608 /* If we have a template-id, then no further lookup is
2609 required. If the template-id was for a template-class, we
2610 will sometimes have a TYPE_DECL at this point. */
2611 else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
ee935db4 2612 || TREE_CODE (decl) == TYPE_DECL)
b3445994
MM
2613 ;
2614 /* Look up the name. */
c8094d83 2615 else
b3445994
MM
2616 {
2617 if (decl == error_mark_node)
2618 {
2619 /* Name lookup failed. */
c8094d83
MS
2620 if (scope
2621 && (!TYPE_P (scope)
4546865e
MM
2622 || (!dependent_type_p (scope)
2623 && !(TREE_CODE (id_expression) == IDENTIFIER_NODE
2624 && IDENTIFIER_TYPENAME_P (id_expression)
2625 && dependent_type_p (TREE_TYPE (id_expression))))))
b3445994 2626 {
4546865e
MM
2627 /* If the qualifying type is non-dependent (and the name
2628 does not name a conversion operator to a dependent
2629 type), issue an error. */
8f78f01f 2630 qualified_name_lookup_error (scope, id_expression, decl);
b3445994
MM
2631 return error_mark_node;
2632 }
2633 else if (!scope)
2634 {
2635 /* It may be resolved via Koenig lookup. */
2636 *idk = CP_ID_KIND_UNQUALIFIED;
2637 return id_expression;
2638 }
4546865e
MM
2639 else
2640 decl = id_expression;
b3445994
MM
2641 }
2642 /* If DECL is a variable that would be out of scope under
2643 ANSI/ISO rules, but in scope in the ARM, name lookup
2644 will succeed. Issue a diagnostic here. */
2645 else
2646 decl = check_for_out_of_scope_variable (decl);
2647
2648 /* Remember that the name was used in the definition of
2649 the current class so that we can check later to see if
2650 the meaning would have been different after the class
2651 was entirely defined. */
2652 if (!scope && decl != error_mark_node)
2653 maybe_note_name_used_in_class (id_expression, decl);
8ca4bf25
MM
2654
2655 /* Disallow uses of local variables from containing functions. */
2656 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL)
2657 {
2658 tree context = decl_function_context (decl);
2659 if (context != NULL_TREE && context != current_function_decl
2660 && ! TREE_STATIC (decl))
2661 {
2662 error (TREE_CODE (decl) == VAR_DECL
2663 ? "use of %<auto%> variable from containing function"
2664 : "use of parameter from containing function");
2665 error (" %q+#D declared here", decl);
2666 return error_mark_node;
2667 }
2668 }
b3445994
MM
2669 }
2670
2671 /* If we didn't find anything, or what we found was a type,
2672 then this wasn't really an id-expression. */
2673 if (TREE_CODE (decl) == TEMPLATE_DECL
2674 && !DECL_FUNCTION_TEMPLATE_P (decl))
2675 {
2676 *error_msg = "missing template arguments";
2677 return error_mark_node;
2678 }
2679 else if (TREE_CODE (decl) == TYPE_DECL
2680 || TREE_CODE (decl) == NAMESPACE_DECL)
2681 {
2682 *error_msg = "expected primary-expression";
2683 return error_mark_node;
2684 }
2685
2686 /* If the name resolved to a template parameter, there is no
931a9c05
GB
2687 need to look it up again later. */
2688 if ((TREE_CODE (decl) == CONST_DECL && DECL_TEMPLATE_PARM_P (decl))
2689 || TREE_CODE (decl) == TEMPLATE_PARM_INDEX)
b3445994 2690 {
db24eb1f 2691 tree r;
c8094d83 2692
b3445994 2693 *idk = CP_ID_KIND_NONE;
931a9c05
GB
2694 if (TREE_CODE (decl) == TEMPLATE_PARM_INDEX)
2695 decl = TEMPLATE_PARM_DECL (decl);
db24eb1f 2696 r = convert_from_reference (DECL_INITIAL (decl));
c8094d83
MS
2697
2698 if (integral_constant_expression_p
68deab91 2699 && !dependent_type_p (TREE_TYPE (decl))
db24eb1f 2700 && !(INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (r))))
931a9c05 2701 {
67c03833 2702 if (!allow_non_integral_constant_expression_p)
a82e1a7d 2703 error ("template parameter %qD of type %qT is not allowed in "
931a9c05
GB
2704 "an integral constant expression because it is not of "
2705 "integral or enumeration type", decl, TREE_TYPE (decl));
67c03833 2706 *non_integral_constant_expression_p = true;
931a9c05 2707 }
db24eb1f 2708 return r;
931a9c05 2709 }
c8094d83 2710 /* Similarly, we resolve enumeration constants to their
931a9c05
GB
2711 underlying values. */
2712 else if (TREE_CODE (decl) == CONST_DECL)
2713 {
2714 *idk = CP_ID_KIND_NONE;
2715 if (!processing_template_decl)
6193b8b7
DJ
2716 {
2717 used_types_insert (TREE_TYPE (decl));
2718 return DECL_INITIAL (decl);
2719 }
b3445994
MM
2720 return decl;
2721 }
2722 else
2723 {
2724 bool dependent_p;
2725
2726 /* If the declaration was explicitly qualified indicate
2727 that. The semantics of `A::f(3)' are different than
2728 `f(3)' if `f' is virtual. */
c8094d83 2729 *idk = (scope
b3445994
MM
2730 ? CP_ID_KIND_QUALIFIED
2731 : (TREE_CODE (decl) == TEMPLATE_ID_EXPR
2732 ? CP_ID_KIND_TEMPLATE_ID
2733 : CP_ID_KIND_UNQUALIFIED));
2734
2735
2736 /* [temp.dep.expr]
2737
2738 An id-expression is type-dependent if it contains an
2739 identifier that was declared with a dependent type.
2740
b3445994
MM
2741 The standard is not very specific about an id-expression that
2742 names a set of overloaded functions. What if some of them
2743 have dependent types and some of them do not? Presumably,
2744 such a name should be treated as a dependent name. */
2745 /* Assume the name is not dependent. */
2746 dependent_p = false;
2747 if (!processing_template_decl)
2748 /* No names are dependent outside a template. */
2749 ;
2750 /* A template-id where the name of the template was not resolved
2751 is definitely dependent. */
2752 else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
c8094d83 2753 && (TREE_CODE (TREE_OPERAND (decl, 0))
b3445994
MM
2754 == IDENTIFIER_NODE))
2755 dependent_p = true;
2756 /* For anything except an overloaded function, just check its
2757 type. */
2758 else if (!is_overloaded_fn (decl))
c8094d83 2759 dependent_p
b3445994
MM
2760 = dependent_type_p (TREE_TYPE (decl));
2761 /* For a set of overloaded functions, check each of the
2762 functions. */
2763 else
2764 {
2765 tree fns = decl;
2766
2767 if (BASELINK_P (fns))
2768 fns = BASELINK_FUNCTIONS (fns);
2769
2770 /* For a template-id, check to see if the template
2771 arguments are dependent. */
2772 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
2773 {
2774 tree args = TREE_OPERAND (fns, 1);
2775 dependent_p = any_dependent_template_arguments_p (args);
2776 /* The functions are those referred to by the
2777 template-id. */
2778 fns = TREE_OPERAND (fns, 0);
2779 }
2780
2781 /* If there are no dependent template arguments, go through
cd0be382 2782 the overloaded functions. */
b3445994
MM
2783 while (fns && !dependent_p)
2784 {
2785 tree fn = OVL_CURRENT (fns);
2786
2787 /* Member functions of dependent classes are
2788 dependent. */
2789 if (TREE_CODE (fn) == FUNCTION_DECL
2790 && type_dependent_expression_p (fn))
2791 dependent_p = true;
2792 else if (TREE_CODE (fn) == TEMPLATE_DECL
2793 && dependent_template_p (fn))
2794 dependent_p = true;
2795
2796 fns = OVL_NEXT (fns);
2797 }
2798 }
2799
2800 /* If the name was dependent on a template parameter, we will
2801 resolve the name at instantiation time. */
2802 if (dependent_p)
2803 {
2804 /* Create a SCOPE_REF for qualified names, if the scope is
2805 dependent. */
2806 if (scope)
2807 {
b3445994
MM
2808 /* Since this name was dependent, the expression isn't
2809 constant -- yet. No error is issued because it might
2810 be constant when things are instantiated. */
67c03833
JM
2811 if (integral_constant_expression_p)
2812 *non_integral_constant_expression_p = true;
02ed62dd
MM
2813 if (TYPE_P (scope))
2814 {
2815 if (address_p && done)
2816 decl = finish_qualified_id_expr (scope, decl,
2817 done, address_p,
2818 template_p,
2819 template_arg_p);
2820 else if (dependent_type_p (scope))
2821 decl = build_qualified_name (/*type=*/NULL_TREE,
2822 scope,
2823 id_expression,
2824 template_p);
2825 else if (DECL_P (decl))
2826 decl = build_qualified_name (TREE_TYPE (decl),
2827 scope,
2828 id_expression,
2829 template_p);
2830 }
2831 if (TREE_TYPE (decl))
2832 decl = convert_from_reference (decl);
2833 return decl;
b3445994
MM
2834 }
2835 /* A TEMPLATE_ID already contains all the information we
2836 need. */
2837 if (TREE_CODE (id_expression) == TEMPLATE_ID_EXPR)
2838 return id_expression;
10b1d5e7 2839 *idk = CP_ID_KIND_UNQUALIFIED_DEPENDENT;
5a98fa7b
MM
2840 /* If we found a variable, then name lookup during the
2841 instantiation will always resolve to the same VAR_DECL
2842 (or an instantiation thereof). */
3c398f34
MM
2843 if (TREE_CODE (decl) == VAR_DECL
2844 || TREE_CODE (decl) == PARM_DECL)
db24eb1f 2845 return convert_from_reference (decl);
bad1f462
KL
2846 /* The same is true for FIELD_DECL, but we also need to
2847 make sure that the syntax is correct. */
2848 else if (TREE_CODE (decl) == FIELD_DECL)
a26ddf11
KL
2849 {
2850 /* Since SCOPE is NULL here, this is an unqualified name.
2851 Access checking has been performed during name lookup
2852 already. Turn off checking to avoid duplicate errors. */
2853 push_deferring_access_checks (dk_no_check);
2854 decl = finish_non_static_data_member
2855 (decl, current_class_ref,
2856 /*qualifying_scope=*/NULL_TREE);
2857 pop_deferring_access_checks ();
2858 return decl;
2859 }
10b1d5e7 2860 return id_expression;
b3445994
MM
2861 }
2862
2863 /* Only certain kinds of names are allowed in constant
0cbd7506
MS
2864 expression. Enumerators and template parameters have already
2865 been handled above. */
c30b4add 2866 if (integral_constant_expression_p
100d337a
MA
2867 && ! DECL_INTEGRAL_CONSTANT_VAR_P (decl)
2868 && ! builtin_valid_in_constant_expr_p (decl))
b3445994 2869 {
c30b4add 2870 if (!allow_non_integral_constant_expression_p)
b3445994 2871 {
a82e1a7d 2872 error ("%qD cannot appear in a constant-expression", decl);
c30b4add 2873 return error_mark_node;
b3445994 2874 }
c30b4add 2875 *non_integral_constant_expression_p = true;
b3445994 2876 }
c8094d83 2877
415d4636 2878 if (TREE_CODE (decl) == NAMESPACE_DECL)
9e95d15f 2879 {
a82e1a7d 2880 error ("use of namespace %qD as expression", decl);
9e95d15f
NS
2881 return error_mark_node;
2882 }
2883 else if (DECL_CLASS_TEMPLATE_P (decl))
2884 {
a82e1a7d 2885 error ("use of class template %qT as expression", decl);
9e95d15f
NS
2886 return error_mark_node;
2887 }
2888 else if (TREE_CODE (decl) == TREE_LIST)
2889 {
2890 /* Ambiguous reference to base members. */
a82e1a7d 2891 error ("request for member %qD is ambiguous in "
9e95d15f
NS
2892 "multiple inheritance lattice", id_expression);
2893 print_candidates (decl);
2894 return error_mark_node;
2895 }
415d4636
MM
2896
2897 /* Mark variable-like entities as used. Functions are similarly
2898 marked either below or after overload resolution. */
2899 if (TREE_CODE (decl) == VAR_DECL
2900 || TREE_CODE (decl) == PARM_DECL
2901 || TREE_CODE (decl) == RESULT_DECL)
2902 mark_used (decl);
2903
2904 if (scope)
2905 {
c8094d83 2906 decl = (adjust_result_of_qualified_name_lookup
415d4636 2907 (decl, scope, current_class_type));
e20bcc5e
JH
2908
2909 if (TREE_CODE (decl) == FUNCTION_DECL)
2910 mark_used (decl);
2911
415d4636 2912 if (TREE_CODE (decl) == FIELD_DECL || BASELINK_P (decl))
02ed62dd
MM
2913 decl = finish_qualified_id_expr (scope,
2914 decl,
2915 done,
2916 address_p,
2917 template_p,
2918 template_arg_p);
db24eb1f
NS
2919 else
2920 {
2921 tree r = convert_from_reference (decl);
c8094d83 2922
02ed62dd
MM
2923 if (processing_template_decl && TYPE_P (scope))
2924 r = build_qualified_name (TREE_TYPE (r),
2925 scope, decl,
2926 template_p);
db24eb1f
NS
2927 decl = r;
2928 }
415d4636 2929 }
9e95d15f 2930 else if (TREE_CODE (decl) == FIELD_DECL)
a26ddf11
KL
2931 {
2932 /* Since SCOPE is NULL here, this is an unqualified name.
2933 Access checking has been performed during name lookup
2934 already. Turn off checking to avoid duplicate errors. */
2935 push_deferring_access_checks (dk_no_check);
2936 decl = finish_non_static_data_member (decl, current_class_ref,
2937 /*qualifying_scope=*/NULL_TREE);
2938 pop_deferring_access_checks ();
2939 }
9e95d15f
NS
2940 else if (is_overloaded_fn (decl))
2941 {
eff3a276 2942 tree first_fn;
b3445994 2943
eff3a276
MM
2944 first_fn = decl;
2945 if (TREE_CODE (first_fn) == TEMPLATE_ID_EXPR)
2946 first_fn = TREE_OPERAND (first_fn, 0);
2947 first_fn = get_first_fn (first_fn);
9e95d15f
NS
2948 if (TREE_CODE (first_fn) == TEMPLATE_DECL)
2949 first_fn = DECL_TEMPLATE_RESULT (first_fn);
415d4636
MM
2950
2951 if (!really_overloaded_fn (decl))
2952 mark_used (first_fn);
2953
02ed62dd
MM
2954 if (!template_arg_p
2955 && TREE_CODE (first_fn) == FUNCTION_DECL
821eaf2a
MM
2956 && DECL_FUNCTION_MEMBER_P (first_fn)
2957 && !shared_member_p (decl))
9e95d15f
NS
2958 {
2959 /* A set of member functions. */
2960 decl = maybe_dummy_object (DECL_CONTEXT (first_fn), 0);
02ed62dd 2961 return finish_class_member_access_expr (decl, id_expression,
5ade1ed2
DG
2962 /*template_p=*/false,
2963 tf_warning_or_error);
9e95d15f 2964 }
eff3a276
MM
2965
2966 decl = baselink_for_fns (decl);
9e95d15f
NS
2967 }
2968 else
2969 {
9e95d15f 2970 if (DECL_P (decl) && DECL_NONLOCAL (decl)
24f58e74 2971 && DECL_CLASS_SCOPE_P (decl))
9e95d15f 2972 {
24f58e74
PC
2973 tree context = context_for_name_lookup (decl);
2974 if (context != current_class_type)
2975 {
2976 tree path = currently_open_derived_class (context);
2977 perform_or_defer_access_check (TYPE_BINFO (path),
2978 decl, decl);
2979 }
9e95d15f 2980 }
c8094d83 2981
db24eb1f 2982 decl = convert_from_reference (decl);
9e95d15f 2983 }
b3445994
MM
2984 }
2985
2986 if (TREE_DEPRECATED (decl))
2987 warn_deprecated_use (decl);
2988
2989 return decl;
2990}
2991
0213a355
JM
2992/* Implement the __typeof keyword: Return the type of EXPR, suitable for
2993 use as a type-specifier. */
2994
b894fc05 2995tree
3a978d72 2996finish_typeof (tree expr)
b894fc05 2997{
65a5559b
MM
2998 tree type;
2999
dffbbe80 3000 if (type_dependent_expression_p (expr))
b894fc05 3001 {
9e1e64ec 3002 type = cxx_make_type (TYPEOF_TYPE);
eb34af89 3003 TYPEOF_TYPE_EXPR (type) = expr;
3ad6a8e1 3004 SET_TYPE_STRUCTURAL_EQUALITY (type);
b894fc05 3005
65a5559b 3006 return type;
b894fc05
JM
3007 }
3008
3c38f0ff 3009 type = unlowered_expr_type (expr);
65a5559b
MM
3010
3011 if (!type || type == unknown_type_node)
3012 {
a82e1a7d 3013 error ("type of %qE is unknown", expr);
65a5559b
MM
3014 return error_mark_node;
3015 }
3016
3017 return type;
b894fc05 3018}
558475f0 3019
c291f8b1
VR
3020/* Perform C++-specific checks for __builtin_offsetof before calling
3021 fold_offsetof. */
3022
3023tree
3024finish_offsetof (tree expr)
3025{
4c65a534
VR
3026 if (TREE_CODE (expr) == PSEUDO_DTOR_EXPR)
3027 {
3028 error ("cannot apply %<offsetof%> to destructor %<~%T%>",
3029 TREE_OPERAND (expr, 2));
3030 return error_mark_node;
3031 }
c291f8b1
VR
3032 if (TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE
3033 || TREE_CODE (TREE_TYPE (expr)) == METHOD_TYPE
3034 || TREE_CODE (TREE_TYPE (expr)) == UNKNOWN_TYPE)
3035 {
1916c916
VR
3036 if (TREE_CODE (expr) == COMPONENT_REF
3037 || TREE_CODE (expr) == COMPOUND_EXPR)
0a9367cb
VR
3038 expr = TREE_OPERAND (expr, 1);
3039 error ("cannot apply %<offsetof%> to member function %qD", expr);
c291f8b1
VR
3040 return error_mark_node;
3041 }
6d4d7b0e 3042 return fold_offsetof (expr, NULL_TREE);
c291f8b1
VR
3043}
3044
3eb24f73 3045/* Called from expand_body via walk_tree. Replace all AGGR_INIT_EXPRs
6de9cd9a 3046 with equivalent CALL_EXPRs. */
3eb24f73
MM
3047
3048static tree
c8094d83 3049simplify_aggr_init_exprs_r (tree* tp,
0cbd7506
MS
3050 int* walk_subtrees,
3051 void* data ATTRIBUTE_UNUSED)
3eb24f73 3052{
22e92ac3
MM
3053 /* We don't need to walk into types; there's nothing in a type that
3054 needs simplification. (And, furthermore, there are places we
3055 actively don't want to go. For example, we don't want to wander
3056 into the default arguments for a FUNCTION_DECL that appears in a
3057 CALL_EXPR.) */
9eeb200f 3058 if (TYPE_P (*tp))
22e92ac3
MM
3059 {
3060 *walk_subtrees = 0;
3061 return NULL_TREE;
3062 }
3063 /* Only AGGR_INIT_EXPRs are interesting. */
9eeb200f 3064 else if (TREE_CODE (*tp) != AGGR_INIT_EXPR)
3eb24f73
MM
3065 return NULL_TREE;
3066
9eeb200f
JM
3067 simplify_aggr_init_expr (tp);
3068
3069 /* Keep iterating. */
3070 return NULL_TREE;
3071}
3072
3073/* Replace the AGGR_INIT_EXPR at *TP with an equivalent CALL_EXPR. This
3074 function is broken out from the above for the benefit of the tree-ssa
3075 project. */
3076
3077void
3078simplify_aggr_init_expr (tree *tp)
3079{
3080 tree aggr_init_expr = *tp;
3081
3eb24f73 3082 /* Form an appropriate CALL_EXPR. */
5039610b
SL
3083 tree fn = AGGR_INIT_EXPR_FN (aggr_init_expr);
3084 tree slot = AGGR_INIT_EXPR_SLOT (aggr_init_expr);
2692eb7d 3085 tree type = TREE_TYPE (slot);
9eeb200f
JM
3086
3087 tree call_expr;
3088 enum style_t { ctor, arg, pcc } style;
4977bab6 3089
3eb24f73 3090 if (AGGR_INIT_VIA_CTOR_P (aggr_init_expr))
4977bab6
ZW
3091 style = ctor;
3092#ifdef PCC_STATIC_STRUCT_RETURN
3093 else if (1)
3094 style = pcc;
3095#endif
4977bab6 3096 else
315fb5db
NS
3097 {
3098 gcc_assert (TREE_ADDRESSABLE (type));
3099 style = arg;
3100 }
4977bab6 3101
5039610b
SL
3102 call_expr = build_call_array (TREE_TYPE (TREE_TYPE (TREE_TYPE (fn))),
3103 fn,
3104 aggr_init_expr_nargs (aggr_init_expr),
3105 AGGR_INIT_EXPR_ARGP (aggr_init_expr));
3106
fa47911c 3107 if (style == ctor)
3eb24f73 3108 {
fa47911c
JM
3109 /* Replace the first argument to the ctor with the address of the
3110 slot. */
dffd7eb6 3111 cxx_mark_addressable (slot);
5039610b
SL
3112 CALL_EXPR_ARG (call_expr, 0) =
3113 build1 (ADDR_EXPR, build_pointer_type (type), slot);
3eb24f73 3114 }
5039610b 3115 else if (style == arg)
fa47911c
JM
3116 {
3117 /* Just mark it addressable here, and leave the rest to
3118 expand_call{,_inline}. */
3119 cxx_mark_addressable (slot);
3120 CALL_EXPR_RETURN_SLOT_OPT (call_expr) = true;
3121 call_expr = build2 (MODIFY_EXPR, TREE_TYPE (call_expr), slot, call_expr);
3122 }
4977bab6 3123 else if (style == pcc)
3eb24f73 3124 {
4977bab6
ZW
3125 /* If we're using the non-reentrant PCC calling convention, then we
3126 need to copy the returned value out of the static buffer into the
3127 SLOT. */
78757caa 3128 push_deferring_access_checks (dk_no_check);
46af705a 3129 call_expr = build_aggr_init (slot, call_expr,
5ade1ed2
DG
3130 DIRECT_BIND | LOOKUP_ONLYCONVERTING,
3131 tf_warning_or_error);
78757caa 3132 pop_deferring_access_checks ();
d17791d6 3133 call_expr = build2 (COMPOUND_EXPR, TREE_TYPE (slot), call_expr, slot);
3eb24f73 3134 }
3eb24f73 3135
3eb24f73 3136 *tp = call_expr;
3eb24f73
MM
3137}
3138
31f8e4f3
MM
3139/* Emit all thunks to FN that should be emitted when FN is emitted. */
3140
e89d6010 3141void
3a978d72 3142emit_associated_thunks (tree fn)
31f8e4f3
MM
3143{
3144 /* When we use vcall offsets, we emit thunks with the virtual
3145 functions to which they thunk. The whole point of vcall offsets
3146 is so that you can know statically the entire set of thunks that
3147 will ever be needed for a given virtual function, thereby
3148 enabling you to output all the thunks with the function itself. */
3461fba7 3149 if (DECL_VIRTUAL_P (fn))
31f8e4f3 3150 {
bb5e8a7f 3151 tree thunk;
c8094d83 3152
bb5e8a7f 3153 for (thunk = DECL_THUNKS (fn); thunk; thunk = TREE_CHAIN (thunk))
4977bab6 3154 {
e00853fd 3155 if (!THUNK_ALIAS (thunk))
4977bab6 3156 {
bb885938
NS
3157 use_thunk (thunk, /*emit_p=*/1);
3158 if (DECL_RESULT_THUNK_P (thunk))
3159 {
3160 tree probe;
c8094d83 3161
bb885938
NS
3162 for (probe = DECL_THUNKS (thunk);
3163 probe; probe = TREE_CHAIN (probe))
3164 use_thunk (probe, /*emit_p=*/1);
3165 }
4977bab6 3166 }
bb885938 3167 else
50bc768d 3168 gcc_assert (!DECL_THUNKS (thunk));
4977bab6 3169 }
31f8e4f3
MM
3170 }
3171}
3172
558475f0
MM
3173/* Generate RTL for FN. */
3174
8cd2462c 3175void
5671bf27 3176expand_or_defer_fn (tree fn)
8cd2462c
JH
3177{
3178 /* When the parser calls us after finishing the body of a template
c353b8e3
MM
3179 function, we don't really want to expand the body. */
3180 if (processing_template_decl)
8cd2462c
JH
3181 {
3182 /* Normally, collection only occurs in rest_of_compilation. So,
3183 if we don't collect here, we never collect junk generated
3184 during the processing of templates until we hit a
27250734
MM
3185 non-template function. It's not safe to do this inside a
3186 nested class, though, as the parser may have local state that
3187 is not a GC root. */
3188 if (!function_depth)
3189 ggc_collect ();
8cd2462c
JH
3190 return;
3191 }
3192
3193 /* Replace AGGR_INIT_EXPRs with appropriate CALL_EXPRs. */
14588106
RG
3194 cp_walk_tree_without_duplicates (&DECL_SAVED_TREE (fn),
3195 simplify_aggr_init_exprs_r,
3196 NULL);
8cd2462c
JH
3197
3198 /* If this is a constructor or destructor body, we have to clone
3199 it. */
3200 if (maybe_clone_body (fn))
3201 {
3202 /* We don't want to process FN again, so pretend we've written
3203 it out, even though we haven't. */
3204 TREE_ASM_WRITTEN (fn) = 1;
3205 return;
3206 }
3207
4684cd27
MM
3208 /* We make a decision about linkage for these functions at the end
3209 of the compilation. Until that point, we do not want the back
3210 end to output them -- but we do want it to see the bodies of
1a10290c 3211 these functions so that it can inline them as appropriate. */
4684cd27
MM
3212 if (DECL_DECLARED_INLINE_P (fn) || DECL_IMPLICIT_INSTANTIATION (fn))
3213 {
1ef0df47
MM
3214 if (DECL_INTERFACE_KNOWN (fn))
3215 /* We've already made a decision as to how this function will
3216 be handled. */;
3217 else if (!at_eof)
4684cd27
MM
3218 {
3219 DECL_EXTERNAL (fn) = 1;
3220 DECL_NOT_REALLY_EXTERN (fn) = 1;
3221 note_vague_linkage_fn (fn);
1ef0df47
MM
3222 /* A non-template inline function with external linkage will
3223 always be COMDAT. As we must eventually determine the
3224 linkage of all functions, and as that causes writes to
3225 the data mapped in from the PCH file, it's advantageous
3226 to mark the functions at this point. */
3227 if (!DECL_IMPLICIT_INSTANTIATION (fn))
3228 {
3229 /* This function must have external linkage, as
3230 otherwise DECL_INTERFACE_KNOWN would have been
3231 set. */
3232 gcc_assert (TREE_PUBLIC (fn));
3233 comdat_linkage (fn);
3234 DECL_INTERFACE_KNOWN (fn) = 1;
3235 }
4684cd27
MM
3236 }
3237 else
3238 import_export_decl (fn);
1a10290c
MM
3239
3240 /* If the user wants us to keep all inline functions, then mark
3241 this function as needed so that finish_file will make sure to
3242 output it later. */
3243 if (flag_keep_inline_functions && DECL_DECLARED_INLINE_P (fn))
3244 mark_needed (fn);
4684cd27
MM
3245 }
3246
8cd2462c
JH
3247 /* There's no reason to do any of the work here if we're only doing
3248 semantic analysis; this code just generates RTL. */
3249 if (flag_syntax_only)
3250 return;
3251
99edd65d
RH
3252 function_depth++;
3253
e4d91027 3254 /* Expand or defer, at the whim of the compilation unit manager. */
6b00c969 3255 cgraph_finalize_function (fn, function_depth > 1);
99edd65d
RH
3256
3257 function_depth--;
8cd2462c
JH
3258}
3259
6de9cd9a
DN
3260struct nrv_data
3261{
3262 tree var;
3263 tree result;
3264 htab_t visited;
3265};
0d97bf4c 3266
6de9cd9a
DN
3267/* Helper function for walk_tree, used by finalize_nrv below. */
3268
3269static tree
3270finalize_nrv_r (tree* tp, int* walk_subtrees, void* data)
0d97bf4c 3271{
6de9cd9a
DN
3272 struct nrv_data *dp = (struct nrv_data *)data;
3273 void **slot;
07b2f2fd
JM
3274
3275 /* No need to walk into types. There wouldn't be any need to walk into
3276 non-statements, except that we have to consider STMT_EXPRs. */
0d97bf4c
JM
3277 if (TYPE_P (*tp))
3278 *walk_subtrees = 0;
6de9cd9a
DN
3279 /* Change all returns to just refer to the RESULT_DECL; this is a nop,
3280 but differs from using NULL_TREE in that it indicates that we care
3281 about the value of the RESULT_DECL. */
5088b058
RH
3282 else if (TREE_CODE (*tp) == RETURN_EXPR)
3283 TREE_OPERAND (*tp, 0) = dp->result;
6de9cd9a
DN
3284 /* Change all cleanups for the NRV to only run when an exception is
3285 thrown. */
07b2f2fd 3286 else if (TREE_CODE (*tp) == CLEANUP_STMT
6de9cd9a 3287 && CLEANUP_DECL (*tp) == dp->var)
659e5a7a 3288 CLEANUP_EH_ONLY (*tp) = 1;
350fae66 3289 /* Replace the DECL_EXPR for the NRV with an initialization of the
6de9cd9a 3290 RESULT_DECL, if needed. */
350fae66
RK
3291 else if (TREE_CODE (*tp) == DECL_EXPR
3292 && DECL_EXPR_DECL (*tp) == dp->var)
6de9cd9a
DN
3293 {
3294 tree init;
3295 if (DECL_INITIAL (dp->var)
3296 && DECL_INITIAL (dp->var) != error_mark_node)
3297 {
f293ce4b
RS
3298 init = build2 (INIT_EXPR, void_type_node, dp->result,
3299 DECL_INITIAL (dp->var));
6de9cd9a
DN
3300 DECL_INITIAL (dp->var) = error_mark_node;
3301 }
3302 else
543a0daa 3303 init = build_empty_stmt ();
6de9cd9a 3304 SET_EXPR_LOCUS (init, EXPR_LOCUS (*tp));
6de9cd9a
DN
3305 *tp = init;
3306 }
3307 /* And replace all uses of the NRV with the RESULT_DECL. */
3308 else if (*tp == dp->var)
3309 *tp = dp->result;
3310
3311 /* Avoid walking into the same tree more than once. Unfortunately, we
3312 can't just use walk_tree_without duplicates because it would only call
3313 us for the first occurrence of dp->var in the function body. */
3314 slot = htab_find_slot (dp->visited, *tp, INSERT);
3315 if (*slot)
3316 *walk_subtrees = 0;
3317 else
3318 *slot = *tp;
0d97bf4c
JM
3319
3320 /* Keep iterating. */
3321 return NULL_TREE;
3322}
3323
6de9cd9a 3324/* Called from finish_function to implement the named return value
5088b058 3325 optimization by overriding all the RETURN_EXPRs and pertinent
6de9cd9a
DN
3326 CLEANUP_STMTs and replacing all occurrences of VAR with RESULT, the
3327 RESULT_DECL for the function. */
f444e36b 3328
4985cde3 3329void
6de9cd9a 3330finalize_nrv (tree *tp, tree var, tree result)
f444e36b 3331{
6de9cd9a
DN
3332 struct nrv_data data;
3333
3334 /* Copy debugging information from VAR to RESULT. */
3335 DECL_NAME (result) = DECL_NAME (var);
b785f485
RH
3336 DECL_ARTIFICIAL (result) = DECL_ARTIFICIAL (var);
3337 DECL_IGNORED_P (result) = DECL_IGNORED_P (var);
6de9cd9a
DN
3338 DECL_SOURCE_LOCATION (result) = DECL_SOURCE_LOCATION (var);
3339 DECL_ABSTRACT_ORIGIN (result) = DECL_ABSTRACT_ORIGIN (var);
3340 /* Don't forget that we take its address. */
3341 TREE_ADDRESSABLE (result) = TREE_ADDRESSABLE (var);
3342
3343 data.var = var;
3344 data.result = result;
3345 data.visited = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL);
14588106 3346 cp_walk_tree (tp, finalize_nrv_r, &data, 0);
6de9cd9a 3347 htab_delete (data.visited);
b850de4f 3348}
1799e5d5
RH
3349\f
3350/* For all elements of CLAUSES, validate them vs OpenMP constraints.
3351 Remove any elements from the list that are invalid. */
3352
3353tree
3354finish_omp_clauses (tree clauses)
3355{
3356 bitmap_head generic_head, firstprivate_head, lastprivate_head;
3357 tree c, t, *pc = &clauses;
3358 const char *name;
3359
3360 bitmap_obstack_initialize (NULL);
3361 bitmap_initialize (&generic_head, &bitmap_default_obstack);
3362 bitmap_initialize (&firstprivate_head, &bitmap_default_obstack);
3363 bitmap_initialize (&lastprivate_head, &bitmap_default_obstack);
3364
3365 for (pc = &clauses, c = clauses; c ; c = *pc)
3366 {
3367 bool remove = false;
3368
3369 switch (OMP_CLAUSE_CODE (c))
3370 {
3371 case OMP_CLAUSE_SHARED:
3372 name = "shared";
3373 goto check_dup_generic;
3374 case OMP_CLAUSE_PRIVATE:
3375 name = "private";
3376 goto check_dup_generic;
3377 case OMP_CLAUSE_REDUCTION:
3378 name = "reduction";
3379 goto check_dup_generic;
3380 case OMP_CLAUSE_COPYPRIVATE:
3381 name = "copyprivate";
3382 goto check_dup_generic;
3383 case OMP_CLAUSE_COPYIN:
3384 name = "copyin";
3385 goto check_dup_generic;
3386 check_dup_generic:
3387 t = OMP_CLAUSE_DECL (c);
3388 if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3389 {
3390 if (processing_template_decl)
3391 break;
76dc15d4
JJ
3392 if (DECL_P (t))
3393 error ("%qD is not a variable in clause %qs", t, name);
3394 else
3395 error ("%qE is not a variable in clause %qs", t, name);
1799e5d5
RH
3396 remove = true;
3397 }
3398 else if (bitmap_bit_p (&generic_head, DECL_UID (t))
3399 || bitmap_bit_p (&firstprivate_head, DECL_UID (t))
3400 || bitmap_bit_p (&lastprivate_head, DECL_UID (t)))
3401 {
76dc15d4 3402 error ("%qD appears more than once in data clauses", t);
1799e5d5
RH
3403 remove = true;
3404 }
3405 else
3406 bitmap_set_bit (&generic_head, DECL_UID (t));
3407 break;
3408
3409 case OMP_CLAUSE_FIRSTPRIVATE:
3410 t = OMP_CLAUSE_DECL (c);
3411 if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3412 {
3413 if (processing_template_decl)
3414 break;
85b20612
JJ
3415 if (DECL_P (t))
3416 error ("%qD is not a variable in clause %<firstprivate%>", t);
3417 else
3418 error ("%qE is not a variable in clause %<firstprivate%>", t);
1799e5d5
RH
3419 remove = true;
3420 }
3421 else if (bitmap_bit_p (&generic_head, DECL_UID (t))
3422 || bitmap_bit_p (&firstprivate_head, DECL_UID (t)))
3423 {
85b20612 3424 error ("%qD appears more than once in data clauses", t);
1799e5d5
RH
3425 remove = true;
3426 }
3427 else
3428 bitmap_set_bit (&firstprivate_head, DECL_UID (t));
3429 break;
3430
3431 case OMP_CLAUSE_LASTPRIVATE:
3432 t = OMP_CLAUSE_DECL (c);
3433 if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3434 {
3435 if (processing_template_decl)
3436 break;
85b20612
JJ
3437 if (DECL_P (t))
3438 error ("%qD is not a variable in clause %<lastprivate%>", t);
3439 else
3440 error ("%qE is not a variable in clause %<lastprivate%>", t);
1799e5d5
RH
3441 remove = true;
3442 }
3443 else if (bitmap_bit_p (&generic_head, DECL_UID (t))
3444 || bitmap_bit_p (&lastprivate_head, DECL_UID (t)))
3445 {
85b20612 3446 error ("%qD appears more than once in data clauses", t);
1799e5d5
RH
3447 remove = true;
3448 }
3449 else
3450 bitmap_set_bit (&lastprivate_head, DECL_UID (t));
3451 break;
3452
3453 case OMP_CLAUSE_IF:
3454 t = OMP_CLAUSE_IF_EXPR (c);
3455 t = maybe_convert_cond (t);
3456 if (t == error_mark_node)
3457 remove = true;
3458 OMP_CLAUSE_IF_EXPR (c) = t;
3459 break;
3460
3461 case OMP_CLAUSE_NUM_THREADS:
3462 t = OMP_CLAUSE_NUM_THREADS_EXPR (c);
3463 if (t == error_mark_node)
3464 remove = true;
6e684eee
JJ
3465 else if (!type_dependent_expression_p (t)
3466 && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
1799e5d5
RH
3467 {
3468 error ("num_threads expression must be integral");
3469 remove = true;
3470 }
3471 break;
3472
3473 case OMP_CLAUSE_SCHEDULE:
3474 t = OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c);
3475 if (t == NULL)
3476 ;
3477 else if (t == error_mark_node)
3478 remove = true;
6e684eee
JJ
3479 else if (!type_dependent_expression_p (t)
3480 && !INTEGRAL_TYPE_P (TREE_TYPE (t)))
1799e5d5
RH
3481 {
3482 error ("schedule chunk size expression must be integral");
3483 remove = true;
3484 }
3485 break;
3486
3487 case OMP_CLAUSE_NOWAIT:
3488 case OMP_CLAUSE_ORDERED:
3489 case OMP_CLAUSE_DEFAULT:
3490 break;
3491
3492 default:
3493 gcc_unreachable ();
3494 }
3495
3496 if (remove)
3497 *pc = OMP_CLAUSE_CHAIN (c);
3498 else
3499 pc = &OMP_CLAUSE_CHAIN (c);
3500 }
3501
3502 for (pc = &clauses, c = clauses; c ; c = *pc)
3503 {
3504 enum tree_code c_kind = OMP_CLAUSE_CODE (c);
3505 bool remove = false;
3506 bool need_complete_non_reference = false;
3507 bool need_default_ctor = false;
3508 bool need_copy_ctor = false;
3509 bool need_copy_assignment = false;
3510 bool need_implicitly_determined = false;
3511 tree type, inner_type;
3512
3513 switch (c_kind)
3514 {
3515 case OMP_CLAUSE_SHARED:
3516 name = "shared";
3517 need_implicitly_determined = true;
3518 break;
3519 case OMP_CLAUSE_PRIVATE:
3520 name = "private";
3521 need_complete_non_reference = true;
3522 need_default_ctor = true;
3523 need_implicitly_determined = true;
3524 break;
3525 case OMP_CLAUSE_FIRSTPRIVATE:
3526 name = "firstprivate";
3527 need_complete_non_reference = true;
3528 need_copy_ctor = true;
3529 need_implicitly_determined = true;
3530 break;
3531 case OMP_CLAUSE_LASTPRIVATE:
3532 name = "lastprivate";
3533 need_complete_non_reference = true;
3534 need_copy_assignment = true;
3535 need_implicitly_determined = true;
3536 break;
3537 case OMP_CLAUSE_REDUCTION:
3538 name = "reduction";
3539 need_implicitly_determined = true;
3540 break;
3541 case OMP_CLAUSE_COPYPRIVATE:
3542 name = "copyprivate";
3543 need_copy_assignment = true;
3544 break;
3545 case OMP_CLAUSE_COPYIN:
3546 name = "copyin";
3547 need_copy_assignment = true;
3548 break;
3549 default:
3550 pc = &OMP_CLAUSE_CHAIN (c);
3551 continue;
3552 }
3553
3554 t = OMP_CLAUSE_DECL (c);
3555 if (processing_template_decl
3556 && TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3557 {
3558 pc = &OMP_CLAUSE_CHAIN (c);
3559 continue;
3560 }
3561
3562 switch (c_kind)
3563 {
3564 case OMP_CLAUSE_LASTPRIVATE:
3565 if (!bitmap_bit_p (&firstprivate_head, DECL_UID (t)))
3566 need_default_ctor = true;
3567 break;
3568
3569 case OMP_CLAUSE_REDUCTION:
3570 if (AGGREGATE_TYPE_P (TREE_TYPE (t))
3571 || POINTER_TYPE_P (TREE_TYPE (t)))
3572 {
3573 error ("%qE has invalid type for %<reduction%>", t);
3574 remove = true;
3575 }
3576 else if (FLOAT_TYPE_P (TREE_TYPE (t)))
3577 {
3578 enum tree_code r_code = OMP_CLAUSE_REDUCTION_CODE (c);
3579 switch (r_code)
3580 {
3581 case PLUS_EXPR:
3582 case MULT_EXPR:
3583 case MINUS_EXPR:
3584 break;
3585 default:
3586 error ("%qE has invalid type for %<reduction(%s)%>",
3587 t, operator_name_info[r_code].name);
3588 remove = true;
3589 }
3590 }
3591 break;
3592
3593 case OMP_CLAUSE_COPYIN:
3594 if (TREE_CODE (t) != VAR_DECL || !DECL_THREAD_LOCAL_P (t))
3595 {
3596 error ("%qE must be %<threadprivate%> for %<copyin%>", t);
3597 remove = true;
3598 }
3599 break;
3600
3601 default:
3602 break;
3603 }
3604
3605 if (need_complete_non_reference)
3606 {
3607 t = require_complete_type (t);
3608 if (t == error_mark_node)
3609 remove = true;
3610 else if (TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE)
3611 {
3612 error ("%qE has reference type for %qs", t, name);
3613 remove = true;
3614 }
3615 }
3616 if (need_implicitly_determined)
3617 {
3618 const char *share_name = NULL;
3619
3620 if (TREE_CODE (t) == VAR_DECL && DECL_THREAD_LOCAL_P (t))
3621 share_name = "threadprivate";
3622 else switch (cxx_omp_predetermined_sharing (t))
3623 {
3624 case OMP_CLAUSE_DEFAULT_UNSPECIFIED:
3625 break;
3626 case OMP_CLAUSE_DEFAULT_SHARED:
3627 share_name = "shared";
3628 break;
3629 case OMP_CLAUSE_DEFAULT_PRIVATE:
3630 share_name = "private";
3631 break;
3632 default:
3633 gcc_unreachable ();
3634 }
3635 if (share_name)
3636 {
3637 error ("%qE is predetermined %qs for %qs",
3638 t, share_name, name);
3639 remove = true;
3640 }
3641 }
3642
3643 /* We're interested in the base element, not arrays. */
3644 inner_type = type = TREE_TYPE (t);
3645 while (TREE_CODE (inner_type) == ARRAY_TYPE)
3646 inner_type = TREE_TYPE (inner_type);
3647
84dc00e8 3648 /* Check for special function availability by building a call to one.
1799e5d5
RH
3649 Save the results, because later we won't be in the right context
3650 for making these queries. */
3651 if (CLASS_TYPE_P (inner_type)
6f719560
JJ
3652 && (need_default_ctor || need_copy_ctor || need_copy_assignment)
3653 && !type_dependent_expression_p (t))
1799e5d5
RH
3654 {
3655 int save_errorcount = errorcount;
3656 tree info;
3657
3658 /* Always allocate 3 elements for simplicity. These are the
3659 function decls for the ctor, dtor, and assignment op.
3660 This layout is known to the three lang hooks,
3661 cxx_omp_clause_default_init, cxx_omp_clause_copy_init,
3662 and cxx_omp_clause_assign_op. */
3663 info = make_tree_vec (3);
3664 CP_OMP_CLAUSE_INFO (c) = info;
3665
3666 if (need_default_ctor
3667 || (need_copy_ctor
3668 && !TYPE_HAS_TRIVIAL_INIT_REF (inner_type)))
3669 {
3670 if (need_default_ctor)
3671 t = NULL;
3672 else
3673 {
3674 t = build_int_cst (build_pointer_type (inner_type), 0);
3675 t = build1 (INDIRECT_REF, inner_type, t);
3676 t = build_tree_list (NULL, t);
3677 }
3678 t = build_special_member_call (NULL_TREE,
3679 complete_ctor_identifier,
5ade1ed2
DG
3680 t, inner_type, LOOKUP_NORMAL,
3681 tf_warning_or_error);
67f9922b 3682
fde155a7 3683 if (targetm.cxx.cdtor_returns_this () || errorcount)
67f9922b
MM
3684 /* Because constructors and destructors return this,
3685 the call will have been cast to "void". Remove the
3686 cast here. We would like to use STRIP_NOPS, but it
3687 wouldn't work here because TYPE_MODE (t) and
3688 TYPE_MODE (TREE_OPERAND (t, 0)) are different.
3689 They are VOIDmode and Pmode, respectively. */
3690 if (TREE_CODE (t) == NOP_EXPR)
3691 t = TREE_OPERAND (t, 0);
3692
1799e5d5
RH
3693 t = get_callee_fndecl (t);
3694 TREE_VEC_ELT (info, 0) = t;
3695 }
3696
3697 if ((need_default_ctor || need_copy_ctor)
3698 && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (inner_type))
3699 {
3700 t = build_int_cst (build_pointer_type (inner_type), 0);
3701 t = build1 (INDIRECT_REF, inner_type, t);
3702 t = build_special_member_call (t, complete_dtor_identifier,
5ade1ed2
DG
3703 NULL, inner_type, LOOKUP_NORMAL,
3704 tf_warning_or_error);
67f9922b 3705
fde155a7 3706 if (targetm.cxx.cdtor_returns_this () || errorcount)
67f9922b
MM
3707 /* Because constructors and destructors return this,
3708 the call will have been cast to "void". Remove the
3709 cast here. We would like to use STRIP_NOPS, but it
3710 wouldn't work here because TYPE_MODE (t) and
3711 TYPE_MODE (TREE_OPERAND (t, 0)) are different.
3712 They are VOIDmode and Pmode, respectively. */
3713 if (TREE_CODE (t) == NOP_EXPR)
3714 t = TREE_OPERAND (t, 0);
3715
1799e5d5
RH
3716 t = get_callee_fndecl (t);
3717 TREE_VEC_ELT (info, 1) = t;
3718 }
3719
3720 if (need_copy_assignment
3721 && !TYPE_HAS_TRIVIAL_ASSIGN_REF (inner_type))
3722 {
3723 t = build_int_cst (build_pointer_type (inner_type), 0);
3724 t = build1 (INDIRECT_REF, inner_type, t);
3725 t = build_special_member_call (t, ansi_assopname (NOP_EXPR),
3726 build_tree_list (NULL, t),
5ade1ed2
DG
3727 inner_type, LOOKUP_NORMAL,
3728 tf_warning_or_error);
1799e5d5
RH
3729
3730 /* We'll have called convert_from_reference on the call, which
3db45ab5 3731 may well have added an indirect_ref. It's unneeded here,
1799e5d5
RH
3732 and in the way, so kill it. */
3733 if (TREE_CODE (t) == INDIRECT_REF)
3734 t = TREE_OPERAND (t, 0);
3735
3736 t = get_callee_fndecl (t);
3737 TREE_VEC_ELT (info, 2) = t;
3738 }
3739
3740 if (errorcount != save_errorcount)
3741 remove = true;
3742 }
3743
3744 if (remove)
3745 *pc = OMP_CLAUSE_CHAIN (c);
3746 else
3747 pc = &OMP_CLAUSE_CHAIN (c);
3748 }
3749
3750 bitmap_obstack_release (NULL);
3751 return clauses;
3752}
3753
3754/* For all variables in the tree_list VARS, mark them as thread local. */
3755
3756void
3757finish_omp_threadprivate (tree vars)
3758{
3759 tree t;
3760
3761 /* Mark every variable in VARS to be assigned thread local storage. */
3762 for (t = vars; t; t = TREE_CHAIN (t))
3763 {
3764 tree v = TREE_PURPOSE (t);
3765
edb6000e
JJ
3766 if (error_operand_p (v))
3767 ;
3768 else if (TREE_CODE (v) != VAR_DECL)
3769 error ("%<threadprivate%> %qD is not file, namespace "
3770 "or block scope variable", v);
1799e5d5
RH
3771 /* If V had already been marked threadprivate, it doesn't matter
3772 whether it had been used prior to this point. */
edb6000e 3773 else if (TREE_USED (v)
1799e5d5
RH
3774 && (DECL_LANG_SPECIFIC (v) == NULL
3775 || !CP_DECL_THREADPRIVATE_P (v)))
3776 error ("%qE declared %<threadprivate%> after first use", v);
3777 else if (! TREE_STATIC (v) && ! DECL_EXTERNAL (v))
3778 error ("automatic variable %qE cannot be %<threadprivate%>", v);
3779 else if (! COMPLETE_TYPE_P (TREE_TYPE (v)))
3780 error ("%<threadprivate%> %qE has incomplete type", v);
3781 else if (TREE_STATIC (v) && TYPE_P (CP_DECL_CONTEXT (v)))
3782 error ("%<threadprivate%> %qE is not file, namespace "
3783 "or block scope variable", v);
3784 else
3785 {
3786 /* Allocate a LANG_SPECIFIC structure for V, if needed. */
3787 if (DECL_LANG_SPECIFIC (v) == NULL)
3788 {
3789 retrofit_lang_decl (v);
3790
3791 /* Make sure that DECL_DISCRIMINATOR_P continues to be true
3792 after the allocation of the lang_decl structure. */
3793 if (DECL_DISCRIMINATOR_P (v))
3794 DECL_LANG_SPECIFIC (v)->decl_flags.u2sel = 1;
3795 }
3796
3797 if (! DECL_THREAD_LOCAL_P (v))
3798 {
3799 DECL_TLS_MODEL (v) = decl_default_tls_model (v);
3800 /* If rtl has been already set for this var, call
3801 make_decl_rtl once again, so that encode_section_info
3802 has a chance to look at the new decl flags. */
3803 if (DECL_RTL_SET_P (v))
3804 make_decl_rtl (v);
3805 }
3806 CP_DECL_THREADPRIVATE_P (v) = 1;
3807 }
3808 }
3809}
3810
3811/* Build an OpenMP structured block. */
3812
3813tree
3814begin_omp_structured_block (void)
3815{
3816 return do_pushlevel (sk_omp);
3817}
3818
3819tree
3820finish_omp_structured_block (tree block)
3821{
3822 return do_poplevel (block);
3823}
3824
84dc00e8 3825/* Similarly, except force the retention of the BLOCK. */
1799e5d5
RH
3826
3827tree
3828begin_omp_parallel (void)
3829{
3830 keep_next_level (true);
3831 return begin_omp_structured_block ();
3832}
3833
3834tree
3835finish_omp_parallel (tree clauses, tree body)
3836{
3837 tree stmt;
3838
3839 body = finish_omp_structured_block (body);
b850de4f 3840
1799e5d5
RH
3841 stmt = make_node (OMP_PARALLEL);
3842 TREE_TYPE (stmt) = void_type_node;
3843 OMP_PARALLEL_CLAUSES (stmt) = clauses;
3844 OMP_PARALLEL_BODY (stmt) = body;
54f7877c 3845
1799e5d5
RH
3846 return add_stmt (stmt);
3847}
3848
3849/* Build and validate an OMP_FOR statement. CLAUSES, BODY, COND, INCR
3850 are directly for their associated operands in the statement. DECL
3851 and INIT are a combo; if DECL is NULL then INIT ought to be a
3852 MODIFY_EXPR, and the DECL should be extracted. PRE_BODY are
3853 optional statements that need to go before the loop into its
3854 sk_omp scope. */
3855
3856tree
3857finish_omp_for (location_t locus, tree decl, tree init, tree cond,
3858 tree incr, tree body, tree pre_body)
3859{
61c3a446 3860 tree omp_for = NULL;
969c111d 3861
1799e5d5
RH
3862 if (decl == NULL)
3863 {
3864 if (init != NULL)
3865 switch (TREE_CODE (init))
3866 {
3867 case MODIFY_EXPR:
3868 decl = TREE_OPERAND (init, 0);
3869 init = TREE_OPERAND (init, 1);
3870 break;
3871 case MODOP_EXPR:
3872 if (TREE_CODE (TREE_OPERAND (init, 1)) == NOP_EXPR)
3873 {
3874 decl = TREE_OPERAND (init, 0);
3875 init = TREE_OPERAND (init, 2);
3876 }
3877 break;
3878 default:
3879 break;
3880 }
3881
3882 if (decl == NULL)
3883 {
3884 error ("expected iteration declaration or initialization");
3885 return NULL;
3886 }
3887 }
3888
3889 if (type_dependent_expression_p (decl)
3890 || type_dependent_expression_p (init)
3891 || (cond && type_dependent_expression_p (cond))
3892 || (incr && type_dependent_expression_p (incr)))
3893 {
3894 tree stmt;
3895
3896 if (cond == NULL)
3897 {
3898 error ("%Hmissing controlling predicate", &locus);
3899 return NULL;
3900 }
3901
3902 if (incr == NULL)
3903 {
3904 error ("%Hmissing increment expression", &locus);
3905 return NULL;
3906 }
3907
3908 stmt = make_node (OMP_FOR);
3909
3910 /* This is really just a place-holder. We'll be decomposing this
3911 again and going through the build_modify_expr path below when
3912 we instantiate the thing. */
3913 init = build2 (MODIFY_EXPR, void_type_node, decl, init);
3914
3915 TREE_TYPE (stmt) = void_type_node;
3916 OMP_FOR_INIT (stmt) = init;
3917 OMP_FOR_COND (stmt) = cond;
3918 OMP_FOR_INCR (stmt) = incr;
3919 OMP_FOR_BODY (stmt) = body;
3920 OMP_FOR_PRE_BODY (stmt) = pre_body;
3921
3922 SET_EXPR_LOCATION (stmt, locus);
3923 return add_stmt (stmt);
3924 }
3925
3926 if (!DECL_P (decl))
3927 {
3928 error ("expected iteration declaration or initialization");
3929 return NULL;
3930 }
3931
dadb19e0
JJ
3932 if (!INTEGRAL_TYPE_P (TREE_TYPE (decl)))
3933 {
3934 location_t elocus = locus;
3935
3936 if (EXPR_HAS_LOCATION (init))
3937 elocus = EXPR_LOCATION (init);
3938 error ("%Hinvalid type for iteration variable %qE", &elocus, decl);
3939 return NULL;
3940 }
3941
1799e5d5
RH
3942 if (pre_body == NULL || IS_EMPTY_STMT (pre_body))
3943 pre_body = NULL;
3944 else if (! processing_template_decl)
3945 {
3946 add_stmt (pre_body);
3947 pre_body = NULL;
3948 }
969c111d 3949
b2ebd268
JJ
3950 if (!processing_template_decl)
3951 init = fold_build_cleanup_point_expr (TREE_TYPE (init), init);
5ade1ed2 3952 init = cp_build_modify_expr (decl, NOP_EXPR, init, tf_warning_or_error);
969c111d
JJ
3953 if (cond && TREE_SIDE_EFFECTS (cond) && COMPARISON_CLASS_P (cond))
3954 {
3955 int n = TREE_SIDE_EFFECTS (TREE_OPERAND (cond, 1)) != 0;
3956 tree t = TREE_OPERAND (cond, n);
3957
b2ebd268
JJ
3958 if (!processing_template_decl)
3959 TREE_OPERAND (cond, n)
3960 = fold_build_cleanup_point_expr (TREE_TYPE (t), t);
969c111d 3961 }
61c3a446
JJ
3962 if (decl != error_mark_node && init != error_mark_node)
3963 omp_for = c_finish_omp_for (locus, decl, init, cond, incr, body, pre_body);
969c111d
JJ
3964 if (omp_for != NULL
3965 && TREE_CODE (OMP_FOR_INCR (omp_for)) == MODIFY_EXPR
3966 && TREE_SIDE_EFFECTS (TREE_OPERAND (OMP_FOR_INCR (omp_for), 1))
3967 && BINARY_CLASS_P (TREE_OPERAND (OMP_FOR_INCR (omp_for), 1)))
3968 {
3969 tree t = TREE_OPERAND (OMP_FOR_INCR (omp_for), 1);
3970 int n = TREE_SIDE_EFFECTS (TREE_OPERAND (t, 1)) != 0;
3971
b2ebd268
JJ
3972 if (!processing_template_decl)
3973 TREE_OPERAND (t, n)
3974 = fold_build_cleanup_point_expr (TREE_TYPE (TREE_OPERAND (t, n)),
3975 TREE_OPERAND (t, n));
969c111d
JJ
3976 }
3977 return omp_for;
1799e5d5
RH
3978}
3979
3980void
3981finish_omp_atomic (enum tree_code code, tree lhs, tree rhs)
3982{
239371f9
JJ
3983 tree orig_lhs;
3984 tree orig_rhs;
3985 bool dependent_p;
e6bd5565
MM
3986 tree stmt;
3987
239371f9
JJ
3988 orig_lhs = lhs;
3989 orig_rhs = rhs;
3990 dependent_p = false;
3991 stmt = NULL_TREE;
3992
3993 /* Even in a template, we can detect invalid uses of the atomic
3994 pragma if neither LHS nor RHS is type-dependent. */
3995 if (processing_template_decl)
e6bd5565 3996 {
239371f9
JJ
3997 dependent_p = (type_dependent_expression_p (lhs)
3998 || type_dependent_expression_p (rhs));
3999 if (!dependent_p)
e6bd5565
MM
4000 {
4001 lhs = build_non_dependent_expr (lhs);
4002 rhs = build_non_dependent_expr (rhs);
4003 }
239371f9
JJ
4004 }
4005 if (!dependent_p)
4006 {
e6bd5565 4007 stmt = c_finish_omp_atomic (code, lhs, rhs);
239371f9
JJ
4008 if (stmt == error_mark_node)
4009 return;
e6bd5565 4010 }
239371f9
JJ
4011 if (processing_template_decl)
4012 stmt = build2 (OMP_ATOMIC, void_type_node, integer_zero_node,
4013 build2 (code, void_type_node, orig_lhs, orig_rhs));
4014 add_stmt (stmt);
1799e5d5
RH
4015}
4016
4017void
4018finish_omp_barrier (void)
4019{
4020 tree fn = built_in_decls[BUILT_IN_GOMP_BARRIER];
5ade1ed2 4021 tree stmt = finish_call_expr (fn, NULL, false, false, tf_warning_or_error);
1799e5d5
RH
4022 finish_expr_stmt (stmt);
4023}
4024
4025void
4026finish_omp_flush (void)
4027{
4028 tree fn = built_in_decls[BUILT_IN_SYNCHRONIZE];
5ade1ed2 4029 tree stmt = finish_call_expr (fn, NULL, false, false, tf_warning_or_error);
1799e5d5
RH
4030 finish_expr_stmt (stmt);
4031}
4032
4033/* True if OpenMP sharing attribute of DECL is predetermined. */
4034
4035enum omp_clause_default_kind
4036cxx_omp_predetermined_sharing (tree decl)
4037{
4038 enum omp_clause_default_kind kind;
4039
4040 kind = c_omp_predetermined_sharing (decl);
4041 if (kind != OMP_CLAUSE_DEFAULT_UNSPECIFIED)
4042 return kind;
4043
4044 /* Static data members are predetermined as shared. */
4045 if (TREE_STATIC (decl))
4046 {
4047 tree ctx = CP_DECL_CONTEXT (decl);
9e1e64ec 4048 if (TYPE_P (ctx) && MAYBE_CLASS_TYPE_P (ctx))
1799e5d5
RH
4049 return OMP_CLAUSE_DEFAULT_SHARED;
4050 }
4051
4052 return OMP_CLAUSE_DEFAULT_UNSPECIFIED;
4053}
4054\f
54f7877c 4055void
3a978d72 4056init_cp_semantics (void)
54f7877c 4057{
54f7877c 4058}
55a3debe
DG
4059\f
4060/* Build a STATIC_ASSERT for a static assertion with the condition
4061 CONDITION and the message text MESSAGE. LOCATION is the location
4062 of the static assertion in the source code. When MEMBER_P, this
4063 static assertion is a member of a class. */
4064void
4065finish_static_assert (tree condition, tree message, location_t location,
4066 bool member_p)
4067{
7b3e2d46
DG
4068 if (check_for_bare_parameter_packs (condition))
4069 condition = error_mark_node;
4070
55a3debe
DG
4071 if (type_dependent_expression_p (condition)
4072 || value_dependent_expression_p (condition))
4073 {
4074 /* We're in a template; build a STATIC_ASSERT and put it in
4075 the right place. */
4076 tree assertion;
4077
4078 assertion = make_node (STATIC_ASSERT);
4079 STATIC_ASSERT_CONDITION (assertion) = condition;
4080 STATIC_ASSERT_MESSAGE (assertion) = message;
4081 STATIC_ASSERT_SOURCE_LOCATION (assertion) = location;
4082
4083 if (member_p)
4084 maybe_add_class_template_decl_list (current_class_type,
4085 assertion,
4086 /*friend_p=*/0);
4087 else
4088 add_stmt (assertion);
4089
4090 return;
4091 }
4092
4093 /* Fold the expression and convert it to a boolean value. */
4094 condition = fold_non_dependent_expr (condition);
4095 condition = cp_convert (boolean_type_node, condition);
4096
4097 if (TREE_CODE (condition) == INTEGER_CST && !integer_zerop (condition))
4098 /* Do nothing; the condition is satisfied. */
4099 ;
4100 else
4101 {
4102 location_t saved_loc = input_location;
4103
4104 input_location = location;
4105 if (TREE_CODE (condition) == INTEGER_CST
4106 && integer_zerop (condition))
4107 /* Report the error. */
4108 error ("static assertion failed: %E", message);
4109 else if (condition && condition != error_mark_node)
4110 error ("non-constant condition for static assertion");
4111 input_location = saved_loc;
4112 }
4113}
3ad6a8e1
DG
4114\f
4115/* Implements the C++0x decltype keyword. Returns the type of EXPR,
4116 suitable for use as a type-specifier.
4117
4118 ID_EXPRESSION_OR_MEMBER_ACCESS_P is true when EXPR was parsed as an
4119 id-expression or a class member access, FALSE when it was parsed as
4120 a full expression. */
4121tree
4122finish_decltype_type (tree expr, bool id_expression_or_member_access_p)
4123{
4124 tree orig_expr = expr;
4125 tree type;
4126
e4fd5b87
DG
4127 if (!expr || error_operand_p (expr))
4128 return error_mark_node;
4129
7a547b93
JJ
4130 if (TYPE_P (expr)
4131 || TREE_CODE (expr) == TYPE_DECL
4132 || (TREE_CODE (expr) == BIT_NOT_EXPR
4133 && TYPE_P (TREE_OPERAND (expr, 0))))
4134 {
4135 error ("argument to decltype must be an expression");
4136 return error_mark_node;
4137 }
4138
3ad6a8e1
DG
4139 if (type_dependent_expression_p (expr))
4140 {
9e1e64ec 4141 type = cxx_make_type (DECLTYPE_TYPE);
3ad6a8e1
DG
4142 DECLTYPE_TYPE_EXPR (type) = expr;
4143 DECLTYPE_TYPE_ID_EXPR_OR_MEMBER_ACCESS_P (type)
4144 = id_expression_or_member_access_p;
4145 SET_TYPE_STRUCTURAL_EQUALITY (type);
4146
4147 return type;
4148 }
4149
4150 /* The type denoted by decltype(e) is defined as follows: */
4151
4152 if (id_expression_or_member_access_p)
4153 {
4154 /* If e is an id-expression or a class member access (5.2.5
4155 [expr.ref]), decltype(e) is defined as the type of the entity
4156 named by e. If there is no such entity, or e names a set of
4157 overloaded functions, the program is ill-formed. */
4158 if (TREE_CODE (expr) == IDENTIFIER_NODE)
4159 expr = lookup_name (expr);
4160
4161 if (TREE_CODE (expr) == INDIRECT_REF)
4162 /* This can happen when the expression is, e.g., "a.b". Just
4163 look at the underlying operand. */
4164 expr = TREE_OPERAND (expr, 0);
4165
4166 if (TREE_CODE (expr) == OFFSET_REF
4167 || TREE_CODE (expr) == MEMBER_REF)
4168 /* We're only interested in the field itself. If it is a
4169 BASELINK, we will need to see through it in the next
4170 step. */
4171 expr = TREE_OPERAND (expr, 1);
4172
4173 if (TREE_CODE (expr) == BASELINK)
4174 /* See through BASELINK nodes to the underlying functions. */
4175 expr = BASELINK_FUNCTIONS (expr);
4176
4177 if (TREE_CODE (expr) == OVERLOAD)
4178 {
4179 if (OVL_CHAIN (expr))
4180 {
4181 error ("%qE refers to a set of overloaded functions", orig_expr);
4182 return error_mark_node;
4183 }
4184 else
4185 /* An overload set containing only one function: just look
4186 at that function. */
4187 expr = OVL_FUNCTION (expr);
4188 }
4189
4190 switch (TREE_CODE (expr))
4191 {
4192 case FIELD_DECL:
4193 if (DECL_C_BIT_FIELD (expr))
4194 {
4195 type = DECL_BIT_FIELD_TYPE (expr);
4196 break;
4197 }
4198 /* Fall through for fields that aren't bitfields. */
4199
4200 case FUNCTION_DECL:
4201 case VAR_DECL:
4202 case CONST_DECL:
4203 case PARM_DECL:
4204 case RESULT_DECL:
4205 type = TREE_TYPE (expr);
4206 break;
4207
4208 case ERROR_MARK:
4209 type = error_mark_node;
4210 break;
4211
4212 case COMPONENT_REF:
4213 type = is_bitfield_expr_with_lowered_type (expr);
4214 if (!type)
4215 type = TREE_TYPE (TREE_OPERAND (expr, 1));
4216 break;
4217
4218 case BIT_FIELD_REF:
4219 gcc_unreachable ();
4220
4221 case INTEGER_CST:
4222 /* We can get here when the id-expression refers to an
4223 enumerator. */
4224 type = TREE_TYPE (expr);
4225 break;
4226
4227 default:
91929b4d
JJ
4228 gcc_assert (TYPE_P (expr) || DECL_P (expr)
4229 || TREE_CODE (expr) == SCOPE_REF);
3ad6a8e1
DG
4230 error ("argument to decltype must be an expression");
4231 return error_mark_node;
4232 }
4233 }
4234 else
4235 {
4236 tree fndecl;
4237
e4fd5b87
DG
4238 /* Expressions of reference type are sometimes wrapped in
4239 INDIRECT_REFs. INDIRECT_REFs are just internal compiler
4240 representation, not part of the language, so we have to look
4241 through them. */
4242 if (TREE_CODE (expr) == INDIRECT_REF
4243 && TREE_CODE (TREE_TYPE (TREE_OPERAND (expr, 0)))
4244 == REFERENCE_TYPE)
4245 expr = TREE_OPERAND (expr, 0);
4246
3ad6a8e1
DG
4247 if (TREE_CODE (expr) == CALL_EXPR
4248 && (fndecl = get_callee_fndecl (expr))
4249 && (fndecl != error_mark_node))
4250 /* If e is a function call (5.2.2 [expr.call]) or an
4251 invocation of an overloaded operator (parentheses around e
4252 are ignored), decltype(e) is defined as the return type of
4253 that function. */
4254 type = TREE_TYPE (TREE_TYPE (fndecl));
4255 else
4256 {
4257 type = is_bitfield_expr_with_lowered_type (expr);
4258 if (type)
4259 {
4260 /* Bitfields are special, because their type encodes the
4261 number of bits they store. If the expression referenced a
4262 bitfield, TYPE now has the declared type of that
4263 bitfield. */
4264 type = cp_build_qualified_type (type,
4265 cp_type_quals (TREE_TYPE (expr)));
4266
4267 if (real_lvalue_p (expr))
4268 type = build_reference_type (type);
4269 }
4270 else
4271 {
4272 /* Otherwise, where T is the type of e, if e is an lvalue,
4273 decltype(e) is defined as T&, otherwise decltype(e) is
4274 defined as T. */
4275 type = TREE_TYPE (expr);
e4fd5b87
DG
4276 if (type == error_mark_node)
4277 return error_mark_node;
4278 else if (expr == current_class_ptr)
3ad6a8e1
DG
4279 /* If the expression is just "this", we want the
4280 cv-unqualified pointer for the "this" type. */
4281 type = TYPE_MAIN_VARIANT (type);
4282 else if (real_lvalue_p (expr))
4283 {
4284 if (TREE_CODE (type) != REFERENCE_TYPE)
4285 type = build_reference_type (type);
4286 }
4287 else
4288 type = non_reference (type);
4289 }
4290 }
4291 }
4292
4293 if (!type || type == unknown_type_node)
4294 {
4295 error ("type of %qE is unknown", expr);
4296 return error_mark_node;
4297 }
4298
4299 return type;
4300}
cf22909c 4301
b29441ec
PC
4302/* Called from trait_expr_value to evaluate either __has_nothrow_assign or
4303 __has_nothrow_copy, depending on assign_p. */
cb68ec50
PC
4304
4305static bool
b29441ec 4306classtype_has_nothrow_assign_or_copy_p (tree type, bool assign_p)
cb68ec50 4307{
b29441ec 4308 tree fns;
cb68ec50 4309
b29441ec
PC
4310 if (assign_p)
4311 {
4312 int ix;
4313 ix = lookup_fnfields_1 (type, ansi_assopname (NOP_EXPR));
4314 if (ix < 0)
cb68ec50 4315 return false;
b29441ec
PC
4316 fns = VEC_index (tree, CLASSTYPE_METHOD_VEC (type), ix);
4317 }
4318 else if (TYPE_HAS_INIT_REF (type))
4319 {
4320 /* If construction of the copy constructor was postponed, create
4321 it now. */
4322 if (CLASSTYPE_LAZY_COPY_CTOR (type))
4323 lazily_declare_fn (sfk_copy_constructor, type);
4324 fns = CLASSTYPE_CONSTRUCTORS (type);
cb68ec50
PC
4325 }
4326 else
4327 return false;
4328
b29441ec
PC
4329 for (; fns; fns = OVL_NEXT (fns))
4330 if (!TREE_NOTHROW (OVL_CURRENT (fns)))
4331 return false;
4332
cb68ec50
PC
4333 return true;
4334}
4335
4336/* Actually evaluates the trait. */
4337
4338static bool
4339trait_expr_value (cp_trait_kind kind, tree type1, tree type2)
4340{
4341 enum tree_code type_code1;
4342 tree t;
4343
4344 type_code1 = TREE_CODE (type1);
4345
4346 switch (kind)
4347 {
4348 case CPTK_HAS_NOTHROW_ASSIGN:
b29441ec
PC
4349 return (!CP_TYPE_CONST_P (type1) && type_code1 != REFERENCE_TYPE
4350 && (trait_expr_value (CPTK_HAS_TRIVIAL_ASSIGN, type1, type2)
4351 || (CLASS_TYPE_P (type1)
4352 && classtype_has_nothrow_assign_or_copy_p (type1,
4353 true))));
cb68ec50
PC
4354
4355 case CPTK_HAS_TRIVIAL_ASSIGN:
4356 return (!CP_TYPE_CONST_P (type1) && type_code1 != REFERENCE_TYPE
4357 && (pod_type_p (type1)
4358 || (CLASS_TYPE_P (type1)
4359 && TYPE_HAS_TRIVIAL_ASSIGN_REF (type1))));
4360
4361 case CPTK_HAS_NOTHROW_CONSTRUCTOR:
4362 type1 = strip_array_types (type1);
4363 return (trait_expr_value (CPTK_HAS_TRIVIAL_CONSTRUCTOR, type1, type2)
4364 || (CLASS_TYPE_P (type1)
4365 && (t = locate_ctor (type1, NULL)) && TREE_NOTHROW (t)));
4366
4367 case CPTK_HAS_TRIVIAL_CONSTRUCTOR:
4368 type1 = strip_array_types (type1);
4369 return (pod_type_p (type1)
4370 || (CLASS_TYPE_P (type1) && TYPE_HAS_TRIVIAL_DFLT (type1)));
4371
4372 case CPTK_HAS_NOTHROW_COPY:
4373 return (trait_expr_value (CPTK_HAS_TRIVIAL_COPY, type1, type2)
4374 || (CLASS_TYPE_P (type1)
b29441ec 4375 && classtype_has_nothrow_assign_or_copy_p (type1, false)));
cb68ec50
PC
4376
4377 case CPTK_HAS_TRIVIAL_COPY:
4378 return (pod_type_p (type1) || type_code1 == REFERENCE_TYPE
4379 || (CLASS_TYPE_P (type1) && TYPE_HAS_TRIVIAL_INIT_REF (type1)));
4380
4381 case CPTK_HAS_TRIVIAL_DESTRUCTOR:
4382 type1 = strip_array_types (type1);
4383 return (pod_type_p (type1)
4384 || (CLASS_TYPE_P (type1)
4385 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type1)));
4386
4387 case CPTK_HAS_VIRTUAL_DESTRUCTOR:
4388 return (CLASS_TYPE_P (type1)
4389 && (t = locate_dtor (type1, NULL)) && DECL_VIRTUAL_P (t));
4390
4391 case CPTK_IS_ABSTRACT:
4392 return (CLASS_TYPE_P (type1) && CLASSTYPE_PURE_VIRTUALS (type1));
4393
4394 case CPTK_IS_BASE_OF:
4395 return (NON_UNION_CLASS_TYPE_P (type1) && NON_UNION_CLASS_TYPE_P (type2)
4396 && DERIVED_FROM_P (type1, type2));
4397
4398 case CPTK_IS_CLASS:
4399 return (NON_UNION_CLASS_TYPE_P (type1));
4400
4401 case CPTK_IS_CONVERTIBLE_TO:
4402 /* TODO */
4403 return false;
4404
4405 case CPTK_IS_EMPTY:
4406 return (NON_UNION_CLASS_TYPE_P (type1) && CLASSTYPE_EMPTY_P (type1));
4407
4408 case CPTK_IS_ENUM:
4409 return (type_code1 == ENUMERAL_TYPE);
4410
4411 case CPTK_IS_POD:
4412 return (pod_type_p (type1));
4413
4414 case CPTK_IS_POLYMORPHIC:
4415 return (CLASS_TYPE_P (type1) && TYPE_POLYMORPHIC_P (type1));
4416
4417 case CPTK_IS_UNION:
4418 return (type_code1 == UNION_TYPE);
4419
4420 default:
4421 gcc_unreachable ();
4422 return false;
4423 }
4424}
4425
4426/* Process a trait expression. */
4427
4428tree
4429finish_trait_expr (cp_trait_kind kind, tree type1, tree type2)
4430{
4431 gcc_assert (kind == CPTK_HAS_NOTHROW_ASSIGN
4432 || kind == CPTK_HAS_NOTHROW_CONSTRUCTOR
4433 || kind == CPTK_HAS_NOTHROW_COPY
4434 || kind == CPTK_HAS_TRIVIAL_ASSIGN
4435 || kind == CPTK_HAS_TRIVIAL_CONSTRUCTOR
4436 || kind == CPTK_HAS_TRIVIAL_COPY
4437 || kind == CPTK_HAS_TRIVIAL_DESTRUCTOR
4438 || kind == CPTK_HAS_VIRTUAL_DESTRUCTOR
4439 || kind == CPTK_IS_ABSTRACT
4440 || kind == CPTK_IS_BASE_OF
4441 || kind == CPTK_IS_CLASS
4442 || kind == CPTK_IS_CONVERTIBLE_TO
4443 || kind == CPTK_IS_EMPTY
4444 || kind == CPTK_IS_ENUM
4445 || kind == CPTK_IS_POD
4446 || kind == CPTK_IS_POLYMORPHIC
4447 || kind == CPTK_IS_UNION);
4448
4449 if (kind == CPTK_IS_CONVERTIBLE_TO)
4450 {
4451 sorry ("__is_convertible_to");
4452 return error_mark_node;
4453 }
4454
4455 if (type1 == error_mark_node
4456 || ((kind == CPTK_IS_BASE_OF || kind == CPTK_IS_CONVERTIBLE_TO)
4457 && type2 == error_mark_node))
4458 return error_mark_node;
4459
4460 if (processing_template_decl)
4461 {
4462 tree trait_expr = make_node (TRAIT_EXPR);
4463 TREE_TYPE (trait_expr) = boolean_type_node;
4464 TRAIT_EXPR_TYPE1 (trait_expr) = type1;
4465 TRAIT_EXPR_TYPE2 (trait_expr) = type2;
4466 TRAIT_EXPR_KIND (trait_expr) = kind;
4467 return trait_expr;
4468 }
4469
10c1d4af
PC
4470 complete_type (type1);
4471 if (type2)
4472 complete_type (type2);
4473
cb68ec50
PC
4474 /* The only required diagnostic. */
4475 if (kind == CPTK_IS_BASE_OF
4476 && NON_UNION_CLASS_TYPE_P (type1) && NON_UNION_CLASS_TYPE_P (type2)
4477 && !same_type_ignoring_top_level_qualifiers_p (type1, type2)
10c1d4af 4478 && !COMPLETE_TYPE_P (type2))
cb68ec50
PC
4479 {
4480 error ("incomplete type %qT not allowed", type2);
4481 return error_mark_node;
4482 }
4483
4484 return (trait_expr_value (kind, type1, type2)
4485 ? boolean_true_node : boolean_false_node);
4486}
4487
cf22909c 4488#include "gt-cp-semantics.h"