]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/cp/semantics.c
Daily bump.
[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
421844e7
MM
2286 /* [dcl.link]
2287
2288 A C language linkage is ignored for the names of class members
2289 and the member function type of class member functions. */
2290 if (DECL_LANG_SPECIFIC (decl) && DECL_LANGUAGE (decl) == lang_c)
5d2ed28c 2291 SET_DECL_LANGUAGE (decl, lang_cplusplus);
421844e7 2292
61a127b3
MM
2293 /* Put functions on the TYPE_METHODS list and everything else on the
2294 TYPE_FIELDS list. Note that these are built up in reverse order.
2295 We reverse them (to obtain declaration order) in finish_struct. */
c8094d83 2296 if (TREE_CODE (decl) == FUNCTION_DECL
61a127b3
MM
2297 || DECL_FUNCTION_TEMPLATE_P (decl))
2298 {
2299 /* We also need to add this function to the
2300 CLASSTYPE_METHOD_VEC. */
b77fe7b4
NS
2301 if (add_method (current_class_type, decl, NULL_TREE))
2302 {
2303 TREE_CHAIN (decl) = TYPE_METHODS (current_class_type);
2304 TYPE_METHODS (current_class_type) = decl;
f139561c 2305
b77fe7b4
NS
2306 maybe_add_class_template_decl_list (current_class_type, decl,
2307 /*friend_p=*/0);
2308 }
61a127b3 2309 }
f139561c 2310 /* Enter the DECL into the scope of the class. */
98ed9dae 2311 else if ((TREE_CODE (decl) == USING_DECL && !DECL_DEPENDENT_P (decl))
399dedb9 2312 || pushdecl_class_level (decl))
61a127b3
MM
2313 {
2314 /* All TYPE_DECLs go at the end of TYPE_FIELDS. Ordinary fields
2315 go at the beginning. The reason is that lookup_field_1
2316 searches the list in order, and we want a field name to
2317 override a type name so that the "struct stat hack" will
2318 work. In particular:
2319
2320 struct S { enum E { }; int E } s;
2321 s.E = 3;
2322
0e339752 2323 is valid. In addition, the FIELD_DECLs must be maintained in
61a127b3
MM
2324 declaration order so that class layout works as expected.
2325 However, we don't need that order until class layout, so we
2326 save a little time by putting FIELD_DECLs on in reverse order
2327 here, and then reversing them in finish_struct_1. (We could
2328 also keep a pointer to the correct insertion points in the
2329 list.) */
2330
2331 if (TREE_CODE (decl) == TYPE_DECL)
c8094d83 2332 TYPE_FIELDS (current_class_type)
61a127b3
MM
2333 = chainon (TYPE_FIELDS (current_class_type), decl);
2334 else
2335 {
2336 TREE_CHAIN (decl) = TYPE_FIELDS (current_class_type);
2337 TYPE_FIELDS (current_class_type) = decl;
2338 }
8f032717 2339
c8094d83 2340 maybe_add_class_template_decl_list (current_class_type, decl,
f139561c 2341 /*friend_p=*/0);
61a127b3 2342 }
5e2f4cd2
MM
2343
2344 if (pch_file)
2345 note_decl_for_pch (decl);
2346}
2347
2348/* DECL has been declared while we are building a PCH file. Perform
2349 actions that we might normally undertake lazily, but which can be
2350 performed now so that they do not have to be performed in
2351 translation units which include the PCH file. */
2352
2353void
2354note_decl_for_pch (tree decl)
2355{
2356 gcc_assert (pch_file);
2357
5e2f4cd2
MM
2358 /* There's a good chance that we'll have to mangle names at some
2359 point, even if only for emission in debugging information. */
ec0897de
JM
2360 if ((TREE_CODE (decl) == VAR_DECL
2361 || TREE_CODE (decl) == FUNCTION_DECL)
2362 && !processing_template_decl)
5e2f4cd2 2363 mangle_decl (decl);
61a127b3
MM
2364}
2365
306ef644 2366/* Finish processing a complete template declaration. The PARMS are
36a117a5
MM
2367 the template parameters. */
2368
2369void
3a978d72 2370finish_template_decl (tree parms)
36a117a5
MM
2371{
2372 if (parms)
2373 end_template_decl ();
2374 else
2375 end_specialization ();
2376}
2377
509fc277 2378/* Finish processing a template-id (which names a type) of the form
36a117a5 2379 NAME < ARGS >. Return the TYPE_DECL for the type named by the
838dfd8a 2380 template-id. If ENTERING_SCOPE is nonzero we are about to enter
36a117a5
MM
2381 the scope of template-id indicated. */
2382
2383tree
3a978d72 2384finish_template_type (tree name, tree args, int entering_scope)
36a117a5
MM
2385{
2386 tree decl;
2387
2388 decl = lookup_template_class (name, args,
42eaed49 2389 NULL_TREE, NULL_TREE, entering_scope,
23fca1f5 2390 tf_warning_or_error | tf_user);
36a117a5
MM
2391 if (decl != error_mark_node)
2392 decl = TYPE_STUB_DECL (decl);
2393
2394 return decl;
2395}
648f19f6 2396
ea6021e8
MM
2397/* Finish processing a BASE_CLASS with the indicated ACCESS_SPECIFIER.
2398 Return a TREE_LIST containing the ACCESS_SPECIFIER and the
2399 BASE_CLASS, or NULL_TREE if an error occurred. The
aba649ba 2400 ACCESS_SPECIFIER is one of
809e3e7f
NS
2401 access_{default,public,protected_private}_node. For a virtual base
2402 we set TREE_TYPE. */
ea6021e8 2403
c8094d83 2404tree
dbbf88d1 2405finish_base_specifier (tree base, tree access, bool virtual_p)
ea6021e8 2406{
ea6021e8
MM
2407 tree result;
2408
dbbf88d1 2409 if (base == error_mark_node)
acb044ee
GDR
2410 {
2411 error ("invalid base-class specification");
2412 result = NULL_TREE;
2413 }
dbbf88d1 2414 else if (! is_aggr_type (base, 1))
ea6021e8 2415 result = NULL_TREE;
ea6021e8 2416 else
bb92901d 2417 {
dbbf88d1 2418 if (cp_type_quals (base) != 0)
0cbd7506
MS
2419 {
2420 error ("base class %qT has cv qualifiers", base);
2421 base = TYPE_MAIN_VARIANT (base);
2422 }
dbbf88d1 2423 result = build_tree_list (access, base);
809e3e7f
NS
2424 if (virtual_p)
2425 TREE_TYPE (result) = integer_type_node;
bb92901d 2426 }
ea6021e8
MM
2427
2428 return result;
2429}
61a127b3 2430
8f78f01f
MM
2431/* Issue a diagnostic that NAME cannot be found in SCOPE. DECL is
2432 what we found when we tried to do the lookup. */
22038b2c
NS
2433
2434void
8f78f01f 2435qualified_name_lookup_error (tree scope, tree name, tree decl)
22038b2c 2436{
1e1b4b37
VR
2437 if (scope == error_mark_node)
2438 ; /* We already complained. */
2439 else if (TYPE_P (scope))
22038b2c
NS
2440 {
2441 if (!COMPLETE_TYPE_P (scope))
a82e1a7d 2442 error ("incomplete type %qT used in nested name specifier", scope);
8f78f01f
MM
2443 else if (TREE_CODE (decl) == TREE_LIST)
2444 {
a82e1a7d 2445 error ("reference to %<%T::%D%> is ambiguous", scope, name);
8f78f01f
MM
2446 print_candidates (decl);
2447 }
22038b2c 2448 else
a82e1a7d 2449 error ("%qD is not a member of %qT", name, scope);
22038b2c
NS
2450 }
2451 else if (scope != global_namespace)
a82e1a7d 2452 error ("%qD is not a member of %qD", name, scope);
22038b2c 2453 else
a82e1a7d 2454 error ("%<::%D%> has not been declared", name);
22038b2c 2455}
c8094d83 2456
eff3a276
MM
2457/* If FNS is a member function, a set of member functions, or a
2458 template-id referring to one or more member functions, return a
2459 BASELINK for FNS, incorporating the current access context.
2460 Otherwise, return FNS unchanged. */
2461
2462tree
2463baselink_for_fns (tree fns)
2464{
2465 tree fn;
2466 tree cl;
2467
2468 if (BASELINK_P (fns)
eff3a276
MM
2469 || error_operand_p (fns))
2470 return fns;
2471
2472 fn = fns;
2473 if (TREE_CODE (fn) == TEMPLATE_ID_EXPR)
2474 fn = TREE_OPERAND (fn, 0);
2475 fn = get_first_fn (fn);
2476 if (!DECL_FUNCTION_MEMBER_P (fn))
2477 return fns;
2478
2479 cl = currently_open_derived_class (DECL_CONTEXT (fn));
2480 if (!cl)
2481 cl = DECL_CONTEXT (fn);
2482 cl = TYPE_BINFO (cl);
2483 return build_baselink (cl, cl, fns, /*optype=*/NULL_TREE);
2484}
2485
b3445994
MM
2486/* ID_EXPRESSION is a representation of parsed, but unprocessed,
2487 id-expression. (See cp_parser_id_expression for details.) SCOPE,
2488 if non-NULL, is the type or namespace used to explicitly qualify
2489 ID_EXPRESSION. DECL is the entity to which that name has been
c8094d83 2490 resolved.
b3445994
MM
2491
2492 *CONSTANT_EXPRESSION_P is true if we are presently parsing a
2493 constant-expression. In that case, *NON_CONSTANT_EXPRESSION_P will
2494 be set to true if this expression isn't permitted in a
2495 constant-expression, but it is otherwise not set by this function.
2496 *ALLOW_NON_CONSTANT_EXPRESSION_P is true if we are parsing a
2497 constant-expression, but a non-constant expression is also
2498 permissible.
2499
02ed62dd
MM
2500 DONE is true if this expression is a complete postfix-expression;
2501 it is false if this expression is followed by '->', '[', '(', etc.
2502 ADDRESS_P is true iff this expression is the operand of '&'.
2503 TEMPLATE_P is true iff the qualified-id was of the form
2504 "A::template B". TEMPLATE_ARG_P is true iff this qualified name
2505 appears as a template argument.
2506
b3445994
MM
2507 If an error occurs, and it is the kind of error that might cause
2508 the parser to abort a tentative parse, *ERROR_MSG is filled in. It
2509 is the caller's responsibility to issue the message. *ERROR_MSG
2510 will be a string with static storage duration, so the caller need
2511 not "free" it.
2512
2513 Return an expression for the entity, after issuing appropriate
2514 diagnostics. This function is also responsible for transforming a
2515 reference to a non-static member into a COMPONENT_REF that makes
c8094d83 2516 the use of "this" explicit.
b3445994
MM
2517
2518 Upon return, *IDK will be filled in appropriately. */
2519
2520tree
c8094d83 2521finish_id_expression (tree id_expression,
b3445994
MM
2522 tree decl,
2523 tree scope,
2524 cp_id_kind *idk,
67c03833
JM
2525 bool integral_constant_expression_p,
2526 bool allow_non_integral_constant_expression_p,
2527 bool *non_integral_constant_expression_p,
02ed62dd
MM
2528 bool template_p,
2529 bool done,
2530 bool address_p,
2531 bool template_arg_p,
b3445994
MM
2532 const char **error_msg)
2533{
2534 /* Initialize the output parameters. */
2535 *idk = CP_ID_KIND_NONE;
2536 *error_msg = NULL;
2537
2538 if (id_expression == error_mark_node)
2539 return error_mark_node;
2540 /* If we have a template-id, then no further lookup is
2541 required. If the template-id was for a template-class, we
2542 will sometimes have a TYPE_DECL at this point. */
2543 else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
ee935db4 2544 || TREE_CODE (decl) == TYPE_DECL)
b3445994
MM
2545 ;
2546 /* Look up the name. */
c8094d83 2547 else
b3445994
MM
2548 {
2549 if (decl == error_mark_node)
2550 {
2551 /* Name lookup failed. */
c8094d83
MS
2552 if (scope
2553 && (!TYPE_P (scope)
4546865e
MM
2554 || (!dependent_type_p (scope)
2555 && !(TREE_CODE (id_expression) == IDENTIFIER_NODE
2556 && IDENTIFIER_TYPENAME_P (id_expression)
2557 && dependent_type_p (TREE_TYPE (id_expression))))))
b3445994 2558 {
4546865e
MM
2559 /* If the qualifying type is non-dependent (and the name
2560 does not name a conversion operator to a dependent
2561 type), issue an error. */
8f78f01f 2562 qualified_name_lookup_error (scope, id_expression, decl);
b3445994
MM
2563 return error_mark_node;
2564 }
2565 else if (!scope)
2566 {
2567 /* It may be resolved via Koenig lookup. */
2568 *idk = CP_ID_KIND_UNQUALIFIED;
2569 return id_expression;
2570 }
4546865e
MM
2571 else
2572 decl = id_expression;
b3445994
MM
2573 }
2574 /* If DECL is a variable that would be out of scope under
2575 ANSI/ISO rules, but in scope in the ARM, name lookup
2576 will succeed. Issue a diagnostic here. */
2577 else
2578 decl = check_for_out_of_scope_variable (decl);
2579
2580 /* Remember that the name was used in the definition of
2581 the current class so that we can check later to see if
2582 the meaning would have been different after the class
2583 was entirely defined. */
2584 if (!scope && decl != error_mark_node)
2585 maybe_note_name_used_in_class (id_expression, decl);
8ca4bf25
MM
2586
2587 /* Disallow uses of local variables from containing functions. */
2588 if (TREE_CODE (decl) == VAR_DECL || TREE_CODE (decl) == PARM_DECL)
2589 {
2590 tree context = decl_function_context (decl);
2591 if (context != NULL_TREE && context != current_function_decl
2592 && ! TREE_STATIC (decl))
2593 {
2594 error (TREE_CODE (decl) == VAR_DECL
2595 ? "use of %<auto%> variable from containing function"
2596 : "use of parameter from containing function");
2597 error (" %q+#D declared here", decl);
2598 return error_mark_node;
2599 }
2600 }
b3445994
MM
2601 }
2602
2603 /* If we didn't find anything, or what we found was a type,
2604 then this wasn't really an id-expression. */
2605 if (TREE_CODE (decl) == TEMPLATE_DECL
2606 && !DECL_FUNCTION_TEMPLATE_P (decl))
2607 {
2608 *error_msg = "missing template arguments";
2609 return error_mark_node;
2610 }
2611 else if (TREE_CODE (decl) == TYPE_DECL
2612 || TREE_CODE (decl) == NAMESPACE_DECL)
2613 {
2614 *error_msg = "expected primary-expression";
2615 return error_mark_node;
2616 }
2617
2618 /* If the name resolved to a template parameter, there is no
931a9c05
GB
2619 need to look it up again later. */
2620 if ((TREE_CODE (decl) == CONST_DECL && DECL_TEMPLATE_PARM_P (decl))
2621 || TREE_CODE (decl) == TEMPLATE_PARM_INDEX)
b3445994 2622 {
db24eb1f 2623 tree r;
c8094d83 2624
b3445994 2625 *idk = CP_ID_KIND_NONE;
931a9c05
GB
2626 if (TREE_CODE (decl) == TEMPLATE_PARM_INDEX)
2627 decl = TEMPLATE_PARM_DECL (decl);
db24eb1f 2628 r = convert_from_reference (DECL_INITIAL (decl));
c8094d83
MS
2629
2630 if (integral_constant_expression_p
68deab91 2631 && !dependent_type_p (TREE_TYPE (decl))
db24eb1f 2632 && !(INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (r))))
931a9c05 2633 {
67c03833 2634 if (!allow_non_integral_constant_expression_p)
a82e1a7d 2635 error ("template parameter %qD of type %qT is not allowed in "
931a9c05
GB
2636 "an integral constant expression because it is not of "
2637 "integral or enumeration type", decl, TREE_TYPE (decl));
67c03833 2638 *non_integral_constant_expression_p = true;
931a9c05 2639 }
db24eb1f 2640 return r;
931a9c05 2641 }
c8094d83 2642 /* Similarly, we resolve enumeration constants to their
931a9c05
GB
2643 underlying values. */
2644 else if (TREE_CODE (decl) == CONST_DECL)
2645 {
2646 *idk = CP_ID_KIND_NONE;
2647 if (!processing_template_decl)
6193b8b7
DJ
2648 {
2649 used_types_insert (TREE_TYPE (decl));
2650 return DECL_INITIAL (decl);
2651 }
b3445994
MM
2652 return decl;
2653 }
2654 else
2655 {
2656 bool dependent_p;
2657
2658 /* If the declaration was explicitly qualified indicate
2659 that. The semantics of `A::f(3)' are different than
2660 `f(3)' if `f' is virtual. */
c8094d83 2661 *idk = (scope
b3445994
MM
2662 ? CP_ID_KIND_QUALIFIED
2663 : (TREE_CODE (decl) == TEMPLATE_ID_EXPR
2664 ? CP_ID_KIND_TEMPLATE_ID
2665 : CP_ID_KIND_UNQUALIFIED));
2666
2667
2668 /* [temp.dep.expr]
2669
2670 An id-expression is type-dependent if it contains an
2671 identifier that was declared with a dependent type.
2672
b3445994
MM
2673 The standard is not very specific about an id-expression that
2674 names a set of overloaded functions. What if some of them
2675 have dependent types and some of them do not? Presumably,
2676 such a name should be treated as a dependent name. */
2677 /* Assume the name is not dependent. */
2678 dependent_p = false;
2679 if (!processing_template_decl)
2680 /* No names are dependent outside a template. */
2681 ;
2682 /* A template-id where the name of the template was not resolved
2683 is definitely dependent. */
2684 else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
c8094d83 2685 && (TREE_CODE (TREE_OPERAND (decl, 0))
b3445994
MM
2686 == IDENTIFIER_NODE))
2687 dependent_p = true;
2688 /* For anything except an overloaded function, just check its
2689 type. */
2690 else if (!is_overloaded_fn (decl))
c8094d83 2691 dependent_p
b3445994
MM
2692 = dependent_type_p (TREE_TYPE (decl));
2693 /* For a set of overloaded functions, check each of the
2694 functions. */
2695 else
2696 {
2697 tree fns = decl;
2698
2699 if (BASELINK_P (fns))
2700 fns = BASELINK_FUNCTIONS (fns);
2701
2702 /* For a template-id, check to see if the template
2703 arguments are dependent. */
2704 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
2705 {
2706 tree args = TREE_OPERAND (fns, 1);
2707 dependent_p = any_dependent_template_arguments_p (args);
2708 /* The functions are those referred to by the
2709 template-id. */
2710 fns = TREE_OPERAND (fns, 0);
2711 }
2712
2713 /* If there are no dependent template arguments, go through
cd0be382 2714 the overloaded functions. */
b3445994
MM
2715 while (fns && !dependent_p)
2716 {
2717 tree fn = OVL_CURRENT (fns);
2718
2719 /* Member functions of dependent classes are
2720 dependent. */
2721 if (TREE_CODE (fn) == FUNCTION_DECL
2722 && type_dependent_expression_p (fn))
2723 dependent_p = true;
2724 else if (TREE_CODE (fn) == TEMPLATE_DECL
2725 && dependent_template_p (fn))
2726 dependent_p = true;
2727
2728 fns = OVL_NEXT (fns);
2729 }
2730 }
2731
2732 /* If the name was dependent on a template parameter, we will
2733 resolve the name at instantiation time. */
2734 if (dependent_p)
2735 {
2736 /* Create a SCOPE_REF for qualified names, if the scope is
2737 dependent. */
2738 if (scope)
2739 {
b3445994
MM
2740 /* Since this name was dependent, the expression isn't
2741 constant -- yet. No error is issued because it might
2742 be constant when things are instantiated. */
67c03833
JM
2743 if (integral_constant_expression_p)
2744 *non_integral_constant_expression_p = true;
02ed62dd
MM
2745 if (TYPE_P (scope))
2746 {
2747 if (address_p && done)
2748 decl = finish_qualified_id_expr (scope, decl,
2749 done, address_p,
2750 template_p,
2751 template_arg_p);
2752 else if (dependent_type_p (scope))
2753 decl = build_qualified_name (/*type=*/NULL_TREE,
2754 scope,
2755 id_expression,
2756 template_p);
2757 else if (DECL_P (decl))
2758 decl = build_qualified_name (TREE_TYPE (decl),
2759 scope,
2760 id_expression,
2761 template_p);
2762 }
2763 if (TREE_TYPE (decl))
2764 decl = convert_from_reference (decl);
2765 return decl;
b3445994
MM
2766 }
2767 /* A TEMPLATE_ID already contains all the information we
2768 need. */
2769 if (TREE_CODE (id_expression) == TEMPLATE_ID_EXPR)
2770 return id_expression;
10b1d5e7 2771 *idk = CP_ID_KIND_UNQUALIFIED_DEPENDENT;
5a98fa7b
MM
2772 /* If we found a variable, then name lookup during the
2773 instantiation will always resolve to the same VAR_DECL
2774 (or an instantiation thereof). */
3c398f34
MM
2775 if (TREE_CODE (decl) == VAR_DECL
2776 || TREE_CODE (decl) == PARM_DECL)
db24eb1f 2777 return convert_from_reference (decl);
bad1f462
KL
2778 /* The same is true for FIELD_DECL, but we also need to
2779 make sure that the syntax is correct. */
2780 else if (TREE_CODE (decl) == FIELD_DECL)
a26ddf11
KL
2781 {
2782 /* Since SCOPE is NULL here, this is an unqualified name.
2783 Access checking has been performed during name lookup
2784 already. Turn off checking to avoid duplicate errors. */
2785 push_deferring_access_checks (dk_no_check);
2786 decl = finish_non_static_data_member
2787 (decl, current_class_ref,
2788 /*qualifying_scope=*/NULL_TREE);
2789 pop_deferring_access_checks ();
2790 return decl;
2791 }
10b1d5e7 2792 return id_expression;
b3445994
MM
2793 }
2794
2795 /* Only certain kinds of names are allowed in constant
0cbd7506
MS
2796 expression. Enumerators and template parameters have already
2797 been handled above. */
c30b4add 2798 if (integral_constant_expression_p
100d337a
MA
2799 && ! DECL_INTEGRAL_CONSTANT_VAR_P (decl)
2800 && ! builtin_valid_in_constant_expr_p (decl))
b3445994 2801 {
c30b4add 2802 if (!allow_non_integral_constant_expression_p)
b3445994 2803 {
a82e1a7d 2804 error ("%qD cannot appear in a constant-expression", decl);
c30b4add 2805 return error_mark_node;
b3445994 2806 }
c30b4add 2807 *non_integral_constant_expression_p = true;
b3445994 2808 }
c8094d83 2809
415d4636 2810 if (TREE_CODE (decl) == NAMESPACE_DECL)
9e95d15f 2811 {
a82e1a7d 2812 error ("use of namespace %qD as expression", decl);
9e95d15f
NS
2813 return error_mark_node;
2814 }
2815 else if (DECL_CLASS_TEMPLATE_P (decl))
2816 {
a82e1a7d 2817 error ("use of class template %qT as expression", decl);
9e95d15f
NS
2818 return error_mark_node;
2819 }
2820 else if (TREE_CODE (decl) == TREE_LIST)
2821 {
2822 /* Ambiguous reference to base members. */
a82e1a7d 2823 error ("request for member %qD is ambiguous in "
9e95d15f
NS
2824 "multiple inheritance lattice", id_expression);
2825 print_candidates (decl);
2826 return error_mark_node;
2827 }
415d4636
MM
2828
2829 /* Mark variable-like entities as used. Functions are similarly
2830 marked either below or after overload resolution. */
2831 if (TREE_CODE (decl) == VAR_DECL
2832 || TREE_CODE (decl) == PARM_DECL
2833 || TREE_CODE (decl) == RESULT_DECL)
2834 mark_used (decl);
2835
2836 if (scope)
2837 {
c8094d83 2838 decl = (adjust_result_of_qualified_name_lookup
415d4636 2839 (decl, scope, current_class_type));
e20bcc5e
JH
2840
2841 if (TREE_CODE (decl) == FUNCTION_DECL)
2842 mark_used (decl);
2843
415d4636 2844 if (TREE_CODE (decl) == FIELD_DECL || BASELINK_P (decl))
02ed62dd
MM
2845 decl = finish_qualified_id_expr (scope,
2846 decl,
2847 done,
2848 address_p,
2849 template_p,
2850 template_arg_p);
db24eb1f
NS
2851 else
2852 {
2853 tree r = convert_from_reference (decl);
c8094d83 2854
02ed62dd
MM
2855 if (processing_template_decl && TYPE_P (scope))
2856 r = build_qualified_name (TREE_TYPE (r),
2857 scope, decl,
2858 template_p);
db24eb1f
NS
2859 decl = r;
2860 }
415d4636 2861 }
9e95d15f 2862 else if (TREE_CODE (decl) == FIELD_DECL)
a26ddf11
KL
2863 {
2864 /* Since SCOPE is NULL here, this is an unqualified name.
2865 Access checking has been performed during name lookup
2866 already. Turn off checking to avoid duplicate errors. */
2867 push_deferring_access_checks (dk_no_check);
2868 decl = finish_non_static_data_member (decl, current_class_ref,
2869 /*qualifying_scope=*/NULL_TREE);
2870 pop_deferring_access_checks ();
2871 }
9e95d15f
NS
2872 else if (is_overloaded_fn (decl))
2873 {
eff3a276 2874 tree first_fn;
b3445994 2875
eff3a276
MM
2876 first_fn = decl;
2877 if (TREE_CODE (first_fn) == TEMPLATE_ID_EXPR)
2878 first_fn = TREE_OPERAND (first_fn, 0);
2879 first_fn = get_first_fn (first_fn);
9e95d15f
NS
2880 if (TREE_CODE (first_fn) == TEMPLATE_DECL)
2881 first_fn = DECL_TEMPLATE_RESULT (first_fn);
415d4636
MM
2882
2883 if (!really_overloaded_fn (decl))
2884 mark_used (first_fn);
2885
02ed62dd
MM
2886 if (!template_arg_p
2887 && TREE_CODE (first_fn) == FUNCTION_DECL
821eaf2a
MM
2888 && DECL_FUNCTION_MEMBER_P (first_fn)
2889 && !shared_member_p (decl))
9e95d15f
NS
2890 {
2891 /* A set of member functions. */
2892 decl = maybe_dummy_object (DECL_CONTEXT (first_fn), 0);
02ed62dd
MM
2893 return finish_class_member_access_expr (decl, id_expression,
2894 /*template_p=*/false);
9e95d15f 2895 }
eff3a276
MM
2896
2897 decl = baselink_for_fns (decl);
9e95d15f
NS
2898 }
2899 else
2900 {
9e95d15f
NS
2901 if (DECL_P (decl) && DECL_NONLOCAL (decl)
2902 && DECL_CLASS_SCOPE_P (decl)
2903 && DECL_CONTEXT (decl) != current_class_type)
2904 {
2905 tree path;
c8094d83 2906
9e95d15f 2907 path = currently_open_derived_class (DECL_CONTEXT (decl));
02022f3a 2908 perform_or_defer_access_check (TYPE_BINFO (path), decl, decl);
9e95d15f 2909 }
c8094d83 2910
db24eb1f 2911 decl = convert_from_reference (decl);
9e95d15f 2912 }
b3445994
MM
2913 }
2914
2915 if (TREE_DEPRECATED (decl))
2916 warn_deprecated_use (decl);
2917
2918 return decl;
2919}
2920
0213a355
JM
2921/* Implement the __typeof keyword: Return the type of EXPR, suitable for
2922 use as a type-specifier. */
2923
b894fc05 2924tree
3a978d72 2925finish_typeof (tree expr)
b894fc05 2926{
65a5559b
MM
2927 tree type;
2928
dffbbe80 2929 if (type_dependent_expression_p (expr))
b894fc05 2930 {
65a5559b 2931 type = make_aggr_type (TYPEOF_TYPE);
eb34af89 2932 TYPEOF_TYPE_EXPR (type) = expr;
b894fc05 2933
65a5559b 2934 return type;
b894fc05
JM
2935 }
2936
3c38f0ff 2937 type = unlowered_expr_type (expr);
65a5559b
MM
2938
2939 if (!type || type == unknown_type_node)
2940 {
a82e1a7d 2941 error ("type of %qE is unknown", expr);
65a5559b
MM
2942 return error_mark_node;
2943 }
2944
2945 return type;
b894fc05 2946}
558475f0 2947
c291f8b1
VR
2948/* Perform C++-specific checks for __builtin_offsetof before calling
2949 fold_offsetof. */
2950
2951tree
2952finish_offsetof (tree expr)
2953{
4c65a534
VR
2954 if (TREE_CODE (expr) == PSEUDO_DTOR_EXPR)
2955 {
2956 error ("cannot apply %<offsetof%> to destructor %<~%T%>",
2957 TREE_OPERAND (expr, 2));
2958 return error_mark_node;
2959 }
c291f8b1
VR
2960 if (TREE_CODE (TREE_TYPE (expr)) == FUNCTION_TYPE
2961 || TREE_CODE (TREE_TYPE (expr)) == METHOD_TYPE
2962 || TREE_CODE (TREE_TYPE (expr)) == UNKNOWN_TYPE)
2963 {
1916c916
VR
2964 if (TREE_CODE (expr) == COMPONENT_REF
2965 || TREE_CODE (expr) == COMPOUND_EXPR)
0a9367cb
VR
2966 expr = TREE_OPERAND (expr, 1);
2967 error ("cannot apply %<offsetof%> to member function %qD", expr);
c291f8b1
VR
2968 return error_mark_node;
2969 }
6d4d7b0e 2970 return fold_offsetof (expr, NULL_TREE);
c291f8b1
VR
2971}
2972
3eb24f73 2973/* Called from expand_body via walk_tree. Replace all AGGR_INIT_EXPRs
6de9cd9a 2974 with equivalent CALL_EXPRs. */
3eb24f73
MM
2975
2976static tree
c8094d83 2977simplify_aggr_init_exprs_r (tree* tp,
0cbd7506
MS
2978 int* walk_subtrees,
2979 void* data ATTRIBUTE_UNUSED)
3eb24f73 2980{
22e92ac3
MM
2981 /* We don't need to walk into types; there's nothing in a type that
2982 needs simplification. (And, furthermore, there are places we
2983 actively don't want to go. For example, we don't want to wander
2984 into the default arguments for a FUNCTION_DECL that appears in a
2985 CALL_EXPR.) */
9eeb200f 2986 if (TYPE_P (*tp))
22e92ac3
MM
2987 {
2988 *walk_subtrees = 0;
2989 return NULL_TREE;
2990 }
2991 /* Only AGGR_INIT_EXPRs are interesting. */
9eeb200f 2992 else if (TREE_CODE (*tp) != AGGR_INIT_EXPR)
3eb24f73
MM
2993 return NULL_TREE;
2994
9eeb200f
JM
2995 simplify_aggr_init_expr (tp);
2996
2997 /* Keep iterating. */
2998 return NULL_TREE;
2999}
3000
3001/* Replace the AGGR_INIT_EXPR at *TP with an equivalent CALL_EXPR. This
3002 function is broken out from the above for the benefit of the tree-ssa
3003 project. */
3004
3005void
3006simplify_aggr_init_expr (tree *tp)
3007{
3008 tree aggr_init_expr = *tp;
3009
3eb24f73 3010 /* Form an appropriate CALL_EXPR. */
5039610b
SL
3011 tree fn = AGGR_INIT_EXPR_FN (aggr_init_expr);
3012 tree slot = AGGR_INIT_EXPR_SLOT (aggr_init_expr);
2692eb7d 3013 tree type = TREE_TYPE (slot);
9eeb200f
JM
3014
3015 tree call_expr;
3016 enum style_t { ctor, arg, pcc } style;
4977bab6 3017
3eb24f73 3018 if (AGGR_INIT_VIA_CTOR_P (aggr_init_expr))
4977bab6
ZW
3019 style = ctor;
3020#ifdef PCC_STATIC_STRUCT_RETURN
3021 else if (1)
3022 style = pcc;
3023#endif
4977bab6 3024 else
315fb5db
NS
3025 {
3026 gcc_assert (TREE_ADDRESSABLE (type));
3027 style = arg;
3028 }
4977bab6 3029
5039610b
SL
3030 call_expr = build_call_array (TREE_TYPE (TREE_TYPE (TREE_TYPE (fn))),
3031 fn,
3032 aggr_init_expr_nargs (aggr_init_expr),
3033 AGGR_INIT_EXPR_ARGP (aggr_init_expr));
3034
fa47911c 3035 if (style == ctor)
3eb24f73 3036 {
fa47911c
JM
3037 /* Replace the first argument to the ctor with the address of the
3038 slot. */
dffd7eb6 3039 cxx_mark_addressable (slot);
5039610b
SL
3040 CALL_EXPR_ARG (call_expr, 0) =
3041 build1 (ADDR_EXPR, build_pointer_type (type), slot);
3eb24f73 3042 }
5039610b 3043 else if (style == arg)
fa47911c
JM
3044 {
3045 /* Just mark it addressable here, and leave the rest to
3046 expand_call{,_inline}. */
3047 cxx_mark_addressable (slot);
3048 CALL_EXPR_RETURN_SLOT_OPT (call_expr) = true;
3049 call_expr = build2 (MODIFY_EXPR, TREE_TYPE (call_expr), slot, call_expr);
3050 }
4977bab6 3051 else if (style == pcc)
3eb24f73 3052 {
4977bab6
ZW
3053 /* If we're using the non-reentrant PCC calling convention, then we
3054 need to copy the returned value out of the static buffer into the
3055 SLOT. */
78757caa 3056 push_deferring_access_checks (dk_no_check);
46af705a
JDA
3057 call_expr = build_aggr_init (slot, call_expr,
3058 DIRECT_BIND | LOOKUP_ONLYCONVERTING);
78757caa 3059 pop_deferring_access_checks ();
d17791d6 3060 call_expr = build2 (COMPOUND_EXPR, TREE_TYPE (slot), call_expr, slot);
3eb24f73 3061 }
3eb24f73 3062
3eb24f73 3063 *tp = call_expr;
3eb24f73
MM
3064}
3065
31f8e4f3
MM
3066/* Emit all thunks to FN that should be emitted when FN is emitted. */
3067
3068static void
3a978d72 3069emit_associated_thunks (tree fn)
31f8e4f3
MM
3070{
3071 /* When we use vcall offsets, we emit thunks with the virtual
3072 functions to which they thunk. The whole point of vcall offsets
3073 is so that you can know statically the entire set of thunks that
3074 will ever be needed for a given virtual function, thereby
3075 enabling you to output all the thunks with the function itself. */
3461fba7 3076 if (DECL_VIRTUAL_P (fn))
31f8e4f3 3077 {
bb5e8a7f 3078 tree thunk;
c8094d83 3079
bb5e8a7f 3080 for (thunk = DECL_THUNKS (fn); thunk; thunk = TREE_CHAIN (thunk))
4977bab6 3081 {
e00853fd 3082 if (!THUNK_ALIAS (thunk))
4977bab6 3083 {
bb885938
NS
3084 use_thunk (thunk, /*emit_p=*/1);
3085 if (DECL_RESULT_THUNK_P (thunk))
3086 {
3087 tree probe;
c8094d83 3088
bb885938
NS
3089 for (probe = DECL_THUNKS (thunk);
3090 probe; probe = TREE_CHAIN (probe))
3091 use_thunk (probe, /*emit_p=*/1);
3092 }
4977bab6 3093 }
bb885938 3094 else
50bc768d 3095 gcc_assert (!DECL_THUNKS (thunk));
4977bab6 3096 }
31f8e4f3
MM
3097 }
3098}
3099
558475f0
MM
3100/* Generate RTL for FN. */
3101
3102void
3a978d72 3103expand_body (tree fn)
558475f0 3104{
367aa585 3105 tree saved_function;
6de9cd9a 3106
92788413
MM
3107 /* Compute the appropriate object-file linkage for inline
3108 functions. */
79065db2 3109 if (DECL_DECLARED_INLINE_P (fn))
92788413
MM
3110 import_export_decl (fn);
3111
4f8e1232
MM
3112 /* If FN is external, then there's no point in generating RTL for
3113 it. This situation can arise with an inline function under
83662e2b 3114 `-fexternal-templates'; we instantiate the function, even though
4f8e1232
MM
3115 we're not planning on emitting it, in case we get a chance to
3116 inline it. */
3117 if (DECL_EXTERNAL (fn))
3118 return;
3119
4985cde3 3120 /* ??? When is this needed? */
367aa585 3121 saved_function = current_function_decl;
367aa585 3122
de81ffd4
JH
3123 /* Emit any thunks that should be emitted at the same time as FN. */
3124 emit_associated_thunks (fn);
3125
fa3ee801
DJ
3126 /* This function is only called from cgraph, or recursively from
3127 emit_associated_thunks. In neither case should we be currently
3128 generating trees for a function. */
3129 gcc_assert (function_depth == 0);
3130
fc8600f9 3131 c_expand_body (fn);
d658cd4c 3132
367aa585 3133 current_function_decl = saved_function;
ea11ca7e 3134
85b22f78
NS
3135 if (DECL_CLONED_FUNCTION_P (fn))
3136 {
3137 /* If this is a clone, go through the other clones now and mark
0cbd7506
MS
3138 their parameters used. We have to do that here, as we don't
3139 know whether any particular clone will be expanded, and
3140 therefore cannot pick one arbitrarily. */
85b22f78
NS
3141 tree probe;
3142
3143 for (probe = TREE_CHAIN (DECL_CLONED_FUNCTION (fn));
3144 probe && DECL_CLONED_FUNCTION_P (probe);
3145 probe = TREE_CHAIN (probe))
3146 {
3147 tree parms;
3148
3149 for (parms = DECL_ARGUMENTS (probe);
3150 parms; parms = TREE_CHAIN (parms))
3151 TREE_USED (parms) = 1;
3152 }
3153 }
558475f0 3154}
54f7877c 3155
8cd2462c
JH
3156/* Generate RTL for FN. */
3157
3158void
5671bf27 3159expand_or_defer_fn (tree fn)
8cd2462c
JH
3160{
3161 /* When the parser calls us after finishing the body of a template
c353b8e3
MM
3162 function, we don't really want to expand the body. */
3163 if (processing_template_decl)
8cd2462c
JH
3164 {
3165 /* Normally, collection only occurs in rest_of_compilation. So,
3166 if we don't collect here, we never collect junk generated
3167 during the processing of templates until we hit a
27250734
MM
3168 non-template function. It's not safe to do this inside a
3169 nested class, though, as the parser may have local state that
3170 is not a GC root. */
3171 if (!function_depth)
3172 ggc_collect ();
8cd2462c
JH
3173 return;
3174 }
3175
3176 /* Replace AGGR_INIT_EXPRs with appropriate CALL_EXPRs. */
3177 walk_tree_without_duplicates (&DECL_SAVED_TREE (fn),
3178 simplify_aggr_init_exprs_r,
3179 NULL);
3180
3181 /* If this is a constructor or destructor body, we have to clone
3182 it. */
3183 if (maybe_clone_body (fn))
3184 {
3185 /* We don't want to process FN again, so pretend we've written
3186 it out, even though we haven't. */
3187 TREE_ASM_WRITTEN (fn) = 1;
3188 return;
3189 }
3190
57a4c089
MM
3191 /* Keep track of functions declared with the "constructor" and
3192 "destructor" attribute. */
3193 c_record_cdtor_fn (fn);
3194
4684cd27
MM
3195 /* We make a decision about linkage for these functions at the end
3196 of the compilation. Until that point, we do not want the back
3197 end to output them -- but we do want it to see the bodies of
1a10290c 3198 these functions so that it can inline them as appropriate. */
4684cd27
MM
3199 if (DECL_DECLARED_INLINE_P (fn) || DECL_IMPLICIT_INSTANTIATION (fn))
3200 {
1ef0df47
MM
3201 if (DECL_INTERFACE_KNOWN (fn))
3202 /* We've already made a decision as to how this function will
3203 be handled. */;
3204 else if (!at_eof)
4684cd27
MM
3205 {
3206 DECL_EXTERNAL (fn) = 1;
3207 DECL_NOT_REALLY_EXTERN (fn) = 1;
3208 note_vague_linkage_fn (fn);
1ef0df47
MM
3209 /* A non-template inline function with external linkage will
3210 always be COMDAT. As we must eventually determine the
3211 linkage of all functions, and as that causes writes to
3212 the data mapped in from the PCH file, it's advantageous
3213 to mark the functions at this point. */
3214 if (!DECL_IMPLICIT_INSTANTIATION (fn))
3215 {
3216 /* This function must have external linkage, as
3217 otherwise DECL_INTERFACE_KNOWN would have been
3218 set. */
3219 gcc_assert (TREE_PUBLIC (fn));
3220 comdat_linkage (fn);
3221 DECL_INTERFACE_KNOWN (fn) = 1;
3222 }
4684cd27
MM
3223 }
3224 else
3225 import_export_decl (fn);
1a10290c
MM
3226
3227 /* If the user wants us to keep all inline functions, then mark
3228 this function as needed so that finish_file will make sure to
3229 output it later. */
3230 if (flag_keep_inline_functions && DECL_DECLARED_INLINE_P (fn))
3231 mark_needed (fn);
4684cd27
MM
3232 }
3233
8cd2462c
JH
3234 /* There's no reason to do any of the work here if we're only doing
3235 semantic analysis; this code just generates RTL. */
3236 if (flag_syntax_only)
3237 return;
3238
99edd65d
RH
3239 function_depth++;
3240
e4d91027 3241 /* Expand or defer, at the whim of the compilation unit manager. */
6b00c969 3242 cgraph_finalize_function (fn, function_depth > 1);
99edd65d
RH
3243
3244 function_depth--;
8cd2462c
JH
3245}
3246
6de9cd9a
DN
3247struct nrv_data
3248{
3249 tree var;
3250 tree result;
3251 htab_t visited;
3252};
0d97bf4c 3253
6de9cd9a
DN
3254/* Helper function for walk_tree, used by finalize_nrv below. */
3255
3256static tree
3257finalize_nrv_r (tree* tp, int* walk_subtrees, void* data)
0d97bf4c 3258{
6de9cd9a
DN
3259 struct nrv_data *dp = (struct nrv_data *)data;
3260 void **slot;
07b2f2fd
JM
3261
3262 /* No need to walk into types. There wouldn't be any need to walk into
3263 non-statements, except that we have to consider STMT_EXPRs. */
0d97bf4c
JM
3264 if (TYPE_P (*tp))
3265 *walk_subtrees = 0;
6de9cd9a
DN
3266 /* Change all returns to just refer to the RESULT_DECL; this is a nop,
3267 but differs from using NULL_TREE in that it indicates that we care
3268 about the value of the RESULT_DECL. */
5088b058
RH
3269 else if (TREE_CODE (*tp) == RETURN_EXPR)
3270 TREE_OPERAND (*tp, 0) = dp->result;
6de9cd9a
DN
3271 /* Change all cleanups for the NRV to only run when an exception is
3272 thrown. */
07b2f2fd 3273 else if (TREE_CODE (*tp) == CLEANUP_STMT
6de9cd9a 3274 && CLEANUP_DECL (*tp) == dp->var)
659e5a7a 3275 CLEANUP_EH_ONLY (*tp) = 1;
350fae66 3276 /* Replace the DECL_EXPR for the NRV with an initialization of the
6de9cd9a 3277 RESULT_DECL, if needed. */
350fae66
RK
3278 else if (TREE_CODE (*tp) == DECL_EXPR
3279 && DECL_EXPR_DECL (*tp) == dp->var)
6de9cd9a
DN
3280 {
3281 tree init;
3282 if (DECL_INITIAL (dp->var)
3283 && DECL_INITIAL (dp->var) != error_mark_node)
3284 {
f293ce4b
RS
3285 init = build2 (INIT_EXPR, void_type_node, dp->result,
3286 DECL_INITIAL (dp->var));
6de9cd9a
DN
3287 DECL_INITIAL (dp->var) = error_mark_node;
3288 }
3289 else
543a0daa 3290 init = build_empty_stmt ();
6de9cd9a 3291 SET_EXPR_LOCUS (init, EXPR_LOCUS (*tp));
6de9cd9a
DN
3292 *tp = init;
3293 }
3294 /* And replace all uses of the NRV with the RESULT_DECL. */
3295 else if (*tp == dp->var)
3296 *tp = dp->result;
3297
3298 /* Avoid walking into the same tree more than once. Unfortunately, we
3299 can't just use walk_tree_without duplicates because it would only call
3300 us for the first occurrence of dp->var in the function body. */
3301 slot = htab_find_slot (dp->visited, *tp, INSERT);
3302 if (*slot)
3303 *walk_subtrees = 0;
3304 else
3305 *slot = *tp;
0d97bf4c
JM
3306
3307 /* Keep iterating. */
3308 return NULL_TREE;
3309}
3310
6de9cd9a 3311/* Called from finish_function to implement the named return value
5088b058 3312 optimization by overriding all the RETURN_EXPRs and pertinent
6de9cd9a
DN
3313 CLEANUP_STMTs and replacing all occurrences of VAR with RESULT, the
3314 RESULT_DECL for the function. */
f444e36b 3315
4985cde3 3316void
6de9cd9a 3317finalize_nrv (tree *tp, tree var, tree result)
f444e36b 3318{
6de9cd9a
DN
3319 struct nrv_data data;
3320
3321 /* Copy debugging information from VAR to RESULT. */
3322 DECL_NAME (result) = DECL_NAME (var);
b785f485
RH
3323 DECL_ARTIFICIAL (result) = DECL_ARTIFICIAL (var);
3324 DECL_IGNORED_P (result) = DECL_IGNORED_P (var);
6de9cd9a
DN
3325 DECL_SOURCE_LOCATION (result) = DECL_SOURCE_LOCATION (var);
3326 DECL_ABSTRACT_ORIGIN (result) = DECL_ABSTRACT_ORIGIN (var);
3327 /* Don't forget that we take its address. */
3328 TREE_ADDRESSABLE (result) = TREE_ADDRESSABLE (var);
3329
3330 data.var = var;
3331 data.result = result;
3332 data.visited = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL);
3333 walk_tree (tp, finalize_nrv_r, &data, 0);
3334 htab_delete (data.visited);
b850de4f 3335}
1799e5d5
RH
3336\f
3337/* For all elements of CLAUSES, validate them vs OpenMP constraints.
3338 Remove any elements from the list that are invalid. */
3339
3340tree
3341finish_omp_clauses (tree clauses)
3342{
3343 bitmap_head generic_head, firstprivate_head, lastprivate_head;
3344 tree c, t, *pc = &clauses;
3345 const char *name;
3346
3347 bitmap_obstack_initialize (NULL);
3348 bitmap_initialize (&generic_head, &bitmap_default_obstack);
3349 bitmap_initialize (&firstprivate_head, &bitmap_default_obstack);
3350 bitmap_initialize (&lastprivate_head, &bitmap_default_obstack);
3351
3352 for (pc = &clauses, c = clauses; c ; c = *pc)
3353 {
3354 bool remove = false;
3355
3356 switch (OMP_CLAUSE_CODE (c))
3357 {
3358 case OMP_CLAUSE_SHARED:
3359 name = "shared";
3360 goto check_dup_generic;
3361 case OMP_CLAUSE_PRIVATE:
3362 name = "private";
3363 goto check_dup_generic;
3364 case OMP_CLAUSE_REDUCTION:
3365 name = "reduction";
3366 goto check_dup_generic;
3367 case OMP_CLAUSE_COPYPRIVATE:
3368 name = "copyprivate";
3369 goto check_dup_generic;
3370 case OMP_CLAUSE_COPYIN:
3371 name = "copyin";
3372 goto check_dup_generic;
3373 check_dup_generic:
3374 t = OMP_CLAUSE_DECL (c);
3375 if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3376 {
3377 if (processing_template_decl)
3378 break;
3379 error ("%qE is not a variable in clause %qs", t, name);
3380 remove = true;
3381 }
3382 else if (bitmap_bit_p (&generic_head, DECL_UID (t))
3383 || bitmap_bit_p (&firstprivate_head, DECL_UID (t))
3384 || bitmap_bit_p (&lastprivate_head, DECL_UID (t)))
3385 {
3386 error ("%qE appears more than once in data clauses", t);
3387 remove = true;
3388 }
3389 else
3390 bitmap_set_bit (&generic_head, DECL_UID (t));
3391 break;
3392
3393 case OMP_CLAUSE_FIRSTPRIVATE:
3394 t = OMP_CLAUSE_DECL (c);
3395 if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3396 {
3397 if (processing_template_decl)
3398 break;
3399 error ("%qE is not a variable in clause %<firstprivate%>", t);
3400 remove = true;
3401 }
3402 else if (bitmap_bit_p (&generic_head, DECL_UID (t))
3403 || bitmap_bit_p (&firstprivate_head, DECL_UID (t)))
3404 {
3405 error ("%qE appears more than once in data clauses", t);
3406 remove = true;
3407 }
3408 else
3409 bitmap_set_bit (&firstprivate_head, DECL_UID (t));
3410 break;
3411
3412 case OMP_CLAUSE_LASTPRIVATE:
3413 t = OMP_CLAUSE_DECL (c);
3414 if (TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3415 {
3416 if (processing_template_decl)
3417 break;
3418 error ("%qE is not a variable in clause %<lastprivate%>", t);
3419 remove = true;
3420 }
3421 else if (bitmap_bit_p (&generic_head, DECL_UID (t))
3422 || bitmap_bit_p (&lastprivate_head, DECL_UID (t)))
3423 {
3424 error ("%qE appears more than once in data clauses", t);
3425 remove = true;
3426 }
3427 else
3428 bitmap_set_bit (&lastprivate_head, DECL_UID (t));
3429 break;
3430
3431 case OMP_CLAUSE_IF:
3432 t = OMP_CLAUSE_IF_EXPR (c);
3433 t = maybe_convert_cond (t);
3434 if (t == error_mark_node)
3435 remove = true;
3436 OMP_CLAUSE_IF_EXPR (c) = t;
3437 break;
3438
3439 case OMP_CLAUSE_NUM_THREADS:
3440 t = OMP_CLAUSE_NUM_THREADS_EXPR (c);
3441 if (t == error_mark_node)
3442 remove = true;
3443 else if (!INTEGRAL_TYPE_P (TREE_TYPE (t))
3444 && !type_dependent_expression_p (t))
3445 {
3446 error ("num_threads expression must be integral");
3447 remove = true;
3448 }
3449 break;
3450
3451 case OMP_CLAUSE_SCHEDULE:
3452 t = OMP_CLAUSE_SCHEDULE_CHUNK_EXPR (c);
3453 if (t == NULL)
3454 ;
3455 else if (t == error_mark_node)
3456 remove = true;
3457 else if (!INTEGRAL_TYPE_P (TREE_TYPE (t))
3458 && !type_dependent_expression_p (t))
3459 {
3460 error ("schedule chunk size expression must be integral");
3461 remove = true;
3462 }
3463 break;
3464
3465 case OMP_CLAUSE_NOWAIT:
3466 case OMP_CLAUSE_ORDERED:
3467 case OMP_CLAUSE_DEFAULT:
3468 break;
3469
3470 default:
3471 gcc_unreachable ();
3472 }
3473
3474 if (remove)
3475 *pc = OMP_CLAUSE_CHAIN (c);
3476 else
3477 pc = &OMP_CLAUSE_CHAIN (c);
3478 }
3479
3480 for (pc = &clauses, c = clauses; c ; c = *pc)
3481 {
3482 enum tree_code c_kind = OMP_CLAUSE_CODE (c);
3483 bool remove = false;
3484 bool need_complete_non_reference = false;
3485 bool need_default_ctor = false;
3486 bool need_copy_ctor = false;
3487 bool need_copy_assignment = false;
3488 bool need_implicitly_determined = false;
3489 tree type, inner_type;
3490
3491 switch (c_kind)
3492 {
3493 case OMP_CLAUSE_SHARED:
3494 name = "shared";
3495 need_implicitly_determined = true;
3496 break;
3497 case OMP_CLAUSE_PRIVATE:
3498 name = "private";
3499 need_complete_non_reference = true;
3500 need_default_ctor = true;
3501 need_implicitly_determined = true;
3502 break;
3503 case OMP_CLAUSE_FIRSTPRIVATE:
3504 name = "firstprivate";
3505 need_complete_non_reference = true;
3506 need_copy_ctor = true;
3507 need_implicitly_determined = true;
3508 break;
3509 case OMP_CLAUSE_LASTPRIVATE:
3510 name = "lastprivate";
3511 need_complete_non_reference = true;
3512 need_copy_assignment = true;
3513 need_implicitly_determined = true;
3514 break;
3515 case OMP_CLAUSE_REDUCTION:
3516 name = "reduction";
3517 need_implicitly_determined = true;
3518 break;
3519 case OMP_CLAUSE_COPYPRIVATE:
3520 name = "copyprivate";
3521 need_copy_assignment = true;
3522 break;
3523 case OMP_CLAUSE_COPYIN:
3524 name = "copyin";
3525 need_copy_assignment = true;
3526 break;
3527 default:
3528 pc = &OMP_CLAUSE_CHAIN (c);
3529 continue;
3530 }
3531
3532 t = OMP_CLAUSE_DECL (c);
3533 if (processing_template_decl
3534 && TREE_CODE (t) != VAR_DECL && TREE_CODE (t) != PARM_DECL)
3535 {
3536 pc = &OMP_CLAUSE_CHAIN (c);
3537 continue;
3538 }
3539
3540 switch (c_kind)
3541 {
3542 case OMP_CLAUSE_LASTPRIVATE:
3543 if (!bitmap_bit_p (&firstprivate_head, DECL_UID (t)))
3544 need_default_ctor = true;
3545 break;
3546
3547 case OMP_CLAUSE_REDUCTION:
3548 if (AGGREGATE_TYPE_P (TREE_TYPE (t))
3549 || POINTER_TYPE_P (TREE_TYPE (t)))
3550 {
3551 error ("%qE has invalid type for %<reduction%>", t);
3552 remove = true;
3553 }
3554 else if (FLOAT_TYPE_P (TREE_TYPE (t)))
3555 {
3556 enum tree_code r_code = OMP_CLAUSE_REDUCTION_CODE (c);
3557 switch (r_code)
3558 {
3559 case PLUS_EXPR:
3560 case MULT_EXPR:
3561 case MINUS_EXPR:
3562 break;
3563 default:
3564 error ("%qE has invalid type for %<reduction(%s)%>",
3565 t, operator_name_info[r_code].name);
3566 remove = true;
3567 }
3568 }
3569 break;
3570
3571 case OMP_CLAUSE_COPYIN:
3572 if (TREE_CODE (t) != VAR_DECL || !DECL_THREAD_LOCAL_P (t))
3573 {
3574 error ("%qE must be %<threadprivate%> for %<copyin%>", t);
3575 remove = true;
3576 }
3577 break;
3578
3579 default:
3580 break;
3581 }
3582
3583 if (need_complete_non_reference)
3584 {
3585 t = require_complete_type (t);
3586 if (t == error_mark_node)
3587 remove = true;
3588 else if (TREE_CODE (TREE_TYPE (t)) == REFERENCE_TYPE)
3589 {
3590 error ("%qE has reference type for %qs", t, name);
3591 remove = true;
3592 }
3593 }
3594 if (need_implicitly_determined)
3595 {
3596 const char *share_name = NULL;
3597
3598 if (TREE_CODE (t) == VAR_DECL && DECL_THREAD_LOCAL_P (t))
3599 share_name = "threadprivate";
3600 else switch (cxx_omp_predetermined_sharing (t))
3601 {
3602 case OMP_CLAUSE_DEFAULT_UNSPECIFIED:
3603 break;
3604 case OMP_CLAUSE_DEFAULT_SHARED:
3605 share_name = "shared";
3606 break;
3607 case OMP_CLAUSE_DEFAULT_PRIVATE:
3608 share_name = "private";
3609 break;
3610 default:
3611 gcc_unreachable ();
3612 }
3613 if (share_name)
3614 {
3615 error ("%qE is predetermined %qs for %qs",
3616 t, share_name, name);
3617 remove = true;
3618 }
3619 }
3620
3621 /* We're interested in the base element, not arrays. */
3622 inner_type = type = TREE_TYPE (t);
3623 while (TREE_CODE (inner_type) == ARRAY_TYPE)
3624 inner_type = TREE_TYPE (inner_type);
3625
84dc00e8 3626 /* Check for special function availability by building a call to one.
1799e5d5
RH
3627 Save the results, because later we won't be in the right context
3628 for making these queries. */
3629 if (CLASS_TYPE_P (inner_type)
3630 && (need_default_ctor || need_copy_ctor || need_copy_assignment))
3631 {
3632 int save_errorcount = errorcount;
3633 tree info;
3634
3635 /* Always allocate 3 elements for simplicity. These are the
3636 function decls for the ctor, dtor, and assignment op.
3637 This layout is known to the three lang hooks,
3638 cxx_omp_clause_default_init, cxx_omp_clause_copy_init,
3639 and cxx_omp_clause_assign_op. */
3640 info = make_tree_vec (3);
3641 CP_OMP_CLAUSE_INFO (c) = info;
3642
3643 if (need_default_ctor
3644 || (need_copy_ctor
3645 && !TYPE_HAS_TRIVIAL_INIT_REF (inner_type)))
3646 {
3647 if (need_default_ctor)
3648 t = NULL;
3649 else
3650 {
3651 t = build_int_cst (build_pointer_type (inner_type), 0);
3652 t = build1 (INDIRECT_REF, inner_type, t);
3653 t = build_tree_list (NULL, t);
3654 }
3655 t = build_special_member_call (NULL_TREE,
3656 complete_ctor_identifier,
3657 t, inner_type, LOOKUP_NORMAL);
3658 t = get_callee_fndecl (t);
3659 TREE_VEC_ELT (info, 0) = t;
3660 }
3661
3662 if ((need_default_ctor || need_copy_ctor)
3663 && TYPE_HAS_NONTRIVIAL_DESTRUCTOR (inner_type))
3664 {
3665 t = build_int_cst (build_pointer_type (inner_type), 0);
3666 t = build1 (INDIRECT_REF, inner_type, t);
3667 t = build_special_member_call (t, complete_dtor_identifier,
3668 NULL, inner_type, LOOKUP_NORMAL);
3669 t = get_callee_fndecl (t);
3670 TREE_VEC_ELT (info, 1) = t;
3671 }
3672
3673 if (need_copy_assignment
3674 && !TYPE_HAS_TRIVIAL_ASSIGN_REF (inner_type))
3675 {
3676 t = build_int_cst (build_pointer_type (inner_type), 0);
3677 t = build1 (INDIRECT_REF, inner_type, t);
3678 t = build_special_member_call (t, ansi_assopname (NOP_EXPR),
3679 build_tree_list (NULL, t),
3680 inner_type, LOOKUP_NORMAL);
3681
3682 /* We'll have called convert_from_reference on the call, which
3db45ab5 3683 may well have added an indirect_ref. It's unneeded here,
1799e5d5
RH
3684 and in the way, so kill it. */
3685 if (TREE_CODE (t) == INDIRECT_REF)
3686 t = TREE_OPERAND (t, 0);
3687
3688 t = get_callee_fndecl (t);
3689 TREE_VEC_ELT (info, 2) = t;
3690 }
3691
3692 if (errorcount != save_errorcount)
3693 remove = true;
3694 }
3695
3696 if (remove)
3697 *pc = OMP_CLAUSE_CHAIN (c);
3698 else
3699 pc = &OMP_CLAUSE_CHAIN (c);
3700 }
3701
3702 bitmap_obstack_release (NULL);
3703 return clauses;
3704}
3705
3706/* For all variables in the tree_list VARS, mark them as thread local. */
3707
3708void
3709finish_omp_threadprivate (tree vars)
3710{
3711 tree t;
3712
3713 /* Mark every variable in VARS to be assigned thread local storage. */
3714 for (t = vars; t; t = TREE_CHAIN (t))
3715 {
3716 tree v = TREE_PURPOSE (t);
3717
3718 /* If V had already been marked threadprivate, it doesn't matter
3719 whether it had been used prior to this point. */
3720 if (TREE_USED (v)
3721 && (DECL_LANG_SPECIFIC (v) == NULL
3722 || !CP_DECL_THREADPRIVATE_P (v)))
3723 error ("%qE declared %<threadprivate%> after first use", v);
3724 else if (! TREE_STATIC (v) && ! DECL_EXTERNAL (v))
3725 error ("automatic variable %qE cannot be %<threadprivate%>", v);
3726 else if (! COMPLETE_TYPE_P (TREE_TYPE (v)))
3727 error ("%<threadprivate%> %qE has incomplete type", v);
3728 else if (TREE_STATIC (v) && TYPE_P (CP_DECL_CONTEXT (v)))
3729 error ("%<threadprivate%> %qE is not file, namespace "
3730 "or block scope variable", v);
3731 else
3732 {
3733 /* Allocate a LANG_SPECIFIC structure for V, if needed. */
3734 if (DECL_LANG_SPECIFIC (v) == NULL)
3735 {
3736 retrofit_lang_decl (v);
3737
3738 /* Make sure that DECL_DISCRIMINATOR_P continues to be true
3739 after the allocation of the lang_decl structure. */
3740 if (DECL_DISCRIMINATOR_P (v))
3741 DECL_LANG_SPECIFIC (v)->decl_flags.u2sel = 1;
3742 }
3743
3744 if (! DECL_THREAD_LOCAL_P (v))
3745 {
3746 DECL_TLS_MODEL (v) = decl_default_tls_model (v);
3747 /* If rtl has been already set for this var, call
3748 make_decl_rtl once again, so that encode_section_info
3749 has a chance to look at the new decl flags. */
3750 if (DECL_RTL_SET_P (v))
3751 make_decl_rtl (v);
3752 }
3753 CP_DECL_THREADPRIVATE_P (v) = 1;
3754 }
3755 }
3756}
3757
3758/* Build an OpenMP structured block. */
3759
3760tree
3761begin_omp_structured_block (void)
3762{
3763 return do_pushlevel (sk_omp);
3764}
3765
3766tree
3767finish_omp_structured_block (tree block)
3768{
3769 return do_poplevel (block);
3770}
3771
84dc00e8 3772/* Similarly, except force the retention of the BLOCK. */
1799e5d5
RH
3773
3774tree
3775begin_omp_parallel (void)
3776{
3777 keep_next_level (true);
3778 return begin_omp_structured_block ();
3779}
3780
3781tree
3782finish_omp_parallel (tree clauses, tree body)
3783{
3784 tree stmt;
3785
3786 body = finish_omp_structured_block (body);
b850de4f 3787
1799e5d5
RH
3788 stmt = make_node (OMP_PARALLEL);
3789 TREE_TYPE (stmt) = void_type_node;
3790 OMP_PARALLEL_CLAUSES (stmt) = clauses;
3791 OMP_PARALLEL_BODY (stmt) = body;
54f7877c 3792
1799e5d5
RH
3793 return add_stmt (stmt);
3794}
3795
3796/* Build and validate an OMP_FOR statement. CLAUSES, BODY, COND, INCR
3797 are directly for their associated operands in the statement. DECL
3798 and INIT are a combo; if DECL is NULL then INIT ought to be a
3799 MODIFY_EXPR, and the DECL should be extracted. PRE_BODY are
3800 optional statements that need to go before the loop into its
3801 sk_omp scope. */
3802
3803tree
3804finish_omp_for (location_t locus, tree decl, tree init, tree cond,
3805 tree incr, tree body, tree pre_body)
3806{
3807 if (decl == NULL)
3808 {
3809 if (init != NULL)
3810 switch (TREE_CODE (init))
3811 {
3812 case MODIFY_EXPR:
3813 decl = TREE_OPERAND (init, 0);
3814 init = TREE_OPERAND (init, 1);
3815 break;
3816 case MODOP_EXPR:
3817 if (TREE_CODE (TREE_OPERAND (init, 1)) == NOP_EXPR)
3818 {
3819 decl = TREE_OPERAND (init, 0);
3820 init = TREE_OPERAND (init, 2);
3821 }
3822 break;
3823 default:
3824 break;
3825 }
3826
3827 if (decl == NULL)
3828 {
3829 error ("expected iteration declaration or initialization");
3830 return NULL;
3831 }
3832 }
3833
3834 if (type_dependent_expression_p (decl)
3835 || type_dependent_expression_p (init)
3836 || (cond && type_dependent_expression_p (cond))
3837 || (incr && type_dependent_expression_p (incr)))
3838 {
3839 tree stmt;
3840
3841 if (cond == NULL)
3842 {
3843 error ("%Hmissing controlling predicate", &locus);
3844 return NULL;
3845 }
3846
3847 if (incr == NULL)
3848 {
3849 error ("%Hmissing increment expression", &locus);
3850 return NULL;
3851 }
3852
3853 stmt = make_node (OMP_FOR);
3854
3855 /* This is really just a place-holder. We'll be decomposing this
3856 again and going through the build_modify_expr path below when
3857 we instantiate the thing. */
3858 init = build2 (MODIFY_EXPR, void_type_node, decl, init);
3859
3860 TREE_TYPE (stmt) = void_type_node;
3861 OMP_FOR_INIT (stmt) = init;
3862 OMP_FOR_COND (stmt) = cond;
3863 OMP_FOR_INCR (stmt) = incr;
3864 OMP_FOR_BODY (stmt) = body;
3865 OMP_FOR_PRE_BODY (stmt) = pre_body;
3866
3867 SET_EXPR_LOCATION (stmt, locus);
3868 return add_stmt (stmt);
3869 }
3870
3871 if (!DECL_P (decl))
3872 {
3873 error ("expected iteration declaration or initialization");
3874 return NULL;
3875 }
3876
3877 if (pre_body == NULL || IS_EMPTY_STMT (pre_body))
3878 pre_body = NULL;
3879 else if (! processing_template_decl)
3880 {
3881 add_stmt (pre_body);
3882 pre_body = NULL;
3883 }
3884 init = build_modify_expr (decl, NOP_EXPR, init);
3885 return c_finish_omp_for (locus, decl, init, cond, incr, body, pre_body);
3886}
3887
3888void
3889finish_omp_atomic (enum tree_code code, tree lhs, tree rhs)
3890{
e6bd5565
MM
3891 tree stmt;
3892
4fe70b31
PB
3893 if (processing_template_decl
3894 && (type_dependent_expression_p (lhs)
3895 || type_dependent_expression_p (rhs)))
3896 stmt = build2 (OMP_ATOMIC, void_type_node, integer_zero_node,
3897 build2 (code, void_type_node, lhs, rhs));
3898 else
e6bd5565 3899 {
4fe70b31
PB
3900 /* Even in a template, we can detect invalid uses of the atomic
3901 pragma if neither LHS nor RHS is type-dependent. */
3902 if (processing_template_decl)
e6bd5565
MM
3903 {
3904 lhs = build_non_dependent_expr (lhs);
3905 rhs = build_non_dependent_expr (rhs);
3906 }
4fe70b31 3907
e6bd5565 3908 stmt = c_finish_omp_atomic (code, lhs, rhs);
e6bd5565 3909 }
4fe70b31
PB
3910
3911 if (stmt != error_mark_node)
3912 add_stmt (stmt);
1799e5d5
RH
3913}
3914
3915void
3916finish_omp_barrier (void)
3917{
3918 tree fn = built_in_decls[BUILT_IN_GOMP_BARRIER];
3919 tree stmt = finish_call_expr (fn, NULL, false, false);
3920 finish_expr_stmt (stmt);
3921}
3922
3923void
3924finish_omp_flush (void)
3925{
3926 tree fn = built_in_decls[BUILT_IN_SYNCHRONIZE];
3927 tree stmt = finish_call_expr (fn, NULL, false, false);
3928 finish_expr_stmt (stmt);
3929}
3930
3931/* True if OpenMP sharing attribute of DECL is predetermined. */
3932
3933enum omp_clause_default_kind
3934cxx_omp_predetermined_sharing (tree decl)
3935{
3936 enum omp_clause_default_kind kind;
3937
3938 kind = c_omp_predetermined_sharing (decl);
3939 if (kind != OMP_CLAUSE_DEFAULT_UNSPECIFIED)
3940 return kind;
3941
3942 /* Static data members are predetermined as shared. */
3943 if (TREE_STATIC (decl))
3944 {
3945 tree ctx = CP_DECL_CONTEXT (decl);
3946 if (TYPE_P (ctx) && IS_AGGR_TYPE (ctx))
3947 return OMP_CLAUSE_DEFAULT_SHARED;
3948 }
3949
3950 return OMP_CLAUSE_DEFAULT_UNSPECIFIED;
3951}
3952\f
54f7877c 3953void
3a978d72 3954init_cp_semantics (void)
54f7877c 3955{
54f7877c 3956}
55a3debe
DG
3957\f
3958/* Build a STATIC_ASSERT for a static assertion with the condition
3959 CONDITION and the message text MESSAGE. LOCATION is the location
3960 of the static assertion in the source code. When MEMBER_P, this
3961 static assertion is a member of a class. */
3962void
3963finish_static_assert (tree condition, tree message, location_t location,
3964 bool member_p)
3965{
3966 if (type_dependent_expression_p (condition)
3967 || value_dependent_expression_p (condition))
3968 {
3969 /* We're in a template; build a STATIC_ASSERT and put it in
3970 the right place. */
3971 tree assertion;
3972
3973 assertion = make_node (STATIC_ASSERT);
3974 STATIC_ASSERT_CONDITION (assertion) = condition;
3975 STATIC_ASSERT_MESSAGE (assertion) = message;
3976 STATIC_ASSERT_SOURCE_LOCATION (assertion) = location;
3977
3978 if (member_p)
3979 maybe_add_class_template_decl_list (current_class_type,
3980 assertion,
3981 /*friend_p=*/0);
3982 else
3983 add_stmt (assertion);
3984
3985 return;
3986 }
3987
3988 /* Fold the expression and convert it to a boolean value. */
3989 condition = fold_non_dependent_expr (condition);
3990 condition = cp_convert (boolean_type_node, condition);
3991
3992 if (TREE_CODE (condition) == INTEGER_CST && !integer_zerop (condition))
3993 /* Do nothing; the condition is satisfied. */
3994 ;
3995 else
3996 {
3997 location_t saved_loc = input_location;
3998
3999 input_location = location;
4000 if (TREE_CODE (condition) == INTEGER_CST
4001 && integer_zerop (condition))
4002 /* Report the error. */
4003 error ("static assertion failed: %E", message);
4004 else if (condition && condition != error_mark_node)
4005 error ("non-constant condition for static assertion");
4006 input_location = saved_loc;
4007 }
4008}
cf22909c 4009
cb68ec50
PC
4010/* Called from trait_expr_value to evaluate either __has_nothrow_copy or
4011 __has_nothrow_assign, depending on copy_p. */
4012
4013static bool
4014classtype_has_nothrow_copy_or_assign_p (tree type, bool copy_p)
4015{
4016 if ((copy_p && TYPE_HAS_INIT_REF (type))
4017 || (!copy_p && TYPE_HAS_ASSIGN_REF (type)))
4018 {
4019 bool const_p = false;
4020 tree t;
4021
4022 struct copy_data
4023 {
4024 tree name;
4025 int quals;
4026 } data;
4027
4028 data.name = copy_p ? NULL_TREE : ansi_assopname (NOP_EXPR);
4029
4030 data.quals = TYPE_QUAL_CONST;
4031 t = locate_copy (type, &data);
4032 if (t)
4033 {
4034 const_p = true;
4035 if (!TREE_NOTHROW (t))
4036 return false;
4037 }
4038
4039 if (copy_p || !CP_TYPE_CONST_P (type))
4040 {
4041 data.quals = TYPE_UNQUALIFIED;
4042 t = locate_copy (type, &data);
4043 if (t && !TREE_NOTHROW (t))
4044 return false;
4045
4046 data.quals = TYPE_QUAL_VOLATILE;
4047 t = locate_copy (type, &data);
4048 if (t && !TREE_NOTHROW (t))
4049 return false;
4050 }
4051
4052 data.quals = (TYPE_QUAL_CONST | TYPE_QUAL_VOLATILE);
4053 t = locate_copy (type, &data);
4054 if (t)
4055 {
4056 const_p = true;
4057 if (!TREE_NOTHROW (t))
4058 return false;
4059 }
4060
4061 if (!copy_p && CP_TYPE_CONST_P (type) && !const_p)
4062 return false;
4063 }
4064 else
4065 return false;
4066
4067 return true;
4068}
4069
4070/* Actually evaluates the trait. */
4071
4072static bool
4073trait_expr_value (cp_trait_kind kind, tree type1, tree type2)
4074{
4075 enum tree_code type_code1;
4076 tree t;
4077
4078 type_code1 = TREE_CODE (type1);
4079
4080 switch (kind)
4081 {
4082 case CPTK_HAS_NOTHROW_ASSIGN:
4083 return (trait_expr_value (CPTK_HAS_TRIVIAL_ASSIGN, type1, type2)
4084 || (CLASS_TYPE_P (type1)
4085 && classtype_has_nothrow_copy_or_assign_p (type1, false)));
4086
4087 case CPTK_HAS_TRIVIAL_ASSIGN:
4088 return (!CP_TYPE_CONST_P (type1) && type_code1 != REFERENCE_TYPE
4089 && (pod_type_p (type1)
4090 || (CLASS_TYPE_P (type1)
4091 && TYPE_HAS_TRIVIAL_ASSIGN_REF (type1))));
4092
4093 case CPTK_HAS_NOTHROW_CONSTRUCTOR:
4094 type1 = strip_array_types (type1);
4095 return (trait_expr_value (CPTK_HAS_TRIVIAL_CONSTRUCTOR, type1, type2)
4096 || (CLASS_TYPE_P (type1)
4097 && (t = locate_ctor (type1, NULL)) && TREE_NOTHROW (t)));
4098
4099 case CPTK_HAS_TRIVIAL_CONSTRUCTOR:
4100 type1 = strip_array_types (type1);
4101 return (pod_type_p (type1)
4102 || (CLASS_TYPE_P (type1) && TYPE_HAS_TRIVIAL_DFLT (type1)));
4103
4104 case CPTK_HAS_NOTHROW_COPY:
4105 return (trait_expr_value (CPTK_HAS_TRIVIAL_COPY, type1, type2)
4106 || (CLASS_TYPE_P (type1)
4107 && classtype_has_nothrow_copy_or_assign_p (type1, true)));
4108
4109 case CPTK_HAS_TRIVIAL_COPY:
4110 return (pod_type_p (type1) || type_code1 == REFERENCE_TYPE
4111 || (CLASS_TYPE_P (type1) && TYPE_HAS_TRIVIAL_INIT_REF (type1)));
4112
4113 case CPTK_HAS_TRIVIAL_DESTRUCTOR:
4114 type1 = strip_array_types (type1);
4115 return (pod_type_p (type1)
4116 || (CLASS_TYPE_P (type1)
4117 && TYPE_HAS_TRIVIAL_DESTRUCTOR (type1)));
4118
4119 case CPTK_HAS_VIRTUAL_DESTRUCTOR:
4120 return (CLASS_TYPE_P (type1)
4121 && (t = locate_dtor (type1, NULL)) && DECL_VIRTUAL_P (t));
4122
4123 case CPTK_IS_ABSTRACT:
4124 return (CLASS_TYPE_P (type1) && CLASSTYPE_PURE_VIRTUALS (type1));
4125
4126 case CPTK_IS_BASE_OF:
4127 return (NON_UNION_CLASS_TYPE_P (type1) && NON_UNION_CLASS_TYPE_P (type2)
4128 && DERIVED_FROM_P (type1, type2));
4129
4130 case CPTK_IS_CLASS:
4131 return (NON_UNION_CLASS_TYPE_P (type1));
4132
4133 case CPTK_IS_CONVERTIBLE_TO:
4134 /* TODO */
4135 return false;
4136
4137 case CPTK_IS_EMPTY:
4138 return (NON_UNION_CLASS_TYPE_P (type1) && CLASSTYPE_EMPTY_P (type1));
4139
4140 case CPTK_IS_ENUM:
4141 return (type_code1 == ENUMERAL_TYPE);
4142
4143 case CPTK_IS_POD:
4144 return (pod_type_p (type1));
4145
4146 case CPTK_IS_POLYMORPHIC:
4147 return (CLASS_TYPE_P (type1) && TYPE_POLYMORPHIC_P (type1));
4148
4149 case CPTK_IS_UNION:
4150 return (type_code1 == UNION_TYPE);
4151
4152 default:
4153 gcc_unreachable ();
4154 return false;
4155 }
4156}
4157
4158/* Process a trait expression. */
4159
4160tree
4161finish_trait_expr (cp_trait_kind kind, tree type1, tree type2)
4162{
4163 gcc_assert (kind == CPTK_HAS_NOTHROW_ASSIGN
4164 || kind == CPTK_HAS_NOTHROW_CONSTRUCTOR
4165 || kind == CPTK_HAS_NOTHROW_COPY
4166 || kind == CPTK_HAS_TRIVIAL_ASSIGN
4167 || kind == CPTK_HAS_TRIVIAL_CONSTRUCTOR
4168 || kind == CPTK_HAS_TRIVIAL_COPY
4169 || kind == CPTK_HAS_TRIVIAL_DESTRUCTOR
4170 || kind == CPTK_HAS_VIRTUAL_DESTRUCTOR
4171 || kind == CPTK_IS_ABSTRACT
4172 || kind == CPTK_IS_BASE_OF
4173 || kind == CPTK_IS_CLASS
4174 || kind == CPTK_IS_CONVERTIBLE_TO
4175 || kind == CPTK_IS_EMPTY
4176 || kind == CPTK_IS_ENUM
4177 || kind == CPTK_IS_POD
4178 || kind == CPTK_IS_POLYMORPHIC
4179 || kind == CPTK_IS_UNION);
4180
4181 if (kind == CPTK_IS_CONVERTIBLE_TO)
4182 {
4183 sorry ("__is_convertible_to");
4184 return error_mark_node;
4185 }
4186
4187 if (type1 == error_mark_node
4188 || ((kind == CPTK_IS_BASE_OF || kind == CPTK_IS_CONVERTIBLE_TO)
4189 && type2 == error_mark_node))
4190 return error_mark_node;
4191
4192 if (processing_template_decl)
4193 {
4194 tree trait_expr = make_node (TRAIT_EXPR);
4195 TREE_TYPE (trait_expr) = boolean_type_node;
4196 TRAIT_EXPR_TYPE1 (trait_expr) = type1;
4197 TRAIT_EXPR_TYPE2 (trait_expr) = type2;
4198 TRAIT_EXPR_KIND (trait_expr) = kind;
4199 return trait_expr;
4200 }
4201
4202 /* The only required diagnostic. */
4203 if (kind == CPTK_IS_BASE_OF
4204 && NON_UNION_CLASS_TYPE_P (type1) && NON_UNION_CLASS_TYPE_P (type2)
4205 && !same_type_ignoring_top_level_qualifiers_p (type1, type2)
4206 && !COMPLETE_TYPE_P (complete_type (type2)))
4207 {
4208 error ("incomplete type %qT not allowed", type2);
4209 return error_mark_node;
4210 }
4211
4212 return (trait_expr_value (kind, type1, type2)
4213 ? boolean_true_node : boolean_false_node);
4214}
4215
cf22909c 4216#include "gt-cp-semantics.h"