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