]> git.ipfire.org Git - thirdparty/gcc.git/blame - gcc/cp/semantics.c
Makefile.in (tree-chrec.o): Depend on params.h.
[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
4 and during the instantiation of template functions.
5
a26ddf11 6 Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
5088b058 7 Free Software Foundation, Inc.
ad321293
MM
8 Written by Mark Mitchell (mmitchell@usa.net) based on code found
9 formerly in parse.y and pt.c.
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.
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.
22
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
ad321293
MM
25 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
26 02111-1307, USA. */
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
54 degenerate form of parsing. Since the current g++ parser is
55 lacking in several respects, and will be reimplemented, we are
56 attempting to move most code that is not directly related to
57 parsing into this file; that will make implementing the new parser
58 much easier since it will be able to make use of these routines. */
59
3a978d72
NN
60static tree maybe_convert_cond (tree);
61static tree simplify_aggr_init_exprs_r (tree *, int *, void *);
62static void emit_associated_thunks (tree);
6de9cd9a 63static tree finalize_nrv_r (tree *, int *, void *);
4985cde3 64
558475f0 65
8d241e0b
KL
66/* Deferred Access Checking Overview
67 ---------------------------------
68
69 Most C++ expressions and declarations require access checking
70 to be performed during parsing. However, in several cases,
71 this has to be treated differently.
72
73 For member declarations, access checking has to be deferred
74 until more information about the declaration is known. For
75 example:
76
77 class A {
78 typedef int X;
79 public:
80 X f();
81 };
82
83 A::X A::f();
84 A::X g();
85
86 When we are parsing the function return type `A::X', we don't
87 really know if this is allowed until we parse the function name.
88
89 Furthermore, some contexts require that access checking is
90 never performed at all. These include class heads, and template
91 instantiations.
92
93 Typical use of access checking functions is described here:
94
95 1. When we enter a context that requires certain access checking
96 mode, the function `push_deferring_access_checks' is called with
97 DEFERRING argument specifying the desired mode. Access checking
98 may be performed immediately (dk_no_deferred), deferred
99 (dk_deferred), or not performed (dk_no_check).
100
101 2. When a declaration such as a type, or a variable, is encountered,
102 the function `perform_or_defer_access_check' is called. It
103 maintains a TREE_LIST of all deferred checks.
104
105 3. The global `current_class_type' or `current_function_decl' is then
106 setup by the parser. `enforce_access' relies on these information
107 to check access.
108
109 4. Upon exiting the context mentioned in step 1,
110 `perform_deferred_access_checks' is called to check all declaration
111 stored in the TREE_LIST. `pop_deferring_access_checks' is then
112 called to restore the previous access checking mode.
113
114 In case of parsing error, we simply call `pop_deferring_access_checks'
115 without `perform_deferred_access_checks'. */
116
3e1f1ba5
NS
117typedef struct deferred_access GTY(())
118{
119 /* A TREE_LIST representing name-lookups for which we have deferred
120 checking access controls. We cannot check the accessibility of
121 names used in a decl-specifier-seq until we know what is being
122 declared because code like:
123
124 class A {
125 class B {};
126 B* f();
127 }
128
129 A::B* A::f() { return 0; }
130
131 is valid, even though `A::B' is not generally accessible.
132
133 The TREE_PURPOSE of each node is the scope used to qualify the
134 name being looked up; the TREE_VALUE is the DECL to which the
135 name was resolved. */
136 tree deferred_access_checks;
137
138 /* The current mode of access checks. */
139 enum deferring_kind deferring_access_checks_kind;
140
141} deferred_access;
4c254e68 142DEF_VEC_GC_O (deferred_access);
3e1f1ba5 143
cf22909c 144/* Data for deferred access checking. */
3e1f1ba5
NS
145static GTY(()) VEC (deferred_access) *deferred_access_stack;
146static GTY(()) unsigned deferred_access_no_check;
cf22909c
KL
147
148/* Save the current deferred access states and start deferred
149 access checking iff DEFER_P is true. */
150
572c2b17
AP
151void
152push_deferring_access_checks (deferring_kind deferring)
cf22909c 153{
78757caa
KL
154 /* For context like template instantiation, access checking
155 disabling applies to all nested context. */
3e1f1ba5
NS
156 if (deferred_access_no_check || deferring == dk_no_check)
157 deferred_access_no_check++;
cf22909c 158 else
3e1f1ba5
NS
159 {
160 deferred_access *ptr;
cf22909c 161
3e1f1ba5
NS
162 ptr = VEC_safe_push (deferred_access, deferred_access_stack, NULL);
163 ptr->deferred_access_checks = NULL_TREE;
164 ptr->deferring_access_checks_kind = deferring;
165 }
cf22909c
KL
166}
167
168/* Resume deferring access checks again after we stopped doing
169 this previously. */
170
572c2b17
AP
171void
172resume_deferring_access_checks (void)
cf22909c 173{
3e1f1ba5
NS
174 if (!deferred_access_no_check)
175 VEC_last (deferred_access, deferred_access_stack)
176 ->deferring_access_checks_kind = dk_deferred;
cf22909c
KL
177}
178
179/* Stop deferring access checks. */
180
572c2b17
AP
181void
182stop_deferring_access_checks (void)
cf22909c 183{
3e1f1ba5
NS
184 if (!deferred_access_no_check)
185 VEC_last (deferred_access, deferred_access_stack)
186 ->deferring_access_checks_kind = dk_no_deferred;
cf22909c
KL
187}
188
189/* Discard the current deferred access checks and restore the
190 previous states. */
191
572c2b17
AP
192void
193pop_deferring_access_checks (void)
cf22909c 194{
3e1f1ba5
NS
195 if (deferred_access_no_check)
196 deferred_access_no_check--;
197 else
198 VEC_pop (deferred_access, deferred_access_stack);
cf22909c
KL
199}
200
201/* Returns a TREE_LIST representing the deferred checks.
202 The TREE_PURPOSE of each node is the type through which the
203 access occurred; the TREE_VALUE is the declaration named.
204 */
205
572c2b17
AP
206tree
207get_deferred_access_checks (void)
cf22909c 208{
3e1f1ba5
NS
209 if (deferred_access_no_check)
210 return NULL;
211 else
212 return (VEC_last (deferred_access, deferred_access_stack)
213 ->deferred_access_checks);
cf22909c
KL
214}
215
216/* Take current deferred checks and combine with the
217 previous states if we also defer checks previously.
218 Otherwise perform checks now. */
219
572c2b17
AP
220void
221pop_to_parent_deferring_access_checks (void)
cf22909c 222{
3e1f1ba5
NS
223 if (deferred_access_no_check)
224 deferred_access_no_check--;
225 else
226 {
227 tree checks;
228 deferred_access *ptr;
229
230 checks = (VEC_last (deferred_access, deferred_access_stack)
231 ->deferred_access_checks);
232
233 VEC_pop (deferred_access, deferred_access_stack);
234 ptr = VEC_last (deferred_access, deferred_access_stack);
235 if (ptr->deferring_access_checks_kind == dk_no_deferred)
236 {
237 /* Check access. */
238 for (; checks; checks = TREE_CHAIN (checks))
239 enforce_access (TREE_PURPOSE (checks),
240 TREE_VALUE (checks));
241 }
242 else
243 {
244 /* Merge with parent. */
245 tree next;
246 tree original = ptr->deferred_access_checks;
247
248 for (; checks; checks = next)
249 {
250 tree probe;
251
252 next = TREE_CHAIN (checks);
253
254 for (probe = original; probe; probe = TREE_CHAIN (probe))
255 if (TREE_VALUE (probe) == TREE_VALUE (checks)
256 && TREE_PURPOSE (probe) == TREE_PURPOSE (checks))
257 goto found;
258 /* Insert into parent's checks. */
259 TREE_CHAIN (checks) = ptr->deferred_access_checks;
260 ptr->deferred_access_checks = checks;
261 found:;
262 }
263 }
264 }
cf22909c
KL
265}
266
25903d03
KL
267/* Perform the deferred access checks.
268
269 After performing the checks, we still have to keep the list
270 `deferred_access_stack->deferred_access_checks' since we may want
271 to check access for them again later in a different context.
272 For example:
273
274 class A {
275 typedef int X;
276 static X a;
277 };
278 A::X A::a, x; // No error for `A::a', error for `x'
279
280 We have to perform deferred access of `A::X', first with `A::a',
281 next with `x'. */
cf22909c 282
572c2b17
AP
283void
284perform_deferred_access_checks (void)
cf22909c
KL
285{
286 tree deferred_check;
3e1f1ba5 287
856a4ce6 288 for (deferred_check = get_deferred_access_checks ();
cf22909c
KL
289 deferred_check;
290 deferred_check = TREE_CHAIN (deferred_check))
291 /* Check access. */
292 enforce_access (TREE_PURPOSE (deferred_check),
293 TREE_VALUE (deferred_check));
cf22909c
KL
294}
295
296/* Defer checking the accessibility of DECL, when looked up in
6df5158a 297 BINFO. */
cf22909c 298
572c2b17
AP
299void
300perform_or_defer_access_check (tree binfo, tree decl)
cf22909c
KL
301{
302 tree check;
3e1f1ba5 303 deferred_access *ptr;
cf22909c 304
3e1f1ba5
NS
305 /* Exit if we are in a context that no access checking is performed.
306 */
307 if (deferred_access_no_check)
0f2a66c9 308 return;
6df5158a 309
50bc768d 310 gcc_assert (TREE_CODE (binfo) == TREE_BINFO);
0f2a66c9 311
3e1f1ba5
NS
312 ptr = VEC_last (deferred_access, deferred_access_stack);
313
cf22909c 314 /* If we are not supposed to defer access checks, just check now. */
3e1f1ba5 315 if (ptr->deferring_access_checks_kind == dk_no_deferred)
cf22909c 316 {
6df5158a 317 enforce_access (binfo, decl);
cf22909c
KL
318 return;
319 }
0f2a66c9 320
cf22909c 321 /* See if we are already going to perform this check. */
3e1f1ba5 322 for (check = ptr->deferred_access_checks;
cf22909c
KL
323 check;
324 check = TREE_CHAIN (check))
6df5158a 325 if (TREE_VALUE (check) == decl && TREE_PURPOSE (check) == binfo)
cf22909c
KL
326 return;
327 /* If not, record the check. */
3e1f1ba5
NS
328 ptr->deferred_access_checks
329 = tree_cons (binfo, decl, ptr->deferred_access_checks);
cf22909c
KL
330}
331
838dfd8a 332/* Returns nonzero if the current statement is a full expression,
f2c5f623
BC
333 i.e. temporaries created during that statement should be destroyed
334 at the end of the statement. */
35b1567d 335
f2c5f623 336int
3a978d72 337stmts_are_full_exprs_p (void)
f2c5f623 338{
ae499cce
MM
339 return current_stmt_tree ()->stmts_are_full_exprs_p;
340}
341
342/* Returns the stmt_tree (if any) to which statements are currently
343 being added. If there is no active statement-tree, NULL is
344 returned. */
345
346stmt_tree
3a978d72 347current_stmt_tree (void)
ae499cce
MM
348{
349 return (cfun
e2500fed 350 ? &cfun->language->base.x_stmt_tree
ae499cce 351 : &scope_chain->x_stmt_tree);
f2c5f623 352}
35b1567d 353
543a0daa
RH
354/* If statements are full expressions, wrap STMT in a CLEANUP_POINT_EXPR. */
355
356static tree
357maybe_cleanup_point_expr (tree expr)
358{
359 if (!processing_template_decl && stmts_are_full_exprs_p ())
0ad28dde 360 expr = fold_build_cleanup_point_expr (TREE_TYPE (expr), expr);
543a0daa
RH
361 return expr;
362}
363
0ad28dde 364/* Like maybe_cleanup_point_expr except have the type of the new expression be
22423a1f
KH
365 void so we don't need to create a temporary variable to hold the inner
366 expression. The reason why we do this is because the original type might be
367 an aggregate and we cannot create a temporary variable for that type. */
0ad28dde
AP
368
369static tree
370maybe_cleanup_point_expr_void (tree expr)
371{
372 if (!processing_template_decl && stmts_are_full_exprs_p ())
373 expr = fold_build_cleanup_point_expr (void_type_node, expr);
374 return expr;
375}
376
377
378
543a0daa
RH
379/* Create a declaration statement for the declaration given by the DECL. */
380
381void
350fae66 382add_decl_expr (tree decl)
543a0daa 383{
350fae66 384 tree r = build_stmt (DECL_EXPR, decl);
b187901e
AP
385 if (DECL_INITIAL (decl)
386 || (DECL_SIZE (decl) && TREE_SIDE_EFFECTS (DECL_SIZE (decl))))
0ad28dde 387 r = maybe_cleanup_point_expr_void (r);
543a0daa
RH
388 add_stmt (r);
389}
390
f2c5f623
BC
391/* Nonzero if TYPE is an anonymous union or struct type. We have to use a
392 flag for this because "A union for which objects or pointers are
393 declared is not an anonymous union" [class.union]. */
35b1567d 394
f2c5f623 395int
3a978d72 396anon_aggr_type_p (tree node)
35b1567d 397{
e2500fed 398 return ANON_AGGR_TYPE_P (node);
35b1567d
BC
399}
400
f2c5f623 401/* Finish a scope. */
35b1567d 402
af746697 403static tree
325c3691 404do_poplevel (tree stmt_list)
35b1567d 405{
325c3691 406 tree block = NULL;
35b1567d 407
f2c5f623 408 if (stmts_are_full_exprs_p ())
325c3691 409 block = poplevel (kept_level_p (), 1, 0);
f2c5f623 410
325c3691
RH
411 stmt_list = pop_stmt_list (stmt_list);
412
413 if (!processing_template_decl)
414 {
415 stmt_list = c_build_bind_expr (block, stmt_list);
416 /* ??? See c_end_compound_stmt re statement expressions. */
35b1567d
BC
417 }
418
325c3691 419 return stmt_list;
35b1567d
BC
420}
421
f2c5f623 422/* Begin a new scope. */
35b1567d 423
325c3691 424static tree
92bc1323 425do_pushlevel (scope_kind sk)
35b1567d 426{
325c3691 427 tree ret = push_stmt_list ();
f2c5f623 428 if (stmts_are_full_exprs_p ())
325c3691
RH
429 begin_scope (sk, NULL);
430 return ret;
431}
5a508662
RH
432
433/* Queue a cleanup. CLEANUP is an expression/statement to be executed
434 when the current scope is exited. EH_ONLY is true when this is not
435 meant to apply to normal control flow transfer. */
436
437void
438push_cleanup (tree decl, tree cleanup, bool eh_only)
439{
440 tree stmt = build_stmt (CLEANUP_STMT, NULL, cleanup, decl);
441 CLEANUP_EH_ONLY (stmt) = eh_only;
442 add_stmt (stmt);
443 CLEANUP_BODY (stmt) = push_stmt_list ();
444}
325c3691 445
caf2523d
RH
446/* Begin a conditional that might contain a declaration. When generating
447 normal code, we want the declaration to appear before the statement
448 containing the conditional. When generating template code, we want the
350fae66 449 conditional to be rendered as the raw DECL_EXPR. */
325c3691
RH
450
451static void
caf2523d 452begin_cond (tree *cond_p)
325c3691 453{
caf2523d
RH
454 if (processing_template_decl)
455 *cond_p = push_stmt_list ();
456}
457
458/* Finish such a conditional. */
459
460static void
461finish_cond (tree *cond_p, tree expr)
462{
463 if (processing_template_decl)
35b1567d 464 {
caf2523d 465 tree cond = pop_stmt_list (*cond_p);
350fae66 466 if (TREE_CODE (cond) == DECL_EXPR)
caf2523d 467 expr = cond;
35b1567d 468 }
caf2523d 469 *cond_p = expr;
35b1567d
BC
470}
471
325c3691
RH
472/* If *COND_P specifies a conditional with a declaration, transform the
473 loop such that
caf2523d
RH
474 while (A x = 42) { }
475 for (; A x = 42;) { }
325c3691 476 becomes
caf2523d
RH
477 while (true) { A x = 42; if (!x) break; }
478 for (;;) { A x = 42; if (!x) break; }
479 The statement list for BODY will be empty if the conditional did
480 not declare anything. */
481
325c3691 482static void
caf2523d 483simplify_loop_decl_cond (tree *cond_p, tree body)
325c3691 484{
caf2523d 485 tree cond, if_stmt;
325c3691 486
caf2523d
RH
487 if (!TREE_SIDE_EFFECTS (body))
488 return;
325c3691 489
caf2523d
RH
490 cond = *cond_p;
491 *cond_p = boolean_true_node;
492
493 if_stmt = begin_if_stmt ();
494 cond = build_unary_op (TRUTH_NOT_EXPR, cond, 0);
495 finish_if_stmt_cond (cond, if_stmt);
496 finish_break_stmt ();
497 finish_then_clause (if_stmt);
498 finish_if_stmt (if_stmt);
499}
325c3691 500
35b1567d
BC
501/* Finish a goto-statement. */
502
3e4d04a1 503tree
3a978d72 504finish_goto_stmt (tree destination)
35b1567d
BC
505{
506 if (TREE_CODE (destination) == IDENTIFIER_NODE)
507 destination = lookup_label (destination);
508
509 /* We warn about unused labels with -Wunused. That means we have to
510 mark the used labels as used. */
511 if (TREE_CODE (destination) == LABEL_DECL)
512 TREE_USED (destination) = 1;
fc2b8477
MM
513 else
514 {
515 /* The DESTINATION is being used as an rvalue. */
516 if (!processing_template_decl)
517 destination = decay_conversion (destination);
518 /* We don't inline calls to functions with computed gotos.
519 Those functions are typically up to some funny business,
520 and may be depending on the labels being at particular
521 addresses, or some such. */
522 DECL_UNINLINABLE (current_function_decl) = 1;
523 }
35b1567d
BC
524
525 check_goto (destination);
526
9e14e18f 527 return add_stmt (build_stmt (GOTO_EXPR, destination));
35b1567d
BC
528}
529
ed5511d9
MM
530/* COND is the condition-expression for an if, while, etc.,
531 statement. Convert it to a boolean value, if appropriate. */
532
8ce33230 533static tree
3a978d72 534maybe_convert_cond (tree cond)
ed5511d9
MM
535{
536 /* Empty conditions remain empty. */
537 if (!cond)
538 return NULL_TREE;
539
540 /* Wait until we instantiate templates before doing conversion. */
541 if (processing_template_decl)
542 return cond;
543
544 /* Do the conversion. */
545 cond = convert_from_reference (cond);
546 return condition_conversion (cond);
547}
548
9bfadf57 549/* Finish an expression-statement, whose EXPRESSION is as indicated. */
a7e4cfa0 550
3e4d04a1 551tree
3a978d72 552finish_expr_stmt (tree expr)
ad321293 553{
3e4d04a1
RH
554 tree r = NULL_TREE;
555
ce4a0391 556 if (expr != NULL_TREE)
ad321293 557 {
a5bcc582 558 if (!processing_template_decl)
3a5b9284
RH
559 {
560 if (warn_sequence_point)
561 verify_sequence_points (expr);
562 expr = convert_to_void (expr, "statement");
563 }
47d4c811
NS
564 else if (!type_dependent_expression_p (expr))
565 convert_to_void (build_non_dependent_expr (expr), "statement");
325c3691
RH
566
567 /* Simplification of inner statement expressions, compound exprs,
ca5b80f3 568 etc can result in us already having an EXPR_STMT. */
543a0daa
RH
569 if (TREE_CODE (expr) != CLEANUP_POINT_EXPR)
570 {
571 if (TREE_CODE (expr) != EXPR_STMT)
572 expr = build_stmt (EXPR_STMT, expr);
0ad28dde 573 expr = maybe_cleanup_point_expr_void (expr);
543a0daa
RH
574 }
575
325c3691 576 r = add_stmt (expr);
35b1567d 577 }
364460b6 578
35b1567d 579 finish_stmt ();
558475f0 580
3e4d04a1 581 return r;
35b1567d
BC
582}
583
35b1567d 584
ad321293
MM
585/* Begin an if-statement. Returns a newly created IF_STMT if
586 appropriate. */
587
588tree
3a978d72 589begin_if_stmt (void)
ad321293 590{
325c3691
RH
591 tree r, scope;
592 scope = do_pushlevel (sk_block);
0dfdeca6 593 r = build_stmt (IF_STMT, NULL_TREE, NULL_TREE, NULL_TREE);
325c3691 594 TREE_CHAIN (r) = scope;
caf2523d 595 begin_cond (&IF_COND (r));
ad321293
MM
596 return r;
597}
598
599/* Process the COND of an if-statement, which may be given by
600 IF_STMT. */
601
602void
3a978d72 603finish_if_stmt_cond (tree cond, tree if_stmt)
ad321293 604{
caf2523d
RH
605 finish_cond (&IF_COND (if_stmt), maybe_convert_cond (cond));
606 add_stmt (if_stmt);
325c3691 607 THEN_CLAUSE (if_stmt) = push_stmt_list ();
ad321293
MM
608}
609
610/* Finish the then-clause of an if-statement, which may be given by
611 IF_STMT. */
612
613tree
3a978d72 614finish_then_clause (tree if_stmt)
ad321293 615{
325c3691 616 THEN_CLAUSE (if_stmt) = pop_stmt_list (THEN_CLAUSE (if_stmt));
35b1567d 617 return if_stmt;
ad321293
MM
618}
619
620/* Begin the else-clause of an if-statement. */
621
325c3691
RH
622void
623begin_else_clause (tree if_stmt)
ad321293 624{
325c3691 625 ELSE_CLAUSE (if_stmt) = push_stmt_list ();
ad321293
MM
626}
627
628/* Finish the else-clause of an if-statement, which may be given by
629 IF_STMT. */
630
631void
3a978d72 632finish_else_clause (tree if_stmt)
ad321293 633{
325c3691 634 ELSE_CLAUSE (if_stmt) = pop_stmt_list (ELSE_CLAUSE (if_stmt));
ad321293
MM
635}
636
dfbb4f34 637/* Finish an if-statement. */
ad321293
MM
638
639void
325c3691 640finish_if_stmt (tree if_stmt)
ad321293 641{
325c3691
RH
642 tree scope = TREE_CHAIN (if_stmt);
643 TREE_CHAIN (if_stmt) = NULL;
644 add_stmt (do_poplevel (scope));
ad321293 645 finish_stmt ();
35b1567d
BC
646}
647
ad321293
MM
648/* Begin a while-statement. Returns a newly created WHILE_STMT if
649 appropriate. */
650
651tree
3a978d72 652begin_while_stmt (void)
ad321293
MM
653{
654 tree r;
0dfdeca6 655 r = build_stmt (WHILE_STMT, NULL_TREE, NULL_TREE);
ae499cce 656 add_stmt (r);
325c3691 657 WHILE_BODY (r) = do_pushlevel (sk_block);
caf2523d 658 begin_cond (&WHILE_COND (r));
ad321293
MM
659 return r;
660}
661
27d26ee7 662/* Process the COND of a while-statement, which may be given by
ad321293
MM
663 WHILE_STMT. */
664
665void
3a978d72 666finish_while_stmt_cond (tree cond, tree while_stmt)
ad321293 667{
caf2523d
RH
668 finish_cond (&WHILE_COND (while_stmt), maybe_convert_cond (cond));
669 simplify_loop_decl_cond (&WHILE_COND (while_stmt), WHILE_BODY (while_stmt));
ad321293
MM
670}
671
672/* Finish a while-statement, which may be given by WHILE_STMT. */
673
674void
3a978d72 675finish_while_stmt (tree while_stmt)
ad321293 676{
325c3691 677 WHILE_BODY (while_stmt) = do_poplevel (WHILE_BODY (while_stmt));
ad321293
MM
678 finish_stmt ();
679}
680
681/* Begin a do-statement. Returns a newly created DO_STMT if
682 appropriate. */
683
684tree
3a978d72 685begin_do_stmt (void)
ad321293 686{
0dfdeca6 687 tree r = build_stmt (DO_STMT, NULL_TREE, NULL_TREE);
ae499cce 688 add_stmt (r);
325c3691 689 DO_BODY (r) = push_stmt_list ();
35b1567d 690 return r;
ad321293
MM
691}
692
693/* Finish the body of a do-statement, which may be given by DO_STMT. */
694
695void
3a978d72 696finish_do_body (tree do_stmt)
ad321293 697{
325c3691 698 DO_BODY (do_stmt) = pop_stmt_list (DO_BODY (do_stmt));
ad321293
MM
699}
700
701/* Finish a do-statement, which may be given by DO_STMT, and whose
702 COND is as indicated. */
703
704void
3a978d72 705finish_do_stmt (tree cond, tree do_stmt)
ad321293 706{
ed5511d9 707 cond = maybe_convert_cond (cond);
35b1567d
BC
708 DO_COND (do_stmt) = cond;
709 finish_stmt ();
710}
ed5511d9 711
ad321293
MM
712/* Finish a return-statement. The EXPRESSION returned, if any, is as
713 indicated. */
714
3e4d04a1 715tree
3a978d72 716finish_return_stmt (tree expr)
ad321293 717{
3e4d04a1
RH
718 tree r;
719
efc7052d 720 expr = check_return_expr (expr);
35b1567d 721 if (!processing_template_decl)
efee38a9 722 {
44d10c10
PB
723 if (DECL_DESTRUCTOR_P (current_function_decl)
724 || (DECL_CONSTRUCTOR_P (current_function_decl)
725 && targetm.cxx.cdtor_returns_this ()))
efee38a9
MM
726 {
727 /* Similarly, all destructors must run destructors for
728 base-classes before returning. So, all returns in a
dfbb4f34 729 destructor get sent to the DTOR_LABEL; finish_function emits
efee38a9 730 code to return a value there. */
44d10c10 731 return finish_goto_stmt (cdtor_label);
efee38a9
MM
732 }
733 }
543a0daa 734
5088b058 735 r = build_stmt (RETURN_EXPR, expr);
0ad28dde 736 r = maybe_cleanup_point_expr_void (r);
543a0daa 737 r = add_stmt (r);
35b1567d 738 finish_stmt ();
3e4d04a1
RH
739
740 return r;
35b1567d 741}
efee38a9 742
ad321293
MM
743/* Begin a for-statement. Returns a new FOR_STMT if appropriate. */
744
745tree
3a978d72 746begin_for_stmt (void)
ad321293
MM
747{
748 tree r;
749
0dfdeca6
BC
750 r = build_stmt (FOR_STMT, NULL_TREE, NULL_TREE,
751 NULL_TREE, NULL_TREE);
325c3691
RH
752
753 if (flag_new_for_scope > 0)
754 TREE_CHAIN (r) = do_pushlevel (sk_for);
ad321293 755
894ca2c9
RH
756 if (processing_template_decl)
757 FOR_INIT_STMT (r) = push_stmt_list ();
758
ad321293
MM
759 return r;
760}
761
762/* Finish the for-init-statement of a for-statement, which may be
763 given by FOR_STMT. */
764
765void
3a978d72 766finish_for_init_stmt (tree for_stmt)
ad321293 767{
894ca2c9
RH
768 if (processing_template_decl)
769 FOR_INIT_STMT (for_stmt) = pop_stmt_list (FOR_INIT_STMT (for_stmt));
325c3691
RH
770 add_stmt (for_stmt);
771 FOR_BODY (for_stmt) = do_pushlevel (sk_block);
caf2523d 772 begin_cond (&FOR_COND (for_stmt));
ad321293
MM
773}
774
775/* Finish the COND of a for-statement, which may be given by
776 FOR_STMT. */
777
778void
3a978d72 779finish_for_cond (tree cond, tree for_stmt)
ad321293 780{
caf2523d
RH
781 finish_cond (&FOR_COND (for_stmt), maybe_convert_cond (cond));
782 simplify_loop_decl_cond (&FOR_COND (for_stmt), FOR_BODY (for_stmt));
ad321293
MM
783}
784
785/* Finish the increment-EXPRESSION in a for-statement, which may be
786 given by FOR_STMT. */
787
788void
3a978d72 789finish_for_expr (tree expr, tree for_stmt)
ad321293 790{
543a0daa
RH
791 if (!expr)
792 return;
6f69173e
MM
793 /* If EXPR is an overloaded function, issue an error; there is no
794 context available to use to perform overload resolution. */
543a0daa 795 if (type_unknown_p (expr))
6f69173e
MM
796 {
797 cxx_incomplete_type_error (expr, TREE_TYPE (expr));
798 expr = error_mark_node;
799 }
bcd46a7c
AP
800 if (!processing_template_decl)
801 {
802 if (warn_sequence_point)
803 verify_sequence_points (expr);
804 expr = convert_to_void (expr, "3rd expression in for");
805 }
806 else if (!type_dependent_expression_p (expr))
807 convert_to_void (build_non_dependent_expr (expr), "3rd expression in for");
0ad28dde 808 expr = maybe_cleanup_point_expr_void (expr);
35b1567d 809 FOR_EXPR (for_stmt) = expr;
ad321293
MM
810}
811
812/* Finish the body of a for-statement, which may be given by
813 FOR_STMT. The increment-EXPR for the loop must be
814 provided. */
815
816void
3a978d72 817finish_for_stmt (tree for_stmt)
ad321293 818{
325c3691
RH
819 FOR_BODY (for_stmt) = do_poplevel (FOR_BODY (for_stmt));
820
ad321293 821 /* Pop the scope for the body of the loop. */
325c3691
RH
822 if (flag_new_for_scope > 0)
823 {
824 tree scope = TREE_CHAIN (for_stmt);
825 TREE_CHAIN (for_stmt) = NULL;
826 add_stmt (do_poplevel (scope));
827 }
828
ad321293
MM
829 finish_stmt ();
830}
831
832/* Finish a break-statement. */
833
3e4d04a1 834tree
3a978d72 835finish_break_stmt (void)
ad321293 836{
fbc315db 837 return add_stmt (build_stmt (BREAK_STMT));
35b1567d
BC
838}
839
ad321293
MM
840/* Finish a continue-statement. */
841
3e4d04a1 842tree
3a978d72 843finish_continue_stmt (void)
ad321293 844{
fbc315db 845 return add_stmt (build_stmt (CONTINUE_STMT));
ad321293
MM
846}
847
35b1567d
BC
848/* Begin a switch-statement. Returns a new SWITCH_STMT if
849 appropriate. */
850
851tree
3a978d72 852begin_switch_stmt (void)
35b1567d 853{
325c3691
RH
854 tree r, scope;
855
6f9fdf4d 856 r = build_stmt (SWITCH_STMT, NULL_TREE, NULL_TREE, NULL_TREE);
325c3691
RH
857
858 scope = do_pushlevel (sk_block);
859 TREE_CHAIN (r) = scope;
ebaae582 860 begin_cond (&SWITCH_STMT_COND (r));
325c3691 861
527f0080 862 return r;
ad321293
MM
863}
864
527f0080 865/* Finish the cond of a switch-statement. */
ad321293 866
527f0080 867void
3a978d72 868finish_switch_cond (tree cond, tree switch_stmt)
ad321293 869{
6f9fdf4d 870 tree orig_type = NULL;
35b1567d 871 if (!processing_template_decl)
373eb3b3 872 {
56cb9733
MM
873 tree index;
874
35b1567d 875 /* Convert the condition to an integer or enumeration type. */
b746c5dc 876 cond = build_expr_type_conversion (WANT_INT | WANT_ENUM, cond, true);
35b1567d 877 if (cond == NULL_TREE)
373eb3b3 878 {
35b1567d
BC
879 error ("switch quantity not an integer");
880 cond = error_mark_node;
881 }
6f9fdf4d 882 orig_type = TREE_TYPE (cond);
35b1567d
BC
883 if (cond != error_mark_node)
884 {
0a72704b
MM
885 /* [stmt.switch]
886
887 Integral promotions are performed. */
888 cond = perform_integral_promotions (cond);
543a0daa 889 cond = maybe_cleanup_point_expr (cond);
373eb3b3 890 }
56cb9733 891
25c8b645
JJ
892 if (cond != error_mark_node)
893 {
894 index = get_unwidened (cond, NULL_TREE);
895 /* We can't strip a conversion from a signed type to an unsigned,
896 because if we did, int_fits_type_p would do the wrong thing
897 when checking case values for being in range,
898 and it's too hard to do the right thing. */
8df83eae
RK
899 if (TYPE_UNSIGNED (TREE_TYPE (cond))
900 == TYPE_UNSIGNED (TREE_TYPE (index)))
25c8b645
JJ
901 cond = index;
902 }
ad321293 903 }
ebaae582
SB
904 finish_cond (&SWITCH_STMT_COND (switch_stmt), cond);
905 SWITCH_STMT_TYPE (switch_stmt) = orig_type;
caf2523d 906 add_stmt (switch_stmt);
56cb9733 907 push_switch (switch_stmt);
ebaae582 908 SWITCH_STMT_BODY (switch_stmt) = push_stmt_list ();
ad321293
MM
909}
910
911/* Finish the body of a switch-statement, which may be given by
912 SWITCH_STMT. The COND to switch on is indicated. */
913
914void
3a978d72 915finish_switch_stmt (tree switch_stmt)
ad321293 916{
325c3691
RH
917 tree scope;
918
ebaae582
SB
919 SWITCH_STMT_BODY (switch_stmt) =
920 pop_stmt_list (SWITCH_STMT_BODY (switch_stmt));
ad321293 921 pop_switch ();
ad321293 922 finish_stmt ();
325c3691
RH
923
924 scope = TREE_CHAIN (switch_stmt);
925 TREE_CHAIN (switch_stmt) = NULL;
926 add_stmt (do_poplevel (scope));
ad321293
MM
927}
928
ad321293
MM
929/* Begin a try-block. Returns a newly-created TRY_BLOCK if
930 appropriate. */
931
932tree
3a978d72 933begin_try_block (void)
ad321293 934{
0dfdeca6 935 tree r = build_stmt (TRY_BLOCK, NULL_TREE, NULL_TREE);
ae499cce 936 add_stmt (r);
325c3691 937 TRY_STMTS (r) = push_stmt_list ();
35b1567d 938 return r;
ad321293
MM
939}
940
0dde4175
JM
941/* Likewise, for a function-try-block. */
942
943tree
3a978d72 944begin_function_try_block (void)
0dde4175 945{
325c3691 946 tree r = begin_try_block ();
35b1567d 947 FN_TRY_BLOCK_P (r) = 1;
35b1567d 948 return r;
0dde4175
JM
949}
950
ad321293
MM
951/* Finish a try-block, which may be given by TRY_BLOCK. */
952
953void
3a978d72 954finish_try_block (tree try_block)
ad321293 955{
325c3691
RH
956 TRY_STMTS (try_block) = pop_stmt_list (TRY_STMTS (try_block));
957 TRY_HANDLERS (try_block) = push_stmt_list ();
ad321293
MM
958}
959
efa8eda3
MM
960/* Finish the body of a cleanup try-block, which may be given by
961 TRY_BLOCK. */
962
62409b39 963void
3a978d72 964finish_cleanup_try_block (tree try_block)
62409b39 965{
325c3691 966 TRY_STMTS (try_block) = pop_stmt_list (TRY_STMTS (try_block));
62409b39
MM
967}
968
f1dedc31
MM
969/* Finish an implicitly generated try-block, with a cleanup is given
970 by CLEANUP. */
971
972void
3a978d72 973finish_cleanup (tree cleanup, tree try_block)
f1dedc31 974{
35b1567d
BC
975 TRY_HANDLERS (try_block) = cleanup;
976 CLEANUP_P (try_block) = 1;
f1dedc31
MM
977}
978
0dde4175
JM
979/* Likewise, for a function-try-block. */
980
981void
3a978d72 982finish_function_try_block (tree try_block)
0dde4175 983{
325c3691
RH
984 finish_try_block (try_block);
985 /* FIXME : something queer about CTOR_INITIALIZER somehow following
986 the try block, but moving it inside. */
b35d4555 987 in_function_try_handler = 1;
0dde4175
JM
988}
989
ad321293
MM
990/* Finish a handler-sequence for a try-block, which may be given by
991 TRY_BLOCK. */
992
993void
3a978d72 994finish_handler_sequence (tree try_block)
ad321293 995{
325c3691 996 TRY_HANDLERS (try_block) = pop_stmt_list (TRY_HANDLERS (try_block));
35b1567d 997 check_handlers (TRY_HANDLERS (try_block));
ad321293
MM
998}
999
0dde4175
JM
1000/* Likewise, for a function-try-block. */
1001
1002void
3a978d72 1003finish_function_handler_sequence (tree try_block)
0dde4175 1004{
b35d4555 1005 in_function_try_handler = 0;
325c3691 1006 finish_handler_sequence (try_block);
35b1567d
BC
1007}
1008
ad321293
MM
1009/* Begin a handler. Returns a HANDLER if appropriate. */
1010
1011tree
3a978d72 1012begin_handler (void)
ad321293
MM
1013{
1014 tree r;
325c3691 1015
0dfdeca6 1016 r = build_stmt (HANDLER, NULL_TREE, NULL_TREE);
ae499cce 1017 add_stmt (r);
325c3691 1018
1a6025b4
JM
1019 /* Create a binding level for the eh_info and the exception object
1020 cleanup. */
325c3691
RH
1021 HANDLER_BODY (r) = do_pushlevel (sk_catch);
1022
ad321293
MM
1023 return r;
1024}
1025
1026/* Finish the handler-parameters for a handler, which may be given by
b35d4555
MM
1027 HANDLER. DECL is the declaration for the catch parameter, or NULL
1028 if this is a `catch (...)' clause. */
ad321293 1029
1a6025b4 1030void
3a978d72 1031finish_handler_parms (tree decl, tree handler)
b35d4555 1032{
1a6025b4 1033 tree type = NULL_TREE;
b35d4555
MM
1034 if (processing_template_decl)
1035 {
1036 if (decl)
1037 {
1038 decl = pushdecl (decl);
1039 decl = push_template_decl (decl);
325c3691 1040 HANDLER_PARMS (handler) = decl;
1a6025b4 1041 type = TREE_TYPE (decl);
b35d4555
MM
1042 }
1043 }
35b1567d 1044 else
1a6025b4 1045 type = expand_start_catch_block (decl);
35b1567d 1046
1a6025b4 1047 HANDLER_TYPE (handler) = type;
b80cfdcd 1048 if (!processing_template_decl && type)
6cad4e17 1049 mark_used (eh_type_info (type));
35b1567d
BC
1050}
1051
1052/* Finish a handler, which may be given by HANDLER. The BLOCKs are
1053 the return value from the matching call to finish_handler_parms. */
1054
1055void
3a978d72 1056finish_handler (tree handler)
35b1567d
BC
1057{
1058 if (!processing_template_decl)
1a6025b4 1059 expand_end_catch_block ();
325c3691 1060 HANDLER_BODY (handler) = do_poplevel (HANDLER_BODY (handler));
35b1567d
BC
1061}
1062
5882f0f3 1063/* Begin a compound statement. FLAGS contains some bits that control the
5995ebfb 1064 behavior and context. If BCS_NO_SCOPE is set, the compound statement
5882f0f3
RH
1065 does not define a scope. If BCS_FN_BODY is set, this is the outermost
1066 block of a function. If BCS_TRY_BLOCK is set, this is the block
1067 created on behalf of a TRY statement. Returns a token to be passed to
1068 finish_compound_stmt. */
ad321293
MM
1069
1070tree
325c3691 1071begin_compound_stmt (unsigned int flags)
ad321293 1072{
325c3691 1073 tree r;
558475f0 1074
325c3691
RH
1075 if (flags & BCS_NO_SCOPE)
1076 {
1077 r = push_stmt_list ();
1078 STATEMENT_LIST_NO_SCOPE (r) = 1;
1079
1080 /* Normally, we try hard to keep the BLOCK for a statement-expression.
1081 But, if it's a statement-expression with a scopeless block, there's
1082 nothing to keep, and we don't want to accidentally keep a block
1083 *inside* the scopeless block. */
1084 keep_next_level (false);
1085 }
f1dedc31 1086 else
325c3691
RH
1087 r = do_pushlevel (flags & BCS_TRY_BLOCK ? sk_try : sk_block);
1088
5882f0f3
RH
1089 /* When processing a template, we need to remember where the braces were,
1090 so that we can set up identical scopes when instantiating the template
1091 later. BIND_EXPR is a handy candidate for this.
1092 Note that do_poplevel won't create a BIND_EXPR itself here (and thus
1093 result in nested BIND_EXPRs), since we don't build BLOCK nodes when
1094 processing templates. */
1095 if (processing_template_decl)
325c3691 1096 {
f293ce4b 1097 r = build3 (BIND_EXPR, NULL, NULL, r, NULL);
5882f0f3
RH
1098 BIND_EXPR_TRY_BLOCK (r) = (flags & BCS_TRY_BLOCK) != 0;
1099 BIND_EXPR_BODY_BLOCK (r) = (flags & BCS_FN_BODY) != 0;
325c3691
RH
1100 TREE_SIDE_EFFECTS (r) = 1;
1101 }
ad321293
MM
1102
1103 return r;
1104}
1105
5882f0f3 1106/* Finish a compound-statement, which is given by STMT. */
ad321293 1107
325c3691
RH
1108void
1109finish_compound_stmt (tree stmt)
ad321293 1110{
5882f0f3
RH
1111 if (TREE_CODE (stmt) == BIND_EXPR)
1112 BIND_EXPR_BODY (stmt) = do_poplevel (BIND_EXPR_BODY (stmt));
325c3691
RH
1113 else if (STATEMENT_LIST_NO_SCOPE (stmt))
1114 stmt = pop_stmt_list (stmt);
7a3397c7 1115 else
5f070bc7
ZL
1116 {
1117 /* Destroy any ObjC "super" receivers that may have been
1118 created. */
1119 objc_clear_super_receiver ();
1120
1121 stmt = do_poplevel (stmt);
1122 }
ad321293 1123
325c3691
RH
1124 /* ??? See c_end_compound_stmt wrt statement expressions. */
1125 add_stmt (stmt);
ad321293 1126 finish_stmt ();
ad321293
MM
1127}
1128
6de9cd9a
DN
1129/* Finish an asm-statement, whose components are a STRING, some
1130 OUTPUT_OPERANDS, some INPUT_OPERANDS, and some CLOBBERS. Also note
1131 whether the asm-statement should be considered volatile. */
7dc5bd62 1132
3e4d04a1 1133tree
6de9cd9a
DN
1134finish_asm_stmt (int volatile_p, tree string, tree output_operands,
1135 tree input_operands, tree clobbers)
35b1567d
BC
1136{
1137 tree r;
abfc8a36
MM
1138 tree t;
1139
abfc8a36 1140 if (!processing_template_decl)
40b18c0a 1141 {
74f0c611
RH
1142 int ninputs, noutputs;
1143 const char *constraint;
1144 const char **oconstraints;
1145 bool allows_mem, allows_reg, is_inout;
1146 tree operand;
40b18c0a 1147 int i;
40b18c0a 1148
74f0c611
RH
1149 ninputs = list_length (input_operands);
1150 noutputs = list_length (output_operands);
1151 oconstraints = (const char **) alloca (noutputs * sizeof (char *));
1152
1153 string = resolve_asm_operand_names (string, output_operands,
1154 input_operands);
1155
1156 for (i = 0, t = output_operands; t; t = TREE_CHAIN (t), ++i)
40b18c0a 1157 {
74f0c611
RH
1158 operand = TREE_VALUE (t);
1159
1160 /* ??? Really, this should not be here. Users should be using a
1161 proper lvalue, dammit. But there's a long history of using
1162 casts in the output operands. In cases like longlong.h, this
1163 becomes a primitive form of typechecking -- if the cast can be
1164 removed, then the output operand had a type of the proper width;
1165 otherwise we'll get an error. Gross, but ... */
1166 STRIP_NOPS (operand);
1167
1168 if (!lvalue_or_else (operand, lv_asm))
1169 operand = error_mark_node;
1170
1171 constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (t)));
1172 oconstraints[i] = constraint;
1173
1174 if (parse_output_constraint (&constraint, i, ninputs, noutputs,
1175 &allows_mem, &allows_reg, &is_inout))
1176 {
1177 /* If the operand is going to end up in memory,
1178 mark it addressable. */
1179 if (!allows_reg && !cxx_mark_addressable (operand))
1180 operand = error_mark_node;
1181 }
1182 else
1183 operand = error_mark_node;
1184
1185 TREE_VALUE (t) = operand;
1186 }
1187
1188 for (i = 0, t = input_operands; t; ++i, t = TREE_CHAIN (t))
1189 {
1190 constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (t)));
1191 operand = decay_conversion (TREE_VALUE (t));
1192
40b18c0a
MM
1193 /* If the type of the operand hasn't been determined (e.g.,
1194 because it involves an overloaded function), then issue
1195 an error message. There's no context available to
1196 resolve the overloading. */
74f0c611 1197 if (TREE_TYPE (operand) == unknown_type_node)
40b18c0a 1198 {
a82e1a7d
GDR
1199 error ("type of asm operand %qE could not be determined",
1200 TREE_VALUE (t));
74f0c611 1201 operand = error_mark_node;
40b18c0a 1202 }
40b18c0a 1203
74f0c611
RH
1204 if (parse_input_constraint (&constraint, i, ninputs, noutputs, 0,
1205 oconstraints, &allows_mem, &allows_reg))
40b18c0a 1206 {
74f0c611
RH
1207 /* If the operand is going to end up in memory,
1208 mark it addressable. */
b4c33883
AP
1209 if (!allows_reg && allows_mem)
1210 {
1211 /* Strip the nops as we allow this case. FIXME, this really
1212 should be rejected or made deprecated. */
1213 STRIP_NOPS (operand);
1214 if (!cxx_mark_addressable (operand))
1215 operand = error_mark_node;
1216 }
40b18c0a 1217 }
74f0c611
RH
1218 else
1219 operand = error_mark_node;
40b18c0a 1220
74f0c611 1221 TREE_VALUE (t) = operand;
40b18c0a
MM
1222 }
1223 }
abfc8a36 1224
e130a54b 1225 r = build_stmt (ASM_EXPR, string,
0dfdeca6
BC
1226 output_operands, input_operands,
1227 clobbers);
6de9cd9a 1228 ASM_VOLATILE_P (r) = volatile_p;
0ad28dde 1229 r = maybe_cleanup_point_expr_void (r);
3e4d04a1 1230 return add_stmt (r);
ad321293 1231}
b4c4a9ec 1232
f01b0acb
MM
1233/* Finish a label with the indicated NAME. */
1234
a723baf1 1235tree
3a978d72 1236finish_label_stmt (tree name)
f01b0acb 1237{
5b030314 1238 tree decl = define_label (input_location, name);
9e14e18f 1239 return add_stmt (build_stmt (LABEL_EXPR, decl));
f01b0acb
MM
1240}
1241
acef433b
MM
1242/* Finish a series of declarations for local labels. G++ allows users
1243 to declare "local" labels, i.e., labels with scope. This extension
1244 is useful when writing code involving statement-expressions. */
1245
1246void
3a978d72 1247finish_label_decl (tree name)
acef433b
MM
1248{
1249 tree decl = declare_local_label (name);
350fae66 1250 add_decl_expr (decl);
acef433b
MM
1251}
1252
659e5a7a 1253/* When DECL goes out of scope, make sure that CLEANUP is executed. */
f1dedc31
MM
1254
1255void
3a978d72 1256finish_decl_cleanup (tree decl, tree cleanup)
f1dedc31 1257{
325c3691 1258 push_cleanup (decl, cleanup, false);
35b1567d
BC
1259}
1260
659e5a7a 1261/* If the current scope exits with an exception, run CLEANUP. */
24bef158 1262
659e5a7a 1263void
3a978d72 1264finish_eh_cleanup (tree cleanup)
24bef158 1265{
325c3691 1266 push_cleanup (NULL, cleanup, true);
35b1567d
BC
1267}
1268
2282d28d
MM
1269/* The MEM_INITS is a list of mem-initializers, in reverse of the
1270 order they were written by the user. Each node is as for
1271 emit_mem_initializers. */
bf3428d0
MM
1272
1273void
2282d28d 1274finish_mem_initializers (tree mem_inits)
bf3428d0 1275{
2282d28d
MM
1276 /* Reorder the MEM_INITS so that they are in the order they appeared
1277 in the source program. */
1278 mem_inits = nreverse (mem_inits);
bf3428d0 1279
a0de9d20 1280 if (processing_template_decl)
2282d28d 1281 add_stmt (build_min_nt (CTOR_INITIALIZER, mem_inits));
cdd2559c 1282 else
2282d28d 1283 emit_mem_initializers (mem_inits);
558475f0
MM
1284}
1285
b4c4a9ec
MM
1286/* Finish a parenthesized expression EXPR. */
1287
1288tree
3a978d72 1289finish_parenthesized_expr (tree expr)
b4c4a9ec 1290{
6615c446 1291 if (EXPR_P (expr))
78ef5b89 1292 /* This inhibits warnings in c_common_truthvalue_conversion. */
31ec7d2f 1293 TREE_NO_WARNING (expr) = 1;
b4c4a9ec 1294
19420d00
NS
1295 if (TREE_CODE (expr) == OFFSET_REF)
1296 /* [expr.unary.op]/3 The qualified id of a pointer-to-member must not be
1297 enclosed in parentheses. */
1298 PTRMEM_OK_P (expr) = 0;
7a8380ae
NS
1299
1300 if (TREE_CODE (expr) == STRING_CST)
1301 PAREN_STRING_LITERAL_P (expr) = 1;
1302
b4c4a9ec
MM
1303 return expr;
1304}
1305
a723baf1
MM
1306/* Finish a reference to a non-static data member (DECL) that is not
1307 preceded by `.' or `->'. */
1308
1309tree
a3f10e50 1310finish_non_static_data_member (tree decl, tree object, tree qualifying_scope)
a723baf1 1311{
50bc768d 1312 gcc_assert (TREE_CODE (decl) == FIELD_DECL);
a723baf1 1313
a3f10e50 1314 if (!object)
a723baf1
MM
1315 {
1316 if (current_function_decl
1317 && DECL_STATIC_FUNCTION_P (current_function_decl))
a82e1a7d 1318 cp_error_at ("invalid use of member %qD in static member function",
a723baf1
MM
1319 decl);
1320 else
a82e1a7d 1321 cp_error_at ("invalid use of non-static data member %qD", decl);
a723baf1
MM
1322 error ("from this location");
1323
1324 return error_mark_node;
1325 }
1326 TREE_USED (current_class_ptr) = 1;
58e1d54c 1327 if (processing_template_decl && !qualifying_scope)
a723baf1 1328 {
a3f10e50 1329 tree type = TREE_TYPE (decl);
a723baf1 1330
a3f10e50
NS
1331 if (TREE_CODE (type) == REFERENCE_TYPE)
1332 type = TREE_TYPE (type);
1333 else
1334 {
f4f206f4 1335 /* Set the cv qualifiers. */
a3f10e50
NS
1336 int quals = cp_type_quals (TREE_TYPE (current_class_ref));
1337
1338 if (DECL_MUTABLE_P (decl))
1339 quals &= ~TYPE_QUAL_CONST;
9e95d15f 1340
a3f10e50
NS
1341 quals |= cp_type_quals (TREE_TYPE (decl));
1342 type = cp_build_qualified_type (type, quals);
1343 }
9e95d15f 1344
44de5aeb 1345 return build_min (COMPONENT_REF, type, object, decl, NULL_TREE);
a3f10e50
NS
1346 }
1347 else
1348 {
1349 tree access_type = TREE_TYPE (object);
1350 tree lookup_context = context_for_name_lookup (decl);
1351
1352 while (!DERIVED_FROM_P (lookup_context, access_type))
a723baf1
MM
1353 {
1354 access_type = TYPE_CONTEXT (access_type);
9f01ded6 1355 while (access_type && DECL_P (access_type))
a723baf1 1356 access_type = DECL_CONTEXT (access_type);
a723baf1 1357
a3f10e50
NS
1358 if (!access_type)
1359 {
a82e1a7d 1360 cp_error_at ("object missing in reference to %qD", decl);
a3f10e50
NS
1361 error ("from this location");
1362 return error_mark_node;
1363 }
9f01ded6
KL
1364 }
1365
5c425df5 1366 /* If PROCESSING_TEMPLATE_DECL is nonzero here, then
58e1d54c
KL
1367 QUALIFYING_SCOPE is also non-null. Wrap this in a SCOPE_REF
1368 for now. */
1369 if (processing_template_decl)
1370 return build_min (SCOPE_REF, TREE_TYPE (decl),
1371 qualifying_scope, DECL_NAME (decl));
1372
6df5158a 1373 perform_or_defer_access_check (TYPE_BINFO (access_type), decl);
a723baf1
MM
1374
1375 /* If the data member was named `C::M', convert `*this' to `C'
1376 first. */
1377 if (qualifying_scope)
1378 {
1379 tree binfo = NULL_TREE;
1380 object = build_scoped_ref (object, qualifying_scope,
1381 &binfo);
1382 }
1383
1384 return build_class_member_access_expr (object, decl,
1385 /*access_path=*/NULL_TREE,
1386 /*preserve_reference=*/false);
1387 }
1388}
1389
ee76b931
MM
1390/* DECL was the declaration to which a qualified-id resolved. Issue
1391 an error message if it is not accessible. If OBJECT_TYPE is
1392 non-NULL, we have just seen `x->' or `x.' and OBJECT_TYPE is the
1393 type of `*x', or `x', respectively. If the DECL was named as
1394 `A::B' then NESTED_NAME_SPECIFIER is `A'. */
1395
1396void
1397check_accessibility_of_qualified_id (tree decl,
1398 tree object_type,
1399 tree nested_name_specifier)
1400{
1401 tree scope;
1402 tree qualifying_type = NULL_TREE;
95b4aca6 1403
77880ae4 1404 /* If we're not checking, return immediately. */
95b4aca6
NS
1405 if (deferred_access_no_check)
1406 return;
ee76b931
MM
1407
1408 /* Determine the SCOPE of DECL. */
1409 scope = context_for_name_lookup (decl);
1410 /* If the SCOPE is not a type, then DECL is not a member. */
1411 if (!TYPE_P (scope))
1412 return;
1413 /* Compute the scope through which DECL is being accessed. */
1414 if (object_type
1415 /* OBJECT_TYPE might not be a class type; consider:
1416
1417 class A { typedef int I; };
1418 I *p;
1419 p->A::I::~I();
1420
1421 In this case, we will have "A::I" as the DECL, but "I" as the
1422 OBJECT_TYPE. */
1423 && CLASS_TYPE_P (object_type)
1424 && DERIVED_FROM_P (scope, object_type))
1425 /* If we are processing a `->' or `.' expression, use the type of the
1426 left-hand side. */
1427 qualifying_type = object_type;
1428 else if (nested_name_specifier)
1429 {
1430 /* If the reference is to a non-static member of the
1431 current class, treat it as if it were referenced through
1432 `this'. */
1433 if (DECL_NONSTATIC_MEMBER_P (decl)
1434 && current_class_ptr
1435 && DERIVED_FROM_P (scope, current_class_type))
1436 qualifying_type = current_class_type;
1437 /* Otherwise, use the type indicated by the
1438 nested-name-specifier. */
1439 else
1440 qualifying_type = nested_name_specifier;
1441 }
1442 else
1443 /* Otherwise, the name must be from the current class or one of
1444 its bases. */
1445 qualifying_type = currently_open_derived_class (scope);
1446
c645999e
NS
1447 if (qualifying_type && IS_AGGR_TYPE_CODE (TREE_CODE (qualifying_type)))
1448 /* It is possible for qualifying type to be a TEMPLATE_TYPE_PARM
1449 or similar in a default argument value. */
ee76b931
MM
1450 perform_or_defer_access_check (TYPE_BINFO (qualifying_type), decl);
1451}
1452
1453/* EXPR is the result of a qualified-id. The QUALIFYING_CLASS was the
1454 class named to the left of the "::" operator. DONE is true if this
1455 expression is a complete postfix-expression; it is false if this
1456 expression is followed by '->', '[', '(', etc. ADDRESS_P is true
1457 iff this expression is the operand of '&'. */
1458
1459tree
1460finish_qualified_id_expr (tree qualifying_class, tree expr, bool done,
1461 bool address_p)
1462{
5e08432e
MM
1463 if (error_operand_p (expr))
1464 return error_mark_node;
1465
ee76b931
MM
1466 /* If EXPR occurs as the operand of '&', use special handling that
1467 permits a pointer-to-member. */
1468 if (address_p && done)
1469 {
1470 if (TREE_CODE (expr) == SCOPE_REF)
1471 expr = TREE_OPERAND (expr, 1);
a5ac359a
MM
1472 expr = build_offset_ref (qualifying_class, expr,
1473 /*address_p=*/true);
ee76b931
MM
1474 return expr;
1475 }
1476
1477 if (TREE_CODE (expr) == FIELD_DECL)
a3f10e50
NS
1478 expr = finish_non_static_data_member (expr, current_class_ref,
1479 qualifying_class);
ee76b931
MM
1480 else if (BASELINK_P (expr) && !processing_template_decl)
1481 {
ee76b931
MM
1482 tree fns;
1483
1484 /* See if any of the functions are non-static members. */
1485 fns = BASELINK_FUNCTIONS (expr);
1486 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
1487 fns = TREE_OPERAND (fns, 0);
ee76b931
MM
1488 /* If so, the expression may be relative to the current
1489 class. */
821eaf2a
MM
1490 if (!shared_member_p (fns)
1491 && current_class_type
ee76b931
MM
1492 && DERIVED_FROM_P (qualifying_class, current_class_type))
1493 expr = (build_class_member_access_expr
1494 (maybe_dummy_object (qualifying_class, NULL),
1495 expr,
1496 BASELINK_ACCESS_BINFO (expr),
1497 /*preserve_reference=*/false));
1498 else if (done)
a5ac359a
MM
1499 /* The expression is a qualified name whose address is not
1500 being taken. */
1501 expr = build_offset_ref (qualifying_class, expr, /*address_p=*/false);
ee76b931
MM
1502 }
1503
1504 return expr;
1505}
1506
b69b1501
MM
1507/* Begin a statement-expression. The value returned must be passed to
1508 finish_stmt_expr. */
b4c4a9ec
MM
1509
1510tree
3a978d72 1511begin_stmt_expr (void)
b4c4a9ec 1512{
325c3691 1513 return push_stmt_list ();
35b1567d
BC
1514}
1515
a5bcc582
NS
1516/* Process the final expression of a statement expression. EXPR can be
1517 NULL, if the final expression is empty. Build up a TARGET_EXPR so
1518 that the result value can be safely returned to the enclosing
1519 expression. */
1520
1521tree
325c3691 1522finish_stmt_expr_expr (tree expr, tree stmt_expr)
a5bcc582
NS
1523{
1524 tree result = NULL_TREE;
a5bcc582 1525
72e4661a
PC
1526 if (error_operand_p (expr))
1527 return error_mark_node;
1528
a5bcc582
NS
1529 if (expr)
1530 {
a5bcc582
NS
1531 if (!processing_template_decl && !VOID_TYPE_P (TREE_TYPE (expr)))
1532 {
2692eb7d
JM
1533 tree type = TREE_TYPE (expr);
1534
a5bcc582
NS
1535 if (TREE_CODE (type) == ARRAY_TYPE
1536 || TREE_CODE (type) == FUNCTION_TYPE)
1537 expr = decay_conversion (expr);
1538
a5bcc582
NS
1539 expr = require_complete_type (expr);
1540
2692eb7d
JM
1541 type = TREE_TYPE (expr);
1542
a5bcc582
NS
1543 /* Build a TARGET_EXPR for this aggregate. finish_stmt_expr
1544 will then pull it apart so the lifetime of the target is
cd0be382 1545 within the scope of the expression containing this statement
a5bcc582
NS
1546 expression. */
1547 if (TREE_CODE (expr) == TARGET_EXPR)
1548 ;
1549 else if (!IS_AGGR_TYPE (type) || TYPE_HAS_TRIVIAL_INIT_REF (type))
1550 expr = build_target_expr_with_type (expr, type);
1551 else
1552 {
1553 /* Copy construct. */
1554 expr = build_special_member_call
1555 (NULL_TREE, complete_ctor_identifier,
1556 build_tree_list (NULL_TREE, expr),
cad7e87b 1557 type, LOOKUP_NORMAL);
a5bcc582 1558 expr = build_cplus_new (type, expr);
50bc768d 1559 gcc_assert (TREE_CODE (expr) == TARGET_EXPR);
a5bcc582
NS
1560 }
1561 }
1562
1563 if (expr != error_mark_node)
1564 {
1565 result = build_stmt (EXPR_STMT, expr);
325c3691 1566 EXPR_STMT_STMT_EXPR_RESULT (result) = 1;
a5bcc582
NS
1567 add_stmt (result);
1568 }
1569 }
1570
1571 finish_stmt ();
1572
325c3691
RH
1573 /* Remember the last expression so that finish_stmt_expr
1574 can pull it apart. */
1575 TREE_TYPE (stmt_expr) = result;
a5bcc582
NS
1576
1577 return result;
1578}
1579
303b7406
NS
1580/* Finish a statement-expression. EXPR should be the value returned
1581 by the previous begin_stmt_expr. Returns an expression
1582 representing the statement-expression. */
b4c4a9ec
MM
1583
1584tree
325c3691 1585finish_stmt_expr (tree stmt_expr, bool has_no_scope)
b4c4a9ec 1586{
325c3691
RH
1587 tree result, result_stmt, type;
1588 tree *result_stmt_p = NULL;
1589
1590 result_stmt = TREE_TYPE (stmt_expr);
1591 TREE_TYPE (stmt_expr) = void_type_node;
1592 result = pop_stmt_list (stmt_expr);
1593
1594 if (!result_stmt || VOID_TYPE_P (result_stmt))
a5bcc582
NS
1595 type = void_type_node;
1596 else
1597 {
325c3691
RH
1598 /* We need to search the statement expression for the result_stmt,
1599 since we'll need to replace it entirely. */
1600 tree t;
1601 result_stmt_p = &result;
1602 while (1)
a5bcc582 1603 {
325c3691
RH
1604 t = *result_stmt_p;
1605 if (t == result_stmt)
1606 break;
1607
1608 switch (TREE_CODE (t))
1609 {
1610 case STATEMENT_LIST:
1611 {
1612 tree_stmt_iterator i = tsi_last (t);
1613 result_stmt_p = tsi_stmt_ptr (i);
1614 break;
1615 }
1616 case BIND_EXPR:
1617 result_stmt_p = &BIND_EXPR_BODY (t);
1618 break;
325c3691
RH
1619 case TRY_FINALLY_EXPR:
1620 case TRY_CATCH_EXPR:
1621 case CLEANUP_STMT:
1622 result_stmt_p = &TREE_OPERAND (t, 0);
1623 break;
1624 default:
315fb5db 1625 gcc_unreachable ();
325c3691 1626 }
a5bcc582 1627 }
325c3691 1628 type = TREE_TYPE (EXPR_STMT_EXPR (result_stmt));
a5bcc582 1629 }
6f80451c 1630
a5bcc582 1631 if (processing_template_decl)
325c3691
RH
1632 {
1633 result = build_min (STMT_EXPR, type, result);
1634 TREE_SIDE_EFFECTS (result) = 1;
1635 STMT_EXPR_NO_SCOPE (result) = has_no_scope;
1636 }
1637 else if (!VOID_TYPE_P (type))
a5bcc582
NS
1638 {
1639 /* Pull out the TARGET_EXPR that is the final expression. Put
1640 the target's init_expr as the final expression and then put
1641 the statement expression itself as the target's init
1642 expr. Finally, return the target expression. */
2692eb7d 1643 tree init, target_expr = EXPR_STMT_EXPR (result_stmt);
50bc768d 1644 gcc_assert (TREE_CODE (target_expr) == TARGET_EXPR);
2692eb7d
JM
1645
1646 /* The initializer will be void if the initialization is done by
1647 AGGR_INIT_EXPR; propagate that out to the statement-expression as
1648 a whole. */
1649 init = TREE_OPERAND (target_expr, 1);
1650 type = TREE_TYPE (init);
1651
543a0daa 1652 init = maybe_cleanup_point_expr (init);
2692eb7d
JM
1653 *result_stmt_p = init;
1654
1655 if (VOID_TYPE_P (type))
1656 /* No frobbing needed. */;
1657 else if (TREE_CODE (result) == BIND_EXPR)
325c3691 1658 {
2692eb7d
JM
1659 /* The BIND_EXPR created in finish_compound_stmt is void; if we're
1660 returning a value directly, give it the appropriate type. */
325c3691 1661 if (VOID_TYPE_P (TREE_TYPE (result)))
2692eb7d 1662 TREE_TYPE (result) = type;
325c3691 1663 else
315fb5db 1664 gcc_assert (same_type_p (TREE_TYPE (result), type));
325c3691
RH
1665 }
1666 else if (TREE_CODE (result) == STATEMENT_LIST)
2692eb7d
JM
1667 /* We need to wrap a STATEMENT_LIST in a BIND_EXPR so it can have a
1668 type other than void. FIXME why can't we just return a value
1669 from STATEMENT_LIST? */
1670 result = build3 (BIND_EXPR, type, NULL, result, NULL);
325c3691 1671
2692eb7d
JM
1672 TREE_OPERAND (target_expr, 1) = result;
1673 result = target_expr;
a5bcc582 1674 }
325c3691 1675
b4c4a9ec
MM
1676 return result;
1677}
1678
b3445994 1679/* Perform Koenig lookup. FN is the postfix-expression representing
fa531100
MM
1680 the function (or functions) to call; ARGS are the arguments to the
1681 call. Returns the functions to be considered by overload
1682 resolution. */
b3445994
MM
1683
1684tree
1685perform_koenig_lookup (tree fn, tree args)
1686{
1687 tree identifier = NULL_TREE;
1688 tree functions = NULL_TREE;
1689
1690 /* Find the name of the overloaded function. */
1691 if (TREE_CODE (fn) == IDENTIFIER_NODE)
1692 identifier = fn;
1693 else if (is_overloaded_fn (fn))
1694 {
1695 functions = fn;
1696 identifier = DECL_NAME (get_first_fn (functions));
1697 }
1698 else if (DECL_P (fn))
1699 {
1700 functions = fn;
1701 identifier = DECL_NAME (fn);
1702 }
1703
1704 /* A call to a namespace-scope function using an unqualified name.
1705
1706 Do Koenig lookup -- unless any of the arguments are
1707 type-dependent. */
1708 if (!any_type_dependent_arguments_p (args))
1709 {
1710 fn = lookup_arg_dependent (identifier, functions, args);
1711 if (!fn)
1712 /* The unqualified name could not be resolved. */
1713 fn = unqualified_fn_lookup_error (identifier);
1714 }
1715 else
10b1d5e7 1716 fn = identifier;
b3445994
MM
1717
1718 return fn;
1719}
1720
4ba126e4
MM
1721/* Generate an expression for `FN (ARGS)'.
1722
1723 If DISALLOW_VIRTUAL is true, the call to FN will be not generated
1724 as a virtual call, even if FN is virtual. (This flag is set when
1725 encountering an expression where the function name is explicitly
1726 qualified. For example a call to `X::f' never generates a virtual
1727 call.)
1728
1729 Returns code for the call. */
b4c4a9ec
MM
1730
1731tree
6d80c4b9 1732finish_call_expr (tree fn, tree args, bool disallow_virtual, bool koenig_p)
b4c4a9ec 1733{
d17811fd
MM
1734 tree result;
1735 tree orig_fn;
1736 tree orig_args;
1737
4ba126e4
MM
1738 if (fn == error_mark_node || args == error_mark_node)
1739 return error_mark_node;
1740
4ba126e4 1741 /* ARGS should be a list of arguments. */
50bc768d 1742 gcc_assert (!args || TREE_CODE (args) == TREE_LIST);
a759e627 1743
d17811fd
MM
1744 orig_fn = fn;
1745 orig_args = args;
1746
1747 if (processing_template_decl)
1748 {
1749 if (type_dependent_expression_p (fn)
1750 || any_type_dependent_arguments_p (args))
6d80c4b9 1751 {
6de9cd9a 1752 result = build_nt (CALL_EXPR, fn, args, NULL_TREE);
6d80c4b9
MM
1753 KOENIG_LOOKUP_P (result) = koenig_p;
1754 return result;
1755 }
d17811fd
MM
1756 if (!BASELINK_P (fn)
1757 && TREE_CODE (fn) != PSEUDO_DTOR_EXPR
1758 && TREE_TYPE (fn) != unknown_type_node)
1759 fn = build_non_dependent_expr (fn);
1760 args = build_non_dependent_args (orig_args);
1761 }
1762
a723baf1
MM
1763 /* A reference to a member function will appear as an overloaded
1764 function (rather than a BASELINK) if an unqualified name was used
1765 to refer to it. */
1766 if (!BASELINK_P (fn) && is_overloaded_fn (fn))
1767 {
12483c9f 1768 tree f = fn;
a723baf1 1769
12483c9f
NS
1770 if (TREE_CODE (f) == TEMPLATE_ID_EXPR)
1771 f = TREE_OPERAND (f, 0);
1772 f = get_first_fn (f);
a723baf1
MM
1773 if (DECL_FUNCTION_MEMBER_P (f))
1774 {
1775 tree type = currently_open_derived_class (DECL_CONTEXT (f));
c44e68a5
KL
1776 if (!type)
1777 type = DECL_CONTEXT (f);
a723baf1
MM
1778 fn = build_baselink (TYPE_BINFO (type),
1779 TYPE_BINFO (type),
1780 fn, /*optype=*/NULL_TREE);
1781 }
1782 }
1783
d17811fd 1784 result = NULL_TREE;
4ba126e4 1785 if (BASELINK_P (fn))
03d82991 1786 {
4ba126e4
MM
1787 tree object;
1788
1789 /* A call to a member function. From [over.call.func]:
1790
1791 If the keyword this is in scope and refers to the class of
1792 that member function, or a derived class thereof, then the
1793 function call is transformed into a qualified function call
1794 using (*this) as the postfix-expression to the left of the
1795 . operator.... [Otherwise] a contrived object of type T
1796 becomes the implied object argument.
1797
1798 This paragraph is unclear about this situation:
1799
1800 struct A { void f(); };
1801 struct B : public A {};
1802 struct C : public A { void g() { B::f(); }};
1803
1804 In particular, for `B::f', this paragraph does not make clear
1805 whether "the class of that member function" refers to `A' or
1806 to `B'. We believe it refers to `B'. */
1807 if (current_class_type
1808 && DERIVED_FROM_P (BINFO_TYPE (BASELINK_ACCESS_BINFO (fn)),
1809 current_class_type)
1810 && current_class_ref)
127b8136
MM
1811 object = maybe_dummy_object (BINFO_TYPE (BASELINK_ACCESS_BINFO (fn)),
1812 NULL);
4ba126e4
MM
1813 else
1814 {
1815 tree representative_fn;
b4c4a9ec 1816
4ba126e4
MM
1817 representative_fn = BASELINK_FUNCTIONS (fn);
1818 if (TREE_CODE (representative_fn) == TEMPLATE_ID_EXPR)
1819 representative_fn = TREE_OPERAND (representative_fn, 0);
1820 representative_fn = get_first_fn (representative_fn);
1821 object = build_dummy_object (DECL_CONTEXT (representative_fn));
1822 }
b4c4a9ec 1823
d17811fd
MM
1824 if (processing_template_decl)
1825 {
1826 if (type_dependent_expression_p (object))
6de9cd9a 1827 return build_nt (CALL_EXPR, orig_fn, orig_args, NULL_TREE);
d17811fd
MM
1828 object = build_non_dependent_expr (object);
1829 }
1830
1831 result = build_new_method_call (object, fn, args, NULL_TREE,
1832 (disallow_virtual
1833 ? LOOKUP_NONVIRTUAL : 0));
4ba126e4
MM
1834 }
1835 else if (is_overloaded_fn (fn))
16c35a1f
RH
1836 {
1837 /* If the function is an overloaded builtin, resolve it. */
1838 if (TREE_CODE (fn) == FUNCTION_DECL
1839 && DECL_BUILT_IN_CLASS (fn) == BUILT_IN_NORMAL)
1840 result = resolve_overloaded_builtin (fn, args);
1841
1842 if (!result)
1843 /* A call to a namespace-scope function. */
1844 result = build_new_function_call (fn, args);
1845 }
a723baf1
MM
1846 else if (TREE_CODE (fn) == PSEUDO_DTOR_EXPR)
1847 {
a723baf1
MM
1848 if (args)
1849 error ("arguments to destructor are not allowed");
1850 /* Mark the pseudo-destructor call as having side-effects so
1851 that we do not issue warnings about its use. */
1852 result = build1 (NOP_EXPR,
1853 void_type_node,
1854 TREE_OPERAND (fn, 0));
1855 TREE_SIDE_EFFECTS (result) = 1;
a723baf1 1856 }
4ba126e4 1857 else if (CLASS_TYPE_P (TREE_TYPE (fn)))
d17811fd
MM
1858 /* If the "function" is really an object of class type, it might
1859 have an overloaded `operator ()'. */
ec835fb2
MM
1860 result = build_new_op (CALL_EXPR, LOOKUP_NORMAL, fn, args, NULL_TREE,
1861 /*overloaded_p=*/NULL);
16c35a1f 1862
d17811fd
MM
1863 if (!result)
1864 /* A call where the function is unknown. */
1865 result = build_function_call (fn, args);
4ba126e4 1866
d17811fd 1867 if (processing_template_decl)
6d80c4b9 1868 {
f293ce4b
RS
1869 result = build3 (CALL_EXPR, TREE_TYPE (result), orig_fn,
1870 orig_args, NULL_TREE);
6d80c4b9
MM
1871 KOENIG_LOOKUP_P (result) = koenig_p;
1872 }
d17811fd 1873 return result;
b4c4a9ec
MM
1874}
1875
1876/* Finish a call to a postfix increment or decrement or EXPR. (Which
1877 is indicated by CODE, which should be POSTINCREMENT_EXPR or
1878 POSTDECREMENT_EXPR.) */
1879
1880tree
3a978d72 1881finish_increment_expr (tree expr, enum tree_code code)
b4c4a9ec 1882{
b4c4a9ec
MM
1883 return build_x_unary_op (code, expr);
1884}
1885
1886/* Finish a use of `this'. Returns an expression for `this'. */
1887
1888tree
3a978d72 1889finish_this_expr (void)
b4c4a9ec
MM
1890{
1891 tree result;
1892
1893 if (current_class_ptr)
1894 {
b4c4a9ec
MM
1895 result = current_class_ptr;
1896 }
1897 else if (current_function_decl
1898 && DECL_STATIC_FUNCTION_P (current_function_decl))
1899 {
9e637a26 1900 error ("%<this%> is unavailable for static member functions");
b4c4a9ec
MM
1901 result = error_mark_node;
1902 }
1903 else
1904 {
1905 if (current_function_decl)
9e637a26 1906 error ("invalid use of %<this%> in non-member function");
b4c4a9ec 1907 else
9e637a26 1908 error ("invalid use of %<this%> at top level");
b4c4a9ec
MM
1909 result = error_mark_node;
1910 }
1911
1912 return result;
1913}
1914
a723baf1
MM
1915/* Finish a pseudo-destructor expression. If SCOPE is NULL, the
1916 expression was of the form `OBJECT.~DESTRUCTOR' where DESTRUCTOR is
1917 the TYPE for the type given. If SCOPE is non-NULL, the expression
1918 was of the form `OBJECT.SCOPE::~DESTRUCTOR'. */
b4c4a9ec
MM
1919
1920tree
3a978d72 1921finish_pseudo_destructor_expr (tree object, tree scope, tree destructor)
b4c4a9ec 1922{
a723baf1
MM
1923 if (destructor == error_mark_node)
1924 return error_mark_node;
40242ccf 1925
50bc768d 1926 gcc_assert (TYPE_P (destructor));
b4c4a9ec 1927
a723baf1
MM
1928 if (!processing_template_decl)
1929 {
1930 if (scope == error_mark_node)
1931 {
1932 error ("invalid qualifying scope in pseudo-destructor name");
1933 return error_mark_node;
1934 }
1935
26bcf8fc
MM
1936 /* [expr.pseudo] says both:
1937
1938 The type designated by the pseudo-destructor-name shall be
1939 the same as the object type.
1940
1941 and:
1942
1943 The cv-unqualified versions of the object type and of the
1944 type designated by the pseudo-destructor-name shall be the
1945 same type.
1946
1947 We implement the more generous second sentence, since that is
1948 what most other compilers do. */
1949 if (!same_type_ignoring_top_level_qualifiers_p (TREE_TYPE (object),
1950 destructor))
a723baf1 1951 {
a82e1a7d 1952 error ("%qE is not of type %qT", object, destructor);
a723baf1
MM
1953 return error_mark_node;
1954 }
1955 }
b4c4a9ec 1956
f293ce4b 1957 return build3 (PSEUDO_DTOR_EXPR, void_type_node, object, scope, destructor);
b4c4a9ec
MM
1958}
1959
ce4a0391
MM
1960/* Finish an expression of the form CODE EXPR. */
1961
1962tree
3a978d72 1963finish_unary_op_expr (enum tree_code code, tree expr)
ce4a0391
MM
1964{
1965 tree result = build_x_unary_op (code, expr);
7c355bca
ML
1966 /* Inside a template, build_x_unary_op does not fold the
1967 expression. So check whether the result is folded before
1968 setting TREE_NEGATED_INT. */
1969 if (code == NEGATE_EXPR && TREE_CODE (expr) == INTEGER_CST
88b4335f 1970 && TREE_CODE (result) == INTEGER_CST
8df83eae 1971 && !TYPE_UNSIGNED (TREE_TYPE (result))
88b4335f 1972 && INT_CST_LT (result, integer_zero_node))
6fc98adf
MM
1973 {
1974 /* RESULT may be a cached INTEGER_CST, so we must copy it before
1975 setting TREE_NEGATED_INT. */
1976 result = copy_node (result);
1977 TREE_NEGATED_INT (result) = 1;
1978 }
ce4a0391
MM
1979 overflow_warning (result);
1980 return result;
1981}
1982
a723baf1
MM
1983/* Finish a compound-literal expression. TYPE is the type to which
1984 the INITIALIZER_LIST is being cast. */
1985
1986tree
3a978d72 1987finish_compound_literal (tree type, tree initializer_list)
a723baf1
MM
1988{
1989 tree compound_literal;
1990
1991 /* Build a CONSTRUCTOR for the INITIALIZER_LIST. */
dcf92453 1992 compound_literal = build_constructor (NULL_TREE, initializer_list);
a723baf1
MM
1993 /* Mark it as a compound-literal. */
1994 TREE_HAS_CONSTRUCTOR (compound_literal) = 1;
1995 if (processing_template_decl)
1996 TREE_TYPE (compound_literal) = type;
1997 else
1998 {
1999 /* Check the initialization. */
2000 compound_literal = digest_init (type, compound_literal, NULL);
2001 /* If the TYPE was an array type with an unknown bound, then we can
2002 figure out the dimension now. For example, something like:
2003
2004 `(int []) { 2, 3 }'
2005
2006 implies that the array has two elements. */
2007 if (TREE_CODE (type) == ARRAY_TYPE && !COMPLETE_TYPE_P (type))
aab038d5
RH
2008 cp_complete_array_type (&TREE_TYPE (compound_literal),
2009 compound_literal, 1);
a723baf1
MM
2010 }
2011
2012 return compound_literal;
2013}
2014
5f261ba9
MM
2015/* Return the declaration for the function-name variable indicated by
2016 ID. */
2017
2018tree
2019finish_fname (tree id)
2020{
2021 tree decl;
2022
2023 decl = fname_decl (C_RID_CODE (id), id);
2024 if (processing_template_decl)
10b1d5e7 2025 decl = DECL_NAME (decl);
5f261ba9
MM
2026 return decl;
2027}
2028
8014a339 2029/* Finish a translation unit. */
ce4a0391
MM
2030
2031void
3a978d72 2032finish_translation_unit (void)
ce4a0391
MM
2033{
2034 /* In case there were missing closebraces,
2035 get us back to the global binding level. */
273a708f 2036 pop_everything ();
ce4a0391
MM
2037 while (current_namespace != global_namespace)
2038 pop_namespace ();
0ba8a114 2039
c6002625 2040 /* Do file scope __FUNCTION__ et al. */
0ba8a114 2041 finish_fname_decls ();
ce4a0391
MM
2042}
2043
b4c4a9ec
MM
2044/* Finish a template type parameter, specified as AGGR IDENTIFIER.
2045 Returns the parameter. */
2046
2047tree
3a978d72 2048finish_template_type_parm (tree aggr, tree identifier)
b4c4a9ec 2049{
6eabb241 2050 if (aggr != class_type_node)
b4c4a9ec 2051 {
9e637a26 2052 pedwarn ("template type parameters must use the keyword %<class%> or %<typename%>");
b4c4a9ec
MM
2053 aggr = class_type_node;
2054 }
2055
2056 return build_tree_list (aggr, identifier);
2057}
2058
2059/* Finish a template template parameter, specified as AGGR IDENTIFIER.
2060 Returns the parameter. */
2061
2062tree
3a978d72 2063finish_template_template_parm (tree aggr, tree identifier)
b4c4a9ec
MM
2064{
2065 tree decl = build_decl (TYPE_DECL, identifier, NULL_TREE);
2066 tree tmpl = build_lang_decl (TEMPLATE_DECL, identifier, NULL_TREE);
2067 DECL_TEMPLATE_PARMS (tmpl) = current_template_parms;
2068 DECL_TEMPLATE_RESULT (tmpl) = decl;
c727aa5e 2069 DECL_ARTIFICIAL (decl) = 1;
b4c4a9ec
MM
2070 end_template_decl ();
2071
50bc768d 2072 gcc_assert (DECL_TEMPLATE_PARMS (tmpl));
b37bf5bd 2073
b4c4a9ec
MM
2074 return finish_template_type_parm (aggr, tmpl);
2075}
ce4a0391 2076
8ba658ee
MM
2077/* ARGUMENT is the default-argument value for a template template
2078 parameter. If ARGUMENT is invalid, issue error messages and return
2079 the ERROR_MARK_NODE. Otherwise, ARGUMENT itself is returned. */
2080
2081tree
2082check_template_template_default_arg (tree argument)
2083{
2084 if (TREE_CODE (argument) != TEMPLATE_DECL
2085 && TREE_CODE (argument) != TEMPLATE_TEMPLATE_PARM
8ba658ee
MM
2086 && TREE_CODE (argument) != UNBOUND_CLASS_TEMPLATE)
2087 {
a3a503a5
GB
2088 if (TREE_CODE (argument) == TYPE_DECL)
2089 {
2090 tree t = TREE_TYPE (argument);
2091
2092 /* Try to emit a slightly smarter error message if we detect
2093 that the user is using a template instantiation. */
2094 if (CLASSTYPE_TEMPLATE_INFO (t)
2095 && CLASSTYPE_TEMPLATE_INSTANTIATION (t))
a82e1a7d 2096 error ("invalid use of type %qT as a default value for a "
a3a503a5
GB
2097 "template template-parameter", t);
2098 else
a82e1a7d 2099 error ("invalid use of %qD as a default value for a template "
a3a503a5
GB
2100 "template-parameter", argument);
2101 }
2102 else
2103 error ("invalid default argument for a template template parameter");
8ba658ee
MM
2104 return error_mark_node;
2105 }
2106
2107 return argument;
2108}
2109
ce4a0391
MM
2110/* Begin a class definition, as indicated by T. */
2111
2112tree
3a978d72 2113begin_class_definition (tree t)
ce4a0391 2114{
7437519c
ZW
2115 if (t == error_mark_node)
2116 return error_mark_node;
2117
522d6614
NS
2118 if (processing_template_parmlist)
2119 {
a82e1a7d 2120 error ("definition of %q#T inside template parameter list", t);
522d6614
NS
2121 return error_mark_node;
2122 }
47ee8904
MM
2123 /* A non-implicit typename comes from code like:
2124
2125 template <typename T> struct A {
2126 template <typename U> struct A<T>::B ...
2127
2128 This is erroneous. */
2129 else if (TREE_CODE (t) == TYPENAME_TYPE)
2130 {
a82e1a7d 2131 error ("invalid definition of qualified type %qT", t);
47ee8904
MM
2132 t = error_mark_node;
2133 }
2134
2135 if (t == error_mark_node || ! IS_AGGR_TYPE (t))
ce4a0391 2136 {
33848bb0 2137 t = make_aggr_type (RECORD_TYPE);
bd3d082e 2138 pushtag (make_anon_name (), t, /*tag_scope=*/ts_current);
ce4a0391 2139 }
830fcda8 2140
b4f70b3d 2141 /* Update the location of the decl. */
f31686a3 2142 DECL_SOURCE_LOCATION (TYPE_NAME (t)) = input_location;
b4f70b3d 2143
4c571114 2144 if (TYPE_BEING_DEFINED (t))
ce4a0391 2145 {
33848bb0 2146 t = make_aggr_type (TREE_CODE (t));
bd3d082e 2147 pushtag (TYPE_IDENTIFIER (t), t, /*tag_scope=*/ts_current);
ce4a0391 2148 }
ff350acd 2149 maybe_process_partial_specialization (t);
29370796 2150 pushclass (t);
ce4a0391 2151 TYPE_BEING_DEFINED (t) = 1;
c0694c4b
MM
2152 if (flag_pack_struct)
2153 {
2154 tree v;
2155 TYPE_PACKED (t) = 1;
2156 /* Even though the type is being defined for the first time
2157 here, there might have been a forward declaration, so there
2158 might be cv-qualified variants of T. */
2159 for (v = TYPE_NEXT_VARIANT (t); v; v = TYPE_NEXT_VARIANT (v))
2160 TYPE_PACKED (v) = 1;
2161 }
ce4a0391
MM
2162 /* Reset the interface data, at the earliest possible
2163 moment, as it might have been set via a class foo;
2164 before. */
1951a1b6
JM
2165 if (! TYPE_ANONYMOUS_P (t))
2166 {
c162c75e 2167 struct c_fileinfo *finfo = get_fileinfo (lbasename (input_filename));
5d709b00 2168 CLASSTYPE_INTERFACE_ONLY (t) = finfo->interface_only;
1951a1b6 2169 SET_CLASSTYPE_INTERFACE_UNKNOWN_X
5d709b00 2170 (t, finfo->interface_unknown);
1951a1b6 2171 }
ce4a0391
MM
2172 reset_specialization();
2173
b7975aed
MM
2174 /* Make a declaration for this class in its own scope. */
2175 build_self_reference ();
2176
830fcda8 2177 return t;
ce4a0391
MM
2178}
2179
61a127b3
MM
2180/* Finish the member declaration given by DECL. */
2181
2182void
3a978d72 2183finish_member_declaration (tree decl)
61a127b3
MM
2184{
2185 if (decl == error_mark_node || decl == NULL_TREE)
2186 return;
2187
2188 if (decl == void_type_node)
2189 /* The COMPONENT was a friend, not a member, and so there's
2190 nothing for us to do. */
2191 return;
2192
2193 /* We should see only one DECL at a time. */
50bc768d 2194 gcc_assert (TREE_CHAIN (decl) == NULL_TREE);
61a127b3
MM
2195
2196 /* Set up access control for DECL. */
2197 TREE_PRIVATE (decl)
2198 = (current_access_specifier == access_private_node);
2199 TREE_PROTECTED (decl)
2200 = (current_access_specifier == access_protected_node);
2201 if (TREE_CODE (decl) == TEMPLATE_DECL)
2202 {
17aec3eb
RK
2203 TREE_PRIVATE (DECL_TEMPLATE_RESULT (decl)) = TREE_PRIVATE (decl);
2204 TREE_PROTECTED (DECL_TEMPLATE_RESULT (decl)) = TREE_PROTECTED (decl);
61a127b3
MM
2205 }
2206
2207 /* Mark the DECL as a member of the current class. */
4f1c5b7d 2208 DECL_CONTEXT (decl) = current_class_type;
61a127b3 2209
421844e7
MM
2210 /* [dcl.link]
2211
2212 A C language linkage is ignored for the names of class members
2213 and the member function type of class member functions. */
2214 if (DECL_LANG_SPECIFIC (decl) && DECL_LANGUAGE (decl) == lang_c)
5d2ed28c 2215 SET_DECL_LANGUAGE (decl, lang_cplusplus);
421844e7 2216
61a127b3
MM
2217 /* Put functions on the TYPE_METHODS list and everything else on the
2218 TYPE_FIELDS list. Note that these are built up in reverse order.
2219 We reverse them (to obtain declaration order) in finish_struct. */
2220 if (TREE_CODE (decl) == FUNCTION_DECL
2221 || DECL_FUNCTION_TEMPLATE_P (decl))
2222 {
2223 /* We also need to add this function to the
2224 CLASSTYPE_METHOD_VEC. */
aaaa46d2 2225 add_method (current_class_type, decl);
61a127b3
MM
2226
2227 TREE_CHAIN (decl) = TYPE_METHODS (current_class_type);
2228 TYPE_METHODS (current_class_type) = decl;
f139561c
MM
2229
2230 maybe_add_class_template_decl_list (current_class_type, decl,
2231 /*friend_p=*/0);
61a127b3 2232 }
f139561c 2233 /* Enter the DECL into the scope of the class. */
fd9aef9d 2234 else if ((TREE_CODE (decl) == USING_DECL && TREE_TYPE (decl))
399dedb9 2235 || pushdecl_class_level (decl))
61a127b3
MM
2236 {
2237 /* All TYPE_DECLs go at the end of TYPE_FIELDS. Ordinary fields
2238 go at the beginning. The reason is that lookup_field_1
2239 searches the list in order, and we want a field name to
2240 override a type name so that the "struct stat hack" will
2241 work. In particular:
2242
2243 struct S { enum E { }; int E } s;
2244 s.E = 3;
2245
0e339752 2246 is valid. In addition, the FIELD_DECLs must be maintained in
61a127b3
MM
2247 declaration order so that class layout works as expected.
2248 However, we don't need that order until class layout, so we
2249 save a little time by putting FIELD_DECLs on in reverse order
2250 here, and then reversing them in finish_struct_1. (We could
2251 also keep a pointer to the correct insertion points in the
2252 list.) */
2253
2254 if (TREE_CODE (decl) == TYPE_DECL)
2255 TYPE_FIELDS (current_class_type)
2256 = chainon (TYPE_FIELDS (current_class_type), decl);
2257 else
2258 {
2259 TREE_CHAIN (decl) = TYPE_FIELDS (current_class_type);
2260 TYPE_FIELDS (current_class_type) = decl;
2261 }
8f032717 2262
f139561c
MM
2263 maybe_add_class_template_decl_list (current_class_type, decl,
2264 /*friend_p=*/0);
61a127b3 2265 }
5e2f4cd2
MM
2266
2267 if (pch_file)
2268 note_decl_for_pch (decl);
2269}
2270
2271/* DECL has been declared while we are building a PCH file. Perform
2272 actions that we might normally undertake lazily, but which can be
2273 performed now so that they do not have to be performed in
2274 translation units which include the PCH file. */
2275
2276void
2277note_decl_for_pch (tree decl)
2278{
2279 gcc_assert (pch_file);
2280
2281 /* A non-template inline function with external linkage will always
2282 be COMDAT. As we must eventually determine the linkage of all
2283 functions, and as that causes writes to the data mapped in from
2284 the PCH file, it's advantageous to mark the functions at this
2285 point. */
2286 if (TREE_CODE (decl) == FUNCTION_DECL
2287 && TREE_PUBLIC (decl)
2288 && DECL_DECLARED_INLINE_P (decl)
2289 && !DECL_IMPLICIT_INSTANTIATION (decl))
2290 {
2291 comdat_linkage (decl);
2292 DECL_INTERFACE_KNOWN (decl) = 1;
2293 }
2294
2295 /* There's a good chance that we'll have to mangle names at some
2296 point, even if only for emission in debugging information. */
2297 if (TREE_CODE (decl) == VAR_DECL
2298 || TREE_CODE (decl) == FUNCTION_DECL)
2299 mangle_decl (decl);
61a127b3
MM
2300}
2301
306ef644 2302/* Finish processing a complete template declaration. The PARMS are
36a117a5
MM
2303 the template parameters. */
2304
2305void
3a978d72 2306finish_template_decl (tree parms)
36a117a5
MM
2307{
2308 if (parms)
2309 end_template_decl ();
2310 else
2311 end_specialization ();
2312}
2313
509fc277 2314/* Finish processing a template-id (which names a type) of the form
36a117a5 2315 NAME < ARGS >. Return the TYPE_DECL for the type named by the
838dfd8a 2316 template-id. If ENTERING_SCOPE is nonzero we are about to enter
36a117a5
MM
2317 the scope of template-id indicated. */
2318
2319tree
3a978d72 2320finish_template_type (tree name, tree args, int entering_scope)
36a117a5
MM
2321{
2322 tree decl;
2323
2324 decl = lookup_template_class (name, args,
42eaed49
NS
2325 NULL_TREE, NULL_TREE, entering_scope,
2326 tf_error | tf_warning | tf_user);
36a117a5
MM
2327 if (decl != error_mark_node)
2328 decl = TYPE_STUB_DECL (decl);
2329
2330 return decl;
2331}
648f19f6 2332
ea6021e8
MM
2333/* Finish processing a BASE_CLASS with the indicated ACCESS_SPECIFIER.
2334 Return a TREE_LIST containing the ACCESS_SPECIFIER and the
2335 BASE_CLASS, or NULL_TREE if an error occurred. The
aba649ba 2336 ACCESS_SPECIFIER is one of
809e3e7f
NS
2337 access_{default,public,protected_private}_node. For a virtual base
2338 we set TREE_TYPE. */
ea6021e8
MM
2339
2340tree
dbbf88d1 2341finish_base_specifier (tree base, tree access, bool virtual_p)
ea6021e8 2342{
ea6021e8
MM
2343 tree result;
2344
dbbf88d1 2345 if (base == error_mark_node)
acb044ee
GDR
2346 {
2347 error ("invalid base-class specification");
2348 result = NULL_TREE;
2349 }
dbbf88d1 2350 else if (! is_aggr_type (base, 1))
ea6021e8 2351 result = NULL_TREE;
ea6021e8 2352 else
bb92901d 2353 {
dbbf88d1 2354 if (cp_type_quals (base) != 0)
bb92901d 2355 {
a82e1a7d 2356 error ("base class %qT has cv qualifiers", base);
dbbf88d1 2357 base = TYPE_MAIN_VARIANT (base);
bb92901d 2358 }
dbbf88d1 2359 result = build_tree_list (access, base);
809e3e7f
NS
2360 if (virtual_p)
2361 TREE_TYPE (result) = integer_type_node;
bb92901d 2362 }
ea6021e8
MM
2363
2364 return result;
2365}
61a127b3 2366
8f78f01f
MM
2367/* Issue a diagnostic that NAME cannot be found in SCOPE. DECL is
2368 what we found when we tried to do the lookup. */
22038b2c
NS
2369
2370void
8f78f01f 2371qualified_name_lookup_error (tree scope, tree name, tree decl)
22038b2c
NS
2372{
2373 if (TYPE_P (scope))
2374 {
2375 if (!COMPLETE_TYPE_P (scope))
a82e1a7d 2376 error ("incomplete type %qT used in nested name specifier", scope);
8f78f01f
MM
2377 else if (TREE_CODE (decl) == TREE_LIST)
2378 {
a82e1a7d 2379 error ("reference to %<%T::%D%> is ambiguous", scope, name);
8f78f01f
MM
2380 print_candidates (decl);
2381 }
22038b2c 2382 else
a82e1a7d 2383 error ("%qD is not a member of %qT", name, scope);
22038b2c
NS
2384 }
2385 else if (scope != global_namespace)
a82e1a7d 2386 error ("%qD is not a member of %qD", name, scope);
22038b2c 2387 else
a82e1a7d 2388 error ("%<::%D%> has not been declared", name);
22038b2c
NS
2389}
2390
b3445994
MM
2391/* ID_EXPRESSION is a representation of parsed, but unprocessed,
2392 id-expression. (See cp_parser_id_expression for details.) SCOPE,
2393 if non-NULL, is the type or namespace used to explicitly qualify
2394 ID_EXPRESSION. DECL is the entity to which that name has been
2395 resolved.
2396
2397 *CONSTANT_EXPRESSION_P is true if we are presently parsing a
2398 constant-expression. In that case, *NON_CONSTANT_EXPRESSION_P will
2399 be set to true if this expression isn't permitted in a
2400 constant-expression, but it is otherwise not set by this function.
2401 *ALLOW_NON_CONSTANT_EXPRESSION_P is true if we are parsing a
2402 constant-expression, but a non-constant expression is also
2403 permissible.
2404
2405 If an error occurs, and it is the kind of error that might cause
2406 the parser to abort a tentative parse, *ERROR_MSG is filled in. It
2407 is the caller's responsibility to issue the message. *ERROR_MSG
2408 will be a string with static storage duration, so the caller need
2409 not "free" it.
2410
2411 Return an expression for the entity, after issuing appropriate
2412 diagnostics. This function is also responsible for transforming a
2413 reference to a non-static member into a COMPONENT_REF that makes
2414 the use of "this" explicit.
2415
2416 Upon return, *IDK will be filled in appropriately. */
2417
2418tree
2419finish_id_expression (tree id_expression,
2420 tree decl,
2421 tree scope,
2422 cp_id_kind *idk,
2423 tree *qualifying_class,
67c03833
JM
2424 bool integral_constant_expression_p,
2425 bool allow_non_integral_constant_expression_p,
2426 bool *non_integral_constant_expression_p,
b3445994
MM
2427 const char **error_msg)
2428{
2429 /* Initialize the output parameters. */
2430 *idk = CP_ID_KIND_NONE;
2431 *error_msg = NULL;
2432
2433 if (id_expression == error_mark_node)
2434 return error_mark_node;
2435 /* If we have a template-id, then no further lookup is
2436 required. If the template-id was for a template-class, we
2437 will sometimes have a TYPE_DECL at this point. */
2438 else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
ee935db4 2439 || TREE_CODE (decl) == TYPE_DECL)
b3445994
MM
2440 ;
2441 /* Look up the name. */
2442 else
2443 {
2444 if (decl == error_mark_node)
2445 {
2446 /* Name lookup failed. */
4546865e
MM
2447 if (scope
2448 && (!TYPE_P (scope)
2449 || (!dependent_type_p (scope)
2450 && !(TREE_CODE (id_expression) == IDENTIFIER_NODE
2451 && IDENTIFIER_TYPENAME_P (id_expression)
2452 && dependent_type_p (TREE_TYPE (id_expression))))))
b3445994 2453 {
4546865e
MM
2454 /* If the qualifying type is non-dependent (and the name
2455 does not name a conversion operator to a dependent
2456 type), issue an error. */
8f78f01f 2457 qualified_name_lookup_error (scope, id_expression, decl);
b3445994
MM
2458 return error_mark_node;
2459 }
2460 else if (!scope)
2461 {
2462 /* It may be resolved via Koenig lookup. */
2463 *idk = CP_ID_KIND_UNQUALIFIED;
2464 return id_expression;
2465 }
4546865e
MM
2466 else
2467 decl = id_expression;
b3445994
MM
2468 }
2469 /* If DECL is a variable that would be out of scope under
2470 ANSI/ISO rules, but in scope in the ARM, name lookup
2471 will succeed. Issue a diagnostic here. */
2472 else
2473 decl = check_for_out_of_scope_variable (decl);
2474
2475 /* Remember that the name was used in the definition of
2476 the current class so that we can check later to see if
2477 the meaning would have been different after the class
2478 was entirely defined. */
2479 if (!scope && decl != error_mark_node)
2480 maybe_note_name_used_in_class (id_expression, decl);
2481 }
2482
2483 /* If we didn't find anything, or what we found was a type,
2484 then this wasn't really an id-expression. */
2485 if (TREE_CODE (decl) == TEMPLATE_DECL
2486 && !DECL_FUNCTION_TEMPLATE_P (decl))
2487 {
2488 *error_msg = "missing template arguments";
2489 return error_mark_node;
2490 }
2491 else if (TREE_CODE (decl) == TYPE_DECL
2492 || TREE_CODE (decl) == NAMESPACE_DECL)
2493 {
2494 *error_msg = "expected primary-expression";
2495 return error_mark_node;
2496 }
2497
2498 /* If the name resolved to a template parameter, there is no
931a9c05
GB
2499 need to look it up again later. */
2500 if ((TREE_CODE (decl) == CONST_DECL && DECL_TEMPLATE_PARM_P (decl))
2501 || TREE_CODE (decl) == TEMPLATE_PARM_INDEX)
b3445994 2502 {
db24eb1f
NS
2503 tree r;
2504
b3445994 2505 *idk = CP_ID_KIND_NONE;
931a9c05
GB
2506 if (TREE_CODE (decl) == TEMPLATE_PARM_INDEX)
2507 decl = TEMPLATE_PARM_DECL (decl);
db24eb1f
NS
2508 r = convert_from_reference (DECL_INITIAL (decl));
2509
67c03833 2510 if (integral_constant_expression_p
68deab91 2511 && !dependent_type_p (TREE_TYPE (decl))
db24eb1f 2512 && !(INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (r))))
931a9c05 2513 {
67c03833 2514 if (!allow_non_integral_constant_expression_p)
a82e1a7d 2515 error ("template parameter %qD of type %qT is not allowed in "
931a9c05
GB
2516 "an integral constant expression because it is not of "
2517 "integral or enumeration type", decl, TREE_TYPE (decl));
67c03833 2518 *non_integral_constant_expression_p = true;
931a9c05 2519 }
db24eb1f 2520 return r;
931a9c05
GB
2521 }
2522 /* Similarly, we resolve enumeration constants to their
2523 underlying values. */
2524 else if (TREE_CODE (decl) == CONST_DECL)
2525 {
2526 *idk = CP_ID_KIND_NONE;
2527 if (!processing_template_decl)
b3445994
MM
2528 return DECL_INITIAL (decl);
2529 return decl;
2530 }
2531 else
2532 {
2533 bool dependent_p;
2534
2535 /* If the declaration was explicitly qualified indicate
2536 that. The semantics of `A::f(3)' are different than
2537 `f(3)' if `f' is virtual. */
2538 *idk = (scope
2539 ? CP_ID_KIND_QUALIFIED
2540 : (TREE_CODE (decl) == TEMPLATE_ID_EXPR
2541 ? CP_ID_KIND_TEMPLATE_ID
2542 : CP_ID_KIND_UNQUALIFIED));
2543
2544
2545 /* [temp.dep.expr]
2546
2547 An id-expression is type-dependent if it contains an
2548 identifier that was declared with a dependent type.
2549
b3445994
MM
2550 The standard is not very specific about an id-expression that
2551 names a set of overloaded functions. What if some of them
2552 have dependent types and some of them do not? Presumably,
2553 such a name should be treated as a dependent name. */
2554 /* Assume the name is not dependent. */
2555 dependent_p = false;
2556 if (!processing_template_decl)
2557 /* No names are dependent outside a template. */
2558 ;
2559 /* A template-id where the name of the template was not resolved
2560 is definitely dependent. */
2561 else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
2562 && (TREE_CODE (TREE_OPERAND (decl, 0))
2563 == IDENTIFIER_NODE))
2564 dependent_p = true;
2565 /* For anything except an overloaded function, just check its
2566 type. */
2567 else if (!is_overloaded_fn (decl))
2568 dependent_p
2569 = dependent_type_p (TREE_TYPE (decl));
2570 /* For a set of overloaded functions, check each of the
2571 functions. */
2572 else
2573 {
2574 tree fns = decl;
2575
2576 if (BASELINK_P (fns))
2577 fns = BASELINK_FUNCTIONS (fns);
2578
2579 /* For a template-id, check to see if the template
2580 arguments are dependent. */
2581 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
2582 {
2583 tree args = TREE_OPERAND (fns, 1);
2584 dependent_p = any_dependent_template_arguments_p (args);
2585 /* The functions are those referred to by the
2586 template-id. */
2587 fns = TREE_OPERAND (fns, 0);
2588 }
2589
2590 /* If there are no dependent template arguments, go through
cd0be382 2591 the overloaded functions. */
b3445994
MM
2592 while (fns && !dependent_p)
2593 {
2594 tree fn = OVL_CURRENT (fns);
2595
2596 /* Member functions of dependent classes are
2597 dependent. */
2598 if (TREE_CODE (fn) == FUNCTION_DECL
2599 && type_dependent_expression_p (fn))
2600 dependent_p = true;
2601 else if (TREE_CODE (fn) == TEMPLATE_DECL
2602 && dependent_template_p (fn))
2603 dependent_p = true;
2604
2605 fns = OVL_NEXT (fns);
2606 }
2607 }
2608
2609 /* If the name was dependent on a template parameter, we will
2610 resolve the name at instantiation time. */
2611 if (dependent_p)
2612 {
2613 /* Create a SCOPE_REF for qualified names, if the scope is
2614 dependent. */
2615 if (scope)
2616 {
2617 if (TYPE_P (scope))
2618 *qualifying_class = scope;
2619 /* Since this name was dependent, the expression isn't
2620 constant -- yet. No error is issued because it might
2621 be constant when things are instantiated. */
67c03833
JM
2622 if (integral_constant_expression_p)
2623 *non_integral_constant_expression_p = true;
b3445994
MM
2624 if (TYPE_P (scope) && dependent_type_p (scope))
2625 return build_nt (SCOPE_REF, scope, id_expression);
2626 else if (TYPE_P (scope) && DECL_P (decl))
db24eb1f
NS
2627 return convert_from_reference
2628 (build2 (SCOPE_REF, TREE_TYPE (decl), scope, id_expression));
b3445994 2629 else
db24eb1f 2630 return convert_from_reference (decl);
b3445994
MM
2631 }
2632 /* A TEMPLATE_ID already contains all the information we
2633 need. */
2634 if (TREE_CODE (id_expression) == TEMPLATE_ID_EXPR)
2635 return id_expression;
10b1d5e7 2636 *idk = CP_ID_KIND_UNQUALIFIED_DEPENDENT;
5a98fa7b
MM
2637 /* If we found a variable, then name lookup during the
2638 instantiation will always resolve to the same VAR_DECL
2639 (or an instantiation thereof). */
3c398f34
MM
2640 if (TREE_CODE (decl) == VAR_DECL
2641 || TREE_CODE (decl) == PARM_DECL)
db24eb1f 2642 return convert_from_reference (decl);
bad1f462
KL
2643 /* The same is true for FIELD_DECL, but we also need to
2644 make sure that the syntax is correct. */
2645 else if (TREE_CODE (decl) == FIELD_DECL)
a26ddf11
KL
2646 {
2647 /* Since SCOPE is NULL here, this is an unqualified name.
2648 Access checking has been performed during name lookup
2649 already. Turn off checking to avoid duplicate errors. */
2650 push_deferring_access_checks (dk_no_check);
2651 decl = finish_non_static_data_member
2652 (decl, current_class_ref,
2653 /*qualifying_scope=*/NULL_TREE);
2654 pop_deferring_access_checks ();
2655 return decl;
2656 }
10b1d5e7 2657 return id_expression;
b3445994
MM
2658 }
2659
2660 /* Only certain kinds of names are allowed in constant
db24eb1f
NS
2661 expression. Enumerators and template parameters have already
2662 been handled above. */
c30b4add 2663 if (integral_constant_expression_p
100d337a
MA
2664 && ! DECL_INTEGRAL_CONSTANT_VAR_P (decl)
2665 && ! builtin_valid_in_constant_expr_p (decl))
b3445994 2666 {
c30b4add 2667 if (!allow_non_integral_constant_expression_p)
b3445994 2668 {
a82e1a7d 2669 error ("%qD cannot appear in a constant-expression", decl);
c30b4add 2670 return error_mark_node;
b3445994 2671 }
c30b4add 2672 *non_integral_constant_expression_p = true;
b3445994 2673 }
415d4636
MM
2674
2675 if (TREE_CODE (decl) == NAMESPACE_DECL)
9e95d15f 2676 {
a82e1a7d 2677 error ("use of namespace %qD as expression", decl);
9e95d15f
NS
2678 return error_mark_node;
2679 }
2680 else if (DECL_CLASS_TEMPLATE_P (decl))
2681 {
a82e1a7d 2682 error ("use of class template %qT as expression", decl);
9e95d15f
NS
2683 return error_mark_node;
2684 }
2685 else if (TREE_CODE (decl) == TREE_LIST)
2686 {
2687 /* Ambiguous reference to base members. */
a82e1a7d 2688 error ("request for member %qD is ambiguous in "
9e95d15f
NS
2689 "multiple inheritance lattice", id_expression);
2690 print_candidates (decl);
2691 return error_mark_node;
2692 }
415d4636
MM
2693
2694 /* Mark variable-like entities as used. Functions are similarly
2695 marked either below or after overload resolution. */
2696 if (TREE_CODE (decl) == VAR_DECL
2697 || TREE_CODE (decl) == PARM_DECL
2698 || TREE_CODE (decl) == RESULT_DECL)
2699 mark_used (decl);
2700
2701 if (scope)
2702 {
2703 decl = (adjust_result_of_qualified_name_lookup
2704 (decl, scope, current_class_type));
e20bcc5e
JH
2705
2706 if (TREE_CODE (decl) == FUNCTION_DECL)
2707 mark_used (decl);
2708
415d4636
MM
2709 if (TREE_CODE (decl) == FIELD_DECL || BASELINK_P (decl))
2710 *qualifying_class = scope;
db24eb1f
NS
2711 else
2712 {
2713 tree r = convert_from_reference (decl);
2714
2715 if (processing_template_decl
2716 && TYPE_P (scope))
2717 r = build2 (SCOPE_REF, TREE_TYPE (r), scope, decl);
2718 decl = r;
2719 }
415d4636 2720 }
9e95d15f 2721 else if (TREE_CODE (decl) == FIELD_DECL)
a26ddf11
KL
2722 {
2723 /* Since SCOPE is NULL here, this is an unqualified name.
2724 Access checking has been performed during name lookup
2725 already. Turn off checking to avoid duplicate errors. */
2726 push_deferring_access_checks (dk_no_check);
2727 decl = finish_non_static_data_member (decl, current_class_ref,
2728 /*qualifying_scope=*/NULL_TREE);
2729 pop_deferring_access_checks ();
2730 }
9e95d15f
NS
2731 else if (is_overloaded_fn (decl))
2732 {
2733 tree first_fn = OVL_CURRENT (decl);
b3445994 2734
9e95d15f
NS
2735 if (TREE_CODE (first_fn) == TEMPLATE_DECL)
2736 first_fn = DECL_TEMPLATE_RESULT (first_fn);
415d4636
MM
2737
2738 if (!really_overloaded_fn (decl))
2739 mark_used (first_fn);
2740
9e95d15f 2741 if (TREE_CODE (first_fn) == FUNCTION_DECL
821eaf2a
MM
2742 && DECL_FUNCTION_MEMBER_P (first_fn)
2743 && !shared_member_p (decl))
9e95d15f
NS
2744 {
2745 /* A set of member functions. */
2746 decl = maybe_dummy_object (DECL_CONTEXT (first_fn), 0);
2747 return finish_class_member_access_expr (decl, id_expression);
2748 }
9e95d15f
NS
2749 }
2750 else
2751 {
2752 if (TREE_CODE (decl) == VAR_DECL
2753 || TREE_CODE (decl) == PARM_DECL
2754 || TREE_CODE (decl) == RESULT_DECL)
2755 {
2756 tree context = decl_function_context (decl);
2757
2758 if (context != NULL_TREE && context != current_function_decl
2759 && ! TREE_STATIC (decl))
2760 {
2761 error ("use of %s from containing function",
2762 (TREE_CODE (decl) == VAR_DECL
a82e1a7d
GDR
2763 ? "%<auto%> variable" : "parameter"));
2764 cp_error_at (" %q#D declared here", decl);
9e95d15f
NS
2765 return error_mark_node;
2766 }
2767 }
2768
2769 if (DECL_P (decl) && DECL_NONLOCAL (decl)
2770 && DECL_CLASS_SCOPE_P (decl)
2771 && DECL_CONTEXT (decl) != current_class_type)
2772 {
2773 tree path;
2774
2775 path = currently_open_derived_class (DECL_CONTEXT (decl));
2776 perform_or_defer_access_check (TYPE_BINFO (path), decl);
2777 }
2778
db24eb1f 2779 decl = convert_from_reference (decl);
9e95d15f
NS
2780 }
2781
b3445994
MM
2782 /* Resolve references to variables of anonymous unions
2783 into COMPONENT_REFs. */
2784 if (TREE_CODE (decl) == ALIAS_DECL)
6de9cd9a 2785 decl = unshare_expr (DECL_INITIAL (decl));
b3445994
MM
2786 }
2787
2788 if (TREE_DEPRECATED (decl))
2789 warn_deprecated_use (decl);
2790
2791 return decl;
2792}
2793
0213a355
JM
2794/* Implement the __typeof keyword: Return the type of EXPR, suitable for
2795 use as a type-specifier. */
2796
b894fc05 2797tree
3a978d72 2798finish_typeof (tree expr)
b894fc05 2799{
65a5559b
MM
2800 tree type;
2801
dffbbe80 2802 if (type_dependent_expression_p (expr))
b894fc05 2803 {
65a5559b 2804 type = make_aggr_type (TYPEOF_TYPE);
eb34af89 2805 TYPEOF_TYPE_EXPR (type) = expr;
b894fc05 2806
65a5559b 2807 return type;
b894fc05
JM
2808 }
2809
65a5559b
MM
2810 type = TREE_TYPE (expr);
2811
2812 if (!type || type == unknown_type_node)
2813 {
a82e1a7d 2814 error ("type of %qE is unknown", expr);
65a5559b
MM
2815 return error_mark_node;
2816 }
2817
2818 return type;
b894fc05 2819}
558475f0 2820
3eb24f73 2821/* Called from expand_body via walk_tree. Replace all AGGR_INIT_EXPRs
6de9cd9a 2822 with equivalent CALL_EXPRs. */
3eb24f73
MM
2823
2824static tree
3a978d72 2825simplify_aggr_init_exprs_r (tree* tp,
9eeb200f
JM
2826 int* walk_subtrees,
2827 void* data ATTRIBUTE_UNUSED)
3eb24f73 2828{
22e92ac3
MM
2829 /* We don't need to walk into types; there's nothing in a type that
2830 needs simplification. (And, furthermore, there are places we
2831 actively don't want to go. For example, we don't want to wander
2832 into the default arguments for a FUNCTION_DECL that appears in a
2833 CALL_EXPR.) */
9eeb200f 2834 if (TYPE_P (*tp))
22e92ac3
MM
2835 {
2836 *walk_subtrees = 0;
2837 return NULL_TREE;
2838 }
2839 /* Only AGGR_INIT_EXPRs are interesting. */
9eeb200f 2840 else if (TREE_CODE (*tp) != AGGR_INIT_EXPR)
3eb24f73
MM
2841 return NULL_TREE;
2842
9eeb200f
JM
2843 simplify_aggr_init_expr (tp);
2844
2845 /* Keep iterating. */
2846 return NULL_TREE;
2847}
2848
2849/* Replace the AGGR_INIT_EXPR at *TP with an equivalent CALL_EXPR. This
2850 function is broken out from the above for the benefit of the tree-ssa
2851 project. */
2852
2853void
2854simplify_aggr_init_expr (tree *tp)
2855{
2856 tree aggr_init_expr = *tp;
2857
3eb24f73 2858 /* Form an appropriate CALL_EXPR. */
9eeb200f
JM
2859 tree fn = TREE_OPERAND (aggr_init_expr, 0);
2860 tree args = TREE_OPERAND (aggr_init_expr, 1);
2861 tree slot = TREE_OPERAND (aggr_init_expr, 2);
2692eb7d 2862 tree type = TREE_TYPE (slot);
9eeb200f
JM
2863
2864 tree call_expr;
2865 enum style_t { ctor, arg, pcc } style;
4977bab6 2866
3eb24f73 2867 if (AGGR_INIT_VIA_CTOR_P (aggr_init_expr))
4977bab6
ZW
2868 style = ctor;
2869#ifdef PCC_STATIC_STRUCT_RETURN
2870 else if (1)
2871 style = pcc;
2872#endif
4977bab6 2873 else
315fb5db
NS
2874 {
2875 gcc_assert (TREE_ADDRESSABLE (type));
2876 style = arg;
2877 }
4977bab6
ZW
2878
2879 if (style == ctor || style == arg)
3eb24f73 2880 {
4977bab6
ZW
2881 /* Pass the address of the slot. If this is a constructor, we
2882 replace the first argument; otherwise, we tack on a new one. */
9eeb200f
JM
2883 tree addr;
2884
4977bab6
ZW
2885 if (style == ctor)
2886 args = TREE_CHAIN (args);
2887
dffd7eb6 2888 cxx_mark_addressable (slot);
2692eb7d 2889 addr = build1 (ADDR_EXPR, build_pointer_type (type), slot);
9eeb200f
JM
2890 if (style == arg)
2891 {
2892 /* The return type might have different cv-quals from the slot. */
2893 tree fntype = TREE_TYPE (TREE_TYPE (fn));
315fb5db
NS
2894
2895 gcc_assert (TREE_CODE (fntype) == FUNCTION_TYPE
2896 || TREE_CODE (fntype) == METHOD_TYPE);
9eeb200f
JM
2897 addr = convert (build_pointer_type (TREE_TYPE (fntype)), addr);
2898 }
2899
2900 args = tree_cons (NULL_TREE, addr, args);
3eb24f73 2901 }
4977bab6 2902
f293ce4b
RS
2903 call_expr = build3 (CALL_EXPR,
2904 TREE_TYPE (TREE_TYPE (TREE_TYPE (fn))),
2905 fn, args, NULL_TREE);
3eb24f73 2906
4977bab6 2907 if (style == arg)
89ea02fb
JM
2908 /* Tell the backend that we've added our return slot to the argument
2909 list. */
2910 CALL_EXPR_HAS_RETURN_SLOT_ADDR (call_expr) = 1;
4977bab6 2911 else if (style == pcc)
3eb24f73 2912 {
4977bab6
ZW
2913 /* If we're using the non-reentrant PCC calling convention, then we
2914 need to copy the returned value out of the static buffer into the
2915 SLOT. */
78757caa 2916 push_deferring_access_checks (dk_no_check);
46af705a
JDA
2917 call_expr = build_aggr_init (slot, call_expr,
2918 DIRECT_BIND | LOOKUP_ONLYCONVERTING);
78757caa 2919 pop_deferring_access_checks ();
3eb24f73 2920 }
3eb24f73 2921
3eb24f73 2922 *tp = call_expr;
3eb24f73
MM
2923}
2924
31f8e4f3
MM
2925/* Emit all thunks to FN that should be emitted when FN is emitted. */
2926
2927static void
3a978d72 2928emit_associated_thunks (tree fn)
31f8e4f3
MM
2929{
2930 /* When we use vcall offsets, we emit thunks with the virtual
2931 functions to which they thunk. The whole point of vcall offsets
2932 is so that you can know statically the entire set of thunks that
2933 will ever be needed for a given virtual function, thereby
2934 enabling you to output all the thunks with the function itself. */
3461fba7 2935 if (DECL_VIRTUAL_P (fn))
31f8e4f3 2936 {
bb5e8a7f 2937 tree thunk;
4977bab6 2938
bb5e8a7f 2939 for (thunk = DECL_THUNKS (fn); thunk; thunk = TREE_CHAIN (thunk))
4977bab6 2940 {
e00853fd 2941 if (!THUNK_ALIAS (thunk))
4977bab6 2942 {
bb885938
NS
2943 use_thunk (thunk, /*emit_p=*/1);
2944 if (DECL_RESULT_THUNK_P (thunk))
2945 {
2946 tree probe;
2947
2948 for (probe = DECL_THUNKS (thunk);
2949 probe; probe = TREE_CHAIN (probe))
2950 use_thunk (probe, /*emit_p=*/1);
2951 }
4977bab6 2952 }
bb885938 2953 else
50bc768d 2954 gcc_assert (!DECL_THUNKS (thunk));
4977bab6 2955 }
31f8e4f3
MM
2956 }
2957}
2958
558475f0
MM
2959/* Generate RTL for FN. */
2960
2961void
3a978d72 2962expand_body (tree fn)
558475f0 2963{
367aa585 2964 tree saved_function;
6de9cd9a 2965
92788413
MM
2966 /* Compute the appropriate object-file linkage for inline
2967 functions. */
79065db2 2968 if (DECL_DECLARED_INLINE_P (fn))
92788413
MM
2969 import_export_decl (fn);
2970
4f8e1232
MM
2971 /* If FN is external, then there's no point in generating RTL for
2972 it. This situation can arise with an inline function under
83662e2b 2973 `-fexternal-templates'; we instantiate the function, even though
4f8e1232
MM
2974 we're not planning on emitting it, in case we get a chance to
2975 inline it. */
2976 if (DECL_EXTERNAL (fn))
2977 return;
2978
4985cde3 2979 /* ??? When is this needed? */
367aa585 2980 saved_function = current_function_decl;
367aa585 2981
de81ffd4
JH
2982 /* Emit any thunks that should be emitted at the same time as FN. */
2983 emit_associated_thunks (fn);
2984
fa3ee801
DJ
2985 /* This function is only called from cgraph, or recursively from
2986 emit_associated_thunks. In neither case should we be currently
2987 generating trees for a function. */
2988 gcc_assert (function_depth == 0);
2989
0f0377f6 2990 tree_rest_of_compilation (fn);
d658cd4c 2991
367aa585 2992 current_function_decl = saved_function;
ea11ca7e 2993
85b22f78
NS
2994 if (DECL_CLONED_FUNCTION_P (fn))
2995 {
2996 /* If this is a clone, go through the other clones now and mark
2997 their parameters used. We have to do that here, as we don't
2998 know whether any particular clone will be expanded, and
2999 therefore cannot pick one arbitrarily. */
3000 tree probe;
3001
3002 for (probe = TREE_CHAIN (DECL_CLONED_FUNCTION (fn));
3003 probe && DECL_CLONED_FUNCTION_P (probe);
3004 probe = TREE_CHAIN (probe))
3005 {
3006 tree parms;
3007
3008 for (parms = DECL_ARGUMENTS (probe);
3009 parms; parms = TREE_CHAIN (parms))
3010 TREE_USED (parms) = 1;
3011 }
3012 }
558475f0 3013}
54f7877c 3014
8cd2462c
JH
3015/* Generate RTL for FN. */
3016
3017void
5671bf27 3018expand_or_defer_fn (tree fn)
8cd2462c
JH
3019{
3020 /* When the parser calls us after finishing the body of a template
c353b8e3
MM
3021 function, we don't really want to expand the body. */
3022 if (processing_template_decl)
8cd2462c
JH
3023 {
3024 /* Normally, collection only occurs in rest_of_compilation. So,
3025 if we don't collect here, we never collect junk generated
3026 during the processing of templates until we hit a
3027 non-template function. */
3028 ggc_collect ();
3029 return;
3030 }
3031
3032 /* Replace AGGR_INIT_EXPRs with appropriate CALL_EXPRs. */
3033 walk_tree_without_duplicates (&DECL_SAVED_TREE (fn),
3034 simplify_aggr_init_exprs_r,
3035 NULL);
3036
3037 /* If this is a constructor or destructor body, we have to clone
3038 it. */
3039 if (maybe_clone_body (fn))
3040 {
3041 /* We don't want to process FN again, so pretend we've written
3042 it out, even though we haven't. */
3043 TREE_ASM_WRITTEN (fn) = 1;
3044 return;
3045 }
3046
4684cd27
MM
3047 /* If this function is marked with the constructor attribute, add it
3048 to the list of functions to be called along with constructors
3049 from static duration objects. */
3050 if (DECL_STATIC_CONSTRUCTOR (fn))
3051 static_ctors = tree_cons (NULL_TREE, fn, static_ctors);
3052
3053 /* If this function is marked with the destructor attribute, add it
3054 to the list of functions to be called along with destructors from
3055 static duration objects. */
3056 if (DECL_STATIC_DESTRUCTOR (fn))
3057 static_dtors = tree_cons (NULL_TREE, fn, static_dtors);
3058
3059 /* We make a decision about linkage for these functions at the end
3060 of the compilation. Until that point, we do not want the back
3061 end to output them -- but we do want it to see the bodies of
1a10290c 3062 these functions so that it can inline them as appropriate. */
4684cd27
MM
3063 if (DECL_DECLARED_INLINE_P (fn) || DECL_IMPLICIT_INSTANTIATION (fn))
3064 {
3065 if (!at_eof)
3066 {
3067 DECL_EXTERNAL (fn) = 1;
3068 DECL_NOT_REALLY_EXTERN (fn) = 1;
3069 note_vague_linkage_fn (fn);
3070 }
3071 else
3072 import_export_decl (fn);
1a10290c
MM
3073
3074 /* If the user wants us to keep all inline functions, then mark
3075 this function as needed so that finish_file will make sure to
3076 output it later. */
3077 if (flag_keep_inline_functions && DECL_DECLARED_INLINE_P (fn))
3078 mark_needed (fn);
4684cd27
MM
3079 }
3080
8cd2462c
JH
3081 /* There's no reason to do any of the work here if we're only doing
3082 semantic analysis; this code just generates RTL. */
3083 if (flag_syntax_only)
3084 return;
3085
99edd65d
RH
3086 function_depth++;
3087
e4d91027 3088 /* Expand or defer, at the whim of the compilation unit manager. */
6b00c969 3089 cgraph_finalize_function (fn, function_depth > 1);
99edd65d
RH
3090
3091 function_depth--;
8cd2462c
JH
3092}
3093
6de9cd9a
DN
3094struct nrv_data
3095{
3096 tree var;
3097 tree result;
3098 htab_t visited;
3099};
0d97bf4c 3100
6de9cd9a
DN
3101/* Helper function for walk_tree, used by finalize_nrv below. */
3102
3103static tree
3104finalize_nrv_r (tree* tp, int* walk_subtrees, void* data)
0d97bf4c 3105{
6de9cd9a
DN
3106 struct nrv_data *dp = (struct nrv_data *)data;
3107 void **slot;
07b2f2fd
JM
3108
3109 /* No need to walk into types. There wouldn't be any need to walk into
3110 non-statements, except that we have to consider STMT_EXPRs. */
0d97bf4c
JM
3111 if (TYPE_P (*tp))
3112 *walk_subtrees = 0;
6de9cd9a
DN
3113 /* Change all returns to just refer to the RESULT_DECL; this is a nop,
3114 but differs from using NULL_TREE in that it indicates that we care
3115 about the value of the RESULT_DECL. */
5088b058
RH
3116 else if (TREE_CODE (*tp) == RETURN_EXPR)
3117 TREE_OPERAND (*tp, 0) = dp->result;
6de9cd9a
DN
3118 /* Change all cleanups for the NRV to only run when an exception is
3119 thrown. */
07b2f2fd 3120 else if (TREE_CODE (*tp) == CLEANUP_STMT
6de9cd9a 3121 && CLEANUP_DECL (*tp) == dp->var)
659e5a7a 3122 CLEANUP_EH_ONLY (*tp) = 1;
350fae66 3123 /* Replace the DECL_EXPR for the NRV with an initialization of the
6de9cd9a 3124 RESULT_DECL, if needed. */
350fae66
RK
3125 else if (TREE_CODE (*tp) == DECL_EXPR
3126 && DECL_EXPR_DECL (*tp) == dp->var)
6de9cd9a
DN
3127 {
3128 tree init;
3129 if (DECL_INITIAL (dp->var)
3130 && DECL_INITIAL (dp->var) != error_mark_node)
3131 {
f293ce4b
RS
3132 init = build2 (INIT_EXPR, void_type_node, dp->result,
3133 DECL_INITIAL (dp->var));
6de9cd9a
DN
3134 DECL_INITIAL (dp->var) = error_mark_node;
3135 }
3136 else
543a0daa 3137 init = build_empty_stmt ();
6de9cd9a 3138 SET_EXPR_LOCUS (init, EXPR_LOCUS (*tp));
6de9cd9a
DN
3139 *tp = init;
3140 }
3141 /* And replace all uses of the NRV with the RESULT_DECL. */
3142 else if (*tp == dp->var)
3143 *tp = dp->result;
3144
3145 /* Avoid walking into the same tree more than once. Unfortunately, we
3146 can't just use walk_tree_without duplicates because it would only call
3147 us for the first occurrence of dp->var in the function body. */
3148 slot = htab_find_slot (dp->visited, *tp, INSERT);
3149 if (*slot)
3150 *walk_subtrees = 0;
3151 else
3152 *slot = *tp;
0d97bf4c
JM
3153
3154 /* Keep iterating. */
3155 return NULL_TREE;
3156}
3157
6de9cd9a 3158/* Called from finish_function to implement the named return value
5088b058 3159 optimization by overriding all the RETURN_EXPRs and pertinent
6de9cd9a
DN
3160 CLEANUP_STMTs and replacing all occurrences of VAR with RESULT, the
3161 RESULT_DECL for the function. */
f444e36b 3162
4985cde3 3163void
6de9cd9a 3164finalize_nrv (tree *tp, tree var, tree result)
f444e36b 3165{
6de9cd9a
DN
3166 struct nrv_data data;
3167
3168 /* Copy debugging information from VAR to RESULT. */
3169 DECL_NAME (result) = DECL_NAME (var);
b785f485
RH
3170 DECL_ARTIFICIAL (result) = DECL_ARTIFICIAL (var);
3171 DECL_IGNORED_P (result) = DECL_IGNORED_P (var);
6de9cd9a
DN
3172 DECL_SOURCE_LOCATION (result) = DECL_SOURCE_LOCATION (var);
3173 DECL_ABSTRACT_ORIGIN (result) = DECL_ABSTRACT_ORIGIN (var);
3174 /* Don't forget that we take its address. */
3175 TREE_ADDRESSABLE (result) = TREE_ADDRESSABLE (var);
3176
3177 data.var = var;
3178 data.result = result;
3179 data.visited = htab_create (37, htab_hash_pointer, htab_eq_pointer, NULL);
3180 walk_tree (tp, finalize_nrv_r, &data, 0);
3181 htab_delete (data.visited);
b850de4f
MM
3182}
3183
54f7877c
MM
3184/* Perform initialization related to this module. */
3185
3186void
3a978d72 3187init_cp_semantics (void)
54f7877c 3188{
54f7877c 3189}
cf22909c
KL
3190
3191#include "gt-cp-semantics.h"