tree.h (TREE_CHECK2, [...]): New macros.
[official-gcc.git] / gcc / cp / semantics.c
blobe7d377173bb6ca991ef12d71de86f572962e39bf
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.
6 Copyright (C) 1998, 1999, 2000, 2001, 2002,
7 2003, 2004 Free Software Foundation, Inc.
8 Written by Mark Mitchell (mmitchell@usa.net) based on code found
9 formerly in parse.y and pt.c.
11 This file is part of GCC.
13 GCC is free software; you can redistribute it and/or modify it
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.
18 GCC is distributed in the hope that it will be useful, but
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.
23 You should have received a copy of the GNU General Public License
24 along with GCC; see the file COPYING. If not, write to the Free
25 Software Foundation, 59 Temple Place - Suite 330, Boston, MA
26 02111-1307, USA. */
28 #include "config.h"
29 #include "system.h"
30 #include "coretypes.h"
31 #include "tm.h"
32 #include "tree.h"
33 #include "cp-tree.h"
34 #include "tree-inline.h"
35 #include "except.h"
36 #include "lex.h"
37 #include "toplev.h"
38 #include "flags.h"
39 #include "rtl.h"
40 #include "expr.h"
41 #include "output.h"
42 #include "timevar.h"
43 #include "debug.h"
44 #include "cgraph.h"
46 /* There routines provide a modular interface to perform many parsing
47 operations. They may therefore be used during actual parsing, or
48 during template instantiation, which may be regarded as a
49 degenerate form of parsing. Since the current g++ parser is
50 lacking in several respects, and will be reimplemented, we are
51 attempting to move most code that is not directly related to
52 parsing into this file; that will make implementing the new parser
53 much easier since it will be able to make use of these routines. */
55 static tree maybe_convert_cond (tree);
56 static tree simplify_aggr_init_exprs_r (tree *, int *, void *);
57 static void emit_associated_thunks (tree);
58 static void genrtl_try_block (tree);
59 static void genrtl_eh_spec_block (tree);
60 static void genrtl_handler (tree);
61 static void cp_expand_stmt (tree);
64 /* Finish processing the COND, the SUBSTMT condition for STMT. */
66 #define FINISH_COND(COND, STMT, SUBSTMT) \
67 do { \
68 if (last_tree != (STMT)) \
69 { \
70 RECHAIN_STMTS (STMT, SUBSTMT); \
71 if (!processing_template_decl) \
72 { \
73 (COND) = build_tree_list (SUBSTMT, COND); \
74 (SUBSTMT) = (COND); \
75 } \
76 } \
77 else \
78 (SUBSTMT) = (COND); \
79 } while (0)
81 /* Deferred Access Checking Overview
82 ---------------------------------
84 Most C++ expressions and declarations require access checking
85 to be performed during parsing. However, in several cases,
86 this has to be treated differently.
88 For member declarations, access checking has to be deferred
89 until more information about the declaration is known. For
90 example:
92 class A {
93 typedef int X;
94 public:
95 X f();
98 A::X A::f();
99 A::X g();
101 When we are parsing the function return type `A::X', we don't
102 really know if this is allowed until we parse the function name.
104 Furthermore, some contexts require that access checking is
105 never performed at all. These include class heads, and template
106 instantiations.
108 Typical use of access checking functions is described here:
110 1. When we enter a context that requires certain access checking
111 mode, the function `push_deferring_access_checks' is called with
112 DEFERRING argument specifying the desired mode. Access checking
113 may be performed immediately (dk_no_deferred), deferred
114 (dk_deferred), or not performed (dk_no_check).
116 2. When a declaration such as a type, or a variable, is encountered,
117 the function `perform_or_defer_access_check' is called. It
118 maintains a TREE_LIST of all deferred checks.
120 3. The global `current_class_type' or `current_function_decl' is then
121 setup by the parser. `enforce_access' relies on these information
122 to check access.
124 4. Upon exiting the context mentioned in step 1,
125 `perform_deferred_access_checks' is called to check all declaration
126 stored in the TREE_LIST. `pop_deferring_access_checks' is then
127 called to restore the previous access checking mode.
129 In case of parsing error, we simply call `pop_deferring_access_checks'
130 without `perform_deferred_access_checks'. */
132 /* Data for deferred access checking. */
133 static GTY(()) deferred_access *deferred_access_stack;
134 static GTY(()) deferred_access *deferred_access_free_list;
136 /* Save the current deferred access states and start deferred
137 access checking iff DEFER_P is true. */
139 void
140 push_deferring_access_checks (deferring_kind deferring)
142 deferred_access *d;
144 /* For context like template instantiation, access checking
145 disabling applies to all nested context. */
146 if (deferred_access_stack
147 && deferred_access_stack->deferring_access_checks_kind == dk_no_check)
148 deferring = dk_no_check;
150 /* Recycle previously used free store if available. */
151 if (deferred_access_free_list)
153 d = deferred_access_free_list;
154 deferred_access_free_list = d->next;
156 else
157 d = ggc_alloc (sizeof (deferred_access));
159 d->next = deferred_access_stack;
160 d->deferred_access_checks = NULL_TREE;
161 d->deferring_access_checks_kind = deferring;
162 deferred_access_stack = d;
165 /* Resume deferring access checks again after we stopped doing
166 this previously. */
168 void
169 resume_deferring_access_checks (void)
171 if (deferred_access_stack->deferring_access_checks_kind == dk_no_deferred)
172 deferred_access_stack->deferring_access_checks_kind = dk_deferred;
175 /* Stop deferring access checks. */
177 void
178 stop_deferring_access_checks (void)
180 if (deferred_access_stack->deferring_access_checks_kind == dk_deferred)
181 deferred_access_stack->deferring_access_checks_kind = dk_no_deferred;
184 /* Discard the current deferred access checks and restore the
185 previous states. */
187 void
188 pop_deferring_access_checks (void)
190 deferred_access *d = deferred_access_stack;
191 deferred_access_stack = d->next;
193 /* Remove references to access checks TREE_LIST. */
194 d->deferred_access_checks = NULL_TREE;
196 /* Store in free list for later use. */
197 d->next = deferred_access_free_list;
198 deferred_access_free_list = d;
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.
206 tree
207 get_deferred_access_checks (void)
209 return deferred_access_stack->deferred_access_checks;
212 /* Take current deferred checks and combine with the
213 previous states if we also defer checks previously.
214 Otherwise perform checks now. */
216 void
217 pop_to_parent_deferring_access_checks (void)
219 tree deferred_check = get_deferred_access_checks ();
220 deferred_access *d1 = deferred_access_stack;
221 deferred_access *d2 = deferred_access_stack->next;
222 deferred_access *d3 = deferred_access_stack->next->next;
224 /* Temporary swap the order of the top two states, just to make
225 sure the garbage collector will not reclaim the memory during
226 processing below. */
227 deferred_access_stack = d2;
228 d2->next = d1;
229 d1->next = d3;
231 for ( ; deferred_check; deferred_check = TREE_CHAIN (deferred_check))
232 /* Perform deferred check if required. */
233 perform_or_defer_access_check (TREE_PURPOSE (deferred_check),
234 TREE_VALUE (deferred_check));
236 deferred_access_stack = d1;
237 d1->next = d2;
238 d2->next = d3;
239 pop_deferring_access_checks ();
242 /* Perform the deferred access checks.
244 After performing the checks, we still have to keep the list
245 `deferred_access_stack->deferred_access_checks' since we may want
246 to check access for them again later in a different context.
247 For example:
249 class A {
250 typedef int X;
251 static X a;
253 A::X A::a, x; // No error for `A::a', error for `x'
255 We have to perform deferred access of `A::X', first with `A::a',
256 next with `x'. */
258 void
259 perform_deferred_access_checks (void)
261 tree deferred_check;
262 for (deferred_check = deferred_access_stack->deferred_access_checks;
263 deferred_check;
264 deferred_check = TREE_CHAIN (deferred_check))
265 /* Check access. */
266 enforce_access (TREE_PURPOSE (deferred_check),
267 TREE_VALUE (deferred_check));
270 /* Defer checking the accessibility of DECL, when looked up in
271 BINFO. */
273 void
274 perform_or_defer_access_check (tree binfo, tree decl)
276 tree check;
278 my_friendly_assert (TREE_CODE (binfo) == TREE_VEC, 20030623);
280 /* If we are not supposed to defer access checks, just check now. */
281 if (deferred_access_stack->deferring_access_checks_kind == dk_no_deferred)
283 enforce_access (binfo, decl);
284 return;
286 /* Exit if we are in a context that no access checking is performed. */
287 else if (deferred_access_stack->deferring_access_checks_kind == dk_no_check)
288 return;
290 /* See if we are already going to perform this check. */
291 for (check = deferred_access_stack->deferred_access_checks;
292 check;
293 check = TREE_CHAIN (check))
294 if (TREE_VALUE (check) == decl && TREE_PURPOSE (check) == binfo)
295 return;
296 /* If not, record the check. */
297 deferred_access_stack->deferred_access_checks
298 = tree_cons (binfo, decl,
299 deferred_access_stack->deferred_access_checks);
302 /* Returns nonzero if the current statement is a full expression,
303 i.e. temporaries created during that statement should be destroyed
304 at the end of the statement. */
307 stmts_are_full_exprs_p (void)
309 return current_stmt_tree ()->stmts_are_full_exprs_p;
312 /* Returns the stmt_tree (if any) to which statements are currently
313 being added. If there is no active statement-tree, NULL is
314 returned. */
316 stmt_tree
317 current_stmt_tree (void)
319 return (cfun
320 ? &cfun->language->base.x_stmt_tree
321 : &scope_chain->x_stmt_tree);
324 /* Nonzero if TYPE is an anonymous union or struct type. We have to use a
325 flag for this because "A union for which objects or pointers are
326 declared is not an anonymous union" [class.union]. */
329 anon_aggr_type_p (tree node)
331 return ANON_AGGR_TYPE_P (node);
334 /* Finish a scope. */
336 tree
337 do_poplevel (void)
339 tree block = NULL_TREE;
341 if (stmts_are_full_exprs_p ())
343 tree scope_stmts = NULL_TREE;
345 block = poplevel (kept_level_p (), 1, 0);
346 if (!processing_template_decl)
348 /* This needs to come after the poplevel so that partial scopes
349 are properly nested. */
350 scope_stmts = add_scope_stmt (/*begin_p=*/0, /*partial_p=*/0);
351 if (block)
353 SCOPE_STMT_BLOCK (TREE_PURPOSE (scope_stmts)) = block;
354 SCOPE_STMT_BLOCK (TREE_VALUE (scope_stmts)) = block;
359 return block;
362 /* Begin a new scope. */
364 void
365 do_pushlevel (scope_kind sk)
367 if (stmts_are_full_exprs_p ())
369 if (!processing_template_decl)
370 add_scope_stmt (/*begin_p=*/1, /*partial_p=*/0);
371 begin_scope (sk, NULL);
375 /* Finish a goto-statement. */
377 tree
378 finish_goto_stmt (tree destination)
380 if (TREE_CODE (destination) == IDENTIFIER_NODE)
381 destination = lookup_label (destination);
383 /* We warn about unused labels with -Wunused. That means we have to
384 mark the used labels as used. */
385 if (TREE_CODE (destination) == LABEL_DECL)
386 TREE_USED (destination) = 1;
387 else
389 /* The DESTINATION is being used as an rvalue. */
390 if (!processing_template_decl)
391 destination = decay_conversion (destination);
392 /* We don't inline calls to functions with computed gotos.
393 Those functions are typically up to some funny business,
394 and may be depending on the labels being at particular
395 addresses, or some such. */
396 DECL_UNINLINABLE (current_function_decl) = 1;
399 check_goto (destination);
401 return add_stmt (build_stmt (GOTO_STMT, destination));
404 /* COND is the condition-expression for an if, while, etc.,
405 statement. Convert it to a boolean value, if appropriate. */
407 static tree
408 maybe_convert_cond (tree cond)
410 /* Empty conditions remain empty. */
411 if (!cond)
412 return NULL_TREE;
414 /* Wait until we instantiate templates before doing conversion. */
415 if (processing_template_decl)
416 return cond;
418 /* Do the conversion. */
419 cond = convert_from_reference (cond);
420 return condition_conversion (cond);
423 /* Finish an expression-statement, whose EXPRESSION is as indicated. */
425 tree
426 finish_expr_stmt (tree expr)
428 tree r = NULL_TREE;
430 if (expr != NULL_TREE)
432 if (!processing_template_decl)
433 expr = convert_to_void (expr, "statement");
434 else if (!type_dependent_expression_p (expr))
435 convert_to_void (build_non_dependent_expr (expr), "statement");
437 r = add_stmt (build_stmt (EXPR_STMT, expr));
440 finish_stmt ();
442 return r;
446 /* Begin an if-statement. Returns a newly created IF_STMT if
447 appropriate. */
449 tree
450 begin_if_stmt (void)
452 tree r;
453 do_pushlevel (sk_block);
454 r = build_stmt (IF_STMT, NULL_TREE, NULL_TREE, NULL_TREE);
455 add_stmt (r);
456 return r;
459 /* Process the COND of an if-statement, which may be given by
460 IF_STMT. */
462 void
463 finish_if_stmt_cond (tree cond, tree if_stmt)
465 cond = maybe_convert_cond (cond);
466 FINISH_COND (cond, if_stmt, IF_COND (if_stmt));
469 /* Finish the then-clause of an if-statement, which may be given by
470 IF_STMT. */
472 tree
473 finish_then_clause (tree if_stmt)
475 RECHAIN_STMTS (if_stmt, THEN_CLAUSE (if_stmt));
476 return if_stmt;
479 /* Begin the else-clause of an if-statement. */
481 void
482 begin_else_clause (void)
486 /* Finish the else-clause of an if-statement, which may be given by
487 IF_STMT. */
489 void
490 finish_else_clause (tree if_stmt)
492 RECHAIN_STMTS (if_stmt, ELSE_CLAUSE (if_stmt));
495 /* Finish an if-statement. */
497 void
498 finish_if_stmt (void)
500 finish_stmt ();
501 do_poplevel ();
504 /* Begin a while-statement. Returns a newly created WHILE_STMT if
505 appropriate. */
507 tree
508 begin_while_stmt (void)
510 tree r;
511 r = build_stmt (WHILE_STMT, NULL_TREE, NULL_TREE);
512 add_stmt (r);
513 do_pushlevel (sk_block);
514 return r;
517 /* Process the COND of a while-statement, which may be given by
518 WHILE_STMT. */
520 void
521 finish_while_stmt_cond (tree cond, tree while_stmt)
523 cond = maybe_convert_cond (cond);
524 if (processing_template_decl)
525 /* Don't mess with condition decls in a template. */
526 FINISH_COND (cond, while_stmt, WHILE_COND (while_stmt));
527 else if (getdecls () == NULL_TREE)
528 /* It was a simple condition; install it. */
529 WHILE_COND (while_stmt) = cond;
530 else
532 /* If there was a declaration in the condition, we can't leave it
533 there; transform
534 while (A x = 42) { }
536 while (true) { A x = 42; if (!x) break; } */
537 tree if_stmt;
538 WHILE_COND (while_stmt) = boolean_true_node;
540 if_stmt = begin_if_stmt ();
541 cond = build_unary_op (TRUTH_NOT_EXPR, cond, 0);
542 finish_if_stmt_cond (cond, if_stmt);
543 finish_break_stmt ();
544 finish_then_clause (if_stmt);
545 finish_if_stmt ();
549 /* Finish a while-statement, which may be given by WHILE_STMT. */
551 void
552 finish_while_stmt (tree while_stmt)
554 do_poplevel ();
555 RECHAIN_STMTS (while_stmt, WHILE_BODY (while_stmt));
556 finish_stmt ();
559 /* Begin a do-statement. Returns a newly created DO_STMT if
560 appropriate. */
562 tree
563 begin_do_stmt (void)
565 tree r = build_stmt (DO_STMT, NULL_TREE, NULL_TREE);
566 add_stmt (r);
567 return r;
570 /* Finish the body of a do-statement, which may be given by DO_STMT. */
572 void
573 finish_do_body (tree do_stmt)
575 RECHAIN_STMTS (do_stmt, DO_BODY (do_stmt));
578 /* Finish a do-statement, which may be given by DO_STMT, and whose
579 COND is as indicated. */
581 void
582 finish_do_stmt (tree cond, tree do_stmt)
584 cond = maybe_convert_cond (cond);
585 DO_COND (do_stmt) = cond;
586 finish_stmt ();
589 /* Finish a return-statement. The EXPRESSION returned, if any, is as
590 indicated. */
592 tree
593 finish_return_stmt (tree expr)
595 tree r;
597 expr = check_return_expr (expr);
598 if (!processing_template_decl)
600 if (DECL_DESTRUCTOR_P (current_function_decl))
602 /* Similarly, all destructors must run destructors for
603 base-classes before returning. So, all returns in a
604 destructor get sent to the DTOR_LABEL; finish_function emits
605 code to return a value there. */
606 return finish_goto_stmt (dtor_label);
609 r = add_stmt (build_stmt (RETURN_STMT, expr));
610 finish_stmt ();
612 return r;
615 /* Begin a for-statement. Returns a new FOR_STMT if appropriate. */
617 tree
618 begin_for_stmt (void)
620 tree r;
622 r = build_stmt (FOR_STMT, NULL_TREE, NULL_TREE,
623 NULL_TREE, NULL_TREE);
624 NEW_FOR_SCOPE_P (r) = flag_new_for_scope > 0;
625 if (NEW_FOR_SCOPE_P (r))
626 do_pushlevel (sk_for);
627 add_stmt (r);
629 return r;
632 /* Finish the for-init-statement of a for-statement, which may be
633 given by FOR_STMT. */
635 void
636 finish_for_init_stmt (tree for_stmt)
638 if (last_tree != for_stmt)
639 RECHAIN_STMTS (for_stmt, FOR_INIT_STMT (for_stmt));
640 do_pushlevel (sk_block);
643 /* Finish the COND of a for-statement, which may be given by
644 FOR_STMT. */
646 void
647 finish_for_cond (tree cond, tree for_stmt)
649 cond = maybe_convert_cond (cond);
650 if (processing_template_decl)
651 /* Don't mess with condition decls in a template. */
652 FINISH_COND (cond, for_stmt, FOR_COND (for_stmt));
653 else if (getdecls () == NULL_TREE)
654 /* It was a simple condition; install it. */
655 FOR_COND (for_stmt) = cond;
656 else
658 /* If there was a declaration in the condition, we can't leave it
659 there; transform
660 for (; A x = 42;) { }
662 for (;;) { A x = 42; if (!x) break; } */
663 tree if_stmt;
664 FOR_COND (for_stmt) = NULL_TREE;
666 if_stmt = begin_if_stmt ();
667 cond = build_unary_op (TRUTH_NOT_EXPR, cond, 0);
668 finish_if_stmt_cond (cond, if_stmt);
669 finish_break_stmt ();
670 finish_then_clause (if_stmt);
671 finish_if_stmt ();
675 /* Finish the increment-EXPRESSION in a for-statement, which may be
676 given by FOR_STMT. */
678 void
679 finish_for_expr (tree expr, tree for_stmt)
681 /* If EXPR is an overloaded function, issue an error; there is no
682 context available to use to perform overload resolution. */
683 if (expr && type_unknown_p (expr))
685 cxx_incomplete_type_error (expr, TREE_TYPE (expr));
686 expr = error_mark_node;
688 FOR_EXPR (for_stmt) = expr;
691 /* Finish the body of a for-statement, which may be given by
692 FOR_STMT. The increment-EXPR for the loop must be
693 provided. */
695 void
696 finish_for_stmt (tree for_stmt)
698 /* Pop the scope for the body of the loop. */
699 do_poplevel ();
700 RECHAIN_STMTS (for_stmt, FOR_BODY (for_stmt));
701 if (NEW_FOR_SCOPE_P (for_stmt))
702 do_poplevel ();
703 finish_stmt ();
706 /* Finish a break-statement. */
708 tree
709 finish_break_stmt (void)
711 return add_stmt (build_break_stmt ());
714 /* Finish a continue-statement. */
716 tree
717 finish_continue_stmt (void)
719 return add_stmt (build_continue_stmt ());
722 /* Begin a switch-statement. Returns a new SWITCH_STMT if
723 appropriate. */
725 tree
726 begin_switch_stmt (void)
728 tree r;
729 do_pushlevel (sk_block);
730 r = build_stmt (SWITCH_STMT, NULL_TREE, NULL_TREE, NULL_TREE);
731 add_stmt (r);
732 return r;
735 /* Finish the cond of a switch-statement. */
737 void
738 finish_switch_cond (tree cond, tree switch_stmt)
740 tree orig_type = NULL;
741 if (!processing_template_decl)
743 tree index;
745 /* Convert the condition to an integer or enumeration type. */
746 cond = build_expr_type_conversion (WANT_INT | WANT_ENUM, cond, true);
747 if (cond == NULL_TREE)
749 error ("switch quantity not an integer");
750 cond = error_mark_node;
752 orig_type = TREE_TYPE (cond);
753 if (cond != error_mark_node)
755 /* [stmt.switch]
757 Integral promotions are performed. */
758 cond = perform_integral_promotions (cond);
759 cond = fold (build1 (CLEANUP_POINT_EXPR, TREE_TYPE (cond), cond));
762 if (cond != error_mark_node)
764 index = get_unwidened (cond, NULL_TREE);
765 /* We can't strip a conversion from a signed type to an unsigned,
766 because if we did, int_fits_type_p would do the wrong thing
767 when checking case values for being in range,
768 and it's too hard to do the right thing. */
769 if (TREE_UNSIGNED (TREE_TYPE (cond))
770 == TREE_UNSIGNED (TREE_TYPE (index)))
771 cond = index;
774 FINISH_COND (cond, switch_stmt, SWITCH_COND (switch_stmt));
775 SWITCH_TYPE (switch_stmt) = orig_type;
776 push_switch (switch_stmt);
779 /* Finish the body of a switch-statement, which may be given by
780 SWITCH_STMT. The COND to switch on is indicated. */
782 void
783 finish_switch_stmt (tree switch_stmt)
785 RECHAIN_STMTS (switch_stmt, SWITCH_BODY (switch_stmt));
786 pop_switch ();
787 finish_stmt ();
788 do_poplevel ();
791 /* Generate the RTL for T, which is a TRY_BLOCK. */
793 static void
794 genrtl_try_block (tree t)
796 if (CLEANUP_P (t))
798 expand_eh_region_start ();
799 expand_stmt (TRY_STMTS (t));
800 expand_eh_region_end_cleanup (TRY_HANDLERS (t));
802 else
804 if (!FN_TRY_BLOCK_P (t))
805 emit_line_note (input_location);
807 expand_eh_region_start ();
808 expand_stmt (TRY_STMTS (t));
810 if (FN_TRY_BLOCK_P (t))
812 expand_start_all_catch ();
813 in_function_try_handler = 1;
814 expand_stmt (TRY_HANDLERS (t));
815 in_function_try_handler = 0;
816 expand_end_all_catch ();
818 else
820 expand_start_all_catch ();
821 expand_stmt (TRY_HANDLERS (t));
822 expand_end_all_catch ();
827 /* Generate the RTL for T, which is an EH_SPEC_BLOCK. */
829 static void
830 genrtl_eh_spec_block (tree t)
832 expand_eh_region_start ();
833 expand_stmt (EH_SPEC_STMTS (t));
834 expand_eh_region_end_allowed (EH_SPEC_RAISES (t),
835 build_call (call_unexpected_node,
836 tree_cons (NULL_TREE,
837 build_exc_ptr (),
838 NULL_TREE)));
841 /* Begin a try-block. Returns a newly-created TRY_BLOCK if
842 appropriate. */
844 tree
845 begin_try_block (void)
847 tree r = build_stmt (TRY_BLOCK, NULL_TREE, NULL_TREE);
848 add_stmt (r);
849 return r;
852 /* Likewise, for a function-try-block. */
854 tree
855 begin_function_try_block (void)
857 tree r = build_stmt (TRY_BLOCK, NULL_TREE, NULL_TREE);
858 FN_TRY_BLOCK_P (r) = 1;
859 add_stmt (r);
860 return r;
863 /* Finish a try-block, which may be given by TRY_BLOCK. */
865 void
866 finish_try_block (tree try_block)
868 RECHAIN_STMTS (try_block, TRY_STMTS (try_block));
871 /* Finish the body of a cleanup try-block, which may be given by
872 TRY_BLOCK. */
874 void
875 finish_cleanup_try_block (tree try_block)
877 RECHAIN_STMTS (try_block, TRY_STMTS (try_block));
880 /* Finish an implicitly generated try-block, with a cleanup is given
881 by CLEANUP. */
883 void
884 finish_cleanup (tree cleanup, tree try_block)
886 TRY_HANDLERS (try_block) = cleanup;
887 CLEANUP_P (try_block) = 1;
890 /* Likewise, for a function-try-block. */
892 void
893 finish_function_try_block (tree try_block)
895 if (TREE_CHAIN (try_block)
896 && TREE_CODE (TREE_CHAIN (try_block)) == CTOR_INITIALIZER)
898 /* Chain the compound statement after the CTOR_INITIALIZER. */
899 TREE_CHAIN (TREE_CHAIN (try_block)) = last_tree;
900 /* And make the CTOR_INITIALIZER the body of the try-block. */
901 RECHAIN_STMTS (try_block, TRY_STMTS (try_block));
903 else
904 RECHAIN_STMTS (try_block, TRY_STMTS (try_block));
905 in_function_try_handler = 1;
908 /* Finish a handler-sequence for a try-block, which may be given by
909 TRY_BLOCK. */
911 void
912 finish_handler_sequence (tree try_block)
914 RECHAIN_STMTS (try_block, TRY_HANDLERS (try_block));
915 check_handlers (TRY_HANDLERS (try_block));
918 /* Likewise, for a function-try-block. */
920 void
921 finish_function_handler_sequence (tree try_block)
923 in_function_try_handler = 0;
924 RECHAIN_STMTS (try_block, TRY_HANDLERS (try_block));
925 check_handlers (TRY_HANDLERS (try_block));
928 /* Generate the RTL for T, which is a HANDLER. */
930 static void
931 genrtl_handler (tree t)
933 genrtl_do_pushlevel ();
934 if (!processing_template_decl)
935 expand_start_catch (HANDLER_TYPE (t));
936 expand_stmt (HANDLER_BODY (t));
937 if (!processing_template_decl)
938 expand_end_catch ();
941 /* Begin a handler. Returns a HANDLER if appropriate. */
943 tree
944 begin_handler (void)
946 tree r;
947 r = build_stmt (HANDLER, NULL_TREE, NULL_TREE);
948 add_stmt (r);
949 /* Create a binding level for the eh_info and the exception object
950 cleanup. */
951 do_pushlevel (sk_catch);
952 return r;
955 /* Finish the handler-parameters for a handler, which may be given by
956 HANDLER. DECL is the declaration for the catch parameter, or NULL
957 if this is a `catch (...)' clause. */
959 void
960 finish_handler_parms (tree decl, tree handler)
962 tree type = NULL_TREE;
963 if (processing_template_decl)
965 if (decl)
967 decl = pushdecl (decl);
968 decl = push_template_decl (decl);
969 add_decl_stmt (decl);
970 RECHAIN_STMTS (handler, HANDLER_PARMS (handler));
971 type = TREE_TYPE (decl);
974 else
975 type = expand_start_catch_block (decl);
977 HANDLER_TYPE (handler) = type;
978 if (!processing_template_decl && type)
979 mark_used (eh_type_info (type));
982 /* Finish a handler, which may be given by HANDLER. The BLOCKs are
983 the return value from the matching call to finish_handler_parms. */
985 void
986 finish_handler (tree handler)
988 if (!processing_template_decl)
989 expand_end_catch_block ();
990 do_poplevel ();
991 RECHAIN_STMTS (handler, HANDLER_BODY (handler));
994 /* Begin a compound-statement. If HAS_NO_SCOPE is true, the
995 compound-statement does not define a scope. Returns a new
996 COMPOUND_STMT. */
998 tree
999 begin_compound_stmt (bool has_no_scope)
1001 tree r;
1002 int is_try = 0;
1004 r = build_stmt (COMPOUND_STMT, NULL_TREE);
1006 if (last_tree && TREE_CODE (last_tree) == TRY_BLOCK)
1007 is_try = 1;
1009 add_stmt (r);
1010 if (has_no_scope)
1011 COMPOUND_STMT_NO_SCOPE (r) = 1;
1013 last_expr_type = NULL_TREE;
1015 if (!has_no_scope)
1016 do_pushlevel (is_try ? sk_try : sk_block);
1017 else
1018 /* Normally, we try hard to keep the BLOCK for a
1019 statement-expression. But, if it's a statement-expression with
1020 a scopeless block, there's nothing to keep, and we don't want
1021 to accidentally keep a block *inside* the scopeless block. */
1022 keep_next_level (false);
1024 return r;
1027 /* Finish a compound-statement, which is given by COMPOUND_STMT. */
1029 tree
1030 finish_compound_stmt (tree compound_stmt)
1032 tree r;
1033 tree t;
1035 if (COMPOUND_STMT_NO_SCOPE (compound_stmt))
1036 r = NULL_TREE;
1037 else
1038 r = do_poplevel ();
1040 RECHAIN_STMTS (compound_stmt, COMPOUND_BODY (compound_stmt));
1042 /* When we call finish_stmt we will lose LAST_EXPR_TYPE. But, since
1043 the precise purpose of that variable is store the type of the
1044 last expression statement within the last compound statement, we
1045 preserve the value. */
1046 t = last_expr_type;
1047 finish_stmt ();
1048 last_expr_type = t;
1050 return r;
1053 /* Finish an asm-statement, whose components are a CV_QUALIFIER, a
1054 STRING, some OUTPUT_OPERANDS, some INPUT_OPERANDS, and some
1055 CLOBBERS. */
1057 tree
1058 finish_asm_stmt (tree cv_qualifier,
1059 tree string,
1060 tree output_operands,
1061 tree input_operands,
1062 tree clobbers)
1064 tree r;
1065 tree t;
1067 if (cv_qualifier != NULL_TREE
1068 && cv_qualifier != ridpointers[(int) RID_VOLATILE])
1070 warning ("%s qualifier ignored on asm",
1071 IDENTIFIER_POINTER (cv_qualifier));
1072 cv_qualifier = NULL_TREE;
1075 if (!processing_template_decl)
1077 int i;
1078 int ninputs;
1079 int noutputs;
1081 for (t = input_operands; t; t = TREE_CHAIN (t))
1083 tree converted_operand
1084 = decay_conversion (TREE_VALUE (t));
1086 /* If the type of the operand hasn't been determined (e.g.,
1087 because it involves an overloaded function), then issue
1088 an error message. There's no context available to
1089 resolve the overloading. */
1090 if (TREE_TYPE (converted_operand) == unknown_type_node)
1092 error ("type of asm operand `%E' could not be determined",
1093 TREE_VALUE (t));
1094 converted_operand = error_mark_node;
1096 TREE_VALUE (t) = converted_operand;
1099 ninputs = list_length (input_operands);
1100 noutputs = list_length (output_operands);
1102 for (i = 0, t = output_operands; t; t = TREE_CHAIN (t), ++i)
1104 bool allows_mem;
1105 bool allows_reg;
1106 bool is_inout;
1107 const char *constraint;
1108 tree operand;
1110 constraint = TREE_STRING_POINTER (TREE_VALUE (TREE_PURPOSE (t)));
1111 operand = TREE_VALUE (t);
1113 if (!parse_output_constraint (&constraint,
1114 i, ninputs, noutputs,
1115 &allows_mem,
1116 &allows_reg,
1117 &is_inout))
1119 /* By marking this operand as erroneous, we will not try
1120 to process this operand again in expand_asm_operands. */
1121 TREE_VALUE (t) = error_mark_node;
1122 continue;
1125 /* If the operand is a DECL that is going to end up in
1126 memory, assume it is addressable. This is a bit more
1127 conservative than it would ideally be; the exact test is
1128 buried deep in expand_asm_operands and depends on the
1129 DECL_RTL for the OPERAND -- which we don't have at this
1130 point. */
1131 if (!allows_reg && DECL_P (operand))
1132 cxx_mark_addressable (operand);
1136 r = build_stmt (ASM_STMT, cv_qualifier, string,
1137 output_operands, input_operands,
1138 clobbers);
1139 return add_stmt (r);
1142 /* Finish a label with the indicated NAME. */
1144 tree
1145 finish_label_stmt (tree name)
1147 tree decl = define_label (input_location, name);
1148 return add_stmt (build_stmt (LABEL_STMT, decl));
1151 /* Finish a series of declarations for local labels. G++ allows users
1152 to declare "local" labels, i.e., labels with scope. This extension
1153 is useful when writing code involving statement-expressions. */
1155 void
1156 finish_label_decl (tree name)
1158 tree decl = declare_local_label (name);
1159 add_decl_stmt (decl);
1162 /* When DECL goes out of scope, make sure that CLEANUP is executed. */
1164 void
1165 finish_decl_cleanup (tree decl, tree cleanup)
1167 add_stmt (build_stmt (CLEANUP_STMT, decl, cleanup));
1170 /* If the current scope exits with an exception, run CLEANUP. */
1172 void
1173 finish_eh_cleanup (tree cleanup)
1175 tree r = build_stmt (CLEANUP_STMT, NULL_TREE, cleanup);
1176 CLEANUP_EH_ONLY (r) = 1;
1177 add_stmt (r);
1180 /* The MEM_INITS is a list of mem-initializers, in reverse of the
1181 order they were written by the user. Each node is as for
1182 emit_mem_initializers. */
1184 void
1185 finish_mem_initializers (tree mem_inits)
1187 /* Reorder the MEM_INITS so that they are in the order they appeared
1188 in the source program. */
1189 mem_inits = nreverse (mem_inits);
1191 if (processing_template_decl)
1192 add_stmt (build_min_nt (CTOR_INITIALIZER, mem_inits));
1193 else
1194 emit_mem_initializers (mem_inits);
1197 /* Returns the stack of SCOPE_STMTs for the current function. */
1199 tree *
1200 current_scope_stmt_stack (void)
1202 return &cfun->language->base.x_scope_stmt_stack;
1205 /* Finish a parenthesized expression EXPR. */
1207 tree
1208 finish_parenthesized_expr (tree expr)
1210 if (IS_EXPR_CODE_CLASS (TREE_CODE_CLASS (TREE_CODE (expr))))
1211 /* This inhibits warnings in c_common_truthvalue_conversion. */
1212 C_SET_EXP_ORIGINAL_CODE (expr, ERROR_MARK);
1214 if (TREE_CODE (expr) == OFFSET_REF)
1215 /* [expr.unary.op]/3 The qualified id of a pointer-to-member must not be
1216 enclosed in parentheses. */
1217 PTRMEM_OK_P (expr) = 0;
1218 return expr;
1221 /* Finish a reference to a non-static data member (DECL) that is not
1222 preceded by `.' or `->'. */
1224 tree
1225 finish_non_static_data_member (tree decl, tree object, tree qualifying_scope)
1227 my_friendly_assert (TREE_CODE (decl) == FIELD_DECL, 20020909);
1229 if (!object)
1231 if (current_function_decl
1232 && DECL_STATIC_FUNCTION_P (current_function_decl))
1233 cp_error_at ("invalid use of member `%D' in static member function",
1234 decl);
1235 else
1236 cp_error_at ("invalid use of non-static data member `%D'", decl);
1237 error ("from this location");
1239 return error_mark_node;
1241 TREE_USED (current_class_ptr) = 1;
1242 if (processing_template_decl && !qualifying_scope)
1244 tree type = TREE_TYPE (decl);
1246 if (TREE_CODE (type) == REFERENCE_TYPE)
1247 type = TREE_TYPE (type);
1248 else
1250 /* Set the cv qualifiers. */
1251 int quals = cp_type_quals (TREE_TYPE (current_class_ref));
1253 if (DECL_MUTABLE_P (decl))
1254 quals &= ~TYPE_QUAL_CONST;
1256 quals |= cp_type_quals (TREE_TYPE (decl));
1257 type = cp_build_qualified_type (type, quals);
1260 return build_min (COMPONENT_REF, type, object, decl);
1262 else
1264 tree access_type = TREE_TYPE (object);
1265 tree lookup_context = context_for_name_lookup (decl);
1267 while (!DERIVED_FROM_P (lookup_context, access_type))
1269 access_type = TYPE_CONTEXT (access_type);
1270 while (access_type && DECL_P (access_type))
1271 access_type = DECL_CONTEXT (access_type);
1273 if (!access_type)
1275 cp_error_at ("object missing in reference to `%D'", decl);
1276 error ("from this location");
1277 return error_mark_node;
1281 /* If PROCESSING_TEMPLATE_DECL is nonzero here, then
1282 QUALIFYING_SCOPE is also non-null. Wrap this in a SCOPE_REF
1283 for now. */
1284 if (processing_template_decl)
1285 return build_min (SCOPE_REF, TREE_TYPE (decl),
1286 qualifying_scope, DECL_NAME (decl));
1288 perform_or_defer_access_check (TYPE_BINFO (access_type), decl);
1290 /* If the data member was named `C::M', convert `*this' to `C'
1291 first. */
1292 if (qualifying_scope)
1294 tree binfo = NULL_TREE;
1295 object = build_scoped_ref (object, qualifying_scope,
1296 &binfo);
1299 return build_class_member_access_expr (object, decl,
1300 /*access_path=*/NULL_TREE,
1301 /*preserve_reference=*/false);
1305 /* DECL was the declaration to which a qualified-id resolved. Issue
1306 an error message if it is not accessible. If OBJECT_TYPE is
1307 non-NULL, we have just seen `x->' or `x.' and OBJECT_TYPE is the
1308 type of `*x', or `x', respectively. If the DECL was named as
1309 `A::B' then NESTED_NAME_SPECIFIER is `A'. */
1311 void
1312 check_accessibility_of_qualified_id (tree decl,
1313 tree object_type,
1314 tree nested_name_specifier)
1316 tree scope;
1317 tree qualifying_type = NULL_TREE;
1319 /* Determine the SCOPE of DECL. */
1320 scope = context_for_name_lookup (decl);
1321 /* If the SCOPE is not a type, then DECL is not a member. */
1322 if (!TYPE_P (scope))
1323 return;
1324 /* Compute the scope through which DECL is being accessed. */
1325 if (object_type
1326 /* OBJECT_TYPE might not be a class type; consider:
1328 class A { typedef int I; };
1329 I *p;
1330 p->A::I::~I();
1332 In this case, we will have "A::I" as the DECL, but "I" as the
1333 OBJECT_TYPE. */
1334 && CLASS_TYPE_P (object_type)
1335 && DERIVED_FROM_P (scope, object_type))
1336 /* If we are processing a `->' or `.' expression, use the type of the
1337 left-hand side. */
1338 qualifying_type = object_type;
1339 else if (nested_name_specifier)
1341 /* If the reference is to a non-static member of the
1342 current class, treat it as if it were referenced through
1343 `this'. */
1344 if (DECL_NONSTATIC_MEMBER_P (decl)
1345 && current_class_ptr
1346 && DERIVED_FROM_P (scope, current_class_type))
1347 qualifying_type = current_class_type;
1348 /* Otherwise, use the type indicated by the
1349 nested-name-specifier. */
1350 else
1351 qualifying_type = nested_name_specifier;
1353 else
1354 /* Otherwise, the name must be from the current class or one of
1355 its bases. */
1356 qualifying_type = currently_open_derived_class (scope);
1358 if (qualifying_type)
1359 perform_or_defer_access_check (TYPE_BINFO (qualifying_type), decl);
1362 /* EXPR is the result of a qualified-id. The QUALIFYING_CLASS was the
1363 class named to the left of the "::" operator. DONE is true if this
1364 expression is a complete postfix-expression; it is false if this
1365 expression is followed by '->', '[', '(', etc. ADDRESS_P is true
1366 iff this expression is the operand of '&'. */
1368 tree
1369 finish_qualified_id_expr (tree qualifying_class, tree expr, bool done,
1370 bool address_p)
1372 if (error_operand_p (expr))
1373 return error_mark_node;
1375 /* If EXPR occurs as the operand of '&', use special handling that
1376 permits a pointer-to-member. */
1377 if (address_p && done)
1379 if (TREE_CODE (expr) == SCOPE_REF)
1380 expr = TREE_OPERAND (expr, 1);
1381 expr = build_offset_ref (qualifying_class, expr,
1382 /*address_p=*/true);
1383 return expr;
1386 if (TREE_CODE (expr) == FIELD_DECL)
1387 expr = finish_non_static_data_member (expr, current_class_ref,
1388 qualifying_class);
1389 else if (BASELINK_P (expr) && !processing_template_decl)
1391 tree fn;
1392 tree fns;
1394 /* See if any of the functions are non-static members. */
1395 fns = BASELINK_FUNCTIONS (expr);
1396 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
1397 fns = TREE_OPERAND (fns, 0);
1398 for (fn = fns; fn; fn = OVL_NEXT (fn))
1399 if (DECL_NONSTATIC_MEMBER_FUNCTION_P (fn))
1400 break;
1401 /* If so, the expression may be relative to the current
1402 class. */
1403 if (fn && current_class_type
1404 && DERIVED_FROM_P (qualifying_class, current_class_type))
1405 expr = (build_class_member_access_expr
1406 (maybe_dummy_object (qualifying_class, NULL),
1407 expr,
1408 BASELINK_ACCESS_BINFO (expr),
1409 /*preserve_reference=*/false));
1410 else if (done)
1411 /* The expression is a qualified name whose address is not
1412 being taken. */
1413 expr = build_offset_ref (qualifying_class, expr, /*address_p=*/false);
1416 return expr;
1419 /* Begin a statement-expression. The value returned must be passed to
1420 finish_stmt_expr. */
1422 tree
1423 begin_stmt_expr (void)
1425 /* If we're outside a function, we won't have a statement-tree to
1426 work with. But, if we see a statement-expression we need to
1427 create one. */
1428 if (! cfun && !last_tree)
1429 begin_stmt_tree (&scope_chain->x_saved_tree);
1431 last_expr_type = NULL_TREE;
1433 keep_next_level (true);
1435 return last_tree;
1438 /* Process the final expression of a statement expression. EXPR can be
1439 NULL, if the final expression is empty. Build up a TARGET_EXPR so
1440 that the result value can be safely returned to the enclosing
1441 expression. */
1443 tree
1444 finish_stmt_expr_expr (tree expr)
1446 tree result = NULL_TREE;
1447 tree type = void_type_node;
1449 if (expr)
1451 type = TREE_TYPE (expr);
1453 if (!processing_template_decl && !VOID_TYPE_P (TREE_TYPE (expr)))
1455 if (TREE_CODE (type) == ARRAY_TYPE
1456 || TREE_CODE (type) == FUNCTION_TYPE)
1457 expr = decay_conversion (expr);
1459 expr = convert_from_reference (expr);
1460 expr = require_complete_type (expr);
1462 /* Build a TARGET_EXPR for this aggregate. finish_stmt_expr
1463 will then pull it apart so the lifetime of the target is
1464 within the scope of the expression containing this statement
1465 expression. */
1466 if (TREE_CODE (expr) == TARGET_EXPR)
1468 else if (!IS_AGGR_TYPE (type) || TYPE_HAS_TRIVIAL_INIT_REF (type))
1469 expr = build_target_expr_with_type (expr, type);
1470 else
1472 /* Copy construct. */
1473 expr = build_special_member_call
1474 (NULL_TREE, complete_ctor_identifier,
1475 build_tree_list (NULL_TREE, expr),
1476 TYPE_BINFO (type), LOOKUP_NORMAL);
1477 expr = build_cplus_new (type, expr);
1478 my_friendly_assert (TREE_CODE (expr) == TARGET_EXPR, 20030729);
1482 if (expr != error_mark_node)
1484 result = build_stmt (EXPR_STMT, expr);
1485 add_stmt (result);
1489 finish_stmt ();
1491 /* Remember the last expression so that finish_stmt_expr can pull it
1492 apart. */
1493 last_expr_type = result ? result : void_type_node;
1495 return result;
1498 /* Finish a statement-expression. EXPR should be the value returned
1499 by the previous begin_stmt_expr. Returns an expression
1500 representing the statement-expression. */
1502 tree
1503 finish_stmt_expr (tree rtl_expr, bool has_no_scope)
1505 tree result;
1506 tree result_stmt = last_expr_type;
1507 tree type;
1509 if (!last_expr_type)
1510 type = void_type_node;
1511 else
1513 if (result_stmt == void_type_node)
1515 type = void_type_node;
1516 result_stmt = NULL_TREE;
1518 else
1519 type = TREE_TYPE (EXPR_STMT_EXPR (result_stmt));
1522 result = build_min (STMT_EXPR, type, last_tree);
1523 TREE_SIDE_EFFECTS (result) = 1;
1524 STMT_EXPR_NO_SCOPE (result) = has_no_scope;
1526 last_expr_type = NULL_TREE;
1528 /* Remove the compound statement from the tree structure; it is
1529 now saved in the STMT_EXPR. */
1530 last_tree = rtl_expr;
1531 TREE_CHAIN (last_tree) = NULL_TREE;
1533 /* If we created a statement-tree for this statement-expression,
1534 remove it now. */
1535 if (! cfun
1536 && TREE_CHAIN (scope_chain->x_saved_tree) == NULL_TREE)
1537 finish_stmt_tree (&scope_chain->x_saved_tree);
1539 if (processing_template_decl)
1540 return result;
1542 if (!VOID_TYPE_P (type))
1544 /* Pull out the TARGET_EXPR that is the final expression. Put
1545 the target's init_expr as the final expression and then put
1546 the statement expression itself as the target's init
1547 expr. Finally, return the target expression. */
1548 tree last_expr = EXPR_STMT_EXPR (result_stmt);
1550 my_friendly_assert (TREE_CODE (last_expr) == TARGET_EXPR, 20030729);
1551 EXPR_STMT_EXPR (result_stmt) = TREE_OPERAND (last_expr, 1);
1552 TREE_OPERAND (last_expr, 1) = result;
1553 result = last_expr;
1555 return result;
1558 /* Perform Koenig lookup. FN is the postfix-expression representing
1559 the function (or functions) to call; ARGS are the arguments to the
1560 call. Returns the functions to be considered by overload
1561 resolution. */
1563 tree
1564 perform_koenig_lookup (tree fn, tree args)
1566 tree identifier = NULL_TREE;
1567 tree functions = NULL_TREE;
1569 /* Find the name of the overloaded function. */
1570 if (TREE_CODE (fn) == IDENTIFIER_NODE)
1571 identifier = fn;
1572 else if (is_overloaded_fn (fn))
1574 functions = fn;
1575 identifier = DECL_NAME (get_first_fn (functions));
1577 else if (DECL_P (fn))
1579 functions = fn;
1580 identifier = DECL_NAME (fn);
1583 /* A call to a namespace-scope function using an unqualified name.
1585 Do Koenig lookup -- unless any of the arguments are
1586 type-dependent. */
1587 if (!any_type_dependent_arguments_p (args))
1589 fn = lookup_arg_dependent (identifier, functions, args);
1590 if (!fn)
1591 /* The unqualified name could not be resolved. */
1592 fn = unqualified_fn_lookup_error (identifier);
1594 else
1595 fn = identifier;
1597 return fn;
1600 /* Generate an expression for `FN (ARGS)'.
1602 If DISALLOW_VIRTUAL is true, the call to FN will be not generated
1603 as a virtual call, even if FN is virtual. (This flag is set when
1604 encountering an expression where the function name is explicitly
1605 qualified. For example a call to `X::f' never generates a virtual
1606 call.)
1608 Returns code for the call. */
1610 tree
1611 finish_call_expr (tree fn, tree args, bool disallow_virtual, bool koenig_p)
1613 tree result;
1614 tree orig_fn;
1615 tree orig_args;
1617 if (fn == error_mark_node || args == error_mark_node)
1618 return error_mark_node;
1620 /* ARGS should be a list of arguments. */
1621 my_friendly_assert (!args || TREE_CODE (args) == TREE_LIST,
1622 20020712);
1624 orig_fn = fn;
1625 orig_args = args;
1627 if (processing_template_decl)
1629 if (type_dependent_expression_p (fn)
1630 || any_type_dependent_arguments_p (args))
1632 result = build_nt (CALL_EXPR, fn, args);
1633 KOENIG_LOOKUP_P (result) = koenig_p;
1634 return result;
1636 if (!BASELINK_P (fn)
1637 && TREE_CODE (fn) != PSEUDO_DTOR_EXPR
1638 && TREE_TYPE (fn) != unknown_type_node)
1639 fn = build_non_dependent_expr (fn);
1640 args = build_non_dependent_args (orig_args);
1643 /* A reference to a member function will appear as an overloaded
1644 function (rather than a BASELINK) if an unqualified name was used
1645 to refer to it. */
1646 if (!BASELINK_P (fn) && is_overloaded_fn (fn))
1648 tree f = fn;
1650 if (TREE_CODE (f) == TEMPLATE_ID_EXPR)
1651 f = TREE_OPERAND (f, 0);
1652 f = get_first_fn (f);
1653 if (DECL_FUNCTION_MEMBER_P (f))
1655 tree type = currently_open_derived_class (DECL_CONTEXT (f));
1656 if (!type)
1657 type = DECL_CONTEXT (f);
1658 fn = build_baselink (TYPE_BINFO (type),
1659 TYPE_BINFO (type),
1660 fn, /*optype=*/NULL_TREE);
1664 result = NULL_TREE;
1665 if (BASELINK_P (fn))
1667 tree object;
1669 /* A call to a member function. From [over.call.func]:
1671 If the keyword this is in scope and refers to the class of
1672 that member function, or a derived class thereof, then the
1673 function call is transformed into a qualified function call
1674 using (*this) as the postfix-expression to the left of the
1675 . operator.... [Otherwise] a contrived object of type T
1676 becomes the implied object argument.
1678 This paragraph is unclear about this situation:
1680 struct A { void f(); };
1681 struct B : public A {};
1682 struct C : public A { void g() { B::f(); }};
1684 In particular, for `B::f', this paragraph does not make clear
1685 whether "the class of that member function" refers to `A' or
1686 to `B'. We believe it refers to `B'. */
1687 if (current_class_type
1688 && DERIVED_FROM_P (BINFO_TYPE (BASELINK_ACCESS_BINFO (fn)),
1689 current_class_type)
1690 && current_class_ref)
1691 object = maybe_dummy_object (BINFO_TYPE (BASELINK_ACCESS_BINFO (fn)),
1692 NULL);
1693 else
1695 tree representative_fn;
1697 representative_fn = BASELINK_FUNCTIONS (fn);
1698 if (TREE_CODE (representative_fn) == TEMPLATE_ID_EXPR)
1699 representative_fn = TREE_OPERAND (representative_fn, 0);
1700 representative_fn = get_first_fn (representative_fn);
1701 object = build_dummy_object (DECL_CONTEXT (representative_fn));
1704 if (processing_template_decl)
1706 if (type_dependent_expression_p (object))
1707 return build_nt (CALL_EXPR, orig_fn, orig_args);
1708 object = build_non_dependent_expr (object);
1711 result = build_new_method_call (object, fn, args, NULL_TREE,
1712 (disallow_virtual
1713 ? LOOKUP_NONVIRTUAL : 0));
1715 else if (is_overloaded_fn (fn))
1716 /* A call to a namespace-scope function. */
1717 result = build_new_function_call (fn, args);
1718 else if (TREE_CODE (fn) == PSEUDO_DTOR_EXPR)
1720 if (args)
1721 error ("arguments to destructor are not allowed");
1722 /* Mark the pseudo-destructor call as having side-effects so
1723 that we do not issue warnings about its use. */
1724 result = build1 (NOP_EXPR,
1725 void_type_node,
1726 TREE_OPERAND (fn, 0));
1727 TREE_SIDE_EFFECTS (result) = 1;
1729 else if (CLASS_TYPE_P (TREE_TYPE (fn)))
1730 /* If the "function" is really an object of class type, it might
1731 have an overloaded `operator ()'. */
1732 result = build_new_op (CALL_EXPR, LOOKUP_NORMAL, fn, args, NULL_TREE,
1733 /*overloaded_p=*/NULL);
1734 if (!result)
1735 /* A call where the function is unknown. */
1736 result = build_function_call (fn, args);
1738 if (processing_template_decl)
1740 result = build (CALL_EXPR, TREE_TYPE (result), orig_fn, orig_args);
1741 KOENIG_LOOKUP_P (result) = koenig_p;
1743 return result;
1746 /* Finish a call to a postfix increment or decrement or EXPR. (Which
1747 is indicated by CODE, which should be POSTINCREMENT_EXPR or
1748 POSTDECREMENT_EXPR.) */
1750 tree
1751 finish_increment_expr (tree expr, enum tree_code code)
1753 return build_x_unary_op (code, expr);
1756 /* Finish a use of `this'. Returns an expression for `this'. */
1758 tree
1759 finish_this_expr (void)
1761 tree result;
1763 if (current_class_ptr)
1765 result = current_class_ptr;
1767 else if (current_function_decl
1768 && DECL_STATIC_FUNCTION_P (current_function_decl))
1770 error ("`this' is unavailable for static member functions");
1771 result = error_mark_node;
1773 else
1775 if (current_function_decl)
1776 error ("invalid use of `this' in non-member function");
1777 else
1778 error ("invalid use of `this' at top level");
1779 result = error_mark_node;
1782 return result;
1785 /* Finish a pseudo-destructor expression. If SCOPE is NULL, the
1786 expression was of the form `OBJECT.~DESTRUCTOR' where DESTRUCTOR is
1787 the TYPE for the type given. If SCOPE is non-NULL, the expression
1788 was of the form `OBJECT.SCOPE::~DESTRUCTOR'. */
1790 tree
1791 finish_pseudo_destructor_expr (tree object, tree scope, tree destructor)
1793 if (destructor == error_mark_node)
1794 return error_mark_node;
1796 my_friendly_assert (TYPE_P (destructor), 20010905);
1798 if (!processing_template_decl)
1800 if (scope == error_mark_node)
1802 error ("invalid qualifying scope in pseudo-destructor name");
1803 return error_mark_node;
1806 if (!same_type_p (TREE_TYPE (object), destructor))
1808 error ("`%E' is not of type `%T'", object, destructor);
1809 return error_mark_node;
1813 return build (PSEUDO_DTOR_EXPR, void_type_node, object, scope, destructor);
1816 /* Finish an expression of the form CODE EXPR. */
1818 tree
1819 finish_unary_op_expr (enum tree_code code, tree expr)
1821 tree result = build_x_unary_op (code, expr);
1822 /* Inside a template, build_x_unary_op does not fold the
1823 expression. So check whether the result is folded before
1824 setting TREE_NEGATED_INT. */
1825 if (code == NEGATE_EXPR && TREE_CODE (expr) == INTEGER_CST
1826 && TREE_CODE (result) == INTEGER_CST
1827 && !TREE_UNSIGNED (TREE_TYPE (result))
1828 && INT_CST_LT (result, integer_zero_node))
1829 TREE_NEGATED_INT (result) = 1;
1830 overflow_warning (result);
1831 return result;
1834 /* Finish a compound-literal expression. TYPE is the type to which
1835 the INITIALIZER_LIST is being cast. */
1837 tree
1838 finish_compound_literal (tree type, tree initializer_list)
1840 tree compound_literal;
1842 /* Build a CONSTRUCTOR for the INITIALIZER_LIST. */
1843 compound_literal = build_constructor (NULL_TREE, initializer_list);
1844 /* Mark it as a compound-literal. */
1845 TREE_HAS_CONSTRUCTOR (compound_literal) = 1;
1846 if (processing_template_decl)
1847 TREE_TYPE (compound_literal) = type;
1848 else
1850 /* Check the initialization. */
1851 compound_literal = digest_init (type, compound_literal, NULL);
1852 /* If the TYPE was an array type with an unknown bound, then we can
1853 figure out the dimension now. For example, something like:
1855 `(int []) { 2, 3 }'
1857 implies that the array has two elements. */
1858 if (TREE_CODE (type) == ARRAY_TYPE && !COMPLETE_TYPE_P (type))
1859 complete_array_type (type, compound_literal, 1);
1862 return compound_literal;
1865 /* Return the declaration for the function-name variable indicated by
1866 ID. */
1868 tree
1869 finish_fname (tree id)
1871 tree decl;
1873 decl = fname_decl (C_RID_CODE (id), id);
1874 if (processing_template_decl)
1875 decl = DECL_NAME (decl);
1876 return decl;
1879 /* Begin a function definition declared with DECL_SPECS, ATTRIBUTES,
1880 and DECLARATOR. Returns nonzero if the function-declaration is
1881 valid. */
1884 begin_function_definition (tree decl_specs, tree attributes, tree declarator)
1886 if (!start_function (decl_specs, declarator, attributes, SF_DEFAULT))
1887 return 0;
1889 /* The things we're about to see are not directly qualified by any
1890 template headers we've seen thus far. */
1891 reset_specialization ();
1893 return 1;
1896 /* Finish a translation unit. */
1898 void
1899 finish_translation_unit (void)
1901 /* In case there were missing closebraces,
1902 get us back to the global binding level. */
1903 pop_everything ();
1904 while (current_namespace != global_namespace)
1905 pop_namespace ();
1907 /* Do file scope __FUNCTION__ et al. */
1908 finish_fname_decls ();
1911 /* Finish a template type parameter, specified as AGGR IDENTIFIER.
1912 Returns the parameter. */
1914 tree
1915 finish_template_type_parm (tree aggr, tree identifier)
1917 if (aggr != class_type_node)
1919 pedwarn ("template type parameters must use the keyword `class' or `typename'");
1920 aggr = class_type_node;
1923 return build_tree_list (aggr, identifier);
1926 /* Finish a template template parameter, specified as AGGR IDENTIFIER.
1927 Returns the parameter. */
1929 tree
1930 finish_template_template_parm (tree aggr, tree identifier)
1932 tree decl = build_decl (TYPE_DECL, identifier, NULL_TREE);
1933 tree tmpl = build_lang_decl (TEMPLATE_DECL, identifier, NULL_TREE);
1934 DECL_TEMPLATE_PARMS (tmpl) = current_template_parms;
1935 DECL_TEMPLATE_RESULT (tmpl) = decl;
1936 DECL_ARTIFICIAL (decl) = 1;
1937 end_template_decl ();
1939 my_friendly_assert (DECL_TEMPLATE_PARMS (tmpl), 20010110);
1941 return finish_template_type_parm (aggr, tmpl);
1944 /* ARGUMENT is the default-argument value for a template template
1945 parameter. If ARGUMENT is invalid, issue error messages and return
1946 the ERROR_MARK_NODE. Otherwise, ARGUMENT itself is returned. */
1948 tree
1949 check_template_template_default_arg (tree argument)
1951 if (TREE_CODE (argument) != TEMPLATE_DECL
1952 && TREE_CODE (argument) != TEMPLATE_TEMPLATE_PARM
1953 && TREE_CODE (argument) != UNBOUND_CLASS_TEMPLATE)
1955 if (TREE_CODE (argument) == TYPE_DECL)
1957 tree t = TREE_TYPE (argument);
1959 /* Try to emit a slightly smarter error message if we detect
1960 that the user is using a template instantiation. */
1961 if (CLASSTYPE_TEMPLATE_INFO (t)
1962 && CLASSTYPE_TEMPLATE_INSTANTIATION (t))
1963 error ("invalid use of type `%T' as a default value for a "
1964 "template template-parameter", t);
1965 else
1966 error ("invalid use of `%D' as a default value for a template "
1967 "template-parameter", argument);
1969 else
1970 error ("invalid default argument for a template template parameter");
1971 return error_mark_node;
1974 return argument;
1977 /* Finish a parameter list, indicated by PARMS. If ELLIPSIS is
1978 nonzero, the parameter list was terminated by a `...'. */
1980 tree
1981 finish_parmlist (tree parms, int ellipsis)
1983 if (parms)
1985 /* We mark the PARMS as a parmlist so that declarator processing can
1986 disambiguate certain constructs. */
1987 TREE_PARMLIST (parms) = 1;
1988 /* We do not append void_list_node here, but leave it to grokparms
1989 to do that. */
1990 PARMLIST_ELLIPSIS_P (parms) = ellipsis;
1992 return parms;
1995 /* Begin a class definition, as indicated by T. */
1997 tree
1998 begin_class_definition (tree t)
2000 if (t == error_mark_node)
2001 return error_mark_node;
2003 if (processing_template_parmlist)
2005 error ("definition of `%#T' inside template parameter list", t);
2006 return error_mark_node;
2008 /* A non-implicit typename comes from code like:
2010 template <typename T> struct A {
2011 template <typename U> struct A<T>::B ...
2013 This is erroneous. */
2014 else if (TREE_CODE (t) == TYPENAME_TYPE)
2016 error ("invalid definition of qualified type `%T'", t);
2017 t = error_mark_node;
2020 if (t == error_mark_node || ! IS_AGGR_TYPE (t))
2022 t = make_aggr_type (RECORD_TYPE);
2023 pushtag (make_anon_name (), t, 0);
2026 /* If this type was already complete, and we see another definition,
2027 that's an error. */
2028 if (COMPLETE_TYPE_P (t))
2030 error ("redefinition of `%#T'", t);
2031 cp_error_at ("previous definition of `%#T'", t);
2032 return error_mark_node;
2035 /* Update the location of the decl. */
2036 DECL_SOURCE_LOCATION (TYPE_NAME (t)) = input_location;
2038 if (TYPE_BEING_DEFINED (t))
2040 t = make_aggr_type (TREE_CODE (t));
2041 pushtag (TYPE_IDENTIFIER (t), t, 0);
2043 maybe_process_partial_specialization (t);
2044 pushclass (t);
2045 TYPE_BEING_DEFINED (t) = 1;
2046 if (flag_pack_struct)
2048 tree v;
2049 TYPE_PACKED (t) = 1;
2050 /* Even though the type is being defined for the first time
2051 here, there might have been a forward declaration, so there
2052 might be cv-qualified variants of T. */
2053 for (v = TYPE_NEXT_VARIANT (t); v; v = TYPE_NEXT_VARIANT (v))
2054 TYPE_PACKED (v) = 1;
2056 /* Reset the interface data, at the earliest possible
2057 moment, as it might have been set via a class foo;
2058 before. */
2059 if (! TYPE_ANONYMOUS_P (t))
2061 CLASSTYPE_INTERFACE_ONLY (t) = interface_only;
2062 SET_CLASSTYPE_INTERFACE_UNKNOWN_X
2063 (t, interface_unknown);
2065 reset_specialization();
2067 /* Make a declaration for this class in its own scope. */
2068 build_self_reference ();
2070 return t;
2073 /* Finish the member declaration given by DECL. */
2075 void
2076 finish_member_declaration (tree decl)
2078 if (decl == error_mark_node || decl == NULL_TREE)
2079 return;
2081 if (decl == void_type_node)
2082 /* The COMPONENT was a friend, not a member, and so there's
2083 nothing for us to do. */
2084 return;
2086 /* We should see only one DECL at a time. */
2087 my_friendly_assert (TREE_CHAIN (decl) == NULL_TREE, 0);
2089 /* Set up access control for DECL. */
2090 TREE_PRIVATE (decl)
2091 = (current_access_specifier == access_private_node);
2092 TREE_PROTECTED (decl)
2093 = (current_access_specifier == access_protected_node);
2094 if (TREE_CODE (decl) == TEMPLATE_DECL)
2096 TREE_PRIVATE (DECL_TEMPLATE_RESULT (decl)) = TREE_PRIVATE (decl);
2097 TREE_PROTECTED (DECL_TEMPLATE_RESULT (decl)) = TREE_PROTECTED (decl);
2100 /* Mark the DECL as a member of the current class. */
2101 DECL_CONTEXT (decl) = current_class_type;
2103 /* [dcl.link]
2105 A C language linkage is ignored for the names of class members
2106 and the member function type of class member functions. */
2107 if (DECL_LANG_SPECIFIC (decl) && DECL_LANGUAGE (decl) == lang_c)
2108 SET_DECL_LANGUAGE (decl, lang_cplusplus);
2110 /* Put functions on the TYPE_METHODS list and everything else on the
2111 TYPE_FIELDS list. Note that these are built up in reverse order.
2112 We reverse them (to obtain declaration order) in finish_struct. */
2113 if (TREE_CODE (decl) == FUNCTION_DECL
2114 || DECL_FUNCTION_TEMPLATE_P (decl))
2116 /* We also need to add this function to the
2117 CLASSTYPE_METHOD_VEC. */
2118 add_method (current_class_type, decl, /*error_p=*/0);
2120 TREE_CHAIN (decl) = TYPE_METHODS (current_class_type);
2121 TYPE_METHODS (current_class_type) = decl;
2123 maybe_add_class_template_decl_list (current_class_type, decl,
2124 /*friend_p=*/0);
2126 /* Enter the DECL into the scope of the class. */
2127 else if ((TREE_CODE (decl) == USING_DECL && TREE_TYPE (decl))
2128 || pushdecl_class_level (decl))
2130 /* All TYPE_DECLs go at the end of TYPE_FIELDS. Ordinary fields
2131 go at the beginning. The reason is that lookup_field_1
2132 searches the list in order, and we want a field name to
2133 override a type name so that the "struct stat hack" will
2134 work. In particular:
2136 struct S { enum E { }; int E } s;
2137 s.E = 3;
2139 is valid. In addition, the FIELD_DECLs must be maintained in
2140 declaration order so that class layout works as expected.
2141 However, we don't need that order until class layout, so we
2142 save a little time by putting FIELD_DECLs on in reverse order
2143 here, and then reversing them in finish_struct_1. (We could
2144 also keep a pointer to the correct insertion points in the
2145 list.) */
2147 if (TREE_CODE (decl) == TYPE_DECL)
2148 TYPE_FIELDS (current_class_type)
2149 = chainon (TYPE_FIELDS (current_class_type), decl);
2150 else
2152 TREE_CHAIN (decl) = TYPE_FIELDS (current_class_type);
2153 TYPE_FIELDS (current_class_type) = decl;
2156 maybe_add_class_template_decl_list (current_class_type, decl,
2157 /*friend_p=*/0);
2161 /* Finish processing the declaration of a member class template
2162 TYPES whose template parameters are given by PARMS. */
2164 tree
2165 finish_member_class_template (tree types)
2167 tree t;
2169 /* If there are declared, but undefined, partial specializations
2170 mixed in with the typespecs they will not yet have passed through
2171 maybe_process_partial_specialization, so we do that here. */
2172 for (t = types; t != NULL_TREE; t = TREE_CHAIN (t))
2173 if (IS_AGGR_TYPE_CODE (TREE_CODE (TREE_VALUE (t))))
2174 maybe_process_partial_specialization (TREE_VALUE (t));
2176 grok_x_components (types);
2177 if (TYPE_CONTEXT (TREE_VALUE (types)) != current_class_type)
2178 /* The component was in fact a friend declaration. We avoid
2179 finish_member_template_decl performing certain checks by
2180 unsetting TYPES. */
2181 types = NULL_TREE;
2183 finish_member_template_decl (types);
2185 /* As with other component type declarations, we do
2186 not store the new DECL on the list of
2187 component_decls. */
2188 return NULL_TREE;
2191 /* Finish processing a complete template declaration. The PARMS are
2192 the template parameters. */
2194 void
2195 finish_template_decl (tree parms)
2197 if (parms)
2198 end_template_decl ();
2199 else
2200 end_specialization ();
2203 /* Finish processing a template-id (which names a type) of the form
2204 NAME < ARGS >. Return the TYPE_DECL for the type named by the
2205 template-id. If ENTERING_SCOPE is nonzero we are about to enter
2206 the scope of template-id indicated. */
2208 tree
2209 finish_template_type (tree name, tree args, int entering_scope)
2211 tree decl;
2213 decl = lookup_template_class (name, args,
2214 NULL_TREE, NULL_TREE, entering_scope,
2215 tf_error | tf_warning | tf_user);
2216 if (decl != error_mark_node)
2217 decl = TYPE_STUB_DECL (decl);
2219 return decl;
2222 /* Finish processing a BASE_CLASS with the indicated ACCESS_SPECIFIER.
2223 Return a TREE_LIST containing the ACCESS_SPECIFIER and the
2224 BASE_CLASS, or NULL_TREE if an error occurred. The
2225 ACCESS_SPECIFIER is one of
2226 access_{default,public,protected_private}[_virtual]_node.*/
2228 tree
2229 finish_base_specifier (tree base, tree access, bool virtual_p)
2231 tree result;
2233 if (base == error_mark_node)
2235 error ("invalid base-class specification");
2236 result = NULL_TREE;
2238 else if (! is_aggr_type (base, 1))
2239 result = NULL_TREE;
2240 else
2242 if (cp_type_quals (base) != 0)
2244 error ("base class `%T' has cv qualifiers", base);
2245 base = TYPE_MAIN_VARIANT (base);
2247 result = build_tree_list (access, base);
2248 TREE_VIA_VIRTUAL (result) = virtual_p;
2251 return result;
2254 /* Called when multiple declarators are processed. If that is not
2255 permitted in this context, an error is issued. */
2257 void
2258 check_multiple_declarators (void)
2260 /* [temp]
2262 In a template-declaration, explicit specialization, or explicit
2263 instantiation the init-declarator-list in the declaration shall
2264 contain at most one declarator.
2266 We don't just use PROCESSING_TEMPLATE_DECL for the first
2267 condition since that would disallow the perfectly valid code,
2268 like `template <class T> struct S { int i, j; };'. */
2269 if (at_function_scope_p ())
2270 /* It's OK to write `template <class T> void f() { int i, j;}'. */
2271 return;
2273 if (PROCESSING_REAL_TEMPLATE_DECL_P ()
2274 || processing_explicit_instantiation
2275 || processing_specialization)
2276 error ("multiple declarators in template declaration");
2279 /* Issue a diagnostic that NAME cannot be found in SCOPE. */
2281 void
2282 qualified_name_lookup_error (tree scope, tree name)
2284 if (TYPE_P (scope))
2286 if (!COMPLETE_TYPE_P (scope))
2287 error ("incomplete type `%T' used in nested name specifier", scope);
2288 else
2289 error ("`%D' is not a member of `%T'", name, scope);
2291 else if (scope != global_namespace)
2292 error ("`%D' is not a member of `%D'", name, scope);
2293 else
2294 error ("`::%D' has not been declared", name);
2297 /* ID_EXPRESSION is a representation of parsed, but unprocessed,
2298 id-expression. (See cp_parser_id_expression for details.) SCOPE,
2299 if non-NULL, is the type or namespace used to explicitly qualify
2300 ID_EXPRESSION. DECL is the entity to which that name has been
2301 resolved.
2303 *CONSTANT_EXPRESSION_P is true if we are presently parsing a
2304 constant-expression. In that case, *NON_CONSTANT_EXPRESSION_P will
2305 be set to true if this expression isn't permitted in a
2306 constant-expression, but it is otherwise not set by this function.
2307 *ALLOW_NON_CONSTANT_EXPRESSION_P is true if we are parsing a
2308 constant-expression, but a non-constant expression is also
2309 permissible.
2311 If an error occurs, and it is the kind of error that might cause
2312 the parser to abort a tentative parse, *ERROR_MSG is filled in. It
2313 is the caller's responsibility to issue the message. *ERROR_MSG
2314 will be a string with static storage duration, so the caller need
2315 not "free" it.
2317 Return an expression for the entity, after issuing appropriate
2318 diagnostics. This function is also responsible for transforming a
2319 reference to a non-static member into a COMPONENT_REF that makes
2320 the use of "this" explicit.
2322 Upon return, *IDK will be filled in appropriately. */
2324 tree
2325 finish_id_expression (tree id_expression,
2326 tree decl,
2327 tree scope,
2328 cp_id_kind *idk,
2329 tree *qualifying_class,
2330 bool integral_constant_expression_p,
2331 bool allow_non_integral_constant_expression_p,
2332 bool *non_integral_constant_expression_p,
2333 const char **error_msg)
2335 /* Initialize the output parameters. */
2336 *idk = CP_ID_KIND_NONE;
2337 *error_msg = NULL;
2339 if (id_expression == error_mark_node)
2340 return error_mark_node;
2341 /* If we have a template-id, then no further lookup is
2342 required. If the template-id was for a template-class, we
2343 will sometimes have a TYPE_DECL at this point. */
2344 else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
2345 || TREE_CODE (decl) == TYPE_DECL)
2347 /* Look up the name. */
2348 else
2350 if (decl == error_mark_node)
2352 /* Name lookup failed. */
2353 if (scope && (!TYPE_P (scope) || !dependent_type_p (scope)))
2355 /* Qualified name lookup failed, and the qualifying name
2356 was not a dependent type. That is always an
2357 error. */
2358 qualified_name_lookup_error (scope, id_expression);
2359 return error_mark_node;
2361 else if (!scope)
2363 /* It may be resolved via Koenig lookup. */
2364 *idk = CP_ID_KIND_UNQUALIFIED;
2365 return id_expression;
2368 /* If DECL is a variable that would be out of scope under
2369 ANSI/ISO rules, but in scope in the ARM, name lookup
2370 will succeed. Issue a diagnostic here. */
2371 else
2372 decl = check_for_out_of_scope_variable (decl);
2374 /* Remember that the name was used in the definition of
2375 the current class so that we can check later to see if
2376 the meaning would have been different after the class
2377 was entirely defined. */
2378 if (!scope && decl != error_mark_node)
2379 maybe_note_name_used_in_class (id_expression, decl);
2382 /* If we didn't find anything, or what we found was a type,
2383 then this wasn't really an id-expression. */
2384 if (TREE_CODE (decl) == TEMPLATE_DECL
2385 && !DECL_FUNCTION_TEMPLATE_P (decl))
2387 *error_msg = "missing template arguments";
2388 return error_mark_node;
2390 else if (TREE_CODE (decl) == TYPE_DECL
2391 || TREE_CODE (decl) == NAMESPACE_DECL)
2393 *error_msg = "expected primary-expression";
2394 return error_mark_node;
2397 /* If the name resolved to a template parameter, there is no
2398 need to look it up again later. */
2399 if ((TREE_CODE (decl) == CONST_DECL && DECL_TEMPLATE_PARM_P (decl))
2400 || TREE_CODE (decl) == TEMPLATE_PARM_INDEX)
2402 *idk = CP_ID_KIND_NONE;
2403 if (TREE_CODE (decl) == TEMPLATE_PARM_INDEX)
2404 decl = TEMPLATE_PARM_DECL (decl);
2405 if (integral_constant_expression_p
2406 && !dependent_type_p (TREE_TYPE (decl))
2407 && !INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (decl)))
2409 if (!allow_non_integral_constant_expression_p)
2410 error ("template parameter `%D' of type `%T' is not allowed in "
2411 "an integral constant expression because it is not of "
2412 "integral or enumeration type", decl, TREE_TYPE (decl));
2413 *non_integral_constant_expression_p = true;
2415 return DECL_INITIAL (decl);
2417 /* Similarly, we resolve enumeration constants to their
2418 underlying values. */
2419 else if (TREE_CODE (decl) == CONST_DECL)
2421 *idk = CP_ID_KIND_NONE;
2422 if (!processing_template_decl)
2423 return DECL_INITIAL (decl);
2424 return decl;
2426 else
2428 bool dependent_p;
2430 /* If the declaration was explicitly qualified indicate
2431 that. The semantics of `A::f(3)' are different than
2432 `f(3)' if `f' is virtual. */
2433 *idk = (scope
2434 ? CP_ID_KIND_QUALIFIED
2435 : (TREE_CODE (decl) == TEMPLATE_ID_EXPR
2436 ? CP_ID_KIND_TEMPLATE_ID
2437 : CP_ID_KIND_UNQUALIFIED));
2440 /* [temp.dep.expr]
2442 An id-expression is type-dependent if it contains an
2443 identifier that was declared with a dependent type.
2445 The standard is not very specific about an id-expression that
2446 names a set of overloaded functions. What if some of them
2447 have dependent types and some of them do not? Presumably,
2448 such a name should be treated as a dependent name. */
2449 /* Assume the name is not dependent. */
2450 dependent_p = false;
2451 if (!processing_template_decl)
2452 /* No names are dependent outside a template. */
2454 /* A template-id where the name of the template was not resolved
2455 is definitely dependent. */
2456 else if (TREE_CODE (decl) == TEMPLATE_ID_EXPR
2457 && (TREE_CODE (TREE_OPERAND (decl, 0))
2458 == IDENTIFIER_NODE))
2459 dependent_p = true;
2460 /* For anything except an overloaded function, just check its
2461 type. */
2462 else if (!is_overloaded_fn (decl))
2463 dependent_p
2464 = dependent_type_p (TREE_TYPE (decl));
2465 /* For a set of overloaded functions, check each of the
2466 functions. */
2467 else
2469 tree fns = decl;
2471 if (BASELINK_P (fns))
2472 fns = BASELINK_FUNCTIONS (fns);
2474 /* For a template-id, check to see if the template
2475 arguments are dependent. */
2476 if (TREE_CODE (fns) == TEMPLATE_ID_EXPR)
2478 tree args = TREE_OPERAND (fns, 1);
2479 dependent_p = any_dependent_template_arguments_p (args);
2480 /* The functions are those referred to by the
2481 template-id. */
2482 fns = TREE_OPERAND (fns, 0);
2485 /* If there are no dependent template arguments, go through
2486 the overloaded functions. */
2487 while (fns && !dependent_p)
2489 tree fn = OVL_CURRENT (fns);
2491 /* Member functions of dependent classes are
2492 dependent. */
2493 if (TREE_CODE (fn) == FUNCTION_DECL
2494 && type_dependent_expression_p (fn))
2495 dependent_p = true;
2496 else if (TREE_CODE (fn) == TEMPLATE_DECL
2497 && dependent_template_p (fn))
2498 dependent_p = true;
2500 fns = OVL_NEXT (fns);
2504 /* If the name was dependent on a template parameter, we will
2505 resolve the name at instantiation time. */
2506 if (dependent_p)
2508 /* Create a SCOPE_REF for qualified names, if the scope is
2509 dependent. */
2510 if (scope)
2512 if (TYPE_P (scope))
2513 *qualifying_class = scope;
2514 /* Since this name was dependent, the expression isn't
2515 constant -- yet. No error is issued because it might
2516 be constant when things are instantiated. */
2517 if (integral_constant_expression_p)
2518 *non_integral_constant_expression_p = true;
2519 if (TYPE_P (scope) && dependent_type_p (scope))
2520 return build_nt (SCOPE_REF, scope, id_expression);
2521 else if (TYPE_P (scope) && DECL_P (decl))
2522 return build (SCOPE_REF, TREE_TYPE (decl), scope,
2523 id_expression);
2524 else
2525 return decl;
2527 /* A TEMPLATE_ID already contains all the information we
2528 need. */
2529 if (TREE_CODE (id_expression) == TEMPLATE_ID_EXPR)
2530 return id_expression;
2531 /* Since this name was dependent, the expression isn't
2532 constant -- yet. No error is issued because it might be
2533 constant when things are instantiated. */
2534 if (integral_constant_expression_p)
2535 *non_integral_constant_expression_p = true;
2536 *idk = CP_ID_KIND_UNQUALIFIED_DEPENDENT;
2537 /* If we found a variable, then name lookup during the
2538 instantiation will always resolve to the same VAR_DECL
2539 (or an instantiation thereof). */
2540 if (TREE_CODE (decl) == VAR_DECL
2541 || TREE_CODE (decl) == PARM_DECL)
2542 return decl;
2543 return id_expression;
2546 /* Only certain kinds of names are allowed in constant
2547 expression. Enumerators and template parameters
2548 have already been handled above. */
2549 if (integral_constant_expression_p)
2551 /* Const variables or static data members of integral or
2552 enumeration types initialized with constant expressions
2553 are OK. */
2554 if (TREE_CODE (decl) == VAR_DECL
2555 && CP_TYPE_CONST_P (TREE_TYPE (decl))
2556 && INTEGRAL_OR_ENUMERATION_TYPE_P (TREE_TYPE (decl))
2557 && DECL_INITIALIZED_BY_CONSTANT_EXPRESSION_P (decl))
2559 else
2561 if (!allow_non_integral_constant_expression_p)
2563 error ("`%D' cannot appear in a constant-expression", decl);
2564 return error_mark_node;
2566 *non_integral_constant_expression_p = true;
2570 if (TREE_CODE (decl) == NAMESPACE_DECL)
2572 error ("use of namespace `%D' as expression", decl);
2573 return error_mark_node;
2575 else if (DECL_CLASS_TEMPLATE_P (decl))
2577 error ("use of class template `%T' as expression", decl);
2578 return error_mark_node;
2580 else if (TREE_CODE (decl) == TREE_LIST)
2582 /* Ambiguous reference to base members. */
2583 error ("request for member `%D' is ambiguous in "
2584 "multiple inheritance lattice", id_expression);
2585 print_candidates (decl);
2586 return error_mark_node;
2589 /* Mark variable-like entities as used. Functions are similarly
2590 marked either below or after overload resolution. */
2591 if (TREE_CODE (decl) == VAR_DECL
2592 || TREE_CODE (decl) == PARM_DECL
2593 || TREE_CODE (decl) == RESULT_DECL)
2594 mark_used (decl);
2596 if (scope)
2598 decl = (adjust_result_of_qualified_name_lookup
2599 (decl, scope, current_class_type));
2601 if (TREE_CODE (decl) == FUNCTION_DECL)
2602 mark_used (decl);
2604 if (TREE_CODE (decl) == FIELD_DECL || BASELINK_P (decl))
2605 *qualifying_class = scope;
2606 else if (!processing_template_decl)
2607 decl = convert_from_reference (decl);
2608 else if (TYPE_P (scope))
2609 decl = build (SCOPE_REF, TREE_TYPE (decl), scope, decl);
2611 else if (TREE_CODE (decl) == FIELD_DECL)
2612 decl = finish_non_static_data_member (decl, current_class_ref,
2613 /*qualifying_scope=*/NULL_TREE);
2614 else if (is_overloaded_fn (decl))
2616 tree first_fn = OVL_CURRENT (decl);
2618 if (TREE_CODE (first_fn) == TEMPLATE_DECL)
2619 first_fn = DECL_TEMPLATE_RESULT (first_fn);
2621 if (!really_overloaded_fn (decl))
2622 mark_used (first_fn);
2624 if (TREE_CODE (first_fn) == FUNCTION_DECL
2625 && DECL_FUNCTION_MEMBER_P (first_fn))
2627 /* A set of member functions. */
2628 decl = maybe_dummy_object (DECL_CONTEXT (first_fn), 0);
2629 return finish_class_member_access_expr (decl, id_expression);
2632 else
2634 if (TREE_CODE (decl) == VAR_DECL
2635 || TREE_CODE (decl) == PARM_DECL
2636 || TREE_CODE (decl) == RESULT_DECL)
2638 tree context = decl_function_context (decl);
2640 if (context != NULL_TREE && context != current_function_decl
2641 && ! TREE_STATIC (decl))
2643 error ("use of %s from containing function",
2644 (TREE_CODE (decl) == VAR_DECL
2645 ? "`auto' variable" : "parameter"));
2646 cp_error_at (" `%#D' declared here", decl);
2647 return error_mark_node;
2651 if (DECL_P (decl) && DECL_NONLOCAL (decl)
2652 && DECL_CLASS_SCOPE_P (decl)
2653 && DECL_CONTEXT (decl) != current_class_type)
2655 tree path;
2657 path = currently_open_derived_class (DECL_CONTEXT (decl));
2658 perform_or_defer_access_check (TYPE_BINFO (path), decl);
2661 if (! processing_template_decl)
2662 decl = convert_from_reference (decl);
2665 /* Resolve references to variables of anonymous unions
2666 into COMPONENT_REFs. */
2667 if (TREE_CODE (decl) == ALIAS_DECL)
2668 decl = DECL_INITIAL (decl);
2671 if (TREE_DEPRECATED (decl))
2672 warn_deprecated_use (decl);
2674 return decl;
2677 /* Implement the __typeof keyword: Return the type of EXPR, suitable for
2678 use as a type-specifier. */
2680 tree
2681 finish_typeof (tree expr)
2683 tree type;
2685 if (type_dependent_expression_p (expr))
2687 type = make_aggr_type (TYPEOF_TYPE);
2688 TYPEOF_TYPE_EXPR (type) = expr;
2690 return type;
2693 type = TREE_TYPE (expr);
2695 if (!type || type == unknown_type_node)
2697 error ("type of `%E' is unknown", expr);
2698 return error_mark_node;
2701 return type;
2704 /* Generate RTL for the statement T, and its substatements, and any
2705 other statements at its nesting level. */
2707 static void
2708 cp_expand_stmt (tree t)
2710 switch (TREE_CODE (t))
2712 case TRY_BLOCK:
2713 genrtl_try_block (t);
2714 break;
2716 case EH_SPEC_BLOCK:
2717 genrtl_eh_spec_block (t);
2718 break;
2720 case HANDLER:
2721 genrtl_handler (t);
2722 break;
2724 case USING_STMT:
2725 break;
2727 default:
2728 abort ();
2729 break;
2733 /* Called from expand_body via walk_tree. Replace all AGGR_INIT_EXPRs
2734 will equivalent CALL_EXPRs. */
2736 static tree
2737 simplify_aggr_init_exprs_r (tree* tp,
2738 int* walk_subtrees,
2739 void* data ATTRIBUTE_UNUSED)
2741 /* We don't need to walk into types; there's nothing in a type that
2742 needs simplification. (And, furthermore, there are places we
2743 actively don't want to go. For example, we don't want to wander
2744 into the default arguments for a FUNCTION_DECL that appears in a
2745 CALL_EXPR.) */
2746 if (TYPE_P (*tp))
2748 *walk_subtrees = 0;
2749 return NULL_TREE;
2751 /* Only AGGR_INIT_EXPRs are interesting. */
2752 else if (TREE_CODE (*tp) != AGGR_INIT_EXPR)
2753 return NULL_TREE;
2755 simplify_aggr_init_expr (tp);
2757 /* Keep iterating. */
2758 return NULL_TREE;
2761 /* Replace the AGGR_INIT_EXPR at *TP with an equivalent CALL_EXPR. This
2762 function is broken out from the above for the benefit of the tree-ssa
2763 project. */
2765 void
2766 simplify_aggr_init_expr (tree *tp)
2768 tree aggr_init_expr = *tp;
2770 /* Form an appropriate CALL_EXPR. */
2771 tree fn = TREE_OPERAND (aggr_init_expr, 0);
2772 tree args = TREE_OPERAND (aggr_init_expr, 1);
2773 tree slot = TREE_OPERAND (aggr_init_expr, 2);
2774 tree type = TREE_TYPE (aggr_init_expr);
2776 tree call_expr;
2777 enum style_t { ctor, arg, pcc } style;
2779 if (AGGR_INIT_VIA_CTOR_P (aggr_init_expr))
2780 style = ctor;
2781 #ifdef PCC_STATIC_STRUCT_RETURN
2782 else if (1)
2783 style = pcc;
2784 #endif
2785 else if (TREE_ADDRESSABLE (type))
2786 style = arg;
2787 else
2788 /* We shouldn't build an AGGR_INIT_EXPR if we don't need any special
2789 handling. See build_cplus_new. */
2790 abort ();
2792 if (style == ctor || style == arg)
2794 /* Pass the address of the slot. If this is a constructor, we
2795 replace the first argument; otherwise, we tack on a new one. */
2796 tree addr;
2798 if (style == ctor)
2799 args = TREE_CHAIN (args);
2801 cxx_mark_addressable (slot);
2802 addr = build1 (ADDR_EXPR, build_pointer_type (TREE_TYPE (slot)), slot);
2803 if (style == arg)
2805 /* The return type might have different cv-quals from the slot. */
2806 tree fntype = TREE_TYPE (TREE_TYPE (fn));
2807 #ifdef ENABLE_CHECKING
2808 if (TREE_CODE (fntype) != FUNCTION_TYPE
2809 && TREE_CODE (fntype) != METHOD_TYPE)
2810 abort ();
2811 #endif
2812 addr = convert (build_pointer_type (TREE_TYPE (fntype)), addr);
2815 args = tree_cons (NULL_TREE, addr, args);
2818 call_expr = build (CALL_EXPR,
2819 TREE_TYPE (TREE_TYPE (TREE_TYPE (fn))),
2820 fn, args, NULL_TREE);
2822 if (style == arg)
2823 /* Tell the backend that we've added our return slot to the argument
2824 list. */
2825 CALL_EXPR_HAS_RETURN_SLOT_ADDR (call_expr) = 1;
2826 else if (style == pcc)
2828 /* If we're using the non-reentrant PCC calling convention, then we
2829 need to copy the returned value out of the static buffer into the
2830 SLOT. */
2831 push_deferring_access_checks (dk_no_check);
2832 call_expr = build_aggr_init (slot, call_expr,
2833 DIRECT_BIND | LOOKUP_ONLYCONVERTING);
2834 pop_deferring_access_checks ();
2837 /* We want to use the value of the initialized location as the
2838 result. */
2839 call_expr = build (COMPOUND_EXPR, type,
2840 call_expr, slot);
2842 /* Replace the AGGR_INIT_EXPR with the CALL_EXPR. */
2843 TREE_CHAIN (call_expr) = TREE_CHAIN (aggr_init_expr);
2844 *tp = call_expr;
2847 /* Emit all thunks to FN that should be emitted when FN is emitted. */
2849 static void
2850 emit_associated_thunks (tree fn)
2852 /* When we use vcall offsets, we emit thunks with the virtual
2853 functions to which they thunk. The whole point of vcall offsets
2854 is so that you can know statically the entire set of thunks that
2855 will ever be needed for a given virtual function, thereby
2856 enabling you to output all the thunks with the function itself. */
2857 if (DECL_VIRTUAL_P (fn))
2859 tree thunk;
2861 for (thunk = DECL_THUNKS (fn); thunk; thunk = TREE_CHAIN (thunk))
2863 if (!THUNK_ALIAS (thunk))
2865 use_thunk (thunk, /*emit_p=*/1);
2866 if (DECL_RESULT_THUNK_P (thunk))
2868 tree probe;
2870 for (probe = DECL_THUNKS (thunk);
2871 probe; probe = TREE_CHAIN (probe))
2872 use_thunk (probe, /*emit_p=*/1);
2875 else
2876 my_friendly_assert (!DECL_THUNKS (thunk), 20031023);
2881 /* Generate RTL for FN. */
2883 void
2884 expand_body (tree fn)
2886 tree saved_function;
2888 /* Compute the appropriate object-file linkage for inline
2889 functions. */
2890 if (DECL_DECLARED_INLINE_P (fn))
2891 import_export_decl (fn);
2893 /* If FN is external, then there's no point in generating RTL for
2894 it. This situation can arise with an inline function under
2895 `-fexternal-templates'; we instantiate the function, even though
2896 we're not planning on emitting it, in case we get a chance to
2897 inline it. */
2898 if (DECL_EXTERNAL (fn))
2899 return;
2901 /* ??? When is this needed? */
2902 saved_function = current_function_decl;
2904 /* Emit any thunks that should be emitted at the same time as FN. */
2905 emit_associated_thunks (fn);
2907 timevar_push (TV_INTEGRATION);
2908 optimize_function (fn);
2909 timevar_pop (TV_INTEGRATION);
2911 tree_rest_of_compilation (fn, function_depth > 1);
2913 current_function_decl = saved_function;
2915 extract_interface_info ();
2917 /* If this function is marked with the constructor attribute, add it
2918 to the list of functions to be called along with constructors
2919 from static duration objects. */
2920 if (DECL_STATIC_CONSTRUCTOR (fn))
2921 static_ctors = tree_cons (NULL_TREE, fn, static_ctors);
2923 /* If this function is marked with the destructor attribute, add it
2924 to the list of functions to be called along with destructors from
2925 static duration objects. */
2926 if (DECL_STATIC_DESTRUCTOR (fn))
2927 static_dtors = tree_cons (NULL_TREE, fn, static_dtors);
2929 if (DECL_CLONED_FUNCTION_P (fn))
2931 /* If this is a clone, go through the other clones now and mark
2932 their parameters used. We have to do that here, as we don't
2933 know whether any particular clone will be expanded, and
2934 therefore cannot pick one arbitrarily. */
2935 tree probe;
2937 for (probe = TREE_CHAIN (DECL_CLONED_FUNCTION (fn));
2938 probe && DECL_CLONED_FUNCTION_P (probe);
2939 probe = TREE_CHAIN (probe))
2941 tree parms;
2943 for (parms = DECL_ARGUMENTS (probe);
2944 parms; parms = TREE_CHAIN (parms))
2945 TREE_USED (parms) = 1;
2950 /* Generate RTL for FN. */
2952 void
2953 expand_or_defer_fn (tree fn)
2955 /* When the parser calls us after finishing the body of a template
2956 function, we don't really want to expand the body. */
2957 if (processing_template_decl)
2959 /* Normally, collection only occurs in rest_of_compilation. So,
2960 if we don't collect here, we never collect junk generated
2961 during the processing of templates until we hit a
2962 non-template function. */
2963 ggc_collect ();
2964 return;
2967 /* Replace AGGR_INIT_EXPRs with appropriate CALL_EXPRs. */
2968 walk_tree_without_duplicates (&DECL_SAVED_TREE (fn),
2969 simplify_aggr_init_exprs_r,
2970 NULL);
2972 /* If this is a constructor or destructor body, we have to clone
2973 it. */
2974 if (maybe_clone_body (fn))
2976 /* We don't want to process FN again, so pretend we've written
2977 it out, even though we haven't. */
2978 TREE_ASM_WRITTEN (fn) = 1;
2979 return;
2982 /* There's no reason to do any of the work here if we're only doing
2983 semantic analysis; this code just generates RTL. */
2984 if (flag_syntax_only)
2985 return;
2987 /* Compute the appropriate object-file linkage for inline functions. */
2988 if (DECL_DECLARED_INLINE_P (fn))
2989 import_export_decl (fn);
2991 function_depth++;
2993 /* Expand or defer, at the whim of the compilation unit manager. */
2994 cgraph_finalize_function (fn, function_depth > 1);
2996 function_depth--;
2999 /* Helper function for walk_tree, used by finish_function to override all
3000 the RETURN_STMTs and pertinent CLEANUP_STMTs for the named return
3001 value optimization. */
3003 tree
3004 nullify_returns_r (tree* tp, int* walk_subtrees, void* data)
3006 tree nrv = (tree) data;
3008 /* No need to walk into types. There wouldn't be any need to walk into
3009 non-statements, except that we have to consider STMT_EXPRs. */
3010 if (TYPE_P (*tp))
3011 *walk_subtrees = 0;
3012 else if (TREE_CODE (*tp) == RETURN_STMT)
3013 RETURN_STMT_EXPR (*tp) = NULL_TREE;
3014 else if (TREE_CODE (*tp) == CLEANUP_STMT
3015 && CLEANUP_DECL (*tp) == nrv)
3016 CLEANUP_EH_ONLY (*tp) = 1;
3018 /* Keep iterating. */
3019 return NULL_TREE;
3022 /* Start generating the RTL for FN. */
3024 void
3025 cxx_expand_function_start (void)
3027 /* Give our named return value the same RTL as our RESULT_DECL. */
3028 if (current_function_return_value)
3029 COPY_DECL_RTL (DECL_RESULT (cfun->decl), current_function_return_value);
3032 /* Perform initialization related to this module. */
3034 void
3035 init_cp_semantics (void)
3037 lang_expand_stmt = cp_expand_stmt;
3040 #include "gt-cp-semantics.h"