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